From f64cfeda22720c09b5ad03cccc607e09b258cc7f Mon Sep 17 00:00:00 2001 From: Satyaki Ghosh Date: Thu, 8 Oct 2026 11:49:14 -0400 Subject: [PATCH 1/8] Fix exponential memory use from independent Fn::If conditions and YAML aliases --- src/cel-engine/src/rules/best_practices.rs | 24 +- src/cel-engine/src/rules/resources_extra.rs | 40 +- src/cfn-validate/tests/security_tests.rs | 61 +++ .../rego/best_practices/tagging.rego | 5 +- src/rego-engine/src/builtins.rs | 24 +- .../expected/validation_reports8.json | 345 +++++++++++++++++ src/resources/security/generate.py | 191 ++++++++++ .../independent_conditions_list_items.yaml | 101 +++++ .../independent_conditions_object_keys.yaml | 105 ++++++ .../independent_conditions_properties.yaml | 103 ++++++ .../independent_conditions_statements.yaml | 101 +++++ .../security/yaml_alias_expansion.yaml | 18 + src/schema-validator/src/validate.rs | 347 ++++++++++++++---- src/template-model/src/consts.rs | 25 ++ src/template-model/src/dynamodb.rs | 17 +- src/template-model/src/iam_policy.rs | 2 +- src/template-model/src/lib.rs | 1 + src/template-model/src/member_presence.rs | 302 +++++++++++++++ src/template-model/src/model.rs | 176 +++++++-- src/template-model/src/parser/yaml.rs | 87 +++++ src/template-model/src/resolved_value.rs | 225 +++++++++++- 21 files changed, 2158 insertions(+), 142 deletions(-) create mode 100644 src/resources/security/independent_conditions_list_items.yaml create mode 100644 src/resources/security/independent_conditions_object_keys.yaml create mode 100644 src/resources/security/independent_conditions_properties.yaml create mode 100644 src/resources/security/independent_conditions_statements.yaml create mode 100644 src/resources/security/yaml_alias_expansion.yaml create mode 100644 src/template-model/src/member_presence.rs diff --git a/src/cel-engine/src/rules/best_practices.rs b/src/cel-engine/src/rules/best_practices.rs index a46ae35f..bd3370cd 100644 --- a/src/cel-engine/src/rules/best_practices.rs +++ b/src/cel-engine/src/rules/best_practices.rs @@ -1,5 +1,5 @@ use super::patterns::AMI_ID_RE; -use super::resources_extra::{scenario_has_effective_property, scenario_is_reachable}; +use super::resources_extra::scenario_is_reachable; use super::{EvalContext, NativeRuleRegistry}; use data_source::rule_data::{PathSegment, ResourcePropertyPath}; use diagnostics::Diagnostic; @@ -126,11 +126,16 @@ fn rds_storage_encryption_scenario_warns(properties: &ResolvedValue) -> bool { } fn rds_storage_encryption_warns(model: &SemanticModel, resource_id: &str) -> bool { - model.resolve_properties_scenarios(resource_id).into_iter().any(|(properties, conditions)| { - let assumptions: Vec<(String, bool)> = conditions.into_iter().collect(); - (assumptions.is_empty() || model.conditions.is_satisfiable(&assumptions)) - && rds_storage_encryption_scenario_warns(&properties) - }) + let mut inspected_fields = vec!["Engine", "StorageEncrypted"]; + inspected_fields.extend(RDS_INHERITED_OR_IGNORED_ENCRYPTION_FIELDS); + model.resolve_properties_scenarios_projected(resource_id, &inspected_fields).iter().any( + |(properties, conditions)| { + let assumptions: Vec<(String, bool)> = + conditions.iter().map(|(name, value)| (name.clone(), *value)).collect(); + (assumptions.is_empty() || model.conditions.is_satisfiable(&assumptions)) + && rds_storage_encryption_scenario_warns(properties) + }, + ) } fn eval_best_practices(ctx: &EvalContext) -> Vec { @@ -519,9 +524,10 @@ None, .get(&res.resource_type) .map(|entry| entry.properties.iter().any(|p| p == "Tags")) .unwrap_or(false); - let tags_missing = m.resolve_properties_scenarios(name).iter().any(|(properties, conditions)| { - scenario_is_reachable(m, name, conditions) && !scenario_has_effective_property(properties, "Tags") - }); + let tags_missing = m + .property_absence_scenarios(name, "Tags") + .iter() + .any(|conditions| scenario_is_reachable(m, name, conditions)); if supports_tags && tags_missing { out.push(make_resource_diagnostic( "I9040", diff --git a/src/cel-engine/src/rules/resources_extra.rs b/src/cel-engine/src/rules/resources_extra.rs index 8474afc0..85bb071f 100644 --- a/src/cel-engine/src/rules/resources_extra.rs +++ b/src/cel-engine/src/rules/resources_extra.rs @@ -1951,9 +1951,12 @@ pub fn eval_extra_resources(ctx: &EvalContext) -> Vec { } for name in m.resources_of_type("AWS::Lambda::Function") { - if let Some(snap) = resolve_concrete(m, name, "Properties.SnapStart") - && snap.get("ApplyOn").and_then(|a| a.as_str()) == Some("PublishedVersions") - { + // SnapStart gated by a condition is enabled in the deployments where that + // condition holds, so every branch value counts, not only a fixed one. + let snapstart_publishes_versions = resolve_all_json(m, name, "Properties.SnapStart") + .iter() + .any(|snap| snap.get("ApplyOn").and_then(|a| a.as_str()) == Some("PublishedVersions")); + if snapstart_publishes_versions { let version_refs = m.graph.ref_sources(name); let has_ver = version_refs .iter() @@ -3452,20 +3455,22 @@ pub fn eval_extra_resources(ctx: &EvalContext) -> Vec { // Route53 RecordSet validation for name in m.resources_of_type("AWS::Route53::RecordSet") { - for (properties, conditions) in m.resolve_properties_scenarios(name) { - if !scenario_is_reachable(m, name, &conditions) { + let scenarios = + m.resolve_properties_scenarios_projected(name, &["HostedZoneName", "Name", "ResourceRecords", "Type"]); + for (properties, conditions) in scenarios.iter() { + if !scenario_is_reachable(m, name, conditions) { continue; } - let Some(serde_json::Value::String(record_type)) = scenario_property_json(&properties, "Type") else { + let Some(serde_json::Value::String(record_type)) = scenario_property_json(properties, "Type") else { continue; }; if record_type == "CNAME" && let (Some(serde_json::Value::String(record_name)), Some(serde_json::Value::String(hosted_zone_name))) = - (scenario_property_json(&properties, "Name"), scenario_property_json(&properties, "HostedZoneName")) + (scenario_property_json(properties, "Name"), scenario_property_json(properties, "HostedZoneName")) && record_name.trim_end_matches('.') == hosted_zone_name.trim_end_matches('.') { let property_path = "Properties.Name"; - let source_path = route53_scenario_source_path(m, name, property_path, &conditions); + let source_path = route53_scenario_source_path(m, name, property_path, conditions); out.push(make_resource_diagnostic_at_source( "E3023", &format!( @@ -3479,7 +3484,7 @@ pub fn eval_extra_resources(ctx: &EvalContext) -> Vec { None, )); } - if let Some(serde_json::Value::Array(records)) = scenario_property_json(&properties, "ResourceRecords") { + if let Some(serde_json::Value::Array(records)) = scenario_property_json(properties, "ResourceRecords") { push_route53_record_value_diagnostics( &mut out, m, @@ -3487,7 +3492,7 @@ pub fn eval_extra_resources(ctx: &EvalContext) -> Vec { &record_type, &records, "Properties.ResourceRecords", - |property_path| route53_scenario_source_path(m, name, property_path, &conditions), + |property_path| route53_scenario_source_path(m, name, property_path, conditions), ); } } @@ -3495,11 +3500,11 @@ pub fn eval_extra_resources(ctx: &EvalContext) -> Vec { // RecordSetGroup - validate records within RecordSets[] for name in m.resources_of_type("AWS::Route53::RecordSetGroup") { - for (properties, conditions) in m.resolve_properties_scenarios(name) { - if !scenario_is_reachable(m, name, &conditions) { + for (properties, conditions) in m.resolve_properties_scenarios_projected(name, &["RecordSets"]).iter() { + if !scenario_is_reachable(m, name, conditions) { continue; } - let Some(serde_json::Value::Array(record_sets)) = scenario_property_json(&properties, "RecordSets") else { + let Some(serde_json::Value::Array(record_sets)) = scenario_property_json(properties, "RecordSets") else { continue; }; for (set_index, record_set) in record_sets.iter().enumerate() { @@ -3514,7 +3519,7 @@ pub fn eval_extra_resources(ctx: &EvalContext) -> Vec { record_type, records, &format!("Properties.RecordSets.{}.ResourceRecords", set_index), - |property_path| route53_scenario_source_path(m, name, property_path, &conditions), + |property_path| route53_scenario_source_path(m, name, property_path, conditions), ); } } @@ -3571,7 +3576,7 @@ pub fn eval_extra_resources(ctx: &EvalContext) -> Vec { // Route53 RecordSet Alias validation for name in m.resources_of_type("AWS::Route53::RecordSet") { - let property_scenarios = m.resolve_properties_scenarios(name); + let property_scenarios = m.resolve_properties_scenarios_projected(name, &["AliasTarget", "TTL", "Type"]); let has_alias_ttl_conflict = property_scenarios.iter().any(|(properties, conditions)| { scenario_is_reachable(m, name, conditions) && scenario_has_effective_property(properties, "AliasTarget") @@ -4031,7 +4036,10 @@ pub fn eval_extra_resources(ctx: &EvalContext) -> Vec { continue; } - let properties_scenarios = m.resolve_properties_scenarios(name); + let properties_scenarios = m.resolve_properties_scenarios_projected( + name, + &["Cpu", "Memory", "NetworkMode", "PlacementConstraints"], + ); let property_can_be_missing = |property_name: &str| { properties_scenarios.iter().any(|(properties, conditions)| { !scenario_has_effective_property(properties, property_name) diff --git a/src/cfn-validate/tests/security_tests.rs b/src/cfn-validate/tests/security_tests.rs index 2673baea..17252fc6 100644 --- a/src/cfn-validate/tests/security_tests.rs +++ b/src/cfn-validate/tests/security_tests.rs @@ -655,3 +655,64 @@ fn deep_intrinsic_resolution_completes_within_budget() { finished.unwrap().unwrap_or_else(|e| panic!("{engine_name}: deep intrinsic resolution must not error: {e}")); } } + +/// Fixtures whose members are each gated by an independent condition. The joint +/// assignment count is 2^16 to 2^18, which is far beyond what may be enumerated +/// per value, yet every member is independently optional, so analysis must stay +/// complete and polynomial. +const INDEPENDENT_CONDITION_FIXTURES: [&str; 4] = [ + "independent_conditions_list_items.yaml", + "independent_conditions_properties.yaml", + "independent_conditions_object_keys.yaml", + "independent_conditions_statements.yaml", +]; + +/// Independent conditions on one value must not be enumerated jointly. The +/// fixtures are valid templates, so they must validate quickly with a complete +/// analysis and no curtailment, identically on every engine. +#[test] +fn independent_conditions_are_analyzed_completely_without_joint_expansion() { + const CURTAILED_ANALYSIS_ADVISORY: &str = "W9052"; + const PER_TEMPLATE_BUDGET: Duration = Duration::from_secs(10); + for fixture in INDEPENDENT_CONDITION_FIXTURES { + let bytes = common::load_security(fixture); + let mut engine_reports = Vec::new(); + for engine_name in ["rego", "cel", "composite"] { + let report = validate_report_within(PER_TEMPLATE_BUDGET, engine_name, bytes.clone()) + .unwrap_or_else(|| panic!("{engine_name}: {fixture} must validate within {PER_TEMPLATE_BUDGET:?}")) + .expect("validation must return a structured report"); + assert_eq!(report.status, ReportStatus::Ok, "{engine_name}: {fixture} analysis must be complete"); + assert!( + report.diagnostics.iter().all(|diagnostic| diagnostic.rule_id != CURTAILED_ANALYSIS_ADVISORY), + "{engine_name}: {fixture} must not report curtailment" + ); + assert!( + report.metadata.budget_exhaustions.is_none(), + "{engine_name}: {fixture} must not exhaust any budget" + ); + engine_reports.push(report); + } + let rule_ids = |report: &ValidationReport| -> Vec { + let mut ids: Vec = report.diagnostics.iter().map(|d| d.rule_id.clone()).collect(); + ids.sort(); + ids + }; + assert_eq!(rule_ids(&engine_reports[0]), rule_ids(&engine_reports[1]), "{fixture}: rego and cel must agree"); + assert_eq!( + rule_ids(&engine_reports[1]), + rule_ids(&engine_reports[2]), + "{fixture}: cel and composite must agree" + ); + } +} + +#[test] +fn exponential_yaml_alias_expansion_is_rejected_with_structured_error() { + let bytes = common::load_security("yaml_alias_expansion.yaml"); + let error = match SemanticModel::from_bytes(&bytes) { + Err(e) => e, + Ok(_) => panic!("a document whose aliases expand exponentially must fail with a parse error"), + }; + let msg = error.to_string().to_lowercase(); + assert!(msg.contains("alias expansion"), "error must reference alias expansion, got: {}", error); +} diff --git a/src/rego-engine/handwritten/rego/best_practices/tagging.rego b/src/rego-engine/handwritten/rego/best_practices/tagging.rego index 854ee6e8..c9034edd 100644 --- a/src/rego-engine/handwritten/rego/best_practices/tagging.rego +++ b/src/rego-engine/handwritten/rego/best_practices/tagging.rego @@ -19,9 +19,8 @@ _type_supports_tags(rtype) if { } _resource_missing_tags(name) if { - some scenario in properties_scenarios(name, ["Tags"]) - _tag_scenario_reachable(name, scenario.conditions) - object.get(scenario.properties, "Tags", null) == null + some conditions in property_absence_scenarios(name, "Tags") + _tag_scenario_reachable(name, conditions) } _tag_scenario_reachable(name, conditions) if { diff --git a/src/rego-engine/src/builtins.rs b/src/rego-engine/src/builtins.rs index 3028af6f..faafd704 100644 --- a/src/rego-engine/src/builtins.rs +++ b/src/rego-engine/src/builtins.rs @@ -80,6 +80,7 @@ pub(crate) fn register_all( register_has_unresolved_scenario(rego); register_scenario_source_path(rego); register_properties_scenarios(rego); + register_property_absence_scenarios(rego); register_dynamodb_scenario_analysis(rego); register_is_satisfiable(rego); register_get_resource(rego); @@ -729,6 +730,26 @@ fn project_selected_properties( projected } +fn register_property_absence_scenarios(rego: &mut regorus::Engine) { + let _ = rego.add_extension( + "property_absence_scenarios".into(), + 2, + Box::new(move |params: Vec| { + let Some(model) = current_model() else { + return Ok(Value::Undefined); + }; + let rid = params[0].as_string()?; + let property_name = params[1].as_string()?; + let results: Vec = model + .property_absence_scenarios(rid.as_ref(), property_name.as_ref()) + .iter() + .map(|conditions| json_to_value(&serde_json::json!(conditions))) + .collect(); + Ok(Value::from(results)) + }), + ); +} + fn register_properties_scenarios(rego: &mut regorus::Engine) { let _ = rego.add_extension( "properties_scenarios".into(), @@ -744,8 +765,9 @@ fn register_properties_scenarios(rego: &mut regorus::Engine) { selected_fields.insert(field.as_string()?.to_string()); } + let requested_names: Vec<&str> = selected_fields.iter().map(String::as_str).collect(); let results: Vec = model - .resolve_properties_scenarios_shared(rid.as_ref()) + .resolve_properties_scenarios_projected(rid.as_ref(), &requested_names) .iter() .map(|(properties, conditions)| { let properties = project_selected_properties(properties, &selected_fields); diff --git a/src/resources/expected/validation_reports8.json b/src/resources/expected/validation_reports8.json index ab54b9b5..66252e7b 100644 --- a/src/resources/expected/validation_reports8.json +++ b/src/resources/expected/validation_reports8.json @@ -47236,6 +47236,319 @@ } ] }, + "security/independent_conditions_list_items.yaml": { + "filePath": "security/independent_conditions_list_items.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "security/independent_conditions_object_keys.yaml": { + "filePath": "security/independent_conditions_object_keys.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 74, + "startColumn": 5, + "endLine": 74, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Function' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Function", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 83, + "startColumn": 5, + "endLine": 83, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "security/independent_conditions_properties.yaml": { + "filePath": "security/independent_conditions_properties.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 2, + "errors": 0, + "warnings": 2, + "informational": 3, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3031", + "severity": "FATAL", + "message": "'' does not match pattern '^([a-zA-Z0-9_-]{1,64}|arn:[a-zA-Z0-9-]+:lambda:[a-zA-Z0-9-]+:\\d{12}:function:[a-zA-Z0-9_-]{1,64})$'", + "source": "SCHEMA", + "entity": { + "logicalId": "Function", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.FunctionName", + "category": "Schema", + "startLine": 100, + "startColumn": 7, + "endLine": 100, + "endColumn": 19, + "conditionScenario": { + "Enabled12": true + }, + "ruleDescription": "Value does not match pattern", + "phase": "SCHEMA", + "context": { + "actualValue": "", + "expectedConstraint": "^([a-zA-Z0-9_-]{1,64}|arn:[a-zA-Z0-9-]+:lambda:[a-zA-Z0-9-]+:\\d{12}:function:[a-zA-Z0-9_-]{1,64})$", + "resolutionSource": "Fn::If on condition 'Enabled12'" + } + }, + { + "ruleId": "F3033", + "severity": "FATAL", + "message": "length 0 is below minimum 1", + "source": "SCHEMA", + "entity": { + "logicalId": "Function", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.FunctionName", + "category": "Schema", + "startLine": 100, + "startColumn": 7, + "endLine": 100, + "endColumn": 19, + "conditionScenario": { + "Enabled12": true + }, + "ruleDescription": "String length out of bounds", + "phase": "SCHEMA", + "context": { + "actualValue": "", + "resolutionSource": "Fn::If on condition 'Enabled12'", + "extra": { + "actual_length": 0, + "min_length": 1 + } + } + }, + { + "ruleId": "W2530", + "severity": "WARN", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", + "source": "CFN_LINT", + "entity": { + "logicalId": "Function", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.SnapStart", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", + "category": "Best Practice", + "startLine": 102, + "startColumn": 7, + "endLine": 102, + "endColumn": 16, + "ruleDescription": "Validate that SnapStart is properly configured", + "phase": "LINT" + }, + { + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'KmsKeyArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", + "entity": { + "logicalId": "Function", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.KmsKeyArn", + "category": "Best Practice", + "startLine": 92, + "startColumn": 7, + "endLine": 92, + "endColumn": 16, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Function", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 100, + "startColumn": 7, + "endLine": 100, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'Enabled12'" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 74, + "startColumn": 5, + "endLine": 74, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Function' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Function", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 103, + "startColumn": 7, + "endLine": 103, + "endColumn": 11, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "security/independent_conditions_statements.yaml": { + "filePath": "security/independent_conditions_statements.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3510", + "severity": "ERROR", + "message": "[] is too short (minimum 1 item)", + "source": "CFN_LINT", + "entity": { + "logicalId": "Role", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Policies.0.PolicyDocument.Statement", + "category": "Resource", + "startLine": 85, + "startColumn": 13, + "endLine": 85, + "endColumn": 22, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Role' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Role", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 74, + "startColumn": 5, + "endLine": 74, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, "security/many_conditions.yaml": { "filePath": "security/many_conditions.yaml", "status": "OK", @@ -132400,5 +132713,37 @@ "phase": "LINT" } ] + }, + "security/yaml_alias_expansion.yaml": { + "filePath": "security/yaml_alias_expansion.yaml", + "status": "ERROR", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F1101", + "severity": "FATAL", + "message": "Template exceeds the maximum YAML alias expansion of 1048576 nodes at line 12", + "source": "SCHEMA", + "category": "Structure", + "startLine": 12, + "startColumn": 20, + "endLine": 12, + "endColumn": 20, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" + } + ] } } diff --git a/src/resources/security/generate.py b/src/resources/security/generate.py index b1f1f473..0d0d3c73 100644 --- a/src/resources/security/generate.py +++ b/src/resources/security/generate.py @@ -37,6 +37,21 @@ shared-input fusion, wide parameter closures, opaque values, De Morgan nesting, Rules constraints, and nested Fn::If resources + independent_conditions_list_items.yaml + one S3 bucket whose Tags list has 18 items, each + gated by its own Fn::If over AWS::NoValue (2^18 + joint presence assignments) + independent_conditions_properties.yaml + one Lambda function with 16 optional top-level + properties, each gated by its own condition + independent_conditions_object_keys.yaml + one Lambda function whose Environment.Variables + object has 16 optional keys + independent_conditions_statements.yaml + one IAM role whose inline policy has 16 optional + statements (a joint consumer of the whole document) + yaml_alias_expansion.yaml eight levels of nine YAML aliases that resolve to + 9^8 scalars when aliases are copied (billion laughs) All content is synthetic and generic: no account IDs, ARNs, secrets, or any sensitive or private data. Names are sequential placeholders. @@ -877,6 +892,177 @@ def append_if_arguments(depth: int, indent: int) -> None: write("deep_intrinsic_resolution.yaml", "\n".join(lines) + "\n") +# Independent conditions on the members of one value. CloudFormation allows 200 +# parameters and does not cap conditions, so a resource exposing this many +# optional members through parameters is a valid template; validation must stay +# polynomial in the member count rather than enumerate the 2^N joint assignments. +INDEPENDENT_LIST_ITEMS = 18 +INDEPENDENT_PROPERTIES = 16 +INDEPENDENT_OBJECT_KEYS = 16 +INDEPENDENT_STATEMENTS = 16 + +# Lambda function properties that are optional in the resource schema, each with +# a value accepted by that property. +OPTIONAL_LAMBDA_PROPERTIES = [ + ("Description", "!Ref Toggle00"), + ("MemorySize", "256"), + ("Timeout", "30"), + ("ReservedConcurrentExecutions", "5"), + ("KmsKeyArn", "!Sub 'arn:${AWS::Partition}:kms:${AWS::Region}:${AWS::AccountId}:key/fixture'"), + ("Environment", "{Variables: {STAGE: !Ref Toggle00}}"), + ("TracingConfig", "{Mode: Active}"), + ("DeadLetterConfig", "{TargetArn: !Sub 'arn:${AWS::Partition}:sqs:${AWS::Region}:${AWS::AccountId}:fixture'}"), + ("VpcConfig", "{SubnetIds: [subnet-00000000], SecurityGroupIds: [sg-00000000]}"), + ("Layers", "[!Sub 'arn:${AWS::Partition}:lambda:${AWS::Region}:${AWS::AccountId}:layer:fixture:1']"), + ("Architectures", "[arm64]"), + ("EphemeralStorage", "{Size: 1024}"), + ("FunctionName", "!Ref Toggle00"), + ("LoggingConfig", "{LogFormat: JSON}"), + ("SnapStart", "{ApplyOn: PublishedVersions}"), + ("Tags", "[{Key: team, Value: !Ref Toggle00}]"), +] + +# Alias fan-out of the YAML alias fixture: LEVELS nested anchors, each a sequence +# of WIDTH aliases to the previous level, so a copying alias resolver builds +# WIDTH^LEVELS scalars from a few hundred bytes. +YAML_ALIAS_WIDTH = 9 +YAML_ALIAS_LEVELS = 8 + + +def independent_condition_header(description: str, count: int) -> list[str]: + lines = [ + HEADER, + "AWSTemplateFormatVersion: '2010-09-09'", + f"Description: 'Fixture: {description}. Generated; no sensitive data.'", + "Parameters:", + ] + for index in range(count): + lines += [f" Toggle{index:02d}:", " Type: String", " Default: ''"] + lines.append("Conditions:") + for index in range(count): + lines.append(f" Enabled{index:02d}: !Not [!Equals [!Ref Toggle{index:02d}, '']]") + return lines + + +def lambda_function_lines(resource_name: str) -> list[str]: + return [ + f" {resource_name}Role:", + " Type: AWS::IAM::Role", + " Properties:", + " AssumeRolePolicyDocument:", + " Version: '2012-10-17'", + " Statement:", + " - Effect: Allow", + " Principal: {Service: lambda.amazonaws.com}", + " Action: 'sts:AssumeRole'", + f" {resource_name}:", + " Type: AWS::Lambda::Function", + " Properties:", + " Runtime: python3.12", + " Handler: index.handler", + f" Role: !GetAtt {resource_name}Role.Arn", + " Code: {ZipFile: 'def handler(event, context): return None'}", + ] + + +def gen_independent_conditions_list_items() -> None: + """One list whose items are each gated by an independent condition. + + The bucket's Tags list carries both a maximum item count and a uniqueness + constraint in the resource schema, so every container-level check must be + answered from member presence rather than from the 2^18 joint assignments. + """ + lines = independent_condition_header("independent conditions on list items", INDEPENDENT_LIST_ITEMS) + lines += ["Resources:", " Bucket:", " Type: AWS::S3::Bucket", " Properties:", " Tags:"] + for index in range(INDEPENDENT_LIST_ITEMS): + lines.append( + f" - !If [Enabled{index:02d}, {{Key: tag-{index:02d}, Value: !Ref Toggle{index:02d}}}, " + "!Ref AWS::NoValue]" + ) + write("independent_conditions_list_items.yaml", "\n".join(lines) + "\n") + + +def gen_independent_conditions_properties() -> None: + """One resource whose optional top-level properties are each independently gated. + + Rules that read the whole Properties block must expand only the properties they + inspect; otherwise 2^16 joint scenarios are materialized per rule. + """ + if len(OPTIONAL_LAMBDA_PROPERTIES) != INDEPENDENT_PROPERTIES: + raise RuntimeError("the optional Lambda property list must match INDEPENDENT_PROPERTIES") + lines = independent_condition_header("independent conditions on optional properties", INDEPENDENT_PROPERTIES) + lines += ["Resources:"] + lambda_function_lines("Function") + for index, (name, value) in enumerate(OPTIONAL_LAMBDA_PROPERTIES): + lines.append(f" {name}: !If [Enabled{index:02d}, {value}, !Ref AWS::NoValue]") + write("independent_conditions_properties.yaml", "\n".join(lines) + "\n") + + +def gen_independent_conditions_object_keys() -> None: + """One nested object whose keys are each independently gated.""" + lines = independent_condition_header("independent conditions on object keys", INDEPENDENT_OBJECT_KEYS) + lines += ["Resources:"] + lambda_function_lines("Function") + [" Environment:", " Variables:"] + for index in range(INDEPENDENT_OBJECT_KEYS): + lines.append( + f" VARIABLE_{index:02d}: !If [Enabled{index:02d}, !Ref Toggle{index:02d}, !Ref AWS::NoValue]" + ) + write("independent_conditions_object_keys.yaml", "\n".join(lines) + "\n") + + +def gen_independent_conditions_statements() -> None: + """One IAM policy document whose statements are each independently gated. + + Policy analysis evaluates the document as a whole, so it exercises the joint + scenario product directly; the covering strategy must keep it linear. + """ + lines = independent_condition_header("independent conditions on policy statements", INDEPENDENT_STATEMENTS) + lines += [ + "Resources:", + " Role:", + " Type: AWS::IAM::Role", + " Properties:", + " AssumeRolePolicyDocument:", + " Version: '2012-10-17'", + " Statement:", + " - Effect: Allow", + " Principal: {Service: lambda.amazonaws.com}", + " Action: 'sts:AssumeRole'", + " Policies:", + " - PolicyName: inline", + " PolicyDocument:", + " Version: '2012-10-17'", + " Statement:", + ] + for index in range(INDEPENDENT_STATEMENTS): + lines.append( + f" - !If [Enabled{index:02d}, {{Effect: Allow, Action: 's3:GetObject', " + f"Resource: !Sub 'arn:${{AWS::Partition}}:s3:::fixture-{index:02d}/*'}}, !Ref AWS::NoValue]" + ) + write("independent_conditions_statements.yaml", "\n".join(lines) + "\n") + + +def gen_yaml_alias_expansion() -> None: + """Nested YAML aliases whose copied expansion is exponential in the nesting depth.""" + lines = [ + HEADER, + "AWSTemplateFormatVersion: '2010-09-09'", + f"Description: 'Fixture: {YAML_ALIAS_LEVELS} levels of {YAML_ALIAS_WIDTH} YAML aliases. " + "Generated; no sensitive data.'", + "Metadata:", + f" Level0: &level0 [{', '.join(['x'] * YAML_ALIAS_WIDTH)}]", + ] + for level in range(1, YAML_ALIAS_LEVELS): + aliases = ", ".join([f"*level{level - 1}"] * YAML_ALIAS_WIDTH) + lines.append(f" Level{level}: &level{level} [{aliases}]") + lines += [ + "Resources:", + " Topic:", + " Type: AWS::SNS::Topic", + " Metadata:", + f" Expanded: *level{YAML_ALIAS_LEVELS - 1}", + ] + write("yaml_alias_expansion.yaml", "\n".join(lines) + "\n") + + def main() -> None: gen_deep_nesting() gen_many_conditions() @@ -892,6 +1078,11 @@ def main() -> None: gen_foreach_branch_explosion() gen_deep_yaml_nesting() gen_deep_intrinsic_resolution() + gen_independent_conditions_list_items() + gen_independent_conditions_properties() + gen_independent_conditions_object_keys() + gen_independent_conditions_statements() + gen_yaml_alias_expansion() if __name__ == "__main__": diff --git a/src/resources/security/independent_conditions_list_items.yaml b/src/resources/security/independent_conditions_list_items.yaml new file mode 100644 index 00000000..8c9375a7 --- /dev/null +++ b/src/resources/security/independent_conditions_list_items.yaml @@ -0,0 +1,101 @@ +# Generated by resources/security/generate.py - do not edit by hand. + +AWSTemplateFormatVersion: '2010-09-09' +Description: 'Fixture: independent conditions on list items. Generated; no sensitive data.' +Parameters: + Toggle00: + Type: String + Default: '' + Toggle01: + Type: String + Default: '' + Toggle02: + Type: String + Default: '' + Toggle03: + Type: String + Default: '' + Toggle04: + Type: String + Default: '' + Toggle05: + Type: String + Default: '' + Toggle06: + Type: String + Default: '' + Toggle07: + Type: String + Default: '' + Toggle08: + Type: String + Default: '' + Toggle09: + Type: String + Default: '' + Toggle10: + Type: String + Default: '' + Toggle11: + Type: String + Default: '' + Toggle12: + Type: String + Default: '' + Toggle13: + Type: String + Default: '' + Toggle14: + Type: String + Default: '' + Toggle15: + Type: String + Default: '' + Toggle16: + Type: String + Default: '' + Toggle17: + Type: String + Default: '' +Conditions: + Enabled00: !Not [!Equals [!Ref Toggle00, '']] + Enabled01: !Not [!Equals [!Ref Toggle01, '']] + Enabled02: !Not [!Equals [!Ref Toggle02, '']] + Enabled03: !Not [!Equals [!Ref Toggle03, '']] + Enabled04: !Not [!Equals [!Ref Toggle04, '']] + Enabled05: !Not [!Equals [!Ref Toggle05, '']] + Enabled06: !Not [!Equals [!Ref Toggle06, '']] + Enabled07: !Not [!Equals [!Ref Toggle07, '']] + Enabled08: !Not [!Equals [!Ref Toggle08, '']] + Enabled09: !Not [!Equals [!Ref Toggle09, '']] + Enabled10: !Not [!Equals [!Ref Toggle10, '']] + Enabled11: !Not [!Equals [!Ref Toggle11, '']] + Enabled12: !Not [!Equals [!Ref Toggle12, '']] + Enabled13: !Not [!Equals [!Ref Toggle13, '']] + Enabled14: !Not [!Equals [!Ref Toggle14, '']] + Enabled15: !Not [!Equals [!Ref Toggle15, '']] + Enabled16: !Not [!Equals [!Ref Toggle16, '']] + Enabled17: !Not [!Equals [!Ref Toggle17, '']] +Resources: + Bucket: + Type: AWS::S3::Bucket + Properties: + Tags: + - !If [Enabled00, {Key: tag-00, Value: !Ref Toggle00}, !Ref AWS::NoValue] + - !If [Enabled01, {Key: tag-01, Value: !Ref Toggle01}, !Ref AWS::NoValue] + - !If [Enabled02, {Key: tag-02, Value: !Ref Toggle02}, !Ref AWS::NoValue] + - !If [Enabled03, {Key: tag-03, Value: !Ref Toggle03}, !Ref AWS::NoValue] + - !If [Enabled04, {Key: tag-04, Value: !Ref Toggle04}, !Ref AWS::NoValue] + - !If [Enabled05, {Key: tag-05, Value: !Ref Toggle05}, !Ref AWS::NoValue] + - !If [Enabled06, {Key: tag-06, Value: !Ref Toggle06}, !Ref AWS::NoValue] + - !If [Enabled07, {Key: tag-07, Value: !Ref Toggle07}, !Ref AWS::NoValue] + - !If [Enabled08, {Key: tag-08, Value: !Ref Toggle08}, !Ref AWS::NoValue] + - !If [Enabled09, {Key: tag-09, Value: !Ref Toggle09}, !Ref AWS::NoValue] + - !If [Enabled10, {Key: tag-10, Value: !Ref Toggle10}, !Ref AWS::NoValue] + - !If [Enabled11, {Key: tag-11, Value: !Ref Toggle11}, !Ref AWS::NoValue] + - !If [Enabled12, {Key: tag-12, Value: !Ref Toggle12}, !Ref AWS::NoValue] + - !If [Enabled13, {Key: tag-13, Value: !Ref Toggle13}, !Ref AWS::NoValue] + - !If [Enabled14, {Key: tag-14, Value: !Ref Toggle14}, !Ref AWS::NoValue] + - !If [Enabled15, {Key: tag-15, Value: !Ref Toggle15}, !Ref AWS::NoValue] + - !If [Enabled16, {Key: tag-16, Value: !Ref Toggle16}, !Ref AWS::NoValue] + - !If [Enabled17, {Key: tag-17, Value: !Ref Toggle17}, !Ref AWS::NoValue] diff --git a/src/resources/security/independent_conditions_object_keys.yaml b/src/resources/security/independent_conditions_object_keys.yaml new file mode 100644 index 00000000..8a96d7b1 --- /dev/null +++ b/src/resources/security/independent_conditions_object_keys.yaml @@ -0,0 +1,105 @@ +# Generated by resources/security/generate.py - do not edit by hand. + +AWSTemplateFormatVersion: '2010-09-09' +Description: 'Fixture: independent conditions on object keys. Generated; no sensitive data.' +Parameters: + Toggle00: + Type: String + Default: '' + Toggle01: + Type: String + Default: '' + Toggle02: + Type: String + Default: '' + Toggle03: + Type: String + Default: '' + Toggle04: + Type: String + Default: '' + Toggle05: + Type: String + Default: '' + Toggle06: + Type: String + Default: '' + Toggle07: + Type: String + Default: '' + Toggle08: + Type: String + Default: '' + Toggle09: + Type: String + Default: '' + Toggle10: + Type: String + Default: '' + Toggle11: + Type: String + Default: '' + Toggle12: + Type: String + Default: '' + Toggle13: + Type: String + Default: '' + Toggle14: + Type: String + Default: '' + Toggle15: + Type: String + Default: '' +Conditions: + Enabled00: !Not [!Equals [!Ref Toggle00, '']] + Enabled01: !Not [!Equals [!Ref Toggle01, '']] + Enabled02: !Not [!Equals [!Ref Toggle02, '']] + Enabled03: !Not [!Equals [!Ref Toggle03, '']] + Enabled04: !Not [!Equals [!Ref Toggle04, '']] + Enabled05: !Not [!Equals [!Ref Toggle05, '']] + Enabled06: !Not [!Equals [!Ref Toggle06, '']] + Enabled07: !Not [!Equals [!Ref Toggle07, '']] + Enabled08: !Not [!Equals [!Ref Toggle08, '']] + Enabled09: !Not [!Equals [!Ref Toggle09, '']] + Enabled10: !Not [!Equals [!Ref Toggle10, '']] + Enabled11: !Not [!Equals [!Ref Toggle11, '']] + Enabled12: !Not [!Equals [!Ref Toggle12, '']] + Enabled13: !Not [!Equals [!Ref Toggle13, '']] + Enabled14: !Not [!Equals [!Ref Toggle14, '']] + Enabled15: !Not [!Equals [!Ref Toggle15, '']] +Resources: + FunctionRole: + Type: AWS::IAM::Role + Properties: + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: {Service: lambda.amazonaws.com} + Action: 'sts:AssumeRole' + Function: + Type: AWS::Lambda::Function + Properties: + Runtime: python3.12 + Handler: index.handler + Role: !GetAtt FunctionRole.Arn + Code: {ZipFile: 'def handler(event, context): return None'} + Environment: + Variables: + VARIABLE_00: !If [Enabled00, !Ref Toggle00, !Ref AWS::NoValue] + VARIABLE_01: !If [Enabled01, !Ref Toggle01, !Ref AWS::NoValue] + VARIABLE_02: !If [Enabled02, !Ref Toggle02, !Ref AWS::NoValue] + VARIABLE_03: !If [Enabled03, !Ref Toggle03, !Ref AWS::NoValue] + VARIABLE_04: !If [Enabled04, !Ref Toggle04, !Ref AWS::NoValue] + VARIABLE_05: !If [Enabled05, !Ref Toggle05, !Ref AWS::NoValue] + VARIABLE_06: !If [Enabled06, !Ref Toggle06, !Ref AWS::NoValue] + VARIABLE_07: !If [Enabled07, !Ref Toggle07, !Ref AWS::NoValue] + VARIABLE_08: !If [Enabled08, !Ref Toggle08, !Ref AWS::NoValue] + VARIABLE_09: !If [Enabled09, !Ref Toggle09, !Ref AWS::NoValue] + VARIABLE_10: !If [Enabled10, !Ref Toggle10, !Ref AWS::NoValue] + VARIABLE_11: !If [Enabled11, !Ref Toggle11, !Ref AWS::NoValue] + VARIABLE_12: !If [Enabled12, !Ref Toggle12, !Ref AWS::NoValue] + VARIABLE_13: !If [Enabled13, !Ref Toggle13, !Ref AWS::NoValue] + VARIABLE_14: !If [Enabled14, !Ref Toggle14, !Ref AWS::NoValue] + VARIABLE_15: !If [Enabled15, !Ref Toggle15, !Ref AWS::NoValue] diff --git a/src/resources/security/independent_conditions_properties.yaml b/src/resources/security/independent_conditions_properties.yaml new file mode 100644 index 00000000..005be57c --- /dev/null +++ b/src/resources/security/independent_conditions_properties.yaml @@ -0,0 +1,103 @@ +# Generated by resources/security/generate.py - do not edit by hand. + +AWSTemplateFormatVersion: '2010-09-09' +Description: 'Fixture: independent conditions on optional properties. Generated; no sensitive data.' +Parameters: + Toggle00: + Type: String + Default: '' + Toggle01: + Type: String + Default: '' + Toggle02: + Type: String + Default: '' + Toggle03: + Type: String + Default: '' + Toggle04: + Type: String + Default: '' + Toggle05: + Type: String + Default: '' + Toggle06: + Type: String + Default: '' + Toggle07: + Type: String + Default: '' + Toggle08: + Type: String + Default: '' + Toggle09: + Type: String + Default: '' + Toggle10: + Type: String + Default: '' + Toggle11: + Type: String + Default: '' + Toggle12: + Type: String + Default: '' + Toggle13: + Type: String + Default: '' + Toggle14: + Type: String + Default: '' + Toggle15: + Type: String + Default: '' +Conditions: + Enabled00: !Not [!Equals [!Ref Toggle00, '']] + Enabled01: !Not [!Equals [!Ref Toggle01, '']] + Enabled02: !Not [!Equals [!Ref Toggle02, '']] + Enabled03: !Not [!Equals [!Ref Toggle03, '']] + Enabled04: !Not [!Equals [!Ref Toggle04, '']] + Enabled05: !Not [!Equals [!Ref Toggle05, '']] + Enabled06: !Not [!Equals [!Ref Toggle06, '']] + Enabled07: !Not [!Equals [!Ref Toggle07, '']] + Enabled08: !Not [!Equals [!Ref Toggle08, '']] + Enabled09: !Not [!Equals [!Ref Toggle09, '']] + Enabled10: !Not [!Equals [!Ref Toggle10, '']] + Enabled11: !Not [!Equals [!Ref Toggle11, '']] + Enabled12: !Not [!Equals [!Ref Toggle12, '']] + Enabled13: !Not [!Equals [!Ref Toggle13, '']] + Enabled14: !Not [!Equals [!Ref Toggle14, '']] + Enabled15: !Not [!Equals [!Ref Toggle15, '']] +Resources: + FunctionRole: + Type: AWS::IAM::Role + Properties: + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: {Service: lambda.amazonaws.com} + Action: 'sts:AssumeRole' + Function: + Type: AWS::Lambda::Function + Properties: + Runtime: python3.12 + Handler: index.handler + Role: !GetAtt FunctionRole.Arn + Code: {ZipFile: 'def handler(event, context): return None'} + Description: !If [Enabled00, !Ref Toggle00, !Ref AWS::NoValue] + MemorySize: !If [Enabled01, 256, !Ref AWS::NoValue] + Timeout: !If [Enabled02, 30, !Ref AWS::NoValue] + ReservedConcurrentExecutions: !If [Enabled03, 5, !Ref AWS::NoValue] + KmsKeyArn: !If [Enabled04, !Sub 'arn:${AWS::Partition}:kms:${AWS::Region}:${AWS::AccountId}:key/fixture', !Ref AWS::NoValue] + Environment: !If [Enabled05, {Variables: {STAGE: !Ref Toggle00}}, !Ref AWS::NoValue] + TracingConfig: !If [Enabled06, {Mode: Active}, !Ref AWS::NoValue] + DeadLetterConfig: !If [Enabled07, {TargetArn: !Sub 'arn:${AWS::Partition}:sqs:${AWS::Region}:${AWS::AccountId}:fixture'}, !Ref AWS::NoValue] + VpcConfig: !If [Enabled08, {SubnetIds: [subnet-00000000], SecurityGroupIds: [sg-00000000]}, !Ref AWS::NoValue] + Layers: !If [Enabled09, [!Sub 'arn:${AWS::Partition}:lambda:${AWS::Region}:${AWS::AccountId}:layer:fixture:1'], !Ref AWS::NoValue] + Architectures: !If [Enabled10, [arm64], !Ref AWS::NoValue] + EphemeralStorage: !If [Enabled11, {Size: 1024}, !Ref AWS::NoValue] + FunctionName: !If [Enabled12, !Ref Toggle00, !Ref AWS::NoValue] + LoggingConfig: !If [Enabled13, {LogFormat: JSON}, !Ref AWS::NoValue] + SnapStart: !If [Enabled14, {ApplyOn: PublishedVersions}, !Ref AWS::NoValue] + Tags: !If [Enabled15, [{Key: team, Value: !Ref Toggle00}], !Ref AWS::NoValue] diff --git a/src/resources/security/independent_conditions_statements.yaml b/src/resources/security/independent_conditions_statements.yaml new file mode 100644 index 00000000..62e87b49 --- /dev/null +++ b/src/resources/security/independent_conditions_statements.yaml @@ -0,0 +1,101 @@ +# Generated by resources/security/generate.py - do not edit by hand. + +AWSTemplateFormatVersion: '2010-09-09' +Description: 'Fixture: independent conditions on policy statements. Generated; no sensitive data.' +Parameters: + Toggle00: + Type: String + Default: '' + Toggle01: + Type: String + Default: '' + Toggle02: + Type: String + Default: '' + Toggle03: + Type: String + Default: '' + Toggle04: + Type: String + Default: '' + Toggle05: + Type: String + Default: '' + Toggle06: + Type: String + Default: '' + Toggle07: + Type: String + Default: '' + Toggle08: + Type: String + Default: '' + Toggle09: + Type: String + Default: '' + Toggle10: + Type: String + Default: '' + Toggle11: + Type: String + Default: '' + Toggle12: + Type: String + Default: '' + Toggle13: + Type: String + Default: '' + Toggle14: + Type: String + Default: '' + Toggle15: + Type: String + Default: '' +Conditions: + Enabled00: !Not [!Equals [!Ref Toggle00, '']] + Enabled01: !Not [!Equals [!Ref Toggle01, '']] + Enabled02: !Not [!Equals [!Ref Toggle02, '']] + Enabled03: !Not [!Equals [!Ref Toggle03, '']] + Enabled04: !Not [!Equals [!Ref Toggle04, '']] + Enabled05: !Not [!Equals [!Ref Toggle05, '']] + Enabled06: !Not [!Equals [!Ref Toggle06, '']] + Enabled07: !Not [!Equals [!Ref Toggle07, '']] + Enabled08: !Not [!Equals [!Ref Toggle08, '']] + Enabled09: !Not [!Equals [!Ref Toggle09, '']] + Enabled10: !Not [!Equals [!Ref Toggle10, '']] + Enabled11: !Not [!Equals [!Ref Toggle11, '']] + Enabled12: !Not [!Equals [!Ref Toggle12, '']] + Enabled13: !Not [!Equals [!Ref Toggle13, '']] + Enabled14: !Not [!Equals [!Ref Toggle14, '']] + Enabled15: !Not [!Equals [!Ref Toggle15, '']] +Resources: + Role: + Type: AWS::IAM::Role + Properties: + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: {Service: lambda.amazonaws.com} + Action: 'sts:AssumeRole' + Policies: + - PolicyName: inline + PolicyDocument: + Version: '2012-10-17' + Statement: + - !If [Enabled00, {Effect: Allow, Action: 's3:GetObject', Resource: !Sub 'arn:${AWS::Partition}:s3:::fixture-00/*'}, !Ref AWS::NoValue] + - !If [Enabled01, {Effect: Allow, Action: 's3:GetObject', Resource: !Sub 'arn:${AWS::Partition}:s3:::fixture-01/*'}, !Ref AWS::NoValue] + - !If [Enabled02, {Effect: Allow, Action: 's3:GetObject', Resource: !Sub 'arn:${AWS::Partition}:s3:::fixture-02/*'}, !Ref AWS::NoValue] + - !If [Enabled03, {Effect: Allow, Action: 's3:GetObject', Resource: !Sub 'arn:${AWS::Partition}:s3:::fixture-03/*'}, !Ref AWS::NoValue] + - !If [Enabled04, {Effect: Allow, Action: 's3:GetObject', Resource: !Sub 'arn:${AWS::Partition}:s3:::fixture-04/*'}, !Ref AWS::NoValue] + - !If [Enabled05, {Effect: Allow, Action: 's3:GetObject', Resource: !Sub 'arn:${AWS::Partition}:s3:::fixture-05/*'}, !Ref AWS::NoValue] + - !If [Enabled06, {Effect: Allow, Action: 's3:GetObject', Resource: !Sub 'arn:${AWS::Partition}:s3:::fixture-06/*'}, !Ref AWS::NoValue] + - !If [Enabled07, {Effect: Allow, Action: 's3:GetObject', Resource: !Sub 'arn:${AWS::Partition}:s3:::fixture-07/*'}, !Ref AWS::NoValue] + - !If [Enabled08, {Effect: Allow, Action: 's3:GetObject', Resource: !Sub 'arn:${AWS::Partition}:s3:::fixture-08/*'}, !Ref AWS::NoValue] + - !If [Enabled09, {Effect: Allow, Action: 's3:GetObject', Resource: !Sub 'arn:${AWS::Partition}:s3:::fixture-09/*'}, !Ref AWS::NoValue] + - !If [Enabled10, {Effect: Allow, Action: 's3:GetObject', Resource: !Sub 'arn:${AWS::Partition}:s3:::fixture-10/*'}, !Ref AWS::NoValue] + - !If [Enabled11, {Effect: Allow, Action: 's3:GetObject', Resource: !Sub 'arn:${AWS::Partition}:s3:::fixture-11/*'}, !Ref AWS::NoValue] + - !If [Enabled12, {Effect: Allow, Action: 's3:GetObject', Resource: !Sub 'arn:${AWS::Partition}:s3:::fixture-12/*'}, !Ref AWS::NoValue] + - !If [Enabled13, {Effect: Allow, Action: 's3:GetObject', Resource: !Sub 'arn:${AWS::Partition}:s3:::fixture-13/*'}, !Ref AWS::NoValue] + - !If [Enabled14, {Effect: Allow, Action: 's3:GetObject', Resource: !Sub 'arn:${AWS::Partition}:s3:::fixture-14/*'}, !Ref AWS::NoValue] + - !If [Enabled15, {Effect: Allow, Action: 's3:GetObject', Resource: !Sub 'arn:${AWS::Partition}:s3:::fixture-15/*'}, !Ref AWS::NoValue] diff --git a/src/resources/security/yaml_alias_expansion.yaml b/src/resources/security/yaml_alias_expansion.yaml new file mode 100644 index 00000000..dee867e5 --- /dev/null +++ b/src/resources/security/yaml_alias_expansion.yaml @@ -0,0 +1,18 @@ +# Generated by resources/security/generate.py - do not edit by hand. + +AWSTemplateFormatVersion: '2010-09-09' +Description: 'Fixture: 8 levels of 9 YAML aliases. Generated; no sensitive data.' +Metadata: + Level0: &level0 [x, x, x, x, x, x, x, x, x] + Level1: &level1 [*level0, *level0, *level0, *level0, *level0, *level0, *level0, *level0, *level0] + Level2: &level2 [*level1, *level1, *level1, *level1, *level1, *level1, *level1, *level1, *level1] + Level3: &level3 [*level2, *level2, *level2, *level2, *level2, *level2, *level2, *level2, *level2] + Level4: &level4 [*level3, *level3, *level3, *level3, *level3, *level3, *level3, *level3, *level3] + Level5: &level5 [*level4, *level4, *level4, *level4, *level4, *level4, *level4, *level4, *level4] + Level6: &level6 [*level5, *level5, *level5, *level5, *level5, *level5, *level5, *level5, *level5] + Level7: &level7 [*level6, *level6, *level6, *level6, *level6, *level6, *level6, *level6, *level6] +Resources: + Topic: + Type: AWS::SNS::Topic + Metadata: + Expanded: *level7 diff --git a/src/schema-validator/src/validate.rs b/src/schema-validator/src/validate.rs index ee7f8941..20ca30a9 100644 --- a/src/schema-validator/src/validate.rs +++ b/src/schema-validator/src/validate.rs @@ -14,9 +14,13 @@ use template_model::consts::{ MAX_SCHEMA_SCENARIO_MERGE_ATTEMPTS as MAX_GROUP_SCENARIO_MERGE_ATTEMPTS, PARAM_TYPE_COMMA_DELIMITED_LIST, PARAM_TYPE_NUMBER, PARAM_TYPE_STRING, SAM_FUNCTION_TYPE, SAM_SERVERLESS_TYPE_PREFIX, }; +use template_model::member_presence::{ + ContainerMember, MemberPresence, classify_members, extend_assignment, present_alternatives, +}; use template_model::message::{render_str_list, render_value, render_value_list}; use template_model::model::ResolvedResource; use template_model::region_enums; +use template_model::resolved_value::contains_dynamic_resolved; use template_model::resolver::{RefKind, ResolvedValue}; use template_model::{ BudgetKind, CompiledPattern, IAM_ROLE_ARN_PATTERN, SECURITY_GROUP_NAME_PATTERN, SemanticModel, compile_pattern, @@ -945,16 +949,16 @@ fn property_presence_alternatives( } let mut alternatives = Vec::new(); let mut seen = HashSet::new(); - for (value, conditions) in scenarios { + for (value, conditions) in scenarios.iter() { let present = !matches!(value, ResolvedValue::Concrete { value } if value.is_null()); if present != want_present { continue; } - let Some(merged) = try_merge_assignments(filter, &conditions) else { + let Some(merged) = try_merge_assignments(filter, conditions) else { continue; }; - if assignment_is_proven_satisfiable(m, &merged) && seen.insert(canonical_assignment(&conditions)) { - alternatives.push(conditions); + if assignment_is_proven_satisfiable(m, &merged) && seen.insert(canonical_assignment(conditions)) { + alternatives.push(conditions.clone()); } } alternatives @@ -1107,7 +1111,7 @@ fn property_scenario_assignments( let mut property_assignments = Vec::new(); let mut seen_property_assignments = HashSet::new(); - for (_, conditions) in &scenarios { + for (_, conditions) in scenarios.iter() { if !is_satisfiable(m, conditions) || !scenario_consistent_with_filter(m, conditions) { continue; } @@ -1198,7 +1202,10 @@ fn property_present_under( prop: &str, assignment: &HashMap, ) -> bool { - let scenarios = m.resolve_scenarios(rid, &format!("{}.{}", base, prop)); + // Presence depends only on whether the property value itself resolves to + // `AWS::NoValue`, so only the conditions wrapping the whole value are split; + // conditions nested inside a present list or object cannot change the answer. + let scenarios = outer_resolved_scenarios(m, rid, &format!("{}.{}", base, prop)); if scenarios.is_empty() { return true; } @@ -3159,7 +3166,7 @@ fn outer_resolved_scenarios( let Some(value) = model.resolve_deep(resource_id, property_path).or_else(|| model.resolve(resource_id, property_path).cloned()) else { - return model.resolve_scenarios(resource_id, property_path); + return model.resolve_scenarios(resource_id, property_path).as_ref().clone(); }; let mut scenarios = Vec::new(); collect_outer_resolved_scenarios(&value, &HashMap::new(), &mut scenarios); @@ -3196,12 +3203,13 @@ fn collect_outer_value_scenarios( } } +/// Whether a property's checks compare the whole composite value, so every +/// joint assignment of the conditions nested inside it must be materialized. +/// Item cardinality and uniqueness are not among them: `validate_item_cardinality` +/// reasons about member presence instead. fn schema_requires_nested_value_scenarios(schema: &PropSchema) -> bool { let has_composite_value = |value: &serde_json::Value| value.is_array() || value.is_object(); - schema.min_items.is_some() - || schema.max_items.is_some() - || schema.unique_items == Some(true) - || schema.min_properties.is_some() + schema.min_properties.is_some() || schema.max_properties.is_some() || schema.enum_values.iter().any(has_composite_value) || schema.enum_case_insensitive.iter().any(has_composite_value) @@ -3594,72 +3602,8 @@ fn validate_prop( } } - for (val, conds) in &scenarios { - if !is_satisfiable(m, conds) || val.is_null() { - continue; - } - if let Some(arr) = val.as_array() { - let len = arr.iter().filter(|item| !item.is_null()).count() as u64; - if let Some(max) = schema.max_items - && len > max - { - out.push(build_diagnostic_conditional( - "F3032", - &format!("expected maximum item count: {}, found: {}", max, len), - m, - rid, - prop_path, - None, - condition_map(conds), - )); - } - if let Some(min) = schema.min_items - && len < min - { - out.push(build_diagnostic_conditional( - "F3032", - &format!("expected minimum item count: {}, found: {}", min, len), - m, - rid, - prop_path, - None, - condition_map(conds), - )); - } - } - } - - if schema.unique_items == Some(true) { - for (val, conds) in &scenarios { - if !is_satisfiable(m, conds) || val.is_null() { - continue; - } - if let Some(arr) = val.as_array() { - let mut seen = Vec::new(); - for item in arr { - // A null element is an `AWS::NoValue` that CloudFormation - // removes from the list at deploy time, so it is not a real - // member and two such elements are not a duplicate. Only the - // surviving concrete items are checked for uniqueness. - if item.is_null() { - continue; - } - if seen.contains(item) { - out.push(build_diagnostic_conditional( - "F3037", - "Array items are not unique", - m, - rid, - prop_path, - None, - condition_map(conds), - )); - break; - } - seen.push(item.clone()); - } - } - } + if schema.min_items.is_some() || schema.max_items.is_some() || schema.unique_items == Some(true) { + validate_item_cardinality(out, m, rid, prop_path, schema); } let has_nested_constraints = !schema.properties.is_empty() @@ -3720,7 +3664,7 @@ fn validate_prop( // anchors the diagnostic at the branch path (`.Fn::If.`), // so reporting here too would duplicate that finding at the // un-qualified property path. - for (val, _conds) in m.resolve_scenarios(rid, prop_path) { + for (val, _conds) in m.resolve_scenarios(rid, prop_path).iter() { if let ResolvedValue::Concrete { value } = &val && let Some(obj) = value.as_object() { @@ -3774,8 +3718,10 @@ fn validate_prop( for (pn, ps) in &schema.properties { let resolved = ps.resolve(defs); let sub_path = format!("{}.{}", prop_path, pn); - let sub_scenarios = m.resolve_scenarios_json(rid, &sub_path); - if !sub_scenarios.is_empty() || m.resolve_deep(rid, &sub_path).is_some() { + // A directly resolvable sub-property is authored; only when it is not + // (a `Properties` block wrapped in `Fn::If`) do the scenarios decide, + // so the expansion is not paid merely to learn that a value exists. + if m.resolve_deep(rid, &sub_path).is_some() || !m.resolve_scenarios_json(rid, &sub_path).is_empty() { validate_prop(out, store, m, rid, rtype, &sub_path, &resolved, defs, region); } } @@ -3807,6 +3753,247 @@ fn validate_prop( } } +/// Checks `minItems`, `maxItems` and `uniqueItems` from member presence. +/// +/// Members gated by `Fn::If` over `AWS::NoValue` are counted through their +/// presence literals instead of enumerating every joint assignment, so a list +/// of N independently optional items costs O(N) (O(N^2) for uniqueness) rather +/// than 2^N. Deployments whose surviving members carry an unresolved reference +/// are not counted, matching the value-scenario checks that skip dynamic values. +/// Members whose presence has no single literal conjunction fall back to the +/// joint value scenarios. +fn validate_item_cardinality( + out: &mut Vec, + m: &Arc, + rid: &str, + prop_path: &str, + schema: &PropSchema, +) { + for (container, outer_conditions) in outer_resolved_scenarios(m, rid, prop_path) { + if !is_satisfiable(m, &outer_conditions) { + continue; + } + match &container { + ResolvedValue::List { items } => { + let members = classify_members(items); + if members.iter().any(|member| member.presence == MemberPresence::Complex) { + validate_item_cardinality_from_scenarios(out, m, rid, prop_path, schema); + return; + } + validate_member_cardinality(out, m, rid, prop_path, schema, &members, &outer_conditions); + } + ResolvedValue::Concrete { value } if value.is_array() => { + let value = value.0.clone(); + validate_item_cardinality_of_value(out, m, rid, prop_path, schema, &value, &outer_conditions); + } + _ => {} + } + } +} + +fn validate_member_cardinality( + out: &mut Vec, + m: &Arc, + rid: &str, + prop_path: &str, + schema: &PropSchema, + members: &[ContainerMember<'_>], + outer_conditions: &HashMap, +) { + if members.iter().any(|member| member.is_dynamic && member.presence == MemberPresence::Always) { + return; + } + let always_present = members.iter().filter(|member| member.presence == MemberPresence::Always).count() as u64; + let optional = |member: &&ContainerMember<'_>| matches!(member.presence, MemberPresence::When(_)); + + if let Some(max) = schema.max_items { + let mut witness = outer_conditions.clone(); + let mut count = always_present; + let mut skipped_unsatisfiable = false; + for member in members.iter().filter(optional).filter(|member| !member.is_dynamic) { + let mut candidate = witness.clone(); + if extend_assignment(&mut candidate, presence_literals(member)) && is_satisfiable(m, &candidate) { + witness = candidate; + count += 1; + } else { + skipped_unsatisfiable = true; + } + } + if count > max { + out.push(build_diagnostic_conditional( + "F3032", + &format!("expected maximum item count: {}, found: {}", max, count), + m, + rid, + prop_path, + None, + condition_map(&witness), + )); + } else if skipped_unsatisfiable { + validate_item_cardinality_from_scenarios(out, m, rid, prop_path, schema); + return; + } + } + + if let Some(min) = schema.min_items { + let mut witness = outer_conditions.clone(); + let mut count = always_present; + let mut skipped_unsatisfiable = false; + for member in members.iter().filter(optional) { + let Some((condition, value)) = presence_literals(member).first() else { + continue; + }; + let mut candidate = witness.clone(); + if extend_assignment(&mut candidate, &[(condition.clone(), !value)]) && is_satisfiable(m, &candidate) { + witness = candidate; + } else if member.is_dynamic { + skipped_unsatisfiable = true; + } else { + count += 1; + } + } + if count < min { + out.push(build_diagnostic_conditional( + "F3032", + &format!("expected minimum item count: {}, found: {}", min, count), + m, + rid, + prop_path, + None, + condition_map(&witness), + )); + } else if skipped_unsatisfiable { + validate_item_cardinality_from_scenarios(out, m, rid, prop_path, schema); + return; + } + } + + if schema.unique_items == Some(true) { + let member_alternatives: Vec, serde_json::Value)>> = members + .iter() + .map(|member| { + present_alternatives(member.value) + .into_iter() + .filter(|(_, value)| !contains_dynamic_resolved(value)) + .map(|(literals, value)| (literals, resolved_value_to_json(value))) + .collect() + }) + .collect(); + 'pairs: for (left_index, left_alternatives) in member_alternatives.iter().enumerate() { + for right_alternatives in &member_alternatives[left_index + 1..] { + for (left_literals, left_json) in left_alternatives { + for (right_literals, right_json) in right_alternatives { + if left_json != right_json { + continue; + } + let mut witness = outer_conditions.clone(); + if extend_assignment(&mut witness, left_literals) + && extend_assignment(&mut witness, right_literals) + && is_satisfiable(m, &witness) + { + out.push(build_diagnostic_conditional( + "F3037", + "Array items are not unique", + m, + rid, + prop_path, + None, + condition_map(&witness), + )); + break 'pairs; + } + } + } + } + } + } +} + +fn presence_literals<'m>(member: &'m ContainerMember<'_>) -> &'m [(String, bool)] { + match &member.presence { + MemberPresence::When(literals) => literals.as_slice(), + _ => &[], + } +} + +/// Joint-scenario fallback for containers whose member presence cannot be +/// expressed as literal conjunctions. +fn validate_item_cardinality_from_scenarios( + out: &mut Vec, + m: &Arc, + rid: &str, + prop_path: &str, + schema: &PropSchema, +) { + for (value, conditions) in m.resolve_scenarios_json_shared(rid, prop_path).iter() { + if is_satisfiable(m, conditions) { + validate_item_cardinality_of_value(out, m, rid, prop_path, schema, value, conditions); + } + } +} + +fn validate_item_cardinality_of_value( + out: &mut Vec, + m: &Arc, + rid: &str, + prop_path: &str, + schema: &PropSchema, + value: &serde_json::Value, + conditions: &HashMap, +) { + let Some(items) = value.as_array() else { + return; + }; + // A null element is an `AWS::NoValue` that CloudFormation removes from the + // list at deploy time, so it is not a real member. + let surviving: Vec<&serde_json::Value> = items.iter().filter(|item| !item.is_null()).collect(); + let count = surviving.len() as u64; + if let Some(max) = schema.max_items + && count > max + { + out.push(build_diagnostic_conditional( + "F3032", + &format!("expected maximum item count: {}, found: {}", max, count), + m, + rid, + prop_path, + None, + condition_map(conditions), + )); + } + if let Some(min) = schema.min_items + && count < min + { + out.push(build_diagnostic_conditional( + "F3032", + &format!("expected minimum item count: {}, found: {}", min, count), + m, + rid, + prop_path, + None, + condition_map(conditions), + )); + } + if schema.unique_items == Some(true) { + let mut seen: Vec<&serde_json::Value> = Vec::new(); + for item in surviving { + if seen.contains(&item) { + out.push(build_diagnostic_conditional( + "F3037", + "Array items are not unique", + m, + rid, + prop_path, + None, + condition_map(conditions), + )); + break; + } + seen.push(item); + } + } +} + fn validate_array_item_constraints( out: &mut Vec, m: &Arc, diff --git a/src/template-model/src/consts.rs b/src/template-model/src/consts.rs index f7d5368b..dc60f407 100644 --- a/src/template-model/src/consts.rs +++ b/src/template-model/src/consts.rs @@ -212,6 +212,21 @@ pub const MAX_SCENARIO_COMBINATIONS: usize = 262_144; /// (here 128x the per-value cap). pub const MAX_TOTAL_SCENARIO_COMBINATIONS: u64 = 33_554_432; +/// Largest joint product of a container's member scenarios that is enumerated in +/// full. A list or map whose members are gated by N independent conditions has +/// 2^N joint assignments; past this many, the product is replaced by a pairwise +/// covering set (see `resolved_value::cover_cartesian_scenarios`), which keeps +/// every member alternative and every pair of condition states observable while +/// growing linearly in the number of conditions. Matches `MAX_ENUM_EXPANSION` so a +/// single value never materializes more joint copies than enumerated variants. +pub const MAX_COMPLETE_SCENARIO_PRODUCT: usize = 4_096; + +/// Largest number of `ResolvedValue` nodes a fully enumerated joint product may +/// materialize (scenario count times nodes per scenario). Bounds the memory of +/// one expansion by size rather than count: a product of large member values +/// switches to the covering set before `MAX_COMPLETE_SCENARIO_PRODUCT` would. +pub const MAX_SCENARIO_PRODUCT_NODES: usize = 1 << 20; + pub const MAX_RESOLVE_DEPTH: u32 = 512; /// Maximum structural nesting depth the YAML loader permits before rejecting @@ -227,6 +242,16 @@ pub const MAX_RESOLVE_DEPTH: u32 = 512; /// bounded by `serde_json`'s built-in recursion limit. pub const MAX_YAML_NESTING_DEPTH: usize = 512; +/// Maximum number of YAML nodes that alias resolution may copy into one +/// document. An alias is resolved by copying its anchored value, so nested +/// aliases multiply: eight levels of nine aliases over a nine-element list +/// expand a few hundred bytes into 9^8 scalars. The bound counts copied nodes +/// across the whole document and rejects the template with a located parse +/// error once exceeded. It is far above any template that uses anchors to share +/// configuration (a 10 MiB template cannot author this many nodes directly) and +/// well below the point where the copies exhaust memory. +pub const MAX_YAML_ALIAS_EXPANSION_NODES: usize = 1 << 20; + /// Cumulative work budget for `Fn::ForEach` transform expansion across all /// sections of a single template. Charged for every loop iteration (one unit per /// element emitted) and every recursive body-traversal node visited. Once diff --git a/src/template-model/src/dynamodb.rs b/src/template-model/src/dynamodb.rs index a84331e3..bb5497d3 100644 --- a/src/template-model/src/dynamodb.rs +++ b/src/template-model/src/dynamodb.rs @@ -29,11 +29,22 @@ pub fn analyze_dynamodb_table_scenarios(model: &SemanticModel, resource_id: &str let mut analysis = DynamoDbScenarioAnalysis::default(); let mut attribute_mismatches = BTreeSet::new(); - for (properties, conditions) in model.resolve_properties_scenarios(resource_id) { - if !scenario_is_reachable(model, resource_id, &conditions) { + let scenarios = model.resolve_properties_scenarios_projected( + resource_id, + &[ + ATTRIBUTE_DEFINITIONS, + BILLING_MODE, + GLOBAL_SECONDARY_INDEXES, + KEY_SCHEMA, + LOCAL_SECONDARY_INDEXES, + PROVISIONED_THROUGHPUT, + ], + ); + for (properties, conditions) in scenarios.iter() { + if !scenario_is_reachable(model, resource_id, conditions) { continue; } - let Some(properties) = properties_object(&properties) else { + let Some(properties) = properties_object(properties) else { continue; }; diff --git a/src/template-model/src/iam_policy.rs b/src/template-model/src/iam_policy.rs index 2f1001ae..539ce42d 100644 --- a/src/template-model/src/iam_policy.rs +++ b/src/template-model/src/iam_policy.rs @@ -579,7 +579,7 @@ fn reachable_identity_policy_scenarios( } else { let expanded = model.resolve_scenarios(resource_id, document_path); if !expanded.is_empty() { - expanded + expanded.as_ref().clone() } else if use_masked_fallback { vec![(mask_scenario_branching(&document), HashMap::new())] } else { diff --git a/src/template-model/src/lib.rs b/src/template-model/src/lib.rs index 170e8c4d..e7454458 100644 --- a/src/template-model/src/lib.rs +++ b/src/template-model/src/lib.rs @@ -19,6 +19,7 @@ pub mod ir; pub mod json_value; pub(crate) mod lang_ext_shapes; pub(crate) mod language_extensions; +pub mod member_presence; pub mod message; pub mod model; pub(crate) mod nesting; diff --git a/src/template-model/src/member_presence.rs b/src/template-model/src/member_presence.rs new file mode 100644 index 00000000..7d64b2ef --- /dev/null +++ b/src/template-model/src/member_presence.rs @@ -0,0 +1,302 @@ +//! Presence analysis for the members of a resolved list or map. +//! +//! A member gated by `Fn::If` over `AWS::NoValue` is present in exactly the +//! deployments where its condition literals hold. Knowing each member's +//! presence literals lets a consumer reason about cardinality and co-presence +//! without enumerating the 2^N joint assignments of N independent conditions. + +use std::collections::HashMap; + +use crate::resolved_value::{contains_dynamic_resolved, is_resolved_null}; +use crate::resolver::ResolvedValue; + +/// When a container member survives to deployment. +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum MemberPresence { + /// The member is present in every deployment. + Always, + /// The member resolves to `AWS::NoValue` in every deployment. + Never, + /// The member is present exactly when every listed `(condition, value)` + /// literal holds. + When(Vec<(String, bool)>), + /// Presence depends on conditions in a shape that has no single literal + /// conjunction (both branches partly present, or a parameter-driven `Enum` + /// mixing null and non-null variants). + Complex, +} + +/// Classifies one member of a resolved container. +#[must_use] +pub fn member_presence(member: &ResolvedValue) -> MemberPresence { + match member { + ResolvedValue::Conditional { condition, if_true, if_false } => { + conditional_presence(condition, member_presence(if_true), member_presence(if_false)) + } + ResolvedValue::Enum { variants } => { + let null_variants = variants.iter().filter(|variant| is_resolved_null(variant)).count(); + if null_variants == 0 { + MemberPresence::Always + } else if null_variants == variants.len() { + MemberPresence::Never + } else { + MemberPresence::Complex + } + } + other if is_resolved_null(other) => MemberPresence::Never, + _ => MemberPresence::Always, + } +} + +fn conditional_presence(condition: &str, if_true: MemberPresence, if_false: MemberPresence) -> MemberPresence { + let literal = |value: bool| (condition.to_string(), value); + match (if_true, if_false) { + (MemberPresence::Always, MemberPresence::Always) => MemberPresence::Always, + (MemberPresence::Never, MemberPresence::Never) => MemberPresence::Never, + (MemberPresence::Always, MemberPresence::Never) => MemberPresence::When(vec![literal(true)]), + (MemberPresence::Never, MemberPresence::Always) => MemberPresence::When(vec![literal(false)]), + (MemberPresence::When(mut literals), MemberPresence::Never) => { + literals.insert(0, literal(true)); + MemberPresence::When(literals) + } + (MemberPresence::Never, MemberPresence::When(mut literals)) => { + literals.insert(0, literal(false)); + MemberPresence::When(literals) + } + _ => MemberPresence::Complex, + } +} + +/// One container member with its presence and whether a present value would +/// carry an unresolved reference or dynamic placeholder. +#[derive(Debug, Clone)] +pub struct ContainerMember<'a> { + pub value: &'a ResolvedValue, + pub presence: MemberPresence, + pub is_dynamic: bool, +} + +/// Classifies every member of a list, or every entry value of a map. +#[must_use] +pub fn classify_members(members: &[ResolvedValue]) -> Vec> { + members + .iter() + .map(|value| ContainerMember { + value, + presence: member_presence(value), + is_dynamic: contains_dynamic_resolved(value), + }) + .collect() +} + +/// Every non-null value a member can take, each with the condition literals +/// that select it. A member that is a plain value has one alternative with no +/// literals; an `Fn::If` chain has one per reachable non-null leaf. +#[must_use] +pub fn present_alternatives(member: &ResolvedValue) -> Vec<(Vec<(String, bool)>, &ResolvedValue)> { + let mut alternatives = Vec::new(); + collect_present_alternatives(member, &mut Vec::new(), &mut alternatives); + alternatives +} + +fn collect_present_alternatives<'a>( + value: &'a ResolvedValue, + literals: &mut Vec<(String, bool)>, + alternatives: &mut Vec<(Vec<(String, bool)>, &'a ResolvedValue)>, +) { + match value { + ResolvedValue::Conditional { condition, if_true, if_false } => { + for (branch, holds) in [(if_true, true), (if_false, false)] { + match literals.iter().find(|(name, _)| name == condition) { + Some((_, decided)) if *decided == holds => { + collect_present_alternatives(branch, literals, alternatives); + } + Some(_) => {} + None => { + literals.push((condition.clone(), holds)); + collect_present_alternatives(branch, literals, alternatives); + literals.pop(); + } + } + } + } + ResolvedValue::Enum { variants } => { + for variant in variants { + collect_present_alternatives(variant, literals, alternatives); + } + } + other if is_resolved_null(other) => {} + other => alternatives.push((literals.clone(), other)), + } +} + +/// Every way a member resolves to `AWS::NoValue`, each as the condition +/// literals that select that null leaf. Empty when the member is always +/// present; one empty literal set when it is unconditionally null. +#[must_use] +pub fn absent_alternatives(member: &ResolvedValue) -> Vec> { + let mut alternatives = Vec::new(); + collect_absent_alternatives(member, &mut Vec::new(), &mut alternatives); + alternatives +} + +fn collect_absent_alternatives( + value: &ResolvedValue, + literals: &mut Vec<(String, bool)>, + alternatives: &mut Vec>, +) { + match value { + ResolvedValue::Conditional { condition, if_true, if_false } => { + for (branch, holds) in [(if_true, true), (if_false, false)] { + match literals.iter().find(|(name, _)| name == condition) { + Some((_, decided)) if *decided == holds => { + collect_absent_alternatives(branch, literals, alternatives); + } + Some(_) => {} + None => { + literals.push((condition.clone(), holds)); + collect_absent_alternatives(branch, literals, alternatives); + literals.pop(); + } + } + } + } + ResolvedValue::Enum { variants } => { + for variant in variants { + collect_absent_alternatives(variant, literals, alternatives); + } + } + other if is_resolved_null(other) => alternatives.push(literals.clone()), + _ => {} + } +} + +/// Adds `literals` to `assignment` unless one contradicts an existing entry. +/// Returns whether the literals were compatible; on `false` the assignment is +/// left unchanged. +pub fn extend_assignment(assignment: &mut HashMap, literals: &[(String, bool)]) -> bool { + if literals.iter().any(|(condition, value)| assignment.get(condition).is_some_and(|existing| existing != value)) { + return false; + } + for (condition, value) in literals { + assignment.insert(condition.clone(), *value); + } + true +} + +#[cfg(test)] +mod tests { + use super::*; + + fn concrete(value: serde_json::Value) -> ResolvedValue { + ResolvedValue::Concrete { value: value.into() } + } + + fn no_value() -> ResolvedValue { + concrete(serde_json::Value::Null) + } + + fn conditional(condition: &str, if_true: ResolvedValue, if_false: ResolvedValue) -> ResolvedValue { + ResolvedValue::Conditional { + condition: condition.to_string(), + if_true: Box::new(if_true), + if_false: Box::new(if_false), + } + } + + #[test] + fn optional_member_over_no_value_is_present_when_its_condition_holds() { + let member = conditional("HasTag", concrete(serde_json::json!({"Key": "k"})), no_value()); + assert_eq!(member_presence(&member), MemberPresence::When(vec![("HasTag".to_string(), true)])); + } + + #[test] + fn reversed_branches_negate_the_literal() { + let member = conditional("Skip", no_value(), concrete(serde_json::json!("x"))); + assert_eq!(member_presence(&member), MemberPresence::When(vec![("Skip".to_string(), false)])); + } + + #[test] + fn nested_optional_member_conjoins_literals_outermost_first() { + let inner = conditional("Inner", concrete(serde_json::json!("x")), no_value()); + let member = conditional("Outer", inner, no_value()); + assert_eq!( + member_presence(&member), + MemberPresence::When(vec![("Outer".to_string(), true), ("Inner".to_string(), true)]) + ); + } + + #[test] + fn conditional_choosing_between_two_values_is_always_present() { + let member = conditional("Pick", concrete(serde_json::json!("a")), concrete(serde_json::json!("b"))); + assert_eq!(member_presence(&member), MemberPresence::Always); + } + + #[test] + fn conditional_whose_branches_are_both_partly_present_is_complex() { + let left = conditional("A", concrete(serde_json::json!("a")), no_value()); + let right = conditional("B", concrete(serde_json::json!("b")), no_value()); + assert_eq!(member_presence(&conditional("Pick", left, right)), MemberPresence::Complex); + } + + #[test] + fn enum_mixing_null_and_values_is_complex_and_all_null_is_never() { + let mixed = ResolvedValue::Enum { variants: vec![no_value(), concrete(serde_json::json!("a"))] }; + assert_eq!(member_presence(&mixed), MemberPresence::Complex); + let all_null = ResolvedValue::Enum { variants: vec![no_value(), no_value()] }; + assert_eq!(member_presence(&all_null), MemberPresence::Never); + } + + #[test] + fn present_alternatives_lists_each_non_null_leaf_with_its_literals() { + let member = conditional( + "Pick", + concrete(serde_json::json!("a")), + conditional("Other", no_value(), concrete(serde_json::json!("b"))), + ); + let alternatives = present_alternatives(&member); + assert_eq!(alternatives.len(), 2); + assert_eq!(alternatives[0].0, vec![("Pick".to_string(), true)]); + assert_eq!(alternatives[1].0, vec![("Pick".to_string(), false), ("Other".to_string(), false)]); + } + + #[test] + fn present_alternatives_skips_branches_contradicting_an_outer_literal() { + let member = conditional( + "Same", + conditional("Same", concrete(serde_json::json!("a")), concrete(serde_json::json!("dead"))), + no_value(), + ); + let alternatives = present_alternatives(&member); + assert_eq!(alternatives.len(), 1); + assert!(matches!(alternatives[0].1, ResolvedValue::Concrete { value } if value.as_str() == Some("a"))); + } + + #[test] + fn absent_alternatives_lists_the_null_leaves() { + let member = conditional("HasTag", concrete(serde_json::json!({"Key": "k"})), no_value()); + assert_eq!(absent_alternatives(&member), vec![vec![("HasTag".to_string(), false)]]); + assert!(absent_alternatives(&concrete(serde_json::json!([]))).is_empty()); + assert_eq!(absent_alternatives(&no_value()), vec![Vec::new()]); + } + + #[test] + fn classify_members_marks_reference_values_dynamic() { + let members = vec![ + ResolvedValue::Reference { target: "P".to_string(), kind: crate::resolver::RefKind::Ref }, + concrete(serde_json::json!("a")), + ]; + let classified = classify_members(&members); + assert!(classified[0].is_dynamic && classified[0].presence == MemberPresence::Always); + assert!(!classified[1].is_dynamic); + } + + #[test] + fn extend_assignment_rejects_contradicting_literals_without_mutating() { + let mut assignment = HashMap::from([("A".to_string(), true)]); + assert!(!extend_assignment(&mut assignment, &[("B".to_string(), true), ("A".to_string(), false)])); + assert_eq!(assignment.len(), 1); + assert!(extend_assignment(&mut assignment, &[("B".to_string(), true)])); + assert_eq!(assignment.get("B"), Some(&true)); + } +} diff --git a/src/template-model/src/model.rs b/src/template-model/src/model.rs index 3fca46d4..5f32d027 100644 --- a/src/template-model/src/model.rs +++ b/src/template-model/src/model.rs @@ -7,6 +7,7 @@ use crate::graph::ReferenceGraph; use crate::ir::*; use crate::is_custom_resource_type; use crate::json_value::JsonValue; +use crate::member_presence::absent_alternatives; use crate::regions::*; use crate::resolved_value::*; use crate::resolver::*; @@ -323,8 +324,10 @@ pub struct SemanticModel { /// available for best-effort value resolution but cannot prove reachability. invalid_inline_conditions: HashSet, resolve_memo: Mutex>>, - raw_scenario_memo: Mutex)>>>, - properties_scenario_cache: Mutex)>>>>, + raw_scenario_memo: + Mutex)>>, bool)>>, + properties_scenario_cache: + Mutex>), Arc)>>>>, scenario_memo: Mutex)>>>>, lifecycle_policy_scenario_cache: Mutex)>>>, /// Cumulative count of scenarios materialized by `resolve_scenarios` across @@ -1825,11 +1828,54 @@ impl SemanticModel { &self, resource_id: &str, ) -> Arc)>> { + self.resolve_properties_scenarios_selected(resource_id, None) + } + + /// Like [`Self::resolve_properties_scenarios_shared`] but expands only the + /// named top-level properties. Conditions that gate other properties never + /// enter the expansion, so the scenario count grows with the conditions on + /// the requested properties alone, and a scenario's assumptions carry only + /// the conditions its values depend on. + pub fn resolve_properties_scenarios_projected( + &self, + resource_id: &str, + property_names: &[&str], + ) -> Arc)>> { + let selection: BTreeSet = property_names.iter().map(|name| (*name).to_string()).collect(); + self.resolve_properties_scenarios_selected(resource_id, Some(selection)) + } + + /// The condition assignments under which the top-level property + /// `property_name` is absent at deployment: undeclared, or resolving to + /// `AWS::NoValue`. Only the conditions that decide the property's own + /// presence appear, never conditions nested inside a present value, so the + /// result stays linear in the property's `Fn::If` depth. Empty when the + /// property is always present or the resource's properties are dynamic. + #[must_use] + pub fn property_absence_scenarios(&self, resource_id: &str, property_name: &str) -> Vec> { + let Some(properties) = self.resolved_properties_value(resource_id) else { + return Vec::new(); + }; + let mut absences = Vec::new(); + collect_property_absences(&properties, property_name, &mut Vec::new(), &mut absences); + absences + } + + fn resolve_properties_scenarios_selected( + &self, + resource_id: &str, + selection: Option>, + ) -> Arc)>> { + let cache_key = (resource_id.to_string(), selection); let mut cache = self.properties_scenario_cache.lock().unwrap_or_else(|poisoned| poisoned.into_inner()); - if let Some(scenarios) = cache.get(resource_id) { + if let Some(scenarios) = cache.get(&cache_key) { return Arc::clone(scenarios); } - let scenarios = match self.resolved_properties_value(resource_id) { + let properties = self.resolved_properties_value(resource_id).map(|properties| match &cache_key.1 { + Some(selection) => project_properties_value(&properties, selection), + None => properties, + }); + let scenarios = match properties { Some(properties) => self.collect_scenarios_with_budget( &properties, MAX_SCENARIO_COMBINATIONS, @@ -1838,14 +1884,10 @@ impl SemanticModel { None => Vec::new(), }; let shared = Arc::new(scenarios); - cache.insert(resource_id.to_string(), Arc::clone(&shared)); + cache.insert(cache_key, Arc::clone(&shared)); shared } - pub fn resolve_properties_scenarios(&self, resource_id: &str) -> Vec<(ResolvedValue, HashMap)> { - self.resolve_properties_scenarios_shared(resource_id).as_ref().clone() - } - /// Returns the authored, branch-qualified source path for an effective path in /// one resolved scenario. The returned path uses the same dotted form as /// resolver source paths and can be passed to [`Self::resource_span`]. @@ -1863,18 +1905,33 @@ impl SemanticModel { scenario_source_path_at(&properties, relative_path, conditions, KEY_PROPERTIES) } - pub fn resolve_scenarios(&self, resource_id: &str, path: &str) -> Vec<(ResolvedValue, HashMap)> { - let key = (resource_id.to_string(), path.to_string()); + pub fn resolve_scenarios(&self, resource_id: &str, path: &str) -> Arc)>> { + self.resolve_scenarios_with_limit(resource_id, path, MAX_SCENARIO_COMBINATIONS).0 + } + + /// Expands the value at `path` under a per-value scenario limit, reporting + /// whether the expansion was curtailed. Results are memoized per + /// `(resource, path, limit)` so repeated queries, including the default-limit + /// [`Self::resolve_scenarios`], share one allocation and charge the + /// cumulative budget once. + pub fn resolve_scenarios_with_limit( + &self, + resource_id: &str, + path: &str, + per_value_limit: usize, + ) -> (Arc)>>, bool) { + let key = (resource_id.to_string(), path.to_string(), per_value_limit); let mut memo = self.raw_scenario_memo.lock().unwrap_or_else(|poisoned| poisoned.into_inner()); - if let Some(scenarios) = memo.get(&key) { - return scenarios.clone(); + if let Some((scenarios, was_curtailed)) = memo.get(&key) { + return (Arc::clone(scenarios), *was_curtailed); } - let scenarios = self.resolve_scenarios_with_limit(resource_id, path, MAX_SCENARIO_COMBINATIONS).0; - memo.insert(key, scenarios.clone()); - scenarios + let (scenarios, was_curtailed) = self.expand_scenarios_at_path(resource_id, path, per_value_limit); + let scenarios = Arc::new(scenarios); + memo.insert(key, (Arc::clone(&scenarios), was_curtailed)); + (scenarios, was_curtailed) } - pub fn resolve_scenarios_with_limit( + fn expand_scenarios_at_path( &self, resource_id: &str, path: &str, @@ -1913,9 +1970,9 @@ impl SemanticModel { path: &str, ) -> Vec<(serde_json::Value, HashMap)> { self.resolve_scenarios(resource_id, path) - .into_iter() + .iter() .filter_map(|(val, conds)| { - if contains_dynamic_resolved(&val) { + if contains_dynamic_resolved(val) { return None; } if !conds.is_empty() { @@ -1924,11 +1981,11 @@ impl SemanticModel { return None; } } - let json = crate::serialization::resolved_value_to_json_clean(&val)?; + let json = crate::serialization::resolved_value_to_json_clean(val)?; if json_contains_markers(&json) { return None; } - Some((json, conds)) + Some((json, conds.clone())) }) .collect() } @@ -2125,6 +2182,75 @@ impl SpanProvider for SemanticModel { } } +fn collect_property_absences( + properties: &ResolvedValue, + property_name: &str, + literals: &mut Vec<(String, bool)>, + absences: &mut Vec>, +) { + let assignment = |literals: &[(String, bool)]| literals.iter().cloned().collect::>(); + match properties { + ResolvedValue::Conditional { condition, if_true, if_false } => { + for (branch, holds) in [(if_true, true), (if_false, false)] { + match literals.iter().find(|(name, _)| name == condition) { + Some((_, decided)) if *decided == holds => { + collect_property_absences(branch, property_name, literals, absences); + } + Some(_) => {} + None => { + literals.push((condition.clone(), holds)); + collect_property_absences(branch, property_name, literals, absences); + literals.pop(); + } + } + } + } + ResolvedValue::Map { entries } => match entries.iter().find(|entry| entry.key == property_name) { + None => absences.push(assignment(literals)), + Some(entry) => { + for mut leaf_literals in absent_alternatives(&entry.value) { + let mut combined = literals.clone(); + combined.append(&mut leaf_literals); + absences.push(assignment(&combined)); + } + } + }, + ResolvedValue::Concrete { value } if value.get(property_name).is_none_or(serde_json::Value::is_null) => { + absences.push(assignment(literals)); + } + _ => {} + } +} + +/// Keeps only the selected top-level properties of a resolved `Properties` +/// value, descending through an `Fn::If` that wraps the whole block. +fn project_properties_value(properties: &ResolvedValue, selection: &BTreeSet) -> ResolvedValue { + match properties { + ResolvedValue::Conditional { condition, if_true, if_false } => ResolvedValue::Conditional { + condition: condition.clone(), + if_true: Box::new(project_properties_value(if_true, selection)), + if_false: Box::new(project_properties_value(if_false, selection)), + }, + ResolvedValue::Map { entries } => ResolvedValue::Map { + entries: entries.iter().filter(|entry| selection.contains(&entry.key)).cloned().collect(), + }, + ResolvedValue::Concrete { value } => match value.as_object() { + Some(object) => ResolvedValue::Concrete { + value: serde_json::Value::Object( + object + .iter() + .filter(|(key, _)| selection.contains(*key)) + .map(|(k, v)| (k.clone(), v.clone())) + .collect(), + ) + .into(), + }, + None => properties.clone(), + }, + other => other.clone(), + } +} + fn parse_rules(rules_json: &Option, arena: &Arena, rules_node: NodeRef) -> Vec { let Some(rules) = rules_json else { return Vec::new(); @@ -3338,7 +3464,7 @@ Resources: } #[test] - fn resolve_properties_scenarios_shared_reuses_allocation_and_matches_owned() { + fn resolve_properties_scenarios_shared_reuses_allocation() { let input = br#"{ "Parameters": {"Mode": {"Type": "String"}}, "Conditions": {"ChooseFirst": {"Fn::Equals": [{"Ref": "Mode"}, "first"]}}, @@ -3351,15 +3477,9 @@ Resources: let first = model.resolve_properties_scenarios_shared("R"); let combinations_after_first = model.scenario_combinations_used(); let second = model.resolve_properties_scenarios_shared("R"); - let owned = model.resolve_properties_scenarios("R"); assert!(Arc::ptr_eq(&first, &second), "repeated shared access must reuse one allocation"); assert!(first.len() > 1, "the Fn::If value must expand the whole-properties object into multiple scenarios"); - assert_eq!( - serde_json::to_value(first.as_ref()).expect("shared scenarios serialize"), - serde_json::to_value(&owned).expect("owned scenarios serialize"), - "the owned API must return the same scenarios as the shared accessor" - ); assert_eq!( model.scenario_combinations_used(), combinations_after_first, diff --git a/src/template-model/src/parser/yaml.rs b/src/template-model/src/parser/yaml.rs index 05bf1a06..6b70f492 100644 --- a/src/template-model/src/parser/yaml.rs +++ b/src/template-model/src/parser/yaml.rs @@ -291,6 +291,12 @@ struct CfnYamlLoader { doc_stack: Vec<(Yaml, usize)>, key_stack: Vec, anchor_map: BTreeMap, + /// Node count of each anchored value, so an alias is charged without + /// re-walking the value it copies. + anchor_sizes: BTreeMap, + /// Nodes copied by alias resolution so far, charged against + /// `MAX_YAML_ALIAS_EXPANSION_NODES`. + alias_expanded_nodes: usize, /// Stack of tags to apply when sequences/mappings complete. /// Each entry is (tag_name, stack_depth_when_set). /// A stack is needed because nested tags (e.g. `!Or [!Equals [...]]`) @@ -347,6 +353,8 @@ impl CfnYamlLoader { doc_stack: Vec::new(), key_stack: Vec::new(), anchor_map: BTreeMap::new(), + anchor_sizes: BTreeMap::new(), + alias_expanded_nodes: 0, pending_tags: Vec::new(), path_frames: Vec::new(), span_map: HashMap::new(), @@ -554,6 +562,7 @@ impl CfnYamlLoader { } if aid > 0 { + self.anchor_sizes.insert(aid, yaml_node_count(&node_val)); self.anchor_map.insert(aid, node_val.clone()); } @@ -690,6 +699,45 @@ impl CfnYamlLoader { self.suppress_tree_construction = true; false } + + /// Returns whether resolving the alias `anchor_id` stays within the + /// document-wide alias expansion budget. On the first overrun, records a + /// located parse error and suppresses every subsequent event, so the loader + /// never materializes the copies a nested-alias document would demand. + fn allow_alias_expansion(&mut self, anchor_id: usize, mark: Marker) -> bool { + let copied_nodes = self.anchor_sizes.get(&anchor_id).copied().unwrap_or(1); + self.alias_expanded_nodes = self.alias_expanded_nodes.saturating_add(copied_nodes); + if self.alias_expanded_nodes <= crate::consts::MAX_YAML_ALIAS_EXPANSION_NODES { + return true; + } + + if self.load_error.is_none() { + let (line, column) = Self::mark_position(mark); + self.load_error = Some(ParseError { + message: format!( + "Template exceeds the maximum YAML alias expansion of {} nodes at line {}", + crate::consts::MAX_YAML_ALIAS_EXPANSION_NODES, + line + ), + line: Some(line), + column: Some(column), + }); + } + self.suppress_tree_construction = true; + false + } +} + +/// Number of nodes in a loaded YAML value: every scalar, sequence and mapping +/// counts once, so it measures what an alias copy allocates. +fn yaml_node_count(value: &Yaml) -> usize { + match value { + Yaml::Array(items) => 1 + items.iter().map(yaml_node_count).sum::(), + Yaml::Hash(entries) => { + 1 + entries.iter().map(|(key, value)| yaml_node_count(key) + yaml_node_count(value)).sum::() + } + _ => 1, + } } impl MarkedEventReceiver for CfnYamlLoader { @@ -840,6 +888,9 @@ impl MarkedEventReceiver for CfnYamlLoader { } } Event::Alias(id) => { + if !self.allow_alias_expansion(id, mark) { + return; + } let n = self.anchor_map.get(&id).cloned().unwrap_or(Yaml::BadValue); // An alias resolves to an anchored value, so it is always a value or // sequence element (never a key); anchor a sequence element at itself. @@ -1990,4 +2041,40 @@ mod tests { assert!(msg.contains("nesting depth"), "error must reference nesting depth, got: {}", error.message); assert!(error.line.is_some(), "error must carry a source line"); } + + /// `levels` nested anchors, each a sequence of `width` aliases to the level + /// below, so resolving the final alias copies `width^levels` scalars. + fn nested_alias_yaml(width: usize, levels: usize) -> String { + let mut yaml = String::from("Metadata:\n"); + yaml.push_str(&format!(" Level0: &level0 [{}]\n", vec!["x"; width].join(", "))); + for level in 1..levels { + let aliases = vec![format!("*level{}", level - 1); width].join(", "); + yaml.push_str(&format!(" Level{level}: &level{level} [{aliases}]\n")); + } + yaml.push_str(&format!( + "Resources:\n Topic:\n Type: AWS::SNS::Topic\n Metadata:\n Expanded: *level{}\n", + levels - 1 + )); + yaml + } + + #[test] + fn yaml_aliases_within_the_expansion_budget_parse() { + // 4^5 = 1,024 scalars at the deepest alias, well inside the budget. + let result = parse_yaml(nested_alias_yaml(4, 6).as_bytes()); + assert!(result.is_ok(), "moderate alias reuse must parse: {:?}", result.err()); + } + + #[test] + fn yaml_aliases_beyond_the_expansion_budget_fail_with_a_located_error() { + // 9^7 scalars copied by the deepest level alone exceed the budget. + let result = parse_yaml(nested_alias_yaml(9, 8).as_bytes()); + let error = result.expect_err("exponential alias expansion must be rejected"); + assert!( + error.message.contains("alias expansion"), + "error must reference alias expansion, got: {}", + error.message + ); + assert!(error.line.is_some(), "error must carry a source line"); + } } diff --git a/src/template-model/src/resolved_value.rs b/src/template-model/src/resolved_value.rs index 0ad58b55..8bb752d1 100644 --- a/src/template-model/src/resolved_value.rs +++ b/src/template-model/src/resolved_value.rs @@ -242,7 +242,7 @@ pub fn collect_conditional_nulls(val: &ResolvedValue, path: &str, out: &mut Vec< } } -fn is_resolved_null(val: &ResolvedValue) -> bool { +pub fn is_resolved_null(val: &ResolvedValue) -> bool { match val { ResolvedValue::Concrete { value: v } if v.is_null() => true, ResolvedValue::Conditional { if_true: t, if_false: f, .. } => is_resolved_null(t) && is_resolved_null(f), @@ -529,6 +529,10 @@ fn json_values_matching_wildcard_path(val: &serde_json::Value, path: &str) -> Ve /// Expansion remains bounded to `limit` partial combinations after every item, /// but every retained combination continues through every remaining item so no /// returned list or map is structurally incomplete. +/// +/// A product larger than `MAX_COMPLETE_SCENARIO_PRODUCT` combinations or +/// `MAX_SCENARIO_PRODUCT_NODES` nodes is not enumerated; it is covered pairwise +/// instead, which is linear in the number of conditions. fn expand_cartesian_scenarios( items: &[(T, Vec<(ResolvedValue, HashMap)>)], base_assumptions: &HashMap, @@ -539,6 +543,9 @@ fn expand_cartesian_scenarios( if limit == 0 { return !items.is_empty(); } + if !product_is_enumerable(items) { + return cover_cartesian_scenarios(items, base_assumptions, limit, build_result, results); + } let mut combos: Vec<(Vec<(T, ResolvedValue)>, HashMap)> = vec![(Vec::new(), base_assumptions.clone())]; @@ -578,6 +585,109 @@ fn expand_cartesian_scenarios( curtailed } +/// Whether the joint product of the member scenarios is small enough, in +/// combinations and in materialized nodes, to enumerate in full. +fn product_is_enumerable(items: &[(T, Vec<(ResolvedValue, HashMap)>)]) -> bool { + let mut combinations = 1usize; + let mut nodes_per_combination = 0usize; + for (_, scenarios) in items { + combinations = combinations.saturating_mul(scenarios.len().max(1)); + nodes_per_combination += scenarios.iter().map(|(value, _)| node_count(value)).max().unwrap_or(0); + } + combinations <= MAX_COMPLETE_SCENARIO_PRODUCT + && combinations.saturating_mul(nodes_per_combination.max(1)) <= MAX_SCENARIO_PRODUCT_NODES +} + +/// Number of `ResolvedValue` nodes in a value, the unit the materialization +/// bound counts. +pub fn node_count(value: &ResolvedValue) -> usize { + match value { + ResolvedValue::List { items } => 1 + items.iter().map(node_count).sum::(), + ResolvedValue::Map { entries } => 1 + entries.iter().map(|entry| node_count(&entry.value)).sum::(), + ResolvedValue::Enum { variants } => 1 + variants.iter().map(node_count).sum::(), + ResolvedValue::Conditional { if_true, if_false, .. } => 1 + node_count(if_true) + node_count(if_false), + ResolvedValue::Concrete { .. } + | ResolvedValue::Reference { .. } + | ResolvedValue::Dynamic { .. } + | ResolvedValue::TypedDynamic { .. } => 1, + } +} + +/// Pairwise-covering replacement for a joint product too large to enumerate. +/// +/// The conditions appearing in any member scenario are assigned globally: +/// every condition true, every condition false, and every-true with one +/// condition flipped. Each member then contributes the single scenario +/// consistent with that assignment. Every member alternative and every pair of +/// condition states appears in at least one result, so checks that look at one +/// member, or at how two members relate, see the same evidence the full product +/// would give; only findings that need three or more independent conditions set +/// together are not represented. The result count is linear in the number of +/// conditions. A member whose own expansion was curtailed may have no scenario +/// for an assignment; that assignment is skipped and reported as curtailment. +fn cover_cartesian_scenarios( + items: &[(T, Vec<(ResolvedValue, HashMap)>)], + base_assumptions: &HashMap, + limit: usize, + build_result: impl Fn(Vec<(T, ResolvedValue)>) -> ResolvedValue, + results: &mut Vec<(ResolvedValue, HashMap)>, +) -> bool { + let mut conditions: Vec<&str> = items + .iter() + .flat_map(|(_, scenarios)| scenarios.iter().flat_map(|(_, assumptions)| assumptions.keys())) + .filter(|condition| !base_assumptions.contains_key(condition.as_str())) + .map(String::as_str) + .collect(); + conditions.sort_unstable(); + conditions.dedup(); + + let assignment = |decide: &dyn Fn(&str) -> bool| -> HashMap { + let mut assumptions = base_assumptions.clone(); + assumptions.extend(conditions.iter().map(|condition| (condition.to_string(), decide(condition)))); + assumptions + }; + let mut assignments = vec![assignment(&|_| true), assignment(&|_| false)]; + assignments.extend(conditions.iter().map(|flipped| assignment(&|condition| condition != *flipped))); + + let mut seen: Vec> = Vec::new(); + let mut curtailed = false; + for global in assignments { + let mut merged = base_assumptions.clone(); + let mut collected = Vec::with_capacity(items.len()); + let mut complete = true; + for (key, scenarios) in items { + let consistent = scenarios.iter().find(|(_, assumptions)| { + assumptions.iter().all(|(condition, value)| global.get(condition) == Some(value)) + }); + match consistent { + Some((value, assumptions)) => { + merged.extend(assumptions.iter().map(|(condition, value)| (condition.clone(), *value))); + collected.push((key.clone(), value.clone())); + } + None => { + complete = false; + break; + } + } + } + if !complete { + curtailed = true; + continue; + } + let mut canonical: Vec<(String, bool)> = merged.iter().map(|(c, v)| (c.clone(), *v)).collect(); + canonical.sort(); + if seen.contains(&canonical) { + continue; + } + if results.len() >= limit { + return true; + } + seen.push(canonical); + results.push((build_result(collected), merged)); + } + curtailed +} + fn expand_list_scenarios( items: &[ResolvedValue], base_assumptions: &HashMap, @@ -1364,4 +1474,117 @@ mod tests { } } } + + fn optional_item(condition: &str, value: &str) -> ResolvedValue { + ResolvedValue::Conditional { + condition: condition.to_string(), + if_true: Box::new(ResolvedValue::Concrete { value: json!(value).into() }), + if_false: Box::new(ResolvedValue::Concrete { value: json!(null).into() }), + } + } + + fn present_items(scenario: &ResolvedValue) -> Vec { + let ResolvedValue::List { items } = scenario else { panic!("expected a list, got {scenario:?}") }; + items + .iter() + .filter_map(|item| match item { + ResolvedValue::Concrete { value } => value.as_str().map(str::to_string), + other => panic!("expected a concrete item, got {other:?}"), + }) + .collect() + } + + #[test] + fn independent_conditions_below_the_product_bound_are_enumerated_in_full() { + let list = ResolvedValue::List { items: (0..4).map(|i| optional_item(&format!("C{i}"), "v")).collect() }; + let mut scenarios = Vec::new(); + let curtailed = collect_scenarios(&list, &HashMap::new(), MAX_SCENARIO_COMBINATIONS, &mut scenarios); + assert!(!curtailed); + assert_eq!(scenarios.len(), 16, "2^4 joint assignments"); + } + + #[test] + fn independent_conditions_above_the_product_bound_are_covered_pairwise() { + let count = 13; + let list = ResolvedValue::List { + items: (0..count).map(|i| optional_item(&format!("C{i:02}"), &format!("v{i:02}"))).collect(), + }; + let mut scenarios = Vec::new(); + let curtailed = collect_scenarios(&list, &HashMap::new(), MAX_SCENARIO_COMBINATIONS, &mut scenarios); + assert!(!curtailed, "a covering set is a complete analysis strategy, not a curtailment"); + assert_eq!(scenarios.len(), count + 2, "all-true, all-false and all-true with one condition flipped"); + + let all_present = scenarios.iter().find(|(value, _)| present_items(value).len() == count).expect("all-present"); + assert!(all_present.1.values().all(|value| *value)); + let all_absent = scenarios.iter().find(|(value, _)| present_items(value).is_empty()).expect("all-absent"); + assert!(all_absent.1.values().all(|value| !*value)); + for i in 0..count { + let flipped = format!("C{i:02}"); + let single_flip = scenarios + .iter() + .find(|(_, assumptions)| assumptions.iter().all(|(condition, value)| *value == (condition != &flipped))) + .unwrap_or_else(|| panic!("a scenario with only {flipped} false")); + let present = present_items(&single_flip.0); + assert_eq!(present.len(), count - 1); + assert!(!present.contains(&format!("v{i:02}"))); + } + for (_, assumptions) in &scenarios { + assert_eq!(assumptions.len(), count, "every scenario decides every condition"); + } + } + + #[test] + fn covering_set_deduplicates_assignments_that_coincide() { + // One shared condition gates every item, so all-true-with-flip equals all-false. + let list = ResolvedValue::List { items: (0..3).map(|_| optional_item("Shared", "v")).collect() }; + let mut scenarios = Vec::new(); + collect_scenarios(&list, &HashMap::new(), MAX_SCENARIO_COMBINATIONS, &mut scenarios); + assert_eq!(scenarios.len(), 2, "shared conditions never multiply"); + } + + #[test] + fn covering_set_is_chosen_by_materialized_size_as_well_as_count() { + let wide_leaf = ResolvedValue::List { + items: (0..600).map(|i| ResolvedValue::Concrete { value: json!(i).into() }).collect(), + }; + let optional_wide = |condition: &str| ResolvedValue::Conditional { + condition: condition.to_string(), + if_true: Box::new(wide_leaf.clone()), + if_false: Box::new(ResolvedValue::Concrete { value: json!(null).into() }), + }; + let items: Vec<(usize, Vec<(ResolvedValue, HashMap)>)> = (0..11) + .map(|i| { + let mut scenarios = Vec::new(); + collect_scenarios(&optional_wide(&format!("C{i:02}")), &HashMap::new(), 16, &mut scenarios); + (i, scenarios) + }) + .collect(); + assert!(!product_is_enumerable(&items), "2^11 combos of ~600-node members exceed the node bound"); + let small: Vec<(usize, Vec<(ResolvedValue, HashMap)>)> = items + .iter() + .map(|(i, scenarios)| { + ( + *i, + scenarios + .iter() + .map(|(_, a)| (ResolvedValue::Concrete { value: json!(1).into() }, a.clone())) + .collect(), + ) + }) + .collect(); + assert!(product_is_enumerable(&small), "the same 2^11 combos of scalar members are enumerable"); + } + + #[test] + fn node_count_counts_every_resolved_node_once() { + let value = ResolvedValue::Map { + entries: vec![MapEntry { + key: "k".into(), + value: ResolvedValue::List { + items: vec![optional_item("C", "v"), ResolvedValue::Concrete { value: json!(1).into() }], + }, + }], + }; + assert_eq!(node_count(&value), 6, "map + list + conditional + its two leaves + the concrete item"); + } } From a3e7a9a5403f532472f64e0eb00ccd3ceb349feb Mon Sep 17 00:00:00 2001 From: Satyaki Ghosh Date: Thu, 8 Oct 2026 13:05:38 -0400 Subject: [PATCH 2/8] fix perf tests --- src/performance-harness/README.md | 5 +++ src/performance-harness/src/measurement.rs | 44 +++++++++++++++++++++- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/src/performance-harness/README.md b/src/performance-harness/README.md index b37123cb..a3b3acec 100644 --- a/src/performance-harness/README.md +++ b/src/performance-harness/README.md @@ -63,6 +63,11 @@ it is understood and accepted - normally with each new release, so that every re one. The anchor is a tag rather than recorded numbers, so it is independent of runner hardware and never needs measurements from a GitHub runner to update. +A security fixture that the anchored release cannot validate (it exhausts memory or needs tens of seconds per +validation) has no base measurement to pair with, so `UNCOMPARABLE_SECURITY_FIXTURES` in `src/measurement.rs` leaves +it out of the workloads. A unit test fails once the anchor reaches the release that measures those fixtures, so +advancing the anchor past it also removes the entries. + ## Run locally Build the base harness from a clean export of the base revision, then pass it to `compare`. Reusing the workspace diff --git a/src/performance-harness/src/measurement.rs b/src/performance-harness/src/measurement.rs index 9faf9759..c5cb3095 100644 --- a/src/performance-harness/src/measurement.rs +++ b/src/performance-harness/src/measurement.rs @@ -225,6 +225,18 @@ fn collect_template_paths(directory: &Path, output: &mut Vec) -> Result Ok(()) } +/// Security fixtures the anchored release cannot measure, so no base launch exists to pair a head launch with: it +/// exhausts memory on the alias expansion and the conditional list items, and needs over 20 s per validation of the +/// conditional statements. Releases from `BOUNDED_EXPANSION_RELEASE` on complete them at the fixed baseline; remove the +/// entries when `drift-anchor.txt` reaches that release (`uncomparable_fixtures_exist_until_the_anchor_measures_them`). +const UNCOMPARABLE_SECURITY_FIXTURES: [&str; 3] = + ["independent_conditions_list_items.yaml", "independent_conditions_statements.yaml", "yaml_alias_expansion.yaml"]; + +/// First release that bounds independent-condition and alias expansion, measured against `drift-anchor.txt` by the +/// unit test that retires `UNCOMPARABLE_SECURITY_FIXTURES`. +#[cfg(test)] +const BOUNDED_EXPANSION_RELEASE: (u64, u64, u64) = (1, 14, 0); + fn security_workloads(directory: &Path) -> Result, String> { let iteration_counts = BTreeMap::from([ ("condition_fusion.yaml", 2), @@ -239,6 +251,12 @@ fn security_workloads(directory: &Path) -> Result, String> { ]); let mut templates = Vec::new(); collect_template_paths(directory, &mut templates)?; + templates.retain(|template| { + !template + .file_name() + .and_then(|name| name.to_str()) + .is_some_and(|name| UNCOMPARABLE_SECURITY_FIXTURES.contains(&name)) + }); templates.sort(); templates .into_iter() @@ -470,10 +488,32 @@ mod tests { generate_fixtures(&project_root().join("tmp/performance-harness-unit-test/fixtures")).expect("fixtures"); let workloads = workload_matrix(&fixtures).expect("workloads"); let names: Vec<&str> = workloads.iter().map(|workload| workload.name.as_str()).collect(); - assert_eq!(workloads.len(), 19, "{names:?}"); + assert_eq!(workloads.len(), 21, "{names:?}"); assert!(names.contains(&"tiny") && names.contains(&"mixed-real"), "{names:?}"); assert!(names.contains(&"security-cross-reference-fanout"), "{names:?}"); - assert_eq!(ENGINES.len() * workloads.len(), 57); + assert!(names.contains(&"security-independent-conditions-properties"), "{names:?}"); + assert!(!names.contains(&"security-yaml-alias-expansion"), "{names:?}"); + assert_eq!(ENGINES.len() * workloads.len(), 63); + } + + #[test] + fn uncomparable_fixtures_exist_until_the_anchor_measures_them() { + let security = project_root().join("src/resources/security"); + for fixture in UNCOMPARABLE_SECURITY_FIXTURES { + assert!(security.join(fixture).is_file(), "{fixture} is not a security fixture"); + } + let anchor = fs::read_to_string(project_root().join("src/performance-harness/drift-anchor.txt")) + .expect("drift anchor file"); + let release = anchor.trim().trim_end_matches("-beta"); + let numbers: Vec = release.split('.').map(|part| part.parse().expect("release number")).collect(); + let anchored = match numbers.as_slice() { + [major, minor, patch] => (*major, *minor, *patch), + other => panic!("expected MAJOR.MINOR.PATCH, found {other:?}"), + }; + assert!( + anchored < BOUNDED_EXPANSION_RELEASE, + "release {release} measures every security fixture: remove UNCOMPARABLE_SECURITY_FIXTURES" + ); } fn workload(name: &str, gate_process_lifecycle: bool) -> Workload { From fe74cdc068ee3e074720fc7bbe80e0b0f06d7613 Mon Sep 17 00:00:00 2001 From: Satyaki Ghosh Date: Sat, 10 Oct 2026 16:53:37 -0400 Subject: [PATCH 3/8] Fix bugs --- src/cfn-validate/tests/security_tests.rs | 47 +++ src/performance-harness/src/measurement.rs | 21 +- .../resources/lambda/snapstart_version.rego | 2 +- .../expected/validation_reports8.json | 314 +++++++++++++++++- .../conditional_scenario_correctness.yaml | 172 ++++++++++ src/resources/security/generate.py | 135 +++++++- .../independent_conditions_list_items.yaml | 5 +- .../security/yaml_alias_expanded_depth.yaml | 16 + src/schema-validator/src/validate.rs | 47 +-- src/template-model/src/consts.rs | 11 +- src/template-model/src/member_presence.rs | 145 +++----- src/template-model/src/model.rs | 14 +- src/template-model/src/parser/yaml.rs | 104 ++++-- src/template-model/src/resolved_value.rs | 239 ++++++++++--- 14 files changed, 1047 insertions(+), 225 deletions(-) create mode 100644 src/resources/security/conditional_scenario_correctness.yaml create mode 100644 src/resources/security/yaml_alias_expanded_depth.yaml diff --git a/src/cfn-validate/tests/security_tests.rs b/src/cfn-validate/tests/security_tests.rs index 17252fc6..c7f34dd1 100644 --- a/src/cfn-validate/tests/security_tests.rs +++ b/src/cfn-validate/tests/security_tests.rs @@ -706,6 +706,53 @@ fn independent_conditions_are_analyzed_completely_without_joint_expansion() { } } +#[test] +fn conditional_scenario_checks_remain_exact_beyond_the_product_bound() { + let bytes = common::load_security("conditional_scenario_correctness.yaml"); + for engine_name in ["rego", "cel", "composite"] { + let report = validate_report_within(COMPLETION_BUDGET, engine_name, bytes.clone()) + .unwrap_or_else(|| panic!("{engine_name}: scenario correctness fixture must complete")) + .expect("validation must return a structured report"); + let has_diagnostic = |rule_id: &str, resource_id: &str| { + report.diagnostics.iter().any(|diagnostic| { + diagnostic.rule_id == rule_id && diagnostic.resource_logical_id() == Some(resource_id) + }) + }; + + assert!(has_diagnostic("E3023", "Record"), "{engine_name}: the three-literal address branch is reachable"); + assert!(has_diagnostic("F3037", "NestedUniqueFunction"), "{engine_name}: conditional tag values can collide"); + assert!(has_diagnostic("W2530", "SnapStartFunction"), "{engine_name}: false-branch SnapStart is enabled"); + assert!( + !has_diagnostic("F3032", "ComplementaryArchitectureFunction"), + "{engine_name}: one complementary dynamic member is always present" + ); + assert!( + !has_diagnostic("F3032", "RepeatedConditionFunction"), + "{engine_name}: an impossible nested member is never present" + ); + assert!( + !has_diagnostic("I9040", "TaggedTopic"), + "{engine_name}: Tags are present in every reachable Properties branch" + ); + assert_eq!(report.status, ReportStatus::Ok, "{engine_name}: analysis must remain complete"); + assert!( + report.metadata.budget_exhaustions.is_none(), + "{engine_name}: no validation budget should be exhausted" + ); + } +} + +#[test] +fn alias_expanded_depth_is_rejected_with_structured_error() { + let bytes = common::load_security("yaml_alias_expanded_depth.yaml"); + let error = match SemanticModel::from_bytes(&bytes) { + Err(error) => error, + Ok(_) => panic!("alias-expanded nesting must exceed the depth limit"), + }; + let message = error.to_string().to_lowercase(); + assert!(message.contains("nesting depth"), "error must reference nesting depth, got: {error}"); +} + #[test] fn exponential_yaml_alias_expansion_is_rejected_with_structured_error() { let bytes = common::load_security("yaml_alias_expansion.yaml"); diff --git a/src/performance-harness/src/measurement.rs b/src/performance-harness/src/measurement.rs index c5cb3095..ee46a7d6 100644 --- a/src/performance-harness/src/measurement.rs +++ b/src/performance-harness/src/measurement.rs @@ -226,11 +226,16 @@ fn collect_template_paths(directory: &Path, output: &mut Vec) -> Result } /// Security fixtures the anchored release cannot measure, so no base launch exists to pair a head launch with: it -/// exhausts memory on the alias expansion and the conditional list items, and needs over 20 s per validation of the -/// conditional statements. Releases from `BOUNDED_EXPANSION_RELEASE` on complete them at the fixed baseline; remove the -/// entries when `drift-anchor.txt` reaches that release (`uncomparable_fixtures_exist_until_the_anchor_measures_them`). -const UNCOMPARABLE_SECURITY_FIXTURES: [&str; 3] = - ["independent_conditions_list_items.yaml", "independent_conditions_statements.yaml", "yaml_alias_expansion.yaml"]; +/// exhausts memory on the alias expansion and the conditional list items, aborts on alias-expanded nesting, and needs +/// over 20 s per validation of the conditional statements. Releases from `BOUNDED_EXPANSION_RELEASE` on complete them +/// at the fixed baseline; remove the entries when `drift-anchor.txt` reaches that release +/// (`uncomparable_fixtures_exist_until_the_anchor_measures_them`). +const UNCOMPARABLE_SECURITY_FIXTURES: [&str; 4] = [ + "independent_conditions_list_items.yaml", + "independent_conditions_statements.yaml", + "yaml_alias_expanded_depth.yaml", + "yaml_alias_expansion.yaml", +]; /// First release that bounds independent-condition and alias expansion, measured against `drift-anchor.txt` by the /// unit test that retires `UNCOMPARABLE_SECURITY_FIXTURES`. @@ -488,12 +493,14 @@ mod tests { generate_fixtures(&project_root().join("tmp/performance-harness-unit-test/fixtures")).expect("fixtures"); let workloads = workload_matrix(&fixtures).expect("workloads"); let names: Vec<&str> = workloads.iter().map(|workload| workload.name.as_str()).collect(); - assert_eq!(workloads.len(), 21, "{names:?}"); + assert_eq!(workloads.len(), 22, "{names:?}"); assert!(names.contains(&"tiny") && names.contains(&"mixed-real"), "{names:?}"); assert!(names.contains(&"security-cross-reference-fanout"), "{names:?}"); assert!(names.contains(&"security-independent-conditions-properties"), "{names:?}"); assert!(!names.contains(&"security-yaml-alias-expansion"), "{names:?}"); - assert_eq!(ENGINES.len() * workloads.len(), 63); + assert!(!names.contains(&"security-yaml-alias-expanded-depth"), "{names:?}"); + assert!(names.contains(&"security-conditional-scenario-correctness"), "{names:?}"); + assert_eq!(ENGINES.len() * workloads.len(), 66); } #[test] diff --git a/src/rego-engine/handwritten/rego/resources/lambda/snapstart_version.rego b/src/rego-engine/handwritten/rego/resources/lambda/snapstart_version.rego index a317fb21..75162abc 100644 --- a/src/rego-engine/handwritten/rego/resources/lambda/snapstart_version.rego +++ b/src/rego-engine/handwritten/rego/resources/lambda/snapstart_version.rego @@ -10,7 +10,7 @@ violation contains make_diag_full("W2530", "WARN", name, "") if { cfn_rule_active("W2530") some name in resources_of_type("AWS::Lambda::Function") - snap := resolve(name, "Properties.SnapStart") + some snap in resolve_all(name, "Properties.SnapStart") is_object(snap) apply_on := object.get(snap, "ApplyOn", "None") apply_on == "PublishedVersions" diff --git a/src/resources/expected/validation_reports8.json b/src/resources/expected/validation_reports8.json index 66252e7b..4f8a2543 100644 --- a/src/resources/expected/validation_reports8.json +++ b/src/resources/expected/validation_reports8.json @@ -14837,6 +14837,260 @@ } ] }, + "security/conditional_scenario_correctness.yaml": { + "filePath": "security/conditional_scenario_correctness.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 7, + "counts": { + "fatal": 1, + "errors": 1, + "warnings": 3, + "informational": 6, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3037", + "severity": "FATAL", + "message": "Array items are not unique", + "source": "SCHEMA", + "entity": { + "logicalId": "NestedUniqueFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "category": "Schema", + "startLine": 128, + "startColumn": 7, + "endLine": 128, + "endColumn": 11, + "conditionScenario": { + "Enabled02": false + }, + "ruleDescription": "Array items not unique", + "phase": "SCHEMA", + "context": { + "actualValue": [ + { + "Key": "Stage", + "Value": "prod" + }, + { + "Key": "Stage", + "Value": "dev" + } + ] + } + }, + { + "ruleId": "E3023", + "severity": "ERROR", + "message": "'not-an-address' is not a valid IPv4 address for record type 'A'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Record", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.ResourceRecords.0", + "category": "Resource", + "startLine": 159, + "startColumn": 81, + "endLine": 159, + "endColumn": 82, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" + }, + { + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'Enabled01' to False from current status True", + "source": "CFN_LINT", + "entity": { + "logicalId": "RepeatedConditionFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Architectures.1.Fn::If.1.Fn::If.2", + "category": "Best Practice", + "startLine": 120, + "startColumn": 62, + "endLine": 120, + "endColumn": 63, + "ruleDescription": "Check Fn::If has a path that cannot be reached", + "phase": "LINT" + }, + { + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'Enabled04' to False from current status True", + "source": "CFN_LINT", + "entity": { + "logicalId": "TaggedTopic", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Fn::If.Fn::If.1.Tags.Fn::If.2", + "category": "Best Practice", + "startLine": 142, + "startColumn": 5, + "endLine": 142, + "endColumn": 11, + "ruleDescription": "Check Fn::If has a path that cannot be reached", + "phase": "LINT" + }, + { + "ruleId": "W2530", + "severity": "WARN", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", + "source": "CFN_LINT", + "entity": { + "logicalId": "SnapStartFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.SnapStart", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", + "category": "Best Practice", + "startLine": 139, + "startColumn": 7, + "endLine": 139, + "endColumn": 16, + "ruleDescription": "Validate that SnapStart is properly configured", + "phase": "LINT" + }, + { + "ruleId": "I2530", + "severity": "INFO", + "message": "Runtime 'java21' should consider using SnapStart for improved performance", + "source": "CFN_LINT", + "entity": { + "logicalId": "SnapStartFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add SnapStart with ApplyOn set to 'PublishedVersions'", + "category": "Best Practice", + "startLine": 139, + "startColumn": 7, + "endLine": 139, + "endColumn": 16, + "documentationUrl": "https://docs.aws.amazon.com/lambda/latest/dg/snapstart.html", + "ruleDescription": "Validate that SnapStart is configured for >= Java11 runtimes", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Record", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.HostedZoneName", + "category": "Best Practice", + "startLine": 154, + "startColumn": 7, + "endLine": 154, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SharedRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SharedRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 94, + "startColumn": 5, + "endLine": 94, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ComplementaryArchitectureFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ComplementaryArchitectureFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 103, + "startColumn": 5, + "endLine": 103, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'RepeatedConditionFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "RepeatedConditionFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 113, + "startColumn": 5, + "endLine": 113, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SnapStartFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SnapStartFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 134, + "startColumn": 5, + "endLine": 134, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, "security/cross_reference_fanout.yaml": { "filePath": "security/cross_reference_fanout.yaml", "status": "OK", @@ -47245,14 +47499,38 @@ "fatal": 0, "errors": 0, "warnings": 0, - "informational": 0, + "informational": 1, "debug": 0 }, "suppressed": 0, "strict": false, "severityLevel": "DEBUG" }, - "diagnostics": [] + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Analyzer", + "entityType": "Resource", + "resourceType": "AWS::AccessAnalyzer::Analyzer" + }, + "propertyPath": "Properties.Type", + "category": "Best Practice", + "startLine": 83, + "startColumn": 7, + "endLine": 83, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-accessanalyzer.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + } + ] }, "security/independent_conditions_object_keys.yaml": { "filePath": "security/independent_conditions_object_keys.yaml", @@ -132714,6 +132992,38 @@ } ] }, + "security/yaml_alias_expanded_depth.yaml": { + "filePath": "security/yaml_alias_expanded_depth.yaml", + "status": "ERROR", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F1101", + "severity": "FATAL", + "message": "Template exceeds the maximum structural nesting depth of 512 at line 12", + "source": "SCHEMA", + "category": "Structure", + "startLine": 12, + "startColumn": 83, + "endLine": 12, + "endColumn": 83, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" + } + ] + }, "security/yaml_alias_expansion.yaml": { "filePath": "security/yaml_alias_expansion.yaml", "status": "ERROR", diff --git a/src/resources/security/conditional_scenario_correctness.yaml b/src/resources/security/conditional_scenario_correctness.yaml new file mode 100644 index 00000000..4b4535de --- /dev/null +++ b/src/resources/security/conditional_scenario_correctness.yaml @@ -0,0 +1,172 @@ +# Generated by resources/security/generate.py - do not edit by hand. + +AWSTemplateFormatVersion: '2010-09-09' +Description: 'Fixture: conditional scenario correctness. Generated; no sensitive data.' +Parameters: + Toggle00: + Type: String + Default: '' + Toggle01: + Type: String + Default: '' + Toggle02: + Type: String + Default: '' + Toggle03: + Type: String + Default: '' + Toggle04: + Type: String + Default: '' + Toggle05: + Type: String + Default: '' + Toggle06: + Type: String + Default: '' + Toggle07: + Type: String + Default: '' + Toggle08: + Type: String + Default: '' + Toggle09: + Type: String + Default: '' + Toggle10: + Type: String + Default: '' + Toggle11: + Type: String + Default: '' + Toggle12: + Type: String + Default: '' + Toggle13: + Type: String + Default: '' + Toggle14: + Type: String + Default: '' + Toggle15: + Type: String + Default: '' + Toggle16: + Type: String + Default: '' + Toggle17: + Type: String + Default: '' + Toggle18: + Type: String + Default: '' + Toggle19: + Type: String + Default: '' + Toggle20: + Type: String + Default: '' +Conditions: + Enabled00: !Not [!Equals [!Ref Toggle00, '']] + Enabled01: !Not [!Equals [!Ref Toggle01, '']] + Enabled02: !Not [!Equals [!Ref Toggle02, '']] + Enabled03: !Not [!Equals [!Ref Toggle03, '']] + Enabled04: !Not [!Equals [!Ref Toggle04, '']] + Enabled05: !Not [!Equals [!Ref Toggle05, '']] + Enabled06: !Not [!Equals [!Ref Toggle06, '']] + Enabled07: !Not [!Equals [!Ref Toggle07, '']] + Enabled08: !Not [!Equals [!Ref Toggle08, '']] + Enabled09: !Not [!Equals [!Ref Toggle09, '']] + Enabled10: !Not [!Equals [!Ref Toggle10, '']] + Enabled11: !Not [!Equals [!Ref Toggle11, '']] + Enabled12: !Not [!Equals [!Ref Toggle12, '']] + Enabled13: !Not [!Equals [!Ref Toggle13, '']] + Enabled14: !Not [!Equals [!Ref Toggle14, '']] + Enabled15: !Not [!Equals [!Ref Toggle15, '']] + Enabled16: !Not [!Equals [!Ref Toggle16, '']] + Enabled17: !Not [!Equals [!Ref Toggle17, '']] + Enabled18: !Not [!Equals [!Ref Toggle18, '']] + Enabled19: !Not [!Equals [!Ref Toggle19, '']] + Enabled20: !Not [!Equals [!Ref Toggle20, '']] +Resources: + SharedRole: + Type: AWS::IAM::Role + Properties: + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: {Service: lambda.amazonaws.com} + Action: 'sts:AssumeRole' + ComplementaryArchitectureFunction: + Type: AWS::Lambda::Function + Properties: + Runtime: python3.12 + Handler: index.handler + Role: !GetAtt SharedRole.Arn + Code: {S3Bucket: fixture, S3Key: function.zip} + Architectures: + - !If [Enabled00, !ImportValue ArchitectureA, !Ref AWS::NoValue] + - !If [Enabled00, !Ref AWS::NoValue, !ImportValue ArchitectureB] + RepeatedConditionFunction: + Type: AWS::Lambda::Function + Properties: + Runtime: python3.12 + Handler: index.handler + Role: !GetAtt SharedRole.Arn + Code: {S3Bucket: fixture, S3Key: function.zip} + Architectures: + - x86_64 + - !If [Enabled01, !If [Enabled01, !Ref AWS::NoValue, arm64], !Ref AWS::NoValue] + NestedUniqueFunction: + Type: AWS::Lambda::Function + Properties: + Runtime: python3.12 + Handler: index.handler + Role: !GetAtt SharedRole.Arn + Code: {S3Bucket: fixture, S3Key: function.zip} + Tags: + - Key: Stage + Value: !If [Enabled02, prod, dev] + - {Key: Stage, Value: dev} + SnapStartFunction: + Type: AWS::Lambda::Function + Properties: + Runtime: java21 + Handler: index.handler + Role: !GetAtt SharedRole.Arn + Code: {S3Bucket: fixture, S3Key: function.zip} + SnapStart: !If [Enabled03, !Ref AWS::NoValue, {ApplyOn: PublishedVersions}] + TaggedTopic: + Type: AWS::SNS::Topic + Properties: !If + - Enabled04 + - TopicName: tagged-a + Tags: !If + - Enabled04 + - [{Key: team, Value: a}] + - !Ref AWS::NoValue + - TopicName: tagged-b + Tags: [{Key: team, Value: b}] + Record: + Type: AWS::Route53::RecordSet + Properties: + HostedZoneName: example.com. + Name: www.example.com. + Type: A + TTL: '300' + ResourceRecords: + - !If [Enabled05, 192.0.2.1, !If [Enabled06, 192.0.2.2, !If [Enabled07, not-an-address, 192.0.2.3]]] + - !If [Enabled08, 198.51.100.1, !Ref AWS::NoValue] + - !If [Enabled09, 198.51.100.2, !Ref AWS::NoValue] + - !If [Enabled10, 198.51.100.3, !Ref AWS::NoValue] + - !If [Enabled11, 198.51.100.4, !Ref AWS::NoValue] + - !If [Enabled12, 198.51.100.5, !Ref AWS::NoValue] + - !If [Enabled13, 198.51.100.6, !Ref AWS::NoValue] + - !If [Enabled14, 198.51.100.7, !Ref AWS::NoValue] + - !If [Enabled15, 198.51.100.8, !Ref AWS::NoValue] + - !If [Enabled16, 198.51.100.9, !Ref AWS::NoValue] + - !If [Enabled17, 198.51.100.10, !Ref AWS::NoValue] + - !If [Enabled18, 198.51.100.11, !Ref AWS::NoValue] + - !If [Enabled19, 198.51.100.12, !Ref AWS::NoValue] + - !If [Enabled20, 198.51.100.13, !Ref AWS::NoValue] diff --git a/src/resources/security/generate.py b/src/resources/security/generate.py index 0d0d3c73..56872f1a 100644 --- a/src/resources/security/generate.py +++ b/src/resources/security/generate.py @@ -38,9 +38,10 @@ opaque values, De Morgan nesting, Rules constraints, and nested Fn::If resources independent_conditions_list_items.yaml - one S3 bucket whose Tags list has 18 items, each - gated by its own Fn::If over AWS::NoValue (2^18 - joint presence assignments) + one Access Analyzer whose Tags list has 18 items, + each gated by its own Fn::If over AWS::NoValue + (2^18 joint presence assignments; schema has + maxItems and uniqueItems) independent_conditions_properties.yaml one Lambda function with 16 optional top-level properties, each gated by its own condition @@ -50,8 +51,16 @@ independent_conditions_statements.yaml one IAM role whose inline policy has 16 optional statements (a joint consumer of the whole document) + conditional_scenario_correctness.yaml + reachable alternatives and condition-aware list + cardinality, uniqueness, property presence, and + SnapStart checks yaml_alias_expansion.yaml eight levels of nine YAML aliases that resolve to 9^8 scalars when aliases are copied (billion laughs) + yaml_alias_expanded_depth.yaml + a small alias chain whose expanded nesting exceeds + the structural depth limit while its node count + remains below the expansion budget All content is synthetic and generic: no account IDs, ARNs, secrets, or any sensitive or private data. Names are sequential placeholders. @@ -927,6 +936,10 @@ def append_if_arguments(depth: int, indent: int) -> None: # WIDTH^LEVELS scalars from a few hundred bytes. YAML_ALIAS_WIDTH = 9 YAML_ALIAS_LEVELS = 8 +YAML_ALIAS_DEPTH_PER_LEVEL = 64 +YAML_ALIAS_DEPTH_LEVELS = 9 +SCENARIO_COVERAGE_SIBLINGS = 13 +SCENARIO_CORRECTNESS_CONDITIONS = 8 + SCENARIO_COVERAGE_SIBLINGS def independent_condition_header(description: str, count: int) -> list[str]: @@ -966,14 +979,16 @@ def lambda_function_lines(resource_name: str) -> list[str]: def gen_independent_conditions_list_items() -> None: - """One list whose items are each gated by an independent condition. - - The bucket's Tags list carries both a maximum item count and a uniqueness - constraint in the resource schema, so every container-level check must be - answered from member presence rather than from the 2^18 joint assignments. - """ + """One schema-constrained list whose items are independently gated.""" lines = independent_condition_header("independent conditions on list items", INDEPENDENT_LIST_ITEMS) - lines += ["Resources:", " Bucket:", " Type: AWS::S3::Bucket", " Properties:", " Tags:"] + lines += [ + "Resources:", + " Analyzer:", + " Type: AWS::AccessAnalyzer::Analyzer", + " Properties:", + " Type: ACCOUNT", + " Tags:", + ] for index in range(INDEPENDENT_LIST_ITEMS): lines.append( f" - !If [Enabled{index:02d}, {{Key: tag-{index:02d}, Value: !Ref Toggle{index:02d}}}, " @@ -1040,6 +1055,104 @@ def gen_independent_conditions_statements() -> None: write("independent_conditions_statements.yaml", "\n".join(lines) + "\n") +def gen_conditional_scenario_correctness() -> None: + """Condition-sensitive checks that must remain exact beyond the product bound.""" + lines = independent_condition_header("conditional scenario correctness", SCENARIO_CORRECTNESS_CONDITIONS) + lines += [ + "Resources:", + " SharedRole:", + " Type: AWS::IAM::Role", + " Properties:", + " AssumeRolePolicyDocument:", + " Version: '2012-10-17'", + " Statement:", + " - Effect: Allow", + " Principal: {Service: lambda.amazonaws.com}", + " Action: 'sts:AssumeRole'", + ] + + def append_function(name: str, runtime: str = "python3.12") -> None: + lines.extend( + [ + f" {name}:", + " Type: AWS::Lambda::Function", + " Properties:", + f" Runtime: {runtime}", + " Handler: index.handler", + " Role: !GetAtt SharedRole.Arn", + " Code: {S3Bucket: fixture, S3Key: function.zip}", + ] + ) + + append_function("ComplementaryArchitectureFunction") + lines += [ + " Architectures:", + " - !If [Enabled00, !ImportValue ArchitectureA, !Ref AWS::NoValue]", + " - !If [Enabled00, !Ref AWS::NoValue, !ImportValue ArchitectureB]", + ] + append_function("RepeatedConditionFunction") + lines += [ + " Architectures:", + " - x86_64", + " - !If [Enabled01, !If [Enabled01, !Ref AWS::NoValue, arm64], !Ref AWS::NoValue]", + ] + append_function("NestedUniqueFunction") + lines += [ + " Tags:", + " - Key: Stage", + " Value: !If [Enabled02, prod, dev]", + " - {Key: Stage, Value: dev}", + ] + append_function("SnapStartFunction", "java21") + lines.append(" SnapStart: !If [Enabled03, !Ref AWS::NoValue, {ApplyOn: PublishedVersions}]") + lines += [ + " TaggedTopic:", + " Type: AWS::SNS::Topic", + " Properties: !If", + " - Enabled04", + " - TopicName: tagged-a", + " Tags: !If", + " - Enabled04", + " - [{Key: team, Value: a}]", + " - !Ref AWS::NoValue", + " - TopicName: tagged-b", + " Tags: [{Key: team, Value: b}]", + " Record:", + " Type: AWS::Route53::RecordSet", + " Properties:", + " HostedZoneName: example.com.", + " Name: www.example.com.", + " Type: A", + " TTL: '300'", + " ResourceRecords:", + " - !If [Enabled05, 192.0.2.1, !If [Enabled06, 192.0.2.2, !If [Enabled07, not-an-address, 192.0.2.3]]]", + ] + for index in range(SCENARIO_COVERAGE_SIBLINGS): + condition_index = index + 8 + lines.append( + f" - !If [Enabled{condition_index:02d}, 198.51.100.{index + 1}, !Ref AWS::NoValue]" + ) + write("conditional_scenario_correctness.yaml", "\n".join(lines) + "\n") + + +def gen_yaml_alias_expanded_depth() -> None: + """An alias chain whose expanded nesting, but not node count, exceeds the depth limit.""" + open_containers = "[" * YAML_ALIAS_DEPTH_PER_LEVEL + close_containers = "]" * YAML_ALIAS_DEPTH_PER_LEVEL + lines = [ + HEADER, + "AWSTemplateFormatVersion: '2010-09-09'", + "Metadata:", + f" Level0: &level0 {open_containers}x{close_containers}", + ] + for level in range(1, YAML_ALIAS_DEPTH_LEVELS): + lines.append( + f" Level{level}: &level{level} {open_containers}*level{level - 1}{close_containers}" + ) + lines += ["Resources:", " Topic:", " Type: AWS::SNS::Topic"] + write("yaml_alias_expanded_depth.yaml", "\n".join(lines) + "\n") + + def gen_yaml_alias_expansion() -> None: """Nested YAML aliases whose copied expansion is exponential in the nesting depth.""" lines = [ @@ -1082,7 +1195,9 @@ def main() -> None: gen_independent_conditions_properties() gen_independent_conditions_object_keys() gen_independent_conditions_statements() + gen_conditional_scenario_correctness() gen_yaml_alias_expansion() + gen_yaml_alias_expanded_depth() if __name__ == "__main__": diff --git a/src/resources/security/independent_conditions_list_items.yaml b/src/resources/security/independent_conditions_list_items.yaml index 8c9375a7..6d90a832 100644 --- a/src/resources/security/independent_conditions_list_items.yaml +++ b/src/resources/security/independent_conditions_list_items.yaml @@ -77,9 +77,10 @@ Conditions: Enabled16: !Not [!Equals [!Ref Toggle16, '']] Enabled17: !Not [!Equals [!Ref Toggle17, '']] Resources: - Bucket: - Type: AWS::S3::Bucket + Analyzer: + Type: AWS::AccessAnalyzer::Analyzer Properties: + Type: ACCOUNT Tags: - !If [Enabled00, {Key: tag-00, Value: !Ref Toggle00}, !Ref AWS::NoValue] - !If [Enabled01, {Key: tag-01, Value: !Ref Toggle01}, !Ref AWS::NoValue] diff --git a/src/resources/security/yaml_alias_expanded_depth.yaml b/src/resources/security/yaml_alias_expanded_depth.yaml new file mode 100644 index 00000000..f51e8bb8 --- /dev/null +++ b/src/resources/security/yaml_alias_expanded_depth.yaml @@ -0,0 +1,16 @@ +# Generated by resources/security/generate.py - do not edit by hand. + +AWSTemplateFormatVersion: '2010-09-09' +Metadata: + Level0: &level0 [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[x]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] + Level1: &level1 [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[*level0]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] + Level2: &level2 [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[*level1]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] + Level3: &level3 [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[*level2]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] + Level4: &level4 [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[*level3]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] + Level5: &level5 [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[*level4]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] + Level6: &level6 [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[*level5]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] + Level7: &level7 [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[*level6]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] + Level8: &level8 [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[*level7]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] +Resources: + Topic: + Type: AWS::SNS::Topic diff --git a/src/schema-validator/src/validate.rs b/src/schema-validator/src/validate.rs index 20ca30a9..99481176 100644 --- a/src/schema-validator/src/validate.rs +++ b/src/schema-validator/src/validate.rs @@ -9,18 +9,16 @@ use template_model::coercion::{CoerceResult, coerce_to_number, coerce_to_string, use template_model::conditions::Satisfiability; use template_model::consts::{ FN_CONDITION, FN_FOR_EACH_KEY_PREFIX, FN_IF, FN_REF, INTRINSIC_FN_PATH_SEGMENTS, KEY_PROPERTIES, KEY_TYPE, - MAX_REQUIRED_PROPERTY_COMBINATIONS, MAX_SCHEMA_MATCH_DEPTH as MAX_MATCH_DEPTH, + MAX_REQUIRED_PROPERTY_COMBINATIONS, MAX_SCENARIO_COMBINATIONS, MAX_SCHEMA_MATCH_DEPTH as MAX_MATCH_DEPTH, MAX_SCHEMA_SCENARIO_ASSIGNMENTS as MAX_GROUP_SCENARIO_ASSIGNMENTS, MAX_SCHEMA_SCENARIO_MERGE_ATTEMPTS as MAX_GROUP_SCENARIO_MERGE_ATTEMPTS, PARAM_TYPE_COMMA_DELIMITED_LIST, PARAM_TYPE_NUMBER, PARAM_TYPE_STRING, SAM_FUNCTION_TYPE, SAM_SERVERLESS_TYPE_PREFIX, }; -use template_model::member_presence::{ - ContainerMember, MemberPresence, classify_members, extend_assignment, present_alternatives, -}; +use template_model::member_presence::{ContainerMember, MemberPresence, classify_members, extend_assignment}; use template_model::message::{render_str_list, render_value, render_value_list}; use template_model::model::ResolvedResource; use template_model::region_enums; -use template_model::resolved_value::contains_dynamic_resolved; +use template_model::resolved_value::{collect_scenarios, contains_dynamic_resolved, is_resolved_null}; use template_model::resolver::{RefKind, ResolvedValue}; use template_model::{ BudgetKind, CompiledPattern, IAM_ROLE_ARN_PATTERN, SECURITY_GROUP_NAME_PATTERN, SemanticModel, compile_pattern, @@ -3819,6 +3817,10 @@ fn validate_member_cardinality( skipped_unsatisfiable = true; } } + if skipped_unsatisfiable { + validate_item_cardinality_from_scenarios(out, m, rid, prop_path, schema); + return; + } if count > max { out.push(build_diagnostic_conditional( "F3032", @@ -3829,9 +3831,6 @@ fn validate_member_cardinality( None, condition_map(&witness), )); - } else if skipped_unsatisfiable { - validate_item_cardinality_from_scenarios(out, m, rid, prop_path, schema); - return; } } @@ -3852,6 +3851,10 @@ fn validate_member_cardinality( count += 1; } } + if skipped_unsatisfiable { + validate_item_cardinality_from_scenarios(out, m, rid, prop_path, schema); + return; + } if count < min { out.push(build_diagnostic_conditional( "F3032", @@ -3862,35 +3865,35 @@ fn validate_member_cardinality( None, condition_map(&witness), )); - } else if skipped_unsatisfiable { - validate_item_cardinality_from_scenarios(out, m, rid, prop_path, schema); - return; } } if schema.unique_items == Some(true) { - let member_alternatives: Vec, serde_json::Value)>> = members + let member_alternatives: Vec, serde_json::Value)>> = members .iter() .map(|member| { - present_alternatives(member.value) + let mut alternatives = Vec::new(); + collect_scenarios(member.value, &HashMap::new(), MAX_SCENARIO_COMBINATIONS, &mut alternatives); + alternatives .into_iter() - .filter(|(_, value)| !contains_dynamic_resolved(value)) - .map(|(literals, value)| (literals, resolved_value_to_json(value))) + .filter(|(value, _)| !is_resolved_null(value) && !contains_dynamic_resolved(value)) + .map(|(value, conditions)| (conditions, resolved_value_to_json(&value))) .collect() }) .collect(); 'pairs: for (left_index, left_alternatives) in member_alternatives.iter().enumerate() { for right_alternatives in &member_alternatives[left_index + 1..] { - for (left_literals, left_json) in left_alternatives { - for (right_literals, right_json) in right_alternatives { + for (left_conditions, left_json) in left_alternatives { + for (right_conditions, right_json) in right_alternatives { if left_json != right_json { continue; } - let mut witness = outer_conditions.clone(); - if extend_assignment(&mut witness, left_literals) - && extend_assignment(&mut witness, right_literals) - && is_satisfiable(m, &witness) - { + let Some(witness) = try_merge_assignments(outer_conditions, left_conditions) + .and_then(|merged| try_merge_assignments(&merged, right_conditions)) + else { + continue; + }; + if is_satisfiable(m, &witness) { out.push(build_diagnostic_conditional( "F3037", "Array items are not unique", diff --git a/src/template-model/src/consts.rs b/src/template-model/src/consts.rs index dc60f407..b0fb2bb3 100644 --- a/src/template-model/src/consts.rs +++ b/src/template-model/src/consts.rs @@ -214,11 +214,12 @@ pub const MAX_TOTAL_SCENARIO_COMBINATIONS: u64 = 33_554_432; /// Largest joint product of a container's member scenarios that is enumerated in /// full. A list or map whose members are gated by N independent conditions has -/// 2^N joint assignments; past this many, the product is replaced by a pairwise -/// covering set (see `resolved_value::cover_cartesian_scenarios`), which keeps -/// every member alternative and every pair of condition states observable while -/// growing linearly in the number of conditions. Matches `MAX_ENUM_EXPANSION` so a -/// single value never materializes more joint copies than enumerated variants. +/// 2^N joint assignments; past this many, the product is replaced by an +/// alternative-covering set (see `resolved_value::cover_cartesian_scenarios`). +/// The covering set includes every member scenario and pair of condition states +/// while growing linearly in the sum of member alternatives. Matches +/// `MAX_ENUM_EXPANSION` so a single value never materializes more joint copies +/// than enumerated variants. pub const MAX_COMPLETE_SCENARIO_PRODUCT: usize = 4_096; /// Largest number of `ResolvedValue` nodes a fully enumerated joint product may diff --git a/src/template-model/src/member_presence.rs b/src/template-model/src/member_presence.rs index 7d64b2ef..2b5ece0e 100644 --- a/src/template-model/src/member_presence.rs +++ b/src/template-model/src/member_presence.rs @@ -49,20 +49,22 @@ pub fn member_presence(member: &ResolvedValue) -> MemberPresence { } fn conditional_presence(condition: &str, if_true: MemberPresence, if_false: MemberPresence) -> MemberPresence { - let literal = |value: bool| (condition.to_string(), value); + let conjoin_literal = + |mut literals: Vec<(String, bool)>, expected: bool| match literals.iter().find(|(name, _)| name == condition) { + Some((_, existing)) if *existing != expected => MemberPresence::Never, + Some(_) => MemberPresence::When(literals), + None => { + literals.insert(0, (condition.to_string(), expected)); + MemberPresence::When(literals) + } + }; match (if_true, if_false) { (MemberPresence::Always, MemberPresence::Always) => MemberPresence::Always, (MemberPresence::Never, MemberPresence::Never) => MemberPresence::Never, - (MemberPresence::Always, MemberPresence::Never) => MemberPresence::When(vec![literal(true)]), - (MemberPresence::Never, MemberPresence::Always) => MemberPresence::When(vec![literal(false)]), - (MemberPresence::When(mut literals), MemberPresence::Never) => { - literals.insert(0, literal(true)); - MemberPresence::When(literals) - } - (MemberPresence::Never, MemberPresence::When(mut literals)) => { - literals.insert(0, literal(false)); - MemberPresence::When(literals) - } + (MemberPresence::Always, MemberPresence::Never) => MemberPresence::When(vec![(condition.to_string(), true)]), + (MemberPresence::Never, MemberPresence::Always) => MemberPresence::When(vec![(condition.to_string(), false)]), + (MemberPresence::When(literals), MemberPresence::Never) => conjoin_literal(literals, true), + (MemberPresence::Never, MemberPresence::When(literals)) => conjoin_literal(literals, false), _ => MemberPresence::Complex, } } @@ -89,54 +91,15 @@ pub fn classify_members(members: &[ResolvedValue]) -> Vec> { .collect() } -/// Every non-null value a member can take, each with the condition literals -/// that select it. A member that is a plain value has one alternative with no -/// literals; an `Fn::If` chain has one per reachable non-null leaf. -#[must_use] -pub fn present_alternatives(member: &ResolvedValue) -> Vec<(Vec<(String, bool)>, &ResolvedValue)> { - let mut alternatives = Vec::new(); - collect_present_alternatives(member, &mut Vec::new(), &mut alternatives); - alternatives -} - -fn collect_present_alternatives<'a>( - value: &'a ResolvedValue, - literals: &mut Vec<(String, bool)>, - alternatives: &mut Vec<(Vec<(String, bool)>, &'a ResolvedValue)>, -) { - match value { - ResolvedValue::Conditional { condition, if_true, if_false } => { - for (branch, holds) in [(if_true, true), (if_false, false)] { - match literals.iter().find(|(name, _)| name == condition) { - Some((_, decided)) if *decided == holds => { - collect_present_alternatives(branch, literals, alternatives); - } - Some(_) => {} - None => { - literals.push((condition.clone(), holds)); - collect_present_alternatives(branch, literals, alternatives); - literals.pop(); - } - } - } - } - ResolvedValue::Enum { variants } => { - for variant in variants { - collect_present_alternatives(variant, literals, alternatives); - } - } - other if is_resolved_null(other) => {} - other => alternatives.push((literals.clone(), other)), - } -} - -/// Every way a member resolves to `AWS::NoValue`, each as the condition -/// literals that select that null leaf. Empty when the member is always -/// present; one empty literal set when it is unconditionally null. -#[must_use] -pub fn absent_alternatives(member: &ResolvedValue) -> Vec> { +/// Every way a member resolves to `AWS::NoValue`, constrained by decisions +/// already made by an enclosing conditional. +pub(crate) fn absent_alternatives( + member: &ResolvedValue, + established_literals: &[(String, bool)], +) -> Vec> { let mut alternatives = Vec::new(); - collect_absent_alternatives(member, &mut Vec::new(), &mut alternatives); + let mut literals = established_literals.to_vec(); + collect_absent_alternatives(member, &mut literals, &mut alternatives); alternatives } @@ -175,12 +138,15 @@ fn collect_absent_alternatives( /// Returns whether the literals were compatible; on `false` the assignment is /// left unchanged. pub fn extend_assignment(assignment: &mut HashMap, literals: &[(String, bool)]) -> bool { - if literals.iter().any(|(condition, value)| assignment.get(condition).is_some_and(|existing| existing != value)) { - return false; - } + let mut additions = HashMap::with_capacity(literals.len()); for (condition, value) in literals { - assignment.insert(condition.clone(), *value); + if assignment.get(condition).is_some_and(|existing| existing != value) + || additions.insert(condition.as_str(), *value).is_some_and(|existing| existing != *value) + { + return false; + } } + assignment.extend(additions.into_iter().map(|(condition, value)| (condition.to_string(), value))); true } @@ -247,37 +213,12 @@ mod tests { assert_eq!(member_presence(&all_null), MemberPresence::Never); } - #[test] - fn present_alternatives_lists_each_non_null_leaf_with_its_literals() { - let member = conditional( - "Pick", - concrete(serde_json::json!("a")), - conditional("Other", no_value(), concrete(serde_json::json!("b"))), - ); - let alternatives = present_alternatives(&member); - assert_eq!(alternatives.len(), 2); - assert_eq!(alternatives[0].0, vec![("Pick".to_string(), true)]); - assert_eq!(alternatives[1].0, vec![("Pick".to_string(), false), ("Other".to_string(), false)]); - } - - #[test] - fn present_alternatives_skips_branches_contradicting_an_outer_literal() { - let member = conditional( - "Same", - conditional("Same", concrete(serde_json::json!("a")), concrete(serde_json::json!("dead"))), - no_value(), - ); - let alternatives = present_alternatives(&member); - assert_eq!(alternatives.len(), 1); - assert!(matches!(alternatives[0].1, ResolvedValue::Concrete { value } if value.as_str() == Some("a"))); - } - #[test] fn absent_alternatives_lists_the_null_leaves() { let member = conditional("HasTag", concrete(serde_json::json!({"Key": "k"})), no_value()); - assert_eq!(absent_alternatives(&member), vec![vec![("HasTag".to_string(), false)]]); - assert!(absent_alternatives(&concrete(serde_json::json!([]))).is_empty()); - assert_eq!(absent_alternatives(&no_value()), vec![Vec::new()]); + assert_eq!(absent_alternatives(&member, &[]), vec![vec![("HasTag".to_string(), false)]]); + assert!(absent_alternatives(&concrete(serde_json::json!([])), &[]).is_empty()); + assert_eq!(absent_alternatives(&no_value(), &[]), vec![Vec::new()]); } #[test] @@ -299,4 +240,28 @@ mod tests { assert!(extend_assignment(&mut assignment, &[("B".to_string(), true)])); assert_eq!(assignment.get("B"), Some(&true)); } + + #[test] + fn repeated_condition_that_requires_both_values_is_never_present() { + let impossible = + conditional("Same", conditional("Same", no_value(), concrete(serde_json::json!("dead"))), no_value()); + assert_eq!(member_presence(&impossible), MemberPresence::Never); + } + + #[test] + fn absent_alternatives_honor_established_condition_decisions() { + let member = conditional("Same", concrete(serde_json::json!("present")), no_value()); + assert!(absent_alternatives(&member, &[("Same".to_string(), true)]).is_empty()); + assert_eq!( + absent_alternatives(&member, &[("Same".to_string(), false)]), + vec![vec![("Same".to_string(), false)]] + ); + } + + #[test] + fn extend_assignment_rejects_contradictions_within_new_literals() { + let mut assignment = HashMap::new(); + assert!(!extend_assignment(&mut assignment, &[("A".to_string(), true), ("A".to_string(), false)])); + assert!(assignment.is_empty()); + } } diff --git a/src/template-model/src/model.rs b/src/template-model/src/model.rs index 5f32d027..ef624d1e 100644 --- a/src/template-model/src/model.rs +++ b/src/template-model/src/model.rs @@ -1762,7 +1762,13 @@ impl SemanticModel { let remaining_limit = usize::try_from(remaining).unwrap_or(usize::MAX); let effective_limit = per_value_limit.min(remaining_limit); let mut scenarios = Vec::new(); - let was_curtailed = collect_scenarios(value, assumptions, effective_limit, &mut scenarios); + let is_reachable = |scenario_assumptions: &HashMap| { + let assumptions: Vec<(String, bool)> = + scenario_assumptions.iter().map(|(condition, value)| (condition.clone(), *value)).collect(); + self.conditions.is_satisfiable(&assumptions) + }; + let was_curtailed = + collect_scenarios_reachable(value, assumptions, effective_limit, &mut scenarios, &is_reachable); if was_curtailed { self.scenario_expansion_curtailed.store(true, Ordering::Relaxed); if per_value_limit == MAX_SCENARIO_COMBINATIONS && per_value_limit <= remaining_limit { @@ -2208,10 +2214,8 @@ fn collect_property_absences( ResolvedValue::Map { entries } => match entries.iter().find(|entry| entry.key == property_name) { None => absences.push(assignment(literals)), Some(entry) => { - for mut leaf_literals in absent_alternatives(&entry.value) { - let mut combined = literals.clone(); - combined.append(&mut leaf_literals); - absences.push(assignment(&combined)); + for absence_literals in absent_alternatives(&entry.value, literals) { + absences.push(assignment(&absence_literals)); } } }, diff --git a/src/template-model/src/parser/yaml.rs b/src/template-model/src/parser/yaml.rs index 6b70f492..a50e9673 100644 --- a/src/template-model/src/parser/yaml.rs +++ b/src/template-model/src/parser/yaml.rs @@ -291,9 +291,9 @@ struct CfnYamlLoader { doc_stack: Vec<(Yaml, usize)>, key_stack: Vec, anchor_map: BTreeMap, - /// Node count of each anchored value, so an alias is charged without - /// re-walking the value it copies. - anchor_sizes: BTreeMap, + /// Size and nesting depth of each anchored value, so an alias is checked + /// without recursively walking the value it copies. + anchor_shapes: BTreeMap, /// Nodes copied by alias resolution so far, charged against /// `MAX_YAML_ALIAS_EXPANSION_NODES`. alias_expanded_nodes: usize, @@ -353,7 +353,7 @@ impl CfnYamlLoader { doc_stack: Vec::new(), key_stack: Vec::new(), anchor_map: BTreeMap::new(), - anchor_sizes: BTreeMap::new(), + anchor_shapes: BTreeMap::new(), alias_expanded_nodes: 0, pending_tags: Vec::new(), path_frames: Vec::new(), @@ -562,7 +562,7 @@ impl CfnYamlLoader { } if aid > 0 { - self.anchor_sizes.insert(aid, yaml_node_count(&node_val)); + self.anchor_shapes.insert(aid, yaml_shape(&node_val)); self.anchor_map.insert(aid, node_val.clone()); } @@ -676,14 +676,7 @@ impl CfnYamlLoader { _ => unreachable!(), } } - /// Returns whether another container may be opened. On the first overrun, - /// records a located parse error and suppresses every subsequent event so - /// the loader never constructs a tree deeper than the deterministic bound. - fn allow_container(&mut self, mark: Marker) -> bool { - if self.doc_stack.len() < crate::consts::MAX_YAML_NESTING_DEPTH { - return true; - } - + fn reject_nesting_depth(&mut self, mark: Marker) { if self.load_error.is_none() { let (line, column) = Self::mark_position(mark); self.load_error = Some(ParseError { @@ -697,16 +690,31 @@ impl CfnYamlLoader { }); } self.suppress_tree_construction = true; + } + + /// Returns whether another container may be opened. On the first overrun, + /// records a located parse error and suppresses every subsequent event so + /// the loader never constructs a tree deeper than the deterministic bound. + fn allow_container(&mut self, mark: Marker) -> bool { + if self.doc_stack.len() < crate::consts::MAX_YAML_NESTING_DEPTH { + return true; + } + + self.reject_nesting_depth(mark); false } - /// Returns whether resolving the alias `anchor_id` stays within the - /// document-wide alias expansion budget. On the first overrun, records a - /// located parse error and suppresses every subsequent event, so the loader - /// never materializes the copies a nested-alias document would demand. + /// Returns whether resolving the alias `anchor_id` stays within both the + /// expanded-depth and document-wide node budgets. fn allow_alias_expansion(&mut self, anchor_id: usize, mark: Marker) -> bool { - let copied_nodes = self.anchor_sizes.get(&anchor_id).copied().unwrap_or(1); - self.alias_expanded_nodes = self.alias_expanded_nodes.saturating_add(copied_nodes); + let shape = self.anchor_shapes.get(&anchor_id).copied().unwrap_or(YamlShape { nodes: 1, depth: 0 }); + let expanded_depth = self.doc_stack.len().saturating_add(shape.depth); + if expanded_depth > crate::consts::MAX_YAML_NESTING_DEPTH { + self.reject_nesting_depth(mark); + return false; + } + + self.alias_expanded_nodes = self.alias_expanded_nodes.saturating_add(shape.nodes); if self.alias_expanded_nodes <= crate::consts::MAX_YAML_ALIAS_EXPANSION_NODES { return true; } @@ -728,16 +736,33 @@ impl CfnYamlLoader { } } -/// Number of nodes in a loaded YAML value: every scalar, sequence and mapping -/// counts once, so it measures what an alias copy allocates. -fn yaml_node_count(value: &Yaml) -> usize { - match value { - Yaml::Array(items) => 1 + items.iter().map(yaml_node_count).sum::(), - Yaml::Hash(entries) => { - 1 + entries.iter().map(|(key, value)| yaml_node_count(key) + yaml_node_count(value)).sum::() +#[derive(Clone, Copy)] +struct YamlShape { + nodes: usize, + depth: usize, +} + +fn yaml_shape(value: &Yaml) -> YamlShape { + let mut nodes = 0usize; + let mut depth = 0usize; + let mut pending = vec![(value, 0usize)]; + while let Some((node, parent_depth)) = pending.pop() { + nodes = nodes.saturating_add(1); + match node { + Yaml::Array(items) => { + let node_depth = parent_depth + 1; + depth = depth.max(node_depth); + pending.extend(items.iter().map(|item| (item, node_depth))); + } + Yaml::Hash(entries) => { + let node_depth = parent_depth + 1; + depth = depth.max(node_depth); + pending.extend(entries.iter().flat_map(|(key, value)| [(key, node_depth), (value, node_depth)])); + } + _ => {} } - _ => 1, } + YamlShape { nodes, depth } } impl MarkedEventReceiver for CfnYamlLoader { @@ -2058,6 +2083,31 @@ mod tests { yaml } + fn deeply_nested_alias_yaml(depth_per_anchor: usize, levels: usize) -> String { + let open = "[".repeat(depth_per_anchor); + let close = "]".repeat(depth_per_anchor); + let mut yaml = format!("Metadata:\n Level0: &level0 {open}x{close}\n"); + for level in 1..levels { + yaml.push_str(&format!(" Level{level}: &level{level} {open}*level{}{close}\n", level - 1)); + } + yaml.push_str("Resources:\n Topic:\n Type: AWS::SNS::Topic\n"); + yaml + } + + #[test] + fn yaml_aliases_within_the_expanded_depth_limit_parse() { + let result = parse_yaml(deeply_nested_alias_yaml(64, 4).as_bytes()); + assert!(result.is_ok(), "moderate expanded alias depth must parse: {:?}", result.err()); + } + + #[test] + fn yaml_aliases_beyond_the_expanded_depth_limit_fail_with_a_located_error() { + let result = parse_yaml(deeply_nested_alias_yaml(64, 9).as_bytes()); + let error = result.expect_err("alias-expanded nesting must be rejected before cloning"); + assert!(error.message.contains("nesting depth"), "unexpected error: {}", error.message); + assert!(error.line.is_some(), "error must carry a source line"); + } + #[test] fn yaml_aliases_within_the_expansion_budget_parse() { // 4^5 = 1,024 scalars at the deepest alias, well inside the budget. diff --git a/src/template-model/src/resolved_value.rs b/src/template-model/src/resolved_value.rs index 8bb752d1..cfa77c42 100644 --- a/src/template-model/src/resolved_value.rs +++ b/src/template-model/src/resolved_value.rs @@ -1,7 +1,7 @@ use crate::consts::*; use crate::resolver::MapEntry; use crate::resolver::ResolvedValue; -use std::collections::HashMap; +use std::collections::{HashMap, HashSet}; pub fn resolved_value_at_path(val: &ResolvedValue, path: &str) -> Option { let mut segments = path.splitn(2, '.'); @@ -272,32 +272,42 @@ pub fn collect_scenarios( assumptions: &HashMap, limit: usize, results: &mut Vec<(ResolvedValue, HashMap)>, +) -> bool { + collect_scenarios_reachable(val, assumptions, limit, results, &|_| true) +} + +pub(crate) fn collect_scenarios_reachable( + val: &ResolvedValue, + assumptions: &HashMap, + limit: usize, + results: &mut Vec<(ResolvedValue, HashMap)>, + is_reachable: &dyn Fn(&HashMap) -> bool, ) -> bool { match val { ResolvedValue::Conditional { condition: cond, if_true: t, if_false: f } => { if assumptions.contains_key(cond.as_str()) { if assumptions[cond.as_str()] { - collect_scenarios(t, assumptions, limit, results) + collect_scenarios_reachable(t, assumptions, limit, results, is_reachable) } else { - collect_scenarios(f, assumptions, limit, results) + collect_scenarios_reachable(f, assumptions, limit, results, is_reachable) } } else { let mut true_assumptions = assumptions.clone(); true_assumptions.insert(cond.clone(), true); - let true_curtailed = collect_scenarios(t, &true_assumptions, limit, results); + let true_curtailed = collect_scenarios_reachable(t, &true_assumptions, limit, results, is_reachable); if true_curtailed && results.len() >= limit { return true; } let mut false_assumptions = assumptions.clone(); false_assumptions.insert(cond.clone(), false); - let false_curtailed = collect_scenarios(f, &false_assumptions, limit, results); + let false_curtailed = collect_scenarios_reachable(f, &false_assumptions, limit, results, is_reachable); true_curtailed || false_curtailed } } ResolvedValue::Enum { variants } => { let mut curtailed = false; for variant in variants { - curtailed |= collect_scenarios(variant, assumptions, limit, results); + curtailed |= collect_scenarios_reachable(variant, assumptions, limit, results, is_reachable); if curtailed && results.len() >= limit { break; } @@ -307,7 +317,7 @@ pub fn collect_scenarios( ResolvedValue::List { items } => { let has_branching = items.iter().any(contains_scenario_branching); if has_branching { - expand_list_scenarios(items, assumptions, limit, results) + expand_list_scenarios(items, assumptions, limit, results, is_reachable) } else { push_scenario(val, assumptions, limit, results) } @@ -315,7 +325,7 @@ pub fn collect_scenarios( ResolvedValue::Map { entries } => { let has_branching = entries.iter().any(|entry| contains_scenario_branching(&entry.value)); if has_branching { - expand_map_scenarios(entries, assumptions, limit, results) + expand_map_scenarios(entries, assumptions, limit, results, is_reachable) } else { push_scenario(val, assumptions, limit, results) } @@ -531,20 +541,22 @@ fn json_values_matching_wildcard_path(val: &serde_json::Value, path: &str) -> Ve /// returned list or map is structurally incomplete. /// /// A product larger than `MAX_COMPLETE_SCENARIO_PRODUCT` combinations or -/// `MAX_SCENARIO_PRODUCT_NODES` nodes is not enumerated; it is covered pairwise -/// instead, which is linear in the number of conditions. +/// `MAX_SCENARIO_PRODUCT_NODES` nodes is not enumerated; every member +/// alternative is covered instead, keeping growth linear in the number of +/// alternatives. fn expand_cartesian_scenarios( items: &[(T, Vec<(ResolvedValue, HashMap)>)], base_assumptions: &HashMap, limit: usize, build_result: impl Fn(Vec<(T, ResolvedValue)>) -> ResolvedValue, results: &mut Vec<(ResolvedValue, HashMap)>, + is_reachable: &dyn Fn(&HashMap) -> bool, ) -> bool { if limit == 0 { return !items.is_empty(); } if !product_is_enumerable(items) { - return cover_cartesian_scenarios(items, base_assumptions, limit, build_result, results); + return cover_cartesian_scenarios(items, base_assumptions, limit, build_result, results, is_reachable); } let mut combos: Vec<(Vec<(T, ResolvedValue)>, HashMap)> = @@ -613,24 +625,37 @@ pub fn node_count(value: &ResolvedValue) -> usize { } } -/// Pairwise-covering replacement for a joint product too large to enumerate. +fn merge_scenario_assumptions( + assumptions: &HashMap, + additions: &HashMap, +) -> Option> { + let mut merged = assumptions.clone(); + for (condition, value) in additions { + if merged.get(condition).is_some_and(|existing| existing != value) { + return None; + } + merged.insert(condition.clone(), *value); + } + Some(merged) +} + +/// Alternative-covering replacement for a joint product too large to enumerate. /// -/// The conditions appearing in any member scenario are assigned globally: -/// every condition true, every condition false, and every-true with one -/// condition flipped. Each member then contributes the single scenario -/// consistent with that assignment. Every member alternative and every pair of -/// condition states appears in at least one result, so checks that look at one -/// member, or at how two members relate, see the same evidence the full product -/// would give; only findings that need three or more independent conditions set -/// together are not represented. The result count is linear in the number of -/// conditions. A member whose own expansion was curtailed may have no scenario -/// for an assignment; that assignment is skipped and reported as curtailment. +/// The result includes the all-true, all-false, and single-flip assignments used +/// for pairwise condition coverage, plus an assignment that selects every +/// scenario of every member at least once. Other members are selected greedily +/// while preserving satisfiability, so each reachable alternative has a +/// reachable full-container witness. Forcing the selected member scenario is +/// necessary when two alternatives share the same condition assignment, as +/// parameter enums can. This keeps the result linear in the sum of member +/// alternatives without hiding a branch that requires three or more literals. fn cover_cartesian_scenarios( items: &[(T, Vec<(ResolvedValue, HashMap)>)], base_assumptions: &HashMap, limit: usize, build_result: impl Fn(Vec<(T, ResolvedValue)>) -> ResolvedValue, results: &mut Vec<(ResolvedValue, HashMap)>, + is_reachable: &dyn Fn(&HashMap) -> bool, ) -> bool { let mut conditions: Vec<&str> = items .iter() @@ -646,44 +671,71 @@ fn cover_cartesian_scenarios( assumptions.extend(conditions.iter().map(|condition| (condition.to_string(), decide(condition)))); assumptions }; - let mut assignments = vec![assignment(&|_| true), assignment(&|_| false)]; - assignments.extend(conditions.iter().map(|flipped| assignment(&|condition| condition != *flipped))); - let mut seen: Vec> = Vec::new(); + let mut seen: HashSet<(Vec<(String, bool)>, Vec)> = HashSet::new(); let mut curtailed = false; - for global in assignments { - let mut merged = base_assumptions.clone(); - let mut collected = Vec::with_capacity(items.len()); - let mut complete = true; - for (key, scenarios) in items { - let consistent = scenarios.iter().find(|(_, assumptions)| { - assumptions.iter().all(|(condition, value)| global.get(condition) == Some(value)) - }); - match consistent { - Some((value, assumptions)) => { - merged.extend(assumptions.iter().map(|(condition, value)| (condition.clone(), *value))); - collected.push((key.clone(), value.clone())); - } - None => { - complete = false; - break; - } - } + let mut add_assignment = |seed: HashMap, forced: Option<(usize, usize)>| -> bool { + if !is_reachable(&seed) { + return false; } - if !complete { - curtailed = true; - continue; + let mut merged = seed; + let mut collected = Vec::with_capacity(items.len()); + let mut selected_indices = Vec::with_capacity(items.len()); + for (item_index, (key, scenarios)) in items.iter().enumerate() { + let selected = if let Some((_, forced_scenario)) = forced.filter(|(item, _)| *item == item_index) { + scenarios.get(forced_scenario).and_then(|(value, assumptions)| { + merge_scenario_assumptions(&merged, assumptions) + .filter(|candidate| is_reachable(candidate)) + .map(|candidate| (forced_scenario, value, candidate)) + }) + } else { + scenarios.iter().enumerate().find_map(|(scenario_index, (value, assumptions))| { + merge_scenario_assumptions(&merged, assumptions) + .filter(|candidate| is_reachable(candidate)) + .map(|candidate| (scenario_index, value, candidate)) + }) + }; + let Some((scenario_index, value, candidate)) = selected else { + curtailed = true; + return false; + }; + merged = candidate; + collected.push((key.clone(), value.clone())); + selected_indices.push(scenario_index); } - let mut canonical: Vec<(String, bool)> = merged.iter().map(|(c, v)| (c.clone(), *v)).collect(); - canonical.sort(); - if seen.contains(&canonical) { - continue; + + let mut canonical: Vec<(String, bool)> = + merged.iter().map(|(condition, value)| (condition.clone(), *value)).collect(); + canonical.sort_unstable(); + if !seen.insert((canonical, selected_indices)) { + return false; } if results.len() >= limit { + curtailed = true; return true; } - seen.push(canonical); results.push((build_result(collected), merged)); + false + }; + + if add_assignment(assignment(&|_| true), None) || add_assignment(assignment(&|_| false), None) { + return true; + } + for flipped in &conditions { + if add_assignment(assignment(&|condition| condition != *flipped), None) { + return true; + } + } + + for (item_index, (_, scenarios)) in items.iter().enumerate() { + for (scenario_index, (_, scenario_assumptions)) in scenarios.iter().enumerate() { + let Some(seed) = merge_scenario_assumptions(base_assumptions, scenario_assumptions) else { + continue; + }; + if add_assignment(seed, Some((item_index, scenario_index))) { + return true; + } + } } curtailed } @@ -693,6 +745,7 @@ fn expand_list_scenarios( base_assumptions: &HashMap, limit: usize, results: &mut Vec<(ResolvedValue, HashMap)>, + is_reachable: &dyn Fn(&HashMap) -> bool, ) -> bool { let remaining = limit.saturating_sub(results.len()); if remaining == 0 { @@ -703,7 +756,8 @@ fn expand_list_scenarios( let mut prepared = Vec::with_capacity(items.len()); for (index, item) in items.iter().enumerate() { let mut scenarios = Vec::new(); - nested_curtailed |= collect_scenarios(item, base_assumptions, remaining, &mut scenarios); + nested_curtailed |= + collect_scenarios_reachable(item, base_assumptions, remaining, &mut scenarios, is_reachable); if scenarios.is_empty() { scenarios.push((item.clone(), base_assumptions.clone())); } @@ -715,6 +769,7 @@ fn expand_list_scenarios( remaining, |collected| ResolvedValue::List { items: collected.into_iter().map(|(_, value)| value).collect() }, results, + is_reachable, ); nested_curtailed || product_curtailed } @@ -724,6 +779,7 @@ fn expand_map_scenarios( base_assumptions: &HashMap, limit: usize, results: &mut Vec<(ResolvedValue, HashMap)>, + is_reachable: &dyn Fn(&HashMap) -> bool, ) -> bool { let remaining = limit.saturating_sub(results.len()); if remaining == 0 { @@ -734,7 +790,8 @@ fn expand_map_scenarios( let mut prepared = Vec::with_capacity(entries.len()); for entry in entries { let mut scenarios = Vec::new(); - nested_curtailed |= collect_scenarios(&entry.value, base_assumptions, remaining, &mut scenarios); + nested_curtailed |= + collect_scenarios_reachable(&entry.value, base_assumptions, remaining, &mut scenarios, is_reachable); if scenarios.is_empty() { scenarios.push((entry.value.clone(), base_assumptions.clone())); } @@ -748,6 +805,7 @@ fn expand_map_scenarios( entries: collected.into_iter().map(|(key, value)| MapEntry { key, value }).collect(), }, results, + is_reachable, ); nested_curtailed || product_curtailed } @@ -1439,6 +1497,7 @@ mod tests { 4, |collected| ResolvedValue::List { items: collected.into_iter().map(|(_, v)| v).collect() }, &mut results, + &|_| true, ); assert!(!curtailed, "4 combos with limit=4 must not be curtailed"); assert_eq!(results.len(), 4); @@ -1461,6 +1520,7 @@ mod tests { 4, |collected| ResolvedValue::List { items: collected.into_iter().map(|(_, v)| v).collect() }, &mut results, + &|_| true, ); assert!(curtailed, "8 combos with limit=4 must be curtailed"); assert!(results.len() <= 4, "at most limit results; got {}", results.len()); @@ -1504,7 +1564,7 @@ mod tests { } #[test] - fn independent_conditions_above_the_product_bound_are_covered_pairwise() { + fn independent_conditions_above_the_product_bound_preserve_pairwise_condition_states() { let count = 13; let list = ResolvedValue::List { items: (0..count).map(|i| optional_item(&format!("C{i:02}"), &format!("v{i:02}"))).collect(), @@ -1542,6 +1602,77 @@ mod tests { assert_eq!(scenarios.len(), 2, "shared conditions never multiply"); } + #[test] + fn covering_set_includes_an_alternative_requiring_three_literals() { + let selected_value = ResolvedValue::Conditional { + condition: "CA".to_string(), + if_true: Box::new(ResolvedValue::Concrete { value: json!("a").into() }), + if_false: Box::new(ResolvedValue::Conditional { + condition: "CB".to_string(), + if_true: Box::new(ResolvedValue::Concrete { value: json!("b").into() }), + if_false: Box::new(ResolvedValue::Conditional { + condition: "CC".to_string(), + if_true: Box::new(ResolvedValue::Concrete { value: json!("selected").into() }), + if_false: Box::new(ResolvedValue::Concrete { value: json!("c").into() }), + }), + }), + }; + let mut items = vec![selected_value]; + items.extend((0..11).map(|index| optional_item(&format!("C{index:02}"), "sibling"))); + let list = ResolvedValue::List { items }; + + let mut scenarios = Vec::new(); + let curtailed = collect_scenarios(&list, &HashMap::new(), MAX_SCENARIO_COMBINATIONS, &mut scenarios); + + assert!(!curtailed); + let selected = scenarios + .iter() + .find(|(scenario, _)| present_items(scenario).first().is_some_and(|value| value == "selected")) + .expect("the three-literal alternative must be represented"); + assert_eq!(selected.1.get("CA"), Some(&false)); + assert_eq!(selected.1.get("CB"), Some(&false)); + assert_eq!(selected.1.get("CC"), Some(&true)); + } + + #[test] + fn covering_set_finds_a_reachable_completion_for_each_alternative() { + let selected_value = ResolvedValue::Conditional { + condition: "A".to_string(), + if_true: Box::new(ResolvedValue::Concrete { value: json!("other").into() }), + if_false: Box::new(ResolvedValue::Concrete { value: json!("selected").into() }), + }; + let correlated_value = ResolvedValue::Conditional { + condition: "B".to_string(), + if_true: Box::new(ResolvedValue::Concrete { value: json!("b-true").into() }), + if_false: Box::new(ResolvedValue::Concrete { value: json!("b-false").into() }), + }; + let mut items = vec![selected_value, correlated_value]; + items.extend((0..11).map(|index| optional_item(&format!("C{index:02}"), "sibling"))); + let list = ResolvedValue::List { items }; + let is_reachable = |assumptions: &HashMap| match (assumptions.get("A"), assumptions.get("B")) { + (Some(a), Some(b)) => a == b, + _ => true, + }; + + let mut scenarios = Vec::new(); + let curtailed = collect_scenarios_reachable( + &list, + &HashMap::new(), + MAX_SCENARIO_COMBINATIONS, + &mut scenarios, + &is_reachable, + ); + + assert!(!curtailed); + assert!(scenarios.iter().all(|(_, assumptions)| is_reachable(assumptions))); + let selected = scenarios + .iter() + .find(|(scenario, _)| present_items(scenario).first().is_some_and(|value| value == "selected")) + .expect("the reachable false alternative must be represented"); + assert_eq!(selected.1.get("A"), Some(&false)); + assert_eq!(selected.1.get("B"), Some(&false)); + } + #[test] fn covering_set_is_chosen_by_materialized_size_as_well_as_count() { let wide_leaf = ResolvedValue::List { From 3b14ff93e27a3b2c15e6a7740060c5899164ccfc Mon Sep 17 00:00:00 2001 From: Satyaki Ghosh Date: Mon, 12 Oct 2026 10:45:57 -0400 Subject: [PATCH 4/8] Fixes --- src/bindings-rust/tests/smoke.rs | 71 + src/cel-engine/src/rules/resources_extra.rs | 143 +- .../tests/resource_rule_parity.rs | 169 + .../resources/lambda/snapstart_version.rego | 74 +- src/rego-engine/src/builtins.rs | 38 + .../expected/validation_reports1.json | 935 +- .../expected/validation_reports2.json | 316 +- .../expected/validation_reports3.json | 2387 +- .../expected/validation_reports4.json | 60375 ++++++++-------- .../expected/validation_reports5.json | 9243 +-- .../expected/validation_reports6.json | 518 +- .../expected/validation_reports7.json | 8407 +-- .../expected/validation_reports8.json | 8282 ++- .../W2530_snapstart_conditional_apply_on.yaml | 100 + ...2530_snapstart_version_not_coexisting.yaml | 86 + ...30_snapstart_unreachable_or_published.yaml | 168 + src/schema-validator/src/validate.rs | 601 +- .../tests/item_cardinality.rs | 544 + src/template-model/src/iam_policy.rs | 2 +- src/template-model/src/model.rs | 139 +- 20 files changed, 47715 insertions(+), 44883 deletions(-) create mode 100644 src/resources/templates/bad/W2530_snapstart_conditional_apply_on.yaml create mode 100644 src/resources/templates/bad/W2530_snapstart_version_not_coexisting.yaml create mode 100644 src/resources/templates/good/W2530_snapstart_unreachable_or_published.yaml create mode 100644 src/schema-validator/tests/item_cardinality.rs diff --git a/src/bindings-rust/tests/smoke.rs b/src/bindings-rust/tests/smoke.rs index c2b7640c..bcd6306f 100644 --- a/src/bindings-rust/tests/smoke.rs +++ b/src/bindings-rust/tests/smoke.rs @@ -1,8 +1,12 @@ +use cloudformation_validate::template_model::{resolved_value_to_json, resolver::ResolvedValue}; use cloudformation_validate::{ AdditionalSchemaSource, CelEngine, CompositeEngine, CompositeEngineConfig, EngineConfig, ExternalRuleSource, RegoEngine, ReportStatus, SchemaValidator, SchemaValidatorConfig, SemanticModel, Severity, ValidateConfig, ValidationEngine, ValidationReport, validate_bytes_with_path, version, }; +use std::collections::HashMap; + +type Scenario = (ResolvedValue, HashMap); const GOOD_TEMPLATE: &[u8] = br#" AWSTemplateFormatVersion: "2010-09-09" @@ -19,6 +23,22 @@ Resources: BucketName: my-test-bucket "#; +const CONDITIONAL_BUCKET_NAME: &[u8] = br#" +Parameters: + Stage: + Type: String +Conditions: + IsProduction: !Equals [!Ref Stage, production] +Resources: + MyBucket: + Type: AWS::S3::Bucket + Properties: + BucketName: !If [IsProduction, production-bucket, staging-bucket] +"#; + +const BUCKET_NAME_PATH: &str = "Properties.BucketName"; +const IS_PRODUCTION: &str = "IsProduction"; + const TEMPLATE_WITH_OVERLAY_PROPERTY: &[u8] = br#" Resources: Function: @@ -90,6 +110,13 @@ fn diagnostic_signatures(report: &ValidationReport) -> Vec<(String, Severity, St .collect() } +fn rendered_scenarios(scenarios: &[Scenario]) -> Vec<(String, Option)> { + scenarios + .iter() + .map(|(value, conditions)| (resolved_value_to_json(value).to_string(), conditions.get(IS_PRODUCTION).copied())) + .collect() +} + fn all_engines(config: EngineConfig) -> Vec> { // The composite engine takes its own config type. The built-in, default, // good, additional-schema, and Guard matrices that use this helper never @@ -293,6 +320,50 @@ fn semantic_model_is_available_through_the_facade() { assert!(model.transforms.is_empty()); } +#[test] +fn semantic_model_resolve_scenarios_returns_owned_branch_scenarios() { + let model = SemanticModel::from_bytes(CONDITIONAL_BUCKET_NAME).expect("template must parse"); + + let scenarios: Vec = model.resolve_scenarios("MyBucket", BUCKET_NAME_PATH); + + assert_eq!( + rendered_scenarios(&scenarios), + vec![(r#""production-bucket""#.to_string(), Some(true)), (r#""staging-bucket""#.to_string(), Some(false))], + "each Fn::If branch must be one owned scenario paired with the condition value that selects it" + ); +} + +#[test] +fn semantic_model_resolve_scenarios_with_limit_returns_owned_scenarios_and_curtailment() { + let model = SemanticModel::from_bytes(CONDITIONAL_BUCKET_NAME).expect("template must parse"); + + let (scenarios, was_curtailed): (Vec, bool) = + model.resolve_scenarios_with_limit("MyBucket", BUCKET_NAME_PATH, 1); + + assert_eq!( + rendered_scenarios(&scenarios), + vec![(r#""production-bucket""#.to_string(), Some(true))], + "a per-value limit of one must keep only the first branch scenario" + ); + assert!(was_curtailed, "omitting the second branch scenario must be reported as curtailment"); +} + +#[test] +fn semantic_model_resolve_properties_scenarios_returns_owned_whole_properties_scenarios() { + let model = SemanticModel::from_bytes(CONDITIONAL_BUCKET_NAME).expect("template must parse"); + + let scenarios: Vec = model.resolve_properties_scenarios("MyBucket"); + + assert_eq!( + rendered_scenarios(&scenarios), + vec![ + (r#"{"BucketName":"production-bucket"}"#.to_string(), Some(true)), + (r#"{"BucketName":"staging-bucket"}"#.to_string(), Some(false)), + ], + "the whole Properties object must expand into one owned scenario per Fn::If branch" + ); +} + #[test] fn composite_default_produces_the_same_builtin_diagnostics_as_the_cel_engine() { let schema_validator = SchemaValidator::default(); diff --git a/src/cel-engine/src/rules/resources_extra.rs b/src/cel-engine/src/rules/resources_extra.rs index 85bb071f..1df75bd2 100644 --- a/src/cel-engine/src/rules/resources_extra.rs +++ b/src/cel-engine/src/rules/resources_extra.rs @@ -54,6 +54,14 @@ static MX_RECORD_RE: LazyLock = static ARN_HAS_ACCOUNT_RE: LazyLock = LazyLock::new(|| regex::Regex::new(r":\d{12}:").expect("Invalid ARN_HAS_ACCOUNT_RE pattern")); +/// Matches a reference authored within an `AWS::Lambda::Version`'s `FunctionName`, +/// whether the property sits in a conditional `Properties` block or its value +/// selects between `Fn::If` branches. +static VERSION_FUNCTION_NAME_PATH_RE: LazyLock = LazyLock::new(|| { + regex::Regex::new(r"^Properties(\.Fn::If\.[12])*\.FunctionName(\.|$)") + .expect("Invalid VERSION_FUNCTION_NAME_PATH_RE pattern") +}); + /// Converts a `ResourcePropertyPath`'s segments (after the `Properties` prefix) /// into a dot-separated property path string suitable for `resolve_concrete` and /// diagnostic anchoring. Wildcard segments are excluded from the prefix because @@ -212,6 +220,111 @@ fn snapstart_runtime_supported( !unsupported_runtimes.iter().any(|r| r == runtime) } +const SNAPSTART_APPLY_ON_PATH: &str = "Properties.SnapStart.ApplyOn"; +const SNAPSTART_PUBLISHED_VERSIONS: &str = "PublishedVersions"; +const LAMBDA_VERSION_TYPE: &str = "AWS::Lambda::Version"; + +/// A reference's branch context lists the `Fn::If` conditions enclosing it, +/// separated by commas, with a false branch marked by a leading `!`. +const BRANCH_CONTEXT_SEPARATOR: char = ','; +const FALSE_BRANCH_PREFIX: char = '!'; + +/// SnapStart only takes effect on a published function version. Each reachable +/// scenario that enables it is reported at its authored `ApplyOn` value unless a +/// version publishing the function can be created in that same scenario. +fn snapstart_without_published_version(m: &SemanticModel, function_id: &str) -> Vec { + let published_versions = published_version_scenarios(m, function_id); + let unpublished_source_paths: BTreeSet = m + .resolve_scenarios_json_shared(function_id, SNAPSTART_APPLY_ON_PATH) + .iter() + .filter(|(apply_on, conditions)| { + apply_on.as_str() == Some(SNAPSTART_PUBLISHED_VERSIONS) + && scenario_is_reachable(m, function_id, conditions) + && !scenario_overlaps_any(m, function_id, conditions, &published_versions) + }) + .map(|(_, conditions)| scenario_source_path_or_effective(m, function_id, SNAPSTART_APPLY_ON_PATH, conditions)) + .collect(); + unpublished_source_paths + .iter() + .map(|source_path| { + make_resource_diagnostic_at_source( + "W2530", + "SnapStart is enabled but no AWS::Lambda::Version resource is attached", + m, + function_id, + SNAPSTART_APPLY_ON_PATH, + source_path, + Some("Add an AWS::Lambda::Version resource that references this function"), + ) + }) + .collect() +} + +/// The condition assignments under which an `AWS::Lambda::Version` publishes a +/// version of `function_id`: the version is created and its `FunctionName` +/// refers to the function. A reference from anywhere else in a version, such as +/// `DependsOn` or `Description`, publishes nothing. +fn published_version_scenarios(m: &SemanticModel, function_id: &str) -> Vec> { + let mut scenarios: Vec> = m + .graph + .incoming(function_id) + .into_iter() + .filter(|edge| { + m.resources.get(&edge.source_resource).is_some_and(|source| source.resource_type == LAMBDA_VERSION_TYPE) + && VERSION_FUNCTION_NAME_PATH_RE.is_match(&edge.source_path) + }) + .filter_map(|edge| reference_activation_conditions(m, &edge.source_resource, edge.condition_context.as_deref())) + .collect(); + + if let Some(function_name_identity) = m.value_identity(function_id, "Properties.FunctionName") { + scenarios.extend(m.resources_of_type(LAMBDA_VERSION_TYPE).iter().filter_map(|version_id| { + (m.value_identity(version_id, "Properties.FunctionName").as_ref() == Some(&function_name_identity)) + .then(|| reference_activation_conditions(m, version_id, None)) + .flatten() + })); + } + scenarios.sort_by_key(canonical_condition_assignment); + scenarios.dedup(); + scenarios +} + +fn canonical_condition_assignment(conditions: &HashMap) -> Vec<(String, bool)> { + let mut assignment: Vec<(String, bool)> = + conditions.iter().map(|(condition, value)| (condition.clone(), *value)).collect(); + assignment.sort_unstable(); + assignment +} + +/// The conditions under which a reference is active: the `Fn::If` branches it is +/// authored in and the condition that creates its resource. `None` when they +/// contradict each other, so the reference is never active. +fn reference_activation_conditions( + m: &SemanticModel, + resource_id: &str, + branch_context: Option<&str>, +) -> Option> { + let branch_literals = branch_context + .into_iter() + .flat_map(|context| context.split(BRANCH_CONTEXT_SEPARATOR)) + .filter(|literal| !literal.is_empty()) + .map(|literal| match literal.strip_prefix(FALSE_BRANCH_PREFIX) { + Some(condition) => (condition, false), + None => (literal, true), + }); + let creation_literal = m + .resources + .get(resource_id) + .and_then(|resource| resource.condition.as_deref()) + .map(|condition| (condition, true)); + let mut conditions = HashMap::new(); + for (condition, value) in branch_literals.chain(creation_literal) { + if conditions.insert(condition.to_string(), value).is_some_and(|previous| previous != value) { + return None; + } + } + Some(conditions) +} + fn resolve_all_json(m: &SemanticModel, rid: &str, path: &str) -> Vec { let rv = m.resolve_deep(rid, path).or_else(|| m.resolve(rid, path).cloned()); let Some(rv) = rv else { return vec![] }; @@ -482,7 +595,7 @@ fn scenario_property_json(properties: &ResolvedValue, property_name: &str) -> Op } } -fn route53_scenario_source_path( +fn scenario_source_path_or_effective( m: &SemanticModel, resource_id: &str, effective_path: &str, @@ -1951,27 +2064,7 @@ pub fn eval_extra_resources(ctx: &EvalContext) -> Vec { } for name in m.resources_of_type("AWS::Lambda::Function") { - // SnapStart gated by a condition is enabled in the deployments where that - // condition holds, so every branch value counts, not only a fixed one. - let snapstart_publishes_versions = resolve_all_json(m, name, "Properties.SnapStart") - .iter() - .any(|snap| snap.get("ApplyOn").and_then(|a| a.as_str()) == Some("PublishedVersions")); - if snapstart_publishes_versions { - let version_refs = m.graph.ref_sources(name); - let has_ver = version_refs - .iter() - .any(|src| m.resources.get(&**src).map(|r| r.resource_type == "AWS::Lambda::Version").unwrap_or(false)); - if !has_ver { - out.push(make_resource_diagnostic( - "W2530", - "SnapStart is enabled but no AWS::Lambda::Version resource is attached", - m, - name, - "Properties.SnapStart", - Some("Add an AWS::Lambda::Version resource that references this function"), - )); - } - } + out.extend(snapstart_without_published_version(m, name)); } for rpp in &ctx.cached_data.rule_tables.iam_role_arn_property_paths { @@ -3470,7 +3563,7 @@ pub fn eval_extra_resources(ctx: &EvalContext) -> Vec { && record_name.trim_end_matches('.') == hosted_zone_name.trim_end_matches('.') { let property_path = "Properties.Name"; - let source_path = route53_scenario_source_path(m, name, property_path, conditions); + let source_path = scenario_source_path_or_effective(m, name, property_path, conditions); out.push(make_resource_diagnostic_at_source( "E3023", &format!( @@ -3492,7 +3585,7 @@ pub fn eval_extra_resources(ctx: &EvalContext) -> Vec { &record_type, &records, "Properties.ResourceRecords", - |property_path| route53_scenario_source_path(m, name, property_path, conditions), + |property_path| scenario_source_path_or_effective(m, name, property_path, conditions), ); } } @@ -3519,7 +3612,7 @@ pub fn eval_extra_resources(ctx: &EvalContext) -> Vec { record_type, records, &format!("Properties.RecordSets.{}.ResourceRecords", set_index), - |property_path| route53_scenario_source_path(m, name, property_path, conditions), + |property_path| scenario_source_path_or_effective(m, name, property_path, conditions), ); } } diff --git a/src/cfn-validate/tests/resource_rule_parity.rs b/src/cfn-validate/tests/resource_rule_parity.rs index fadfcf19..b0c5d376 100644 --- a/src/cfn-validate/tests/resource_rule_parity.rs +++ b/src/cfn-validate/tests/resource_rule_parity.rs @@ -40,6 +40,29 @@ fn selected_findings_with_spans(engine: &dyn ValidationEngine, template: &str, r findings } +/// Each finding as `resource|property path|start line:start column`, sorted. +fn selected_finding_anchors(engine: &dyn ValidationEngine, template: &str, rule_ids: &[&str]) -> Vec { + let validator = SchemaValidator::default(); + let report = validate_bytes(engine, &validator, template.as_bytes(), ValidateConfig::default()).unwrap(); + let mut anchors: Vec = report + .diagnostics + .iter() + .filter(|diagnostic| rule_ids.contains(&diagnostic.rule_id.as_str())) + .map(|diagnostic| { + let location = diagnostic.location.as_ref().expect("every finding must carry a source location"); + format!( + "{}|{}|{}:{}", + diagnostic.resource_logical_id().unwrap_or(""), + diagnostic.property_path.as_deref().unwrap_or(""), + location.start_line, + location.start_column + ) + }) + .collect(); + anchors.sort(); + anchors +} + fn diagnostic_identity(diagnostic: &Diagnostic) -> String { format!( "{}|{:?}|{}|{}|{}|{}", @@ -2024,3 +2047,149 @@ fn composite_keys_other_engines_and_consistent_monitoring_are_not_reported() { assert_eq!(rego_findings, cel_findings); assert!(rego_findings.is_empty(), "{rego_findings:?}"); } + +#[test] +fn snapstart_without_version_is_reported_at_each_reachable_enabling_apply_on() { + let template = include_str!("../../resources/templates/bad/W2530_snapstart_conditional_apply_on.yaml"); + let (rego, cel) = engines(); + assert_eq!( + selected_findings_with_spans(®o, template, &["W2530"]), + selected_findings_with_spans(&cel, template, &["W2530"]), + "SnapStart version findings must be identical, spans included" + ); + + let anchors = selected_finding_anchors(®o, template, &["W2530"]); + + assert_eq!( + anchors, + [ + "ApplyOnBesideNoValue|Properties.SnapStart.ApplyOn|74:53", + "ApplyOnFalseBranch|Properties.SnapStart.ApplyOn|63:40", + "ApplyOnTrueBranch|Properties.SnapStart.ApplyOn|52:34", + "EveryBranchEnables|Properties.SnapStart.ApplyOn|100:11", + "EveryBranchEnables|Properties.SnapStart.ApplyOn|99:11", + "PropertiesFalseBranch|Properties.SnapStart.ApplyOn|41:11", + "PropertiesTrueBranch|Properties.SnapStart.ApplyOn|17:11", + "SnapStartBesideNoValue|Properties.SnapStart.ApplyOn|87:11", + ], + "every reachable enabling value is reported once at its authored position" + ); +} + +#[test] +fn snapstart_in_unreachable_or_published_scenarios_is_not_reported() { + let template = include_str!("../../resources/templates/good/W2530_snapstart_unreachable_or_published.yaml"); + let (rego, cel) = engines(); + let rego_findings = selected_findings(®o, template, &["W2530"]); + let cel_findings = selected_findings(&cel, template, &["W2530"]); + assert_eq!(rego_findings, cel_findings); + assert!( + rego_findings.is_empty(), + "unreachable enabling branches and versions published alongside SnapStart must not be reported: {rego_findings:?}" + ); +} + +#[test] +fn snapstart_requires_a_version_publishing_the_function_in_the_same_deployment() { + let template = include_str!("../../resources/templates/bad/W2530_snapstart_version_not_coexisting.yaml"); + let (rego, cel) = engines(); + assert_eq!( + selected_findings_with_spans(®o, template, &["W2530"]), + selected_findings_with_spans(&cel, template, &["W2530"]), + "SnapStart version findings must be identical, spans included" + ); + + let anchors = selected_finding_anchors(®o, template, &["W2530"]); + + assert_eq!( + anchors, + [ + "VersionInOtherEnvironment|Properties.SnapStart.ApplyOn|65:11", + "VersionNamesOtherFunctionWhenEnabled|Properties.SnapStart.ApplyOn|82:34", + "VersionOnlyDependsOnFunction|Properties.SnapStart.ApplyOn|32:9", + "VersionOnlyDescribesFunction|Properties.SnapStart.ApplyOn|48:9", + ], + "a version publishes a function only through its FunctionName and only where it is created" + ); +} + +#[test] +fn snapstart_version_published_from_conditional_version_properties_follows_the_branch() { + let template = r#" +Conditions: + IsUsEast1: !Equals [!Ref AWS::Region, us-east-1] +Resources: + Other: + Type: AWS::Lambda::Function + Properties: + Runtime: python3.12 + Handler: index.handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: {S3Bucket: bucket, S3Key: code.zip} + PublishedInEnablingBranch: + Type: AWS::Lambda::Function + Properties: + Runtime: java21 + Handler: example.Handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: {S3Bucket: bucket, S3Key: code.zip} + SnapStart: !If [IsUsEast1, {ApplyOn: PublishedVersions}, !Ref AWS::NoValue] + PublishedInEnablingBranchVersion: + Type: AWS::Lambda::Version + Properties: !If + - IsUsEast1 + - FunctionName: !Ref PublishedInEnablingBranch + - FunctionName: !Ref Other + PublishedOutsideEnablingBranch: + Type: AWS::Lambda::Function + Properties: + Runtime: java21 + Handler: example.Handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: {S3Bucket: bucket, S3Key: code.zip} + SnapStart: !If [IsUsEast1, {ApplyOn: PublishedVersions}, !Ref AWS::NoValue] + PublishedOutsideEnablingBranchVersion: + Type: AWS::Lambda::Version + Properties: !If + - IsUsEast1 + - FunctionName: !Ref Other + - FunctionName: !Ref PublishedOutsideEnablingBranch +"#; + let (rego, cel) = engines(); + let rego_findings = selected_findings_with_spans(®o, template, &["W2530"]); + let cel_findings = selected_findings_with_spans(&cel, template, &["W2530"]); + assert_eq!(rego_findings, cel_findings); + assert_eq!( + rego_findings.len(), + 1, + "only the branch-mismatched version leaves SnapStart unpublished: {rego_findings:?}" + ); + assert!(rego_findings[0].contains("|PublishedOutsideEnablingBranch|Properties.SnapStart.ApplyOn|")); +} + +#[test] +fn snapstart_version_with_matching_explicit_function_name_is_attached() { + let template = r#" +Resources: + Named: + Type: AWS::Lambda::Function + Properties: + FunctionName: snap-named + Runtime: java21 + Handler: example.Handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: {S3Bucket: bucket, S3Key: code.zip} + SnapStart: {ApplyOn: PublishedVersions} + NamedVersion: + Type: AWS::Lambda::Version + DependsOn: Named + Properties: + FunctionName: snap-named +"#; + let (rego, cel) = engines(); + let rego_findings = selected_findings_with_spans(®o, template, &["W2530"]); + let cel_findings = selected_findings_with_spans(&cel, template, &["W2530"]); + + assert_eq!(rego_findings, cel_findings); + assert!(rego_findings.is_empty(), "the matching explicit name publishes the function: {rego_findings:?}"); +} diff --git a/src/rego-engine/handwritten/rego/resources/lambda/snapstart_version.rego b/src/rego-engine/handwritten/rego/resources/lambda/snapstart_version.rego index 75162abc..060ce1b0 100644 --- a/src/rego-engine/handwritten/rego/resources/lambda/snapstart_version.rego +++ b/src/rego-engine/handwritten/rego/resources/lambda/snapstart_version.rego @@ -2,24 +2,70 @@ package resources import rego.v1 -# W2530: SnapStart enabled but no Lambda::Version resource attached -violation contains make_diag_full("W2530", "WARN", name, - "Properties.SnapStart", +_snapstart_apply_on_path := "Properties.SnapStart.ApplyOn" + +# SnapStart only takes effect on a published function version. Each reachable +# scenario that enables it is reported at its authored ApplyOn value unless a +# version publishing the function can be created in that same scenario. +violation contains make_diag_at_source_full("W2530", "WARN", name, _snapstart_apply_on_path, source_path, "SnapStart is enabled but no AWS::Lambda::Version resource is attached", "Add an AWS::Lambda::Version resource that references this function", - "") if { +) if { cfn_rule_active("W2530") some name in resources_of_type("AWS::Lambda::Function") - some snap in resolve_all(name, "Properties.SnapStart") - is_object(snap) - apply_on := object.get(snap, "ApplyOn", "None") - apply_on == "PublishedVersions" - # Check if any Lambda::Version references this function - not _has_version_resource(name) + some scenario in resolve_scenarios(name, _snapstart_apply_on_path) + scenario.value == "PublishedVersions" + _resource_scenario_reachable(name, scenario.conditions) + not _snapstart_version_compatible(name, scenario.conditions) + source_path := scenario_source_path(name, _snapstart_apply_on_path, scenario.conditions) +} + +_snapstart_version_compatible(func_name, conditions) if { + some version_conditions in _snapstart_published_version_scenarios(func_name) + _scenario_conditions_compatible(func_name, conditions, version_conditions) +} + +# The condition assignments under which an AWS::Lambda::Version publishes a +# version of the function: the version is created and its FunctionName refers +# to the function. A reference from anywhere else in a version, such as +# DependsOn or Description, publishes nothing. +_snapstart_published_version_scenarios(func_name) := + _snapstart_reference_version_scenarios(func_name) | _snapstart_named_version_scenarios(func_name) + +_snapstart_reference_version_scenarios(func_name) := {conditions | + some version_name in resources_of_type("AWS::Lambda::Version") + some edge in input.resources[version_name].outgoingRefs + edge.target == func_name + regex.match(`^Properties(\.Fn::If\.[12])*\.FunctionName(\.|$)`, edge.sourcePath) + conditions := _snapstart_reference_activation_conditions(version_name, edge) } -_has_version_resource(func_name) if { - some ver_name in resources_of_type("AWS::Lambda::Version") - target := follow_ref(ver_name, "Properties.FunctionName") - target == func_name +_snapstart_named_version_scenarios(func_name) := {conditions | + function_name_identity := value_identity(func_name, "Properties.FunctionName") + some version_name in resources_of_type("AWS::Lambda::Version") + value_identity(version_name, "Properties.FunctionName") == function_name_identity + conditions := {literal[0]: literal[1] | some literal in _snapstart_creation_literals(version_name)} } + +# The conditions under which a reference is active: the Fn::If branches it is +# authored in and the condition that creates its resource. Undefined when they +# contradict each other, so the reference is never active. +_snapstart_reference_activation_conditions(resource_name, edge) := conditions if { + literals := _snapstart_branch_literals(edge) | _snapstart_creation_literals(resource_name) + count({literal[0] | some literal in literals}) == count(literals) + conditions := {literal[0]: literal[1] | some literal in literals} +} + +# A reference's branch context lists the Fn::If conditions enclosing it, +# separated by commas, with a false branch marked by a leading "!". +_snapstart_branch_literals(edge) := {[condition, value] | + some literal in split(object.get(edge, "conditionContext", ""), ",") + literal != "" + condition := trim_prefix(literal, "!") + value := literal == condition +} + +_snapstart_creation_literals(resource_name) := {[condition, true]} if { + condition := resource_condition(resource_name) + condition != null +} else := set() diff --git a/src/rego-engine/src/builtins.rs b/src/rego-engine/src/builtins.rs index faafd704..2cefb7f2 100644 --- a/src/rego-engine/src/builtins.rs +++ b/src/rego-engine/src/builtins.rs @@ -73,6 +73,7 @@ pub(crate) fn register_all( register_make_diag(rego); register_make_diag_at(rego); register_make_diag_at_source(rego); + register_make_diag_at_source_full(rego); register_make_diag_full(rego); register_make_diag_related(rego); register_make_diag_conditional(rego); @@ -2302,6 +2303,43 @@ fn register_make_diag_at_source(rego: &mut regorus::Engine) { ); } +fn register_make_diag_at_source_full(rego: &mut regorus::Engine) { + let _ = rego.add_extension( + "make_diag_at_source_full".into(), + 7, + Box::new(move |params: Vec| { + let Some(model) = current_model() else { + return Ok(Value::Undefined); + }; + let rule_id = params[0].as_string()?; + let severity = params[1].as_string()?; + let resource_id = params[2].as_string()?; + let prop_path = params[3].as_string()?; + let source_path = params[4].as_string()?; + let message = params[5].as_string()?; + let fix = params[6].as_string()?; + let span = resolve_span(&model, resource_id, source_path); + let fix_value = + if fix.is_empty() { serde_json::Value::Null } else { serde_json::Value::String(fix.to_string()) }; + let mut diagnostic = serde_json::json!({ + "rule_id": rule_id.as_ref(), "severity": severity.as_ref(), + "message": message.as_ref(), "resource_id": resource_id.as_ref(), + "resource_path": prop_path.as_ref(), + (DIAGNOSTIC_SOURCE_PATH_FIELD): source_path.as_ref(), + "suggested_fix": fix_value, + }); + if span != UNKNOWN_SPAN { + let fields = diagnostic.as_object_mut().unwrap(); + fields.insert("start_line".into(), span.start_line.into()); + fields.insert("start_column".into(), span.start_column.into()); + fields.insert("end_line".into(), span.end_line.into()); + fields.insert("end_column".into(), span.end_column.into()); + } + Ok(json_to_value(&diagnostic)) + }), + ); +} + fn register_make_diag_full(rego: &mut regorus::Engine) { let _ = rego.add_extension( "make_diag_full".into(), diff --git a/src/resources/expected/validation_reports1.json b/src/resources/expected/validation_reports1.json index 28211918..f51d566d 100644 --- a/src/resources/expected/validation_reports1.json +++ b/src/resources/expected/validation_reports1.json @@ -331,12 +331,12 @@ "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SnapStart", + "propertyPath": "Properties.SnapStart.ApplyOn", "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", - "startLine": 39, - "startColumn": 7, - "endLine": 39, + "startLine": 40, + "startColumn": 9, + "endLine": 40, "endColumn": 16, "ruleDescription": "Validate that SnapStart is properly configured", "phase": "LINT" @@ -351,12 +351,12 @@ "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SnapStart", + "propertyPath": "Properties.SnapStart.ApplyOn", "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", - "startLine": 50, - "startColumn": 7, - "endLine": 50, + "startLine": 51, + "startColumn": 9, + "endLine": 51, "endColumn": 16, "ruleDescription": "Validate that SnapStart is properly configured", "phase": "LINT" @@ -7276,53 +7276,686 @@ "entityType": "Resource", "resourceType": "AWS::AppStream::DirectoryConfig" }, - "propertyPath": "Properties.ServiceAccountCredentials.AccountPassword", - "category": "Security", - "startLine": 15, - "startColumn": 9, - "endLine": 15, - "endColumn": 24, - "ruleDescription": "Check if Password Properties are correctly configured", + "propertyPath": "Properties.ServiceAccountCredentials.AccountPassword", + "category": "Security", + "startLine": 15, + "startColumn": 9, + "endLine": 15, + "endColumn": 24, + "ruleDescription": "Check if Password Properties are correctly configured", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DirectoryName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Directory", + "entityType": "Resource", + "resourceType": "AWS::AppStream::DirectoryConfig" + }, + "propertyPath": "Properties.DirectoryName", + "category": "Best Practice", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 20, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'User' of type 'AWS::IAM::User' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "User", + "entityType": "Resource", + "resourceType": "AWS::IAM::User" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 18, + "startColumn": 5, + "endLine": 18, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/W2530_snapstart_conditional_apply_on.yaml": { + "filePath": "bad/W2530_snapstart_conditional_apply_on.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 7, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 8, + "informational": 7, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2530", + "severity": "WARN", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", + "source": "CFN_LINT", + "entity": { + "logicalId": "PropertiesTrueBranch", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", + "category": "Best Practice", + "startLine": 17, + "startColumn": 11, + "endLine": 17, + "endColumn": 18, + "ruleDescription": "Validate that SnapStart is properly configured", + "phase": "LINT" + }, + { + "ruleId": "W2530", + "severity": "WARN", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", + "source": "CFN_LINT", + "entity": { + "logicalId": "PropertiesFalseBranch", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", + "category": "Best Practice", + "startLine": 41, + "startColumn": 11, + "endLine": 41, + "endColumn": 18, + "ruleDescription": "Validate that SnapStart is properly configured", + "phase": "LINT" + }, + { + "ruleId": "W2530", + "severity": "WARN", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", + "source": "CFN_LINT", + "entity": { + "logicalId": "ApplyOnTrueBranch", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", + "category": "Best Practice", + "startLine": 52, + "startColumn": 34, + "endLine": 52, + "endColumn": 35, + "ruleDescription": "Validate that SnapStart is properly configured", + "phase": "LINT" + }, + { + "ruleId": "W2530", + "severity": "WARN", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", + "source": "CFN_LINT", + "entity": { + "logicalId": "ApplyOnFalseBranch", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", + "category": "Best Practice", + "startLine": 63, + "startColumn": 40, + "endLine": 63, + "endColumn": 41, + "ruleDescription": "Validate that SnapStart is properly configured", + "phase": "LINT" + }, + { + "ruleId": "W2530", + "severity": "WARN", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", + "source": "CFN_LINT", + "entity": { + "logicalId": "ApplyOnBesideNoValue", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", + "category": "Best Practice", + "startLine": 74, + "startColumn": 53, + "endLine": 74, + "endColumn": 54, + "ruleDescription": "Validate that SnapStart is properly configured", + "phase": "LINT" + }, + { + "ruleId": "W2530", + "severity": "WARN", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", + "source": "CFN_LINT", + "entity": { + "logicalId": "SnapStartBesideNoValue", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", + "category": "Best Practice", + "startLine": 87, + "startColumn": 11, + "endLine": 87, + "endColumn": 18, + "ruleDescription": "Validate that SnapStart is properly configured", + "phase": "LINT" + }, + { + "ruleId": "W2530", + "severity": "WARN", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", + "source": "CFN_LINT", + "entity": { + "logicalId": "EveryBranchEnables", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", + "category": "Best Practice", + "startLine": 99, + "startColumn": 11, + "endLine": 99, + "endColumn": 18, + "ruleDescription": "Validate that SnapStart is properly configured", + "phase": "LINT" + }, + { + "ruleId": "W2530", + "severity": "WARN", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", + "source": "CFN_LINT", + "entity": { + "logicalId": "EveryBranchEnables", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", + "category": "Best Practice", + "startLine": 100, + "startColumn": 11, + "endLine": 100, + "endColumn": 18, + "ruleDescription": "Validate that SnapStart is properly configured", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'PropertiesTrueBranch' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "PropertiesTrueBranch", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'PropertiesFalseBranch' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "PropertiesFalseBranch", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 26, + "startColumn": 5, + "endLine": 26, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ApplyOnTrueBranch' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ApplyOnTrueBranch", + "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": 5, + "endLine": 44, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ApplyOnFalseBranch' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ApplyOnFalseBranch", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 55, + "startColumn": 5, + "endLine": 55, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ApplyOnBesideNoValue' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ApplyOnBesideNoValue", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 66, + "startColumn": 5, + "endLine": 66, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SnapStartBesideNoValue' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SnapStartBesideNoValue", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 77, + "startColumn": 5, + "endLine": 77, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'EveryBranchEnables' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "EveryBranchEnables", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 90, + "startColumn": 5, + "endLine": 90, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/W2530_snapstart_version_not_coexisting.yaml": { + "filePath": "bad/W2530_snapstart_version_not_coexisting.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 9, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 4, + "informational": 10, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2530", + "severity": "WARN", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", + "source": "CFN_LINT", + "entity": { + "logicalId": "VersionOnlyDependsOnFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", + "category": "Best Practice", + "startLine": 32, + "startColumn": 9, + "endLine": 32, + "endColumn": 16, + "ruleDescription": "Validate that SnapStart is properly configured", + "phase": "LINT" + }, + { + "ruleId": "W2530", + "severity": "WARN", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", + "source": "CFN_LINT", + "entity": { + "logicalId": "VersionOnlyDescribesFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", + "category": "Best Practice", + "startLine": 48, + "startColumn": 9, + "endLine": 48, + "endColumn": 16, + "ruleDescription": "Validate that SnapStart is properly configured", + "phase": "LINT" + }, + { + "ruleId": "W2530", + "severity": "WARN", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", + "source": "CFN_LINT", + "entity": { + "logicalId": "VersionInOtherEnvironment", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", + "category": "Best Practice", + "startLine": 65, + "startColumn": 11, + "endLine": 65, + "endColumn": 18, + "ruleDescription": "Validate that SnapStart is properly configured", + "phase": "LINT" + }, + { + "ruleId": "W2530", + "severity": "WARN", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", + "source": "CFN_LINT", + "entity": { + "logicalId": "VersionNamesOtherFunctionWhenEnabled", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", + "category": "Best Practice", + "startLine": 82, + "startColumn": 34, + "endLine": 82, + "endColumn": 35, + "ruleDescription": "Validate that SnapStart is properly configured", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OrderedVersion", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Version" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'PublishedFunction'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "DescribedVersion", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Version" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 52, + "startColumn": 7, + "endLine": 52, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'PublishedFunction'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "DescribedVersion", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Version" + }, + "propertyPath": "Properties.Description", + "category": "Best Practice", + "startLine": 53, + "startColumn": 7, + "endLine": 53, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VersionOnlyDescribesFunction'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "DevOnlyVersion", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Version" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 71, + "startColumn": 7, + "endLine": 71, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VersionInOtherEnvironment'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SwitchedVersion", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Version" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 86, + "startColumn": 7, + "endLine": 86, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsUsEast1'" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'PublishedFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "PublishedFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'VersionOnlyDependsOnFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "VersionOnlyDependsOnFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 24, + "startColumn": 5, + "endLine": 24, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'VersionOnlyDescribesFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "VersionOnlyDescribesFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 40, + "startColumn": 5, + "endLine": 40, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'DirectoryName' is create-only; updating it will cause resource replacement", + "message": "Resource 'VersionInOtherEnvironment' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Directory", + "logicalId": "VersionInOtherEnvironment", "entityType": "Resource", - "resourceType": "AWS::AppStream::DirectoryConfig" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.DirectoryName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 56, + "startColumn": 5, + "endLine": 56, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'User' of type 'AWS::IAM::User' supports Tags but none are configured", + "message": "Resource 'VersionNamesOtherFunctionWhenEnabled' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "User", + "logicalId": "VersionNamesOtherFunctionWhenEnabled", "entityType": "Resource", - "resourceType": "AWS::IAM::User" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 18, + "startLine": 74, "startColumn": 5, - "endLine": 18, + "endLine": 74, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19552,239 +20185,5 @@ "phase": "LINT" } ] - }, - "bad/functions/import_value.yaml": { - "filePath": "bad/functions/import_value.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 1, - "informational": 3, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E8003", - "severity": "ERROR", - "message": "Fn::Equals: argument 1: {'Fn::ImportValue': 'PrimaryRegion'} is not of type 'string'", - "source": "SCHEMA", - "entity": { - "logicalId": "primaryRegion", - "entityType": "Condition" - }, - "propertyPath": "Conditions/primaryRegion/Fn::Equals", - "category": "Intrinsic Function", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 13, - "ruleDescription": "Fn::Equals must take exactly two scalar operands", - "phase": "PARSE" - }, - { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'primaryRegion' is not used by any resource or Fn::If", - "source": "CFN_LINT", - "entity": { - "logicalId": "primaryRegion", - "entityType": "Condition" - }, - "propertyPath": "Conditions/primaryRegion", - "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 16, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "subnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "subnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import)" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'subnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "subnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/functions/length_no_transform.yaml": { - "filePath": "bad/functions/length_no_transform.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 4, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F1030", - "severity": "FATAL", - "message": "Fn::Length requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use it", - "source": "SCHEMA", - "entity": { - "logicalId": "Queue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.DelaySeconds", - "category": "Intrinsic Function", - "startLine": 13, - "startColumn": 7, - "endLine": 13, - "endColumn": 19, - "ruleDescription": "Fn::Length requires the AWS::LanguageExtensions transform", - "phase": "PARSE" - }, - { - "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": 10, - "startColumn": 3, - "endLine": 10, - "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": 10, - "startColumn": 3, - "endLine": 10, - "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": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "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": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] } } diff --git a/src/resources/expected/validation_reports2.json b/src/resources/expected/validation_reports2.json index fcd7851b..7e71fa22 100644 --- a/src/resources/expected/validation_reports2.json +++ b/src/resources/expected/validation_reports2.json @@ -1,4 +1,238 @@ { + "bad/functions/import_value.yaml": { + "filePath": "bad/functions/import_value.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 1, + "informational": 3, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E8003", + "severity": "ERROR", + "message": "Fn::Equals: argument 1: {'Fn::ImportValue': 'PrimaryRegion'} is not of type 'string'", + "source": "SCHEMA", + "entity": { + "logicalId": "primaryRegion", + "entityType": "Condition" + }, + "propertyPath": "Conditions/primaryRegion/Fn::Equals", + "category": "Intrinsic Function", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 13, + "ruleDescription": "Fn::Equals must take exactly two scalar operands", + "phase": "PARSE" + }, + { + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'primaryRegion' is not used by any resource or Fn::If", + "source": "CFN_LINT", + "entity": { + "logicalId": "primaryRegion", + "entityType": "Condition" + }, + "propertyPath": "Conditions/primaryRegion", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 16, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "subnet", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "subnet", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import)" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'subnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "subnet", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/functions/length_no_transform.yaml": { + "filePath": "bad/functions/length_no_transform.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 4, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F1030", + "severity": "FATAL", + "message": "Fn::Length requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use it", + "source": "SCHEMA", + "entity": { + "logicalId": "Queue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.DelaySeconds", + "category": "Intrinsic Function", + "startLine": 13, + "startColumn": 7, + "endLine": 13, + "endColumn": 19, + "ruleDescription": "Fn::Length requires the AWS::LanguageExtensions transform", + "phase": "PARSE" + }, + { + "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": 10, + "startColumn": 3, + "endLine": 10, + "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": 10, + "startColumn": 3, + "endLine": 10, + "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": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "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": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, "bad/functions/relationship_conditions.yaml": { "filePath": "bad/functions/relationship_conditions.yaml", "status": "OK", @@ -6251,12 +6485,12 @@ "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SnapStart", + "propertyPath": "Properties.SnapStart.ApplyOn", "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", - "startLine": 13, - "startColumn": 7, - "endLine": 13, + "startLine": 14, + "startColumn": 9, + "endLine": 14, "endColumn": 16, "ruleDescription": "Validate that SnapStart is properly configured", "phase": "LINT" @@ -6350,12 +6584,12 @@ "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SnapStart", + "propertyPath": "Properties.SnapStart.ApplyOn", "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", - "startLine": 12, - "startColumn": 7, - "endLine": 12, + "startLine": 13, + "startColumn": 9, + "endLine": 13, "endColumn": 16, "ruleDescription": "Validate that SnapStart is properly configured", "phase": "LINT" @@ -89641,71 +89875,5 @@ "phase": "LINT" } ] - }, - "bad/resources/properties/custom.yaml": { - "filePath": "bad/resources/properties/custom.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "bad/resources/properties/list_duplicates.yaml": { - "filePath": "bad/resources/properties/list_duplicates.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F3037", - "severity": "FATAL", - "message": "Array items are not unique", - "source": "SCHEMA", - "entity": { - "logicalId": "IamGroupWithNestedConditions", - "entityType": "Resource", - "resourceType": "AWS::IAM::Group" - }, - "propertyPath": "Properties.ManagedPolicyArns", - "category": "Schema", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 24, - "conditionScenario": { - "isPrimaryRegion": true - }, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Array items not unique", - "phase": "SCHEMA", - "context": { - "actualValue": [ - "arn:aws:iam::aws:policy/AdministratorPolicy", - "arn:aws:iam::aws:policy/AdministratorPolicy" - ] - } - } - ] } } diff --git a/src/resources/expected/validation_reports3.json b/src/resources/expected/validation_reports3.json index fed9e39c..213866e4 100644 --- a/src/resources/expected/validation_reports3.json +++ b/src/resources/expected/validation_reports3.json @@ -1,4 +1,117 @@ { + "bad/resources/properties/custom.yaml": { + "filePath": "bad/resources/properties/custom.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "bad/resources/properties/list_duplicates.yaml": { + "filePath": "bad/resources/properties/list_duplicates.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 3, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3037", + "severity": "FATAL", + "message": "Array items are not unique", + "source": "SCHEMA", + "entity": { + "logicalId": "IamGroup", + "entityType": "Resource", + "resourceType": "AWS::IAM::Group" + }, + "propertyPath": "Properties.ManagedPolicyArns", + "category": "Schema", + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Array items not unique", + "phase": "SCHEMA" + }, + { + "ruleId": "F3037", + "severity": "FATAL", + "message": "Array items are not unique", + "source": "SCHEMA", + "entity": { + "logicalId": "IamGroupWithConditions", + "entityType": "Resource", + "resourceType": "AWS::IAM::Group" + }, + "propertyPath": "Properties.ManagedPolicyArns", + "category": "Schema", + "startLine": 22, + "startColumn": 7, + "endLine": 22, + "endColumn": 24, + "conditionScenario": { + "isPrimaryRegion": true + }, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Array items not unique", + "phase": "SCHEMA", + "context": { + "actualValue": null, + "resolutionSource": "Fn::If on condition 'isPrimaryRegion'" + } + }, + { + "ruleId": "F3037", + "severity": "FATAL", + "message": "Array items are not unique", + "source": "SCHEMA", + "entity": { + "logicalId": "IamGroupWithNestedConditions", + "entityType": "Resource", + "resourceType": "AWS::IAM::Group" + }, + "propertyPath": "Properties.ManagedPolicyArns", + "category": "Schema", + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 24, + "conditionScenario": { + "isPrimaryRegion": true + }, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Array items not unique", + "phase": "SCHEMA", + "context": { + "actualValue": [ + "arn:aws:iam::aws:policy/AdministratorPolicy", + "arn:aws:iam::aws:policy/AdministratorPolicy" + ] + } + } + ] + }, "bad/resources/properties/primitive_types_map.yaml": { "filePath": "bad/resources/properties/primitive_types_map.yaml", "status": "OK", @@ -17055,2279 +17168,5 @@ "phase": "LINT" } ] - }, - "cdk/amplify-console-app--AmplifyConsoleApp.template.json": { - "filePath": "cdk/amplify-console-app--AmplifyConsoleApp.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 4, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AppId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MasterBranch", - "entityType": "Resource", - "resourceType": "AWS::Amplify::Branch" - }, - "propertyPath": "Properties.AppId", - "category": "Best Practice", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-amplify", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt testapp.AppId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BranchName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MasterBranch", - "entityType": "Resource", - "resourceType": "AWS::Amplify::Branch" - }, - "propertyPath": "Properties.BranchName", - "category": "Best Practice", - "startLine": 23, - "startColumn": 5, - "endLine": 23, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-amplify", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'testapp' of type 'AWS::Amplify::App' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "testapp", - "entityType": "Resource", - "resourceType": "AWS::Amplify::App" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MasterBranch' of type 'AWS::Amplify::Branch' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MasterBranch", - "entityType": "Resource", - "resourceType": "AWS::Amplify::Branch" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 16, - "startColumn": 4, - "endLine": 16, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/api-cors-lambda-crud-dynamodb--ApiLambdaCrudDynamoDBExample.template.json": { - "filePath": "cdk/api-cors-lambda-crud-dynamodb--ApiLambdaCrudDynamoDBExample.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 41, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 10, - "informational": 86, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "getOneItemFunctionE3257B22", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 145, - "startColumn": 5, - "endLine": 145, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs20.x", - "lifecycle": "deprecated" - } - }, - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "getAllItemsFunction0B7A913E", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 273, - "startColumn": 5, - "endLine": 273, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs20.x", - "lifecycle": "deprecated" - } - }, - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "createItemFunction8D47E48A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 401, - "startColumn": 5, - "endLine": 401, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs20.x", - "lifecycle": "deprecated" - } - }, - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "updateItemFunction59415205", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 529, - "startColumn": 5, - "endLine": 529, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs20.x", - "lifecycle": "deprecated" - } - }, - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "deleteItemFunction2918B1B0", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 657, - "startColumn": 5, - "endLine": 657, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs20.x", - "lifecycle": "deprecated" - } - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'getOneItemFunctionServiceRoleCFD54796' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "getOneItemFunctionE3257B22", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 147, - "startColumn": 4, - "endLine": 147, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'getAllItemsFunctionServiceRoleCC084440' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "getAllItemsFunction0B7A913E", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 275, - "startColumn": 4, - "endLine": 275, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'createItemFunctionServiceRole1BBF2178' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "createItemFunction8D47E48A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 403, - "startColumn": 4, - "endLine": 403, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'updateItemFunctionServiceRole40035396' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "updateItemFunction59415205", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 531, - "startColumn": 4, - "endLine": 531, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'deleteItemFunctionServiceRole5C201FCC' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "deleteItemFunction2918B1B0", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 659, - "startColumn": 4, - "endLine": 659, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "items07D08F4B", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.KeySchema", - "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "items07D08F4B", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.TableName", - "category": "Best Practice", - "startLine": 22, - "startColumn": 5, - "endLine": 22, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiDeploymentFEC31BD04feb54db86e2f8eed94e1b28001143ce", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 738, - "startColumn": 5, - "endLine": 738, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApi28111E1C'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiDeploymentStageprodE77B897D", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 764, - "startColumn": 5, - "endLine": 764, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApi28111E1C'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiDeploymentStageprodE77B897D", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" - }, - "propertyPath": "Properties.StageName", - "category": "Best Practice", - "startLine": 767, - "startColumn": 5, - "endLine": 767, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitems9015DBED", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" - }, - "propertyPath": "Properties.ParentId", - "category": "Best Practice", - "startLine": 779, - "startColumn": 5, - "endLine": 779, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt itemsApi28111E1C.RootResourceId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitems9015DBED", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" - }, - "propertyPath": "Properties.PathPart", - "category": "Best Practice", - "startLine": 785, - "startColumn": 5, - "endLine": 785, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitems9015DBED", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 786, - "startColumn": 5, - "endLine": 786, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApi28111E1C'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitems2A648972", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 797, - "startColumn": 5, - "endLine": 797, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitems2A648972", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 798, - "startColumn": 5, - "endLine": 798, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt getAllItemsFunction0B7A913E.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitems2A648972", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 804, - "startColumn": 5, - "endLine": 804, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitems2A648972", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 805, - "startColumn": 5, - "endLine": 805, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/{ref:itemsApiDeploymentStageprodE77B897D}/GET/items)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsF4364FB2", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 841, - "startColumn": 5, - "endLine": 841, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsF4364FB2", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 842, - "startColumn": 5, - "endLine": 842, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt getAllItemsFunction0B7A913E.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsF4364FB2", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 848, - "startColumn": 5, - "endLine": 848, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsF4364FB2", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 849, - "startColumn": 5, - "endLine": 849, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/test-invoke-stage/GET/items)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsGET59B0F78A", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.HttpMethod", - "category": "Best Practice", - "startLine": 882, - "startColumn": 5, - "endLine": 882, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsGET59B0F78A", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.ResourceId", - "category": "Best Practice", - "startLine": 910, - "startColumn": 5, - "endLine": 910, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApiitems9015DBED'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsGET59B0F78A", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 913, - "startColumn": 5, - "endLine": 913, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApi28111E1C'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsPOSTApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitems7DA2B753", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 924, - "startColumn": 5, - "endLine": 924, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsPOSTApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitems7DA2B753", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 925, - "startColumn": 5, - "endLine": 925, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt createItemFunction8D47E48A.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsPOSTApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitems7DA2B753", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 931, - "startColumn": 5, - "endLine": 931, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsPOSTApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitems7DA2B753", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 932, - "startColumn": 5, - "endLine": 932, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/{ref:itemsApiDeploymentStageprodE77B897D}/POST/items)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsPOSTApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitemsAE25CBB6", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 968, - "startColumn": 5, - "endLine": 968, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsPOSTApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitemsAE25CBB6", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 969, - "startColumn": 5, - "endLine": 969, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt createItemFunction8D47E48A.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsPOSTApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitemsAE25CBB6", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 975, - "startColumn": 5, - "endLine": 975, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsPOSTApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitemsAE25CBB6", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 976, - "startColumn": 5, - "endLine": 976, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/test-invoke-stage/POST/items)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsPOSTDD3E83D0", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.HttpMethod", - "category": "Best Practice", - "startLine": 1009, - "startColumn": 5, - "endLine": 1009, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsPOSTDD3E83D0", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.ResourceId", - "category": "Best Practice", - "startLine": 1037, - "startColumn": 5, - "endLine": 1037, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApiitems9015DBED'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsPOSTDD3E83D0", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 1040, - "startColumn": 5, - "endLine": 1040, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApi28111E1C'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsOPTIONSB46B4D53", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.HttpMethod", - "category": "Best Practice", - "startLine": 1052, - "startColumn": 5, - "endLine": 1052, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsOPTIONSB46B4D53", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.ResourceId", - "category": "Best Practice", - "startLine": 1082, - "startColumn": 5, - "endLine": 1082, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApiitems9015DBED'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsOPTIONSB46B4D53", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 1085, - "startColumn": 5, - "endLine": 1085, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApi28111E1C'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidA29927C2", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" - }, - "propertyPath": "Properties.ParentId", - "category": "Best Practice", - "startLine": 1096, - "startColumn": 5, - "endLine": 1096, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApiitems9015DBED'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidA29927C2", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" - }, - "propertyPath": "Properties.PathPart", - "category": "Best Practice", - "startLine": 1099, - "startColumn": 5, - "endLine": 1099, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidA29927C2", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 1100, - "startColumn": 5, - "endLine": 1100, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApi28111E1C'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsid6D54AF22", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 1111, - "startColumn": 5, - "endLine": 1111, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsid6D54AF22", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 1112, - "startColumn": 5, - "endLine": 1112, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt getOneItemFunctionE3257B22.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsid6D54AF22", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 1118, - "startColumn": 5, - "endLine": 1118, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsid6D54AF22", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 1119, - "startColumn": 5, - "endLine": 1119, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/{ref:itemsApiDeploymentStageprodE77B897D}/GET/items/*)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsidCA08693A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 1155, - "startColumn": 5, - "endLine": 1155, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsidCA08693A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 1156, - "startColumn": 5, - "endLine": 1156, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt getOneItemFunctionE3257B22.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsidCA08693A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 1162, - "startColumn": 5, - "endLine": 1162, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsidCA08693A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 1163, - "startColumn": 5, - "endLine": 1163, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/test-invoke-stage/GET/items/*)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidGET38A333A8", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.HttpMethod", - "category": "Best Practice", - "startLine": 1196, - "startColumn": 5, - "endLine": 1196, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidGET38A333A8", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.ResourceId", - "category": "Best Practice", - "startLine": 1224, - "startColumn": 5, - "endLine": 1224, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApiitemsidA29927C2'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidGET38A333A8", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 1227, - "startColumn": 5, - "endLine": 1227, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApi28111E1C'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidPATCHApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsidEE9531C0", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 1238, - "startColumn": 5, - "endLine": 1238, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidPATCHApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsidEE9531C0", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 1239, - "startColumn": 5, - "endLine": 1239, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt updateItemFunction59415205.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidPATCHApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsidEE9531C0", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 1245, - "startColumn": 5, - "endLine": 1245, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidPATCHApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsidEE9531C0", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 1246, - "startColumn": 5, - "endLine": 1246, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/{ref:itemsApiDeploymentStageprodE77B897D}/PATCH/items/*)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidPATCHApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsid513A5711", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 1282, - "startColumn": 5, - "endLine": 1282, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidPATCHApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsid513A5711", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 1283, - "startColumn": 5, - "endLine": 1283, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt updateItemFunction59415205.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidPATCHApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsid513A5711", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 1289, - "startColumn": 5, - "endLine": 1289, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidPATCHApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsid513A5711", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 1290, - "startColumn": 5, - "endLine": 1290, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/test-invoke-stage/PATCH/items/*)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidPATCH0548CB6A", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.HttpMethod", - "category": "Best Practice", - "startLine": 1323, - "startColumn": 5, - "endLine": 1323, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidPATCH0548CB6A", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.ResourceId", - "category": "Best Practice", - "startLine": 1351, - "startColumn": 5, - "endLine": 1351, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApiitemsidA29927C2'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidPATCH0548CB6A", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 1354, - "startColumn": 5, - "endLine": 1354, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApi28111E1C'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidDELETEApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid056EB521", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 1365, - "startColumn": 5, - "endLine": 1365, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidDELETEApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid056EB521", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 1366, - "startColumn": 5, - "endLine": 1366, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt deleteItemFunction2918B1B0.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidDELETEApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid056EB521", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 1372, - "startColumn": 5, - "endLine": 1372, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidDELETEApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid056EB521", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 1373, - "startColumn": 5, - "endLine": 1373, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/{ref:itemsApiDeploymentStageprodE77B897D}/DELETE/items/*)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidDELETEApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid4C18D4E2", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 1409, - "startColumn": 5, - "endLine": 1409, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidDELETEApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid4C18D4E2", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 1410, - "startColumn": 5, - "endLine": 1410, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt deleteItemFunction2918B1B0.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidDELETEApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid4C18D4E2", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 1416, - "startColumn": 5, - "endLine": 1416, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidDELETEApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid4C18D4E2", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 1417, - "startColumn": 5, - "endLine": 1417, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/test-invoke-stage/DELETE/items/*)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidDELETE21550005", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.HttpMethod", - "category": "Best Practice", - "startLine": 1450, - "startColumn": 5, - "endLine": 1450, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidDELETE21550005", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.ResourceId", - "category": "Best Practice", - "startLine": 1478, - "startColumn": 5, - "endLine": 1478, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApiitemsidA29927C2'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidDELETE21550005", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 1481, - "startColumn": 5, - "endLine": 1481, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApi28111E1C'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidOPTIONS62BD91D0", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.HttpMethod", - "category": "Best Practice", - "startLine": 1493, - "startColumn": 5, - "endLine": 1493, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidOPTIONS62BD91D0", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.ResourceId", - "category": "Best Practice", - "startLine": 1523, - "startColumn": 5, - "endLine": 1523, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApiitemsidA29927C2'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidOPTIONS62BD91D0", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 1526, - "startColumn": 5, - "endLine": 1526, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApi28111E1C'" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'items07D08F4B' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "items07D08F4B", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'getOneItemFunctionServiceRoleCFD54796' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "getOneItemFunctionServiceRoleCFD54796", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 32, - "startColumn": 4, - "endLine": 32, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'getOneItemFunctionE3257B22' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "getOneItemFunctionE3257B22", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 123, - "startColumn": 4, - "endLine": 123, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'getAllItemsFunctionServiceRoleCC084440' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "getAllItemsFunctionServiceRoleCC084440", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 160, - "startColumn": 4, - "endLine": 160, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'getAllItemsFunction0B7A913E' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "getAllItemsFunction0B7A913E", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 251, - "startColumn": 4, - "endLine": 251, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'createItemFunctionServiceRole1BBF2178' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "createItemFunctionServiceRole1BBF2178", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 288, - "startColumn": 4, - "endLine": 288, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'createItemFunction8D47E48A' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "createItemFunction8D47E48A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 379, - "startColumn": 4, - "endLine": 379, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'updateItemFunctionServiceRole40035396' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "updateItemFunctionServiceRole40035396", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 416, - "startColumn": 4, - "endLine": 416, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'updateItemFunction59415205' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "updateItemFunction59415205", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 507, - "startColumn": 4, - "endLine": 507, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'deleteItemFunctionServiceRole5C201FCC' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "deleteItemFunctionServiceRole5C201FCC", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 544, - "startColumn": 4, - "endLine": 544, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'deleteItemFunction2918B1B0' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "deleteItemFunction2918B1B0", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 635, - "startColumn": 4, - "endLine": 635, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'itemsApi28111E1C' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApi28111E1C", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 672, - "startColumn": 4, - "endLine": 672, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'itemsApiCloudWatchRoleB5C7B431' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiCloudWatchRoleB5C7B431", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 681, - "startColumn": 4, - "endLine": 681, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'itemsApiDeploymentStageprodE77B897D' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiDeploymentStageprodE77B897D", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 760, - "startColumn": 4, - "endLine": 760, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] } } diff --git a/src/resources/expected/validation_reports4.json b/src/resources/expected/validation_reports4.json index bb0a8b89..40e153c1 100644 --- a/src/resources/expected/validation_reports4.json +++ b/src/resources/expected/validation_reports4.json @@ -1,14 +1,120 @@ { - "cdk/api-gateway-async-lambda-invocation--ApiGatewayAsyncLambdaStack.template.json": { - "filePath": "cdk/api-gateway-async-lambda-invocation--ApiGatewayAsyncLambdaStack.template.json", + "cdk/amplify-console-app--AmplifyConsoleApp.template.json": { + "filePath": "cdk/amplify-console-app--AmplifyConsoleApp.template.json", "status": "OK", "metadata": { - "resourcesScanned": 19, + "resourcesScanned": 3, "counts": { "fatal": 0, "errors": 0, - "warnings": 2, - "informational": 34, + "warnings": 0, + "informational": 4, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AppId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MasterBranch", + "entityType": "Resource", + "resourceType": "AWS::Amplify::Branch" + }, + "propertyPath": "Properties.AppId", + "category": "Best Practice", + "startLine": 17, + "startColumn": 5, + "endLine": 17, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-amplify", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt testapp.AppId" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BranchName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MasterBranch", + "entityType": "Resource", + "resourceType": "AWS::Amplify::Branch" + }, + "propertyPath": "Properties.BranchName", + "category": "Best Practice", + "startLine": 23, + "startColumn": 5, + "endLine": 23, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-amplify", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'testapp' of type 'AWS::Amplify::App' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "testapp", + "entityType": "Resource", + "resourceType": "AWS::Amplify::App" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MasterBranch' of type 'AWS::Amplify::Branch' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "MasterBranch", + "entityType": "Resource", + "resourceType": "AWS::Amplify::Branch" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 16, + "startColumn": 4, + "endLine": 16, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/api-cors-lambda-crud-dynamodb--ApiLambdaCrudDynamoDBExample.template.json": { + "filePath": "cdk/api-cors-lambda-crud-dynamodb--ApiLambdaCrudDynamoDBExample.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 41, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 10, + "informational": 86, "debug": 0 }, "suppressed": 0, @@ -22,15 +128,107 @@ "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "apigwasynclambdafnAD6250E4", + "logicalId": "getOneItemFunctionE3257B22", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 138, + "startLine": 145, "startColumn": 5, - "endLine": 138, + "endLine": 145, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs20.x", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "getAllItemsFunction0B7A913E", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 273, + "startColumn": 5, + "endLine": 273, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs20.x", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "createItemFunction8D47E48A", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 401, + "startColumn": 5, + "endLine": 401, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs20.x", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "updateItemFunction59415205", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 529, + "startColumn": 5, + "endLine": 529, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs20.x", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "deleteItemFunction2918B1B0", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 657, + "startColumn": 5, + "endLine": 657, "endColumn": 13, "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", @@ -42,19 +240,99 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'apigwasynclambdafnServiceRole607675A2' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'getOneItemFunctionServiceRoleCFD54796' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "apigwasynclambdafnAD6250E4", + "logicalId": "getOneItemFunctionE3257B22", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 140, + "startLine": 147, "startColumn": 4, - "endLine": 140, + "endLine": 147, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'getAllItemsFunctionServiceRoleCC084440' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "getAllItemsFunction0B7A913E", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 275, + "startColumn": 4, + "endLine": 275, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'createItemFunctionServiceRole1BBF2178' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "createItemFunction8D47E48A", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 403, + "startColumn": 4, + "endLine": 403, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'updateItemFunctionServiceRole40035396' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "updateItemFunction59415205", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 531, + "startColumn": 4, + "endLine": 531, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'deleteItemFunctionServiceRole5C201FCC' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "deleteItemFunction2918B1B0", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 659, + "startColumn": 4, + "endLine": 659, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -65,7 +343,7 @@ "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdatable1075CD30", + "logicalId": "items07D08F4B", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, @@ -87,7 +365,7 @@ "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdatable1075CD30", + "logicalId": "items07D08F4B", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, @@ -109,22 +387,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwDeploymentDA408F9D41ab700bc8db89ed7cb2c6250ab97c0a", + "logicalId": "itemsApiDeploymentFEC31BD04feb54db86e2f8eed94e1b28001143ce", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Deployment" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 230, + "startLine": 738, "startColumn": 5, - "endLine": 230, + "endLine": 738, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'apigwasynclambdaapigw3449931B'" + "resolutionSource": "Ref to 'itemsApi28111E1C'" } }, { @@ -133,22 +411,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwDeploymentStageprodAE3424CD", + "logicalId": "itemsApiDeploymentStageprodE77B897D", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 269, + "startLine": 764, "startColumn": 5, - "endLine": 269, + "endLine": 764, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'apigwasynclambdaapigw3449931B'" + "resolutionSource": "Ref to 'itemsApi28111E1C'" } }, { @@ -157,15 +435,15 @@ "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwDeploymentStageprodAE3424CD", + "logicalId": "itemsApiDeploymentStageprodE77B897D", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 272, + "startLine": 767, "startColumn": 5, - "endLine": 272, + "endLine": 767, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -180,22 +458,22 @@ "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjob39EDA914", + "logicalId": "itemsApiitems9015DBED", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Resource" }, "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 284, + "startLine": 779, "startColumn": 5, - "endLine": 284, + "endLine": 779, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt apigwasynclambdaapigw3449931B.RootResourceId" + "resolutionSource": "GetAtt itemsApi28111E1C.RootResourceId" } }, { @@ -204,15 +482,15 @@ "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjob39EDA914", + "logicalId": "itemsApiitems9015DBED", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Resource" }, "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 290, + "startLine": 785, "startColumn": 5, - "endLine": 290, + "endLine": 785, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -227,22 +505,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjob39EDA914", + "logicalId": "itemsApiitems9015DBED", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Resource" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 291, + "startLine": 786, "startColumn": 5, - "endLine": 291, + "endLine": 786, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'apigwasynclambdaapigw3449931B'" + "resolutionSource": "Ref to 'itemsApi28111E1C'" } }, { @@ -251,15 +529,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob195929C9", + "logicalId": "itemsApiitemsGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitems2A648972", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 302, + "startLine": 797, "startColumn": 5, - "endLine": 302, + "endLine": 797, "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -273,21 +551,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob195929C9", + "logicalId": "itemsApiitemsGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitems2A648972", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 303, + "startLine": 798, "startColumn": 5, - "endLine": 303, + "endLine": 798, "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt apigwasynclambdafnAD6250E4.Arn" + "resolutionSource": "GetAtt getAllItemsFunction0B7A913E.Arn" } }, { @@ -296,15 +574,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob195929C9", + "logicalId": "itemsApiitemsGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitems2A648972", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 309, + "startLine": 804, "startColumn": 5, - "endLine": 309, + "endLine": 804, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -318,21 +596,21 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob195929C9", + "logicalId": "itemsApiitemsGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitems2A648972", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 310, + "startLine": 805, "startColumn": 5, - "endLine": 310, + "endLine": 805, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:apigwasynclambdaapigw3449931B}/{ref:apigwasynclambdaapigwDeploymentStageprodAE3424CD}/POST/job)" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/{ref:itemsApiDeploymentStageprodE77B897D}/GET/items)" } }, { @@ -341,15 +619,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionTestApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob01D110CD", + "logicalId": "itemsApiitemsGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsF4364FB2", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 338, + "startLine": 841, "startColumn": 5, - "endLine": 338, + "endLine": 841, "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -363,21 +641,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionTestApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob01D110CD", + "logicalId": "itemsApiitemsGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsF4364FB2", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 339, + "startLine": 842, "startColumn": 5, - "endLine": 339, + "endLine": 842, "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt apigwasynclambdafnAD6250E4.Arn" + "resolutionSource": "GetAtt getAllItemsFunction0B7A913E.Arn" } }, { @@ -386,15 +664,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionTestApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob01D110CD", + "logicalId": "itemsApiitemsGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsF4364FB2", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 345, + "startLine": 848, "startColumn": 5, - "endLine": 345, + "endLine": 848, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -408,21 +686,21 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionTestApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob01D110CD", + "logicalId": "itemsApiitemsGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsF4364FB2", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 346, + "startLine": 849, "startColumn": 5, - "endLine": 346, + "endLine": 849, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:apigwasynclambdaapigw3449931B}/test-invoke-stage/POST/job)" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/test-invoke-stage/GET/items)" } }, { @@ -431,15 +709,15 @@ "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobPOST79D1CAC1", + "logicalId": "itemsApiitemsGET59B0F78A", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 371, + "startLine": 882, "startColumn": 5, - "endLine": 371, + "endLine": 882, "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -454,22 +732,22 @@ "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobPOST79D1CAC1", + "logicalId": "itemsApiitemsGET59B0F78A", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 419, + "startLine": 910, "startColumn": 5, - "endLine": 419, + "endLine": 910, "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'apigwasynclambdaapigwjob39EDA914'" + "resolutionSource": "Ref to 'itemsApiitems9015DBED'" } }, { @@ -478,470 +756,416 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobPOST79D1CAC1", + "logicalId": "itemsApiitemsGET59B0F78A", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 422, + "startLine": 913, "startColumn": 5, - "endLine": 422, + "endLine": 913, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'apigwasynclambdaapigw3449931B'" + "resolutionSource": "Ref to 'itemsApi28111E1C'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobjobId73AEE867", + "logicalId": "itemsApiitemsPOSTApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitems7DA2B753", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 433, + "startLine": 924, "startColumn": 5, - "endLine": 433, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 924, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'apigwasynclambdaapigwjob39EDA914'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobjobId73AEE867", + "logicalId": "itemsApiitemsPOSTApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitems7DA2B753", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 436, + "startLine": 925, "startColumn": 5, - "endLine": 436, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 925, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt createItemFunction8D47E48A.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobjobId73AEE867", + "logicalId": "itemsApiitemsPOSTApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitems7DA2B753", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 437, + "startLine": 931, "startColumn": 5, - "endLine": 437, + "endLine": 931, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'apigwasynclambdaapigw3449931B'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobjobIdGETED10CC0C", + "logicalId": "itemsApiitemsPOSTApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitems7DA2B753", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 449, + "startLine": 932, "startColumn": 5, - "endLine": 449, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 932, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/{ref:itemsApiDeploymentStageprodE77B897D}/POST/items)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobjobIdGETED10CC0C", + "logicalId": "itemsApiitemsPOSTApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitemsAE25CBB6", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 498, + "startLine": 968, "startColumn": 5, - "endLine": 498, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 968, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'apigwasynclambdaapigwjobjobId73AEE867'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobjobIdGETED10CC0C", + "logicalId": "itemsApiitemsPOSTApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitemsAE25CBB6", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 501, + "startLine": 969, "startColumn": 5, - "endLine": 501, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 969, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'apigwasynclambdaapigw3449931B'" + "resolutionSource": "GetAtt createItemFunction8D47E48A.Arn" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'apigwasynclambdatable1075CD30' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdatable1075CD30", + "logicalId": "itemsApiitemsPOSTApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitemsAE25CBB6", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, + "startLine": 975, + "startColumn": 5, + "endLine": 975, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'apigwasynclambdafnloggroup3D262524' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdafnloggroup3D262524", + "logicalId": "itemsApiitemsPOSTApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitemsAE25CBB6", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 32, - "startColumn": 4, - "endLine": 32, + "startLine": 976, + "startColumn": 5, + "endLine": 976, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/test-invoke-stage/POST/items)" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'apigwasynclambdafnServiceRole607675A2' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdafnServiceRole607675A2", + "logicalId": "itemsApiitemsPOSTDD3E83D0", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 43, - "startColumn": 4, - "endLine": 43, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1009, + "startColumn": 5, + "endLine": 1009, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'apigwasynclambdafnAD6250E4' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdafnAD6250E4", + "logicalId": "itemsApiitemsPOSTDD3E83D0", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 112, - "startColumn": 4, - "endLine": 112, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1037, + "startColumn": 5, + "endLine": 1037, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'itemsApiitems9015DBED'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'apigwasynclambdaapigwloggroup1E36CCD4' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwloggroup1E36CCD4", + "logicalId": "itemsApiitemsPOSTDD3E83D0", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 153, - "startColumn": 4, - "endLine": 153, + "startLine": 1040, + "startColumn": 5, + "endLine": 1040, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'itemsApi28111E1C'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'apigwasynclambdaapigw3449931B' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigw3449931B", + "logicalId": "itemsApiitemsOPTIONSB46B4D53", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 164, - "startColumn": 4, - "endLine": 164, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1052, + "startColumn": 5, + "endLine": 1052, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'apigwasynclambdaapigwCloudWatchRoleC01BF930' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwCloudWatchRoleC01BF930", + "logicalId": "itemsApiitemsOPTIONSB46B4D53", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 173, - "startColumn": 4, - "endLine": 173, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1082, + "startColumn": 5, + "endLine": 1082, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'itemsApiitems9015DBED'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'apigwasynclambdaapigwDeploymentStageprodAE3424CD' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwDeploymentStageprodAE3424CD", + "logicalId": "itemsApiitemsOPTIONSB46B4D53", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 247, - "startColumn": 4, - "endLine": 247, + "startLine": 1085, + "startColumn": 5, + "endLine": 1085, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'itemsApi28111E1C'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ApiGatewayDynamoRole447127F0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayDynamoRole447127F0", + "logicalId": "itemsApiitemsidA29927C2", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 511, - "startColumn": 4, - "endLine": 511, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/api-gateway-lambda-token-authorizer--gateway-lambda-auth-stack.template.json": { - "filePath": "cdk/api-gateway-lambda-token-authorizer--gateway-lambda-auth-stack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 20, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 5, - "informational": 30, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "operationallambdaFE43E13E", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 60, + "startLine": 1096, "startColumn": 5, - "endLine": 60, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 1096, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'itemsApiitems9015DBED'" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "authenticationlambdaDD3A2252", + "logicalId": "itemsApiitemsidA29927C2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 263, + "propertyPath": "Properties.PathPart", + "category": "Best Practice", + "startLine": 1099, "startColumn": 5, - "endLine": 263, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 1099, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'operationallambdaServiceRole14B56EA5' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "operationallambdaFE43E13E", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 63, - "startColumn": 4, - "endLine": 63, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 195, - "startColumn": 4, - "endLine": 195, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'authenticationlambdaServiceRole9798A92B' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "authenticationlambdaDD3A2252", + "logicalId": "itemsApiitemsidA29927C2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 266, - "startColumn": 4, - "endLine": 266, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1100, + "startColumn": 5, + "endLine": 1100, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'itemsApi28111E1C'" + } }, { "ruleId": "I9001", @@ -949,15 +1173,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "authenticationlambdagatewaylambdaauthstackoperationalAuthorizerD36E749EPermissionsCD2687F2", + "logicalId": "itemsApiitemsidGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsid6D54AF22", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 305, + "startLine": 1111, "startColumn": 5, - "endLine": 305, + "endLine": 1111, "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -971,21 +1195,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "authenticationlambdagatewaylambdaauthstackoperationalAuthorizerD36E749EPermissionsCD2687F2", + "logicalId": "itemsApiitemsidGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsid6D54AF22", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 306, + "startLine": 1112, "startColumn": 5, - "endLine": 306, + "endLine": 1112, "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt authenticationlambdaDD3A2252.Arn" + "resolutionSource": "GetAtt getOneItemFunctionE3257B22.Arn" } }, { @@ -994,15 +1218,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "authenticationlambdagatewaylambdaauthstackoperationalAuthorizerD36E749EPermissionsCD2687F2", + "logicalId": "itemsApiitemsidGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsid6D54AF22", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 312, + "startLine": 1118, "startColumn": 5, - "endLine": 312, + "endLine": 1118, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -1016,163 +1240,158 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "authenticationlambdagatewaylambdaauthstackoperationalAuthorizerD36E749EPermissionsCD2687F2", + "logicalId": "itemsApiitemsidGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsid6D54AF22", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 313, + "startLine": 1119, "startColumn": 5, - "endLine": 313, + "endLine": 1119, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:restapigatewayE22E31C5}/authorizers/{ref:operationalAuthorizer363A7D2B})" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/{ref:itemsApiDeploymentStageprodE77B897D}/GET/items/*)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "operationalAuthorizer363A7D2B", + "logicalId": "itemsApiitemsidGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsidCA08693A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Authorizer" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 392, + "startLine": 1155, "startColumn": 5, - "endLine": 392, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 1155, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'restapigatewayE22E31C5'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayDeploymentB29CB257026bd226d852d73169d333911fdd4fa6", + "logicalId": "itemsApiitemsidGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsidCA08693A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 431, + "startLine": 1156, "startColumn": 5, - "endLine": 431, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 1156, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'restapigatewayE22E31C5'" + "resolutionSource": "GetAtt getOneItemFunctionE3257B22.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayDeploymentStagedevB80C9CD7", + "logicalId": "itemsApiitemsidGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsidCA08693A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 473, + "startLine": 1162, "startColumn": 5, - "endLine": 473, + "endLine": 1162, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'restapigatewayE22E31C5'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayDeploymentStagedevB80C9CD7", + "logicalId": "itemsApiitemsidGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsidCA08693A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 476, + "startLine": 1163, "startColumn": 5, - "endLine": 476, + "endLine": 1163, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/test-invoke-stage/GET/items/*)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayhealth0EB12846", + "logicalId": "itemsApiitemsidGET38A333A8", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 485, + "startLine": 1196, "startColumn": 5, - "endLine": 485, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 1196, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt restapigatewayE22E31C5.RootResourceId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayhealth0EB12846", + "logicalId": "itemsApiitemsidGET38A333A8", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 491, + "startLine": 1224, "startColumn": 5, - "endLine": 491, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 1224, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'itemsApiitemsidA29927C2'" } }, { @@ -1181,22 +1400,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayhealth0EB12846", + "logicalId": "itemsApiitemsidGET38A333A8", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 492, + "startLine": 1227, "startColumn": 5, - "endLine": 492, + "endLine": 1227, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'restapigatewayE22E31C5'" + "resolutionSource": "Ref to 'itemsApi28111E1C'" } }, { @@ -1205,15 +1424,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayhealthGETApiPermissiongatewaylambdaauthstackrestapigatewayAEDD1643GEThealth051F210D", + "logicalId": "itemsApiitemsidPATCHApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsidEE9531C0", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 503, + "startLine": 1238, "startColumn": 5, - "endLine": 503, + "endLine": 1238, "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -1227,21 +1446,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayhealthGETApiPermissiongatewaylambdaauthstackrestapigatewayAEDD1643GEThealth051F210D", + "logicalId": "itemsApiitemsidPATCHApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsidEE9531C0", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 504, + "startLine": 1239, "startColumn": 5, - "endLine": 504, + "endLine": 1239, "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt operationallambdaFE43E13E.Arn" + "resolutionSource": "GetAtt updateItemFunction59415205.Arn" } }, { @@ -1250,15 +1469,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayhealthGETApiPermissiongatewaylambdaauthstackrestapigatewayAEDD1643GEThealth051F210D", + "logicalId": "itemsApiitemsidPATCHApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsidEE9531C0", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 510, + "startLine": 1245, "startColumn": 5, - "endLine": 510, + "endLine": 1245, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -1272,21 +1491,21 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayhealthGETApiPermissiongatewaylambdaauthstackrestapigatewayAEDD1643GEThealth051F210D", + "logicalId": "itemsApiitemsidPATCHApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsidEE9531C0", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 511, + "startLine": 1246, "startColumn": 5, - "endLine": 511, + "endLine": 1246, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:restapigatewayE22E31C5}/{ref:restapigatewayDeploymentStagedevB80C9CD7}/GET/health)" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/{ref:itemsApiDeploymentStageprodE77B897D}/PATCH/items/*)" } }, { @@ -1295,15 +1514,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayhealthGETApiPermissionTestgatewaylambdaauthstackrestapigatewayAEDD1643GEThealthAF95E556", + "logicalId": "itemsApiitemsidPATCHApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsid513A5711", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 539, + "startLine": 1282, "startColumn": 5, - "endLine": 539, + "endLine": 1282, "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -1317,21 +1536,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayhealthGETApiPermissionTestgatewaylambdaauthstackrestapigatewayAEDD1643GEThealthAF95E556", + "logicalId": "itemsApiitemsidPATCHApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsid513A5711", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 540, + "startLine": 1283, "startColumn": 5, - "endLine": 540, + "endLine": 1283, "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt operationallambdaFE43E13E.Arn" + "resolutionSource": "GetAtt updateItemFunction59415205.Arn" } }, { @@ -1340,15 +1559,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayhealthGETApiPermissionTestgatewaylambdaauthstackrestapigatewayAEDD1643GEThealthAF95E556", + "logicalId": "itemsApiitemsidPATCHApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsid513A5711", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 546, + "startLine": 1289, "startColumn": 5, - "endLine": 546, + "endLine": 1289, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -1362,21 +1581,21 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayhealthGETApiPermissionTestgatewaylambdaauthstackrestapigatewayAEDD1643GEThealthAF95E556", + "logicalId": "itemsApiitemsidPATCHApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsid513A5711", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 547, + "startLine": 1290, "startColumn": 5, - "endLine": 547, + "endLine": 1290, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:restapigatewayE22E31C5}/test-invoke-stage/GET/health)" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/test-invoke-stage/PATCH/items/*)" } }, { @@ -1385,15 +1604,15 @@ "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayhealthGET9A80151C", + "logicalId": "itemsApiitemsidPATCH0548CB6A", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 575, + "startLine": 1323, "startColumn": 5, - "endLine": 575, + "endLine": 1323, "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -1408,22 +1627,22 @@ "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayhealthGET9A80151C", + "logicalId": "itemsApiitemsidPATCH0548CB6A", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 595, + "startLine": 1351, "startColumn": 5, - "endLine": 595, + "endLine": 1351, "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'restapigatewayhealth0EB12846'" + "resolutionSource": "Ref to 'itemsApiitemsidA29927C2'" } }, { @@ -1432,590 +1651,797 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayhealthGET9A80151C", + "logicalId": "itemsApiitemsidPATCH0548CB6A", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 598, + "startLine": 1354, "startColumn": 5, - "endLine": 598, + "endLine": 1354, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'restapigatewayE22E31C5'" + "resolutionSource": "Ref to 'itemsApi28111E1C'" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'operationallambdaServiceRole14B56EA5' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "operationallambdaServiceRole14B56EA5", + "logicalId": "itemsApiitemsidDELETEApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid056EB521", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1365, + "startColumn": 5, + "endLine": 1365, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'operationallambdaFE43E13E' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "operationallambdaFE43E13E", + "logicalId": "itemsApiitemsidDELETEApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid056EB521", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 39, - "startColumn": 4, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1366, + "startColumn": 5, + "endLine": 1366, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt deleteItemFunction2918B1B0.Arn" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + "logicalId": "itemsApiitemsidDELETEApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid056EB521", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 101, - "startColumn": 4, - "endLine": 101, + "startLine": 1372, + "startColumn": 5, + "endLine": 1372, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "logicalId": "itemsApiitemsidDELETEApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid056EB521", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 178, - "startColumn": 4, - "endLine": 178, + "startLine": 1373, + "startColumn": 5, + "endLine": 1373, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/{ref:itemsApiDeploymentStageprodE77B897D}/DELETE/items/*)" + } + }, + { + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'authenticationlambdaServiceRole9798A92B' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "authenticationlambdaServiceRole9798A92B", + "logicalId": "itemsApiitemsidDELETEApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid4C18D4E2", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 208, - "startColumn": 4, - "endLine": 208, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1409, + "startColumn": 5, + "endLine": 1409, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'authenticationlambdaDD3A2252' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "authenticationlambdaDD3A2252", + "logicalId": "itemsApiitemsidDELETEApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid4C18D4E2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 242, - "startColumn": 4, - "endLine": 242, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1410, + "startColumn": 5, + "endLine": 1410, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt deleteItemFunction2918B1B0.Arn" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'restapigatewayE22E31C5' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayE22E31C5", + "logicalId": "itemsApiitemsidDELETEApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid4C18D4E2", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 420, - "startColumn": 4, - "endLine": 420, + "startLine": 1416, + "startColumn": 5, + "endLine": 1416, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'restapigatewayDeploymentStagedevB80C9CD7' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayDeploymentStagedevB80C9CD7", + "logicalId": "itemsApiitemsidDELETEApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid4C18D4E2", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 447, - "startColumn": 4, - "endLine": 447, + "startLine": 1417, + "startColumn": 5, + "endLine": 1417, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/api-gateway-parallel-step-functions--apigateway-parallel-stepfunctions-stack-2.template.json": { - "filePath": "cdk/api-gateway-parallel-step-functions--apigateway-parallel-stepfunctions-stack-2.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 27, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 16, - "informational": 33, - "debug": 0 + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/test-invoke-stage/DELETE/items/*)" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "lambdafunction1A09FC241", + "logicalId": "itemsApiitemsidDELETE21550005", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 142, + "propertyPath": "Properties.HttpMethod", + "category": "Best Practice", + "startLine": 1450, "startColumn": 5, - "endLine": 142, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 1450, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "lambdafunction2F899168D", + "logicalId": "itemsApiitemsidDELETE21550005", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 407, + "propertyPath": "Properties.ResourceId", + "category": "Best Practice", + "startLine": 1478, "startColumn": 5, - "endLine": 407, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 1478, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'itemsApiitemsidA29927C2'" } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.VpcId'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "lambdafunction1SecurityGroupF7DF9E6F", + "logicalId": "itemsApiitemsidDELETE21550005", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 102, - "startColumn": 4, - "endLine": 102, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1481, + "startColumn": 5, + "endLine": 1481, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'itemsApi28111E1C'" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'lambdafunction1ServiceRoleA9EAFFE5' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "lambdafunction1A09FC241", + "logicalId": "itemsApiitemsidOPTIONS62BD91D0", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 169, - "startColumn": 4, - "endLine": 169, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1493, + "startColumn": 5, + "endLine": 1493, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.Environment.Variables.VPC_CIDR'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "lambdafunction1A09FC241", + "logicalId": "itemsApiitemsidOPTIONS62BD91D0", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 169, - "startColumn": 4, - "endLine": 169, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1523, + "startColumn": 5, + "endLine": 1523, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'itemsApiitemsidA29927C2'" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.Environment.Variables.VPC_ID'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "lambdafunction1A09FC241", + "logicalId": "itemsApiitemsidOPTIONS62BD91D0", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 169, - "startColumn": 4, - "endLine": 169, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1526, + "startColumn": 5, + "endLine": 1526, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'itemsApi28111E1C'" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.VpcConfig.SubnetIds.0'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'items07D08F4B' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "lambdafunction1A09FC241", + "logicalId": "items07D08F4B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 169, + "startLine": 5, "startColumn": 4, - "endLine": 169, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.VpcConfig.SubnetIds.1'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'getOneItemFunctionServiceRoleCFD54796' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "lambdafunction1A09FC241", + "logicalId": "getOneItemFunctionServiceRoleCFD54796", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 169, + "startLine": 32, "startColumn": 4, - "endLine": 169, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 32, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'getOneItemFunctionE3257B22' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "logicalId": "getOneItemFunctionE3257B22", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 289, + "startLine": 123, "startColumn": 4, - "endLine": 289, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 123, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.VpcId'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'getAllItemsFunctionServiceRoleCC084440' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "lambdafunction2SecurityGroup7268045A", + "logicalId": "getAllItemsFunctionServiceRoleCC084440", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 367, + "startLine": 160, "startColumn": 4, - "endLine": 367, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 160, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'lambdafunction2ServiceRole380A1BE9' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'getAllItemsFunction0B7A913E' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "lambdafunction2F899168D", + "logicalId": "getAllItemsFunction0B7A913E", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 434, + "startLine": 251, "startColumn": 4, - "endLine": 434, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 251, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.Environment.Variables.VPC_CIDR'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'createItemFunctionServiceRole1BBF2178' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "lambdafunction2F899168D", + "logicalId": "createItemFunctionServiceRole1BBF2178", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 434, + "startLine": 288, "startColumn": 4, - "endLine": 434, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 288, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.Environment.Variables.VPC_ID'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'createItemFunction8D47E48A' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "lambdafunction2F899168D", + "logicalId": "createItemFunction8D47E48A", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 434, + "startLine": 379, "startColumn": 4, - "endLine": 434, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 379, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.VpcConfig.SubnetIds.0'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'updateItemFunctionServiceRole40035396' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "lambdafunction2F899168D", + "logicalId": "updateItemFunctionServiceRole40035396", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 434, + "startLine": 416, "startColumn": 4, - "endLine": 434, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 416, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.VpcConfig.SubnetIds.1'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'updateItemFunction59415205' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "lambdafunction2F899168D", + "logicalId": "updateItemFunction59415205", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 434, + "startLine": 507, "startColumn": 4, - "endLine": 434, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 507, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'mystatemachineRole70AA91FD' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'deleteItemFunctionServiceRole5C201FCC' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "mystatemachine15ECA539", + "logicalId": "deleteItemFunctionServiceRole5C201FCC", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 646, + "startLine": 544, "startColumn": 4, - "endLine": 646, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 544, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Resource 'deleteItemFunction2918B1B0' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "lambdafunction1SecurityGroupF7DF9E6F", + "logicalId": "deleteItemFunction2918B1B0", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 87, - "startColumn": 5, - "endLine": 87, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { + "startLine": 635, + "startColumn": 4, + "endLine": 635, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'itemsApi28111E1C' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "itemsApi28111E1C", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 672, + "startColumn": 4, + "endLine": 672, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'itemsApiCloudWatchRoleB5C7B431' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "itemsApiCloudWatchRoleB5C7B431", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 681, + "startColumn": 4, + "endLine": 681, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'itemsApiDeploymentStageprodE77B897D' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "itemsApiDeploymentStageprodE77B897D", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Stage" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 760, + "startColumn": 4, + "endLine": 760, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/api-gateway-async-lambda-invocation--ApiGatewayAsyncLambdaStack.template.json": { + "filePath": "cdk/api-gateway-async-lambda-invocation--ApiGatewayAsyncLambdaStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 19, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 34, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "apigwasynclambdafnAD6250E4", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 138, + "startColumn": 5, + "endLine": 138, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs20.x", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'apigwasynclambdafnServiceRole607675A2' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "apigwasynclambdafnAD6250E4", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 140, + "startColumn": 4, + "endLine": 140, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "lambdafunction1SecurityGroupF7DF9E6F", + "logicalId": "apigwasynclambdatable1075CD30", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 95, + "startLine": 12, "startColumn": 5, - "endLine": 95, - "endColumn": 11, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "apigwasynclambdatable1075CD30", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.TableName", + "category": "Best Practice", + "startLine": 22, + "startColumn": 5, + "endLine": 22, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "apigwasynclambdaapigwDeploymentDA408F9D41ab700bc8db89ed7cb2c6250ab97c0a", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Deployment" + }, + "propertyPath": "Properties.RestApiId", + "category": "Best Practice", + "startLine": 230, + "startColumn": 5, + "endLine": 230, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF.Outputs.apigatewayparallelstepfunctionsstack2nestedstacklambdanestedstackvpc238BBD13Ref" + "resolutionSource": "Ref to 'apigwasynclambdaapigw3449931B'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "lambdafunction2SecurityGroup7268045A", + "logicalId": "apigwasynclambdaapigwDeploymentStageprodAE3424CD", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 352, + "startLine": 269, "startColumn": 5, - "endLine": 352, - "endColumn": 22, + "endLine": 269, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'apigwasynclambdaapigw3449931B'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "apigwasynclambdaapigwDeploymentStageprodAE3424CD", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Stage" + }, + "propertyPath": "Properties.StageName", + "category": "Best Practice", + "startLine": 272, + "startColumn": 5, + "endLine": 272, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2025,43 +2451,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "lambdafunction2SecurityGroup7268045A", + "logicalId": "apigwasynclambdaapigwjob39EDA914", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 360, + "startLine": 284, "startColumn": 5, - "endLine": 360, - "endColumn": 11, + "endLine": 284, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF.Outputs.apigatewayparallelstepfunctionsstack2nestedstacklambdanestedstackvpc238BBD13Ref" + "resolutionSource": "GetAtt apigwasynclambdaapigw3449931B.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StateMachineType' is create-only; updating it will cause resource replacement", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mystatemachine15ECA539", + "logicalId": "apigwasynclambdaapigwjob39EDA914", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.StateMachineType", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 644, + "startLine": 290, "startColumn": 5, - "endLine": 644, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-stepfunctions.git", + "endLine": 290, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2074,86 +2501,219 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myapiDeployment92F2CB49668bc8f388b84571173cc408b70fc6fa", + "logicalId": "apigwasynclambdaapigwjob39EDA914", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::ApiGateway::Resource" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 725, + "startLine": 291, "startColumn": 5, - "endLine": 725, + "endLine": 291, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'myapi4C7BF186'" + "resolutionSource": "Ref to 'apigwasynclambdaapigw3449931B'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myapiDeploymentStagedevB1704B15", + "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob195929C9", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 745, + "startLine": 302, "startColumn": 5, - "endLine": 745, + "endLine": 302, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob195929C9", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 303, + "startColumn": 5, + "endLine": 303, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt apigwasynclambdafnAD6250E4.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob195929C9", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 309, + "startColumn": 5, + "endLine": 309, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob195929C9", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.SourceArn", + "category": "Best Practice", + "startLine": 310, + "startColumn": 5, + "endLine": 310, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'myapi4C7BF186'" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:apigwasynclambdaapigw3449931B}/{ref:apigwasynclambdaapigwDeploymentStageprodAE3424CD}/POST/job)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myapiDeploymentStagedevB1704B15", + "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionTestApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob01D110CD", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 748, + "startLine": 338, "startColumn": 5, - "endLine": 748, + "endLine": 338, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionTestApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob01D110CD", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 339, + "startColumn": 5, + "endLine": 339, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt apigwasynclambdafnAD6250E4.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionTestApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob01D110CD", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 345, + "startColumn": 5, + "endLine": 345, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionTestApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob01D110CD", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.SourceArn", + "category": "Best Practice", + "startLine": 346, + "startColumn": 5, + "endLine": 346, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:apigwasynclambdaapigw3449931B}/test-invoke-stage/POST/job)" + } + }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myapiANYA805D87B", + "logicalId": "apigwasynclambdaapigwjobPOST79D1CAC1", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 807, + "startLine": 371, "startColumn": 5, - "endLine": 807, + "endLine": 371, "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -2168,22 +2728,22 @@ "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myapiANYA805D87B", + "logicalId": "apigwasynclambdaapigwjobPOST79D1CAC1", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 891, + "startLine": 419, "startColumn": 5, - "endLine": 891, + "endLine": 419, "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt myapi4C7BF186.RootResourceId" + "resolutionSource": "Ref to 'apigwasynclambdaapigwjob39EDA914'" } }, { @@ -2192,22 +2752,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myapiANYA805D87B", + "logicalId": "apigwasynclambdaapigwjobPOST79D1CAC1", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 897, + "startLine": 422, "startColumn": 5, - "endLine": 897, + "endLine": 422, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'myapi4C7BF186'" + "resolutionSource": "Ref to 'apigwasynclambdaapigw3449931B'" } }, { @@ -2216,22 +2776,22 @@ "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myapimessagesE5D75039", + "logicalId": "apigwasynclambdaapigwjobjobId73AEE867", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Resource" }, "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 908, + "startLine": 433, "startColumn": 5, - "endLine": 908, + "endLine": 433, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt myapi4C7BF186.RootResourceId" + "resolutionSource": "Ref to 'apigwasynclambdaapigwjob39EDA914'" } }, { @@ -2240,15 +2800,15 @@ "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myapimessagesE5D75039", + "logicalId": "apigwasynclambdaapigwjobjobId73AEE867", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Resource" }, "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 914, + "startLine": 436, "startColumn": 5, - "endLine": 914, + "endLine": 436, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -2263,22 +2823,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myapimessagesE5D75039", + "logicalId": "apigwasynclambdaapigwjobjobId73AEE867", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Resource" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 915, + "startLine": 437, "startColumn": 5, - "endLine": 915, + "endLine": 437, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'myapi4C7BF186'" + "resolutionSource": "Ref to 'apigwasynclambdaapigw3449931B'" } }, { @@ -2287,15 +2847,15 @@ "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myapimessagesGETE09B1C35", + "logicalId": "apigwasynclambdaapigwjobjobIdGETED10CC0C", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 927, + "startLine": 449, "startColumn": 5, - "endLine": 927, + "endLine": 449, "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -2310,22 +2870,22 @@ "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myapimessagesGETE09B1C35", + "logicalId": "apigwasynclambdaapigwjobjobIdGETED10CC0C", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 931, + "startLine": 498, "startColumn": 5, - "endLine": 931, + "endLine": 498, "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'myapimessagesE5D75039'" + "resolutionSource": "Ref to 'apigwasynclambdaapigwjobjobId73AEE867'" } }, { @@ -2334,33 +2894,33 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myapimessagesGETE09B1C35", + "logicalId": "apigwasynclambdaapigwjobjobIdGETED10CC0C", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 934, + "startLine": 501, "startColumn": 5, - "endLine": 934, + "endLine": 501, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'myapi4C7BF186'" + "resolutionSource": "Ref to 'apigwasynclambdaapigw3449931B'" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Resource 'apigwasynclambdatable1075CD30' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF", + "logicalId": "apigwasynclambdatable1075CD30", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -2375,19 +2935,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'lambdafunction1ServiceRoleA9EAFFE5' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'apigwasynclambdafnloggroup3D262524' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "lambdafunction1ServiceRoleA9EAFFE5", + "logicalId": "apigwasynclambdafnloggroup3D262524", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Logs::LogGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 37, + "startLine": 32, "startColumn": 4, - "endLine": 37, + "endLine": 32, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -2395,19 +2955,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'lambdafunction1SecurityGroupF7DF9E6F' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'apigwasynclambdafnServiceRole607675A2' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "lambdafunction1SecurityGroupF7DF9E6F", + "logicalId": "apigwasynclambdafnServiceRole607675A2", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 86, + "startLine": 43, "startColumn": 4, - "endLine": 86, + "endLine": 43, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -2415,19 +2975,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'lambdafunction1A09FC241' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'apigwasynclambdafnAD6250E4' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "lambdafunction1A09FC241", + "logicalId": "apigwasynclambdafnAD6250E4", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 111, + "startLine": 112, "startColumn": 4, - "endLine": 111, + "endLine": 112, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -2435,19 +2995,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'apigwasynclambdaapigwloggroup1E36CCD4' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + "logicalId": "apigwasynclambdaapigwloggroup1E36CCD4", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Logs::LogGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 211, + "startLine": 153, "startColumn": 4, - "endLine": 211, + "endLine": 153, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -2455,19 +3015,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'apigwasynclambdaapigw3449931B' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "logicalId": "apigwasynclambdaapigw3449931B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::RestApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 272, + "startLine": 164, "startColumn": 4, - "endLine": 272, + "endLine": 164, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -2475,39 +3035,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'lambdafunction2ServiceRole380A1BE9' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'apigwasynclambdaapigwCloudWatchRoleC01BF930' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "lambdafunction2ServiceRole380A1BE9", + "logicalId": "apigwasynclambdaapigwCloudWatchRoleC01BF930", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 302, - "startColumn": 4, - "endLine": 302, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'lambdafunction2SecurityGroup7268045A' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "lambdafunction2SecurityGroup7268045A", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 351, + "startLine": 173, "startColumn": 4, - "endLine": 351, + "endLine": 173, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -2515,19 +3055,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'lambdafunction2F899168D' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'apigwasynclambdaapigwDeploymentStageprodAE3424CD' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "lambdafunction2F899168D", + "logicalId": "apigwasynclambdaapigwDeploymentStageprodAE3424CD", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 376, + "startLine": 247, "startColumn": 4, - "endLine": 376, + "endLine": 247, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -2535,368 +3075,374 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'stepfunctionsloggroup6EBF6C71' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Resource 'ApiGatewayDynamoRole447127F0' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "stepfunctionsloggroup6EBF6C71", + "logicalId": "ApiGatewayDynamoRole447127F0", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 476, + "startLine": 511, "startColumn": 4, - "endLine": 476, + "endLine": 511, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "cdk/api-gateway-lambda-token-authorizer--gateway-lambda-auth-stack.template.json": { + "filePath": "cdk/api-gateway-lambda-token-authorizer--gateway-lambda-auth-stack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 20, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 5, + "informational": 30, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'mystatemachineRole70AA91FD' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "mystatemachineRole70AA91FD", + "logicalId": "operationallambdaFE43E13E", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 487, - "startColumn": 4, - "endLine": 487, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 60, + "startColumn": 5, + "endLine": 60, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'mystatemachine15ECA539' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "mystatemachine15ECA539", + "logicalId": "authenticationlambdaDD3A2252", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 592, - "startColumn": 4, - "endLine": 592, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 263, + "startColumn": 5, + "endLine": 263, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myapi4C7BF186' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'operationallambdaServiceRole14B56EA5' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "myapi4C7BF186", + "logicalId": "operationallambdaFE43E13E", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 658, + "startLine": 63, "startColumn": 4, - "endLine": 658, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endLine": 63, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myapiCloudWatchRole095452E5' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "myapiCloudWatchRole095452E5", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 668, + "startLine": 195, "startColumn": 4, - "endLine": 668, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endLine": 195, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myapiDeploymentStagedevB1704B15' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'authenticationlambdaServiceRole9798A92B' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "myapiDeploymentStagedevB1704B15", + "logicalId": "authenticationlambdaDD3A2252", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 741, + "startLine": 266, "startColumn": 4, - "endLine": 741, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endLine": 266, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myapiANYStartSyncExecutionRole7935C5BB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myapiANYStartSyncExecutionRole7935C5BB", + "logicalId": "authenticationlambdagatewaylambdaauthstackoperationalAuthorizerD36E749EPermissionsCD2687F2", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 759, - "startColumn": 4, - "endLine": 759, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/api-gateway-parallel-step-functions--apigatewayparallelstepfunctionsstack2nestedstacklambda9F5CAB08.nested.template.json": { - "filePath": "cdk/api-gateway-parallel-step-functions--apigatewayparallelstepfunctionsstack2nestedstacklambda9F5CAB08.nested.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 18, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 31, - "debug": 0 + "startLine": 305, + "startColumn": 5, + "endLine": 305, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpc4488A7AF", + "logicalId": "authenticationlambdagatewaylambdaauthstackoperationalAuthorizerD36E749EPermissionsCD2687F2", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 6, + "startLine": 306, "startColumn": 5, - "endLine": 6, - "endColumn": 15, + "endLine": 306, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt authenticationlambdaDD3A2252.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpc4488A7AF", + "logicalId": "authenticationlambdagatewaylambdaauthstackoperationalAuthorizerD36E749EPermissionsCD2687F2", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 9, + "startLine": 312, "startColumn": 5, - "endLine": 9, - "endColumn": 21, + "endLine": 312, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet1Subnet89E5486A", + "logicalId": "authenticationlambdagatewaylambdaauthstackoperationalAuthorizerD36E749EPermissionsCD2687F2", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 24, + "startLine": 313, "startColumn": 5, - "endLine": 24, - "endColumn": 22, + "endLine": 313, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:restapigatewayE22E31C5}/authorizers/{ref:operationalAuthorizer363A7D2B})" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet1Subnet89E5486A", + "logicalId": "operationalAuthorizer363A7D2B", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Authorizer" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 32, + "startLine": 392, "startColumn": 5, - "endLine": 32, + "endLine": 392, "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'restapigatewayE22E31C5'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet1Subnet89E5486A", + "logicalId": "restapigatewayDeploymentB29CB257026bd226d852d73169d333911fdd4fa6", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 48, + "startLine": 431, "startColumn": 5, - "endLine": 48, - "endColumn": 11, + "endLine": 431, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" + "resolutionSource": "Ref to 'restapigatewayE22E31C5'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet1RouteTable518786D0", + "logicalId": "restapigatewayDeploymentStagedevB80C9CD7", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 65, + "startLine": 473, "startColumn": 5, - "endLine": 65, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 473, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" + "resolutionSource": "Ref to 'restapigatewayE22E31C5'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet1RouteTableAssociationE08618B5", + "logicalId": "restapigatewayDeploymentStagedevB80C9CD7", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 76, + "startLine": 476, "startColumn": 5, - "endLine": 76, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 476, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpcpublicsubnet1Subnet1RouteTable518786D0'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet1RouteTableAssociationE08618B5", + "logicalId": "restapigatewayhealth0EB12846", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 79, + "startLine": 485, "startColumn": 5, - "endLine": 79, + "endLine": 485, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpcpublicsubnet1Subnet1Subnet89E5486A'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt restapigatewayE22E31C5.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet1DefaultRouteA3ABB16E", + "logicalId": "restapigatewayhealth0EB12846", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 90, + "startLine": 491, "startColumn": 5, - "endLine": 90, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 491, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2906,43 +3452,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet1DefaultRouteA3ABB16E", + "logicalId": "restapigatewayhealth0EB12846", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 94, + "startLine": 492, "startColumn": 5, - "endLine": 94, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 492, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpcpublicsubnet1Subnet1RouteTable518786D0'" + "resolutionSource": "Ref to 'restapigatewayE22E31C5'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet2Subnet778CFACA", + "logicalId": "restapigatewayhealthGETApiPermissiongatewaylambdaauthstackrestapigatewayAEDD1643GEThealth051F210D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 108, + "startLine": 503, "startColumn": 5, - "endLine": 108, - "endColumn": 22, + "endLine": 503, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2952,143 +3498,132 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet2Subnet778CFACA", + "logicalId": "restapigatewayhealthGETApiPermissiongatewaylambdaauthstackrestapigatewayAEDD1643GEThealth051F210D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 116, + "startLine": 504, "startColumn": 5, - "endLine": 116, - "endColumn": 15, + "endLine": 504, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt operationallambdaFE43E13E.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet2Subnet778CFACA", + "logicalId": "restapigatewayhealthGETApiPermissiongatewaylambdaauthstackrestapigatewayAEDD1643GEThealth051F210D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 132, + "startLine": 510, "startColumn": 5, - "endLine": 132, - "endColumn": 11, + "endLine": 510, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet2RouteTableF3884194", + "logicalId": "restapigatewayhealthGETApiPermissiongatewaylambdaauthstackrestapigatewayAEDD1643GEThealth051F210D", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 149, + "startLine": 511, "startColumn": 5, - "endLine": 149, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 511, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:restapigatewayE22E31C5}/{ref:restapigatewayDeploymentStagedevB80C9CD7}/GET/health)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet2RouteTableAssociation432D9A37", + "logicalId": "restapigatewayhealthGETApiPermissionTestgatewaylambdaauthstackrestapigatewayAEDD1643GEThealthAF95E556", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 160, + "startLine": 539, "startColumn": 5, - "endLine": 160, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 539, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpcpublicsubnet1Subnet2RouteTableF3884194'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet2RouteTableAssociation432D9A37", + "logicalId": "restapigatewayhealthGETApiPermissionTestgatewaylambdaauthstackrestapigatewayAEDD1643GEThealthAF95E556", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 163, + "startLine": 540, "startColumn": 5, - "endLine": 163, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 540, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpcpublicsubnet1Subnet2Subnet778CFACA'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt operationallambdaFE43E13E.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet2DefaultRouteC44F12D1", + "logicalId": "restapigatewayhealthGETApiPermissionTestgatewaylambdaauthstackrestapigatewayAEDD1643GEThealthAF95E556", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 174, + "startLine": 546, "startColumn": 5, - "endLine": 174, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 546, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3098,43 +3633,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet2DefaultRouteC44F12D1", + "logicalId": "restapigatewayhealthGETApiPermissionTestgatewaylambdaauthstackrestapigatewayAEDD1643GEThealthAF95E556", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 178, + "startLine": 547, "startColumn": 5, - "endLine": 178, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 547, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpcpublicsubnet1Subnet2RouteTableF3884194'" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:restapigatewayE22E31C5}/test-invoke-stage/GET/health)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet1Subnet46C8720E", + "logicalId": "restapigatewayhealthGET9A80151C", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 192, + "startLine": 575, "startColumn": 5, - "endLine": 192, - "endColumn": 22, + "endLine": 575, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3144,333 +3679,292 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet1Subnet46C8720E", + "logicalId": "restapigatewayhealthGET9A80151C", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 200, + "startLine": 595, "startColumn": 5, - "endLine": 200, - "endColumn": 15, + "endLine": 595, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'restapigatewayhealth0EB12846'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet1Subnet46C8720E", + "logicalId": "restapigatewayhealthGET9A80151C", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 216, + "startLine": 598, "startColumn": 5, - "endLine": 216, - "endColumn": 11, + "endLine": 598, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" + "resolutionSource": "Ref to 'restapigatewayE22E31C5'" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'operationallambdaServiceRole14B56EA5' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet1RouteTable5302591F", + "logicalId": "operationallambdaServiceRole14B56EA5", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 233, - "startColumn": 5, - "endLine": 233, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'operationallambdaFE43E13E' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet1RouteTableAssociation6C6975EB", + "logicalId": "operationallambdaFE43E13E", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 244, - "startColumn": 5, - "endLine": 244, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpcprivateisolatedsubnet1Subnet1RouteTable5302591F'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 39, + "startColumn": 4, + "endLine": 39, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet1RouteTableAssociation6C6975EB", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 247, - "startColumn": 5, - "endLine": 247, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpcprivateisolatedsubnet1Subnet1Subnet46C8720E'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 101, + "startColumn": 4, + "endLine": 101, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet2Subnet89BFE59F", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 258, - "startColumn": 5, - "endLine": 258, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 178, + "startColumn": 4, + "endLine": 178, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'authenticationlambdaServiceRole9798A92B' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet2Subnet89BFE59F", + "logicalId": "authenticationlambdaServiceRole9798A92B", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 266, - "startColumn": 5, - "endLine": 266, + "startLine": 208, + "startColumn": 4, + "endLine": 208, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'authenticationlambdaDD3A2252' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet2Subnet89BFE59F", + "logicalId": "authenticationlambdaDD3A2252", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 282, - "startColumn": 5, - "endLine": 282, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" - } + "startLine": 242, + "startColumn": 4, + "endLine": 242, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'restapigatewayE22E31C5' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet2RouteTableEA03EC80", + "logicalId": "restapigatewayE22E31C5", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::ApiGateway::RestApi" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 299, - "startColumn": 5, - "endLine": 299, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" - } + "startLine": 420, + "startColumn": 4, + "endLine": 420, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'restapigatewayDeploymentStagedevB80C9CD7' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet2RouteTableAssociation61E13F31", + "logicalId": "restapigatewayDeploymentStagedevB80C9CD7", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 310, - "startColumn": 5, - "endLine": 310, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpcprivateisolatedsubnet1Subnet2RouteTableEA03EC80'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 447, + "startColumn": 4, + "endLine": 447, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/api-gateway-parallel-step-functions--apigateway-parallel-stepfunctions-stack-2.template.json": { + "filePath": "cdk/api-gateway-parallel-step-functions--apigateway-parallel-stepfunctions-stack-2.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 27, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 16, + "informational": 33, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet2RouteTableAssociation61E13F31", + "logicalId": "lambdafunction1A09FC241", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 313, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 142, "startColumn": 5, - "endLine": 313, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 142, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpcprivateisolatedsubnet1Subnet2Subnet89BFE59F'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "nestedstackvpcVPCGWA39BF2BE", + "logicalId": "lambdafunction2F899168D", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 341, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 407, "startColumn": 5, - "endLine": 341, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 407, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } - } - ] - }, - "cdk/api-websocket-lambda-dynamodb--chat-app.template.json": { - "filePath": "cdk/api-websocket-lambda-dynamodb--chat-app.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 22, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 3, - "informational": 22, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "W3005", "severity": "WARN", - "message": "'connectlambdaServiceRole04DCF570' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.VpcId'", "source": "CFN_LINT", "entity": { - "logicalId": "connectlambdaFFAE59F3", + "logicalId": "lambdafunction1SecurityGroupF7DF9E6F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 157, + "startLine": 102, "startColumn": 4, - "endLine": 157, + "endLine": 102, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -3478,19 +3972,19 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'disconnectlambdaServiceRole2779F08C' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'lambdafunction1ServiceRoleA9EAFFE5' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "disconnectlambdaAC22A441", + "logicalId": "lambdafunction1A09FC241", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 284, + "startLine": 169, "startColumn": 4, - "endLine": 284, + "endLine": 169, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -3498,39 +3992,259 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'messagelambdaServiceRole544EC18A' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.Environment.Variables.VPC_CIDR'", "source": "CFN_LINT", "entity": { - "logicalId": "messagelambda16C1C2A3", + "logicalId": "lambdafunction1A09FC241", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 427, + "startLine": 169, "startColumn": 4, - "endLine": 427, + "endLine": 169, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ProtocolType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.Environment.Variables.VPC_ID'", + "source": "CFN_LINT", "entity": { - "logicalId": "chatappapi", + "logicalId": "lambdafunction1A09FC241", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Api" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ProtocolType", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 18, + "startLine": 169, + "startColumn": 4, + "endLine": 169, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.VpcConfig.SubnetIds.0'", + "source": "CFN_LINT", + "entity": { + "logicalId": "lambdafunction1A09FC241", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 169, + "startColumn": 4, + "endLine": 169, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.VpcConfig.SubnetIds.1'", + "source": "CFN_LINT", + "entity": { + "logicalId": "lambdafunction1A09FC241", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 169, + "startColumn": 4, + "endLine": 169, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 289, + "startColumn": 4, + "endLine": 289, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.VpcId'", + "source": "CFN_LINT", + "entity": { + "logicalId": "lambdafunction2SecurityGroup7268045A", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 367, + "startColumn": 4, + "endLine": 367, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'lambdafunction2ServiceRole380A1BE9' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "lambdafunction2F899168D", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 434, + "startColumn": 4, + "endLine": 434, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.Environment.Variables.VPC_CIDR'", + "source": "CFN_LINT", + "entity": { + "logicalId": "lambdafunction2F899168D", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 434, + "startColumn": 4, + "endLine": 434, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.Environment.Variables.VPC_ID'", + "source": "CFN_LINT", + "entity": { + "logicalId": "lambdafunction2F899168D", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 434, + "startColumn": 4, + "endLine": 434, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.VpcConfig.SubnetIds.0'", + "source": "CFN_LINT", + "entity": { + "logicalId": "lambdafunction2F899168D", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 434, + "startColumn": 4, + "endLine": 434, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.VpcConfig.SubnetIds.1'", + "source": "CFN_LINT", + "entity": { + "logicalId": "lambdafunction2F899168D", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 434, + "startColumn": 4, + "endLine": 434, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'mystatemachineRole70AA91FD' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", + "source": "CFN_LINT", + "entity": { + "logicalId": "mystatemachine15ECA539", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 646, + "startColumn": 4, + "endLine": 646, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "lambdafunction1SecurityGroupF7DF9E6F", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 87, + "startColumn": 5, + "endLine": 87, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3540,41 +4254,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "chatappapitable5244EF8B", + "logicalId": "lambdafunction1SecurityGroupF7DF9E6F", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 23, + "startLine": 95, "startColumn": 5, - "endLine": 23, - "endColumn": 15, + "endLine": 95, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF.Outputs.apigatewayparallelstepfunctionsstack2nestedstacklambdanestedstackvpc238BBD13Ref" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "chatappapitable5244EF8B", + "logicalId": "lambdafunction2SecurityGroup7268045A", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.TableName", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 33, + "startLine": 352, "startColumn": 5, - "endLine": 33, - "endColumn": 15, + "endLine": 352, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3584,294 +4299,349 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "connectlambdaintegration", + "logicalId": "lambdafunction2SecurityGroup7268045A", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Integration" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 504, + "startLine": 360, "startColumn": 5, - "endLine": 504, + "endLine": 360, "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'chatappapi'" + "resolutionSource": "GetAtt nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF.Outputs.apigatewayparallelstepfunctionsstack2nestedstacklambdanestedstackvpc238BBD13Ref" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'StateMachineType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "disconnectlambdaintegration", + "logicalId": "mystatemachine15ECA539", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Integration" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.StateMachineType", "category": "Best Practice", - "startLine": 537, + "startLine": 644, "startColumn": 5, - "endLine": 537, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 644, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-stepfunctions.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'chatappapi'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "messagelambdaintegration", + "logicalId": "myapiDeployment92F2CB49668bc8f388b84571173cc408b70fc6fa", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Integration" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 570, + "startLine": 725, "startColumn": 5, - "endLine": 570, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 725, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'chatappapi'" + "resolutionSource": "Ref to 'myapi4C7BF186'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "connectroute", + "logicalId": "myapiDeploymentStagedevB1704B15", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Route" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 603, + "startLine": 745, "startColumn": 5, - "endLine": 603, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", + "endLine": 745, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'chatappapi'" + "resolutionSource": "Ref to 'myapi4C7BF186'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "disconnectroute", + "logicalId": "myapiDeploymentStagedevB1704B15", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Route" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 627, + "startLine": 748, "startColumn": 5, - "endLine": 627, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", + "endLine": 748, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'chatappapi'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "messageroute", + "logicalId": "myapiANYA805D87B", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Route" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 651, + "startLine": 807, "startColumn": 5, - "endLine": 651, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", + "endLine": 807, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'chatappapi'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "chatappapideployment", + "logicalId": "myapiANYA805D87B", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Deployment" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 675, + "startLine": 891, "startColumn": 5, - "endLine": 675, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", + "endLine": 891, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'chatappapi'" + "resolutionSource": "GetAtt myapi4C7BF186.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "chatappapistage", + "logicalId": "myapiANYA805D87B", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Stage" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 691, + "startLine": 897, "startColumn": 5, - "endLine": 691, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", + "endLine": 897, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'chatappapi'" + "resolutionSource": "Ref to 'myapi4C7BF186'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "chatappapistage", + "logicalId": "myapimessagesE5D75039", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Stage" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 698, + "startLine": 908, "startColumn": 5, - "endLine": 698, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", + "endLine": 908, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt myapi4C7BF186.RootResourceId" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'chatappapi' of type 'AWS::ApiGatewayV2::Api' supports Tags but none are configured", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "chatappapi", + "logicalId": "myapimessagesE5D75039", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Api" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 914, + "startColumn": 5, + "endLine": 914, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'chatappapitable5244EF8B' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "chatappapitable5244EF8B", + "logicalId": "myapimessagesE5D75039", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 16, - "startColumn": 4, - "endLine": 16, + "startLine": 915, + "startColumn": 5, + "endLine": 915, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'myapi4C7BF186'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'connectlambdaServiceRole04DCF570' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "connectlambdaServiceRole04DCF570", + "logicalId": "myapimessagesGETE09B1C35", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 43, - "startColumn": 4, - "endLine": 43, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 927, + "startColumn": 5, + "endLine": 927, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'connectlambdaFFAE59F3' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "connectlambdaFFAE59F3", + "logicalId": "myapimessagesGETE09B1C35", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 134, - "startColumn": 4, - "endLine": 134, + "startLine": 931, + "startColumn": 5, + "endLine": 931, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'myapimessagesE5D75039'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myapimessagesGETE09B1C35", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" + }, + "propertyPath": "Properties.RestApiId", + "category": "Best Practice", + "startLine": 934, + "startColumn": 5, + "endLine": 934, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'myapi4C7BF186'" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 4, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -3879,19 +4649,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'disconnectlambdaServiceRole2779F08C' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'lambdafunction1ServiceRoleA9EAFFE5' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "disconnectlambdaServiceRole2779F08C", + "logicalId": "lambdafunction1ServiceRoleA9EAFFE5", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 170, + "startLine": 37, "startColumn": 4, - "endLine": 170, + "endLine": 37, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -3899,19 +4669,39 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'disconnectlambdaAC22A441' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'lambdafunction1SecurityGroupF7DF9E6F' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "disconnectlambdaAC22A441", + "logicalId": "lambdafunction1SecurityGroupF7DF9E6F", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 86, + "startColumn": 4, + "endLine": 86, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'lambdafunction1A09FC241' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "lambdafunction1A09FC241", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 261, + "startLine": 111, "startColumn": 4, - "endLine": 261, + "endLine": 111, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -3919,19 +4709,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'messagelambdaServiceRole544EC18A' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "messagelambdaServiceRole544EC18A", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 297, + "startLine": 211, "startColumn": 4, - "endLine": 297, + "endLine": 211, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -3939,19 +4729,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'messagelambda16C1C2A3' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "messagelambda16C1C2A3", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 404, + "startLine": 272, "startColumn": 4, - "endLine": 404, + "endLine": 272, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -3959,19 +4749,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'chatappapiiamrole2977C2A3' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'lambdafunction2ServiceRole380A1BE9' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "chatappapiiamrole2977C2A3", + "logicalId": "lambdafunction2ServiceRole380A1BE9", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 440, + "startLine": 302, "startColumn": 4, - "endLine": 440, + "endLine": 302, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -3979,148 +4769,209 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'chatappapistage' of type 'AWS::ApiGatewayV2::Stage' supports Tags but none are configured", + "message": "Resource 'lambdafunction2SecurityGroup7268045A' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "chatappapistage", + "logicalId": "lambdafunction2SecurityGroup7268045A", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Stage" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 690, + "startLine": 351, "startColumn": 4, - "endLine": 690, + "endLine": 351, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "cdk/application-load-balancer--LoadBalancerStack.template.json": { - "filePath": "cdk/application-load-balancer--LoadBalancerStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 36, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 5, - "informational": 72, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LBListener49E825B4' dependency already enforced by a 'Ref' at 'Properties.TargetTrackingConfiguration.PredefinedMetricSpecification.ResourceLabel.Fn::Join.1.0'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'lambdafunction2F899168D' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ASGScalingPolicyAModestLoadC5714E5A", + "logicalId": "lambdafunction2F899168D", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::ScalingPolicy" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 687, + "startLine": 376, "startColumn": 4, - "endLine": 687, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 376, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LBListener49E825B4' dependency already enforced by a 'Ref' at 'Properties.TargetTrackingConfiguration.PredefinedMetricSpecification.ResourceLabel.Fn::Join.1.2'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'stepfunctionsloggroup6EBF6C71' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ASGScalingPolicyAModestLoadC5714E5A", + "logicalId": "stepfunctionsloggroup6EBF6C71", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::ScalingPolicy" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 687, + "startLine": 476, "startColumn": 4, - "endLine": 687, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 476, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LBListener49E825B4' dependency already enforced by a 'Ref' at 'Properties.TargetTrackingConfiguration.PredefinedMetricSpecification.ResourceLabel.Fn::Join.1.4'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'mystatemachineRole70AA91FD' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ASGScalingPolicyAModestLoadC5714E5A", + "logicalId": "mystatemachineRole70AA91FD", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::ScalingPolicy" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 687, + "startLine": 487, "startColumn": 4, - "endLine": 687, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 487, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LBListenerTargetGroupF04FCF6D' dependency already enforced by a 'GetAtt' at 'Properties.TargetTrackingConfiguration.PredefinedMetricSpecification.ResourceLabel.Fn::Join.1.6'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'mystatemachine15ECA539' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ASGScalingPolicyAModestLoadC5714E5A", + "logicalId": "mystatemachine15ECA539", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::ScalingPolicy" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 687, + "startLine": 592, "startColumn": 4, - "endLine": 687, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 592, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3697", - "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myapi4C7BF186' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "myapi4C7BF186", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::ApiGateway::RestApi" }, - "category": "Deprecation", - "startLine": 551, - "startColumn": 3, - "endLine": 551, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 658, + "startColumn": 4, + "endLine": 658, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myapiCloudWatchRole095452E5' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "myapiCloudWatchRole095452E5", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 668, + "startColumn": 4, + "endLine": 668, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myapiDeploymentStagedevB1704B15' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "myapiDeploymentStagedevB1704B15", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Stage" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 741, + "startColumn": 4, + "endLine": 741, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myapiANYStartSyncExecutionRole7935C5BB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "myapiANYStartSyncExecutionRole7935C5BB", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 759, + "startColumn": 4, + "endLine": 759, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/api-gateway-parallel-step-functions--apigatewayparallelstepfunctionsstack2nestedstacklambda9F5CAB08.nested.template.json": { + "filePath": "cdk/api-gateway-parallel-step-functions--apigatewayparallelstepfunctionsstack2nestedstacklambda9F5CAB08.nested.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 18, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 31, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCB9E5F0B4", + "logicalId": "nestedstackvpc4488A7AF", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, @@ -4142,7 +4993,7 @@ "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCB9E5F0B4", + "logicalId": "nestedstackvpc4488A7AF", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, @@ -4164,7 +5015,7 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1SubnetB4246D30", + "logicalId": "nestedstackvpcpublicsubnet1Subnet1Subnet89E5486A", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -4186,7 +5037,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1SubnetB4246D30", + "logicalId": "nestedstackvpcpublicsubnet1Subnet1Subnet89E5486A", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -4208,7 +5059,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1SubnetB4246D30", + "logicalId": "nestedstackvpcpublicsubnet1Subnet1Subnet89E5486A", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -4222,7 +5073,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" } }, { @@ -4231,7 +5082,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1RouteTableFEE4B781", + "logicalId": "nestedstackvpcpublicsubnet1Subnet1RouteTable518786D0", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, @@ -4246,7 +5097,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" } }, { @@ -4255,7 +5106,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", + "logicalId": "nestedstackvpcpublicsubnet1Subnet1RouteTableAssociationE08618B5", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -4270,7 +5121,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'", + "resolutionSource": "Ref to 'nestedstackvpcpublicsubnet1Subnet1RouteTable518786D0'", "extra": { "replacement_strategy": "delete_then_create" } @@ -4282,7 +5133,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", + "logicalId": "nestedstackvpcpublicsubnet1Subnet1RouteTableAssociationE08618B5", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -4297,7 +5148,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'", + "resolutionSource": "Ref to 'nestedstackvpcpublicsubnet1Subnet1Subnet89E5486A'", "extra": { "replacement_strategy": "delete_then_create" } @@ -4309,7 +5160,7 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", + "logicalId": "nestedstackvpcpublicsubnet1Subnet1DefaultRouteA3ABB16E", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -4332,7 +5183,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", + "logicalId": "nestedstackvpcpublicsubnet1Subnet1DefaultRouteA3ABB16E", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -4347,53 +5198,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VPCPublicSubnet1NATGatewayE0556630", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.AllocationId", - "category": "Best Practice", - "startLine": 123, - "startColumn": 5, - "endLine": 123, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt VPCPublicSubnet1EIP6AD938E8.AllocationId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VPCPublicSubnet1NATGatewayE0556630", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 129, - "startColumn": 5, - "endLine": 129, - "endColumn": 14, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'" + "resolutionSource": "Ref to 'nestedstackvpcpublicsubnet1Subnet1RouteTable518786D0'" } }, { @@ -4402,15 +5207,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2Subnet74179F39", + "logicalId": "nestedstackvpcpublicsubnet1Subnet2Subnet778CFACA", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 150, + "startLine": 108, "startColumn": 5, - "endLine": 150, + "endLine": 108, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -4424,15 +5229,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2Subnet74179F39", + "logicalId": "nestedstackvpcpublicsubnet1Subnet2Subnet778CFACA", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 158, + "startLine": 116, "startColumn": 5, - "endLine": 158, + "endLine": 116, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -4446,21 +5251,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2Subnet74179F39", + "logicalId": "nestedstackvpcpublicsubnet1Subnet2Subnet778CFACA", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 174, + "startLine": 132, "startColumn": 5, - "endLine": 174, + "endLine": 132, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" } }, { @@ -4469,22 +5274,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2RouteTable6F1A15F1", + "logicalId": "nestedstackvpcpublicsubnet1Subnet2RouteTableF3884194", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 191, + "startLine": 149, "startColumn": 5, - "endLine": 191, + "endLine": 149, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" } }, { @@ -4493,22 +5298,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2RouteTableAssociation5A808732", + "logicalId": "nestedstackvpcpublicsubnet1Subnet2RouteTableAssociation432D9A37", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 202, + "startLine": 160, "startColumn": 5, - "endLine": 202, + "endLine": 160, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet2RouteTable6F1A15F1'", + "resolutionSource": "Ref to 'nestedstackvpcpublicsubnet1Subnet2RouteTableF3884194'", "extra": { "replacement_strategy": "delete_then_create" } @@ -4520,22 +5325,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2RouteTableAssociation5A808732", + "logicalId": "nestedstackvpcpublicsubnet1Subnet2RouteTableAssociation432D9A37", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 205, + "startLine": 163, "startColumn": 5, - "endLine": 205, + "endLine": 163, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet2Subnet74179F39'", + "resolutionSource": "Ref to 'nestedstackvpcpublicsubnet1Subnet2Subnet778CFACA'", "extra": { "replacement_strategy": "delete_then_create" } @@ -4547,15 +5352,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2DefaultRouteB7481BBA", + "logicalId": "nestedstackvpcpublicsubnet1Subnet2DefaultRouteC44F12D1", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 216, + "startLine": 174, "startColumn": 5, - "endLine": 216, + "endLine": 174, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -4570,108 +5375,62 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2DefaultRouteB7481BBA", + "logicalId": "nestedstackvpcpublicsubnet1Subnet2DefaultRouteC44F12D1", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 220, + "startLine": 178, "startColumn": 5, - "endLine": 220, + "endLine": 178, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet2RouteTable6F1A15F1'" + "resolutionSource": "Ref to 'nestedstackvpcpublicsubnet1Subnet2RouteTableF3884194'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2NATGateway3C070193", + "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet1Subnet46C8720E", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 249, + "startLine": 192, "startColumn": 5, - "endLine": 249, - "endColumn": 18, + "endLine": 192, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt VPCPublicSubnet2EIP4947BC00.AllocationId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2NATGateway3C070193", + "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet1Subnet46C8720E", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 255, + "startLine": 200, "startColumn": 5, - "endLine": 255, - "endColumn": 14, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet2Subnet74179F39'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 276, - "startColumn": 5, - "endLine": 276, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 284, - "startColumn": 5, - "endLine": 284, - "endColumn": 15, + "endLine": 200, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -4684,21 +5443,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", + "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet1Subnet46C8720E", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 300, + "startLine": 216, "startColumn": 5, - "endLine": 300, + "endLine": 216, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" } }, { @@ -4707,22 +5466,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1RouteTableBE8A6027", + "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet1RouteTable5302591F", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 317, + "startLine": 233, "startColumn": 5, - "endLine": 317, + "endLine": 233, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" } }, { @@ -4731,22 +5490,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1RouteTableAssociation347902D1", + "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet1RouteTableAssociation6C6975EB", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 328, + "startLine": 244, "startColumn": 5, - "endLine": 328, + "endLine": 244, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet1RouteTableBE8A6027'", + "resolutionSource": "Ref to 'nestedstackvpcprivateisolatedsubnet1Subnet1RouteTable5302591F'", "extra": { "replacement_strategy": "delete_then_create" } @@ -4758,89 +5517,42 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1RouteTableAssociation347902D1", + "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet1RouteTableAssociation6C6975EB", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 331, + "startLine": 247, "startColumn": 5, - "endLine": 331, + "endLine": 247, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet1Subnet8BCA10E0'", + "resolutionSource": "Ref to 'nestedstackvpcprivateisolatedsubnet1Subnet1Subnet46C8720E'", "extra": { "replacement_strategy": "delete_then_create" } } }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VPCPrivateSubnet1DefaultRouteAE1D6490", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.DestinationCidrBlock", - "category": "Best Practice", - "startLine": 342, - "startColumn": 5, - "endLine": 342, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VPCPrivateSubnet1DefaultRouteAE1D6490", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 346, - "startColumn": 5, - "endLine": 346, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet1RouteTableBE8A6027'" - } - }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2SubnetCFCDAA7A", + "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet2Subnet89BFE59F", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 357, + "startLine": 258, "startColumn": 5, - "endLine": 357, + "endLine": 258, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -4854,15 +5566,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2SubnetCFCDAA7A", + "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet2Subnet89BFE59F", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 365, + "startLine": 266, "startColumn": 5, - "endLine": 365, + "endLine": 266, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -4876,21 +5588,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2SubnetCFCDAA7A", + "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet2Subnet89BFE59F", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 381, + "startLine": 282, "startColumn": 5, - "endLine": 381, + "endLine": 282, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" } }, { @@ -4899,22 +5611,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2RouteTable0A19E10E", + "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet2RouteTableEA03EC80", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 398, + "startLine": 299, "startColumn": 5, - "endLine": 398, + "endLine": 299, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" } }, { @@ -4923,22 +5635,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2RouteTableAssociation0C73D413", + "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet2RouteTableAssociation61E13F31", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 409, + "startLine": 310, "startColumn": 5, - "endLine": 409, + "endLine": 310, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet2RouteTable0A19E10E'", + "resolutionSource": "Ref to 'nestedstackvpcprivateisolatedsubnet1Subnet2RouteTableEA03EC80'", "extra": { "replacement_strategy": "delete_then_create" } @@ -4950,22 +5662,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2RouteTableAssociation0C73D413", + "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet2RouteTableAssociation61E13F31", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 412, + "startLine": 313, "startColumn": 5, - "endLine": 412, + "endLine": 313, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet2SubnetCFCDAA7A'", + "resolutionSource": "Ref to 'nestedstackvpcprivateisolatedsubnet1Subnet2Subnet89BFE59F'", "extra": { "replacement_strategy": "delete_then_create" } @@ -4974,93 +5686,125 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2DefaultRouteF4F5CFD2", + "logicalId": "nestedstackvpcVPCGWA39BF2BE", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 423, + "startLine": 341, "startColumn": 5, - "endLine": 423, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 341, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'", + "extra": { + "replacement_strategy": "delete_then_create" + } } + } + ] + }, + "cdk/api-websocket-lambda-dynamodb--chat-app.template.json": { + "filePath": "cdk/api-websocket-lambda-dynamodb--chat-app.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 22, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 3, + "informational": 22, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'connectlambdaServiceRole04DCF570' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "VPCPrivateSubnet2DefaultRouteF4F5CFD2", + "logicalId": "connectlambdaFFAE59F3", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 427, - "startColumn": 5, - "endLine": 427, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet2RouteTable0A19E10E'" - } + "startLine": 157, + "startColumn": 4, + "endLine": 157, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'disconnectlambdaServiceRole2779F08C' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "VPCVPCGW99B986DC", + "logicalId": "disconnectlambdaAC22A441", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 455, - "startColumn": 5, - "endLine": 455, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 284, + "startColumn": 4, + "endLine": 284, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'messagelambdaServiceRole544EC18A' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "messagelambda16C1C2A3", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 427, + "startColumn": 4, + "endLine": 427, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'ProtocolType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroup0525485D", + "logicalId": "chatappapi", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGatewayV2::Api" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.ProtocolType", "category": "Best Practice", - "startLine": 466, + "startLine": 7, "startColumn": 5, - "endLine": 466, - "endColumn": 22, + "endLine": 7, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5070,43 +5814,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroup0525485D", + "logicalId": "chatappapitable5244EF8B", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 480, + "startLine": 23, "startColumn": 5, - "endLine": 480, - "endColumn": 11, + "endLine": 23, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", + "logicalId": "chatappapitable5244EF8B", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 492, + "startLine": 33, "startColumn": 5, - "endLine": 492, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 33, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5116,207 +5858,212 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", + "logicalId": "connectlambdaintegration", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ApiGatewayV2::Integration" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 493, + "startLine": 504, "startColumn": 5, - "endLine": 493, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 504, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ASGInstanceSecurityGroup0525485D.GroupId" + "resolutionSource": "Ref to 'chatappapi'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", + "logicalId": "disconnectlambdaintegration", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ApiGatewayV2::Integration" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 499, + "startLine": 537, "startColumn": 5, - "endLine": 499, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 537, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'chatappapi'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", + "logicalId": "messagelambdaintegration", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ApiGatewayV2::Integration" }, - "propertyPath": "Properties.SourceSecurityGroupId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 500, + "startLine": 570, "startColumn": 5, - "endLine": 500, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 570, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt LBSecurityGroup8A41EA2B.GroupId" + "resolutionSource": "Ref to 'chatappapi'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", + "logicalId": "connectroute", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ApiGatewayV2::Route" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 506, + "startLine": 603, "startColumn": 5, - "endLine": 506, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 603, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'chatappapi'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "disconnectroute", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::ApiGatewayV2::Route" }, - "propertyPath": "Properties.IamInstanceProfile", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 554, + "startLine": 627, "startColumn": 5, - "endLine": 554, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 627, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ASGInstanceProfile0A2834D7'" + "resolutionSource": "Ref to 'chatappapi'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "messageroute", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::ApiGatewayV2::Route" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 557, + "startLine": 651, "startColumn": 5, - "endLine": 557, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 651, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'chatappapi'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "chatappapideployment", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::ApiGatewayV2::Deployment" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 560, + "startLine": 675, "startColumn": 5, - "endLine": 560, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 675, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'chatappapi'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "chatappapistage", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::ApiGatewayV2::Stage" }, - "propertyPath": "Properties.SecurityGroups", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 561, + "startLine": 691, "startColumn": 5, - "endLine": 561, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 691, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'chatappapi'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "chatappapistage", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::ApiGatewayV2::Stage" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 569, + "startLine": 698, "startColumn": 5, - "endLine": 569, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 698, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5324,114 +6071,383 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'chatappapi' of type 'AWS::ApiGatewayV2::Api' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ASG46ED3070", + "logicalId": "chatappapi", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::ApiGatewayV2::Api" }, - "propertyPath": "Properties.LaunchConfigurationName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 583, - "startColumn": 5, - "endLine": 583, - "endColumn": 29, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'ASGLaunchConfigC00AF12B'" - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'chatappapitable5244EF8B' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ASG46ED3070", + "logicalId": "chatappapitable5244EF8B", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.VPCZoneIdentifier", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 600, - "startColumn": 5, - "endLine": 600, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 16, + "startColumn": 4, + "endLine": 16, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", + "message": "Resource 'connectlambdaServiceRole04DCF570' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "connectlambdaServiceRole04DCF570", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 43, + "startColumn": 4, + "endLine": 43, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'connectlambdaFFAE59F3' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "connectlambdaFFAE59F3", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 134, + "startColumn": 4, + "endLine": 134, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'disconnectlambdaServiceRole2779F08C' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "disconnectlambdaServiceRole2779F08C", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 170, + "startColumn": 4, + "endLine": 170, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'disconnectlambdaAC22A441' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "disconnectlambdaAC22A441", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 261, + "startColumn": 4, + "endLine": 261, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'messagelambdaServiceRole544EC18A' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "messagelambdaServiceRole544EC18A", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 297, + "startColumn": 4, + "endLine": 297, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'messagelambda16C1C2A3' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "messagelambda16C1C2A3", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 404, + "startColumn": 4, + "endLine": 404, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'chatappapiiamrole2977C2A3' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "chatappapiiamrole2977C2A3", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 440, + "startColumn": 4, + "endLine": 440, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'chatappapistage' of type 'AWS::ApiGatewayV2::Stage' supports Tags but none are configured", "source": "ENGINE", + "entity": { + "logicalId": "chatappapistage", + "entityType": "Resource", + "resourceType": "AWS::ApiGatewayV2::Stage" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 690, + "startColumn": 4, + "endLine": 690, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/application-load-balancer--LoadBalancerStack.template.json": { + "filePath": "cdk/application-load-balancer--LoadBalancerStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 36, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 5, + "informational": 72, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'LBListener49E825B4' dependency already enforced by a 'Ref' at 'Properties.TargetTrackingConfiguration.PredefinedMetricSpecification.ResourceLabel.Fn::Join.1.0'", + "source": "CFN_LINT", "entity": { "logicalId": "ASGScalingPolicyAModestLoadC5714E5A", "entityType": "Resource", "resourceType": "AWS::AutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.AutoScalingGroupName", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 621, - "startColumn": 5, - "endLine": 621, - "endColumn": 26, + "startLine": 687, + "startColumn": 4, + "endLine": 687, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'LBListener49E825B4' dependency already enforced by a 'Ref' at 'Properties.TargetTrackingConfiguration.PredefinedMetricSpecification.ResourceLabel.Fn::Join.1.2'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ASGScalingPolicyAModestLoadC5714E5A", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::ScalingPolicy" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 687, + "startColumn": 4, + "endLine": 687, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'LBListener49E825B4' dependency already enforced by a 'Ref' at 'Properties.TargetTrackingConfiguration.PredefinedMetricSpecification.ResourceLabel.Fn::Join.1.4'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ASGScalingPolicyAModestLoadC5714E5A", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::ScalingPolicy" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 687, + "startColumn": 4, + "endLine": 687, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'LBListenerTargetGroupF04FCF6D' dependency already enforced by a 'GetAtt' at 'Properties.TargetTrackingConfiguration.PredefinedMetricSpecification.ResourceLabel.Fn::Join.1.6'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ASGScalingPolicyAModestLoadC5714E5A", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::ScalingPolicy" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 687, + "startColumn": 4, + "endLine": 687, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "ASGLaunchConfigC00AF12B", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "category": "Deprecation", + "startLine": 551, + "startColumn": 3, + "endLine": 551, + "endColumn": 27, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "VPCB9E5F0B4", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ASG46ED3070'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LB8A12904C", + "logicalId": "VPCB9E5F0B4", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Scheme", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 704, + "startLine": 9, "startColumn": 5, - "endLine": 704, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endLine": 9, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LB8A12904C", + "logicalId": "VPCPublicSubnet1SubnetB4246D30", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 721, + "startLine": 24, "startColumn": 5, - "endLine": 721, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endLine": 24, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5441,19 +6457,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGroup8A41EA2B", + "logicalId": "VPCPublicSubnet1SubnetB4246D30", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 736, + "startLine": 32, "startColumn": 5, - "endLine": 736, - "endColumn": 22, + "endLine": 32, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5466,15 +6482,15 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGroup8A41EA2B", + "logicalId": "VPCPublicSubnet1SubnetB4246D30", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 746, + "startLine": 48, "startColumn": 5, - "endLine": 746, + "endLine": 48, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -5486,91 +6502,98 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationSecurityGroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", + "logicalId": "VPCPublicSubnet1RouteTableFEE4B781", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.DestinationSecurityGroupId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 758, + "startLine": 65, "startColumn": 5, - "endLine": 758, - "endColumn": 32, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 65, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ASGInstanceSecurityGroup0525485D.GroupId" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", + "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 764, + "startLine": 76, "startColumn": 5, - "endLine": 764, - "endColumn": 14, + "endLine": 76, + "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", + "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 765, + "startLine": 79, "startColumn": 5, - "endLine": 765, - "endColumn": 13, + "endLine": 79, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt LBSecurityGroup8A41EA2B.GroupId" + "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", + "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 771, + "startLine": 90, "startColumn": 5, - "endLine": 771, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 90, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5580,88 +6603,89 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", + "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 772, + "startLine": 94, "startColumn": 5, - "endLine": 772, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 94, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LBListener49E825B4", + "logicalId": "VPCPublicSubnet1NATGatewayE0556630", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.LoadBalancerArn", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 789, + "startLine": 123, "startColumn": 5, - "endLine": 789, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", + "endLine": 123, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'LB8A12904C'" + "resolutionSource": "GetAtt VPCPublicSubnet1EIP6AD938E8.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LBListenerTargetGroupF04FCF6D", + "logicalId": "VPCPublicSubnet1NATGatewayE0556630", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 802, + "startLine": 129, "startColumn": 5, - "endLine": 802, - "endColumn": 10, + "endLine": 129, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LBListenerTargetGroupF04FCF6D", + "logicalId": "VPCPublicSubnet2Subnet74179F39", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 803, + "startLine": 150, "startColumn": 5, - "endLine": 803, - "endColumn": 14, + "endLine": 150, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5671,19 +6695,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LBListenerTargetGroupF04FCF6D", + "logicalId": "VPCPublicSubnet2Subnet74179F39", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.TargetType", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 810, + "startLine": 158, "startColumn": 5, - "endLine": 810, - "endColumn": 16, + "endLine": 158, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5696,15 +6720,15 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LBListenerTargetGroupF04FCF6D", + "logicalId": "VPCPublicSubnet2Subnet74179F39", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 811, + "startLine": 174, "startColumn": 5, - "endLine": 811, + "endLine": 174, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -5714,186 +6738,192 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LB8A12904C' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LB8A12904C", + "logicalId": "VPCPublicSubnet2RouteTable6F1A15F1", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 697, - "startColumn": 4, - "endLine": 697, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 191, + "startColumn": 5, + "endLine": 191, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LBSecurityGroup8A41EA2B' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGroup8A41EA2B", + "logicalId": "VPCPublicSubnet2RouteTableAssociation5A808732", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 735, - "startColumn": 4, - "endLine": 735, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 202, + "startColumn": 5, + "endLine": 202, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet2RouteTable6F1A15F1'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LBListener49E825B4' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LBListener49E825B4", + "logicalId": "VPCPublicSubnet2RouteTableAssociation5A808732", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 780, - "startColumn": 4, - "endLine": 780, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 205, + "startColumn": 5, + "endLine": 205, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet2Subnet74179F39'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LBListenerTargetGroupF04FCF6D' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LBListenerTargetGroupF04FCF6D", + "logicalId": "VPCPublicSubnet2DefaultRouteB7481BBA", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 801, - "startColumn": 4, - "endLine": 801, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/appsync-graphql-dynamodb--CdkAppsyncDemoStack.template.json": { - "filePath": "cdk/appsync-graphql-dynamodb--CdkAppsyncDemoStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 15, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 22, - "debug": 0 + "startLine": 216, + "startColumn": 5, + "endLine": 216, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CarTableA597893A", + "logicalId": "VPCPublicSubnet2DefaultRouteB7481BBA", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 12, + "startLine": 220, "startColumn": 5, - "endLine": 12, - "endColumn": 15, + "endLine": 220, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet2RouteTable6F1A15F1'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CarTableA597893A", + "logicalId": "VPCPublicSubnet2NATGateway3C070193", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.TableName", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 22, + "startLine": 249, "startColumn": 5, - "endLine": 22, - "endColumn": 15, + "endLine": 249, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt VPCPublicSubnet2EIP4947BC00.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DefectsTable2A57950B", + "logicalId": "VPCPublicSubnet2NATGateway3C070193", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 61, + "startLine": 255, "startColumn": 5, - "endLine": 61, - "endColumn": 15, + "endLine": 255, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet2Subnet74179F39'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DefectsTable2A57950B", + "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.TableName", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 71, + "startLine": 276, "startColumn": 5, - "endLine": 71, - "endColumn": 15, + "endLine": 276, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5903,209 +6933,211 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CarApiSchema8E4784D9", + "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", "entityType": "Resource", - "resourceType": "AWS::AppSync::GraphQLSchema" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 93, + "startLine": 284, "startColumn": 5, - "endLine": 93, - "endColumn": 11, + "endLine": 284, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt CarApiE5E7ACF5.ApiId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CarApiCarsDataSourceD8C35DA8", + "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", "entityType": "Resource", - "resourceType": "AWS::AppSync::DataSource" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 170, + "startLine": 300, "startColumn": 5, - "endLine": 170, + "endLine": 300, "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt CarApiE5E7ACF5.ApiId" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CarApiCarsDataSourceD8C35DA8", + "logicalId": "VPCPrivateSubnet1RouteTableBE8A6027", "entityType": "Resource", - "resourceType": "AWS::AppSync::DataSource" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 182, + "startLine": 317, "startColumn": 5, - "endLine": 182, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", + "endLine": 317, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CarApiDefectsDataSourceEBF3B13F", + "logicalId": "VPCPrivateSubnet1RouteTableAssociation347902D1", "entityType": "Resource", - "resourceType": "AWS::AppSync::DataSource" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 276, + "startLine": 328, "startColumn": 5, - "endLine": 276, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", + "endLine": 328, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt CarApiE5E7ACF5.ApiId" + "resolutionSource": "Ref to 'VPCPrivateSubnet1RouteTableBE8A6027'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CarApiDefectsDataSourceEBF3B13F", + "logicalId": "VPCPrivateSubnet1RouteTableAssociation347902D1", "entityType": "Resource", - "resourceType": "AWS::AppSync::DataSource" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 288, + "startLine": 331, "startColumn": 5, - "endLine": 288, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", + "endLine": 331, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPrivateSubnet1Subnet8BCA10E0'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CarsFunction7C2F2ED2", + "logicalId": "VPCPrivateSubnet1DefaultRouteAE1D6490", "entityType": "Resource", - "resourceType": "AWS::AppSync::FunctionConfiguration" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 304, + "startLine": 342, "startColumn": 5, - "endLine": 304, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 342, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt CarApiE5E7ACF5.ApiId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DefectsFunction929174B7", + "logicalId": "VPCPrivateSubnet1DefaultRouteAE1D6490", "entityType": "Resource", - "resourceType": "AWS::AppSync::FunctionConfiguration" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 332, + "startLine": 346, "startColumn": 5, - "endLine": 332, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 346, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt CarApiE5E7ACF5.ApiId" + "resolutionSource": "Ref to 'VPCPrivateSubnet1RouteTableBE8A6027'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PipelineResolverGetCars2DDF5816", + "logicalId": "VPCPrivateSubnet2SubnetCFCDAA7A", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 360, + "startLine": 357, "startColumn": 5, - "endLine": 360, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 357, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt CarApiE5E7ACF5.ApiId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PipelineResolverGetCars2DDF5816", + "logicalId": "VPCPrivateSubnet2SubnetCFCDAA7A", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.FieldName", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 369, + "startLine": 365, "startColumn": 5, - "endLine": 369, + "endLine": 365, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6115,322 +7147,287 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PipelineResolverGetCars2DDF5816", + "logicalId": "VPCPrivateSubnet2SubnetCFCDAA7A", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.TypeName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 385, + "startLine": 381, "startColumn": 5, - "endLine": 385, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 381, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PipelineResolverGetDefects032EF131", + "logicalId": "VPCPrivateSubnet2RouteTable0A19E10E", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 397, + "startLine": 398, "startColumn": 5, - "endLine": 397, + "endLine": 398, "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt CarApiE5E7ACF5.ApiId" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PipelineResolverGetDefects032EF131", + "logicalId": "VPCPrivateSubnet2RouteTableAssociation0C73D413", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.FieldName", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 406, + "startLine": 409, "startColumn": 5, - "endLine": 406, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 409, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPrivateSubnet2RouteTable0A19E10E'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PipelineResolverGetDefects032EF131", + "logicalId": "VPCPrivateSubnet2RouteTableAssociation0C73D413", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.TypeName", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 422, + "startLine": 412, "startColumn": 5, - "endLine": 422, + "endLine": 412, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPrivateSubnet2SubnetCFCDAA7A'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CarTableA597893A' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CarTableA597893A", + "logicalId": "VPCPrivateSubnet2DefaultRouteF4F5CFD2", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 423, + "startColumn": 5, + "endLine": 423, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DefectsTable2A57950B' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "DefectsTable2A57950B", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 32, - "startColumn": 4, - "endLine": 32, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CarApiE5E7ACF5' of type 'AWS::AppSync::GraphQLApi' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CarApiE5E7ACF5", + "logicalId": "VPCPrivateSubnet2DefaultRouteF4F5CFD2", "entityType": "Resource", - "resourceType": "AWS::AppSync::GraphQLApi" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 81, - "startColumn": 4, - "endLine": 81, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 427, + "startColumn": 5, + "endLine": 427, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPrivateSubnet2RouteTable0A19E10E'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CarApiCarsDataSourceServiceRole82F3FC8A' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CarApiCarsDataSourceServiceRole82F3FC8A", + "logicalId": "VPCVPCGW99B986DC", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 107, - "startColumn": 4, - "endLine": 107, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 455, + "startColumn": 5, + "endLine": 455, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CarApiDefectsDataSourceServiceRole7EDF6907' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CarApiDefectsDataSourceServiceRole7EDF6907", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 197, - "startColumn": 4, - "endLine": 197, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/appsync-graphql-eventbridge--AppSyncEventBridge.template.json": { - "filePath": "cdk/appsync-graphql-eventbridge--AppSyncEventBridge.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 12, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 16, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'echoFunctionServiceRole1EBD6DF0' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "echoFunction5207BE9B", + "logicalId": "ASGInstanceSecurityGroup0525485D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 202, - "startColumn": 4, - "endLine": 202, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 466, + "startColumn": 5, + "endLine": 466, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AppSync2EventBridgeApiKey", + "logicalId": "ASGInstanceSecurityGroup0525485D", "entityType": "Resource", - "resourceType": "AWS::AppSync::ApiKey" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 16, + "startLine": 480, "startColumn": 5, - "endLine": 16, + "endLine": 480, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt AppSync2EventBridgeApi.ApiId" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ItemsSchema", + "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", "entityType": "Resource", - "resourceType": "AWS::AppSync::GraphQLSchema" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 30, + "startLine": 492, "startColumn": 5, - "endLine": 30, - "endColumn": 11, + "endLine": 492, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt AppSync2EventBridgeApi.ApiId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ItemsDataSource", + "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", "entityType": "Resource", - "resourceType": "AWS::AppSync::DataSource" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 89, + "startLine": 493, "startColumn": 5, - "endLine": 89, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", + "endLine": 493, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt AppSync2EventBridgeApi.ApiId" + "resolutionSource": "GetAtt ASGInstanceSecurityGroup0525485D.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ItemsDataSource", + "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", "entityType": "Resource", - "resourceType": "AWS::AppSync::DataSource" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 118, + "startLine": 499, "startColumn": 5, - "endLine": 118, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", + "endLine": 499, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6440,44 +7437,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PutEventMutationResolver", + "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.SourceSecurityGroupId", "category": "Best Practice", - "startLine": 134, + "startLine": 500, "startColumn": 5, - "endLine": 134, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 500, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt AppSync2EventBridgeApi.ApiId" + "resolutionSource": "GetAtt LBSecurityGroup8A41EA2B.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PutEventMutationResolver", + "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.FieldName", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 141, + "startLine": 506, "startColumn": 5, - "endLine": 141, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 506, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6487,42 +7484,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", + "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PutEventMutationResolver", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.TypeName", + "propertyPath": "Properties.IamInstanceProfile", "category": "Best Practice", - "startLine": 144, + "startLine": 554, "startColumn": 5, - "endLine": 144, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 554, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ASGInstanceProfile0A2834D7'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AppSyncEventBridgeRleAllowEventRuleAppSyncEventBridgeechoFunction7F06E48E35535C50", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 237, + "startLine": 557, "startColumn": 5, - "endLine": 237, - "endColumn": 12, + "endLine": 557, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6532,42 +7531,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AppSyncEventBridgeRleAllowEventRuleAppSyncEventBridgeechoFunction7F06E48E35535C50", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 238, + "startLine": 560, "startColumn": 5, - "endLine": 238, + "endLine": 560, "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt echoFunction5207BE9B.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AppSyncEventBridgeRleAllowEventRuleAppSyncEventBridgeechoFunction7F06E48E35535C50", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.SecurityGroups", "category": "Best Practice", - "startLine": 244, + "startLine": 561, "startColumn": 5, - "endLine": 244, - "endColumn": 15, + "endLine": 561, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6577,232 +7577,227 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'UserData' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AppSyncEventBridgeRleAllowEventRuleAppSyncEventBridgeechoFunction7F06E48E35535C50", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 245, + "startLine": 569, "startColumn": 5, - "endLine": 245, - "endColumn": 15, + "endLine": 569, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt AppSyncEventBridgeRle2A25B9B1.Arn" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'AppSync2EventBridgeApi' of type 'AWS::AppSync::GraphQLApi' supports Tags but none are configured", + "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AppSync2EventBridgeApi", + "logicalId": "ASG46ED3070", "entityType": "Resource", - "resourceType": "AWS::AppSync::GraphQLApi" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.LaunchConfigurationName", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 583, + "startColumn": 5, + "endLine": 583, + "endColumn": 29, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'ASGLaunchConfigC00AF12B'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'AppSyncEventBridgeRoleE2F34FE0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AppSyncEventBridgeRoleE2F34FE0", + "logicalId": "ASG46ED3070", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VPCZoneIdentifier", "category": "Best Practice", - "startLine": 44, - "startColumn": 4, - "endLine": 44, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 600, + "startColumn": 5, + "endLine": 600, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'echoFunctionServiceRole1EBD6DF0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "echoFunctionServiceRole1EBD6DF0", + "logicalId": "ASGScalingPolicyAModestLoadC5714E5A", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::AutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AutoScalingGroupName", "category": "Best Practice", - "startLine": 155, - "startColumn": 4, - "endLine": 155, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 621, + "startColumn": 5, + "endLine": 621, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ASG46ED3070'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'echoFunction5207BE9B' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "echoFunction5207BE9B", + "logicalId": "LB8A12904C", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Scheme", "category": "Best Practice", - "startLine": 189, - "startColumn": 4, - "endLine": 189, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 704, + "startColumn": 5, + "endLine": 704, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'AppSyncEventBridgeRle2A25B9B1' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AppSyncEventBridgeRle2A25B9B1", + "logicalId": "LB8A12904C", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 211, - "startColumn": 4, - "endLine": 211, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/appsync-graphql-http--AppSyncGraphQLHTTPExample.template.json": { - "filePath": "cdk/appsync-graphql-http--AppSyncGraphQLHTTPExample.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 9, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 17, - "debug": 0 + "startLine": 721, + "startColumn": 5, + "endLine": 721, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PostsApiKey", + "logicalId": "LBSecurityGroup8A41EA2B", "entityType": "Resource", - "resourceType": "AWS::AppSync::ApiKey" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 16, + "startLine": 736, "startColumn": 5, - "endLine": 16, - "endColumn": 11, + "endLine": 736, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt PostsApiCdk.ApiId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PostsSchema", + "logicalId": "LBSecurityGroup8A41EA2B", "entityType": "Resource", - "resourceType": "AWS::AppSync::GraphQLSchema" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 30, + "startLine": 746, "startColumn": 5, - "endLine": 30, + "endLine": 746, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt PostsApiCdk.ApiId" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationSecurityGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PostsDataSource", + "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", "entityType": "Resource", - "resourceType": "AWS::AppSync::DataSource" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.DestinationSecurityGroupId", "category": "Best Practice", - "startLine": 45, + "startLine": 758, "startColumn": 5, - "endLine": 45, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", + "endLine": 758, + "endColumn": 32, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt PostsApiCdk.ApiId" + "resolutionSource": "GetAtt ASGInstanceSecurityGroup0525485D.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PostsDataSource", + "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", "entityType": "Resource", - "resourceType": "AWS::AppSync::DataSource" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 54, + "startLine": 764, "startColumn": 5, - "endLine": 54, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", + "endLine": 764, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6812,44 +7807,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GetOneQueryResolver", + "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 64, + "startLine": 765, "startColumn": 5, - "endLine": 64, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 765, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt PostsApiCdk.ApiId" + "resolutionSource": "GetAtt LBSecurityGroup8A41EA2B.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GetOneQueryResolver", + "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.FieldName", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 72, + "startLine": 771, "startColumn": 5, - "endLine": 72, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 771, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6859,20 +7854,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GetOneQueryResolver", + "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.TypeName", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 77, + "startLine": 772, "startColumn": 5, - "endLine": 77, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 772, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6882,44 +7877,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GetAllQueryResolver", + "logicalId": "LBListener49E825B4", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.LoadBalancerArn", "category": "Best Practice", - "startLine": 89, + "startLine": 789, "startColumn": 5, - "endLine": 89, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 789, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt PostsApiCdk.ApiId" + "resolutionSource": "Ref to 'LB8A12904C'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GetAllQueryResolver", + "logicalId": "LBListenerTargetGroupF04FCF6D", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.FieldName", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 97, + "startLine": 802, "startColumn": 5, - "endLine": 97, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 802, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6929,20 +7923,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GetAllQueryResolver", + "logicalId": "LBListenerTargetGroupF04FCF6D", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.TypeName", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 102, + "startLine": 803, "startColumn": 5, - "endLine": 102, + "endLine": 803, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6952,44 +7945,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SaveMutationResolver", - "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" - }, - "propertyPath": "Properties.ApiId", - "category": "Best Practice", - "startLine": 114, - "startColumn": 5, - "endLine": 114, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt PostsApiCdk.ApiId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", + "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SaveMutationResolver", + "logicalId": "LBListenerTargetGroupF04FCF6D", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.FieldName", + "propertyPath": "Properties.TargetType", "category": "Best Practice", - "startLine": 122, + "startLine": 810, "startColumn": 5, - "endLine": 122, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 810, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6999,128 +7967,118 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SaveMutationResolver", + "logicalId": "LBListenerTargetGroupF04FCF6D", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.TypeName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 127, + "startLine": 811, "startColumn": 5, - "endLine": 127, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 811, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'LB8A12904C' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DeleteMutationResolver", + "logicalId": "LB8A12904C", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 139, - "startColumn": 5, - "endLine": 139, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt PostsApiCdk.ApiId" - } + "startLine": 697, + "startColumn": 4, + "endLine": 697, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", + "message": "Resource 'LBSecurityGroup8A41EA2B' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DeleteMutationResolver", + "logicalId": "LBSecurityGroup8A41EA2B", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.FieldName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 147, - "startColumn": 5, - "endLine": 147, + "startLine": 735, + "startColumn": 4, + "endLine": 735, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", + "message": "Resource 'LBListener49E825B4' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DeleteMutationResolver", + "logicalId": "LBListener49E825B4", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "Properties.TypeName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 152, - "startColumn": 5, - "endLine": 152, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 780, + "startColumn": 4, + "endLine": 780, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'PostsApiCdk' of type 'AWS::AppSync::GraphQLApi' supports Tags but none are configured", + "message": "Resource 'LBListenerTargetGroupF04FCF6D' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "PostsApiCdk", + "logicalId": "LBListenerTargetGroupF04FCF6D", "entityType": "Resource", - "resourceType": "AWS::AppSync::GraphQLApi" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 801, "startColumn": 4, - "endLine": 5, + "endLine": 801, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/aspects--SampleStack.template.json": { - "filePath": "cdk/aspects--SampleStack.template.json", + "cdk/appsync-graphql-dynamodb--CdkAppsyncDemoStack.template.json": { + "filePath": "cdk/appsync-graphql-dynamodb--CdkAppsyncDemoStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 9, + "resourcesScanned": 15, "counts": { "fatal": 0, "errors": 0, - "warnings": 8, - "informational": 8, + "warnings": 0, + "informational": 22, "debug": 0 }, "suppressed": 0, @@ -7129,253 +8087,414 @@ }, "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Construct1StandardFunctionD5361E84", + "logicalId": "CarTableA597893A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 50, + "propertyPath": "Properties.KeySchema", + "category": "Best Practice", + "startLine": 12, "startColumn": 5, - "endLine": 50, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Construct1FunctionWithReservedCEs6458B719", + "logicalId": "CarTableA597893A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 107, + "propertyPath": "Properties.TableName", + "category": "Best Practice", + "startLine": 22, "startColumn": 5, - "endLine": 107, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 22, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Construct2StandardFunction1EBDBFFA", + "logicalId": "DefectsTable2A57950B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 164, + "propertyPath": "Properties.KeySchema", + "category": "Best Practice", + "startLine": 61, "startColumn": 5, - "endLine": 164, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 61, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Construct2FunctionWithReservedCEs89864BB2", + "logicalId": "DefectsTable2A57950B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 221, + "propertyPath": "Properties.TableName", + "category": "Best Practice", + "startLine": 71, "startColumn": 5, - "endLine": 221, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 71, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'Construct1StandardFunctionServiceRole716388BA' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Construct1StandardFunctionD5361E84", + "logicalId": "CarApiSchema8E4784D9", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::AppSync::GraphQLSchema" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 52, - "startColumn": 4, - "endLine": 52, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 93, + "startColumn": 5, + "endLine": 93, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt CarApiE5E7ACF5.ApiId" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'Construct1FunctionWithReservedCEsServiceRole21C8F977' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Construct1FunctionWithReservedCEs6458B719", + "logicalId": "CarApiCarsDataSourceD8C35DA8", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::AppSync::DataSource" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 109, - "startColumn": 4, - "endLine": 109, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 170, + "startColumn": 5, + "endLine": 170, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt CarApiE5E7ACF5.ApiId" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'Construct2StandardFunctionServiceRole450FEF35' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Construct2StandardFunction1EBDBFFA", + "logicalId": "CarApiCarsDataSourceD8C35DA8", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::AppSync::DataSource" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 166, - "startColumn": 4, - "endLine": 166, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 182, + "startColumn": 5, + "endLine": 182, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'Construct2FunctionWithReservedCEsServiceRoleB80261C4' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Construct2FunctionWithReservedCEs89864BB2", + "logicalId": "CarApiDefectsDataSourceEBF3B13F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::AppSync::DataSource" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 223, - "startColumn": 4, - "endLine": 223, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "startLine": 276, + "startColumn": 5, + "endLine": 276, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt CarApiE5E7ACF5.ApiId" + } + }, + { + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Construct1StandardFunctionServiceRole716388BA' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Construct1StandardFunctionServiceRole716388BA", + "logicalId": "CarApiDefectsDataSourceEBF3B13F", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::AppSync::DataSource" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 288, + "startColumn": 5, + "endLine": 288, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Construct1StandardFunctionD5361E84' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Construct1StandardFunctionD5361E84", + "logicalId": "CarsFunction7C2F2ED2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::AppSync::FunctionConfiguration" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 39, - "startColumn": 4, - "endLine": 39, + "startLine": 304, + "startColumn": 5, + "endLine": 304, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt CarApiE5E7ACF5.ApiId" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "DefectsFunction929174B7", + "entityType": "Resource", + "resourceType": "AWS::AppSync::FunctionConfiguration" + }, + "propertyPath": "Properties.ApiId", + "category": "Best Practice", + "startLine": 332, + "startColumn": 5, + "endLine": 332, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt CarApiE5E7ACF5.ApiId" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PipelineResolverGetCars2DDF5816", + "entityType": "Resource", + "resourceType": "AWS::AppSync::Resolver" + }, + "propertyPath": "Properties.ApiId", + "category": "Best Practice", + "startLine": 360, + "startColumn": 5, + "endLine": 360, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt CarApiE5E7ACF5.ApiId" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PipelineResolverGetCars2DDF5816", + "entityType": "Resource", + "resourceType": "AWS::AppSync::Resolver" + }, + "propertyPath": "Properties.FieldName", + "category": "Best Practice", + "startLine": 369, + "startColumn": 5, + "endLine": 369, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Construct1FunctionWithReservedCEsServiceRole21C8F977' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Construct1FunctionWithReservedCEsServiceRole21C8F977", + "logicalId": "PipelineResolverGetCars2DDF5816", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.TypeName", "category": "Best Practice", - "startLine": 61, - "startColumn": 4, - "endLine": 61, + "startLine": 385, + "startColumn": 5, + "endLine": 385, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PipelineResolverGetDefects032EF131", + "entityType": "Resource", + "resourceType": "AWS::AppSync::Resolver" + }, + "propertyPath": "Properties.ApiId", + "category": "Best Practice", + "startLine": 397, + "startColumn": 5, + "endLine": 397, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt CarApiE5E7ACF5.ApiId" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PipelineResolverGetDefects032EF131", + "entityType": "Resource", + "resourceType": "AWS::AppSync::Resolver" + }, + "propertyPath": "Properties.FieldName", + "category": "Best Practice", + "startLine": 406, + "startColumn": 5, + "endLine": 406, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PipelineResolverGetDefects032EF131", + "entityType": "Resource", + "resourceType": "AWS::AppSync::Resolver" + }, + "propertyPath": "Properties.TypeName", + "category": "Best Practice", + "startLine": 422, + "startColumn": 5, + "endLine": 422, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Construct1FunctionWithReservedCEs6458B719' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'CarTableA597893A' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Construct1FunctionWithReservedCEs6458B719", + "logicalId": "CarTableA597893A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 95, + "startLine": 5, "startColumn": 4, - "endLine": 95, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -7383,19 +8502,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Construct2StandardFunctionServiceRole450FEF35' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'DefectsTable2A57950B' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Construct2StandardFunctionServiceRole450FEF35", + "logicalId": "DefectsTable2A57950B", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 118, + "startLine": 32, "startColumn": 4, - "endLine": 118, + "endLine": 32, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -7403,19 +8522,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Construct2StandardFunction1EBDBFFA' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'CarApiE5E7ACF5' of type 'AWS::AppSync::GraphQLApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Construct2StandardFunction1EBDBFFA", + "logicalId": "CarApiE5E7ACF5", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::AppSync::GraphQLApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 152, + "startLine": 81, "startColumn": 4, - "endLine": 152, + "endLine": 81, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -7423,19 +8542,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Construct2FunctionWithReservedCEsServiceRoleB80261C4' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'CarApiCarsDataSourceServiceRole82F3FC8A' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Construct2FunctionWithReservedCEsServiceRoleB80261C4", + "logicalId": "CarApiCarsDataSourceServiceRole82F3FC8A", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 175, + "startLine": 107, "startColumn": 4, - "endLine": 175, + "endLine": 107, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -7443,35 +8562,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Construct2FunctionWithReservedCEs89864BB2' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'CarApiDefectsDataSourceServiceRole7EDF6907' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Construct2FunctionWithReservedCEs89864BB2", + "logicalId": "CarApiDefectsDataSourceServiceRole7EDF6907", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 209, + "startLine": 197, "startColumn": 4, - "endLine": 209, + "endLine": 197, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/aws-transfer-sftp-server--IncomingDataStack-dev.template.json": { - "filePath": "cdk/aws-transfer-sftp-server--IncomingDataStack-dev.template.json", + "cdk/appsync-graphql-eventbridge--AppSyncEventBridge.template.json": { + "filePath": "cdk/appsync-graphql-eventbridge--AppSyncEventBridge.template.json", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 12, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 3, + "warnings": 1, + "informational": 16, "debug": 0 }, "suppressed": 0, @@ -7479,126 +8598,113 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'echoFunctionServiceRole1EBD6DF0' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "echoFunction5207BE9B", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 202, + "startColumn": 4, + "endLine": 202, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "IncomingDataBucket3554D835", + "logicalId": "AppSync2EventBridgeApiKey", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::AppSync::ApiKey" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 15, + "startLine": 16, "startColumn": 5, - "endLine": 15, - "endColumn": 16, + "endLine": 16, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt AppSync2EventBridgeApi.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "IncomingDataBucketPolicyCA22042A", + "logicalId": "ItemsSchema", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::AppSync::GraphQLSchema" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 32, + "startLine": 30, "startColumn": 5, - "endLine": 32, - "endColumn": 12, + "endLine": 30, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'IncomingDataBucket3554D835'" + "resolutionSource": "GetAtt AppSync2EventBridgeApi.ApiId" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'IncomingDataBucket3554D835' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "IncomingDataBucket3554D835", + "logicalId": "ItemsDataSource", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::AppSync::DataSource" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/aws-transfer-sftp-server--SftpServerStack-dev.template.json": { - "filePath": "cdk/aws-transfer-sftp-server--SftpServerStack-dev.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 29, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 54, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2508", - "severity": "WARN", - "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", - "source": "ENGINE", - "entity": { - "logicalId": "SftpServerSG79C38856", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress", - "suggestedFix": "Restrict the CIDR range to specific IP addresses", - "category": "Security", - "startLine": 415, + "startLine": 89, "startColumn": 5, - "endLine": 415, - "endColumn": 26, - "ruleDescription": "Security group allows open access to sensitive port", - "phase": "LINT" + "endLine": 89, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt AppSync2EventBridgeApi.ApiId" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCB9E5F0B4", + "logicalId": "ItemsDataSource", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::AppSync::DataSource" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 6, + "startLine": 118, "startColumn": 5, - "endLine": 6, - "endColumn": 15, + "endLine": 118, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -7608,41 +8714,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCB9E5F0B4", + "logicalId": "PutEventMutationResolver", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 9, + "startLine": 134, "startColumn": 5, - "endLine": 9, - "endColumn": 21, + "endLine": 134, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt AppSync2EventBridgeApi.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1SubnetB4246D30", + "logicalId": "PutEventMutationResolver", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.FieldName", "category": "Best Practice", - "startLine": 24, + "startLine": 141, "startColumn": 5, - "endLine": 24, - "endColumn": 22, + "endLine": 141, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -7652,19 +8761,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1SubnetB4246D30", + "logicalId": "PutEventMutationResolver", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.TypeName", "category": "Best Practice", - "startLine": 32, + "startLine": 144, "startColumn": 5, - "endLine": 32, - "endColumn": 15, + "endLine": 144, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -7674,313 +8784,299 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1SubnetB4246D30", + "logicalId": "AppSyncEventBridgeRleAllowEventRuleAppSyncEventBridgeechoFunction7F06E48E35535C50", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 48, + "startLine": 237, "startColumn": 5, - "endLine": 48, - "endColumn": 11, + "endLine": 237, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1RouteTableFEE4B781", + "logicalId": "AppSyncEventBridgeRleAllowEventRuleAppSyncEventBridgeechoFunction7F06E48E35535C50", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 65, + "startLine": 238, "startColumn": 5, - "endLine": 65, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 238, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "GetAtt echoFunction5207BE9B.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", + "logicalId": "AppSyncEventBridgeRleAllowEventRuleAppSyncEventBridgeechoFunction7F06E48E35535C50", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 76, + "startLine": 244, "startColumn": 5, - "endLine": 76, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 244, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", + "logicalId": "AppSyncEventBridgeRleAllowEventRuleAppSyncEventBridgeechoFunction7F06E48E35535C50", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 79, + "startLine": 245, "startColumn": 5, - "endLine": 79, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 245, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt AppSyncEventBridgeRle2A25B9B1.Arn" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'AppSync2EventBridgeApi' of type 'AWS::AppSync::GraphQLApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", + "logicalId": "AppSync2EventBridgeApi", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::AppSync::GraphQLApi" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 90, - "startColumn": 5, - "endLine": 90, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'AppSyncEventBridgeRoleE2F34FE0' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", + "logicalId": "AppSyncEventBridgeRoleE2F34FE0", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 94, - "startColumn": 5, - "endLine": 94, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'" - } + "startLine": 44, + "startColumn": 4, + "endLine": 44, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Resource 'echoFunctionServiceRole1EBD6DF0' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2Subnet74179F39", + "logicalId": "echoFunctionServiceRole1EBD6DF0", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 108, - "startColumn": 5, - "endLine": 108, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 155, + "startColumn": 4, + "endLine": 155, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'echoFunction5207BE9B' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2Subnet74179F39", + "logicalId": "echoFunction5207BE9B", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 116, - "startColumn": 5, - "endLine": 116, + "startLine": 189, + "startColumn": 4, + "endLine": 189, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'AppSyncEventBridgeRle2A25B9B1' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2Subnet74179F39", + "logicalId": "AppSyncEventBridgeRle2A25B9B1", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 132, - "startColumn": 5, - "endLine": 132, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" - } + "startLine": 211, + "startColumn": 4, + "endLine": 211, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/appsync-graphql-http--AppSyncGraphQLHTTPExample.template.json": { + "filePath": "cdk/appsync-graphql-http--AppSyncGraphQLHTTPExample.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 9, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 17, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2RouteTable6F1A15F1", + "logicalId": "PostsApiKey", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::AppSync::ApiKey" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 149, + "startLine": 16, "startColumn": 5, - "endLine": 149, + "endLine": 16, "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "GetAtt PostsApiCdk.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2RouteTableAssociation5A808732", + "logicalId": "PostsSchema", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::AppSync::GraphQLSchema" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 160, + "startLine": 30, "startColumn": 5, - "endLine": 160, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 30, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet2RouteTable6F1A15F1'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt PostsApiCdk.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2RouteTableAssociation5A808732", + "logicalId": "PostsDataSource", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::AppSync::DataSource" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 163, + "startLine": 45, "startColumn": 5, - "endLine": 163, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 45, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet2Subnet74179F39'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt PostsApiCdk.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2DefaultRouteB7481BBA", + "logicalId": "PostsDataSource", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::AppSync::DataSource" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 174, + "startLine": 54, "startColumn": 5, - "endLine": 174, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 54, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -7990,65 +9086,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2DefaultRouteB7481BBA", + "logicalId": "GetOneQueryResolver", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 178, + "startLine": 64, "startColumn": 5, - "endLine": 178, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 64, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet2RouteTable6F1A15F1'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VPCIsolatedSubnet1SubnetEBD00FC6", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 192, - "startColumn": 5, - "endLine": 192, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" + "resolutionSource": "GetAtt PostsApiCdk.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCIsolatedSubnet1SubnetEBD00FC6", + "logicalId": "GetOneQueryResolver", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.FieldName", "category": "Best Practice", - "startLine": 200, + "startLine": 72, "startColumn": 5, - "endLine": 200, + "endLine": 72, "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -8058,142 +9133,137 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCIsolatedSubnet1SubnetEBD00FC6", + "logicalId": "GetOneQueryResolver", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.TypeName", "category": "Best Practice", - "startLine": 216, + "startLine": 77, "startColumn": 5, - "endLine": 216, - "endColumn": 11, + "endLine": 77, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCIsolatedSubnet1RouteTableEB156210", + "logicalId": "GetAllQueryResolver", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 233, + "startLine": 89, "startColumn": 5, - "endLine": 233, + "endLine": 89, "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "GetAtt PostsApiCdk.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCIsolatedSubnet1RouteTableAssociationA2D18F7C", + "logicalId": "GetAllQueryResolver", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.FieldName", "category": "Best Practice", - "startLine": 244, + "startLine": 97, "startColumn": 5, - "endLine": 244, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 97, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCIsolatedSubnet1RouteTableEB156210'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCIsolatedSubnet1RouteTableAssociationA2D18F7C", + "logicalId": "GetAllQueryResolver", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.TypeName", "category": "Best Practice", - "startLine": 247, + "startLine": 102, "startColumn": 5, - "endLine": 247, + "endLine": 102, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCIsolatedSubnet1SubnetEBD00FC6'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCIsolatedSubnet2Subnet4B1C8CAA", + "logicalId": "SaveMutationResolver", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 258, + "startLine": 114, "startColumn": 5, - "endLine": 258, - "endColumn": 22, + "endLine": 114, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt PostsApiCdk.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCIsolatedSubnet2Subnet4B1C8CAA", + "logicalId": "SaveMutationResolver", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.FieldName", "category": "Best Practice", - "startLine": 266, + "startLine": 122, "startColumn": 5, - "endLine": 266, + "endLine": 122, "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -8203,493 +9273,323 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCIsolatedSubnet2Subnet4B1C8CAA", + "logicalId": "SaveMutationResolver", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.TypeName", "category": "Best Practice", - "startLine": 282, + "startLine": 127, "startColumn": 5, - "endLine": 282, - "endColumn": 11, + "endLine": 127, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCIsolatedSubnet2RouteTable9B4F78DC", + "logicalId": "DeleteMutationResolver", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 299, + "startLine": 139, "startColumn": 5, - "endLine": 299, + "endLine": 139, "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "GetAtt PostsApiCdk.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCIsolatedSubnet2RouteTableAssociation7BF8E0EB", + "logicalId": "DeleteMutationResolver", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.FieldName", "category": "Best Practice", - "startLine": 310, + "startLine": 147, "startColumn": 5, - "endLine": 310, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 147, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCIsolatedSubnet2RouteTable9B4F78DC'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCIsolatedSubnet2RouteTableAssociation7BF8E0EB", + "logicalId": "DeleteMutationResolver", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.TypeName", "category": "Best Practice", - "startLine": 313, + "startLine": 152, "startColumn": 5, - "endLine": 313, + "endLine": 152, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCIsolatedSubnet2Subnet4B1C8CAA'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'PostsApiCdk' of type 'AWS::AppSync::GraphQLApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCVPCGW99B986DC", + "logicalId": "PostsApiCdk", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::AppSync::GraphQLApi" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 341, - "startColumn": 5, - "endLine": 341, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SftpServerSG79C38856", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 404, - "startColumn": 5, - "endLine": 404, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SftpServerSG79C38856", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupName", - "category": "Best Practice", - "startLine": 405, - "startColumn": 5, - "endLine": 405, + "startLine": 5, + "startColumn": 4, + "endLine": 5, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SftpServerSG79C38856", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 424, - "startColumn": 5, - "endLine": 424, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Domain' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SFTPServer", - "entityType": "Resource", - "resourceType": "AWS::Transfer::Server" - }, - "propertyPath": "Properties.Domain", - "category": "Best Practice", - "startLine": 453, - "startColumn": 5, - "endLine": 453, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transfer", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/aspects--SampleStack.template.json": { + "filePath": "cdk/aspects--SampleStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 9, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 8, + "informational": 8, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'EndpointDetails' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "SFTPServer", + "logicalId": "Construct1StandardFunctionD5361E84", "entityType": "Resource", - "resourceType": "AWS::Transfer::Server" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.EndpointDetails", - "category": "Best Practice", - "startLine": 454, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 50, "startColumn": 5, - "endLine": 454, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transfer", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'EndpointDetails.AddressAllocationIds' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SFTPServer", - "entityType": "Resource", - "resourceType": "AWS::Transfer::Server" - }, - "propertyPath": "Properties.EndpointDetails.AddressAllocationIds", - "category": "Best Practice", - "startLine": 455, - "startColumn": 6, - "endLine": 455, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transfer", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 50, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "SftpAccessPolicy6C559C82", + "logicalId": "Construct1FunctionWithReservedCEs6458B719", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Description", - "category": "Best Practice", - "startLine": 508, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 107, "startColumn": 5, - "endLine": 508, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 107, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ManagedPolicyName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "SftpAccessPolicy6C559C82", + "logicalId": "Construct2StandardFunction1EBDBFFA", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ManagedPolicyName", - "category": "Best Practice", - "startLine": 509, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 164, "startColumn": 5, - "endLine": 509, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 164, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "SftpAccessPolicy6C559C82", + "logicalId": "Construct2FunctionWithReservedCEs89864BB2", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Path", - "category": "Best Practice", - "startLine": 510, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 221, "startColumn": 5, - "endLine": 510, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 221, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'Construct1StandardFunctionServiceRole716388BA' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "SftpAccessRoleBDBB5CE1", + "logicalId": "Construct1StandardFunctionD5361E84", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 572, - "startColumn": 5, - "endLine": 572, + "startLine": 52, + "startColumn": 4, + "endLine": 52, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SftpLogGroupC79A244B", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "propertyPath": "Properties.LogGroupName", - "category": "Best Practice", - "startLine": 581, - "startColumn": 5, - "endLine": 581, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:/aws/transfer/{ref:SFTPServer})" - } + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ServerId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'Construct1FunctionWithReservedCEsServiceRole21C8F977' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "SFTPUser", + "logicalId": "Construct1FunctionWithReservedCEs6458B719", "entityType": "Resource", - "resourceType": "AWS::Transfer::User" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ServerId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 624, - "startColumn": 5, - "endLine": 624, + "startLine": 109, + "startColumn": 4, + "endLine": 109, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transfer", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt SFTPServer.ServerId" - } + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'Construct2StandardFunctionServiceRole450FEF35' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "SFTPUser", + "logicalId": "Construct2StandardFunction1EBDBFFA", "entityType": "Resource", - "resourceType": "AWS::Transfer::User" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.UserName", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 631, - "startColumn": 5, - "endLine": 631, + "startLine": 166, + "startColumn": 4, + "endLine": 166, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transfer", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MetricFilter1B93B6E5", - "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" - }, - "propertyPath": "Properties.LogGroupName", - "category": "Best Practice", - "startLine": 641, - "startColumn": 5, - "endLine": 641, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'SftpLogGroupC79A244B'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CloudWatchLoggingRole8E23D1D4' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'Construct2FunctionWithReservedCEsServiceRoleB80261C4' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "CloudWatchLoggingRole8E23D1D4", + "logicalId": "Construct2FunctionWithReservedCEs89864BB2", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 351, + "startLine": 223, "startColumn": 4, - "endLine": 351, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endLine": 223, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SftpServerSG79C38856' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'Construct1StandardFunctionServiceRole716388BA' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SftpServerSG79C38856", + "logicalId": "Construct1StandardFunctionServiceRole716388BA", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 403, + "startLine": 5, "startColumn": 4, - "endLine": 403, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -8697,19 +9597,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SftpEIP1' of type 'AWS::EC2::EIP' supports Tags but none are configured", + "message": "Resource 'Construct1StandardFunctionD5361E84' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SftpEIP1", + "logicalId": "Construct1StandardFunctionD5361E84", "entityType": "Resource", - "resourceType": "AWS::EC2::EIP" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 434, + "startLine": 39, "startColumn": 4, - "endLine": 434, + "endLine": 39, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -8717,19 +9617,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SftpEIP2' of type 'AWS::EC2::EIP' supports Tags but none are configured", + "message": "Resource 'Construct1FunctionWithReservedCEsServiceRole21C8F977' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SftpEIP2", + "logicalId": "Construct1FunctionWithReservedCEsServiceRole21C8F977", "entityType": "Resource", - "resourceType": "AWS::EC2::EIP" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 443, + "startLine": 61, "startColumn": 4, - "endLine": 443, + "endLine": 61, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -8737,19 +9637,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SFTPServer' of type 'AWS::Transfer::Server' supports Tags but none are configured", + "message": "Resource 'Construct1FunctionWithReservedCEs6458B719' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SFTPServer", + "logicalId": "Construct1FunctionWithReservedCEs6458B719", "entityType": "Resource", - "resourceType": "AWS::Transfer::Server" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 452, + "startLine": 95, "startColumn": 4, - "endLine": 452, + "endLine": 95, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -8757,19 +9657,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SftpAccessRoleBDBB5CE1' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'Construct2StandardFunctionServiceRole450FEF35' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SftpAccessRoleBDBB5CE1", + "logicalId": "Construct2StandardFunctionServiceRole450FEF35", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 554, + "startLine": 118, "startColumn": 4, - "endLine": 554, + "endLine": 118, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -8777,19 +9677,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SftpLogGroupC79A244B' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Resource 'Construct2StandardFunction1EBDBFFA' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SftpLogGroupC79A244B", + "logicalId": "Construct2StandardFunction1EBDBFFA", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 580, + "startLine": 152, "startColumn": 4, - "endLine": 580, + "endLine": 152, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -8797,19 +9697,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SFTPUser' of type 'AWS::Transfer::User' supports Tags but none are configured", + "message": "Resource 'Construct2FunctionWithReservedCEsServiceRoleB80261C4' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SFTPUser", + "logicalId": "Construct2FunctionWithReservedCEsServiceRoleB80261C4", "entityType": "Resource", - "resourceType": "AWS::Transfer::User" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 605, + "startLine": 175, "startColumn": 4, - "endLine": 605, + "endLine": 175, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -8817,35 +9717,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'AlarmMetricFilter9DBA3966' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Resource 'Construct2FunctionWithReservedCEs89864BB2' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AlarmMetricFilter9DBA3966", + "logicalId": "Construct2FunctionWithReservedCEs89864BB2", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 659, + "startLine": 209, "startColumn": 4, - "endLine": 659, + "endLine": 209, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/aws-transfer-sftp-server--SftpServerStack-prod.template.json": { - "filePath": "cdk/aws-transfer-sftp-server--SftpServerStack-prod.template.json", + "cdk/aws-transfer-sftp-server--IncomingDataStack-dev.template.json": { + "filePath": "cdk/aws-transfer-sftp-server--IncomingDataStack-dev.template.json", "status": "OK", "metadata": { - "resourcesScanned": 29, + "resourcesScanned": 3, "counts": { "fatal": 0, "errors": 0, - "warnings": 1, - "informational": 54, + "warnings": 0, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -8854,12 +9754,96 @@ }, "diagnostics": [ { - "ruleId": "W2508", - "severity": "WARN", - "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SftpServerSG79C38856", + "logicalId": "IncomingDataBucket3554D835", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.BucketName", + "category": "Best Practice", + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "IncomingDataBucketPolicyCA22042A", + "entityType": "Resource", + "resourceType": "AWS::S3::BucketPolicy" + }, + "propertyPath": "Properties.Bucket", + "category": "Best Practice", + "startLine": 32, + "startColumn": 5, + "endLine": 32, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'IncomingDataBucket3554D835'" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'IncomingDataBucket3554D835' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "IncomingDataBucket3554D835", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/aws-transfer-sftp-server--SftpServerStack-dev.template.json": { + "filePath": "cdk/aws-transfer-sftp-server--SftpServerStack-dev.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 29, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 54, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2508", + "severity": "WARN", + "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", + "source": "ENGINE", + "entity": { + "logicalId": "SftpServerSG79C38856", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, @@ -10126,148 +11110,16 @@ } ] }, - "cdk/backup-s3--AwsBackupS3Stack.template.json": { - "filePath": "cdk/backup-s3--AwsBackupS3Stack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 8, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 5, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "testBucketPolicy47484917", - "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" - }, - "propertyPath": "Properties.Bucket", - "category": "Best Practice", - "startLine": 40, - "startColumn": 5, - "endLine": 40, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'testBucketDF4D7D1A'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BackupVaultName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Vault23237E5B", - "entityType": "Resource", - "resourceType": "AWS::Backup::BackupVault" - }, - "propertyPath": "Properties.BackupVaultName", - "category": "Best Practice", - "startLine": 216, - "startColumn": 5, - "endLine": 216, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BackupPlanId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "demobackupplanSelectionF4B47C20", - "entityType": "Resource", - "resourceType": "AWS::Backup::BackupSelection" - }, - "propertyPath": "Properties.BackupPlanId", - "category": "Best Practice", - "startLine": 253, - "startColumn": 5, - "endLine": 253, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt demobackupplan32CA9462.BackupPlanId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BackupSelection' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "demobackupplanSelectionF4B47C20", - "entityType": "Resource", - "resourceType": "AWS::Backup::BackupSelection" - }, - "propertyPath": "Properties.BackupSelection", - "category": "Best Practice", - "startLine": 259, - "startColumn": 5, - "endLine": 259, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Role1ABCC5F0' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Role1ABCC5F0", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 89, - "startColumn": 4, - "endLine": 89, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/batch-ecr-openmp--AwsBatchOpenmpBenchmarkStack.template.json": { - "filePath": "cdk/batch-ecr-openmp--AwsBatchOpenmpBenchmarkStack.template.json", + "cdk/aws-transfer-sftp-server--SftpServerStack-prod.template.json": { + "filePath": "cdk/aws-transfer-sftp-server--SftpServerStack-prod.template.json", "status": "OK", "metadata": { - "resourcesScanned": 41, + "resourcesScanned": 29, "counts": { "fatal": 0, "errors": 0, - "warnings": 2, - "informational": 62, + "warnings": 1, + "informational": 54, "debug": 0 }, "suppressed": 0, @@ -10276,67 +11128,24 @@ }, "diagnostics": [ { - "ruleId": "W3005", - "severity": "WARN", - "message": "'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 556, - "startColumn": 4, - "endLine": 556, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", + "ruleId": "W2508", "severity": "WARN", - "message": "'JobSubmitterFunctionServiceRole55AD6E92' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "JobSubmitterFunctionFAE645C8", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 1073, - "startColumn": 4, - "endLine": 1073, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RepositoryName' is create-only; updating it will cause resource replacement", + "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", "source": "ENGINE", "entity": { - "logicalId": "OpenMPRepositoryAB8BB3BC", + "logicalId": "SftpServerSG79C38856", "entityType": "Resource", - "resourceType": "AWS::ECR::Repository" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.RepositoryName", - "category": "Best Practice", - "startLine": 10, + "propertyPath": "Properties.SecurityGroupIngress", + "suggestedFix": "Restrict the CIDR range to specific IP addresses", + "category": "Security", + "startLine": 415, "startColumn": 5, - "endLine": 10, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ecr.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 415, + "endColumn": 26, + "ruleDescription": "Security group allows open access to sensitive port", + "phase": "LINT" }, { "ruleId": "I9001", @@ -10344,15 +11153,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCF5EF58EB", + "logicalId": "VPCB9E5F0B4", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 21, + "startLine": 6, "startColumn": 5, - "endLine": 21, + "endLine": 6, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -10366,15 +11175,15 @@ "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCF5EF58EB", + "logicalId": "VPCB9E5F0B4", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 24, + "startLine": 9, "startColumn": 5, - "endLine": 24, + "endLine": 9, "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -10388,15 +11197,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet1Subnet4888FED8", + "logicalId": "VPCPublicSubnet1SubnetB4246D30", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 41, + "startLine": 24, "startColumn": 5, - "endLine": 41, + "endLine": 24, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -10410,15 +11219,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet1Subnet4888FED8", + "logicalId": "VPCPublicSubnet1SubnetB4246D30", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 49, + "startLine": 32, "startColumn": 5, - "endLine": 49, + "endLine": 32, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -10432,21 +11241,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet1Subnet4888FED8", + "logicalId": "VPCPublicSubnet1SubnetB4246D30", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 65, + "startLine": 48, "startColumn": 5, - "endLine": 65, + "endLine": 48, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { @@ -10455,22 +11264,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet1RouteTableDADE381A", + "logicalId": "VPCPublicSubnet1RouteTableFEE4B781", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 82, + "startLine": 65, "startColumn": 5, - "endLine": 82, + "endLine": 65, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { @@ -10479,22 +11288,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet1RouteTableAssociationB4BDC09E", + "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 93, + "startLine": 76, "startColumn": 5, - "endLine": 93, + "endLine": 76, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCPublicSubnet1RouteTableDADE381A'", + "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'", "extra": { "replacement_strategy": "delete_then_create" } @@ -10506,22 +11315,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet1RouteTableAssociationB4BDC09E", + "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 96, + "startLine": 79, "startColumn": 5, - "endLine": 96, + "endLine": 79, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCPublicSubnet1Subnet4888FED8'", + "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'", "extra": { "replacement_strategy": "delete_then_create" } @@ -10533,15 +11342,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet1DefaultRoute5FD9D646", + "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 107, + "startLine": 90, "startColumn": 5, - "endLine": 107, + "endLine": 90, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -10556,68 +11365,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet1DefaultRoute5FD9D646", + "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 111, + "startLine": 94, "startColumn": 5, - "endLine": 111, + "endLine": 94, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCPublicSubnet1RouteTableDADE381A'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenMPVPCPublicSubnet1NATGateway29BD3E8B", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.AllocationId", - "category": "Best Practice", - "startLine": 140, - "startColumn": 5, - "endLine": 140, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt OpenMPVPCPublicSubnet1EIP53BE2C61.AllocationId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenMPVPCPublicSubnet1NATGateway29BD3E8B", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 146, - "startColumn": 5, - "endLine": 146, - "endColumn": 14, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCPublicSubnet1Subnet4888FED8'" + "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'" } }, { @@ -10626,15 +11389,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet2Subnet7642A39F", + "logicalId": "VPCPublicSubnet2Subnet74179F39", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 167, + "startLine": 108, "startColumn": 5, - "endLine": 167, + "endLine": 108, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -10648,15 +11411,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet2Subnet7642A39F", + "logicalId": "VPCPublicSubnet2Subnet74179F39", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 175, + "startLine": 116, "startColumn": 5, - "endLine": 175, + "endLine": 116, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -10670,21 +11433,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet2Subnet7642A39F", + "logicalId": "VPCPublicSubnet2Subnet74179F39", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 191, + "startLine": 132, "startColumn": 5, - "endLine": 191, + "endLine": 132, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { @@ -10693,22 +11456,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet2RouteTable29142B7F", + "logicalId": "VPCPublicSubnet2RouteTable6F1A15F1", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 208, + "startLine": 149, "startColumn": 5, - "endLine": 208, + "endLine": 149, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { @@ -10717,22 +11480,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet2RouteTableAssociationA72D6947", + "logicalId": "VPCPublicSubnet2RouteTableAssociation5A808732", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 219, + "startLine": 160, "startColumn": 5, - "endLine": 219, + "endLine": 160, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCPublicSubnet2RouteTable29142B7F'", + "resolutionSource": "Ref to 'VPCPublicSubnet2RouteTable6F1A15F1'", "extra": { "replacement_strategy": "delete_then_create" } @@ -10744,22 +11507,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet2RouteTableAssociationA72D6947", + "logicalId": "VPCPublicSubnet2RouteTableAssociation5A808732", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 222, + "startLine": 163, "startColumn": 5, - "endLine": 222, + "endLine": 163, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCPublicSubnet2Subnet7642A39F'", + "resolutionSource": "Ref to 'VPCPublicSubnet2Subnet74179F39'", "extra": { "replacement_strategy": "delete_then_create" } @@ -10771,15 +11534,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet2DefaultRouteF2C059E2", + "logicalId": "VPCPublicSubnet2DefaultRouteB7481BBA", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 233, + "startLine": 174, "startColumn": 5, - "endLine": 233, + "endLine": 174, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -10794,22 +11557,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet2DefaultRouteF2C059E2", + "logicalId": "VPCPublicSubnet2DefaultRouteB7481BBA", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 237, + "startLine": 178, "startColumn": 5, - "endLine": 237, + "endLine": 178, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCPublicSubnet2RouteTable29142B7F'" + "resolutionSource": "Ref to 'VPCPublicSubnet2RouteTable6F1A15F1'" } }, { @@ -10818,15 +11581,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPrivateSubnet1Subnet95C8C324", + "logicalId": "VPCIsolatedSubnet1SubnetEBD00FC6", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 251, + "startLine": 192, "startColumn": 5, - "endLine": 251, + "endLine": 192, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -10840,15 +11603,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPrivateSubnet1Subnet95C8C324", + "logicalId": "VPCIsolatedSubnet1SubnetEBD00FC6", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 259, + "startLine": 200, "startColumn": 5, - "endLine": 259, + "endLine": 200, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -10862,21 +11625,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPrivateSubnet1Subnet95C8C324", + "logicalId": "VPCIsolatedSubnet1SubnetEBD00FC6", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 275, + "startLine": 216, "startColumn": 5, - "endLine": 275, + "endLine": 216, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { @@ -10885,22 +11648,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPrivateSubnet1RouteTable3DBEEA60", + "logicalId": "VPCIsolatedSubnet1RouteTableEB156210", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 292, + "startLine": 233, "startColumn": 5, - "endLine": 292, + "endLine": 233, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { @@ -10909,22 +11672,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPrivateSubnet1RouteTableAssociationD2C7C327", + "logicalId": "VPCIsolatedSubnet1RouteTableAssociationA2D18F7C", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 303, + "startLine": 244, "startColumn": 5, - "endLine": 303, + "endLine": 244, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCPrivateSubnet1RouteTable3DBEEA60'", + "resolutionSource": "Ref to 'VPCIsolatedSubnet1RouteTableEB156210'", "extra": { "replacement_strategy": "delete_then_create" } @@ -10936,89 +11699,42 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPrivateSubnet1RouteTableAssociationD2C7C327", + "logicalId": "VPCIsolatedSubnet1RouteTableAssociationA2D18F7C", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 306, + "startLine": 247, "startColumn": 5, - "endLine": 306, + "endLine": 247, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCPrivateSubnet1Subnet95C8C324'", + "resolutionSource": "Ref to 'VPCIsolatedSubnet1SubnetEBD00FC6'", "extra": { "replacement_strategy": "delete_then_create" } } }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenMPVPCPrivateSubnet1DefaultRoute7EB9EABF", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.DestinationCidrBlock", - "category": "Best Practice", - "startLine": 317, - "startColumn": 5, - "endLine": 317, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenMPVPCPrivateSubnet1DefaultRoute7EB9EABF", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 321, - "startColumn": 5, - "endLine": 321, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCPrivateSubnet1RouteTable3DBEEA60'" - } - }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPrivateSubnet2Subnet039333AF", + "logicalId": "VPCIsolatedSubnet2Subnet4B1C8CAA", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 332, + "startLine": 258, "startColumn": 5, - "endLine": 332, + "endLine": 258, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -11032,15 +11748,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPrivateSubnet2Subnet039333AF", + "logicalId": "VPCIsolatedSubnet2Subnet4B1C8CAA", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 340, + "startLine": 266, "startColumn": 5, - "endLine": 340, + "endLine": 266, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -11054,21 +11770,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPrivateSubnet2Subnet039333AF", + "logicalId": "VPCIsolatedSubnet2Subnet4B1C8CAA", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 356, + "startLine": 282, "startColumn": 5, - "endLine": 356, + "endLine": 282, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { @@ -11077,22 +11793,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPrivateSubnet2RouteTable7EFB668D", + "logicalId": "VPCIsolatedSubnet2RouteTable9B4F78DC", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 373, + "startLine": 299, "startColumn": 5, - "endLine": 373, + "endLine": 299, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { @@ -11101,22 +11817,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPrivateSubnet2RouteTableAssociation50872E14", + "logicalId": "VPCIsolatedSubnet2RouteTableAssociation7BF8E0EB", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 384, + "startLine": 310, "startColumn": 5, - "endLine": 384, + "endLine": 310, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCPrivateSubnet2RouteTable7EFB668D'", + "resolutionSource": "Ref to 'VPCIsolatedSubnet2RouteTable9B4F78DC'", "extra": { "replacement_strategy": "delete_then_create" } @@ -11128,22 +11844,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPrivateSubnet2RouteTableAssociation50872E14", + "logicalId": "VPCIsolatedSubnet2RouteTableAssociation7BF8E0EB", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 387, + "startLine": 313, "startColumn": 5, - "endLine": 387, + "endLine": 313, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCPrivateSubnet2Subnet039333AF'", + "resolutionSource": "Ref to 'VPCIsolatedSubnet2Subnet4B1C8CAA'", "extra": { "replacement_strategy": "delete_then_create" } @@ -11152,138 +11868,137 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPrivateSubnet2DefaultRouteA5C36AF6", + "logicalId": "VPCVPCGW99B986DC", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 398, + "startLine": 341, "startColumn": 5, - "endLine": 398, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 341, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPrivateSubnet2DefaultRouteA5C36AF6", + "logicalId": "SftpServerSG79C38856", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 402, + "startLine": 404, "startColumn": 5, - "endLine": 402, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 404, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCPrivateSubnet2RouteTable7EFB668D'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCVPCGWDD05DB82", + "logicalId": "SftpServerSG79C38856", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.GroupName", "category": "Best Practice", - "startLine": 430, + "startLine": 405, "startColumn": 5, - "endLine": 430, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "endLine": 405, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BatchSecurityGroup77EC865F", + "logicalId": "SftpServerSG79C38856", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 568, + "startLine": 424, "startColumn": 5, - "endLine": 568, - "endColumn": 22, + "endLine": 424, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Domain' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BatchSecurityGroup77EC865F", + "logicalId": "SFTPServer", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Transfer::Server" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Domain", "category": "Best Practice", - "startLine": 576, + "startLine": 453, "startColumn": 5, - "endLine": 576, - "endColumn": 11, + "endLine": 453, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transfer", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ComputeResources.InstanceRole' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'EndpointDetails' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPComputeEnvironment", + "logicalId": "SFTPServer", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::Transfer::Server" }, - "propertyPath": "Properties.ComputeResources.InstanceRole", + "propertyPath": "Properties.EndpointDetails", "category": "Best Practice", - "startLine": 749, - "startColumn": 6, - "endLine": 749, - "endColumn": 19, + "startLine": 454, + "startColumn": 5, + "endLine": 454, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transfer", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -11293,19 +12008,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ComputeResources.InstanceTypes' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'EndpointDetails.AddressAllocationIds' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPComputeEnvironment", + "logicalId": "SFTPServer", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::Transfer::Server" }, - "propertyPath": "Properties.ComputeResources.InstanceTypes", + "propertyPath": "Properties.EndpointDetails.AddressAllocationIds", "category": "Best Practice", - "startLine": 755, + "startLine": 455, "startColumn": 6, - "endLine": 755, - "endColumn": 20, + "endLine": 455, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transfer", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -11315,85 +12031,89 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ComputeResources.SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPComputeEnvironment", + "logicalId": "SftpAccessPolicy6C559C82", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.ComputeResources.SecurityGroupIds", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 764, - "startColumn": 6, - "endLine": 764, - "endColumn": 23, + "startLine": 508, + "startColumn": 5, + "endLine": 508, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ComputeResources.Subnets' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ManagedPolicyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPComputeEnvironment", + "logicalId": "SftpAccessPolicy6C559C82", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.ComputeResources.Subnets", + "propertyPath": "Properties.ManagedPolicyName", "category": "Best Practice", - "startLine": 772, - "startColumn": 6, - "endLine": 772, - "endColumn": 14, + "startLine": 509, + "startColumn": 5, + "endLine": 509, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ComputeResources.Type' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPComputeEnvironment", + "logicalId": "SftpAccessPolicy6C559C82", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.ComputeResources.Type", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 780, - "startColumn": 6, - "endLine": 780, - "endColumn": 11, + "startLine": 510, + "startColumn": 5, + "endLine": 510, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPComputeEnvironment", + "logicalId": "SftpAccessRoleBDBB5CE1", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 789, + "startLine": 572, "startColumn": 5, - "endLine": 789, - "endColumn": 10, + "endLine": 572, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -11406,103 +12126,114 @@ "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPLogGroup95FEB040", + "logicalId": "SftpLogGroupC79A244B", "entityType": "Resource", "resourceType": "AWS::Logs::LogGroup" }, "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 850, + "startLine": 581, "startColumn": 5, - "endLine": 850, + "endLine": 581, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:/aws/transfer/{ref:SFTPServer})" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'ServerId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "JobSubmitterFunctionLogGroupF7938D09", + "logicalId": "SFTPUser", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Transfer::User" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.ServerId", "category": "Best Practice", - "startLine": 1084, + "startLine": 624, "startColumn": 5, - "endLine": 1084, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "endLine": 624, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transfer", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:/aws/lambda/{ref:JobSubmitterFunctionFAE645C8})" + "resolutionSource": "GetAtt SFTPServer.ServerId" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'OpenMPRepositoryAB8BB3BC' of type 'AWS::ECR::Repository' supports Tags but none are configured", + "message": "Property 'UserName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPRepositoryAB8BB3BC", + "logicalId": "SFTPUser", "entityType": "Resource", - "resourceType": "AWS::ECR::Repository" + "resourceType": "AWS::Transfer::User" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.UserName", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 631, + "startColumn": 5, + "endLine": 631, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transfer", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0", + "logicalId": "MetricFilter1B93B6E5", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Logs::MetricFilter" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 465, - "startColumn": 4, - "endLine": 465, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 641, + "startColumn": 5, + "endLine": 641, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SftpLogGroupC79A244B'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'CloudWatchLoggingRole8E23D1D4' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", + "logicalId": "CloudWatchLoggingRole8E23D1D4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 537, + "startLine": 351, "startColumn": 4, - "endLine": 537, + "endLine": 351, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -11510,19 +12241,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BatchSecurityGroup77EC865F' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'SftpServerSG79C38856' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BatchSecurityGroup77EC865F", + "logicalId": "SftpServerSG79C38856", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 567, + "startLine": 403, "startColumn": 4, - "endLine": 567, + "endLine": 403, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -11530,19 +12261,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BatchServiceRole57930367' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'SftpEIP1' of type 'AWS::EC2::EIP' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BatchServiceRole57930367", + "logicalId": "SftpEIP1", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::EIP" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 586, + "startLine": 434, "startColumn": 4, - "endLine": 586, + "endLine": 434, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -11550,19 +12281,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BatchInstanceRole8DB66C4C' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'SftpEIP2' of type 'AWS::EC2::EIP' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BatchInstanceRole8DB66C4C", + "logicalId": "SftpEIP2", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::EIP" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 620, + "startLine": 443, "startColumn": 4, - "endLine": 620, + "endLine": 443, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -11570,19 +12301,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'OpenMPComputeEnvironment' of type 'AWS::Batch::ComputeEnvironment' supports Tags but none are configured", + "message": "Resource 'SFTPServer' of type 'AWS::Transfer::Server' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "OpenMPComputeEnvironment", + "logicalId": "SFTPServer", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::Transfer::Server" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 747, + "startLine": 452, "startColumn": 4, - "endLine": 747, + "endLine": 452, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -11590,19 +12321,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'OpenMPJobQueue' of type 'AWS::Batch::JobQueue' supports Tags but none are configured", + "message": "Resource 'SftpAccessRoleBDBB5CE1' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "OpenMPJobQueue", + "logicalId": "SftpAccessRoleBDBB5CE1", "entityType": "Resource", - "resourceType": "AWS::Batch::JobQueue" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 797, + "startLine": 554, "startColumn": 4, - "endLine": 797, + "endLine": 554, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -11610,19 +12341,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BatchJobRole37A83758' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'SftpLogGroupC79A244B' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BatchJobRole37A83758", + "logicalId": "SftpLogGroupC79A244B", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Logs::LogGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 815, + "startLine": 580, "startColumn": 4, - "endLine": 815, + "endLine": 580, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -11630,19 +12361,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'OpenMPLogGroup95FEB040' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Resource 'SFTPUser' of type 'AWS::Transfer::User' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "OpenMPLogGroup95FEB040", + "logicalId": "SFTPUser", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Transfer::User" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 849, + "startLine": 605, "startColumn": 4, - "endLine": 849, + "endLine": 605, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -11650,95 +12381,167 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'OpenMPJobDefinition' of type 'AWS::Batch::JobDefinition' supports Tags but none are configured", + "message": "Resource 'AlarmMetricFilter9DBA3966' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "OpenMPJobDefinition", + "logicalId": "AlarmMetricFilter9DBA3966", "entityType": "Resource", - "resourceType": "AWS::Batch::JobDefinition" + "resourceType": "AWS::CloudWatch::Alarm" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 861, + "startLine": 659, "startColumn": 4, - "endLine": 861, + "endLine": 659, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "cdk/backup-s3--AwsBackupS3Stack.template.json": { + "filePath": "cdk/backup-s3--AwsBackupS3Stack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 8, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 5, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'JobSubmitterFunctionServiceRole55AD6E92' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "JobSubmitterFunctionServiceRole55AD6E92", + "logicalId": "testBucketPolicy47484917", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 972, - "startColumn": 4, - "endLine": 972, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 40, + "startColumn": 5, + "endLine": 40, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'testBucketDF4D7D1A'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'JobSubmitterFunctionFAE645C8' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'BackupVaultName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "JobSubmitterFunctionFAE645C8", + "logicalId": "Vault23237E5B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Backup::BackupVault" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BackupVaultName", "category": "Best Practice", - "startLine": 1034, - "startColumn": 4, - "endLine": 1034, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 216, + "startColumn": 5, + "endLine": 216, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BackupPlanId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "demobackupplanSelectionF4B47C20", + "entityType": "Resource", + "resourceType": "AWS::Backup::BackupSelection" + }, + "propertyPath": "Properties.BackupPlanId", + "category": "Best Practice", + "startLine": 253, + "startColumn": 5, + "endLine": 253, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt demobackupplan32CA9462.BackupPlanId" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BackupSelection' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "demobackupplanSelectionF4B47C20", + "entityType": "Resource", + "resourceType": "AWS::Backup::BackupSelection" + }, + "propertyPath": "Properties.BackupSelection", + "category": "Best Practice", + "startLine": 259, + "startColumn": 5, + "endLine": 259, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'JobSubmitterFunctionLogGroupF7938D09' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Resource 'Role1ABCC5F0' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "JobSubmitterFunctionLogGroupF7938D09", + "logicalId": "Role1ABCC5F0", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1083, + "startLine": 89, "startColumn": 4, - "endLine": 1083, + "endLine": 89, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/classic-load-balancer--LoadBalancerStack.template.json": { - "filePath": "cdk/classic-load-balancer--LoadBalancerStack.template.json", + "cdk/batch-ecr-openmp--AwsBatchOpenmpBenchmarkStack.template.json": { + "filePath": "cdk/batch-ecr-openmp--AwsBatchOpenmpBenchmarkStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 33, + "resourcesScanned": 41, "counts": { "fatal": 0, "errors": 0, - "warnings": 1, - "informational": 65, + "warnings": 2, + "informational": 62, "debug": 0 }, "suppressed": 0, @@ -11747,23 +12550,67 @@ }, "diagnostics": [ { - "ruleId": "W3697", + "ruleId": "W3005", "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "message": "'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Function" }, - "category": "Deprecation", - "startLine": 551, - "startColumn": 3, - "endLine": 551, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 556, + "startColumn": 4, + "endLine": 556, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'JobSubmitterFunctionServiceRole55AD6E92' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "JobSubmitterFunctionFAE645C8", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1073, + "startColumn": 4, + "endLine": 1073, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RepositoryName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenMPRepositoryAB8BB3BC", + "entityType": "Resource", + "resourceType": "AWS::ECR::Repository" + }, + "propertyPath": "Properties.RepositoryName", + "category": "Best Practice", + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ecr.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", @@ -11771,15 +12618,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCB9E5F0B4", + "logicalId": "OpenMPVPCF5EF58EB", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 6, + "startLine": 21, "startColumn": 5, - "endLine": 6, + "endLine": 21, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -11793,15 +12640,15 @@ "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCB9E5F0B4", + "logicalId": "OpenMPVPCF5EF58EB", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 9, + "startLine": 24, "startColumn": 5, - "endLine": 9, + "endLine": 24, "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -11815,15 +12662,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1SubnetB4246D30", + "logicalId": "OpenMPVPCPublicSubnet1Subnet4888FED8", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 24, + "startLine": 41, "startColumn": 5, - "endLine": 24, + "endLine": 41, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -11837,15 +12684,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1SubnetB4246D30", + "logicalId": "OpenMPVPCPublicSubnet1Subnet4888FED8", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 32, + "startLine": 49, "startColumn": 5, - "endLine": 32, + "endLine": 49, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -11859,21 +12706,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1SubnetB4246D30", + "logicalId": "OpenMPVPCPublicSubnet1Subnet4888FED8", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 48, + "startLine": 65, "startColumn": 5, - "endLine": 48, + "endLine": 65, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" } }, { @@ -11882,22 +12729,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1RouteTableFEE4B781", + "logicalId": "OpenMPVPCPublicSubnet1RouteTableDADE381A", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 65, + "startLine": 82, "startColumn": 5, - "endLine": 65, + "endLine": 82, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" } }, { @@ -11906,22 +12753,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", + "logicalId": "OpenMPVPCPublicSubnet1RouteTableAssociationB4BDC09E", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 76, + "startLine": 93, "startColumn": 5, - "endLine": 76, + "endLine": 93, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'", + "resolutionSource": "Ref to 'OpenMPVPCPublicSubnet1RouteTableDADE381A'", "extra": { "replacement_strategy": "delete_then_create" } @@ -11933,22 +12780,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", + "logicalId": "OpenMPVPCPublicSubnet1RouteTableAssociationB4BDC09E", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 79, + "startLine": 96, "startColumn": 5, - "endLine": 79, + "endLine": 96, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'", + "resolutionSource": "Ref to 'OpenMPVPCPublicSubnet1Subnet4888FED8'", "extra": { "replacement_strategy": "delete_then_create" } @@ -11960,15 +12807,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", + "logicalId": "OpenMPVPCPublicSubnet1DefaultRoute5FD9D646", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 90, + "startLine": 107, "startColumn": 5, - "endLine": 90, + "endLine": 107, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -11983,22 +12830,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", + "logicalId": "OpenMPVPCPublicSubnet1DefaultRoute5FD9D646", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 94, + "startLine": 111, "startColumn": 5, - "endLine": 94, + "endLine": 111, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'" + "resolutionSource": "Ref to 'OpenMPVPCPublicSubnet1RouteTableDADE381A'" } }, { @@ -12007,21 +12854,21 @@ "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1NATGatewayE0556630", + "logicalId": "OpenMPVPCPublicSubnet1NATGateway29BD3E8B", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 123, + "startLine": 140, "startColumn": 5, - "endLine": 123, + "endLine": 140, "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt VPCPublicSubnet1EIP6AD938E8.AllocationId" + "resolutionSource": "GetAtt OpenMPVPCPublicSubnet1EIP53BE2C61.AllocationId" } }, { @@ -12030,21 +12877,21 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1NATGatewayE0556630", + "logicalId": "OpenMPVPCPublicSubnet1NATGateway29BD3E8B", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 129, + "startLine": 146, "startColumn": 5, - "endLine": 129, + "endLine": 146, "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'" + "resolutionSource": "Ref to 'OpenMPVPCPublicSubnet1Subnet4888FED8'" } }, { @@ -12053,15 +12900,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2Subnet74179F39", + "logicalId": "OpenMPVPCPublicSubnet2Subnet7642A39F", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 150, + "startLine": 167, "startColumn": 5, - "endLine": 150, + "endLine": 167, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -12075,15 +12922,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2Subnet74179F39", + "logicalId": "OpenMPVPCPublicSubnet2Subnet7642A39F", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 158, + "startLine": 175, "startColumn": 5, - "endLine": 158, + "endLine": 175, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -12097,21 +12944,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2Subnet74179F39", + "logicalId": "OpenMPVPCPublicSubnet2Subnet7642A39F", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 174, + "startLine": 191, "startColumn": 5, - "endLine": 174, + "endLine": 191, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" } }, { @@ -12120,22 +12967,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2RouteTable6F1A15F1", + "logicalId": "OpenMPVPCPublicSubnet2RouteTable29142B7F", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 191, + "startLine": 208, "startColumn": 5, - "endLine": 191, + "endLine": 208, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" } }, { @@ -12144,22 +12991,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2RouteTableAssociation5A808732", + "logicalId": "OpenMPVPCPublicSubnet2RouteTableAssociationA72D6947", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 202, + "startLine": 219, "startColumn": 5, - "endLine": 202, + "endLine": 219, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet2RouteTable6F1A15F1'", + "resolutionSource": "Ref to 'OpenMPVPCPublicSubnet2RouteTable29142B7F'", "extra": { "replacement_strategy": "delete_then_create" } @@ -12171,22 +13018,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2RouteTableAssociation5A808732", + "logicalId": "OpenMPVPCPublicSubnet2RouteTableAssociationA72D6947", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 205, + "startLine": 222, "startColumn": 5, - "endLine": 205, + "endLine": 222, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet2Subnet74179F39'", + "resolutionSource": "Ref to 'OpenMPVPCPublicSubnet2Subnet7642A39F'", "extra": { "replacement_strategy": "delete_then_create" } @@ -12198,15 +13045,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2DefaultRouteB7481BBA", + "logicalId": "OpenMPVPCPublicSubnet2DefaultRouteF2C059E2", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 216, + "startLine": 233, "startColumn": 5, - "endLine": 216, + "endLine": 233, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -12221,68 +13068,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2DefaultRouteB7481BBA", + "logicalId": "OpenMPVPCPublicSubnet2DefaultRouteF2C059E2", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 220, + "startLine": 237, "startColumn": 5, - "endLine": 220, + "endLine": 237, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet2RouteTable6F1A15F1'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VPCPublicSubnet2NATGateway3C070193", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.AllocationId", - "category": "Best Practice", - "startLine": 249, - "startColumn": 5, - "endLine": 249, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt VPCPublicSubnet2EIP4947BC00.AllocationId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VPCPublicSubnet2NATGateway3C070193", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 255, - "startColumn": 5, - "endLine": 255, - "endColumn": 14, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet2Subnet74179F39'" + "resolutionSource": "Ref to 'OpenMPVPCPublicSubnet2RouteTable29142B7F'" } }, { @@ -12291,15 +13092,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", + "logicalId": "OpenMPVPCPrivateSubnet1Subnet95C8C324", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 276, + "startLine": 251, "startColumn": 5, - "endLine": 276, + "endLine": 251, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -12313,15 +13114,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", + "logicalId": "OpenMPVPCPrivateSubnet1Subnet95C8C324", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 284, + "startLine": 259, "startColumn": 5, - "endLine": 284, + "endLine": 259, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -12335,21 +13136,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", + "logicalId": "OpenMPVPCPrivateSubnet1Subnet95C8C324", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 300, + "startLine": 275, "startColumn": 5, - "endLine": 300, + "endLine": 275, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" } }, { @@ -12358,22 +13159,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1RouteTableBE8A6027", + "logicalId": "OpenMPVPCPrivateSubnet1RouteTable3DBEEA60", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 317, + "startLine": 292, "startColumn": 5, - "endLine": 317, + "endLine": 292, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" } }, { @@ -12382,22 +13183,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1RouteTableAssociation347902D1", + "logicalId": "OpenMPVPCPrivateSubnet1RouteTableAssociationD2C7C327", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 328, + "startLine": 303, "startColumn": 5, - "endLine": 328, + "endLine": 303, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet1RouteTableBE8A6027'", + "resolutionSource": "Ref to 'OpenMPVPCPrivateSubnet1RouteTable3DBEEA60'", "extra": { "replacement_strategy": "delete_then_create" } @@ -12409,22 +13210,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1RouteTableAssociation347902D1", + "logicalId": "OpenMPVPCPrivateSubnet1RouteTableAssociationD2C7C327", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 331, + "startLine": 306, "startColumn": 5, - "endLine": 331, + "endLine": 306, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet1Subnet8BCA10E0'", + "resolutionSource": "Ref to 'OpenMPVPCPrivateSubnet1Subnet95C8C324'", "extra": { "replacement_strategy": "delete_then_create" } @@ -12436,15 +13237,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1DefaultRouteAE1D6490", + "logicalId": "OpenMPVPCPrivateSubnet1DefaultRoute7EB9EABF", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 342, + "startLine": 317, "startColumn": 5, - "endLine": 342, + "endLine": 317, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -12459,22 +13260,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1DefaultRouteAE1D6490", + "logicalId": "OpenMPVPCPrivateSubnet1DefaultRoute7EB9EABF", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 346, + "startLine": 321, "startColumn": 5, - "endLine": 346, + "endLine": 321, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet1RouteTableBE8A6027'" + "resolutionSource": "Ref to 'OpenMPVPCPrivateSubnet1RouteTable3DBEEA60'" } }, { @@ -12483,15 +13284,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2SubnetCFCDAA7A", + "logicalId": "OpenMPVPCPrivateSubnet2Subnet039333AF", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 357, + "startLine": 332, "startColumn": 5, - "endLine": 357, + "endLine": 332, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -12505,15 +13306,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2SubnetCFCDAA7A", + "logicalId": "OpenMPVPCPrivateSubnet2Subnet039333AF", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 365, + "startLine": 340, "startColumn": 5, - "endLine": 365, + "endLine": 340, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -12527,21 +13328,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2SubnetCFCDAA7A", + "logicalId": "OpenMPVPCPrivateSubnet2Subnet039333AF", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 381, + "startLine": 356, "startColumn": 5, - "endLine": 381, + "endLine": 356, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" } }, { @@ -12550,22 +13351,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2RouteTable0A19E10E", + "logicalId": "OpenMPVPCPrivateSubnet2RouteTable7EFB668D", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 398, + "startLine": 373, "startColumn": 5, - "endLine": 398, + "endLine": 373, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" } }, { @@ -12574,22 +13375,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2RouteTableAssociation0C73D413", + "logicalId": "OpenMPVPCPrivateSubnet2RouteTableAssociation50872E14", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 409, + "startLine": 384, "startColumn": 5, - "endLine": 409, + "endLine": 384, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet2RouteTable0A19E10E'", + "resolutionSource": "Ref to 'OpenMPVPCPrivateSubnet2RouteTable7EFB668D'", "extra": { "replacement_strategy": "delete_then_create" } @@ -12601,22 +13402,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2RouteTableAssociation0C73D413", + "logicalId": "OpenMPVPCPrivateSubnet2RouteTableAssociation50872E14", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 412, + "startLine": 387, "startColumn": 5, - "endLine": 412, + "endLine": 387, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet2SubnetCFCDAA7A'", + "resolutionSource": "Ref to 'OpenMPVPCPrivateSubnet2Subnet039333AF'", "extra": { "replacement_strategy": "delete_then_create" } @@ -12628,15 +13429,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2DefaultRouteF4F5CFD2", + "logicalId": "OpenMPVPCPrivateSubnet2DefaultRouteA5C36AF6", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 423, + "startLine": 398, "startColumn": 5, - "endLine": 423, + "endLine": 398, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -12651,22 +13452,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2DefaultRouteF4F5CFD2", + "logicalId": "OpenMPVPCPrivateSubnet2DefaultRouteA5C36AF6", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 427, + "startLine": 402, "startColumn": 5, - "endLine": 427, + "endLine": 402, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet2RouteTable0A19E10E'" + "resolutionSource": "Ref to 'OpenMPVPCPrivateSubnet2RouteTable7EFB668D'" } }, { @@ -12675,22 +13476,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCVPCGW99B986DC", + "logicalId": "OpenMPVPCVPCGWDD05DB82", "entityType": "Resource", "resourceType": "AWS::EC2::VPCGatewayAttachment" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 455, + "startLine": 430, "startColumn": 5, - "endLine": 455, + "endLine": 430, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'", + "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'", "extra": { "replacement_strategy": "delete_then_create" } @@ -12702,15 +13503,15 @@ "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroup0525485D", + "logicalId": "BatchSecurityGroup77EC865F", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 466, + "startLine": 568, "startColumn": 5, - "endLine": 466, + "endLine": 568, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -12724,181 +13525,149 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroup0525485D", + "logicalId": "BatchSecurityGroup77EC865F", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 480, + "startLine": 576, "startColumn": 5, - "endLine": 480, + "endLine": 576, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'ComputeResources.InstanceRole' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", + "logicalId": "OpenMPComputeEnvironment", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Batch::ComputeEnvironment" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.ComputeResources.InstanceRole", "category": "Best Practice", - "startLine": 492, - "startColumn": 5, - "endLine": 492, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 749, + "startColumn": 6, + "endLine": 749, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'ComputeResources.InstanceTypes' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", + "logicalId": "OpenMPComputeEnvironment", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Batch::ComputeEnvironment" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.ComputeResources.InstanceTypes", "category": "Best Practice", - "startLine": 493, - "startColumn": 5, - "endLine": 493, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ASGInstanceSecurityGroup0525485D.GroupId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" - }, - "propertyPath": "Properties.IpProtocol", - "category": "Best Practice", - "startLine": 499, - "startColumn": 5, - "endLine": 499, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 755, + "startColumn": 6, + "endLine": 755, + "endColumn": 20, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'ComputeResources.SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", + "logicalId": "OpenMPComputeEnvironment", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Batch::ComputeEnvironment" }, - "propertyPath": "Properties.SourceSecurityGroupId", + "propertyPath": "Properties.ComputeResources.SecurityGroupIds", "category": "Best Practice", - "startLine": 500, - "startColumn": 5, - "endLine": 500, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 764, + "startColumn": 6, + "endLine": 764, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt LBSecurityGroup8A41EA2B.GroupId" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'ComputeResources.Subnets' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", + "logicalId": "OpenMPComputeEnvironment", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Batch::ComputeEnvironment" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.ComputeResources.Subnets", "category": "Best Practice", - "startLine": 506, - "startColumn": 5, - "endLine": 506, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 772, + "startColumn": 6, + "endLine": 772, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", + "message": "Property 'ComputeResources.Type' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "OpenMPComputeEnvironment", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Batch::ComputeEnvironment" }, - "propertyPath": "Properties.IamInstanceProfile", + "propertyPath": "Properties.ComputeResources.Type", "category": "Best Practice", - "startLine": 554, - "startColumn": 5, - "endLine": 554, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "startLine": 780, + "startColumn": 6, + "endLine": 780, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ASGInstanceProfile0A2834D7'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "OpenMPComputeEnvironment", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Batch::ComputeEnvironment" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 557, + "startLine": 789, "startColumn": 5, - "endLine": 557, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 789, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -12908,43 +13677,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "OpenMPLogGroup95FEB040", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 560, + "startLine": 850, "startColumn": 5, - "endLine": 560, + "endLine": 850, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.SecurityGroups", - "category": "Best Practice", - "startLine": 561, - "startColumn": 5, - "endLine": 561, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -12954,318 +13700,283 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is create-only; updating it will cause resource replacement", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "JobSubmitterFunctionLogGroupF7938D09", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 569, + "startLine": 1084, "startColumn": 5, - "endLine": 569, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 1084, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:/aws/lambda/{ref:JobSubmitterFunctionFAE645C8})" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'OpenMPRepositoryAB8BB3BC' of type 'AWS::ECR::Repository' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ASG46ED3070", + "logicalId": "OpenMPRepositoryAB8BB3BC", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::ECR::Repository" }, - "propertyPath": "Properties.LaunchConfigurationName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 583, - "startColumn": 5, - "endLine": 583, - "endColumn": 29, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'ASGLaunchConfigC00AF12B'" - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ASG46ED3070", + "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.VPCZoneIdentifier", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 600, - "startColumn": 5, - "endLine": 600, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 465, + "startColumn": 4, + "endLine": 465, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGroup8A41EA2B", + "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 621, - "startColumn": 5, - "endLine": 621, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 537, + "startColumn": 4, + "endLine": 537, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'BatchSecurityGroup77EC865F' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGroup8A41EA2B", + "logicalId": "BatchSecurityGroup77EC865F", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 631, - "startColumn": 5, - "endLine": 631, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" - } + "startLine": 567, + "startColumn": 4, + "endLine": 567, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'DestinationSecurityGroupId' is create-only; updating it will cause resource replacement", + "message": "Resource 'BatchServiceRole57930367' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", + "logicalId": "BatchServiceRole57930367", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.DestinationSecurityGroupId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 643, - "startColumn": 5, - "endLine": 643, - "endColumn": 32, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ASGInstanceSecurityGroup0525485D.GroupId" - } + "startLine": 586, + "startColumn": 4, + "endLine": 586, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Resource 'BatchInstanceRole8DB66C4C' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", + "logicalId": "BatchInstanceRole8DB66C4C", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 649, - "startColumn": 5, - "endLine": 649, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 620, + "startColumn": 4, + "endLine": 620, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Resource 'OpenMPComputeEnvironment' of type 'AWS::Batch::ComputeEnvironment' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", + "logicalId": "OpenMPComputeEnvironment", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::Batch::ComputeEnvironment" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 650, - "startColumn": 5, - "endLine": 650, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt LBSecurityGroup8A41EA2B.GroupId" - } + "startLine": 747, + "startColumn": 4, + "endLine": 747, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Resource 'OpenMPJobQueue' of type 'AWS::Batch::JobQueue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", + "logicalId": "OpenMPJobQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::Batch::JobQueue" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 656, - "startColumn": 5, - "endLine": 656, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 797, + "startColumn": 4, + "endLine": 797, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Resource 'BatchJobRole37A83758' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", + "logicalId": "BatchJobRole37A83758", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 657, - "startColumn": 5, - "endLine": 657, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 815, + "startColumn": 4, + "endLine": 815, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'HealthCheck' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'OpenMPLogGroup95FEB040' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LB8A12904C", + "logicalId": "OpenMPLogGroup95FEB040", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.HealthCheck", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 667, - "startColumn": 5, - "endLine": 667, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 849, + "startColumn": 4, + "endLine": 849, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", + "message": "Resource 'OpenMPJobDefinition' of type 'AWS::Batch::JobDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LB8A12904C", + "logicalId": "OpenMPJobDefinition", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::Batch::JobDefinition" }, - "propertyPath": "Properties.Scheme", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 682, - "startColumn": 5, - "endLine": 682, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 861, + "startColumn": 4, + "endLine": 861, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Subnets' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'JobSubmitterFunctionServiceRole55AD6E92' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LB8A12904C", + "logicalId": "JobSubmitterFunctionServiceRole55AD6E92", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Subnets", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 691, - "startColumn": 5, - "endLine": 691, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 972, + "startColumn": 4, + "endLine": 972, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LBSecurityGroup8A41EA2B' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'JobSubmitterFunctionFAE645C8' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGroup8A41EA2B", + "logicalId": "JobSubmitterFunctionFAE645C8", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 620, + "startLine": 1034, "startColumn": 4, - "endLine": 620, + "endLine": 1034, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -13273,35 +13984,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LB8A12904C' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", + "message": "Resource 'JobSubmitterFunctionLogGroupF7938D09' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LB8A12904C", + "logicalId": "JobSubmitterFunctionLogGroupF7938D09", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::Logs::LogGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 665, + "startLine": 1083, "startColumn": 4, - "endLine": 665, + "endLine": 1083, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/cloudfront-functions--DemoCloudfrontFunctionsStack.template.json": { - "filePath": "cdk/cloudfront-functions--DemoCloudfrontFunctionsStack.template.json", + "cdk/classic-load-balancer--LoadBalancerStack.template.json": { + "filePath": "cdk/classic-load-balancer--LoadBalancerStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 13, + "resourcesScanned": 33, "counts": { "fatal": 0, "errors": 0, "warnings": 1, - "informational": 10, + "informational": 65, "debug": 0 }, "suppressed": 0, @@ -13310,88 +14021,84 @@ }, "diagnostics": [ { - "ruleId": "W3005", + "ruleId": "W3697", "severity": "WARN", - "message": "'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", "source": "CFN_LINT", "entity": { - "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 363, - "startColumn": 4, - "endLine": 363, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "category": "Deprecation", + "startLine": 551, + "startColumn": 3, + "endLine": 551, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebsiteBucketPolicyE10E3262", + "logicalId": "VPCB9E5F0B4", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 40, + "startLine": 6, "startColumn": 5, - "endLine": 40, - "endColumn": 12, + "endLine": 6, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'WebsiteBucket75C24D94'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Content' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebsiteFilesAwsCliLayerE117CD16", + "logicalId": "VPCB9E5F0B4", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Content", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 154, + "startLine": 9, "startColumn": 5, - "endLine": 154, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "endLine": 9, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebsiteFilesAwsCliLayerE117CD16", + "logicalId": "VPCPublicSubnet1SubnetB4246D30", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Description", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 160, + "startLine": 24, "startColumn": 5, - "endLine": 160, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "endLine": 24, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13401,19 +14108,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RequestFunction0B9B463A", + "logicalId": "VPCPublicSubnet1SubnetB4246D30", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 394, + "startLine": 32, "startColumn": 5, - "endLine": 394, - "endColumn": 10, + "endLine": 32, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13423,244 +14130,121 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ResponseFunctionB78A69CA", + "logicalId": "VPCPublicSubnet1SubnetB4246D30", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 409, + "startLine": 48, "startColumn": 5, - "endLine": 409, - "endColumn": 10, + "endLine": 48, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 205, - "startColumn": 4, - "endLine": 205, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 336, - "startColumn": 4, - "endLine": 336, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'RequestFunction0B9B463A' of type 'AWS::CloudFront::Function' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RequestFunction0B9B463A", + "logicalId": "VPCPublicSubnet1RouteTableFEE4B781", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Function" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 387, - "startColumn": 4, - "endLine": 387, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 65, + "startColumn": 5, + "endLine": 65, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ResponseFunctionB78A69CA' of type 'AWS::CloudFront::Function' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ResponseFunctionB78A69CA", + "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Function" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 402, - "startColumn": 4, - "endLine": 402, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 76, + "startColumn": 5, + "endLine": 76, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SiteDistribution3FF9535D' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SiteDistribution3FF9535D", + "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 428, - "startColumn": 4, - "endLine": 428, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/codepipeline-build-deploy--CodepipelineBuildDeployStack.template.json": { - "filePath": "cdk/codepipeline-build-deploy--CodepipelineBuildDeployStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 74, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 4, - "informational": 112, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "BuildLambda72E2A667", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 944, + "startLine": 79, "startColumn": 5, - "endLine": 944, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 79, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'BuildLambdaServiceRole8FB6C033' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "BuildLambda72E2A667", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 946, - "startColumn": 4, - "endLine": 946, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "AWS679f53fac002430cb0da5b7982bd22872D164C4C", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 1084, - "startColumn": 4, - "endLine": 1084, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'BuildDeployPipelineRole3223E55F' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", - "source": "CFN_LINT", - "entity": { - "logicalId": "BuildDeployPipeline5EEC284B", - "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 2461, - "startColumn": 4, - "endLine": 2461, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefC6FB60B4", + "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 120, + "startLine": 90, "startColumn": 5, - "endLine": 120, + "endLine": 90, "endColumn": 26, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13670,90 +14254,89 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefC6FB60B4", + "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 181, + "startLine": 94, "startColumn": 5, - "endLine": 181, - "endColumn": 9, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 94, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefC6FB60B4", + "logicalId": "VPCPublicSubnet1NATGatewayE0556630", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.ExecutionRoleArn", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 182, + "startLine": 123, "startColumn": 5, - "endLine": 182, - "endColumn": 22, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 123, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateTaskDefExecutionRole272677A9.Arn" + "resolutionSource": "GetAtt VPCPublicSubnet1EIP6AD938E8.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefC6FB60B4", + "logicalId": "VPCPublicSubnet1NATGatewayE0556630", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 188, + "startLine": 129, "startColumn": 5, - "endLine": 188, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 129, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefC6FB60B4", + "logicalId": "VPCPublicSubnet2Subnet74179F39", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 189, + "startLine": 150, "startColumn": 5, - "endLine": 189, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 150, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13763,20 +14346,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefC6FB60B4", + "logicalId": "VPCPublicSubnet2Subnet74179F39", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 190, + "startLine": 158, "startColumn": 5, - "endLine": 190, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 158, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13786,254 +14368,119 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefC6FB60B4", + "logicalId": "VPCPublicSubnet2Subnet74179F39", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 191, + "startLine": 174, "startColumn": 5, - "endLine": 191, - "endColumn": 29, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 174, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefC6FB60B4", + "logicalId": "VPCPublicSubnet2RouteTable6F1A15F1", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.TaskRoleArn", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 194, + "startLine": 191, "startColumn": 5, - "endLine": 194, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 191, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateTaskDefTaskRole0B257552.Arn" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcA8CFF6E7", + "logicalId": "VPCPublicSubnet2RouteTableAssociation5A808732", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 1097, + "startLine": 202, "startColumn": 5, - "endLine": 1097, - "endColumn": 15, + "endLine": 202, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet2RouteTable6F1A15F1'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcA8CFF6E7", + "logicalId": "VPCPublicSubnet2RouteTableAssociation5A808732", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 1100, + "startLine": 205, "startColumn": 5, - "endLine": 1100, - "endColumn": 21, + "endLine": 205, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet2Subnet74179F39'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet1Subnet6F292256", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 1119, - "startColumn": 5, - "endLine": 1119, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ClusterVpcPublicSubnet1Subnet6F292256", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 1127, - "startColumn": 5, - "endLine": 1127, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ClusterVpcPublicSubnet1Subnet6F292256", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 1143, - "startColumn": 5, - "endLine": 1143, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ClusterVpcPublicSubnet1RouteTableA4D922A0", - "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 1164, - "startColumn": 5, - "endLine": 1164, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ClusterVpcPublicSubnet1RouteTableAssociation5AD6D21B", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 1179, - "startColumn": 5, - "endLine": 1179, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcPublicSubnet1RouteTableA4D922A0'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ClusterVpcPublicSubnet1RouteTableAssociation5AD6D21B", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 1182, - "startColumn": 5, - "endLine": 1182, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcPublicSubnet1Subnet6F292256'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ClusterVpcPublicSubnet1DefaultRouteAFF78CE0", + "logicalId": "VPCPublicSubnet2DefaultRouteB7481BBA", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 1197, + "startLine": 216, "startColumn": 5, - "endLine": 1197, + "endLine": 216, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -14048,22 +14495,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet1DefaultRouteAFF78CE0", + "logicalId": "VPCPublicSubnet2DefaultRouteB7481BBA", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 1201, + "startLine": 220, "startColumn": 5, - "endLine": 1201, + "endLine": 220, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcPublicSubnet1RouteTableA4D922A0'" + "resolutionSource": "Ref to 'VPCPublicSubnet2RouteTable6F1A15F1'" } }, { @@ -14072,21 +14519,21 @@ "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet1NATGateway69FA9C06", + "logicalId": "VPCPublicSubnet2NATGateway3C070193", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 1236, + "startLine": 249, "startColumn": 5, - "endLine": 1236, + "endLine": 249, "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ClusterVpcPublicSubnet1EIP37B290BD.AllocationId" + "resolutionSource": "GetAtt VPCPublicSubnet2EIP4947BC00.AllocationId" } }, { @@ -14095,21 +14542,21 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet1NATGateway69FA9C06", + "logicalId": "VPCPublicSubnet2NATGateway3C070193", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 1242, + "startLine": 255, "startColumn": 5, - "endLine": 1242, + "endLine": 255, "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcPublicSubnet1Subnet6F292256'" + "resolutionSource": "Ref to 'VPCPublicSubnet2Subnet74179F39'" } }, { @@ -14118,15 +14565,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet2Subnet426701E5", + "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 1265, + "startLine": 276, "startColumn": 5, - "endLine": 1265, + "endLine": 276, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -14140,15 +14587,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet2Subnet426701E5", + "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 1273, + "startLine": 284, "startColumn": 5, - "endLine": 1273, + "endLine": 284, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -14162,21 +14609,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet2Subnet426701E5", + "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1289, + "startLine": 300, "startColumn": 5, - "endLine": 1289, + "endLine": 300, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { @@ -14185,22 +14632,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet2RouteTable12CC8384", + "logicalId": "VPCPrivateSubnet1RouteTableBE8A6027", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1310, + "startLine": 317, "startColumn": 5, - "endLine": 1310, + "endLine": 317, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { @@ -14209,22 +14656,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet2RouteTableAssociation7ADD1D72", + "logicalId": "VPCPrivateSubnet1RouteTableAssociation347902D1", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 1325, + "startLine": 328, "startColumn": 5, - "endLine": 1325, + "endLine": 328, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcPublicSubnet2RouteTable12CC8384'", + "resolutionSource": "Ref to 'VPCPrivateSubnet1RouteTableBE8A6027'", "extra": { "replacement_strategy": "delete_then_create" } @@ -14236,22 +14683,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet2RouteTableAssociation7ADD1D72", + "logicalId": "VPCPrivateSubnet1RouteTableAssociation347902D1", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 1328, + "startLine": 331, "startColumn": 5, - "endLine": 1328, + "endLine": 331, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcPublicSubnet2Subnet426701E5'", + "resolutionSource": "Ref to 'VPCPrivateSubnet1Subnet8BCA10E0'", "extra": { "replacement_strategy": "delete_then_create" } @@ -14263,15 +14710,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet2DefaultRouteAEC6FDD4", + "logicalId": "VPCPrivateSubnet1DefaultRouteAE1D6490", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 1343, + "startLine": 342, "startColumn": 5, - "endLine": 1343, + "endLine": 342, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -14286,68 +14733,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet2DefaultRouteAEC6FDD4", + "logicalId": "VPCPrivateSubnet1DefaultRouteAE1D6490", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 1347, + "startLine": 346, "startColumn": 5, - "endLine": 1347, + "endLine": 346, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcPublicSubnet2RouteTable12CC8384'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ClusterVpcPublicSubnet2NATGatewayC9242BCE", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.AllocationId", - "category": "Best Practice", - "startLine": 1382, - "startColumn": 5, - "endLine": 1382, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ClusterVpcPublicSubnet2EIP299AF9FE.AllocationId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ClusterVpcPublicSubnet2NATGatewayC9242BCE", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 1388, - "startColumn": 5, - "endLine": 1388, - "endColumn": 14, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcPublicSubnet2Subnet426701E5'" + "resolutionSource": "Ref to 'VPCPrivateSubnet1RouteTableBE8A6027'" } }, { @@ -14356,15 +14757,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet1Subnet505E4257", + "logicalId": "VPCPrivateSubnet2SubnetCFCDAA7A", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 1411, + "startLine": 357, "startColumn": 5, - "endLine": 1411, + "endLine": 357, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -14378,15 +14779,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet1Subnet505E4257", + "logicalId": "VPCPrivateSubnet2SubnetCFCDAA7A", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 1419, + "startLine": 365, "startColumn": 5, - "endLine": 1419, + "endLine": 365, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -14400,21 +14801,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet1Subnet505E4257", + "logicalId": "VPCPrivateSubnet2SubnetCFCDAA7A", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1435, + "startLine": 381, "startColumn": 5, - "endLine": 1435, + "endLine": 381, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { @@ -14423,22 +14824,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet1RouteTable4D91A516", + "logicalId": "VPCPrivateSubnet2RouteTable0A19E10E", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1456, + "startLine": 398, "startColumn": 5, - "endLine": 1456, + "endLine": 398, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { @@ -14447,22 +14848,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet1RouteTableAssociationB0545C4C", + "logicalId": "VPCPrivateSubnet2RouteTableAssociation0C73D413", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 1471, + "startLine": 409, "startColumn": 5, - "endLine": 1471, + "endLine": 409, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcPrivateSubnet1RouteTable4D91A516'", + "resolutionSource": "Ref to 'VPCPrivateSubnet2RouteTable0A19E10E'", "extra": { "replacement_strategy": "delete_then_create" } @@ -14474,22 +14875,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet1RouteTableAssociationB0545C4C", + "logicalId": "VPCPrivateSubnet2RouteTableAssociation0C73D413", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 1474, + "startLine": 412, "startColumn": 5, - "endLine": 1474, + "endLine": 412, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcPrivateSubnet1Subnet505E4257'", + "resolutionSource": "Ref to 'VPCPrivateSubnet2SubnetCFCDAA7A'", "extra": { "replacement_strategy": "delete_then_create" } @@ -14501,15 +14902,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet1DefaultRoute6BD16184", + "logicalId": "VPCPrivateSubnet2DefaultRouteF4F5CFD2", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 1489, + "startLine": 423, "startColumn": 5, - "endLine": 1489, + "endLine": 423, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -14524,62 +14925,67 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet1DefaultRoute6BD16184", + "logicalId": "VPCPrivateSubnet2DefaultRouteF4F5CFD2", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 1493, + "startLine": 427, "startColumn": 5, - "endLine": 1493, + "endLine": 427, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcPrivateSubnet1RouteTable4D91A516'" + "resolutionSource": "Ref to 'VPCPrivateSubnet2RouteTable0A19E10E'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet2Subnet176BE39E", + "logicalId": "VPCVPCGW99B986DC", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1508, + "startLine": 455, "startColumn": 5, - "endLine": 1508, - "endColumn": 22, + "endLine": 455, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet2Subnet176BE39E", + "logicalId": "ASGInstanceSecurityGroup0525485D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 1516, + "startLine": 466, "startColumn": 5, - "endLine": 1516, - "endColumn": 15, + "endLine": 466, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -14592,191 +14998,181 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet2Subnet176BE39E", + "logicalId": "ASGInstanceSecurityGroup0525485D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1532, + "startLine": 480, "startColumn": 5, - "endLine": 1532, + "endLine": 480, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet2RouteTable918A9411", + "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 1553, + "startLine": 492, "startColumn": 5, - "endLine": 1553, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 492, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet2RouteTableAssociation994802D2", + "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 1568, + "startLine": 493, "startColumn": 5, - "endLine": 1568, - "endColumn": 18, + "endLine": 493, + "endColumn": 13, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcPrivateSubnet2RouteTable918A9411'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt ASGInstanceSecurityGroup0525485D.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet2RouteTableAssociation994802D2", + "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 1571, + "startLine": 499, "startColumn": 5, - "endLine": 1571, - "endColumn": 14, + "endLine": 499, + "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcPrivateSubnet2Subnet176BE39E'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet2DefaultRouteCC18893B", + "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.SourceSecurityGroupId", "category": "Best Practice", - "startLine": 1586, + "startLine": 500, "startColumn": 5, - "endLine": 1586, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 500, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt LBSecurityGroup8A41EA2B.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet2DefaultRouteCC18893B", + "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 1590, + "startLine": 506, "startColumn": 5, - "endLine": 1590, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 506, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcPrivateSubnet2RouteTable918A9411'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcVPCGW361426E5", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.IamInstanceProfile", "category": "Best Practice", - "startLine": 1626, + "startLine": 554, "startColumn": 5, - "endLine": 1626, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "endLine": 554, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "Ref to 'ASGInstanceProfile0A2834D7'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BlueTargetGroupF108EB01", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 1641, + "startLine": 557, "startColumn": 5, - "endLine": 1641, - "endColumn": 10, + "endLine": 557, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -14786,19 +15182,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BlueTargetGroupF108EB01", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 1642, + "startLine": 560, "startColumn": 5, - "endLine": 1642, - "endColumn": 10, + "endLine": 560, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -14808,19 +15205,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BlueTargetGroupF108EB01", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.SecurityGroups", "category": "Best Practice", - "startLine": 1643, + "startLine": 561, "startColumn": 5, - "endLine": 1643, - "endColumn": 14, + "endLine": 561, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -14830,19 +15228,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", + "message": "Property 'UserData' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BlueTargetGroupF108EB01", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.TargetType", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 1650, + "startLine": 569, "startColumn": 5, - "endLine": 1650, - "endColumn": 16, + "endLine": 569, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -14852,86 +15251,64 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BlueTargetGroupF108EB01", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 1651, - "startColumn": 5, - "endLine": 1651, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GreenTargetGroupEEB2DF3E", + "logicalId": "ASG46ED3070", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.LaunchConfigurationName", "category": "Best Practice", - "startLine": 1662, + "startLine": 583, "startColumn": 5, - "endLine": 1662, - "endColumn": 10, + "endLine": 583, + "endColumn": 29, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'ASGLaunchConfigC00AF12B'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GreenTargetGroupEEB2DF3E", + "logicalId": "ASG46ED3070", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.VPCZoneIdentifier", "category": "Best Practice", - "startLine": 1663, + "startLine": 600, "startColumn": 5, - "endLine": 1663, - "endColumn": 10, + "endLine": 600, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GreenTargetGroupEEB2DF3E", + "logicalId": "LBSecurityGroup8A41EA2B", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 1664, + "startLine": 621, "startColumn": 5, - "endLine": 1664, - "endColumn": 14, + "endLine": 621, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -14941,64 +15318,67 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GreenTargetGroupEEB2DF3E", + "logicalId": "LBSecurityGroup8A41EA2B", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.TargetType", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1671, + "startLine": 631, "startColumn": 5, - "endLine": 1671, - "endColumn": 16, + "endLine": 631, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationSecurityGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GreenTargetGroupEEB2DF3E", + "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.DestinationSecurityGroupId", "category": "Best Practice", - "startLine": 1672, + "startLine": 643, "startColumn": 5, - "endLine": 1672, - "endColumn": 11, + "endLine": 643, + "endColumn": 32, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + "resolutionSource": "GetAtt ASGInstanceSecurityGroup0525485D.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroupDD263621", + "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 1683, + "startLine": 649, "startColumn": 5, - "endLine": 1683, - "endColumn": 22, + "endLine": 649, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -15008,43 +15388,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroupDD263621", + "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 1700, + "startLine": 650, "startColumn": 5, - "endLine": 1700, - "endColumn": 11, + "endLine": 650, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + "resolutionSource": "GetAtt LBSecurityGroup8A41EA2B.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublicAlb84330974", + "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Scheme", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 1717, + "startLine": 656, "startColumn": 5, - "endLine": 1717, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endLine": 656, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -15054,20 +15435,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublicAlb84330974", + "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 1734, + "startLine": 657, "startColumn": 5, - "endLine": 1734, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endLine": 657, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -15077,180 +15458,191 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", + "message": "Property 'HealthCheck' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublicAlbAlbListener804C1B2779", + "logicalId": "LB8A12904C", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" }, - "propertyPath": "Properties.LoadBalancerArn", + "propertyPath": "Properties.HealthCheck", "category": "Best Practice", - "startLine": 1757, + "startLine": 667, "startColumn": 5, - "endLine": 1757, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", + "endLine": 667, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'PublicAlb84330974'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", + "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsCluster72B17558", + "logicalId": "LB8A12904C", "entityType": "Resource", - "resourceType": "AWS::ECS::ClusterCapacityProviderAssociations" + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" }, - "propertyPath": "Properties.Cluster", + "propertyPath": "Properties.Scheme", "category": "Best Practice", - "startLine": 1780, + "startLine": 682, "startColumn": 5, - "endLine": 1780, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 682, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'EcsCluster97242B84'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", + "message": "Property 'Subnets' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceAC2B3B85", + "logicalId": "LB8A12904C", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" }, - "propertyPath": "Properties.Cluster", + "propertyPath": "Properties.Subnets", "category": "Best Practice", - "startLine": 1792, + "startLine": 691, "startColumn": 5, - "endLine": 1792, + "endLine": 691, "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'EcsCluster97242B84'" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'LBSecurityGroup8A41EA2B' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceAC2B3B85", + "logicalId": "LBSecurityGroup8A41EA2B", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.LaunchType", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1805, - "startColumn": 5, - "endLine": 1805, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 620, + "startColumn": 4, + "endLine": 620, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ServiceName' is create-only; updating it will cause resource replacement", + "message": "Resource 'LB8A12904C' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceAC2B3B85", + "logicalId": "LB8A12904C", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" }, - "propertyPath": "Properties.ServiceName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1836, - "startColumn": 5, - "endLine": 1836, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 665, + "startColumn": 4, + "endLine": 665, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/cloudfront-functions--DemoCloudfrontFunctionsStack.template.json": { + "filePath": "cdk/cloudfront-functions--DemoCloudfrontFunctionsStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 13, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 10, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateServiceSecurityGroup0A0E79CB", + "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 1853, - "startColumn": 5, - "endLine": 1853, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 363, + "startColumn": 4, + "endLine": 363, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceSecurityGroup0A0E79CB", + "logicalId": "WebsiteBucketPolicyE10E3262", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 1861, + "startLine": 40, "startColumn": 5, - "endLine": 1861, - "endColumn": 11, + "endLine": 40, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + "resolutionSource": "Ref to 'WebsiteBucket75C24D94'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'Content' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceSecurityGroupfromCodepipelineBuildDeployStackSecurityGroup07B96CA880690A9743", + "logicalId": "WebsiteFilesAwsCliLayerE117CD16", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.Content", "category": "Best Practice", - "startLine": 1879, + "startLine": 154, "startColumn": 5, - "endLine": 1879, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 154, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -15260,44 +15652,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceSecurityGroupfromCodepipelineBuildDeployStackSecurityGroup07B96CA880690A9743", + "logicalId": "WebsiteFilesAwsCliLayerE117CD16", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 1880, + "startLine": 160, "startColumn": 5, - "endLine": 1880, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 160, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateServiceSecurityGroup0A0E79CB.GroupId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceSecurityGroupfromCodepipelineBuildDeployStackSecurityGroup07B96CA880690A9743", + "logicalId": "RequestFunction0B9B463A", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::CloudFront::Function" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 1886, + "startLine": 394, "startColumn": 5, - "endLine": 1886, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 394, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -15307,1020 +15697,1095 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceSecurityGroupfromCodepipelineBuildDeployStackSecurityGroup07B96CA880690A9743", + "logicalId": "ResponseFunctionB78A69CA", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::CloudFront::Function" }, - "propertyPath": "Properties.SourceSecurityGroupId", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 1887, + "startLine": 409, "startColumn": 5, - "endLine": 1887, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 409, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt SecurityGroupDD263621.GroupId" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Resource 'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceSecurityGroupfromCodepipelineBuildDeployStackSecurityGroup07B96CA880690A9743", + "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1893, - "startColumn": 5, - "endLine": 1893, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 205, + "startColumn": 4, + "endLine": 205, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ComputePlatform' is create-only; updating it will cause resource replacement", + "message": "Resource 'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CodeDeployGroupApplication13EFBDA6", + "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", "entityType": "Resource", - "resourceType": "AWS::CodeDeploy::Application" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ComputePlatform", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1942, - "startColumn": 5, - "endLine": 1942, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 336, + "startColumn": 4, + "endLine": 336, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ApplicationName' is create-only; updating it will cause resource replacement", + "message": "Resource 'RequestFunction0B9B463A' of type 'AWS::CloudFront::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CodeDeployGroup58220FC8", + "logicalId": "RequestFunction0B9B463A", "entityType": "Resource", - "resourceType": "AWS::CodeDeploy::DeploymentGroup" + "resourceType": "AWS::CloudFront::Function" }, - "propertyPath": "Properties.ApplicationName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1954, - "startColumn": 5, - "endLine": 1954, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'CodeDeployGroupApplication13EFBDA6'" - } + "startLine": 387, + "startColumn": 4, + "endLine": 387, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AliasName' is create-only; updating it will cause resource replacement", + "message": "Resource 'ResponseFunctionB78A69CA' of type 'AWS::CloudFront::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BuildDeployPipelineArtifactsBucketEncryptionKeyAliasC52C67EF", + "logicalId": "ResponseFunctionB78A69CA", "entityType": "Resource", - "resourceType": "AWS::KMS::Alias" + "resourceType": "AWS::CloudFront::Function" }, - "propertyPath": "Properties.AliasName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 2074, - "startColumn": 5, - "endLine": 2074, + "startLine": 402, + "startColumn": 4, + "endLine": 402, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Resource 'SiteDistribution3FF9535D' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BuildDeployPipelineArtifactsBucketPolicyC49383E9", + "logicalId": "SiteDistribution3FF9535D", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 2122, - "startColumn": 5, - "endLine": 2122, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'BuildDeployPipelineArtifactsBucket5D4A76C1'" - } + "startLine": 428, + "startColumn": 4, + "endLine": 428, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/codepipeline-build-deploy--CodepipelineBuildDeployStack.template.json": { + "filePath": "cdk/codepipeline-build-deploy--CodepipelineBuildDeployStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 74, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 4, + "informational": 112, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "BuildDeployPipeline5EEC284B", + "logicalId": "BuildLambda72E2A667", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 2309, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 944, "startColumn": 5, - "endLine": 2309, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 944, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'repoBEC318EA' of type 'AWS::CodeCommit::Repository' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'BuildLambdaServiceRole8FB6C033' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "repoBEC318EA", + "logicalId": "BuildLambda72E2A667", "entityType": "Resource", - "resourceType": "AWS::CodeCommit::Repository" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 5, + "startLine": 946, "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endLine": 946, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'repoCodepipelineBuildDeployStackBuildDeployPipeline2B279CCCmainEventRule3F24D1E0' of type 'AWS::Events::Rule' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "repoCodepipelineBuildDeployStackBuildDeployPipeline2B279CCCmainEventRule3F24D1E0", + "logicalId": "AWS679f53fac002430cb0da5b7982bd22872D164C4C", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 23, + "startLine": 1084, "startColumn": 4, - "endLine": 23, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endLine": 1084, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'imageRepo1D8A68AF' of type 'AWS::ECR::Repository' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'BuildDeployPipelineRole3223E55F' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", + "source": "CFN_LINT", "entity": { - "logicalId": "imageRepo1D8A68AF", + "logicalId": "BuildDeployPipeline5EEC284B", "entityType": "Resource", - "resourceType": "AWS::ECR::Repository" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 89, - "startColumn": 3, - "endLine": 89, - "endColumn": 21, - "ruleDescription": "Resource should have Tags", + "startLine": 2461, + "startColumn": 4, + "endLine": 2461, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateTaskDefTaskRole0B257552' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefTaskRole0B257552", + "logicalId": "FargateTaskDefC6FB60B4", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 99, - "startColumn": 4, - "endLine": 99, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 120, + "startColumn": 5, + "endLine": 120, + "endColumn": 26, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateTaskDefC6FB60B4' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { "logicalId": "FargateTaskDefC6FB60B4", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 119, - "startColumn": 4, - "endLine": 119, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 181, + "startColumn": 5, + "endLine": 181, + "endColumn": 9, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateTaskDefExecutionRole272677A9' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefExecutionRole272677A9", + "logicalId": "FargateTaskDefC6FB60B4", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ExecutionRoleArn", "category": "Best Practice", - "startLine": 207, - "startColumn": 4, - "endLine": 207, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 182, + "startColumn": 5, + "endLine": 182, + "endColumn": 22, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FargateTaskDefExecutionRole272677A9.Arn" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BuildImageRoleA9C72406' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildImageRoleA9C72406", + "logicalId": "FargateTaskDefC6FB60B4", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 265, - "startColumn": 4, - "endLine": 265, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 188, + "startColumn": 5, + "endLine": 188, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BuildImage74257FD8' of type 'AWS::CodeBuild::Project' supports Tags but none are configured", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildImage74257FD8", + "logicalId": "FargateTaskDefC6FB60B4", "entityType": "Resource", - "resourceType": "AWS::CodeBuild::Project" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 481, - "startColumn": 4, - "endLine": 481, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 189, + "startColumn": 5, + "endLine": 189, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BuildTestRoleC332A422' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildTestRoleC332A422", + "logicalId": "FargateTaskDefC6FB60B4", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 627, - "startColumn": 4, - "endLine": 627, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 190, + "startColumn": 5, + "endLine": 190, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BuildTestC9659529' of type 'AWS::CodeBuild::Project' supports Tags but none are configured", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildTestC9659529", + "logicalId": "FargateTaskDefC6FB60B4", "entityType": "Resource", - "resourceType": "AWS::CodeBuild::Project" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 813, - "startColumn": 4, - "endLine": 813, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 191, + "startColumn": 5, + "endLine": 191, + "endColumn": 29, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BuildLambdaServiceRole8FB6C033' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildLambdaServiceRole8FB6C033", + "logicalId": "FargateTaskDefC6FB60B4", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 856, - "startColumn": 4, - "endLine": 856, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 194, + "startColumn": 5, + "endLine": 194, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FargateTaskDefTaskRole0B257552.Arn" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BuildLambda72E2A667' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildLambda72E2A667", + "logicalId": "ClusterVpcA8CFF6E7", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 919, - "startColumn": 4, - "endLine": 919, + "startLine": 1097, + "startColumn": 5, + "endLine": 1097, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", + "logicalId": "ClusterVpcA8CFF6E7", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 1032, - "startColumn": 4, - "endLine": 1032, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1100, + "startColumn": 5, + "endLine": 1100, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'AWS679f53fac002430cb0da5b7982bd22872D164C4C' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AWS679f53fac002430cb0da5b7982bd22872D164C4C", + "logicalId": "ClusterVpcPublicSubnet1Subnet6F292256", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 1066, - "startColumn": 4, - "endLine": 1066, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1119, + "startColumn": 5, + "endLine": 1119, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BlueTargetGroupF108EB01' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BlueTargetGroupF108EB01", + "logicalId": "ClusterVpcPublicSubnet1Subnet6F292256", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 1640, - "startColumn": 4, - "endLine": 1640, + "startLine": 1127, + "startColumn": 5, + "endLine": 1127, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'GreenTargetGroupEEB2DF3E' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GreenTargetGroupEEB2DF3E", + "logicalId": "ClusterVpcPublicSubnet1Subnet6F292256", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1661, - "startColumn": 4, - "endLine": 1661, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1143, + "startColumn": 5, + "endLine": 1143, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SecurityGroupDD263621' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroupDD263621", + "logicalId": "ClusterVpcPublicSubnet1RouteTableA4D922A0", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1682, - "startColumn": 4, - "endLine": 1682, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1164, + "startColumn": 5, + "endLine": 1164, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'PublicAlb84330974' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublicAlb84330974", + "logicalId": "ClusterVpcPublicSubnet1RouteTableAssociation5AD6D21B", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 1710, - "startColumn": 4, - "endLine": 1710, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1179, + "startColumn": 5, + "endLine": 1179, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcPublicSubnet1RouteTableA4D922A0'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'PublicAlbAlbListener804C1B2779' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublicAlbAlbListener804C1B2779", + "logicalId": "ClusterVpcPublicSubnet1RouteTableAssociation5AD6D21B", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 1748, - "startColumn": 4, - "endLine": 1748, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1182, + "startColumn": 5, + "endLine": 1182, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcPublicSubnet1Subnet6F292256'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'EcsCluster97242B84' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsCluster97242B84", + "logicalId": "ClusterVpcPublicSubnet1DefaultRouteAFF78CE0", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 1767, - "startColumn": 3, - "endLine": 1767, - "endColumn": 22, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1197, + "startColumn": 5, + "endLine": 1197, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateServiceAC2B3B85' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceAC2B3B85", + "logicalId": "ClusterVpcPublicSubnet1DefaultRouteAFF78CE0", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 1791, - "startColumn": 4, - "endLine": 1791, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1201, + "startColumn": 5, + "endLine": 1201, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcPublicSubnet1RouteTableA4D922A0'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateServiceSecurityGroup0A0E79CB' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceSecurityGroup0A0E79CB", + "logicalId": "ClusterVpcPublicSubnet1NATGateway69FA9C06", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 1852, - "startColumn": 4, - "endLine": 1852, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1236, + "startColumn": 5, + "endLine": 1236, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt ClusterVpcPublicSubnet1EIP37B290BD.AllocationId" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CodeDeployGroupServiceRole50553EBF' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CodeDeployGroupServiceRole50553EBF", + "logicalId": "ClusterVpcPublicSubnet1NATGateway69FA9C06", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 1907, - "startColumn": 4, - "endLine": 1907, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1242, + "startColumn": 5, + "endLine": 1242, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcPublicSubnet1Subnet6F292256'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CodeDeployGroupApplication13EFBDA6' of type 'AWS::CodeDeploy::Application' supports Tags but none are configured", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CodeDeployGroupApplication13EFBDA6", + "logicalId": "ClusterVpcPublicSubnet2Subnet426701E5", "entityType": "Resource", - "resourceType": "AWS::CodeDeploy::Application" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 1941, - "startColumn": 4, - "endLine": 1941, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1265, + "startColumn": 5, + "endLine": 1265, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CodeDeployGroup58220FC8' of type 'AWS::CodeDeploy::DeploymentGroup' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CodeDeployGroup58220FC8", + "logicalId": "ClusterVpcPublicSubnet2Subnet426701E5", "entityType": "Resource", - "resourceType": "AWS::CodeDeploy::DeploymentGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 1950, - "startColumn": 4, - "endLine": 1950, + "startLine": 1273, + "startColumn": 5, + "endLine": 1273, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BuildDeployPipelineArtifactsBucketEncryptionKey8AB5ABF8' of type 'AWS::KMS::Key' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildDeployPipelineArtifactsBucketEncryptionKey8AB5ABF8", + "logicalId": "ClusterVpcPublicSubnet2Subnet426701E5", "entityType": "Resource", - "resourceType": "AWS::KMS::Key" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 2035, - "startColumn": 4, - "endLine": 2035, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1289, + "startColumn": 5, + "endLine": 1289, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BuildDeployPipelineArtifactsBucket5D4A76C1' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildDeployPipelineArtifactsBucket5D4A76C1", + "logicalId": "ClusterVpcPublicSubnet2RouteTable12CC8384", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 2090, - "startColumn": 4, - "endLine": 2090, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1310, + "startColumn": 5, + "endLine": 1310, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BuildDeployPipelineRole3223E55F' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildDeployPipelineRole3223E55F", + "logicalId": "ClusterVpcPublicSubnet2RouteTableAssociation7ADD1D72", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 2171, - "startColumn": 4, - "endLine": 2171, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1325, + "startColumn": 5, + "endLine": 1325, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcPublicSubnet2RouteTable12CC8384'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BuildDeployPipeline5EEC284B' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildDeployPipeline5EEC284B", + "logicalId": "ClusterVpcPublicSubnet2RouteTableAssociation7ADD1D72", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 2293, - "startColumn": 4, - "endLine": 2293, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1328, + "startColumn": 5, + "endLine": 1328, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcPublicSubnet2Subnet426701E5'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BuildDeployPipelineSourceAppCodeCommitCodePipelineActionRoleB9EB8BA0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildDeployPipelineSourceAppCodeCommitCodePipelineActionRoleB9EB8BA0", + "logicalId": "ClusterVpcPublicSubnet2DefaultRouteAEC6FDD4", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 2471, - "startColumn": 4, - "endLine": 2471, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1343, + "startColumn": 5, + "endLine": 1343, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BuildDeployPipelineEventsRoleDE5B0F8F' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildDeployPipelineEventsRoleDE5B0F8F", + "logicalId": "ClusterVpcPublicSubnet2DefaultRouteAEC6FDD4", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 2584, - "startColumn": 4, - "endLine": 2584, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1347, + "startColumn": 5, + "endLine": 1347, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcPublicSubnet2RouteTable12CC8384'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BuildDeployPipelineTestJestCDKCodePipelineActionRoleFA2BA8B1' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildDeployPipelineTestJestCDKCodePipelineActionRoleFA2BA8B1", + "logicalId": "ClusterVpcPublicSubnet2NATGatewayC9242BCE", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 2650, - "startColumn": 4, - "endLine": 2650, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1382, + "startColumn": 5, + "endLine": 1382, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt ClusterVpcPublicSubnet2EIP299AF9FE.AllocationId" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BuildDeployPipelineBuildDockerBuildPushCodePipelineActionRole760EF965' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildDeployPipelineBuildDockerBuildPushCodePipelineActionRole760EF965", + "logicalId": "ClusterVpcPublicSubnet2NATGatewayC9242BCE", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 2708, - "startColumn": 4, - "endLine": 2708, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1388, + "startColumn": 5, + "endLine": 1388, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcPublicSubnet2Subnet426701E5'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BuildDeployPipelineDeployEcsFargateDeployCodePipelineActionRole054540AB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildDeployPipelineDeployEcsFargateDeployCodePipelineActionRole054540AB", + "logicalId": "ClusterVpcPrivateSubnet1Subnet505E4257", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 2766, - "startColumn": 4, - "endLine": 2766, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/cognito-api-lambda--CognitoProtectedApi.template.json": { - "filePath": "cdk/cognito-api-lambda--CognitoProtectedApi.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 14, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 23, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "helloWorldFunction00C940B5", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 53, + "startLine": 1411, "startColumn": 5, - "endLine": 53, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 1411, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'helloWorldFunctionServiceRole8475DBF0' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "helloWorldFunction00C940B5", + "logicalId": "ClusterVpcPrivateSubnet1Subnet505E4257", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 55, - "startColumn": 4, - "endLine": 55, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1419, + "startColumn": 5, + "endLine": 1419, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiDeploymentCB1FF57464f3e9f368e40968a1aeabdb5bcc9580", + "logicalId": "ClusterVpcPrivateSubnet1Subnet505E4257", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 133, + "startLine": 1435, "startColumn": 5, - "endLine": 133, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 1435, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'helloWorldLambdaRestApi6825FB98'" + "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiDeploymentStageprod67DD79AF", + "logicalId": "ClusterVpcPrivateSubnet1RouteTable4D91A516", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 152, + "startLine": 1456, "startColumn": 5, - "endLine": 152, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 1456, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'helloWorldLambdaRestApi6825FB98'" + "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiDeploymentStageprod67DD79AF", + "logicalId": "ClusterVpcPrivateSubnet1RouteTableAssociationB0545C4C", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 155, + "startLine": 1471, "startColumn": 5, - "endLine": 155, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 1471, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcPrivateSubnet1RouteTable4D91A516'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiHELLOAD091B67", + "logicalId": "ClusterVpcPrivateSubnet1RouteTableAssociationB0545C4C", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 167, + "startLine": 1474, "startColumn": 5, - "endLine": 167, + "endLine": 1474, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt helloWorldLambdaRestApi6825FB98.RootResourceId" + "resolutionSource": "Ref to 'ClusterVpcPrivateSubnet1Subnet505E4257'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiHELLOAD091B67", + "logicalId": "ClusterVpcPrivateSubnet1DefaultRoute6BD16184", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 173, + "startLine": 1489, "startColumn": 5, - "endLine": 173, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 1489, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16330,43 +16795,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiHELLOAD091B67", + "logicalId": "ClusterVpcPrivateSubnet1DefaultRoute6BD16184", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 174, + "startLine": 1493, "startColumn": 5, - "endLine": 174, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 1493, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'helloWorldLambdaRestApi6825FB98'" + "resolutionSource": "Ref to 'ClusterVpcPrivateSubnet1RouteTable4D91A516'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLO61B4977B", + "logicalId": "ClusterVpcPrivateSubnet2Subnet176BE39E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 185, + "startLine": 1508, "startColumn": 5, - "endLine": 185, - "endColumn": 12, + "endLine": 1508, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16376,132 +16841,143 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLO61B4977B", + "logicalId": "ClusterVpcPrivateSubnet2Subnet176BE39E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 186, + "startLine": 1516, "startColumn": 5, - "endLine": 186, - "endColumn": 18, + "endLine": 1516, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt helloWorldFunction00C940B5.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLO61B4977B", + "logicalId": "ClusterVpcPrivateSubnet2Subnet176BE39E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 192, + "startLine": 1532, "startColumn": 5, - "endLine": 192, - "endColumn": 15, + "endLine": 1532, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLO61B4977B", + "logicalId": "ClusterVpcPrivateSubnet2RouteTable918A9411", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 193, + "startLine": 1553, "startColumn": 5, - "endLine": 193, - "endColumn": 15, + "endLine": 1553, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:helloWorldLambdaRestApi6825FB98}/{ref:helloWorldLambdaRestApiDeploymentStageprod67DD79AF}/GET/HELLO)" + "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionTestCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLOD4AD0AEF", + "logicalId": "ClusterVpcPrivateSubnet2RouteTableAssociation994802D2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 229, + "startLine": 1568, "startColumn": 5, - "endLine": 229, - "endColumn": 12, + "endLine": 1568, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcPrivateSubnet2RouteTable918A9411'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionTestCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLOD4AD0AEF", + "logicalId": "ClusterVpcPrivateSubnet2RouteTableAssociation994802D2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 230, + "startLine": 1571, "startColumn": 5, - "endLine": 230, - "endColumn": 18, + "endLine": 1571, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt helloWorldFunction00C940B5.Arn" + "resolutionSource": "Ref to 'ClusterVpcPrivateSubnet2Subnet176BE39E'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionTestCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLOD4AD0AEF", + "logicalId": "ClusterVpcPrivateSubnet2DefaultRouteCC18893B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 236, + "startLine": 1586, "startColumn": 5, - "endLine": 236, - "endColumn": 15, + "endLine": 1586, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16511,851 +16987,661 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionTestCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLOD4AD0AEF", + "logicalId": "ClusterVpcPrivateSubnet2DefaultRouteCC18893B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 237, + "startLine": 1590, "startColumn": 5, - "endLine": 237, - "endColumn": 15, + "endLine": 1590, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:helloWorldLambdaRestApi6825FB98}/test-invoke-stage/GET/HELLO)" + "resolutionSource": "Ref to 'ClusterVpcPrivateSubnet2RouteTable918A9411'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiHELLOGET6E88F46C", + "logicalId": "ClusterVpcVPCGW361426E5", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 273, + "startLine": 1626, "startColumn": 5, - "endLine": 273, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 1626, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiHELLOGET6E88F46C", + "logicalId": "BlueTargetGroupF108EB01", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 301, + "startLine": 1641, "startColumn": 5, - "endLine": 301, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 1641, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'helloWorldLambdaRestApiHELLOAD091B67'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiHELLOGET6E88F46C", + "logicalId": "BlueTargetGroupF108EB01", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 304, + "startLine": 1642, "startColumn": 5, - "endLine": 304, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 1642, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'helloWorldLambdaRestApi6825FB98'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "cfnAuth", + "logicalId": "BlueTargetGroupF108EB01", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Authorizer" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 365, + "startLine": 1643, "startColumn": 5, - "endLine": 365, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 1643, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'helloWorldLambdaRestApi6825FB98'" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'helloWorldFunctionServiceRole8475DBF0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldFunctionServiceRole8475DBF0", + "logicalId": "BlueTargetGroupF108EB01", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.TargetType", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1650, + "startColumn": 5, + "endLine": 1650, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'helloWorldFunction00C940B5' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldFunction00C940B5", + "logicalId": "BlueTargetGroupF108EB01", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 39, - "startColumn": 4, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1651, + "startColumn": 5, + "endLine": 1651, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'helloWorldLambdaRestApi6825FB98' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApi6825FB98", + "logicalId": "GreenTargetGroupEEB2DF3E", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 67, - "startColumn": 4, - "endLine": 67, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1662, + "startColumn": 5, + "endLine": 1662, + "endColumn": 10, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'helloWorldLambdaRestApiCloudWatchRole22367FBD' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiCloudWatchRole22367FBD", + "logicalId": "GreenTargetGroupEEB2DF3E", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 76, - "startColumn": 4, - "endLine": 76, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1663, + "startColumn": 5, + "endLine": 1663, + "endColumn": 10, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'helloWorldLambdaRestApiDeploymentStageprod67DD79AF' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiDeploymentStageprod67DD79AF", + "logicalId": "GreenTargetGroupEEB2DF3E", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 148, - "startColumn": 4, - "endLine": 148, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/custom-logical-names--MyStack.template.json": { - "filePath": "cdk/custom-logical-names--MyStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 + "startLine": 1664, + "startColumn": 5, + "endLine": 1664, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyTopic86869434' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyTopic86869434", + "logicalId": "GreenTargetGroupEEB2DF3E", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.TargetType", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 19, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1671, + "startColumn": 5, + "endLine": 1671, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyBucketF68F3FF0' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyBucketF68F3FF0", + "logicalId": "GreenTargetGroupEEB2DF3E", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 9, - "startColumn": 3, - "endLine": 9, - "endColumn": 20, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/custom-resource--CustomResourceDemoStack.template.json": { - "filePath": "cdk/custom-resource--CustomResourceDemoStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 3, - "informational": 5, - "debug": 0 + "startLine": 1672, + "startColumn": 5, + "endLine": 1672, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C", + "logicalId": "SecurityGroupDD263621", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 201, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 1683, "startColumn": 5, - "endLine": 201, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 1683, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.9", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'DemoResourceProviderframeworkonEventServiceRoleDB88154F' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DemoResourceProviderframeworkonEventF8E49AD2", + "logicalId": "SecurityGroupDD263621", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 126, - "startColumn": 4, - "endLine": 126, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1700, + "startColumn": 5, + "endLine": 1700, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebcServiceRoleFE9ABB04' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C", + "logicalId": "PublicAlb84330974", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Scheme", "category": "Best Practice", - "startLine": 204, - "startColumn": 4, - "endLine": 204, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1717, + "startColumn": 5, + "endLine": 1717, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DemoResource5B5C546C", + "logicalId": "PublicAlb84330974", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::CustomResource" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.ServiceToken", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 140, + "startLine": 1734, "startColumn": 5, - "endLine": 140, - "endColumn": 18, + "endLine": 1734, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt DemoResourceProviderframeworkonEventF8E49AD2.Arn" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DemoResourceProviderframeworkonEventServiceRoleDB88154F' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DemoResourceProviderframeworkonEventServiceRoleDB88154F", + "logicalId": "PublicAlbAlbListener804C1B2779", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.LoadBalancerArn", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1757, + "startColumn": 5, + "endLine": 1757, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'PublicAlb84330974'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DemoResourceProviderframeworkonEventF8E49AD2' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DemoResourceProviderframeworkonEventF8E49AD2", + "logicalId": "EcsCluster72B17558", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::ClusterCapacityProviderAssociations" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 94, - "startColumn": 4, - "endLine": 94, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1780, + "startColumn": 5, + "endLine": 1780, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'EcsCluster97242B84'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebcServiceRoleFE9ABB04' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebcServiceRoleFE9ABB04", + "logicalId": "FargateServiceAC2B3B85", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 156, - "startColumn": 4, - "endLine": 156, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1792, + "startColumn": 5, + "endLine": 1792, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'EcsCluster97242B84'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C", + "logicalId": "FargateServiceAC2B3B85", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 190, - "startColumn": 4, - "endLine": 190, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/custom-resource-provider--CustomResourceDemoStack.template.json": { - "filePath": "cdk/custom-resource-provider--CustomResourceDemoStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 11, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 3, - "informational": 7, - "debug": 0 + "startLine": 1805, + "startColumn": 5, + "endLine": 1805, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ServiceName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C", + "logicalId": "FargateServiceAC2B3B85", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 227, + "propertyPath": "Properties.ServiceName", + "category": "Best Practice", + "startLine": 1836, "startColumn": 5, - "endLine": 227, - "endColumn": 13, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "endLine": 1836, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.6", - "lifecycle": "end-of-life" + "lifecycle": "create-only" } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'DemoResourceMyProviderframeworkonEventServiceRole1437DF1C' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DemoResourceMyProviderframeworkonEvent65F24A35", + "logicalId": "FargateServiceSecurityGroup0A0E79CB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 126, - "startColumn": 4, - "endLine": 126, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1853, + "startColumn": 5, + "endLine": 1853, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebcServiceRoleFE9ABB04' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C", + "logicalId": "FargateServiceSecurityGroup0A0E79CB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 230, - "startColumn": 4, - "endLine": 230, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1861, + "startColumn": 5, + "endLine": 1861, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "logicalId": "FargateServiceSecurityGroupfromCodepipelineBuildDeployStackSecurityGroup07B96CA880690A9743", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 317, - "startColumn": 4, - "endLine": 317, + "startLine": 1879, + "startColumn": 5, + "endLine": 1879, "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DemoResourceResource1DB79ECAB", + "logicalId": "FargateServiceSecurityGroupfromCodepipelineBuildDeployStackSecurityGroup07B96CA880690A9743", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::CustomResource" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.ServiceToken", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 166, + "startLine": 1880, "startColumn": 5, - "endLine": 166, - "endColumn": 18, + "endLine": 1880, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt DemoResourceMyProviderframeworkonEvent65F24A35.Arn" + "resolutionSource": "GetAtt FargateServiceSecurityGroup0A0E79CB.GroupId" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DemoResourceMyProviderframeworkonEventServiceRole1437DF1C' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DemoResourceMyProviderframeworkonEventServiceRole1437DF1C", + "logicalId": "FargateServiceSecurityGroupfromCodepipelineBuildDeployStackSecurityGroup07B96CA880690A9743", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1886, + "startColumn": 5, + "endLine": 1886, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DemoResourceMyProviderframeworkonEvent65F24A35' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DemoResourceMyProviderframeworkonEvent65F24A35", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 94, - "startColumn": 4, - "endLine": 94, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebcServiceRoleFE9ABB04' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebcServiceRoleFE9ABB04", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 182, - "startColumn": 4, - "endLine": 182, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 216, - "startColumn": 4, - "endLine": 216, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 239, - "startColumn": 4, - "endLine": 239, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "logicalId": "FargateServiceSecurityGroupfromCodepipelineBuildDeployStackSecurityGroup07B96CA880690A9743", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SourceSecurityGroupId", "category": "Best Practice", - "startLine": 300, - "startColumn": 4, - "endLine": 300, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/ddb-stream-lambda-sns--DdbStreamStack.template.json": { - "filePath": "cdk/ddb-stream-lambda-sns--DdbStreamStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 16, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 4, - "informational": 20, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "itemL2TableLambdaFunction1987B4C5", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 228, + "startLine": 1887, "startColumn": 5, - "endLine": 228, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 1887, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs20.x", - "lifecycle": "deprecated" + "lifecycle": "create-only", + "resolutionSource": "GetAtt SecurityGroupDD263621.GroupId" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "itemL3TableLambdaFunction7B818C58", + "logicalId": "FargateServiceSecurityGroupfromCodepipelineBuildDeployStackSecurityGroup07B96CA880690A9743", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 433, + "propertyPath": "Properties.ToPort", + "category": "Best Practice", + "startLine": 1893, "startColumn": 5, - "endLine": 433, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 1893, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs20.x", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'itemL2TableLambdaFunctionServiceRole41583A05' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "itemL2TableLambdaFunction1987B4C5", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 233, - "startColumn": 4, - "endLine": 233, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'itemL3TableLambdaFunctionServiceRoleBA21B37D' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "itemL3TableLambdaFunction7B818C58", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 438, - "startColumn": 4, - "endLine": 438, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "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": "itemL3TableSqsDlqQueueD3C251B9", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 536, - "startColumn": 4, - "endLine": 536, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" - }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", + "message": "Property 'ComputePlatform' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ddbstreamtopic7821AF6E", + "logicalId": "CodeDeployGroupApplication13EFBDA6", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::CodeDeploy::Application" }, - "propertyPath": "Properties.TopicName", + "propertyPath": "Properties.ComputePlatform", "category": "Best Practice", - "startLine": 27, + "startLine": 1942, "startColumn": 5, - "endLine": 27, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 1942, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -17365,87 +17651,90 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "message": "Property 'ApplicationName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ddbstreaml2dlq5966ED66", + "logicalId": "CodeDeployGroup58220FC8", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::CodeDeploy::DeploymentGroup" }, - "propertyPath": "Properties.QueueName", + "propertyPath": "Properties.ApplicationName", "category": "Best Practice", - "startLine": 70, + "startLine": 1954, "startColumn": 5, - "endLine": 70, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "endLine": 1954, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'CodeDeployGroupApplication13EFBDA6'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'AliasName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "itemL2TableBAC64D83", + "logicalId": "BuildDeployPipelineArtifactsBucketEncryptionKeyAliasC52C67EF", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::KMS::Alias" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.AliasName", "category": "Best Practice", - "startLine": 88, + "startLine": 2074, "startColumn": 5, - "endLine": 88, + "endLine": 2074, "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "itemL2TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL2Table0234427734A22B95", + "logicalId": "BuildDeployPipelineArtifactsBucketPolicyC49383E9", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Properties.EventSourceArn", + "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 259, + "startLine": 2122, "startColumn": 5, - "endLine": 259, - "endColumn": 20, + "endLine": 2122, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt itemL2TableBAC64D83.StreamArn" + "resolutionSource": "Ref to 'BuildDeployPipelineArtifactsBucket5D4A76C1'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StartingPosition' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "itemL2TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL2Table0234427734A22B95", + "logicalId": "BuildDeployPipeline5EEC284B", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties.StartingPosition", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 270, + "startLine": 2309, "startColumn": 5, - "endLine": 270, - "endColumn": 22, + "endLine": 2309, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -17453,88 +17742,81 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'repoBEC318EA' of type 'AWS::CodeCommit::Repository' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemL3TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL3TableDynamoTableF17D6710E0C1078B", + "logicalId": "repoBEC318EA", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::CodeCommit::Repository" }, - "propertyPath": "Properties.EventSourceArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 480, - "startColumn": 5, - "endLine": 480, - "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt itemL3TableDynamoTable6BC36F24.StreamArn" - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'StartingPosition' is create-only; updating it will cause resource replacement", + "message": "Resource 'repoCodepipelineBuildDeployStackBuildDeployPipeline2B279CCCmainEventRule3F24D1E0' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemL3TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL3TableDynamoTableF17D6710E0C1078B", + "logicalId": "repoCodepipelineBuildDeployStackBuildDeployPipeline2B279CCCmainEventRule3F24D1E0", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.StartingPosition", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 491, - "startColumn": 5, - "endLine": 491, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 23, + "startColumn": 4, + "endLine": 23, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'imageRepo1D8A68AF' of type 'AWS::ECR::Repository' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemL3TableDynamoTable6BC36F24", + "logicalId": "imageRepo1D8A68AF", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ECR::Repository" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 507, - "startColumn": 5, - "endLine": 507, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 89, + "startColumn": 3, + "endLine": 89, + "endColumn": 21, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ddbstreamtopic7821AF6E' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'FargateTaskDefTaskRole0B257552' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ddbstreamtopic7821AF6E", + "logicalId": "FargateTaskDefTaskRole0B257552", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 99, "startColumn": 4, - "endLine": 5, + "endLine": 99, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -17542,19 +17824,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ddbstreaml2dlq5966ED66' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Resource 'FargateTaskDefC6FB60B4' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ddbstreaml2dlq5966ED66", + "logicalId": "FargateTaskDefC6FB60B4", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 67, + "startLine": 119, "startColumn": 4, - "endLine": 67, + "endLine": 119, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -17562,19 +17844,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'itemL2TableBAC64D83' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'FargateTaskDefExecutionRole272677A9' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemL2TableBAC64D83", + "logicalId": "FargateTaskDefExecutionRole272677A9", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 80, + "startLine": 207, "startColumn": 4, - "endLine": 80, + "endLine": 207, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -17582,19 +17864,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'itemL2TableLambdaFunctionServiceRole41583A05' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'BuildImageRoleA9C72406' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemL2TableLambdaFunctionServiceRole41583A05", + "logicalId": "BuildImageRoleA9C72406", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 109, + "startLine": 265, "startColumn": 4, - "endLine": 109, + "endLine": 265, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -17602,19 +17884,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'itemL2TableLambdaFunction1987B4C5' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'BuildImage74257FD8' of type 'AWS::CodeBuild::Project' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemL2TableLambdaFunction1987B4C5", + "logicalId": "BuildImage74257FD8", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::CodeBuild::Project" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 206, + "startLine": 481, "startColumn": 4, - "endLine": 206, + "endLine": 481, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -17622,19 +17904,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'itemL2TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL2Table0234427734A22B95' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", + "message": "Resource 'BuildTestRoleC332A422' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemL2TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL2Table0234427734A22B95", + "logicalId": "BuildTestRoleC332A422", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 246, + "startLine": 627, "startColumn": 4, - "endLine": 246, + "endLine": 627, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -17642,19 +17924,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'itemL3TableLambdaFunctionServiceRoleBA21B37D' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'BuildTestC9659529' of type 'AWS::CodeBuild::Project' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemL3TableLambdaFunctionServiceRoleBA21B37D", + "logicalId": "BuildTestC9659529", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::CodeBuild::Project" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 278, + "startLine": 813, "startColumn": 4, - "endLine": 278, + "endLine": 813, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -17662,19 +17944,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'itemL3TableLambdaFunction7B818C58' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'BuildLambdaServiceRole8FB6C033' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemL3TableLambdaFunction7B818C58", + "logicalId": "BuildLambdaServiceRole8FB6C033", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 412, + "startLine": 856, "startColumn": 4, - "endLine": 412, + "endLine": 856, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -17682,19 +17964,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'itemL3TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL3TableDynamoTableF17D6710E0C1078B' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", + "message": "Resource 'BuildLambda72E2A667' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemL3TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL3TableDynamoTableF17D6710E0C1078B", + "logicalId": "BuildLambda72E2A667", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 467, + "startLine": 919, "startColumn": 4, - "endLine": 467, + "endLine": 919, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -17702,19 +17984,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'itemL3TableDynamoTable6BC36F24' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemL3TableDynamoTable6BC36F24", + "logicalId": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 499, + "startLine": 1032, "startColumn": 4, - "endLine": 499, + "endLine": 1032, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -17722,613 +18004,597 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'itemL3TableSqsDlqQueueD3C251B9' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Resource 'AWS679f53fac002430cb0da5b7982bd22872D164C4C' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemL3TableSqsDlqQueueD3C251B9", + "logicalId": "AWS679f53fac002430cb0da5b7982bd22872D164C4C", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 536, + "startLine": 1066, "startColumn": 4, - "endLine": 536, + "endLine": 1066, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "cdk/ec2-instance--EC2Example.template.json": { - "filePath": "cdk/ec2-instance--EC2Example.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 28, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 5, - "informational": 40, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W2508", - "severity": "WARN", - "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BlueTargetGroupF108EB01' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCSSHSecurityGroup0495A24F", + "logicalId": "BlueTargetGroupF108EB01", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.SecurityGroupIngress", - "suggestedFix": "Restrict the CIDR range to specific IP addresses", - "category": "Security", - "startLine": 229, - "startColumn": 5, - "endLine": 229, - "endColumn": 26, - "ruleDescription": "Security group allows open access to sensitive port", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1640, + "startColumn": 4, + "endLine": 1640, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'EC2serverEc2Role6775A3D4' dependency already enforced by a 'Ref' at 'Properties.UserData.Fn::Base64.Fn::Join.1.11'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'GreenTargetGroupEEB2DF3E' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "EC2Instance1F00751C57ee729c1274d778", + "logicalId": "GreenTargetGroupEEB2DF3E", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 658, + "startLine": 1661, "startColumn": 4, - "endLine": 658, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 1661, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'EC2serverEc2Role6775A3D4' dependency already enforced by a 'Ref' at 'Properties.UserData.Fn::Base64.Fn::Join.1.21'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SecurityGroupDD263621' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "EC2Instance1F00751C57ee729c1274d778", + "logicalId": "SecurityGroupDD263621", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 658, + "startLine": 1682, "startColumn": 4, - "endLine": 658, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 1682, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'PublicAlb84330974' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "logicalId": "PublicAlb84330974", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 777, + "startLine": 1710, "startColumn": 4, - "endLine": 777, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 1710, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiBServiceRoleBA21DBC1' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'PublicAlbAlbListener804C1B2779' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiB6723FB92", + "logicalId": "PublicAlbAlbListener804C1B2779", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 939, + "startLine": 1748, "startColumn": 4, - "endLine": 939, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 1748, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'EcsCluster97242B84' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPC61AD6880", + "logicalId": "EcsCluster97242B84", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::ECS::Cluster" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 1767, + "startColumn": 3, + "endLine": 1767, + "endColumn": 22, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'FargateServiceAC2B3B85' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPC61AD6880", + "logicalId": "FargateServiceAC2B3B85", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 1791, + "startColumn": 4, + "endLine": 1791, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Resource 'FargateServiceSecurityGroup0A0E79CB' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet1SubnetF3987995", + "logicalId": "FargateServiceSecurityGroup0A0E79CB", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 1852, + "startColumn": 4, + "endLine": 1852, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'CodeDeployGroupServiceRole50553EBF' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet1SubnetF3987995", + "logicalId": "CodeDeployGroupServiceRole50553EBF", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 33, - "startColumn": 5, - "endLine": 33, + "startLine": 1907, + "startColumn": 4, + "endLine": 1907, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'CodeDeployGroupApplication13EFBDA6' of type 'AWS::CodeDeploy::Application' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet1SubnetF3987995", + "logicalId": "CodeDeployGroupApplication13EFBDA6", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::CodeDeploy::Application" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 49, - "startColumn": 5, - "endLine": 49, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC61AD6880'" - } + "startLine": 1941, + "startColumn": 4, + "endLine": 1941, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'CodeDeployGroup58220FC8' of type 'AWS::CodeDeploy::DeploymentGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet1RouteTable140320E2", + "logicalId": "CodeDeployGroup58220FC8", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::CodeDeploy::DeploymentGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 66, - "startColumn": 5, - "endLine": 66, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC61AD6880'" - } + "startLine": 1950, + "startColumn": 4, + "endLine": 1950, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'BuildDeployPipelineArtifactsBucketEncryptionKey8AB5ABF8' of type 'AWS::KMS::Key' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet1RouteTableAssociationBCA9EE21", + "logicalId": "BuildDeployPipelineArtifactsBucketEncryptionKey8AB5ABF8", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::KMS::Key" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 77, - "startColumn": 5, - "endLine": 77, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCServerPublicSubnet1RouteTable140320E2'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 2035, + "startColumn": 4, + "endLine": 2035, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'BuildDeployPipelineArtifactsBucket5D4A76C1' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet1RouteTableAssociationBCA9EE21", + "logicalId": "BuildDeployPipelineArtifactsBucket5D4A76C1", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 80, - "startColumn": 5, - "endLine": 80, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCServerPublicSubnet1SubnetF3987995'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 2090, + "startColumn": 4, + "endLine": 2090, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'BuildDeployPipelineRole3223E55F' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet1DefaultRoute0DEC8857", + "logicalId": "BuildDeployPipelineRole3223E55F", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 91, - "startColumn": 5, - "endLine": 91, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 2171, + "startColumn": 4, + "endLine": 2171, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'BuildDeployPipeline5EEC284B' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet1DefaultRoute0DEC8857", + "logicalId": "BuildDeployPipeline5EEC284B", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 95, - "startColumn": 5, - "endLine": 95, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCServerPublicSubnet1RouteTable140320E2'" - } + "startLine": 2293, + "startColumn": 4, + "endLine": 2293, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Resource 'BuildDeployPipelineSourceAppCodeCommitCodePipelineActionRoleB9EB8BA0' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet2SubnetDB508B90", + "logicalId": "BuildDeployPipelineSourceAppCodeCommitCodePipelineActionRoleB9EB8BA0", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 109, - "startColumn": 5, - "endLine": 109, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 2471, + "startColumn": 4, + "endLine": 2471, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'BuildDeployPipelineEventsRoleDE5B0F8F' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet2SubnetDB508B90", + "logicalId": "BuildDeployPipelineEventsRoleDE5B0F8F", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 117, - "startColumn": 5, - "endLine": 117, + "startLine": 2584, + "startColumn": 4, + "endLine": 2584, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'BuildDeployPipelineTestJestCDKCodePipelineActionRoleFA2BA8B1' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet2SubnetDB508B90", + "logicalId": "BuildDeployPipelineTestJestCDKCodePipelineActionRoleFA2BA8B1", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 133, - "startColumn": 5, - "endLine": 133, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC61AD6880'" - } + "startLine": 2650, + "startColumn": 4, + "endLine": 2650, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'BuildDeployPipelineBuildDockerBuildPushCodePipelineActionRole760EF965' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet2RouteTableD6971BF3", + "logicalId": "BuildDeployPipelineBuildDockerBuildPushCodePipelineActionRole760EF965", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 150, - "startColumn": 5, - "endLine": 150, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC61AD6880'" - } + "startLine": 2708, + "startColumn": 4, + "endLine": 2708, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'BuildDeployPipelineDeployEcsFargateDeployCodePipelineActionRole054540AB' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet2RouteTableAssociationE261CDCA", + "logicalId": "BuildDeployPipelineDeployEcsFargateDeployCodePipelineActionRole054540AB", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 161, + "startLine": 2766, + "startColumn": 4, + "endLine": 2766, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/cognito-api-lambda--CognitoProtectedApi.template.json": { + "filePath": "cdk/cognito-api-lambda--CognitoProtectedApi.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 14, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 23, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "helloWorldFunction00C940B5", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 53, "startColumn": 5, - "endLine": 161, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 53, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCServerPublicSubnet2RouteTableD6971BF3'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'helloWorldFunctionServiceRole8475DBF0' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "helloWorldFunction00C940B5", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 55, + "startColumn": 4, + "endLine": 55, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet2RouteTableAssociationE261CDCA", + "logicalId": "helloWorldLambdaRestApiDeploymentCB1FF57464f3e9f368e40968a1aeabdb5bcc9580", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 164, + "startLine": 133, "startColumn": 5, - "endLine": 164, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 133, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCServerPublicSubnet2SubnetDB508B90'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "Ref to 'helloWorldLambdaRestApi6825FB98'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet2DefaultRoute6A434666", + "logicalId": "helloWorldLambdaRestApiDeploymentStageprod67DD79AF", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 175, + "startLine": 152, "startColumn": 5, - "endLine": 175, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 152, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'helloWorldLambdaRestApi6825FB98'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet2DefaultRoute6A434666", + "logicalId": "helloWorldLambdaRestApiDeploymentStageprod67DD79AF", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 179, + "startLine": 155, "startColumn": 5, - "endLine": 179, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 155, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCServerPublicSubnet2RouteTableD6971BF3'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCVPCGW3AFA48F6", + "logicalId": "helloWorldLambdaRestApiHELLOAD091B67", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 210, + "startLine": 167, "startColumn": 5, - "endLine": 210, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "endLine": 167, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC61AD6880'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt helloWorldLambdaRestApi6825FB98.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCSSHSecurityGroup0495A24F", + "logicalId": "helloWorldLambdaRestApiHELLOAD091B67", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 221, + "startLine": 173, "startColumn": 5, - "endLine": 221, - "endColumn": 22, + "endLine": 173, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -18338,89 +18604,88 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCSSHSecurityGroup0495A24F", + "logicalId": "helloWorldLambdaRestApiHELLOAD091B67", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 238, + "startLine": 174, "startColumn": 5, - "endLine": 238, - "endColumn": 11, + "endLine": 174, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC61AD6880'" + "resolutionSource": "Ref to 'helloWorldLambdaRestApi6825FB98'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EC2assetBucketPolicy31C0B372", + "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLO61B4977B", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 276, + "startLine": 185, "startColumn": 5, - "endLine": 276, + "endLine": 185, "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'EC2assetBucketC584B4AB'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Content' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EC2assetBucketDeploymentAwsCliLayerFF55632D", + "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLO61B4977B", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Content", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 353, + "startLine": 186, "startColumn": 5, - "endLine": 353, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "endLine": 186, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt helloWorldFunction00C940B5.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EC2assetBucketDeploymentAwsCliLayerFF55632D", + "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLO61B4977B", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Description", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 359, + "startLine": 192, "startColumn": 5, - "endLine": 359, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "endLine": 192, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -18430,88 +18695,87 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EC2ec2InstanceSecurityGroupD268D496", + "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLO61B4977B", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 533, + "startLine": 193, "startColumn": 5, - "endLine": 533, - "endColumn": 22, + "endLine": 193, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:helloWorldLambdaRestApi6825FB98}/{ref:helloWorldLambdaRestApiDeploymentStageprod67DD79AF}/GET/HELLO)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EC2ec2InstanceSecurityGroupD268D496", + "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionTestCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLOD4AD0AEF", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 541, + "startLine": 229, "startColumn": 5, - "endLine": 541, - "endColumn": 11, + "endLine": 229, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC61AD6880'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EC2Instance1F00751C57ee729c1274d778", + "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionTestCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLOD4AD0AEF", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 565, + "startLine": 230, "startColumn": 5, - "endLine": 565, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 230, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt helloWorldFunction00C940B5.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EC2Instance1F00751C57ee729c1274d778", + "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionTestCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLOD4AD0AEF", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 576, + "startLine": 236, "startColumn": 5, - "endLine": 576, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 236, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -18521,122 +18785,137 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EC2Instance1F00751C57ee729c1274d778", + "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionTestCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLOD4AD0AEF", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 579, + "startLine": 237, "startColumn": 5, - "endLine": 579, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 237, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:helloWorldLambdaRestApi6825FB98}/test-invoke-stage/GET/HELLO)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EC2Instance1F00751C57ee729c1274d778", + "logicalId": "helloWorldLambdaRestApiHELLOGET6E88F46C", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.SecurityGroupIds", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 580, + "startLine": 273, "startColumn": 5, - "endLine": 580, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 273, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EC2Instance1F00751C57ee729c1274d778", + "logicalId": "helloWorldLambdaRestApiHELLOGET6E88F46C", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 594, + "startLine": 301, "startColumn": 5, - "endLine": 594, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 301, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCServerPublicSubnet1SubnetF3987995'" + "resolutionSource": "Ref to 'helloWorldLambdaRestApiHELLOAD091B67'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EC2Instance1F00751C57ee729c1274d778", + "logicalId": "helloWorldLambdaRestApiHELLOGET6E88F46C", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 603, + "startLine": 304, "startColumn": 5, - "endLine": 603, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 304, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Base64 with unresolvable argument)" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'helloWorldLambdaRestApi6825FB98'" } }, { - "ruleId": "I9003", + "ruleId": "I9001", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", + "entity": { + "logicalId": "cfnAuth", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Authorizer" + }, + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" + "startLine": 365, + "startColumn": 5, + "endLine": 365, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'helloWorldLambdaRestApi6825FB98'" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'VPCSSHSecurityGroup0495A24F' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'helloWorldFunctionServiceRole8475DBF0' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCSSHSecurityGroup0495A24F", + "logicalId": "helloWorldFunctionServiceRole8475DBF0", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 220, + "startLine": 5, "startColumn": 4, - "endLine": 220, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -18644,19 +18923,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EC2serverEc2Role6775A3D4' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'helloWorldFunction00C940B5' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EC2serverEc2Role6775A3D4", + "logicalId": "helloWorldFunction00C940B5", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 405, + "startLine": 39, "startColumn": 4, - "endLine": 405, + "endLine": 39, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -18664,19 +18943,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EC2ec2InstanceSecurityGroupD268D496' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'helloWorldLambdaRestApi6825FB98' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EC2ec2InstanceSecurityGroupD268D496", + "logicalId": "helloWorldLambdaRestApi6825FB98", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::RestApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 532, + "startLine": 67, "startColumn": 4, - "endLine": 532, + "endLine": 67, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -18684,19 +18963,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'helloWorldLambdaRestApiCloudWatchRole22367FBD' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "logicalId": "helloWorldLambdaRestApiCloudWatchRole22367FBD", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 722, + "startLine": 76, "startColumn": 4, - "endLine": 722, + "endLine": 76, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -18704,75 +18983,94 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'helloWorldLambdaRestApiDeploymentStageprod67DD79AF' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "logicalId": "helloWorldLambdaRestApiDeploymentStageprod67DD79AF", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 747, + "startLine": 148, "startColumn": 4, - "endLine": 747, + "endLine": 148, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "cdk/custom-logical-names--MyStack.template.json": { + "filePath": "cdk/custom-logical-names--MyStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiBServiceRoleBA21DBC1' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'MyTopic86869434' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiBServiceRoleBA21DBC1", + "logicalId": "MyTopic86869434", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 788, - "startColumn": 4, - "endLine": 788, - "endColumn": 15, + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 19, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiB6723FB92' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'MyBucketF68F3FF0' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiB6723FB92", + "logicalId": "MyBucketF68F3FF0", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 911, - "startColumn": 4, - "endLine": 911, - "endColumn": 15, + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 20, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/ec2-instance-connect-endpoint--integ-testing-eicendpoint.template.json": { - "filePath": "cdk/ec2-instance-connect-endpoint--integ-testing-eicendpoint.template.json", + "cdk/custom-resource--CustomResourceDemoStack.template.json": { + "filePath": "cdk/custom-resource--CustomResourceDemoStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 29, + "resourcesScanned": 7, "counts": { "fatal": 0, "errors": 0, - "warnings": 8, - "informational": 34, + "warnings": 3, + "informational": 5, "debug": 0 }, "suppressed": 0, @@ -18786,15 +19084,15 @@ "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "EICEndpointonEventHandlerC2E1F5F2", + "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 412, + "startLine": 201, "startColumn": 5, - "endLine": 412, + "endLine": 201, "endColumn": 13, "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", @@ -18804,104 +19102,206 @@ } }, { - "ruleId": "W2531", + "ruleId": "W3005", "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "'DemoResourceProviderframeworkonEventServiceRoleDB88154F' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "EICEndpointisCompleteHandler0273707A", + "logicalId": "DemoResourceProviderframeworkonEventF8E49AD2", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 440, - "startColumn": 5, - "endLine": 440, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.9", - "lifecycle": "deprecated" - } + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 126, + "startColumn": 4, + "endLine": 126, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "W3005", "severity": "WARN", - "message": "'EICEndpointRole7DC4D43E' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebcServiceRoleFE9ABB04' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "EICEndpointonEventHandlerC2E1F5F2", + "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 415, + "startLine": 204, "startColumn": 4, - "endLine": 415, + "endLine": 204, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'EICEndpointRole7DC4D43E' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "EICEndpointisCompleteHandler0273707A", + "logicalId": "DemoResource5B5C546C", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::CustomResource" + }, + "propertyPath": "Properties.ServiceToken", + "category": "Best Practice", + "startLine": 140, + "startColumn": 5, + "endLine": 140, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt DemoResourceProviderframeworkonEventF8E49AD2.Arn" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DemoResourceProviderframeworkonEventServiceRoleDB88154F' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "DemoResourceProviderframeworkonEventServiceRoleDB88154F", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DemoResourceProviderframeworkonEventF8E49AD2' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "DemoResourceProviderframeworkonEventF8E49AD2", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 443, + "startLine": 94, "startColumn": 4, - "endLine": 443, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 94, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'EICEndpointProviderframeworkonEventServiceRoleC0D29A73' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebcServiceRoleFE9ABB04' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "EICEndpointProviderframeworkonEventB48896C9", + "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebcServiceRoleFE9ABB04", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 156, + "startColumn": 4, + "endLine": 156, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 618, + "startLine": 190, "startColumn": 4, - "endLine": 618, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 190, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "cdk/custom-resource-provider--CustomResourceDemoStack.template.json": { + "filePath": "cdk/custom-resource-provider--CustomResourceDemoStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 11, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 3, + "informational": 7, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 227, + "startColumn": 5, + "endLine": 227, + "endColumn": 13, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.6", + "lifecycle": "end-of-life" + } }, { "ruleId": "W3005", "severity": "WARN", - "message": "'EICEndpointProviderframeworkisCompleteServiceRole0E0A4C51' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'DemoResourceMyProviderframeworkonEventServiceRole1437DF1C' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "EICEndpointProviderframeworkisCompleteB1442B18", + "logicalId": "DemoResourceMyProviderframeworkonEvent65F24A35", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 786, + "startLine": 126, "startColumn": 4, - "endLine": 786, + "endLine": 126, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -18909,19 +19309,19 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'EICEndpointProviderframeworkonTimeoutServiceRole904320AB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebcServiceRoleFE9ABB04' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "EICEndpointProviderframeworkonTimeout83318112", + "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 954, + "startLine": 230, "startColumn": 4, - "endLine": 954, + "endLine": 230, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -18929,19 +19329,19 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'EICEndpointProviderwaiterstatemachineRole5E284D23' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", + "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "EICEndpointProviderwaiterstatemachine1A139B58", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 1082, + "startLine": 317, "startColumn": 4, - "endLine": 1082, + "endLine": 317, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -18949,422 +19349,377 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Vpc8378EB38", + "logicalId": "DemoResourceResource1DB79ECAB", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::CloudFormation::CustomResource" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.ServiceToken", "category": "Best Practice", - "startLine": 6, + "startLine": 166, "startColumn": 5, - "endLine": 6, - "endColumn": 15, + "endLine": 166, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt DemoResourceMyProviderframeworkonEvent65F24A35.Arn" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'DemoResourceMyProviderframeworkonEventServiceRole1437DF1C' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Vpc8378EB38", + "logicalId": "DemoResourceMyProviderframeworkonEventServiceRole1437DF1C", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Resource 'DemoResourceMyProviderframeworkonEvent65F24A35' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcrdsSubnet1SubnetC2926CEA", + "logicalId": "DemoResourceMyProviderframeworkonEvent65F24A35", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 24, - "startColumn": 5, - "endLine": 24, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 94, + "startColumn": 4, + "endLine": 94, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebcServiceRoleFE9ABB04' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcrdsSubnet1SubnetC2926CEA", + "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebcServiceRoleFE9ABB04", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 32, - "startColumn": 5, - "endLine": 32, + "startLine": 182, + "startColumn": 4, + "endLine": 182, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcrdsSubnet1SubnetC2926CEA", + "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 48, - "startColumn": 5, - "endLine": 48, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } + "startLine": 216, + "startColumn": 4, + "endLine": 216, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcrdsSubnet1RouteTableE62E4ED6", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 65, - "startColumn": 5, - "endLine": 65, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } + "startLine": 239, + "startColumn": 4, + "endLine": 239, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcrdsSubnet1RouteTableAssociationE01668F2", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 76, - "startColumn": 5, - "endLine": 76, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcrdsSubnet1RouteTableE62E4ED6'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 300, + "startColumn": 4, + "endLine": 300, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/ddb-stream-lambda-sns--DdbStreamStack.template.json": { + "filePath": "cdk/ddb-stream-lambda-sns--DdbStreamStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 16, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 4, + "informational": 20, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcrdsSubnet1RouteTableAssociationE01668F2", + "logicalId": "itemL2TableLambdaFunction1987B4C5", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 79, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 228, "startColumn": 5, - "endLine": 79, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 228, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcrdsSubnet1SubnetC2926CEA'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "actualValue": "nodejs20.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcrdsSubnet2Subnet70A835C8", + "logicalId": "itemL3TableLambdaFunction7B818C58", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 90, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 433, "startColumn": 5, - "endLine": 90, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 433, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs20.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'itemL2TableLambdaFunctionServiceRole41583A05' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcrdsSubnet2Subnet70A835C8", + "logicalId": "itemL2TableLambdaFunction1987B4C5", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 98, - "startColumn": 5, - "endLine": 98, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 233, + "startColumn": 4, + "endLine": 233, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'itemL3TableLambdaFunctionServiceRoleBA21B37D' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcrdsSubnet2Subnet70A835C8", + "logicalId": "itemL3TableLambdaFunction7B818C58", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 114, - "startColumn": 5, - "endLine": 114, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } + "startLine": 438, + "startColumn": 4, + "endLine": 438, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "VpcrdsSubnet2RouteTable3E531D9B", + "logicalId": "itemL3TableSqsDlqQueueD3C251B9", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 131, - "startColumn": 5, - "endLine": 131, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } + "startLine": 536, + "startColumn": 4, + "endLine": 536, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcrdsSubnet2RouteTableAssociation25A7BD68", + "logicalId": "ddbstreamtopic7821AF6E", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.TopicName", "category": "Best Practice", - "startLine": 142, + "startLine": 27, "startColumn": 5, - "endLine": 142, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 27, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcrdsSubnet2RouteTable3E531D9B'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcrdsSubnet2RouteTableAssociation25A7BD68", + "logicalId": "ddbstreaml2dlq5966ED66", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.QueueName", "category": "Best Practice", - "startLine": 145, + "startLine": 70, "startColumn": 5, - "endLine": 145, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 70, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcrdsSubnet2Subnet70A835C8'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "instanceInstanceSecurityGroup725C795D", + "logicalId": "itemL2TableBAC64D83", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 156, + "startLine": 88, "startColumn": 5, - "endLine": 156, - "endColumn": 22, + "endLine": 88, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "instanceInstanceSecurityGroup725C795D", + "logicalId": "itemL2TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL2Table0234427734A22B95", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.EventSourceArn", "category": "Best Practice", - "startLine": 196, + "startLine": 259, "startColumn": 5, - "endLine": 196, - "endColumn": 11, + "endLine": 259, + "endColumn": 20, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "GetAtt itemL2TableBAC64D83.StreamArn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'StartingPosition' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "instanceB7CCE687", + "logicalId": "itemL2TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL2Table0234427734A22B95", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.StartingPosition", "category": "Best Practice", - "startLine": 246, + "startLine": 270, "startColumn": 5, - "endLine": 246, + "endLine": 270, "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "instanceB7CCE687", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 257, - "startColumn": 5, - "endLine": 257, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -19374,121 +19729,86 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "instanceB7CCE687", + "logicalId": "itemL3TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL3TableDynamoTableF17D6710E0C1078B", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.EventSourceArn", "category": "Best Practice", - "startLine": 260, + "startLine": 480, "startColumn": 5, - "endLine": 260, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 480, + "endColumn": 20, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt itemL3TableDynamoTable6BC36F24.StreamArn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'StartingPosition' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "instanceB7CCE687", + "logicalId": "itemL3TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL3TableDynamoTableF17D6710E0C1078B", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.SecurityGroupIds", + "propertyPath": "Properties.StartingPosition", "category": "Best Practice", - "startLine": 261, + "startLine": 491, "startColumn": 5, - "endLine": 261, + "endLine": 491, "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "instanceB7CCE687", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 269, - "startColumn": 5, - "endLine": 269, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcrdsSubnet1SubnetC2926CEA'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "instanceB7CCE687", + "logicalId": "itemL3TableDynamoTable6BC36F24", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 278, + "startLine": 507, "startColumn": 5, - "endLine": 278, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 507, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "conditional-create-only" } }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EICEndpointRole7DC4D43E' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'ddbstreamtopic7821AF6E' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EICEndpointRole7DC4D43E", + "logicalId": "ddbstreamtopic7821AF6E", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 291, + "startLine": 5, "startColumn": 4, - "endLine": 291, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19496,19 +19816,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EICEndpointonEventHandlerC2E1F5F2' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'ddbstreaml2dlq5966ED66' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EICEndpointonEventHandlerC2E1F5F2", + "logicalId": "ddbstreaml2dlq5966ED66", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SQS::Queue" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 397, + "startLine": 67, "startColumn": 4, - "endLine": 397, + "endLine": 67, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19516,19 +19836,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EICEndpointisCompleteHandler0273707A' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'itemL2TableBAC64D83' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EICEndpointisCompleteHandler0273707A", + "logicalId": "itemL2TableBAC64D83", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 425, + "startLine": 80, "startColumn": 4, - "endLine": 425, + "endLine": 80, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19536,19 +19856,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EICEndpointProviderframeworkonEventServiceRoleC0D29A73' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'itemL2TableLambdaFunctionServiceRole41583A05' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EICEndpointProviderframeworkonEventServiceRoleC0D29A73", + "logicalId": "itemL2TableLambdaFunctionServiceRole41583A05", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 453, + "startLine": 109, "startColumn": 4, - "endLine": 453, + "endLine": 109, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19556,19 +19876,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EICEndpointProviderframeworkonEventB48896C9' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'itemL2TableLambdaFunction1987B4C5' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EICEndpointProviderframeworkonEventB48896C9", + "logicalId": "itemL2TableLambdaFunction1987B4C5", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 577, + "startLine": 206, "startColumn": 4, - "endLine": 577, + "endLine": 206, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19576,19 +19896,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EICEndpointProviderframeworkisCompleteServiceRole0E0A4C51' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'itemL2TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL2Table0234427734A22B95' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EICEndpointProviderframeworkisCompleteServiceRole0E0A4C51", + "logicalId": "itemL2TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL2Table0234427734A22B95", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::EventSourceMapping" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 631, + "startLine": 246, "startColumn": 4, - "endLine": 631, + "endLine": 246, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19596,19 +19916,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EICEndpointProviderframeworkisCompleteB1442B18' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'itemL3TableLambdaFunctionServiceRoleBA21B37D' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EICEndpointProviderframeworkisCompleteB1442B18", + "logicalId": "itemL3TableLambdaFunctionServiceRoleBA21B37D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 748, + "startLine": 278, "startColumn": 4, - "endLine": 748, + "endLine": 278, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19616,19 +19936,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EICEndpointProviderframeworkonTimeoutServiceRole904320AB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'itemL3TableLambdaFunction7B818C58' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EICEndpointProviderframeworkonTimeoutServiceRole904320AB", + "logicalId": "itemL3TableLambdaFunction7B818C58", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 799, + "startLine": 412, "startColumn": 4, - "endLine": 799, + "endLine": 412, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19636,19 +19956,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EICEndpointProviderframeworkonTimeout83318112' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'itemL3TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL3TableDynamoTableF17D6710E0C1078B' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EICEndpointProviderframeworkonTimeout83318112", + "logicalId": "itemL3TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL3TableDynamoTableF17D6710E0C1078B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::EventSourceMapping" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 916, + "startLine": 467, "startColumn": 4, - "endLine": 916, + "endLine": 467, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19656,19 +19976,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EICEndpointProviderwaiterstatemachineRole5E284D23' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'itemL3TableDynamoTable6BC36F24' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EICEndpointProviderwaiterstatemachineRole5E284D23", + "logicalId": "itemL3TableDynamoTable6BC36F24", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 967, + "startLine": 499, "startColumn": 4, - "endLine": 967, + "endLine": 499, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19676,35 +19996,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EICEndpointProviderwaiterstatemachine1A139B58' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "message": "Resource 'itemL3TableSqsDlqQueueD3C251B9' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EICEndpointProviderwaiterstatemachine1A139B58", + "logicalId": "itemL3TableSqsDlqQueueD3C251B9", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::SQS::Queue" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1052, + "startLine": 536, "startColumn": 4, - "endLine": 1052, + "endLine": 536, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/ecs-cluster--MyFirstEcsCluster.template.json": { - "filePath": "cdk/ecs-cluster--MyFirstEcsCluster.template.json", + "cdk/ec2-instance--EC2Example.template.json": { + "filePath": "cdk/ec2-instance--EC2Example.template.json", "status": "OK", "metadata": { - "resourcesScanned": 33, + "resourcesScanned": 28, "counts": { "fatal": 0, "errors": 0, - "warnings": 1, - "informational": 52, + "warnings": 5, + "informational": 40, "debug": 0 }, "suppressed": 0, @@ -19713,23 +20033,104 @@ }, "diagnostics": [ { - "ruleId": "W3697", + "ruleId": "W2508", "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", + "source": "ENGINE", + "entity": { + "logicalId": "VPCSSHSecurityGroup0495A24F", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress", + "suggestedFix": "Restrict the CIDR range to specific IP addresses", + "category": "Security", + "startLine": 229, + "startColumn": 5, + "endLine": 229, + "endColumn": 26, + "ruleDescription": "Security group allows open access to sensitive port", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'EC2serverEc2Role6775A3D4' dependency already enforced by a 'Ref' at 'Properties.UserData.Fn::Base64.Fn::Join.1.11'", "source": "CFN_LINT", "entity": { - "logicalId": "MyFleetLaunchConfig5D7F9801", + "logicalId": "EC2Instance1F00751C57ee729c1274d778", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EC2::Instance" }, - "category": "Deprecation", - "startLine": 588, - "startColumn": 3, - "endLine": 588, - "endColumn": 31, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 658, + "startColumn": 4, + "endLine": 658, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'EC2serverEc2Role6775A3D4' dependency already enforced by a 'Ref' at 'Properties.UserData.Fn::Base64.Fn::Join.1.21'", + "source": "CFN_LINT", + "entity": { + "logicalId": "EC2Instance1F00751C57ee729c1274d778", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 658, + "startColumn": 4, + "endLine": 658, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 777, + "startColumn": 4, + "endLine": 777, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiBServiceRoleBA21DBC1' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiB6723FB92", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 939, + "startColumn": 4, + "endLine": 939, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", @@ -19737,15 +20138,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcF9F0CA6F", + "logicalId": "VPC61AD6880", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 6, + "startLine": 7, "startColumn": 5, - "endLine": 6, + "endLine": 7, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -19759,15 +20160,15 @@ "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcF9F0CA6F", + "logicalId": "VPC61AD6880", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 9, + "startLine": 10, "startColumn": 5, - "endLine": 9, + "endLine": 10, "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -19781,15 +20182,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1SubnetF6608456", + "logicalId": "VPCServerPublicSubnet1SubnetF3987995", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 24, + "startLine": 25, "startColumn": 5, - "endLine": 24, + "endLine": 25, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -19803,15 +20204,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1SubnetF6608456", + "logicalId": "VPCServerPublicSubnet1SubnetF3987995", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 32, + "startLine": 33, "startColumn": 5, - "endLine": 32, + "endLine": 33, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -19825,21 +20226,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1SubnetF6608456", + "logicalId": "VPCServerPublicSubnet1SubnetF3987995", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 48, + "startLine": 49, "startColumn": 5, - "endLine": 48, + "endLine": 49, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'VPC61AD6880'" } }, { @@ -19848,22 +20249,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1RouteTableC46AB2F4", + "logicalId": "VPCServerPublicSubnet1RouteTable140320E2", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 65, + "startLine": 66, "startColumn": 5, - "endLine": 65, + "endLine": 66, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'VPC61AD6880'" } }, { @@ -19872,22 +20273,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", + "logicalId": "VPCServerPublicSubnet1RouteTableAssociationBCA9EE21", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 76, + "startLine": 77, "startColumn": 5, - "endLine": 76, + "endLine": 77, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'", + "resolutionSource": "Ref to 'VPCServerPublicSubnet1RouteTable140320E2'", "extra": { "replacement_strategy": "delete_then_create" } @@ -19899,22 +20300,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", + "logicalId": "VPCServerPublicSubnet1RouteTableAssociationBCA9EE21", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 79, + "startLine": 80, "startColumn": 5, - "endLine": 79, + "endLine": 80, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'", + "resolutionSource": "Ref to 'VPCServerPublicSubnet1SubnetF3987995'", "extra": { "replacement_strategy": "delete_then_create" } @@ -19926,15 +20327,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", + "logicalId": "VPCServerPublicSubnet1DefaultRoute0DEC8857", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 90, + "startLine": 91, "startColumn": 5, - "endLine": 90, + "endLine": 91, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -19949,68 +20350,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", + "logicalId": "VPCServerPublicSubnet1DefaultRoute0DEC8857", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 94, + "startLine": 95, "startColumn": 5, - "endLine": 94, + "endLine": 95, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.AllocationId", - "category": "Best Practice", - "startLine": 123, - "startColumn": 5, - "endLine": 123, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt MyVpcPublicSubnet1EIP096967CB.AllocationId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 129, - "startColumn": 5, - "endLine": 129, - "endColumn": 14, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'" + "resolutionSource": "Ref to 'VPCServerPublicSubnet1RouteTable140320E2'" } }, { @@ -20019,15 +20374,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", + "logicalId": "VPCServerPublicSubnet2SubnetDB508B90", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 150, + "startLine": 109, "startColumn": 5, - "endLine": 150, + "endLine": 109, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -20041,15 +20396,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", + "logicalId": "VPCServerPublicSubnet2SubnetDB508B90", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 158, + "startLine": 117, "startColumn": 5, - "endLine": 158, + "endLine": 117, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -20063,21 +20418,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", + "logicalId": "VPCServerPublicSubnet2SubnetDB508B90", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 174, + "startLine": 133, "startColumn": 5, - "endLine": 174, + "endLine": 133, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'VPC61AD6880'" } }, { @@ -20086,22 +20441,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2RouteTable1DF17386", + "logicalId": "VPCServerPublicSubnet2RouteTableD6971BF3", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 191, + "startLine": 150, "startColumn": 5, - "endLine": 191, + "endLine": 150, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'VPC61AD6880'" } }, { @@ -20110,22 +20465,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", + "logicalId": "VPCServerPublicSubnet2RouteTableAssociationE261CDCA", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 202, + "startLine": 161, "startColumn": 5, - "endLine": 202, + "endLine": 161, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'", + "resolutionSource": "Ref to 'VPCServerPublicSubnet2RouteTableD6971BF3'", "extra": { "replacement_strategy": "delete_then_create" } @@ -20137,22 +20492,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", + "logicalId": "VPCServerPublicSubnet2RouteTableAssociationE261CDCA", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 205, + "startLine": 164, "startColumn": 5, - "endLine": 205, + "endLine": 164, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'", + "resolutionSource": "Ref to 'VPCServerPublicSubnet2SubnetDB508B90'", "extra": { "replacement_strategy": "delete_then_create" } @@ -20164,15 +20519,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", + "logicalId": "VPCServerPublicSubnet2DefaultRoute6A434666", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 216, + "startLine": 175, "startColumn": 5, - "endLine": 216, + "endLine": 175, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -20187,85 +20542,66 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", + "logicalId": "VPCServerPublicSubnet2DefaultRoute6A434666", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 220, + "startLine": 179, "startColumn": 5, - "endLine": 220, + "endLine": 179, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.AllocationId", - "category": "Best Practice", - "startLine": 249, - "startColumn": 5, - "endLine": 249, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt MyVpcPublicSubnet2EIP8CCBA239.AllocationId" + "resolutionSource": "Ref to 'VPCServerPublicSubnet2RouteTableD6971BF3'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", + "logicalId": "VPCVPCGW3AFA48F6", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 255, + "startLine": 210, "startColumn": 5, - "endLine": 255, - "endColumn": 14, + "endLine": 210, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'" + "resolutionSource": "Ref to 'VPC61AD6880'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", + "logicalId": "VPCSSHSecurityGroup0495A24F", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 276, + "startLine": 221, "startColumn": 5, - "endLine": 276, + "endLine": 221, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -20273,146 +20609,114 @@ "lifecycle": "create-only" } }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 284, - "startColumn": 5, - "endLine": 284, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", + "logicalId": "VPCSSHSecurityGroup0495A24F", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 300, + "startLine": 238, "startColumn": 5, - "endLine": 300, + "endLine": 238, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'VPC61AD6880'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1RouteTable8819E6E2", + "logicalId": "EC2assetBucketPolicy31C0B372", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 317, + "startLine": 276, "startColumn": 5, - "endLine": 317, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 276, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'EC2assetBucketC584B4AB'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Content' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", + "logicalId": "EC2assetBucketDeploymentAwsCliLayerFF55632D", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Content", "category": "Best Practice", - "startLine": 328, + "startLine": 353, "startColumn": 5, - "endLine": 328, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 353, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", + "logicalId": "EC2assetBucketDeploymentAwsCliLayerFF55632D", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 331, + "startLine": 359, "startColumn": 5, - "endLine": 331, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 359, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet1Subnet5057CF7E'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", + "logicalId": "EC2ec2InstanceSecurityGroupD268D496", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 342, + "startLine": 533, "startColumn": 5, - "endLine": 342, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 533, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -20422,25 +20726,24 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", + "logicalId": "EC2ec2InstanceSecurityGroupD268D496", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 346, + "startLine": 541, "startColumn": 5, - "endLine": 346, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 541, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'" + "resolutionSource": "Ref to 'VPC61AD6880'" } }, { @@ -20449,16 +20752,17 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", + "logicalId": "EC2Instance1F00751C57ee729c1274d778", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 357, + "startLine": 565, "startColumn": 5, - "endLine": 357, + "endLine": 565, "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -20468,19 +20772,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", + "logicalId": "EC2Instance1F00751C57ee729c1274d778", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 365, + "startLine": 576, "startColumn": 5, - "endLine": 365, - "endColumn": 15, + "endLine": 576, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -20490,490 +20795,431 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", + "logicalId": "EC2Instance1F00751C57ee729c1274d778", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 381, + "startLine": 579, "startColumn": 5, - "endLine": 381, - "endColumn": 11, + "endLine": 579, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2RouteTableCEDCEECE", + "logicalId": "EC2Instance1F00751C57ee729c1274d778", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.SecurityGroupIds", "category": "Best Practice", - "startLine": 398, + "startLine": 580, "startColumn": 5, - "endLine": 398, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 580, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", + "logicalId": "EC2Instance1F00751C57ee729c1274d778", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 409, + "startLine": 594, "startColumn": 5, - "endLine": 409, - "endColumn": 18, + "endLine": 594, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "Ref to 'VPCServerPublicSubnet1SubnetF3987995'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", + "logicalId": "EC2Instance1F00751C57ee729c1274d778", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 412, + "startLine": 603, "startColumn": 5, - "endLine": 412, + "endLine": 603, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet2Subnet0040C983'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Base64 with unresolvable argument)" } }, { - "ruleId": "I9001", + "ruleId": "I9003", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", "source": "ENGINE", - "entity": { - "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 423, - "startColumn": 5, - "endLine": 423, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'VPCSSHSecurityGroup0495A24F' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", + "logicalId": "VPCSSHSecurityGroup0495A24F", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 427, - "startColumn": 5, - "endLine": 427, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'" - } + "startLine": 220, + "startColumn": 4, + "endLine": 220, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'EC2serverEc2Role6775A3D4' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyVpcVPCGW488ACE0D", + "logicalId": "EC2serverEc2Role6775A3D4", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 455, - "startColumn": 5, - "endLine": 455, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 405, + "startColumn": 4, + "endLine": 405, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Resource 'EC2ec2InstanceSecurityGroupD268D496' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyFleetInstanceSecurityGroup774E8234", + "logicalId": "EC2ec2InstanceSecurityGroupD268D496", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 466, - "startColumn": 5, - "endLine": 466, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 532, + "startColumn": 4, + "endLine": 532, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyFleetInstanceSecurityGroup774E8234", + "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 480, - "startColumn": 5, - "endLine": 480, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" - } + "startLine": 722, + "startColumn": 4, + "endLine": 722, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", + "message": "Resource 'CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyFleetLaunchConfig5D7F9801", + "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.IamInstanceProfile", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 591, - "startColumn": 5, - "endLine": 591, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyFleetInstanceProfile70A58496'" - } + "startLine": 747, + "startColumn": 4, + "endLine": 747, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Resource 'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiBServiceRoleBA21DBC1' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyFleetLaunchConfig5D7F9801", + "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiBServiceRoleBA21DBC1", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 594, - "startColumn": 5, - "endLine": 594, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 788, + "startColumn": 4, + "endLine": 788, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "message": "Resource 'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiB6723FB92' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyFleetLaunchConfig5D7F9801", + "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiB6723FB92", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 597, - "startColumn": 5, - "endLine": 597, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 911, + "startColumn": 4, + "endLine": 911, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/ec2-instance-connect-endpoint--integ-testing-eicendpoint.template.json": { + "filePath": "cdk/ec2-instance-connect-endpoint--integ-testing-eicendpoint.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 29, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 8, + "informational": 34, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "MyFleetLaunchConfig5D7F9801", + "logicalId": "EICEndpointonEventHandlerC2E1F5F2", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SecurityGroups", - "category": "Best Practice", - "startLine": 598, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 412, "startColumn": 5, - "endLine": 598, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 412, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "python3.9", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "MyFleetLaunchConfig5D7F9801", + "logicalId": "EICEndpointisCompleteHandler0273707A", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.UserData", - "category": "Best Practice", - "startLine": 606, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 440, "startColumn": 5, - "endLine": 606, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 440, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Base64 with unresolvable argument)" + "actualValue": "python3.9", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'EICEndpointRole7DC4D43E' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "MyFleetASG88E55886", + "logicalId": "EICEndpointonEventHandlerC2E1F5F2", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.LaunchConfigurationName", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 633, - "startColumn": 5, - "endLine": 633, - "endColumn": 29, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'MyFleetLaunchConfig5D7F9801'" - } + "startLine": 415, + "startColumn": 4, + "endLine": 415, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'EICEndpointRole7DC4D43E' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "MyFleetASG88E55886", + "logicalId": "EICEndpointisCompleteHandler0273707A", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VPCZoneIdentifier", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 646, - "startColumn": 5, - "endLine": 646, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 443, + "startColumn": 4, + "endLine": 443, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'EICEndpointProviderframeworkonEventServiceRoleC0D29A73' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "EcsCluster72B17558", + "logicalId": "EICEndpointProviderframeworkonEventB48896C9", "entityType": "Resource", - "resourceType": "AWS::ECS::ClusterCapacityProviderAssociations" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Cluster", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 678, - "startColumn": 5, - "endLine": 678, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'EcsCluster97242B84'" - } + "startLine": 618, + "startColumn": 4, + "endLine": 618, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AutoScalingGroupProvider.AutoScalingGroupArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'EICEndpointProviderframeworkisCompleteServiceRole0E0A4C51' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "AsgCapacityProvider760D11D9", + "logicalId": "EICEndpointProviderframeworkisCompleteB1442B18", "entityType": "Resource", - "resourceType": "AWS::ECS::CapacityProvider" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AutoScalingGroupProvider.AutoScalingGroupArn", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 691, - "startColumn": 6, - "endLine": 691, - "endColumn": 26, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 786, + "startColumn": 4, + "endLine": 786, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'EcsCluster97242B84' of type 'AWS::ECS::Cluster' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'EICEndpointProviderframeworkonTimeoutServiceRole904320AB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "EcsCluster97242B84", + "logicalId": "EICEndpointProviderframeworkonTimeout83318112", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 664, - "startColumn": 3, - "endLine": 664, - "endColumn": 22, - "ruleDescription": "Resource should have Tags", + "startLine": 954, + "startColumn": 4, + "endLine": 954, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'AsgCapacityProvider760D11D9' of type 'AWS::ECS::CapacityProvider' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'EICEndpointProviderwaiterstatemachineRole5E284D23' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", + "source": "CFN_LINT", "entity": { - "logicalId": "AsgCapacityProvider760D11D9", + "logicalId": "EICEndpointProviderwaiterstatemachine1A139B58", "entityType": "Resource", - "resourceType": "AWS::ECS::CapacityProvider" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 689, + "startLine": 1082, "startColumn": 4, - "endLine": 689, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endLine": 1082, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" - } - ] - }, - "cdk/ecs-cross-stack-load-balancer--CrossStackLBInfra.template.json": { - "filePath": "cdk/ecs-cross-stack-load-balancer--CrossStackLBInfra.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 25, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 40, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", @@ -21024,7 +21270,7 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "VpcrdsSubnet1SubnetC2926CEA", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -21046,7 +21292,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "VpcrdsSubnet1SubnetC2926CEA", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -21068,7 +21314,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "VpcrdsSubnet1SubnetC2926CEA", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -21091,7 +21337,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTable6C95E38E", + "logicalId": "VpcrdsSubnet1RouteTableE62E4ED6", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, @@ -21115,7 +21361,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", + "logicalId": "VpcrdsSubnet1RouteTableAssociationE01668F2", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -21130,7 +21376,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'", + "resolutionSource": "Ref to 'VpcrdsSubnet1RouteTableE62E4ED6'", "extra": { "replacement_strategy": "delete_then_create" } @@ -21142,7 +21388,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", + "logicalId": "VpcrdsSubnet1RouteTableAssociationE01668F2", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -21157,7 +21403,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'", + "resolutionSource": "Ref to 'VpcrdsSubnet1SubnetC2926CEA'", "extra": { "replacement_strategy": "delete_then_create" } @@ -21166,20 +21412,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", + "logicalId": "VpcrdsSubnet2Subnet70A835C8", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", "startLine": 90, "startColumn": 5, "endLine": 90, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -21189,138 +21434,146 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", + "logicalId": "VpcrdsSubnet2Subnet70A835C8", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 94, + "startLine": 98, "startColumn": 5, - "endLine": 94, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 98, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", + "logicalId": "VpcrdsSubnet2Subnet70A835C8", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 123, + "startLine": 114, "startColumn": 5, - "endLine": 123, - "endColumn": 18, + "endLine": 114, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcPublicSubnet1EIPD7E02669.AllocationId" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", + "logicalId": "VpcrdsSubnet2RouteTable3E531D9B", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 129, + "startLine": 131, "startColumn": 5, - "endLine": 129, - "endColumn": 14, + "endLine": 131, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "VpcrdsSubnet2RouteTableAssociation25A7BD68", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 150, + "startLine": 142, "startColumn": 5, - "endLine": 150, - "endColumn": 22, + "endLine": 142, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcrdsSubnet2RouteTable3E531D9B'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "VpcrdsSubnet2RouteTableAssociation25A7BD68", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 158, + "startLine": 145, "startColumn": 5, - "endLine": 158, - "endColumn": 15, + "endLine": 145, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcrdsSubnet2Subnet70A835C8'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "instanceInstanceSecurityGroup725C795D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 174, + "startLine": 156, "startColumn": 5, - "endLine": 174, - "endColumn": 11, + "endLine": 156, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "lifecycle": "create-only" } }, { @@ -21329,17 +21582,16 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTable94F7E489", + "logicalId": "instanceInstanceSecurityGroup725C795D", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 191, + "startLine": 196, "startColumn": 5, - "endLine": 191, + "endLine": 196, "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -21350,312 +21602,425 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "logicalId": "instanceB7CCE687", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 202, + "startLine": 246, "startColumn": 5, - "endLine": 202, - "endColumn": 18, + "endLine": 246, + "endColumn": 22, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "logicalId": "instanceB7CCE687", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 205, + "startLine": 257, "startColumn": 5, - "endLine": 205, - "endColumn": 14, + "endLine": 257, + "endColumn": 13, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", + "logicalId": "instanceB7CCE687", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 216, + "startLine": 260, "startColumn": 5, - "endLine": 216, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 260, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", + "logicalId": "instanceB7CCE687", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.SecurityGroupIds", "category": "Best Practice", - "startLine": 220, + "startLine": 261, "startColumn": 5, - "endLine": 220, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 261, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2NATGateway9182C01D", + "logicalId": "instanceB7CCE687", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 249, + "startLine": 269, "startColumn": 5, - "endLine": 249, - "endColumn": 18, + "endLine": 269, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcPublicSubnet2EIP3C605A87.AllocationId" + "resolutionSource": "Ref to 'VpcrdsSubnet1SubnetC2926CEA'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2NATGateway9182C01D", + "logicalId": "instanceB7CCE687", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 255, + "startLine": 278, "startColumn": 5, - "endLine": 255, + "endLine": 278, "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9003", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'EICEndpointRole7DC4D43E' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "EICEndpointRole7DC4D43E", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 276, - "startColumn": 5, - "endLine": 276, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 291, + "startColumn": 4, + "endLine": 291, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'EICEndpointonEventHandlerC2E1F5F2' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "EICEndpointonEventHandlerC2E1F5F2", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 284, - "startColumn": 5, - "endLine": 284, + "startLine": 397, + "startColumn": 4, + "endLine": 397, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'EICEndpointisCompleteHandler0273707A' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "EICEndpointisCompleteHandler0273707A", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 300, - "startColumn": 5, - "endLine": 300, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } + "startLine": 425, + "startColumn": 4, + "endLine": 425, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'EICEndpointProviderframeworkonEventServiceRoleC0D29A73' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableB2C5B500", + "logicalId": "EICEndpointProviderframeworkonEventServiceRoleC0D29A73", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 317, - "startColumn": 5, - "endLine": 317, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } + "startLine": 453, + "startColumn": 4, + "endLine": 453, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'EICEndpointProviderframeworkonEventB48896C9' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", + "logicalId": "EICEndpointProviderframeworkonEventB48896C9", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 328, - "startColumn": 5, - "endLine": 328, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 577, + "startColumn": 4, + "endLine": 577, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'EICEndpointProviderframeworkisCompleteServiceRole0E0A4C51' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", + "logicalId": "EICEndpointProviderframeworkisCompleteServiceRole0E0A4C51", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 331, - "startColumn": 5, - "endLine": 331, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1Subnet536B997A'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 631, + "startColumn": 4, + "endLine": 631, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'EICEndpointProviderframeworkisCompleteB1442B18' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "EICEndpointProviderframeworkisCompleteB1442B18", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 748, + "startColumn": 4, + "endLine": 748, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'EICEndpointProviderframeworkonTimeoutServiceRole904320AB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "EICEndpointProviderframeworkonTimeoutServiceRole904320AB", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 799, + "startColumn": 4, + "endLine": 799, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'EICEndpointProviderframeworkonTimeout83318112' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "EICEndpointProviderframeworkonTimeout83318112", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 916, + "startColumn": 4, + "endLine": 916, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'EICEndpointProviderwaiterstatemachineRole5E284D23' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "EICEndpointProviderwaiterstatemachineRole5E284D23", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 967, + "startColumn": 4, + "endLine": 967, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'EICEndpointProviderwaiterstatemachine1A139B58' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "EICEndpointProviderwaiterstatemachine1A139B58", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1052, + "startColumn": 4, + "endLine": 1052, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/ecs-cluster--MyFirstEcsCluster.template.json": { + "filePath": "cdk/ecs-cluster--MyFirstEcsCluster.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 33, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 52, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyFleetLaunchConfig5D7F9801", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "category": "Deprecation", + "startLine": 588, + "startColumn": 3, + "endLine": 588, + "endColumn": 31, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "logicalId": "MyVpcF9F0CA6F", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 342, + "startLine": 6, "startColumn": 5, - "endLine": 342, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 6, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -21665,25 +22030,23 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "logicalId": "MyVpcF9F0CA6F", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 346, + "startLine": 9, "startColumn": 5, - "endLine": 346, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 9, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'" + "lifecycle": "conditional-create-only" } }, { @@ -21692,15 +22055,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "MyVpcPublicSubnet1SubnetF6608456", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 357, + "startLine": 24, "startColumn": 5, - "endLine": 357, + "endLine": 24, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -21714,15 +22077,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "MyVpcPublicSubnet1SubnetF6608456", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 365, + "startLine": 32, "startColumn": 5, - "endLine": 365, + "endLine": 32, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -21736,21 +22099,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "MyVpcPublicSubnet1SubnetF6608456", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 381, + "startLine": 48, "startColumn": 5, - "endLine": 381, + "endLine": 48, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -21759,22 +22122,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableA678073B", + "logicalId": "MyVpcPublicSubnet1RouteTableC46AB2F4", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 398, + "startLine": 65, "startColumn": 5, - "endLine": 398, + "endLine": 65, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -21783,22 +22146,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", + "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 409, + "startLine": 76, "startColumn": 5, - "endLine": 409, + "endLine": 76, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'", + "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'", "extra": { "replacement_strategy": "delete_then_create" } @@ -21810,22 +22173,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", + "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 412, + "startLine": 79, "startColumn": 5, - "endLine": 412, + "endLine": 79, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2Subnet3788AAA1'", + "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'", "extra": { "replacement_strategy": "delete_then_create" } @@ -21837,15 +22200,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", + "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 423, + "startLine": 90, "startColumn": 5, - "endLine": 423, + "endLine": 90, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -21860,107 +22223,86 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", + "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 427, + "startLine": 94, "startColumn": 5, - "endLine": 427, + "endLine": 94, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'" + "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcVPCGWBF912B6E", + "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 455, + "startLine": 123, "startColumn": 5, - "endLine": 455, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "endLine": 123, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt MyVpcPublicSubnet1EIP096967CB.AllocationId" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ClusterEB0386A7' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterEB0386A7", + "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 463, - "startColumn": 3, - "endLine": 463, - "endColumn": 19, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/ecs-cross-stack-load-balancer--SplitAtListener-LBStack.template.json": { - "filePath": "cdk/ecs-cross-stack-load-balancer--SplitAtListener-LBStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 6, - "debug": 0 + "startLine": 129, + "startColumn": 5, + "endLine": 129, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LoadBalancerBE9EEC3A", + "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Scheme", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 12, + "startLine": 150, "startColumn": 5, - "endLine": 12, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endLine": 150, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -21970,20 +22312,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LoadBalancerBE9EEC3A", + "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 29, + "startLine": 158, "startColumn": 5, - "endLine": 29, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endLine": 158, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -21993,23 +22334,24 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LoadBalancerSecurityGroupA28D6DD7", + "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 38, + "startLine": 174, "startColumn": 5, - "endLine": 38, - "endColumn": 22, + "endLine": 174, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -22018,119 +22360,95 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LoadBalancerSecurityGroupA28D6DD7", + "logicalId": "MyVpcPublicSubnet2RouteTable1DF17386", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 48, + "startLine": 191, "startColumn": 5, - "endLine": 48, + "endLine": 191, "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefVpc8378EB38272D6E3A)" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LoadBalancerBE9EEC3A' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LoadBalancerBE9EEC3A", + "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 202, + "startColumn": 5, + "endLine": 202, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LoadBalancerSecurityGroupA28D6DD7' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LoadBalancerSecurityGroupA28D6DD7", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 37, - "startColumn": 4, - "endLine": 37, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/ecs-cross-stack-load-balancer--SplitAtListener-ServiceStack.template.json": { - "filePath": "cdk/ecs-cross-stack-load-balancer--SplitAtListener-ServiceStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 9, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 32, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ListenerECSGroup2EA4A011' dependency already enforced by a 'Ref' at 'Properties.LoadBalancers.0.TargetGroupArn'", - "source": "CFN_LINT", - "entity": { - "logicalId": "ServiceD69D759B", + "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 110, - "startColumn": 4, - "endLine": 110, + "startLine": 205, + "startColumn": 5, + "endLine": 205, "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 26, + "startLine": 216, "startColumn": 5, - "endLine": 26, + "endLine": 216, "endColumn": 26, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22140,89 +22458,89 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 40, + "startLine": 220, "startColumn": 5, - "endLine": 40, - "endColumn": 9, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 220, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 41, + "startLine": 249, "startColumn": 5, - "endLine": 41, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 249, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt MyVpcPublicSubnet2EIP8CCBA239.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 42, + "startLine": 255, "startColumn": 5, - "endLine": 42, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 255, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 43, + "startLine": 276, "startColumn": 5, - "endLine": 43, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 276, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22232,20 +22550,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 44, + "startLine": 284, "startColumn": 5, - "endLine": 44, - "endColumn": 29, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 284, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22255,181 +22572,189 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.TaskRoleArn", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 47, + "startLine": 300, "startColumn": 5, - "endLine": 47, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 300, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt TaskDefTaskRole1EDB4A67.Arn" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceD69D759B", + "logicalId": "MyVpcPrivateSubnet1RouteTable8819E6E2", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Cluster", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 61, + "startLine": 317, "startColumn": 5, - "endLine": 61, - "endColumn": 13, + "endLine": 317, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefClusterEB0386A796A0E3FE)" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceD69D759B", + "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.LaunchType", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 75, + "startLine": 328, "startColumn": 5, - "endLine": 75, - "endColumn": 16, + "endLine": 328, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupC96ED6A7", + "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 122, + "startLine": 331, "startColumn": 5, - "endLine": 122, - "endColumn": 22, + "endLine": 331, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet1Subnet5057CF7E'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupC96ED6A7", + "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 130, + "startLine": 342, "startColumn": 5, - "endLine": 130, - "endColumn": 11, + "endLine": 342, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefVpc8378EB38272D6E3A)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupfromSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680251D8C7D", + "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 145, + "startLine": 346, "startColumn": 5, - "endLine": 145, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 346, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupfromSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680251D8C7D", + "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 146, + "startLine": 357, "startColumn": 5, - "endLine": 146, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 357, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ServiceSecurityGroupC96ED6A7.GroupId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupfromSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680251D8C7D", + "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 152, + "startLine": 365, "startColumn": 5, - "endLine": 152, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 365, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22439,93 +22764,123 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupfromSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680251D8C7D", + "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.SourceSecurityGroupId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 153, + "startLine": 381, "startColumn": 5, - "endLine": 153, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 381, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: SplitAtListener-LBStack:ExportsOutputFnGetAttLoadBalancerSecurityGroupA28D6DD7GroupId44BDE65A)" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupfromSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680251D8C7D", + "logicalId": "MyVpcPrivateSubnet2RouteTableCEDCEECE", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 156, + "startLine": 398, "startColumn": 5, - "endLine": 156, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 398, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationSecurityGroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680from5771F1D9", + "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.DestinationSecurityGroupId", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 169, + "startLine": 409, "startColumn": 5, - "endLine": 169, - "endColumn": 32, + "endLine": 409, + "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ServiceSecurityGroupC96ED6A7.GroupId" + "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680from5771F1D9", + "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 175, + "startLine": 412, "startColumn": 5, - "endLine": 175, + "endLine": 412, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet2Subnet0040C983'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" + }, + "propertyPath": "Properties.DestinationCidrBlock", + "category": "Best Practice", + "startLine": 423, + "startColumn": 5, + "endLine": 423, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { "lifecycle": "create-only" } @@ -22533,67 +22888,70 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680from5771F1D9", + "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 176, + "startLine": 427, "startColumn": 5, - "endLine": 176, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 427, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: SplitAtListener-LBStack:ExportsOutputFnGetAttLoadBalancerSecurityGroupA28D6DD7GroupId44BDE65A)" + "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680from5771F1D9", + "logicalId": "MyVpcVPCGW488ACE0D", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 179, + "startLine": 455, "startColumn": 5, - "endLine": 179, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 455, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680from5771F1D9", + "logicalId": "MyFleetInstanceSecurityGroup774E8234", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 180, + "startLine": 466, "startColumn": 5, - "endLine": 180, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 466, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22603,43 +22961,67 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Listener828B0E81", + "logicalId": "MyFleetInstanceSecurityGroup774E8234", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.LoadBalancerArn", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 200, + "startLine": 480, "startColumn": 5, - "endLine": 200, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", + "endLine": 480, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: SplitAtListener-LBStack:ExportsOutputRefLoadBalancerBE9EEC3A2EF8C31C)" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ListenerECSGroup2EA4A011", + "logicalId": "MyFleetLaunchConfig5D7F9801", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.IamInstanceProfile", "category": "Best Practice", - "startLine": 213, + "startLine": 591, "startColumn": 5, - "endLine": 213, - "endColumn": 10, + "endLine": 591, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyFleetInstanceProfile70A58496'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyFleetLaunchConfig5D7F9801", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 594, + "startColumn": 5, + "endLine": 594, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22649,19 +23031,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ListenerECSGroup2EA4A011", + "logicalId": "MyFleetLaunchConfig5D7F9801", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 214, + "startLine": 597, "startColumn": 5, - "endLine": 214, - "endColumn": 14, + "endLine": 597, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22671,19 +23054,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", + "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ListenerECSGroup2EA4A011", + "logicalId": "MyFleetLaunchConfig5D7F9801", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.TargetType", + "propertyPath": "Properties.SecurityGroups", "category": "Best Practice", - "startLine": 221, + "startLine": 598, "startColumn": 5, - "endLine": 221, - "endColumn": 16, + "endLine": 598, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22693,158 +23077,170 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'UserData' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ListenerECSGroup2EA4A011", + "logicalId": "MyFleetLaunchConfig5D7F9801", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 222, + "startLine": 606, "startColumn": 5, - "endLine": 222, - "endColumn": 11, + "endLine": 606, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefVpc8378EB38272D6E3A)" + "resolutionSource": "dynamic (Base64 with unresolvable argument)" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TaskDefTaskRole1EDB4A67' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDefTaskRole1EDB4A67", + "logicalId": "MyFleetASG88E55886", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.LaunchConfigurationName", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 633, + "startColumn": 5, + "endLine": 633, + "endColumn": 29, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'MyFleetLaunchConfig5D7F9801'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TaskDef54694570' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "MyFleetASG88E55886", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VPCZoneIdentifier", "category": "Best Practice", - "startLine": 25, - "startColumn": 4, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 646, + "startColumn": 5, + "endLine": 646, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ServiceD69D759B' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceD69D759B", + "logicalId": "EcsCluster72B17558", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::ECS::ClusterCapacityProviderAssociations" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 60, - "startColumn": 4, - "endLine": 60, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 678, + "startColumn": 5, + "endLine": 678, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'EcsCluster97242B84'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ServiceSecurityGroupC96ED6A7' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'AutoScalingGroupProvider.AutoScalingGroupArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupC96ED6A7", + "logicalId": "AsgCapacityProvider760D11D9", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ECS::CapacityProvider" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AutoScalingGroupProvider.AutoScalingGroupArn", "category": "Best Practice", - "startLine": 121, - "startColumn": 4, - "endLine": 121, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 691, + "startColumn": 6, + "endLine": 691, + "endColumn": 26, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Listener828B0E81' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", + "message": "Resource 'EcsCluster97242B84' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Listener828B0E81", + "logicalId": "EcsCluster97242B84", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::ECS::Cluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 191, - "startColumn": 4, - "endLine": 191, - "endColumn": 15, + "startLine": 664, + "startColumn": 3, + "endLine": 664, + "endColumn": 22, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ListenerECSGroup2EA4A011' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "message": "Resource 'AsgCapacityProvider760D11D9' of type 'AWS::ECS::CapacityProvider' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ListenerECSGroup2EA4A011", + "logicalId": "AsgCapacityProvider760D11D9", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::ECS::CapacityProvider" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 212, + "startLine": 689, "startColumn": 4, - "endLine": 212, + "endLine": 689, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/ecs-cross-stack-load-balancer--SplitAtTargetGroup-LBStack.template.json": { - "filePath": "cdk/ecs-cross-stack-load-balancer--SplitAtTargetGroup-LBStack.template.json", + "cdk/ecs-cross-stack-load-balancer--CrossStackLBInfra.template.json": { + "filePath": "cdk/ecs-cross-stack-load-balancer--CrossStackLBInfra.template.json", "status": "OK", "metadata": { - "resourcesScanned": 5, + "resourcesScanned": 25, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 13, + "informational": 40, "debug": 0 }, "suppressed": 0, @@ -22855,20 +23251,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LoadBalancerBE9EEC3A", + "logicalId": "Vpc8378EB38", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Scheme", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 12, + "startLine": 6, "startColumn": 5, - "endLine": 12, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endLine": 6, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22878,41 +23273,40 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LoadBalancerBE9EEC3A", + "logicalId": "Vpc8378EB38", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 29, + "startLine": 9, "startColumn": 5, - "endLine": 29, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endLine": 9, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LoadBalancerSecurityGroupA28D6DD7", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 38, + "startLine": 24, "startColumn": 5, - "endLine": 38, + "endLine": 24, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -22920,15 +23314,37 @@ "lifecycle": "create-only" } }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 32, + "startColumn": 5, + "endLine": 32, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LoadBalancerSecurityGroupA28D6DD7", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", @@ -22940,93 +23356,104 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefVpc8378EB38272D6E3A)" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LoadBalancerListenerE1A099B9", + "logicalId": "VpcPublicSubnet1RouteTable6C95E38E", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.LoadBalancerArn", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 67, + "startLine": 65, "startColumn": 5, - "endLine": 67, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", + "endLine": 65, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'LoadBalancerBE9EEC3A'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup3D7CD9B8", + "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 80, + "startLine": 76, "startColumn": 5, - "endLine": 80, - "endColumn": 10, + "endLine": 76, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup3D7CD9B8", + "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 81, + "startLine": 79, "startColumn": 5, - "endLine": 81, + "endLine": 79, "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup3D7CD9B8", + "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.TargetType", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 88, + "startLine": 90, "startColumn": 5, - "endLine": 88, - "endColumn": 16, + "endLine": 90, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -23036,234 +23463,235 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup3D7CD9B8", + "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 89, + "startLine": 94, "startColumn": 5, - "endLine": 89, - "endColumn": 11, + "endLine": 94, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefVpc8378EB38272D6E3A)" + "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LoadBalancerBE9EEC3A' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LoadBalancerBE9EEC3A", + "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 123, + "startColumn": 5, + "endLine": 123, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt VpcPublicSubnet1EIPD7E02669.AllocationId" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LoadBalancerSecurityGroupA28D6DD7' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LoadBalancerSecurityGroupA28D6DD7", + "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 37, - "startColumn": 4, - "endLine": 37, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 129, + "startColumn": 5, + "endLine": 129, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LoadBalancerListenerE1A099B9' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LoadBalancerListenerE1A099B9", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 58, - "startColumn": 4, - "endLine": 58, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 150, + "startColumn": 5, + "endLine": 150, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TargetGroup3D7CD9B8' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup3D7CD9B8", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 79, - "startColumn": 4, - "endLine": 79, + "startLine": 158, + "startColumn": 5, + "endLine": 158, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/ecs-cross-stack-load-balancer--SplitAtTargetGroup-ServiceStack.template.json": { - "filePath": "cdk/ecs-cross-stack-load-balancer--SplitAtTargetGroup-ServiceStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 25, - "debug": 0 + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 26, + "startLine": 174, "startColumn": 5, - "endLine": 26, - "endColumn": 26, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 174, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "VpcPublicSubnet2RouteTable94F7E489", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 40, + "startLine": 191, "startColumn": 5, - "endLine": 40, - "endColumn": 9, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 191, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 41, + "startLine": 202, "startColumn": 5, - "endLine": 41, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 202, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 42, + "startLine": 205, "startColumn": 5, - "endLine": 42, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 205, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 43, + "startLine": 216, "startColumn": 5, - "endLine": 43, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 216, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -23273,111 +23701,111 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 44, + "startLine": 220, "startColumn": 5, - "endLine": 44, - "endColumn": 29, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 220, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "VpcPublicSubnet2NATGateway9182C01D", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.TaskRoleArn", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 47, + "startLine": 249, "startColumn": 5, - "endLine": 47, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 249, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt TaskDefTaskRole1EDB4A67.Arn" + "resolutionSource": "GetAtt VpcPublicSubnet2EIP3C605A87.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceD69D759B", + "logicalId": "VpcPublicSubnet2NATGateway9182C01D", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Cluster", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 61, + "startLine": 255, "startColumn": 5, - "endLine": 61, - "endColumn": 13, + "endLine": 255, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefClusterEB0386A796A0E3FE)" + "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceD69D759B", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.LaunchType", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 75, + "startLine": 276, "startColumn": 5, - "endLine": 75, - "endColumn": 16, + "endLine": 276, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupC96ED6A7", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 120, + "startLine": 284, "startColumn": 5, - "endLine": 120, - "endColumn": 22, + "endLine": 284, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -23390,181 +23818,186 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupC96ED6A7", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 128, + "startLine": 300, "startColumn": 5, - "endLine": 128, + "endLine": 300, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefVpc8378EB38272D6E3A)" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupfromSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580953EC485", + "logicalId": "VpcPrivateSubnet1RouteTableB2C5B500", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 143, + "startLine": 317, "startColumn": 5, - "endLine": 143, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 317, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupfromSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580953EC485", + "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 144, + "startLine": 328, "startColumn": 5, - "endLine": 144, - "endColumn": 13, + "endLine": 328, + "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ServiceSecurityGroupC96ED6A7.GroupId" + "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupfromSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580953EC485", + "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 150, + "startLine": 331, "startColumn": 5, - "endLine": 150, - "endColumn": 16, + "endLine": 331, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet1Subnet536B997A'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupfromSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580953EC485", + "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.SourceSecurityGroupId", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 151, + "startLine": 342, "startColumn": 5, - "endLine": 151, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 342, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: SplitAtTargetGroup-LBStack:ExportsOutputFnGetAttLoadBalancerSecurityGroupA28D6DD7GroupId44BDE65A)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupfromSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580953EC485", + "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 154, + "startLine": 346, "startColumn": 5, - "endLine": 154, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 346, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationSecurityGroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580from6A874A07", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.DestinationSecurityGroupId", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 167, + "startLine": 357, "startColumn": 5, - "endLine": 167, - "endColumn": 32, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 357, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ServiceSecurityGroupC96ED6A7.GroupId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580from6A874A07", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 173, + "startLine": 365, "startColumn": 5, - "endLine": 173, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 365, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -23574,165 +24007,210 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580from6A874A07", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 174, + "startLine": 381, "startColumn": 5, - "endLine": 174, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 381, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: SplitAtTargetGroup-LBStack:ExportsOutputFnGetAttLoadBalancerSecurityGroupA28D6DD7GroupId44BDE65A)" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580from6A874A07", + "logicalId": "VpcPrivateSubnet2RouteTableA678073B", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 177, + "startLine": 398, "startColumn": 5, - "endLine": 177, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 398, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580from6A874A07", + "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 178, + "startLine": 409, "startColumn": 5, - "endLine": 178, - "endColumn": 12, + "endLine": 409, + "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TaskDefTaskRole1EDB4A67' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDefTaskRole1EDB4A67", + "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 412, + "startColumn": 5, + "endLine": 412, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet2Subnet3788AAA1'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TaskDef54694570' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 25, - "startColumn": 4, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 423, + "startColumn": 5, + "endLine": 423, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ServiceD69D759B' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceD69D759B", + "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 60, - "startColumn": 4, - "endLine": 60, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 427, + "startColumn": 5, + "endLine": 427, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "VpcVPCGWBF912B6E", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 455, + "startColumn": 5, + "endLine": 455, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ServiceSecurityGroupC96ED6A7' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'ClusterEB0386A7' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupC96ED6A7", + "logicalId": "ClusterEB0386A7", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ECS::Cluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 119, - "startColumn": 4, - "endLine": 119, - "endColumn": 15, + "startLine": 463, + "startColumn": 3, + "endLine": 463, + "endColumn": 19, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/ecs-ecs-service-with-logging--Willkommen.template.json": { - "filePath": "cdk/ecs-ecs-service-with-logging--Willkommen.template.json", + "cdk/ecs-cross-stack-load-balancer--SplitAtListener-LBStack.template.json": { + "filePath": "cdk/ecs-cross-stack-load-balancer--SplitAtListener-LBStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 46, + "resourcesScanned": 3, "counts": { "fatal": 0, "errors": 0, - "warnings": 3, - "informational": 71, + "warnings": 0, + "informational": 6, "debug": 0 }, "suppressed": 0, @@ -23740,81 +24218,23 @@ "severityLevel": "DEBUG" }, "diagnostics": [ - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRole23116FA3' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionE0DEFB31", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 846, - "startColumn": 4, - "endLine": 846, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookRole71045ED7' dependency already enforced by a 'GetAtt' at 'Properties.RoleARN'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHook5CB1467E", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LifecycleHook" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 976, - "startColumn": 4, - "endLine": 976, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3697", - "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", - "source": "CFN_LINT", - "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "category": "Deprecation", - "startLine": 594, - "startColumn": 3, - "endLine": 594, - "endColumn": 57, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" - }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcF9F0CA6F", + "logicalId": "LoadBalancerBE9EEC3A", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Scheme", "category": "Best Practice", - "startLine": 6, + "startLine": 12, "startColumn": 5, - "endLine": 6, - "endColumn": 15, + "endLine": 12, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -23824,40 +24244,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcF9F0CA6F", + "logicalId": "LoadBalancerBE9EEC3A", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 9, + "startLine": 29, "startColumn": 5, - "endLine": 9, - "endColumn": 21, + "endLine": 29, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1SubnetF6608456", + "logicalId": "LoadBalancerSecurityGroupA28D6DD7", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 24, + "startLine": 38, "startColumn": 5, - "endLine": 24, + "endLine": 38, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -23868,143 +24289,214 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1SubnetF6608456", + "logicalId": "LoadBalancerSecurityGroupA28D6DD7", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 32, + "startLine": 48, "startColumn": 5, - "endLine": 32, - "endColumn": 15, + "endLine": 48, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefVpc8378EB38272D6E3A)" } }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LoadBalancerBE9EEC3A' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "LoadBalancerBE9EEC3A", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LoadBalancerSecurityGroupA28D6DD7' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "LoadBalancerSecurityGroupA28D6DD7", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 37, + "startColumn": 4, + "endLine": 37, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/ecs-cross-stack-load-balancer--SplitAtListener-ServiceStack.template.json": { + "filePath": "cdk/ecs-cross-stack-load-balancer--SplitAtListener-ServiceStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 9, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 32, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'ListenerECSGroup2EA4A011' dependency already enforced by a 'Ref' at 'Properties.LoadBalancers.0.TargetGroupArn'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ServiceD69D759B", + "entityType": "Resource", + "resourceType": "AWS::ECS::Service" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 110, + "startColumn": 4, + "endLine": 110, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1SubnetF6608456", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 48, + "startLine": 26, "startColumn": 5, - "endLine": 48, - "endColumn": 11, + "endLine": 26, + "endColumn": 26, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1RouteTableC46AB2F4", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 65, + "startLine": 40, "startColumn": 5, - "endLine": 65, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 40, + "endColumn": 9, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 76, + "startLine": 41, "startColumn": 5, - "endLine": 76, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 41, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 79, + "startLine": 42, "startColumn": 5, - "endLine": 79, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 42, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 90, + "startLine": 43, "startColumn": 5, - "endLine": 90, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 43, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24014,111 +24506,111 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 94, + "startLine": 44, "startColumn": 5, - "endLine": 94, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 44, + "endColumn": 29, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 123, + "startLine": 47, "startColumn": 5, - "endLine": 123, - "endColumn": 18, + "endLine": 47, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt MyVpcPublicSubnet1EIP096967CB.AllocationId" + "resolutionSource": "GetAtt TaskDefTaskRole1EDB4A67.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", + "logicalId": "ServiceD69D759B", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 129, + "startLine": 61, "startColumn": 5, - "endLine": 129, - "endColumn": 14, + "endLine": 61, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'" + "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefClusterEB0386A796A0E3FE)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", + "logicalId": "ServiceD69D759B", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 150, + "startLine": 75, "startColumn": 5, - "endLine": 150, - "endColumn": 22, + "endLine": 75, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", + "logicalId": "ServiceSecurityGroupC96ED6A7", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 158, + "startLine": 122, "startColumn": 5, - "endLine": 158, - "endColumn": 15, + "endLine": 122, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24131,232 +24623,228 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", + "logicalId": "ServiceSecurityGroupC96ED6A7", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 174, + "startLine": 130, "startColumn": 5, - "endLine": 174, + "endLine": 130, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefVpc8378EB38272D6E3A)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2RouteTable1DF17386", + "logicalId": "ServiceSecurityGroupfromSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680251D8C7D", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 191, + "startLine": 145, "startColumn": 5, - "endLine": 191, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 145, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", + "logicalId": "ServiceSecurityGroupfromSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680251D8C7D", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 202, + "startLine": 146, "startColumn": 5, - "endLine": 202, - "endColumn": 18, + "endLine": 146, + "endColumn": 13, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt ServiceSecurityGroupC96ED6A7.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", + "logicalId": "ServiceSecurityGroupfromSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680251D8C7D", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 205, + "startLine": 152, "startColumn": 5, - "endLine": 205, - "endColumn": 14, + "endLine": 152, + "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", + "logicalId": "ServiceSecurityGroupfromSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680251D8C7D", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.SourceSecurityGroupId", "category": "Best Practice", - "startLine": 216, + "startLine": 153, "startColumn": 5, - "endLine": 216, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 153, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import: SplitAtListener-LBStack:ExportsOutputFnGetAttLoadBalancerSecurityGroupA28D6DD7GroupId44BDE65A)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", + "logicalId": "ServiceSecurityGroupfromSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680251D8C7D", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 220, + "startLine": 156, "startColumn": 5, - "endLine": 220, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 156, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationSecurityGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", + "logicalId": "ServiceSecurityGroupSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680from5771F1D9", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.DestinationSecurityGroupId", "category": "Best Practice", - "startLine": 249, + "startLine": 169, "startColumn": 5, - "endLine": 249, - "endColumn": 18, + "endLine": 169, + "endColumn": 32, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt MyVpcPublicSubnet2EIP8CCBA239.AllocationId" + "resolutionSource": "GetAtt ServiceSecurityGroupC96ED6A7.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", + "logicalId": "ServiceSecurityGroupSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680from5771F1D9", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 255, + "startLine": 175, "startColumn": 5, - "endLine": 255, + "endLine": 175, "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", + "logicalId": "ServiceSecurityGroupSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680from5771F1D9", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 276, + "startLine": 176, "startColumn": 5, - "endLine": 276, - "endColumn": 22, + "endLine": 176, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import: SplitAtListener-LBStack:ExportsOutputFnGetAttLoadBalancerSecurityGroupA28D6DD7GroupId44BDE65A)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", + "logicalId": "ServiceSecurityGroupSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680from5771F1D9", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 284, + "startLine": 179, "startColumn": 5, - "endLine": 284, - "endColumn": 15, + "endLine": 179, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24366,121 +24854,110 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", + "logicalId": "ServiceSecurityGroupSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680from5771F1D9", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 300, + "startLine": 180, "startColumn": 5, - "endLine": 300, - "endColumn": 11, + "endLine": 180, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1RouteTable8819E6E2", + "logicalId": "Listener828B0E81", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.LoadBalancerArn", "category": "Best Practice", - "startLine": 317, + "startLine": 200, "startColumn": 5, - "endLine": 317, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 200, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "dynamic (cross-stack import: SplitAtListener-LBStack:ExportsOutputRefLoadBalancerBE9EEC3A2EF8C31C)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", + "logicalId": "ListenerECSGroup2EA4A011", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 328, + "startLine": 213, "startColumn": 5, - "endLine": 328, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 213, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", + "logicalId": "ListenerECSGroup2EA4A011", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 331, + "startLine": 214, "startColumn": 5, - "endLine": 331, + "endLine": 214, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet1Subnet5057CF7E'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", + "logicalId": "ListenerECSGroup2EA4A011", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.TargetType", "category": "Best Practice", - "startLine": 342, + "startLine": 221, "startColumn": 5, - "endLine": 342, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 221, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24490,189 +24967,205 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", + "logicalId": "ListenerECSGroup2EA4A011", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 346, + "startLine": 222, "startColumn": 5, - "endLine": 346, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 222, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'" + "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefVpc8378EB38272D6E3A)" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Resource 'TaskDefTaskRole1EDB4A67' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", + "logicalId": "TaskDefTaskRole1EDB4A67", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 357, - "startColumn": 5, - "endLine": 357, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'TaskDef54694570' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 365, - "startColumn": 5, - "endLine": 365, + "startLine": 25, + "startColumn": 4, + "endLine": 25, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'ServiceD69D759B' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", + "logicalId": "ServiceD69D759B", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 381, - "startColumn": 5, - "endLine": 381, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" - } + "startLine": 60, + "startColumn": 4, + "endLine": 60, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'ServiceSecurityGroupC96ED6A7' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2RouteTableCEDCEECE", + "logicalId": "ServiceSecurityGroupC96ED6A7", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 398, - "startColumn": 5, - "endLine": 398, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" - } + "startLine": 121, + "startColumn": 4, + "endLine": 121, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Listener828B0E81' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", + "logicalId": "Listener828B0E81", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 409, - "startColumn": 5, - "endLine": 409, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 191, + "startColumn": 4, + "endLine": 191, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ListenerECSGroup2EA4A011' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ListenerECSGroup2EA4A011", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 212, + "startColumn": 4, + "endLine": 212, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/ecs-cross-stack-load-balancer--SplitAtTargetGroup-LBStack.template.json": { + "filePath": "cdk/ecs-cross-stack-load-balancer--SplitAtTargetGroup-LBStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 13, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", + "logicalId": "LoadBalancerBE9EEC3A", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Scheme", "category": "Best Practice", - "startLine": 412, + "startLine": 12, "startColumn": 5, - "endLine": 412, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 12, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet2Subnet0040C983'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", + "logicalId": "LoadBalancerBE9EEC3A", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 423, + "startLine": 29, "startColumn": 5, - "endLine": 423, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 29, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24682,25 +25175,23 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", + "logicalId": "LoadBalancerSecurityGroupA28D6DD7", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 427, + "startLine": 38, "startColumn": 5, - "endLine": 427, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 38, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'" + "lifecycle": "create-only" } }, { @@ -24709,113 +25200,107 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcVPCGW488ACE0D", + "logicalId": "LoadBalancerSecurityGroupA28D6DD7", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 455, + "startLine": 48, "startColumn": 5, - "endLine": 455, + "endLine": 48, "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefVpc8378EB38272D6E3A)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupInstanceSecurityGroup149B0A9E", + "logicalId": "LoadBalancerListenerE1A099B9", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.LoadBalancerArn", "category": "Best Practice", - "startLine": 472, + "startLine": 67, "startColumn": 5, - "endLine": 472, - "endColumn": 22, + "endLine": 67, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'LoadBalancerBE9EEC3A'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupInstanceSecurityGroup149B0A9E", + "logicalId": "TargetGroup3D7CD9B8", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 486, + "startLine": 80, "startColumn": 5, - "endLine": 486, - "endColumn": 11, + "endLine": 80, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A", + "logicalId": "TargetGroup3D7CD9B8", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.IamInstanceProfile", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 597, + "startLine": 81, "startColumn": 5, - "endLine": 597, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 81, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Ec2ClusterDefaultAutoScalingGroupInstanceProfileDB232471'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A", + "logicalId": "TargetGroup3D7CD9B8", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.TargetType", "category": "Best Practice", - "startLine": 600, + "startLine": 88, "startColumn": 5, - "endLine": 600, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 88, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24825,134 +25310,142 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A", + "logicalId": "TargetGroup3D7CD9B8", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 603, + "startLine": 89, "startColumn": 5, - "endLine": 603, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 89, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefVpc8378EB38272D6E3A)" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", + "message": "Resource 'LoadBalancerBE9EEC3A' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A", + "logicalId": "LoadBalancerBE9EEC3A", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.SecurityGroups", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 604, - "startColumn": 5, - "endLine": 604, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'UserData' is create-only; updating it will cause resource replacement", + "message": "Resource 'LoadBalancerSecurityGroupA28D6DD7' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A", + "logicalId": "LoadBalancerSecurityGroupA28D6DD7", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 612, - "startColumn": 5, - "endLine": 612, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Base64 with unresolvable argument)" - } + "startLine": 37, + "startColumn": 4, + "endLine": 37, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'LoadBalancerListenerE1A099B9' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupASGC5A6D4C0", + "logicalId": "LoadBalancerListenerE1A099B9", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "Properties.LaunchConfigurationName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 638, - "startColumn": 5, - "endLine": 638, - "endColumn": 29, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A'" - } + "startLine": 58, + "startColumn": 4, + "endLine": 58, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'TargetGroup3D7CD9B8' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupASGC5A6D4C0", + "logicalId": "TargetGroup3D7CD9B8", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.VPCZoneIdentifier", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 650, - "startColumn": 5, - "endLine": 650, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 79, + "startColumn": 4, + "endLine": 79, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/ecs-cross-stack-load-balancer--SplitAtTargetGroup-ServiceStack.template.json": { + "filePath": "cdk/ecs-cross-stack-load-balancer--SplitAtTargetGroup-ServiceStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 7, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 25, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeWillkommenEc2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic5835279F94354ECC", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 857, + "startLine": 26, "startColumn": 5, - "endLine": 857, - "endColumn": 12, + "endLine": 26, + "endColumn": 26, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24962,42 +25455,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeWillkommenEc2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic5835279F94354ECC", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 858, + "startLine": 40, "startColumn": 5, - "endLine": 858, - "endColumn": 18, + "endLine": 40, + "endColumn": 9, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionE0DEFB31.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeWillkommenEc2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic5835279F94354ECC", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 864, + "startLine": 41, "startColumn": 5, - "endLine": 864, - "endColumn": 15, + "endLine": 41, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -25007,67 +25501,66 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeWillkommenEc2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic5835279F94354ECC", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 865, + "startLine": 42, "startColumn": 5, - "endLine": 865, - "endColumn": 15, + "endLine": 42, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopicF7263B30'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic4795E0F6", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Endpoint", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 876, + "startLine": 43, "startColumn": 5, - "endLine": 876, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 43, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionE0DEFB31.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic4795E0F6", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 882, + "startLine": 44, "startColumn": 5, - "endLine": 882, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 44, + "endColumn": 29, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -25077,138 +25570,134 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic4795E0F6", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.TopicArn", + "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 883, + "startLine": 47, "startColumn": 5, - "endLine": 883, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 47, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopicF7263B30'" + "resolutionSource": "GetAtt TaskDefTaskRole1EDB4A67.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHook5CB1467E", + "logicalId": "ServiceD69D759B", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LifecycleHook" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.AutoScalingGroupName", + "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 960, + "startLine": 61, "startColumn": 5, - "endLine": 960, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 61, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Ec2ClusterDefaultAutoScalingGroupASGC5A6D4C0'" + "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefClusterEB0386A796A0E3FE)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", + "logicalId": "ServiceD69D759B", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 1007, + "startLine": 75, "startColumn": 5, - "endLine": 1007, - "endColumn": 26, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 75, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", + "logicalId": "ServiceSecurityGroupC96ED6A7", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ExecutionRoleArn", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 1027, + "startLine": 120, "startColumn": 5, - "endLine": 1027, + "endLine": 120, "endColumn": 22, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt MyTaskDefinitionExecutionRole3D88C23D.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", + "logicalId": "ServiceSecurityGroupC96ED6A7", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1033, + "startLine": 128, "startColumn": 5, - "endLine": 1033, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 128, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefVpc8378EB38272D6E3A)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", + "logicalId": "ServiceSecurityGroupfromSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580953EC485", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 1034, + "startLine": 143, "startColumn": 5, - "endLine": 1034, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 143, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -25218,173 +25707,230 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", + "logicalId": "ServiceSecurityGroupfromSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580953EC485", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 1035, + "startLine": 144, "startColumn": 5, - "endLine": 1035, - "endColumn": 29, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 144, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt ServiceSecurityGroupC96ED6A7.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", + "logicalId": "ServiceSecurityGroupfromSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580953EC485", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.TaskRoleArn", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 1038, + "startLine": 150, "startColumn": 5, - "endLine": 1038, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 150, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt MyTaskDefinitionTaskRole93FBB305.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2Service04A33183", + "logicalId": "ServiceSecurityGroupfromSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580953EC485", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Cluster", + "propertyPath": "Properties.SourceSecurityGroupId", "category": "Best Practice", - "startLine": 1112, + "startLine": 151, "startColumn": 5, - "endLine": 1112, - "endColumn": 13, + "endLine": 151, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Ec2ClusterEE43E89D'" + "resolutionSource": "dynamic (cross-stack import: SplitAtTargetGroup-LBStack:ExportsOutputFnGetAttLoadBalancerSecurityGroupA28D6DD7GroupId44BDE65A)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2Service04A33183", + "logicalId": "ServiceSecurityGroupfromSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580953EC485", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.LaunchType", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 1125, + "startLine": 154, "startColumn": 5, - "endLine": 1125, - "endColumn": 16, + "endLine": 154, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SchedulingStrategy' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationSecurityGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2Service04A33183", + "logicalId": "ServiceSecurityGroupSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580from6A874A07", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.SchedulingStrategy", + "propertyPath": "Properties.DestinationSecurityGroupId", "category": "Best Practice", - "startLine": 1126, + "startLine": 167, "startColumn": 5, - "endLine": 1126, - "endColumn": 24, + "endLine": 167, + "endColumn": 32, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt ServiceSecurityGroupC96ED6A7.GroupId" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Ec2ClusterEE43E89D' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterEE43E89D", + "logicalId": "ServiceSecurityGroupSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580from6A874A07", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 463, - "startColumn": 3, - "endLine": 463, - "endColumn": 22, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 173, + "startColumn": 5, + "endLine": 173, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyTaskDefinitionTaskRole93FBB305' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionTaskRole93FBB305", + "logicalId": "ServiceSecurityGroupSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580from6A874A07", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 986, - "startColumn": 4, - "endLine": 986, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 174, + "startColumn": 5, + "endLine": 174, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import: SplitAtTargetGroup-LBStack:ExportsOutputFnGetAttLoadBalancerSecurityGroupA28D6DD7GroupId44BDE65A)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ServiceSecurityGroupSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580from6A874A07", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupEgress" + }, + "propertyPath": "Properties.IpProtocol", + "category": "Best Practice", + "startLine": 177, + "startColumn": 5, + "endLine": 177, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ServiceSecurityGroupSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580from6A874A07", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupEgress" + }, + "propertyPath": "Properties.ToPort", + "category": "Best Practice", + "startLine": 178, + "startColumn": 5, + "endLine": 178, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyTaskDefinitionF5B350B4' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'TaskDefTaskRole1EDB4A67' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", + "logicalId": "TaskDefTaskRole1EDB4A67", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1006, + "startLine": 5, "startColumn": 4, - "endLine": 1006, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25392,39 +25938,39 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyTaskDefinitionAppContainerLogGroupA24DD1B6' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Resource 'TaskDef54694570' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionAppContainerLogGroupA24DD1B6", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1049, - "startColumn": 3, - "endLine": 1049, - "endColumn": 48, + "startLine": 25, + "startColumn": 4, + "endLine": 25, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyTaskDefinitionExecutionRole3D88C23D' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'ServiceD69D759B' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionExecutionRole3D88C23D", + "logicalId": "ServiceD69D759B", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1059, + "startLine": 60, "startColumn": 4, - "endLine": 1059, + "endLine": 60, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25432,30 +25978,30 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Ec2Service04A33183' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Resource 'ServiceSecurityGroupC96ED6A7' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Ec2Service04A33183", + "logicalId": "ServiceSecurityGroupC96ED6A7", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1111, + "startLine": 119, "startColumn": 4, - "endLine": 1111, + "endLine": 119, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/ecs-ecs-service-with-task-networking--ec2-service-with-task-networking.template.json": { - "filePath": "cdk/ecs-ecs-service-with-task-networking--ec2-service-with-task-networking.template.json", + "cdk/ecs-ecs-service-with-logging--Willkommen.template.json": { + "filePath": "cdk/ecs-ecs-service-with-logging--Willkommen.template.json", "status": "OK", "metadata": { - "resourcesScanned": 44, + "resourcesScanned": 46, "counts": { "fatal": 0, "errors": 0, @@ -25471,10 +26017,10 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRoleBC3C9F69' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRole23116FA3' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionC919C385", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionE0DEFB31", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, @@ -25491,10 +26037,10 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'awsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookRoleD0498D9C' dependency already enforced by a 'GetAtt' at 'Properties.RoleARN'", + "message": "'Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookRole71045ED7' dependency already enforced by a 'GetAtt' at 'Properties.RoleARN'", "source": "CFN_LINT", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHook4D2DB763", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHook5CB1467E", "entityType": "Resource", "resourceType": "AWS::AutoScaling::LifecycleHook" }, @@ -25514,7 +26060,7 @@ "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", "source": "CFN_LINT", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A", "entityType": "Resource", "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, @@ -25522,7 +26068,7 @@ "startLine": 594, "startColumn": 3, "endLine": 594, - "endColumn": 67, + "endColumn": 57, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Resource type is from a service in maintenance mode", "phase": "SCHEMA" @@ -25533,7 +26079,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Vpc8378EB38", + "logicalId": "MyVpcF9F0CA6F", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, @@ -25555,7 +26101,7 @@ "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Vpc8378EB38", + "logicalId": "MyVpcF9F0CA6F", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, @@ -25577,7 +26123,7 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "MyVpcPublicSubnet1SubnetF6608456", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -25599,7 +26145,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "MyVpcPublicSubnet1SubnetF6608456", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -25621,7 +26167,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "MyVpcPublicSubnet1SubnetF6608456", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -25635,7 +26181,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -25644,7 +26190,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTable6C95E38E", + "logicalId": "MyVpcPublicSubnet1RouteTableC46AB2F4", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, @@ -25659,7 +26205,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -25668,7 +26214,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", + "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -25683,7 +26229,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'", + "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'", "extra": { "replacement_strategy": "delete_then_create" } @@ -25695,7 +26241,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", + "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -25710,7 +26256,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'", + "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'", "extra": { "replacement_strategy": "delete_then_create" } @@ -25722,7 +26268,7 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", + "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -25745,7 +26291,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", + "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -25760,7 +26306,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'" + "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'" } }, { @@ -25769,7 +26315,7 @@ "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", + "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, @@ -25783,7 +26329,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcPublicSubnet1EIPD7E02669.AllocationId" + "resolutionSource": "GetAtt MyVpcPublicSubnet1EIP096967CB.AllocationId" } }, { @@ -25792,7 +26338,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", + "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, @@ -25806,7 +26352,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'" + "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'" } }, { @@ -25815,7 +26361,7 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -25837,7 +26383,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -25859,7 +26405,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -25873,7 +26419,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -25882,7 +26428,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTable94F7E489", + "logicalId": "MyVpcPublicSubnet2RouteTable1DF17386", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, @@ -25897,7 +26443,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -25906,7 +26452,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -25921,7 +26467,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'", + "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'", "extra": { "replacement_strategy": "delete_then_create" } @@ -25933,7 +26479,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -25948,7 +26494,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'", + "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'", "extra": { "replacement_strategy": "delete_then_create" } @@ -25960,7 +26506,7 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", + "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -25983,7 +26529,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", + "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -25998,7 +26544,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'" + "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'" } }, { @@ -26007,7 +26553,7 @@ "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2NATGateway9182C01D", + "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, @@ -26021,7 +26567,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcPublicSubnet2EIP3C605A87.AllocationId" + "resolutionSource": "GetAtt MyVpcPublicSubnet2EIP8CCBA239.AllocationId" } }, { @@ -26030,7 +26576,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2NATGateway9182C01D", + "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, @@ -26044,7 +26590,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'" + "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'" } }, { @@ -26053,7 +26599,7 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -26075,7 +26621,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -26097,7 +26643,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -26111,7 +26657,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -26120,7 +26666,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableB2C5B500", + "logicalId": "MyVpcPrivateSubnet1RouteTable8819E6E2", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, @@ -26135,7 +26681,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -26144,7 +26690,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", + "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -26159,7 +26705,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'", "extra": { "replacement_strategy": "delete_then_create" } @@ -26171,7 +26717,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", + "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -26186,7 +26732,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1Subnet536B997A'", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet1Subnet5057CF7E'", "extra": { "replacement_strategy": "delete_then_create" } @@ -26198,7 +26744,7 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -26221,7 +26767,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -26236,7 +26782,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'" + "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'" } }, { @@ -26245,7 +26791,7 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -26267,7 +26813,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -26289,7 +26835,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -26303,7 +26849,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -26312,7 +26858,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableA678073B", + "logicalId": "MyVpcPrivateSubnet2RouteTableCEDCEECE", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, @@ -26327,7 +26873,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -26336,7 +26882,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", + "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -26351,7 +26897,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'", "extra": { "replacement_strategy": "delete_then_create" } @@ -26363,7 +26909,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", + "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -26378,7 +26924,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2Subnet3788AAA1'", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet2Subnet0040C983'", "extra": { "replacement_strategy": "delete_then_create" } @@ -26390,7 +26936,7 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", + "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -26413,7 +26959,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", + "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -26428,7 +26974,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'" + "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'" } }, { @@ -26437,7 +26983,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcVPCGWBF912B6E", + "logicalId": "MyVpcVPCGW488ACE0D", "entityType": "Resource", "resourceType": "AWS::EC2::VPCGatewayAttachment" }, @@ -26452,7 +26998,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'", "extra": { "replacement_strategy": "delete_then_create" } @@ -26464,7 +27010,7 @@ "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupInstanceSecurityGroupFF91CD80", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupInstanceSecurityGroup149B0A9E", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, @@ -26486,7 +27032,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupInstanceSecurityGroupFF91CD80", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupInstanceSecurityGroup149B0A9E", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, @@ -26500,7 +27046,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -26509,7 +27055,7 @@ "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A", "entityType": "Resource", "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, @@ -26524,7 +27070,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'awsvpcecsdemoclusterDefaultAutoScalingGroupInstanceProfileF3361609'" + "resolutionSource": "Ref to 'Ec2ClusterDefaultAutoScalingGroupInstanceProfileDB232471'" } }, { @@ -26533,7 +27079,7 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A", "entityType": "Resource", "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, @@ -26556,7 +27102,7 @@ "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A", "entityType": "Resource", "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, @@ -26579,7 +27125,7 @@ "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A", "entityType": "Resource", "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, @@ -26602,7 +27148,7 @@ "message": "Property 'UserData' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A", "entityType": "Resource", "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, @@ -26626,7 +27172,7 @@ "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupASG7F29632B", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupASGC5A6D4C0", "entityType": "Resource", "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, @@ -26640,7 +27186,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF'" + "resolutionSource": "Ref to 'Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A'" } }, { @@ -26649,7 +27195,7 @@ "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupASG7F29632B", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupASGC5A6D4C0", "entityType": "Resource", "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, @@ -26671,7 +27217,7 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeec2servicewithtasknetworkingawsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic582DD4BEABB08B98", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeWillkommenEc2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic5835279F94354ECC", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, @@ -26693,7 +27239,7 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeec2servicewithtasknetworkingawsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic582DD4BEABB08B98", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeWillkommenEc2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic5835279F94354ECC", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, @@ -26707,7 +27253,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionC919C385.Arn" + "resolutionSource": "GetAtt Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionE0DEFB31.Arn" } }, { @@ -26716,7 +27262,7 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeec2servicewithtasknetworkingawsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic582DD4BEABB08B98", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeWillkommenEc2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic5835279F94354ECC", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, @@ -26738,7 +27284,7 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeec2servicewithtasknetworkingawsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic582DD4BEABB08B98", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeWillkommenEc2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic5835279F94354ECC", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, @@ -26752,7 +27298,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'awsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic42EE7A5C'" + "resolutionSource": "Ref to 'Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopicF7263B30'" } }, { @@ -26761,7 +27307,7 @@ "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionTopicF27EF507", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic4795E0F6", "entityType": "Resource", "resourceType": "AWS::SNS::Subscription" }, @@ -26776,7 +27322,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionC919C385.Arn" + "resolutionSource": "GetAtt Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionE0DEFB31.Arn" } }, { @@ -26785,7 +27331,7 @@ "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionTopicF27EF507", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic4795E0F6", "entityType": "Resource", "resourceType": "AWS::SNS::Subscription" }, @@ -26808,7 +27354,7 @@ "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionTopicF27EF507", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic4795E0F6", "entityType": "Resource", "resourceType": "AWS::SNS::Subscription" }, @@ -26823,7 +27369,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'awsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic42EE7A5C'" + "resolutionSource": "Ref to 'Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopicF7263B30'" } }, { @@ -26832,7 +27378,7 @@ "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHook4D2DB763", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHook5CB1467E", "entityType": "Resource", "resourceType": "AWS::AutoScaling::LifecycleHook" }, @@ -26847,7 +27393,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'awsvpcecsdemoclusterDefaultAutoScalingGroupASG7F29632B'" + "resolutionSource": "Ref to 'Ec2ClusterDefaultAutoScalingGroupASGC5A6D4C0'" } }, { @@ -26856,7 +27402,7 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nginxawspvcB396AC00", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, @@ -26876,42 +27422,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nginxawspvcB396AC00", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.ExecutionRoleArn", "category": "Best Practice", - "startLine": 1030, + "startLine": 1027, "startColumn": 5, - "endLine": 1030, - "endColumn": 12, + "endLine": 1027, + "endColumn": 22, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt MyTaskDefinitionExecutionRole3D88C23D.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nginxawspvcB396AC00", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 1031, + "startLine": 1033, "startColumn": 5, - "endLine": 1031, - "endColumn": 17, + "endLine": 1033, + "endColumn": 12, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -26922,19 +27469,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nginxawspvcB396AC00", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 1032, + "startLine": 1034, "startColumn": 5, - "endLine": 1032, - "endColumn": 29, + "endLine": 1034, + "endColumn": 17, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -26945,45 +27492,22 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nginxawspvcB396AC00", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.TaskRoleArn", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", "startLine": 1035, "startColumn": 5, "endLine": 1035, - "endColumn": 17, + "endColumn": 29, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt nginxawspvcTaskRole3F43A26E.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "nginx76230F353007", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 1049, - "startColumn": 5, - "endLine": 1049, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", "context": { "lifecycle": "create-only" } @@ -26991,24 +27515,25 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nginx76230F353007", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 1068, + "startLine": 1038, "startColumn": 5, - "endLine": 1068, - "endColumn": 11, + "endLine": 1038, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "GetAtt MyTaskDefinitionTaskRole93FBB305.Arn" } }, { @@ -27017,21 +27542,21 @@ "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoserviceServiceFC4BE5C7", + "logicalId": "Ec2Service04A33183", "entityType": "Resource", "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 1079, + "startLine": 1112, "startColumn": 5, - "endLine": 1079, + "endLine": 1112, "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'awsvpcecsdemoclusterA7FD8C86'" + "resolutionSource": "Ref to 'Ec2ClusterEE43E89D'" } }, { @@ -27040,15 +27565,15 @@ "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoserviceServiceFC4BE5C7", + "logicalId": "Ec2Service04A33183", "entityType": "Resource", "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 1092, + "startLine": 1125, "startColumn": 5, - "endLine": 1092, + "endLine": 1125, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -27062,15 +27587,15 @@ "message": "Property 'SchedulingStrategy' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoserviceServiceFC4BE5C7", + "logicalId": "Ec2Service04A33183", "entityType": "Resource", "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.SchedulingStrategy", "category": "Best Practice", - "startLine": 1114, + "startLine": 1126, "startColumn": 5, - "endLine": 1114, + "endLine": 1126, "endColumn": 24, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -27081,10 +27606,10 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'awsvpcecsdemoclusterA7FD8C86' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Resource 'Ec2ClusterEE43E89D' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterA7FD8C86", + "logicalId": "Ec2ClusterEE43E89D", "entityType": "Resource", "resourceType": "AWS::ECS::Cluster" }, @@ -27094,17 +27619,17 @@ "startLine": 463, "startColumn": 3, "endLine": 463, - "endColumn": 32, + "endColumn": 22, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'nginxawspvcTaskRole3F43A26E' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'MyTaskDefinitionTaskRole93FBB305' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "nginxawspvcTaskRole3F43A26E", + "logicalId": "MyTaskDefinitionTaskRole93FBB305", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, @@ -27121,10 +27646,10 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'nginxawspvcB396AC00' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'MyTaskDefinitionF5B350B4' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "nginxawspvcB396AC00", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, @@ -27141,19 +27666,39 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'nginx76230F353007' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'MyTaskDefinitionAppContainerLogGroupA24DD1B6' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "nginx76230F353007", + "logicalId": "MyTaskDefinitionAppContainerLogGroupA24DD1B6", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Logs::LogGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1048, + "startLine": 1049, + "startColumn": 3, + "endLine": 1049, + "endColumn": 48, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyTaskDefinitionExecutionRole3D88C23D' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "MyTaskDefinitionExecutionRole3D88C23D", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1059, "startColumn": 4, - "endLine": 1048, + "endLine": 1059, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -27161,35 +27706,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'awsvpcecsdemoserviceServiceFC4BE5C7' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Resource 'Ec2Service04A33183' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoserviceServiceFC4BE5C7", + "logicalId": "Ec2Service04A33183", "entityType": "Resource", "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1078, + "startLine": 1111, "startColumn": 4, - "endLine": 1078, + "endLine": 1111, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/ecs-ecs-service-with-task-placement--sample-aws-ecs-integ-ecs.template.json": { - "filePath": "cdk/ecs-ecs-service-with-task-placement--sample-aws-ecs-integ-ecs.template.json", + "cdk/ecs-ecs-service-with-task-networking--ec2-service-with-task-networking.template.json": { + "filePath": "cdk/ecs-ecs-service-with-task-networking--ec2-service-with-task-networking.template.json", "status": "OK", "metadata": { - "resourcesScanned": 43, + "resourcesScanned": 44, "counts": { "fatal": 0, "errors": 0, "warnings": 3, - "informational": 68, + "informational": 71, "debug": 0 }, "suppressed": 0, @@ -27200,10 +27745,10 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRole94543EDA' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRoleBC3C9F69' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionE17A5F5E", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionC919C385", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, @@ -27220,10 +27765,10 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'EcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookRoleA38EC83B' dependency already enforced by a 'GetAtt' at 'Properties.RoleARN'", + "message": "'awsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookRoleD0498D9C' dependency already enforced by a 'GetAtt' at 'Properties.RoleARN'", "source": "CFN_LINT", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookFFA63029", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHook4D2DB763", "entityType": "Resource", "resourceType": "AWS::AutoScaling::LifecycleHook" }, @@ -27243,7 +27788,7 @@ "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", "source": "CFN_LINT", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF", "entityType": "Resource", "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, @@ -27251,7 +27796,7 @@ "startLine": 594, "startColumn": 3, "endLine": 594, - "endColumn": 57, + "endColumn": 67, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Resource type is from a service in maintenance mode", "phase": "SCHEMA" @@ -28193,7 +28738,7 @@ "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupInstanceSecurityGroup912E1231", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupInstanceSecurityGroupFF91CD80", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, @@ -28215,7 +28760,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupInstanceSecurityGroup912E1231", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupInstanceSecurityGroupFF91CD80", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, @@ -28238,7 +28783,7 @@ "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF", "entityType": "Resource", "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, @@ -28253,7 +28798,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'EcsClusterDefaultAutoScalingGroupInstanceProfile2CE606B3'" + "resolutionSource": "Ref to 'awsvpcecsdemoclusterDefaultAutoScalingGroupInstanceProfileF3361609'" } }, { @@ -28262,7 +28807,7 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF", "entityType": "Resource", "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, @@ -28285,7 +28830,7 @@ "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF", "entityType": "Resource", "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, @@ -28308,7 +28853,7 @@ "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF", "entityType": "Resource", "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, @@ -28331,7 +28876,7 @@ "message": "Property 'UserData' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF", "entityType": "Resource", "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, @@ -28355,7 +28900,7 @@ "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupASGC1A785DB", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupASG7F29632B", "entityType": "Resource", "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, @@ -28369,7 +28914,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1'" + "resolutionSource": "Ref to 'awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF'" } }, { @@ -28378,7 +28923,7 @@ "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupASGC1A785DB", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupASG7F29632B", "entityType": "Resource", "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, @@ -28400,7 +28945,7 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokesampleawsecsintegecsEcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic7D0FA5A858D2FF02", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeec2servicewithtasknetworkingawsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic582DD4BEABB08B98", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, @@ -28422,7 +28967,7 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokesampleawsecsintegecsEcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic7D0FA5A858D2FF02", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeec2servicewithtasknetworkingawsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic582DD4BEABB08B98", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, @@ -28436,7 +28981,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionE17A5F5E.Arn" + "resolutionSource": "GetAtt awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionC919C385.Arn" } }, { @@ -28445,7 +28990,7 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokesampleawsecsintegecsEcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic7D0FA5A858D2FF02", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeec2servicewithtasknetworkingawsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic582DD4BEABB08B98", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, @@ -28467,7 +29012,7 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokesampleawsecsintegecsEcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic7D0FA5A858D2FF02", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeec2servicewithtasknetworkingawsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic582DD4BEABB08B98", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, @@ -28481,7 +29026,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'EcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopicACD2D4A4'" + "resolutionSource": "Ref to 'awsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic42EE7A5C'" } }, { @@ -28490,7 +29035,7 @@ "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic8F34E394", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionTopicF27EF507", "entityType": "Resource", "resourceType": "AWS::SNS::Subscription" }, @@ -28505,7 +29050,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionE17A5F5E.Arn" + "resolutionSource": "GetAtt awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionC919C385.Arn" } }, { @@ -28514,7 +29059,7 @@ "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic8F34E394", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionTopicF27EF507", "entityType": "Resource", "resourceType": "AWS::SNS::Subscription" }, @@ -28537,7 +29082,7 @@ "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic8F34E394", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionTopicF27EF507", "entityType": "Resource", "resourceType": "AWS::SNS::Subscription" }, @@ -28552,7 +29097,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'EcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopicACD2D4A4'" + "resolutionSource": "Ref to 'awsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic42EE7A5C'" } }, { @@ -28561,7 +29106,7 @@ "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookFFA63029", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHook4D2DB763", "entityType": "Resource", "resourceType": "AWS::AutoScaling::LifecycleHook" }, @@ -28576,7 +29121,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'EcsClusterDefaultAutoScalingGroupASGC1A785DB'" + "resolutionSource": "Ref to 'awsvpcecsdemoclusterDefaultAutoScalingGroupASG7F29632B'" } }, { @@ -28585,7 +29130,7 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "nginxawspvcB396AC00", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, @@ -28608,15 +29153,15 @@ "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "nginxawspvcB396AC00", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 1022, + "startLine": 1030, "startColumn": 5, - "endLine": 1022, + "endLine": 1030, "endColumn": 12, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -28631,15 +29176,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "nginxawspvcB396AC00", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 1023, + "startLine": 1031, "startColumn": 5, - "endLine": 1023, + "endLine": 1031, "endColumn": 17, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -28654,15 +29199,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "nginxawspvcB396AC00", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 1024, + "startLine": 1032, "startColumn": 5, - "endLine": 1024, + "endLine": 1032, "endColumn": 29, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -28677,22 +29222,67 @@ "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "nginxawspvcB396AC00", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 1027, + "startLine": 1035, "startColumn": 5, - "endLine": 1027, + "endLine": 1035, "endColumn": 17, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt TaskDefTaskRole1EDB4A67.Arn" + "resolutionSource": "GetAtt nginxawspvcTaskRole3F43A26E.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "nginx76230F353007", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 1049, + "startColumn": 5, + "endLine": 1049, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "nginx76230F353007", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 1068, + "startColumn": 5, + "endLine": 1068, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -28701,21 +29291,21 @@ "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceD69D759B", + "logicalId": "awsvpcecsdemoserviceServiceFC4BE5C7", "entityType": "Resource", "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 1041, + "startLine": 1079, "startColumn": 5, - "endLine": 1041, + "endLine": 1079, "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'EcsCluster97242B84'" + "resolutionSource": "Ref to 'awsvpcecsdemoclusterA7FD8C86'" } }, { @@ -28724,15 +29314,15 @@ "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceD69D759B", + "logicalId": "awsvpcecsdemoserviceServiceFC4BE5C7", "entityType": "Resource", "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 1054, + "startLine": 1092, "startColumn": 5, - "endLine": 1054, + "endLine": 1092, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -28746,15 +29336,15 @@ "message": "Property 'SchedulingStrategy' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceD69D759B", + "logicalId": "awsvpcecsdemoserviceServiceFC4BE5C7", "entityType": "Resource", "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.SchedulingStrategy", "category": "Best Practice", - "startLine": 1070, + "startLine": 1114, "startColumn": 5, - "endLine": 1070, + "endLine": 1114, "endColumn": 24, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -28765,10 +29355,10 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EcsCluster97242B84' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Resource 'awsvpcecsdemoclusterA7FD8C86' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EcsCluster97242B84", + "logicalId": "awsvpcecsdemoclusterA7FD8C86", "entityType": "Resource", "resourceType": "AWS::ECS::Cluster" }, @@ -28778,17 +29368,17 @@ "startLine": 463, "startColumn": 3, "endLine": 463, - "endColumn": 22, + "endColumn": 32, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TaskDefTaskRole1EDB4A67' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'nginxawspvcTaskRole3F43A26E' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskDefTaskRole1EDB4A67", + "logicalId": "nginxawspvcTaskRole3F43A26E", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, @@ -28805,10 +29395,10 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TaskDef54694570' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'nginxawspvcB396AC00' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "nginxawspvcB396AC00", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, @@ -28825,35 +29415,55 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ServiceD69D759B' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Resource 'nginx76230F353007' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ServiceD69D759B", + "logicalId": "nginx76230F353007", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1048, + "startColumn": 4, + "endLine": 1048, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'awsvpcecsdemoserviceServiceFC4BE5C7' of type 'AWS::ECS::Service' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "awsvpcecsdemoserviceServiceFC4BE5C7", "entityType": "Resource", "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1040, + "startLine": 1078, "startColumn": 4, - "endLine": 1040, + "endLine": 1078, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/ecs-fargate-application-load-balanced-service--Bonjour.template.json": { - "filePath": "cdk/ecs-fargate-application-load-balanced-service--Bonjour.template.json", + "cdk/ecs-ecs-service-with-task-placement--sample-aws-ecs-integ-ecs.template.json": { + "filePath": "cdk/ecs-ecs-service-with-task-placement--sample-aws-ecs-integ-ecs.template.json", "status": "OK", "metadata": { - "resourcesScanned": 38, + "resourcesScanned": 43, "counts": { "fatal": 0, "errors": 0, - "warnings": 1, - "informational": 81, + "warnings": 3, + "informational": 68, "debug": 0 }, "suppressed": 0, @@ -28864,30 +29474,69 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'FargateServiceLBPublicListenerECSGroupBE57E081' dependency already enforced by a 'Ref' at 'Properties.LoadBalancers.0.TargetGroupArn'", + "message": "'EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRole94543EDA' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "FargateServiceECC8084D", + "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionE17A5F5E", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 777, + "startLine": 846, "startColumn": 4, - "endLine": 777, + "endLine": 846, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'EcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookRoleA38EC83B' dependency already enforced by a 'GetAtt' at 'Properties.RoleARN'", + "source": "CFN_LINT", + "entity": { + "logicalId": "EcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookFFA63029", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LifecycleHook" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 976, + "startColumn": 4, + "endLine": 976, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "category": "Deprecation", + "startLine": 594, + "startColumn": 3, + "endLine": 594, + "endColumn": 57, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" + }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcF9F0CA6F", + "logicalId": "Vpc8378EB38", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, @@ -28909,7 +29558,7 @@ "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcF9F0CA6F", + "logicalId": "Vpc8378EB38", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, @@ -28931,7 +29580,7 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1SubnetF6608456", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -28953,7 +29602,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1SubnetF6608456", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -28975,7 +29624,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1SubnetF6608456", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -28989,7 +29638,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -28998,7 +29647,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1RouteTableC46AB2F4", + "logicalId": "VpcPublicSubnet1RouteTable6C95E38E", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, @@ -29013,7 +29662,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -29022,7 +29671,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", + "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -29037,7 +29686,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'", + "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'", "extra": { "replacement_strategy": "delete_then_create" } @@ -29049,7 +29698,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", + "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -29064,7 +29713,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'", + "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'", "extra": { "replacement_strategy": "delete_then_create" } @@ -29076,7 +29725,7 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", + "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -29099,7 +29748,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", + "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -29114,7 +29763,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'" + "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'" } }, { @@ -29123,7 +29772,7 @@ "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", + "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, @@ -29137,7 +29786,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt MyVpcPublicSubnet1EIP096967CB.AllocationId" + "resolutionSource": "GetAtt VpcPublicSubnet1EIPD7E02669.AllocationId" } }, { @@ -29146,7 +29795,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", + "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, @@ -29160,7 +29809,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'" + "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'" } }, { @@ -29169,7 +29818,7 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -29191,7 +29840,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -29213,7 +29862,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -29227,7 +29876,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -29236,7 +29885,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2RouteTable1DF17386", + "logicalId": "VpcPublicSubnet2RouteTable94F7E489", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, @@ -29251,7 +29900,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -29260,7 +29909,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", + "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -29275,7 +29924,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'", + "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'", "extra": { "replacement_strategy": "delete_then_create" } @@ -29287,7 +29936,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", + "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -29302,7 +29951,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'", + "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'", "extra": { "replacement_strategy": "delete_then_create" } @@ -29314,7 +29963,7 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", + "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -29337,7 +29986,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", + "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -29352,7 +30001,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'" + "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'" } }, { @@ -29361,7 +30010,7 @@ "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", + "logicalId": "VpcPublicSubnet2NATGateway9182C01D", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, @@ -29375,7 +30024,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt MyVpcPublicSubnet2EIP8CCBA239.AllocationId" + "resolutionSource": "GetAtt VpcPublicSubnet2EIP3C605A87.AllocationId" } }, { @@ -29384,7 +30033,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", + "logicalId": "VpcPublicSubnet2NATGateway9182C01D", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, @@ -29398,7 +30047,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'" + "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'" } }, { @@ -29407,7 +30056,7 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -29429,7 +30078,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -29451,7 +30100,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -29465,7 +30114,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -29474,7 +30123,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1RouteTable8819E6E2", + "logicalId": "VpcPrivateSubnet1RouteTableB2C5B500", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, @@ -29489,7 +30138,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -29498,7 +30147,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", + "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -29513,7 +30162,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'", + "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'", "extra": { "replacement_strategy": "delete_then_create" } @@ -29525,7 +30174,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", + "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -29540,7 +30189,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet1Subnet5057CF7E'", + "resolutionSource": "Ref to 'VpcPrivateSubnet1Subnet536B997A'", "extra": { "replacement_strategy": "delete_then_create" } @@ -29552,7 +30201,7 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", + "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -29575,7 +30224,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", + "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -29590,7 +30239,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'" + "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'" } }, { @@ -29599,7 +30248,7 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -29621,7 +30270,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -29643,7 +30292,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -29657,7 +30306,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -29666,7 +30315,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2RouteTableCEDCEECE", + "logicalId": "VpcPrivateSubnet2RouteTableA678073B", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, @@ -29681,7 +30330,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -29690,7 +30339,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", + "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -29705,7 +30354,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'", + "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'", "extra": { "replacement_strategy": "delete_then_create" } @@ -29717,7 +30366,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", + "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -29732,7 +30381,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet2Subnet0040C983'", + "resolutionSource": "Ref to 'VpcPrivateSubnet2Subnet3788AAA1'", "extra": { "replacement_strategy": "delete_then_create" } @@ -29744,7 +30393,7 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", + "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -29767,7 +30416,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", + "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -29782,7 +30431,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'" + "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'" } }, { @@ -29791,7 +30440,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcVPCGW488ACE0D", + "logicalId": "VpcVPCGWBF912B6E", "entityType": "Resource", "resourceType": "AWS::EC2::VPCGatewayAttachment" }, @@ -29806,7 +30455,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'", + "resolutionSource": "Ref to 'Vpc8378EB38'", "extra": { "replacement_strategy": "delete_then_create" } @@ -29815,20 +30464,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBB353E155", + "logicalId": "EcsClusterDefaultAutoScalingGroupInstanceSecurityGroup912E1231", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Scheme", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 478, + "startLine": 472, "startColumn": 5, - "endLine": 478, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endLine": 472, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -29838,112 +30486,113 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBB353E155", + "logicalId": "EcsClusterDefaultAutoScalingGroupInstanceSecurityGroup912E1231", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 495, + "startLine": 486, "startColumn": 5, - "endLine": 495, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endLine": 486, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBSecurityGroup5F444C78", + "logicalId": "EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.IamInstanceProfile", "category": "Best Practice", - "startLine": 510, + "startLine": 597, "startColumn": 5, - "endLine": 510, - "endColumn": 22, + "endLine": 597, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'EcsClusterDefaultAutoScalingGroupInstanceProfile2CE606B3'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBSecurityGroup5F444C78", + "logicalId": "EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 520, + "startLine": 600, "startColumn": 5, - "endLine": 520, - "endColumn": 11, + "endLine": 600, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationSecurityGroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBSecurityGrouptoBonjourFargateServiceSecurityGroupB8A86CBA80181B6C73", + "logicalId": "EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.DestinationSecurityGroupId", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 532, + "startLine": 603, "startColumn": 5, - "endLine": 532, - "endColumn": 32, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 603, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateServiceSecurityGroup262B61DD.GroupId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBSecurityGrouptoBonjourFargateServiceSecurityGroupB8A86CBA80181B6C73", + "logicalId": "EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.SecurityGroups", "category": "Best Practice", - "startLine": 538, + "startLine": 604, "startColumn": 5, - "endLine": 538, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 604, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -29953,135 +30602,133 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'UserData' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBSecurityGrouptoBonjourFargateServiceSecurityGroupB8A86CBA80181B6C73", + "logicalId": "EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 539, + "startLine": 612, "startColumn": 5, - "endLine": 539, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 612, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateServiceLBSecurityGroup5F444C78.GroupId" + "resolutionSource": "dynamic (Base64 with unresolvable argument)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBSecurityGrouptoBonjourFargateServiceSecurityGroupB8A86CBA80181B6C73", + "logicalId": "EcsClusterDefaultAutoScalingGroupASGC1A785DB", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.LaunchConfigurationName", "category": "Best Practice", - "startLine": 545, + "startLine": 638, "startColumn": 5, - "endLine": 545, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 638, + "endColumn": 29, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBSecurityGrouptoBonjourFargateServiceSecurityGroupB8A86CBA80181B6C73", + "logicalId": "EcsClusterDefaultAutoScalingGroupASGC1A785DB", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.VPCZoneIdentifier", "category": "Best Practice", - "startLine": 546, + "startLine": 650, "startColumn": 5, - "endLine": 546, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 650, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBPublicListener4B4929CA", + "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokesampleawsecsintegecsEcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic7D0FA5A858D2FF02", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.LoadBalancerArn", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 563, + "startLine": 857, "startColumn": 5, - "endLine": 563, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", + "endLine": 857, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'FargateServiceLBB353E155'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBPublicListenerECSGroupBE57E081", + "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokesampleawsecsintegecsEcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic7D0FA5A858D2FF02", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 576, + "startLine": 858, "startColumn": 5, - "endLine": 576, - "endColumn": 10, + "endLine": 858, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionE17A5F5E.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBPublicListenerECSGroupBE57E081", + "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokesampleawsecsintegecsEcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic7D0FA5A858D2FF02", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 577, + "startLine": 864, "startColumn": 5, - "endLine": 577, - "endColumn": 14, + "endLine": 864, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -30091,65 +30738,67 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBPublicListenerECSGroupBE57E081", + "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokesampleawsecsintegecsEcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic7D0FA5A858D2FF02", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.TargetType", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 584, + "startLine": 865, "startColumn": 5, - "endLine": 584, - "endColumn": 16, + "endLine": 865, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'EcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopicACD2D4A4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBPublicListenerECSGroupBE57E081", + "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic8F34E394", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Endpoint", "category": "Best Practice", - "startLine": 585, + "startLine": 876, "startColumn": 5, - "endLine": 585, - "endColumn": 11, + "endLine": 876, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "GetAtt EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionE17A5F5E.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceTaskDef940E3A80", + "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic8F34E394", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 616, + "startLine": 882, "startColumn": 5, - "endLine": 616, - "endColumn": 26, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 882, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -30159,66 +30808,67 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceTaskDef940E3A80", + "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic8F34E394", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.TopicArn", "category": "Best Practice", - "startLine": 641, + "startLine": 883, "startColumn": 5, - "endLine": 641, - "endColumn": 9, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 883, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'EcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopicACD2D4A4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceTaskDef940E3A80", + "logicalId": "EcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookFFA63029", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::AutoScaling::LifecycleHook" }, - "propertyPath": "Properties.ExecutionRoleArn", + "propertyPath": "Properties.AutoScalingGroupName", "category": "Best Practice", - "startLine": 642, + "startLine": 960, "startColumn": 5, - "endLine": 642, - "endColumn": 22, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 960, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateServiceTaskDefExecutionRole9194820E.Arn" + "resolutionSource": "Ref to 'EcsClusterDefaultAutoScalingGroupASGC1A785DB'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceTaskDef940E3A80", + "logicalId": "TaskDef54694570", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 648, + "startLine": 1007, "startColumn": 5, - "endLine": 648, - "endColumn": 12, + "endLine": 1007, + "endColumn": 26, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -30229,18 +30879,18 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceTaskDef940E3A80", + "logicalId": "TaskDef54694570", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 649, + "startLine": 1022, "startColumn": 5, - "endLine": 649, + "endLine": 1022, "endColumn": 12, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -30255,15 +30905,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceTaskDef940E3A80", + "logicalId": "TaskDef54694570", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 650, + "startLine": 1023, "startColumn": 5, - "endLine": 650, + "endLine": 1023, "endColumn": 17, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -30278,15 +30928,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceTaskDef940E3A80", + "logicalId": "TaskDef54694570", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 651, + "startLine": 1024, "startColumn": 5, - "endLine": 651, + "endLine": 1024, "endColumn": 29, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -30301,22 +30951,22 @@ "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceTaskDef940E3A80", + "logicalId": "TaskDef54694570", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 654, + "startLine": 1027, "startColumn": 5, - "endLine": 654, + "endLine": 1027, "endColumn": 17, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateServiceTaskDefTaskRole8CDCF85E.Arn" + "resolutionSource": "GetAtt TaskDefTaskRole1EDB4A67.Arn" } }, { @@ -30325,21 +30975,21 @@ "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceECC8084D", + "logicalId": "ServiceD69D759B", "entityType": "Resource", "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 728, + "startLine": 1041, "startColumn": 5, - "endLine": 728, + "endLine": 1041, "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterEB0386A7'" + "resolutionSource": "Ref to 'EcsCluster97242B84'" } }, { @@ -30348,15 +30998,15 @@ "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceECC8084D", + "logicalId": "ServiceD69D759B", "entityType": "Resource", "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 742, + "startLine": 1054, "startColumn": 5, - "endLine": 742, + "endLine": 1054, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -30367,19 +31017,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'SchedulingStrategy' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceSecurityGroup262B61DD", + "logicalId": "ServiceD69D759B", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.SchedulingStrategy", "category": "Best Practice", - "startLine": 789, + "startLine": 1070, "startColumn": 5, - "endLine": 789, - "endColumn": 22, + "endLine": 1070, + "endColumn": 24, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -30387,261 +31037,41 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'EcsCluster97242B84' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceSecurityGroup262B61DD", + "logicalId": "EcsCluster97242B84", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ECS::Cluster" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 797, - "startColumn": 5, - "endLine": 797, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" - } + "startLine": 463, + "startColumn": 3, + "endLine": 463, + "endColumn": 22, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Resource 'TaskDefTaskRole1EDB4A67' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceSecurityGroupfromBonjourFargateServiceLBSecurityGroup660CF9B080C7AA015A", + "logicalId": "TaskDefTaskRole1EDB4A67", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 812, - "startColumn": 5, - "endLine": 812, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FargateServiceSecurityGroupfromBonjourFargateServiceLBSecurityGroup660CF9B080C7AA015A", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" - }, - "propertyPath": "Properties.GroupId", - "category": "Best Practice", - "startLine": 813, - "startColumn": 5, - "endLine": 813, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateServiceSecurityGroup262B61DD.GroupId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FargateServiceSecurityGroupfromBonjourFargateServiceLBSecurityGroup660CF9B080C7AA015A", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" - }, - "propertyPath": "Properties.IpProtocol", - "category": "Best Practice", - "startLine": 819, - "startColumn": 5, - "endLine": 819, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FargateServiceSecurityGroupfromBonjourFargateServiceLBSecurityGroup660CF9B080C7AA015A", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" - }, - "propertyPath": "Properties.SourceSecurityGroupId", - "category": "Best Practice", - "startLine": 820, - "startColumn": 5, - "endLine": 820, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateServiceLBSecurityGroup5F444C78.GroupId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FargateServiceSecurityGroupfromBonjourFargateServiceLBSecurityGroup660CF9B080C7AA015A", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" - }, - "propertyPath": "Properties.ToPort", - "category": "Best Practice", - "startLine": 826, - "startColumn": 5, - "endLine": 826, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ClusterEB0386A7' of type 'AWS::ECS::Cluster' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ClusterEB0386A7", - "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 463, - "startColumn": 3, - "endLine": 463, - "endColumn": 19, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FargateServiceLBB353E155' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FargateServiceLBB353E155", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 471, - "startColumn": 4, - "endLine": 471, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FargateServiceLBSecurityGroup5F444C78' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FargateServiceLBSecurityGroup5F444C78", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 509, - "startColumn": 4, - "endLine": 509, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FargateServiceLBPublicListener4B4929CA' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FargateServiceLBPublicListener4B4929CA", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 554, - "startColumn": 4, - "endLine": 554, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FargateServiceLBPublicListenerECSGroupBE57E081' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FargateServiceLBPublicListenerECSGroupBE57E081", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 575, - "startColumn": 4, - "endLine": 575, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FargateServiceTaskDefTaskRole8CDCF85E' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FargateServiceTaskDefTaskRole8CDCF85E", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 595, + "startLine": 986, "startColumn": 4, - "endLine": 595, + "endLine": 986, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -30649,59 +31079,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FargateServiceTaskDef940E3A80' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'TaskDef54694570' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceTaskDef940E3A80", + "logicalId": "TaskDef54694570", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 615, - "startColumn": 4, - "endLine": 615, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FargateServiceTaskDefwebLogGroup71FAF541' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FargateServiceTaskDefwebLogGroup71FAF541", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 665, - "startColumn": 3, - "endLine": 665, - "endColumn": 44, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FargateServiceTaskDefExecutionRole9194820E' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FargateServiceTaskDefExecutionRole9194820E", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 675, + "startLine": 1006, "startColumn": 4, - "endLine": 675, + "endLine": 1006, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -30709,55 +31099,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FargateServiceECC8084D' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Resource 'ServiceD69D759B' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceECC8084D", + "logicalId": "ServiceD69D759B", "entityType": "Resource", "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 727, - "startColumn": 4, - "endLine": 727, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FargateServiceSecurityGroup262B61DD' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FargateServiceSecurityGroup262B61DD", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 788, + "startLine": 1040, "startColumn": 4, - "endLine": 788, + "endLine": 1040, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/ecs-fargate-service-with-auto-scaling--aws-fargate-application-autoscaling.template.json": { - "filePath": "cdk/ecs-fargate-service-with-auto-scaling--aws-fargate-application-autoscaling.template.json", + "cdk/ecs-fargate-application-load-balanced-service--Bonjour.template.json": { + "filePath": "cdk/ecs-fargate-application-load-balanced-service--Bonjour.template.json", "status": "OK", "metadata": { - "resourcesScanned": 37, + "resourcesScanned": 38, "counts": { "fatal": 0, "errors": 0, "warnings": 1, - "informational": 74, + "informational": 81, "debug": 0 }, "suppressed": 0, @@ -30768,19 +31138,19 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'sampleappLBPublicListenerECSGroup525A567D' dependency already enforced by a 'Ref' at 'Properties.LoadBalancers.0.TargetGroupArn'", + "message": "'FargateServiceLBPublicListenerECSGroupBE57E081' dependency already enforced by a 'Ref' at 'Properties.LoadBalancers.0.TargetGroupArn'", "source": "CFN_LINT", "entity": { - "logicalId": "sampleappServiceE7504FDB", + "logicalId": "FargateServiceECC8084D", "entityType": "Resource", "resourceType": "AWS::ECS::Service" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 718, + "startLine": 777, "startColumn": 4, - "endLine": 718, + "endLine": 777, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -30791,7 +31161,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Vpc8378EB38", + "logicalId": "MyVpcF9F0CA6F", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, @@ -30813,7 +31183,7 @@ "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Vpc8378EB38", + "logicalId": "MyVpcF9F0CA6F", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, @@ -30835,7 +31205,7 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "MyVpcPublicSubnet1SubnetF6608456", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -30857,7 +31227,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "MyVpcPublicSubnet1SubnetF6608456", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -30879,7 +31249,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "MyVpcPublicSubnet1SubnetF6608456", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -30893,7 +31263,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -30902,7 +31272,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTable6C95E38E", + "logicalId": "MyVpcPublicSubnet1RouteTableC46AB2F4", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, @@ -30917,7 +31287,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -30926,7 +31296,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", + "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -30941,7 +31311,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'", + "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'", "extra": { "replacement_strategy": "delete_then_create" } @@ -30953,7 +31323,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", + "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -30968,7 +31338,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'", + "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'", "extra": { "replacement_strategy": "delete_then_create" } @@ -30980,7 +31350,7 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", + "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -31003,7 +31373,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", + "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -31018,7 +31388,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'" + "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'" } }, { @@ -31027,7 +31397,7 @@ "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", + "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, @@ -31041,7 +31411,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcPublicSubnet1EIPD7E02669.AllocationId" + "resolutionSource": "GetAtt MyVpcPublicSubnet1EIP096967CB.AllocationId" } }, { @@ -31050,7 +31420,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", + "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, @@ -31064,7 +31434,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'" + "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'" } }, { @@ -31073,7 +31443,7 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -31095,7 +31465,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -31117,7 +31487,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -31131,7 +31501,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -31140,7 +31510,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTable94F7E489", + "logicalId": "MyVpcPublicSubnet2RouteTable1DF17386", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, @@ -31155,7 +31525,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -31164,7 +31534,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -31179,7 +31549,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'", + "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'", "extra": { "replacement_strategy": "delete_then_create" } @@ -31191,7 +31561,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -31206,7 +31576,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'", + "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'", "extra": { "replacement_strategy": "delete_then_create" } @@ -31218,7 +31588,7 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", + "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -31241,7 +31611,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", + "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -31256,7 +31626,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'" + "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'" } }, { @@ -31265,7 +31635,7 @@ "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2NATGateway9182C01D", + "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, @@ -31279,7 +31649,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcPublicSubnet2EIP3C605A87.AllocationId" + "resolutionSource": "GetAtt MyVpcPublicSubnet2EIP8CCBA239.AllocationId" } }, { @@ -31288,7 +31658,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2NATGateway9182C01D", + "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, @@ -31302,7 +31672,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'" + "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'" } }, { @@ -31311,7 +31681,7 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -31333,7 +31703,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -31355,7 +31725,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -31369,7 +31739,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -31378,7 +31748,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableB2C5B500", + "logicalId": "MyVpcPrivateSubnet1RouteTable8819E6E2", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, @@ -31393,7 +31763,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -31402,7 +31772,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", + "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -31417,7 +31787,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'", "extra": { "replacement_strategy": "delete_then_create" } @@ -31429,7 +31799,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", + "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -31444,7 +31814,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1Subnet536B997A'", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet1Subnet5057CF7E'", "extra": { "replacement_strategy": "delete_then_create" } @@ -31456,7 +31826,7 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -31479,7 +31849,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -31494,7 +31864,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'" + "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'" } }, { @@ -31503,7 +31873,7 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -31525,7 +31895,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -31547,7 +31917,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -31561,7 +31931,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -31570,7 +31940,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableA678073B", + "logicalId": "MyVpcPrivateSubnet2RouteTableCEDCEECE", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, @@ -31585,7 +31955,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -31594,7 +31964,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", + "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -31609,7 +31979,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'", "extra": { "replacement_strategy": "delete_then_create" } @@ -31621,7 +31991,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", + "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -31636,7 +32006,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2Subnet3788AAA1'", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet2Subnet0040C983'", "extra": { "replacement_strategy": "delete_then_create" } @@ -31648,7 +32018,7 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", + "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -31671,7 +32041,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", + "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -31686,7 +32056,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'" + "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'" } }, { @@ -31695,7 +32065,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcVPCGWBF912B6E", + "logicalId": "MyVpcVPCGW488ACE0D", "entityType": "Resource", "resourceType": "AWS::EC2::VPCGatewayAttachment" }, @@ -31710,7 +32080,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'", "extra": { "replacement_strategy": "delete_then_create" } @@ -31722,7 +32092,7 @@ "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappLBBDE1D276", + "logicalId": "FargateServiceLBB353E155", "entityType": "Resource", "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, @@ -31745,15 +32115,15 @@ "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappLBBDE1D276", + "logicalId": "FargateServiceLBB353E155", "entityType": "Resource", "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 487, + "startLine": 495, "startColumn": 5, - "endLine": 487, + "endLine": 495, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -31762,28 +32132,190 @@ "lifecycle": "create-only" } }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FargateServiceLBSecurityGroup5F444C78", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 510, + "startColumn": 5, + "endLine": 510, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FargateServiceLBSecurityGroup5F444C78", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 520, + "startColumn": 5, + "endLine": 520, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DestinationSecurityGroupId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FargateServiceLBSecurityGrouptoBonjourFargateServiceSecurityGroupB8A86CBA80181B6C73", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupEgress" + }, + "propertyPath": "Properties.DestinationSecurityGroupId", + "category": "Best Practice", + "startLine": 532, + "startColumn": 5, + "endLine": 532, + "endColumn": 32, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FargateServiceSecurityGroup262B61DD.GroupId" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FargateServiceLBSecurityGrouptoBonjourFargateServiceSecurityGroupB8A86CBA80181B6C73", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupEgress" + }, + "propertyPath": "Properties.FromPort", + "category": "Best Practice", + "startLine": 538, + "startColumn": 5, + "endLine": 538, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FargateServiceLBSecurityGrouptoBonjourFargateServiceSecurityGroupB8A86CBA80181B6C73", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupEgress" + }, + "propertyPath": "Properties.GroupId", + "category": "Best Practice", + "startLine": 539, + "startColumn": 5, + "endLine": 539, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FargateServiceLBSecurityGroup5F444C78.GroupId" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FargateServiceLBSecurityGrouptoBonjourFargateServiceSecurityGroupB8A86CBA80181B6C73", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupEgress" + }, + "propertyPath": "Properties.IpProtocol", + "category": "Best Practice", + "startLine": 545, + "startColumn": 5, + "endLine": 545, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FargateServiceLBSecurityGrouptoBonjourFargateServiceSecurityGroupB8A86CBA80181B6C73", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupEgress" + }, + "propertyPath": "Properties.ToPort", + "category": "Best Practice", + "startLine": 546, + "startColumn": 5, + "endLine": 546, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappLBPublicListenerC4DF6480", + "logicalId": "FargateServiceLBPublicListener4B4929CA", "entityType": "Resource", "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, "propertyPath": "Properties.LoadBalancerArn", "category": "Best Practice", - "startLine": 510, + "startLine": 563, "startColumn": 5, - "endLine": 510, + "endLine": 563, "endColumn": 21, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'sampleappLBBDE1D276'" + "resolutionSource": "Ref to 'FargateServiceLBB353E155'" } }, { @@ -31792,15 +32324,15 @@ "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappLBPublicListenerECSGroup525A567D", + "logicalId": "FargateServiceLBPublicListenerECSGroupBE57E081", "entityType": "Resource", "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 523, + "startLine": 576, "startColumn": 5, - "endLine": 523, + "endLine": 576, "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -31814,15 +32346,15 @@ "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappLBPublicListenerECSGroup525A567D", + "logicalId": "FargateServiceLBPublicListenerECSGroupBE57E081", "entityType": "Resource", "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 524, + "startLine": 577, "startColumn": 5, - "endLine": 524, + "endLine": 577, "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -31836,15 +32368,15 @@ "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappLBPublicListenerECSGroup525A567D", + "logicalId": "FargateServiceLBPublicListenerECSGroupBE57E081", "entityType": "Resource", "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, "propertyPath": "Properties.TargetType", "category": "Best Practice", - "startLine": 525, + "startLine": 584, "startColumn": 5, - "endLine": 525, + "endLine": 584, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -31858,21 +32390,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappLBPublicListenerECSGroup525A567D", + "logicalId": "FargateServiceLBPublicListenerECSGroupBE57E081", "entityType": "Resource", "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 526, + "startLine": 585, "startColumn": 5, - "endLine": 526, + "endLine": 585, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -31881,15 +32413,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappTaskDef6BF75736", + "logicalId": "FargateServiceTaskDef940E3A80", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 557, + "startLine": 616, "startColumn": 5, - "endLine": 557, + "endLine": 616, "endColumn": 26, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -31904,15 +32436,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappTaskDef6BF75736", + "logicalId": "FargateServiceTaskDef940E3A80", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 582, + "startLine": 641, "startColumn": 5, - "endLine": 582, + "endLine": 641, "endColumn": 9, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -31927,22 +32459,22 @@ "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappTaskDef6BF75736", + "logicalId": "FargateServiceTaskDef940E3A80", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ExecutionRoleArn", "category": "Best Practice", - "startLine": 583, + "startLine": 642, "startColumn": 5, - "endLine": 583, + "endLine": 642, "endColumn": 22, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt sampleappTaskDefExecutionRoleAD6F4C40.Arn" + "resolutionSource": "GetAtt FargateServiceTaskDefExecutionRole9194820E.Arn" } }, { @@ -31951,15 +32483,15 @@ "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappTaskDef6BF75736", + "logicalId": "FargateServiceTaskDef940E3A80", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 589, + "startLine": 648, "startColumn": 5, - "endLine": 589, + "endLine": 648, "endColumn": 12, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -31974,15 +32506,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappTaskDef6BF75736", + "logicalId": "FargateServiceTaskDef940E3A80", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 590, + "startLine": 649, "startColumn": 5, - "endLine": 590, + "endLine": 649, "endColumn": 12, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -31997,15 +32529,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappTaskDef6BF75736", + "logicalId": "FargateServiceTaskDef940E3A80", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 591, + "startLine": 650, "startColumn": 5, - "endLine": 591, + "endLine": 650, "endColumn": 17, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -32020,15 +32552,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappTaskDef6BF75736", + "logicalId": "FargateServiceTaskDef940E3A80", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 592, + "startLine": 651, "startColumn": 5, - "endLine": 592, + "endLine": 651, "endColumn": 29, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -32043,22 +32575,22 @@ "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappTaskDef6BF75736", + "logicalId": "FargateServiceTaskDef940E3A80", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 595, + "startLine": 654, "startColumn": 5, - "endLine": 595, + "endLine": 654, "endColumn": 17, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt sampleappTaskDefTaskRoleB530CAC0.Arn" + "resolutionSource": "GetAtt FargateServiceTaskDefTaskRole8CDCF85E.Arn" } }, { @@ -32067,21 +32599,21 @@ "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappServiceE7504FDB", + "logicalId": "FargateServiceECC8084D", "entityType": "Resource", "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 669, + "startLine": 728, "startColumn": 5, - "endLine": 669, + "endLine": 728, "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'fargateserviceautoscalingD107CF93'" + "resolutionSource": "Ref to 'ClusterEB0386A7'" } }, { @@ -32090,15 +32622,15 @@ "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappServiceE7504FDB", + "logicalId": "FargateServiceECC8084D", "entityType": "Resource", "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 683, + "startLine": 742, "startColumn": 5, - "endLine": 683, + "endLine": 742, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -32112,15 +32644,15 @@ "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappServiceSecurityGroup0ABF0D21", + "logicalId": "FargateServiceSecurityGroup262B61DD", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 730, + "startLine": 789, "startColumn": 5, - "endLine": 730, + "endLine": 789, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -32134,87 +32666,87 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappServiceSecurityGroup0ABF0D21", + "logicalId": "FargateServiceSecurityGroup262B61DD", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 738, + "startLine": 797, "startColumn": 5, - "endLine": 738, + "endLine": 797, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappServiceTaskCountTargetE827DC30", + "logicalId": "FargateServiceSecurityGroupfromBonjourFargateServiceLBSecurityGroup660CF9B080C7AA015A", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalableTarget" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 754, + "startLine": 812, "startColumn": 5, - "endLine": 754, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 812, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:service/{ref:fargateserviceautoscalingD107CF93}/{ref:sampleappServiceE7504FDB})" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ScalableDimension' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappServiceTaskCountTargetE827DC30", + "logicalId": "FargateServiceSecurityGroupfromBonjourFargateServiceLBSecurityGroup660CF9B080C7AA015A", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalableTarget" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.ScalableDimension", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 788, + "startLine": 813, "startColumn": 5, - "endLine": 788, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 813, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt FargateServiceSecurityGroup262B61DD.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ServiceNamespace' is create-only; updating it will cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappServiceTaskCountTargetE827DC30", + "logicalId": "FargateServiceSecurityGroupfromBonjourFargateServiceLBSecurityGroup660CF9B080C7AA015A", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalableTarget" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.ServiceNamespace", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 789, + "startLine": 819, "startColumn": 5, - "endLine": 789, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 819, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -32224,57 +32756,57 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappServiceTaskCountTargetCpuScalingF4452F80", + "logicalId": "FargateServiceSecurityGroupfromBonjourFargateServiceLBSecurityGroup660CF9B080C7AA015A", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.PolicyName", + "propertyPath": "Properties.SourceSecurityGroupId", "category": "Best Practice", - "startLine": 801, + "startLine": 820, "startColumn": 5, - "endLine": 801, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 820, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt FargateServiceLBSecurityGroup5F444C78.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ScalingTargetId' is create-only; updating it will cause resource replacement", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappServiceTaskCountTargetCpuScalingF4452F80", + "logicalId": "FargateServiceSecurityGroupfromBonjourFargateServiceLBSecurityGroup660CF9B080C7AA015A", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.ScalingTargetId", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 803, + "startLine": 826, "startColumn": 5, - "endLine": 803, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 826, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'sampleappServiceTaskCountTargetE827DC30'" + "lifecycle": "create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'fargateserviceautoscalingD107CF93' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Resource 'ClusterEB0386A7' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "fargateserviceautoscalingD107CF93", + "logicalId": "ClusterEB0386A7", "entityType": "Resource", "resourceType": "AWS::ECS::Cluster" }, @@ -32284,17 +32816,17 @@ "startLine": 463, "startColumn": 3, "endLine": 463, - "endColumn": 37, + "endColumn": 19, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sampleappLBBDE1D276' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "message": "Resource 'FargateServiceLBB353E155' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sampleappLBBDE1D276", + "logicalId": "FargateServiceLBB353E155", "entityType": "Resource", "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, @@ -32311,19 +32843,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sampleappLBPublicListenerC4DF6480' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", + "message": "Resource 'FargateServiceLBSecurityGroup5F444C78' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sampleappLBPublicListenerC4DF6480", + "logicalId": "FargateServiceLBSecurityGroup5F444C78", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 501, + "startLine": 509, "startColumn": 4, - "endLine": 501, + "endLine": 509, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -32331,19 +32863,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sampleappLBPublicListenerECSGroup525A567D' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "message": "Resource 'FargateServiceLBPublicListener4B4929CA' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sampleappLBPublicListenerECSGroup525A567D", + "logicalId": "FargateServiceLBPublicListener4B4929CA", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 522, + "startLine": 554, "startColumn": 4, - "endLine": 522, + "endLine": 554, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -32351,19 +32883,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sampleappTaskDefTaskRoleB530CAC0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'FargateServiceLBPublicListenerECSGroupBE57E081' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sampleappTaskDefTaskRoleB530CAC0", + "logicalId": "FargateServiceLBPublicListenerECSGroupBE57E081", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 536, + "startLine": 575, "startColumn": 4, - "endLine": 536, + "endLine": 575, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -32371,19 +32903,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sampleappTaskDef6BF75736' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'FargateServiceTaskDefTaskRole8CDCF85E' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sampleappTaskDef6BF75736", + "logicalId": "FargateServiceTaskDefTaskRole8CDCF85E", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 556, + "startLine": 595, "startColumn": 4, - "endLine": 556, + "endLine": 595, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -32391,59 +32923,59 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sampleappTaskDefwebLogGroup34BE8C79' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Resource 'FargateServiceTaskDef940E3A80' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sampleappTaskDefwebLogGroup34BE8C79", + "logicalId": "FargateServiceTaskDef940E3A80", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 606, - "startColumn": 3, - "endLine": 606, - "endColumn": 39, + "startLine": 615, + "startColumn": 4, + "endLine": 615, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sampleappTaskDefExecutionRoleAD6F4C40' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'FargateServiceTaskDefwebLogGroup71FAF541' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sampleappTaskDefExecutionRoleAD6F4C40", + "logicalId": "FargateServiceTaskDefwebLogGroup71FAF541", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Logs::LogGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 616, - "startColumn": 4, - "endLine": 616, - "endColumn": 15, + "startLine": 665, + "startColumn": 3, + "endLine": 665, + "endColumn": 44, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sampleappServiceE7504FDB' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Resource 'FargateServiceTaskDefExecutionRole9194820E' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sampleappServiceE7504FDB", + "logicalId": "FargateServiceTaskDefExecutionRole9194820E", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 668, + "startLine": 675, "startColumn": 4, - "endLine": 668, + "endLine": 675, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -32451,19 +32983,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sampleappServiceSecurityGroup0ABF0D21' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'FargateServiceECC8084D' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sampleappServiceSecurityGroup0ABF0D21", + "logicalId": "FargateServiceECC8084D", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 729, + "startLine": 727, "startColumn": 4, - "endLine": 729, + "endLine": 727, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -32471,35 +33003,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sampleappServiceTaskCountTargetE827DC30' of type 'AWS::ApplicationAutoScaling::ScalableTarget' supports Tags but none are configured", + "message": "Resource 'FargateServiceSecurityGroup262B61DD' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sampleappServiceTaskCountTargetE827DC30", + "logicalId": "FargateServiceSecurityGroup262B61DD", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalableTarget" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 751, + "startLine": 788, "startColumn": 4, - "endLine": 751, + "endLine": 788, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/ecs-fargate-service-with-logging--Willkommen.template.json": { - "filePath": "cdk/ecs-fargate-service-with-logging--Willkommen.template.json", + "cdk/ecs-fargate-service-with-auto-scaling--aws-fargate-application-autoscaling.template.json": { + "filePath": "cdk/ecs-fargate-service-with-auto-scaling--aws-fargate-application-autoscaling.template.json", "status": "OK", "metadata": { - "resourcesScanned": 32, + "resourcesScanned": 37, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 58, + "warnings": 1, + "informational": 74, "debug": 0 }, "suppressed": 0, @@ -32507,13 +33039,33 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'sampleappLBPublicListenerECSGroup525A567D' dependency already enforced by a 'Ref' at 'Properties.LoadBalancers.0.TargetGroupArn'", + "source": "CFN_LINT", + "entity": { + "logicalId": "sampleappServiceE7504FDB", + "entityType": "Resource", + "resourceType": "AWS::ECS::Service" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 718, + "startColumn": 4, + "endLine": 718, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcF9F0CA6F", + "logicalId": "Vpc8378EB38", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, @@ -32535,7 +33087,7 @@ "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcF9F0CA6F", + "logicalId": "Vpc8378EB38", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, @@ -32557,7 +33109,7 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1SubnetF6608456", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -32579,7 +33131,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1SubnetF6608456", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -32601,7 +33153,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1SubnetF6608456", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -32615,7 +33167,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -32624,7 +33176,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1RouteTableC46AB2F4", + "logicalId": "VpcPublicSubnet1RouteTable6C95E38E", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, @@ -32639,7 +33191,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -32648,7 +33200,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", + "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -32663,7 +33215,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'", + "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'", "extra": { "replacement_strategy": "delete_then_create" } @@ -32675,7 +33227,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", + "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -32690,7 +33242,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'", + "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'", "extra": { "replacement_strategy": "delete_then_create" } @@ -32702,7 +33254,7 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", + "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -32725,7 +33277,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", + "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -32740,7 +33292,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'" + "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'" } }, { @@ -32749,7 +33301,7 @@ "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", + "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, @@ -32763,7 +33315,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt MyVpcPublicSubnet1EIP096967CB.AllocationId" + "resolutionSource": "GetAtt VpcPublicSubnet1EIPD7E02669.AllocationId" } }, { @@ -32772,7 +33324,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", + "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, @@ -32786,7 +33338,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'" + "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'" } }, { @@ -32795,7 +33347,7 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -32817,7 +33369,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -32839,7 +33391,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -32853,7 +33405,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -32862,7 +33414,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2RouteTable1DF17386", + "logicalId": "VpcPublicSubnet2RouteTable94F7E489", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, @@ -32877,7 +33429,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -32886,7 +33438,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", + "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -32901,7 +33453,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'", + "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'", "extra": { "replacement_strategy": "delete_then_create" } @@ -32913,7 +33465,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", + "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -32928,7 +33480,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'", + "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'", "extra": { "replacement_strategy": "delete_then_create" } @@ -32940,7 +33492,7 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", + "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -32963,7 +33515,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", + "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -32978,7 +33530,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'" + "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'" } }, { @@ -32987,7 +33539,7 @@ "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", + "logicalId": "VpcPublicSubnet2NATGateway9182C01D", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, @@ -33001,7 +33553,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt MyVpcPublicSubnet2EIP8CCBA239.AllocationId" + "resolutionSource": "GetAtt VpcPublicSubnet2EIP3C605A87.AllocationId" } }, { @@ -33010,7 +33562,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", + "logicalId": "VpcPublicSubnet2NATGateway9182C01D", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, @@ -33024,7 +33576,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'" + "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'" } }, { @@ -33033,7 +33585,7 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -33055,7 +33607,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -33077,7 +33629,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -33091,7 +33643,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -33100,7 +33652,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1RouteTable8819E6E2", + "logicalId": "VpcPrivateSubnet1RouteTableB2C5B500", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, @@ -33115,7 +33667,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -33124,7 +33676,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", + "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -33139,7 +33691,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'", + "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'", "extra": { "replacement_strategy": "delete_then_create" } @@ -33151,7 +33703,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", + "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -33166,7 +33718,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet1Subnet5057CF7E'", + "resolutionSource": "Ref to 'VpcPrivateSubnet1Subnet536B997A'", "extra": { "replacement_strategy": "delete_then_create" } @@ -33178,7 +33730,7 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", + "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -33201,7 +33753,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", + "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -33216,7 +33768,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'" + "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'" } }, { @@ -33225,7 +33777,7 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -33247,7 +33799,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -33269,7 +33821,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -33283,7 +33835,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -33292,7 +33844,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2RouteTableCEDCEECE", + "logicalId": "VpcPrivateSubnet2RouteTableA678073B", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, @@ -33307,7 +33859,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -33316,7 +33868,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", + "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -33331,7 +33883,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'", + "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'", "extra": { "replacement_strategy": "delete_then_create" } @@ -33343,7 +33895,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", + "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -33358,7 +33910,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet2Subnet0040C983'", + "resolutionSource": "Ref to 'VpcPrivateSubnet2Subnet3788AAA1'", "extra": { "replacement_strategy": "delete_then_create" } @@ -33370,7 +33922,7 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", + "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -33393,7 +33945,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", + "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -33408,7 +33960,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'" + "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'" } }, { @@ -33417,7 +33969,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcVPCGW488ACE0D", + "logicalId": "VpcVPCGWBF912B6E", "entityType": "Resource", "resourceType": "AWS::EC2::VPCGatewayAttachment" }, @@ -33432,27 +33984,186 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'", + "resolutionSource": "Ref to 'Vpc8378EB38'", "extra": { "replacement_strategy": "delete_then_create" } } }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "sampleappLBBDE1D276", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + }, + "propertyPath": "Properties.Scheme", + "category": "Best Practice", + "startLine": 478, + "startColumn": 5, + "endLine": 478, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "sampleappLBBDE1D276", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + }, + "propertyPath": "Properties.Type", + "category": "Best Practice", + "startLine": 487, + "startColumn": 5, + "endLine": 487, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "sampleappLBPublicListenerC4DF6480", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + }, + "propertyPath": "Properties.LoadBalancerArn", + "category": "Best Practice", + "startLine": 510, + "startColumn": 5, + "endLine": 510, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'sampleappLBBDE1D276'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "sampleappLBPublicListenerECSGroup525A567D", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + }, + "propertyPath": "Properties.Port", + "category": "Best Practice", + "startLine": 523, + "startColumn": 5, + "endLine": 523, + "endColumn": 10, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "sampleappLBPublicListenerECSGroup525A567D", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + }, + "propertyPath": "Properties.Protocol", + "category": "Best Practice", + "startLine": 524, + "startColumn": 5, + "endLine": 524, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "sampleappLBPublicListenerECSGroup525A567D", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + }, + "propertyPath": "Properties.TargetType", + "category": "Best Practice", + "startLine": 525, + "startColumn": 5, + "endLine": 525, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "sampleappLBPublicListenerECSGroup525A567D", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 526, + "startColumn": 5, + "endLine": 526, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } + }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", + "logicalId": "sampleappTaskDef6BF75736", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 492, + "startLine": 557, "startColumn": 5, - "endLine": 492, + "endLine": 557, "endColumn": 26, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -33467,15 +34178,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", + "logicalId": "sampleappTaskDef6BF75736", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 511, + "startLine": 582, "startColumn": 5, - "endLine": 511, + "endLine": 582, "endColumn": 9, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -33490,22 +34201,22 @@ "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", + "logicalId": "sampleappTaskDef6BF75736", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ExecutionRoleArn", "category": "Best Practice", - "startLine": 512, + "startLine": 583, "startColumn": 5, - "endLine": 512, + "endLine": 583, "endColumn": 22, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt MyTaskDefinitionExecutionRole3D88C23D.Arn" + "resolutionSource": "GetAtt sampleappTaskDefExecutionRoleAD6F4C40.Arn" } }, { @@ -33514,15 +34225,15 @@ "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", + "logicalId": "sampleappTaskDef6BF75736", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 518, + "startLine": 589, "startColumn": 5, - "endLine": 518, + "endLine": 589, "endColumn": 12, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -33537,15 +34248,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", + "logicalId": "sampleappTaskDef6BF75736", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 519, + "startLine": 590, "startColumn": 5, - "endLine": 519, + "endLine": 590, "endColumn": 12, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -33560,15 +34271,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", + "logicalId": "sampleappTaskDef6BF75736", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 520, + "startLine": 591, "startColumn": 5, - "endLine": 520, + "endLine": 591, "endColumn": 17, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -33583,15 +34294,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", + "logicalId": "sampleappTaskDef6BF75736", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 521, + "startLine": 592, "startColumn": 5, - "endLine": 521, + "endLine": 592, "endColumn": 29, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -33606,22 +34317,22 @@ "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", + "logicalId": "sampleappTaskDef6BF75736", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 524, + "startLine": 595, "startColumn": 5, - "endLine": 524, + "endLine": 595, "endColumn": 17, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt MyTaskDefinitionTaskRole93FBB305.Arn" + "resolutionSource": "GetAtt sampleappTaskDefTaskRoleB530CAC0.Arn" } }, { @@ -33630,21 +34341,21 @@ "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceAC2B3B85", + "logicalId": "sampleappServiceE7504FDB", "entityType": "Resource", "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 598, + "startLine": 669, "startColumn": 5, - "endLine": 598, + "endLine": 669, "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Ec2ClusterEE43E89D'" + "resolutionSource": "Ref to 'fargateserviceautoscalingD107CF93'" } }, { @@ -33653,15 +34364,15 @@ "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceAC2B3B85", + "logicalId": "sampleappServiceE7504FDB", "entityType": "Resource", "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 611, + "startLine": 683, "startColumn": 5, - "endLine": 611, + "endLine": 683, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -33675,15 +34386,15 @@ "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceSecurityGroup0A0E79CB", + "logicalId": "sampleappServiceSecurityGroup0ABF0D21", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 647, + "startLine": 730, "startColumn": 5, - "endLine": 647, + "endLine": 730, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -33697,402 +34408,296 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceSecurityGroup0A0E79CB", + "logicalId": "sampleappServiceSecurityGroup0ABF0D21", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 655, + "startLine": 738, "startColumn": 5, - "endLine": 655, + "endLine": 738, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Ec2ClusterEE43E89D' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterEE43E89D", + "logicalId": "sampleappServiceTaskCountTargetE827DC30", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::ApplicationAutoScaling::ScalableTarget" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 463, - "startColumn": 3, - "endLine": 463, - "endColumn": 22, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 754, + "startColumn": 5, + "endLine": 754, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:service/{ref:fargateserviceautoscalingD107CF93}/{ref:sampleappServiceE7504FDB})" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyTaskDefinitionTaskRole93FBB305' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'ScalableDimension' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionTaskRole93FBB305", + "logicalId": "sampleappServiceTaskCountTargetE827DC30", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApplicationAutoScaling::ScalableTarget" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ScalableDimension", "category": "Best Practice", - "startLine": 471, - "startColumn": 4, - "endLine": 471, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 788, + "startColumn": 5, + "endLine": 788, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyTaskDefinitionF5B350B4' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'ServiceNamespace' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", + "logicalId": "sampleappServiceTaskCountTargetE827DC30", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::ApplicationAutoScaling::ScalableTarget" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ServiceNamespace", "category": "Best Practice", - "startLine": 491, - "startColumn": 4, - "endLine": 491, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 789, + "startColumn": 5, + "endLine": 789, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyTaskDefinitionAppContainerLogGroupA24DD1B6' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionAppContainerLogGroupA24DD1B6", + "logicalId": "sampleappServiceTaskCountTargetCpuScalingF4452F80", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.PolicyName", "category": "Best Practice", - "startLine": 535, - "startColumn": 3, - "endLine": 535, - "endColumn": 48, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 801, + "startColumn": 5, + "endLine": 801, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyTaskDefinitionExecutionRole3D88C23D' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'ScalingTargetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionExecutionRole3D88C23D", + "logicalId": "sampleappServiceTaskCountTargetCpuScalingF4452F80", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ScalingTargetId", "category": "Best Practice", - "startLine": 545, - "startColumn": 4, - "endLine": 545, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 803, + "startColumn": 5, + "endLine": 803, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'sampleappServiceTaskCountTargetE827DC30'" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FargateServiceAC2B3B85' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Resource 'fargateserviceautoscalingD107CF93' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceAC2B3B85", + "logicalId": "fargateserviceautoscalingD107CF93", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::ECS::Cluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 597, - "startColumn": 4, - "endLine": 597, - "endColumn": 15, + "startLine": 463, + "startColumn": 3, + "endLine": 463, + "endColumn": 37, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FargateServiceSecurityGroup0A0E79CB' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'sampleappLBBDE1D276' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceSecurityGroup0A0E79CB", + "logicalId": "sampleappLBBDE1D276", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 646, + "startLine": 471, "startColumn": 4, - "endLine": 646, + "endLine": 471, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "cdk/eventbridge-lambda--EventBridgeLambdaStack.template.json": { - "filePath": "cdk/eventbridge-lambda--EventBridgeLambdaStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 8, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 11, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Singleton8C7B99F3", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 105, - "startColumn": 5, - "endLine": 105, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.9", - "lifecycle": "deprecated" - } - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'SingletonServiceRoleDDD815CD' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Singleton8C7B99F3", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 108, - "startColumn": 4, - "endLine": 108, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TopicTokenSubscription178F3F75E", - "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" - }, - "propertyPath": "Properties.Endpoint", - "category": "Best Practice", - "startLine": 15, - "startColumn": 5, - "endLine": 15, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'email' (type String)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TopicTokenSubscription178F3F75E", - "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" - }, - "propertyPath": "Properties.Protocol", - "category": "Best Practice", - "startLine": 18, - "startColumn": 5, - "endLine": 18, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'sampleappLBPublicListenerC4DF6480' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TopicTokenSubscription178F3F75E", + "logicalId": "sampleappLBPublicListenerC4DF6480", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "Properties.TopicArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 19, - "startColumn": 5, - "endLine": 19, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TopicBFC7AF6E'" - } + "startLine": 501, + "startColumn": 4, + "endLine": 501, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Resource 'sampleappLBPublicListenerECSGroup525A567D' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RuleAllowEventRuleEventBridgeLambdaStackSingleton0D05990EAAD8CFB9", + "logicalId": "sampleappLBPublicListenerECSGroup525A567D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 140, - "startColumn": 5, - "endLine": 140, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 522, + "startColumn": 4, + "endLine": 522, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'sampleappTaskDefTaskRoleB530CAC0' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RuleAllowEventRuleEventBridgeLambdaStackSingleton0D05990EAAD8CFB9", + "logicalId": "sampleappTaskDefTaskRoleB530CAC0", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 141, - "startColumn": 5, - "endLine": 141, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt Singleton8C7B99F3.Arn" - } + "startLine": 536, + "startColumn": 4, + "endLine": 536, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Resource 'sampleappTaskDef6BF75736' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RuleAllowEventRuleEventBridgeLambdaStackSingleton0D05990EAAD8CFB9", + "logicalId": "sampleappTaskDef6BF75736", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 147, - "startColumn": 5, - "endLine": 147, + "startLine": 556, + "startColumn": 4, + "endLine": 556, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'sampleappTaskDefwebLogGroup34BE8C79' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RuleAllowEventRuleEventBridgeLambdaStackSingleton0D05990EAAD8CFB9", + "logicalId": "sampleappTaskDefwebLogGroup34BE8C79", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 148, - "startColumn": 5, - "endLine": 148, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt Rule4C995B7F.Arn" - } + "startLine": 606, + "startColumn": 3, + "endLine": 606, + "endColumn": 39, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TopicBFC7AF6E' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'sampleappTaskDefExecutionRoleAD6F4C40' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TopicBFC7AF6E", + "logicalId": "sampleappTaskDefExecutionRoleAD6F4C40", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 616, "startColumn": 4, - "endLine": 5, + "endLine": 616, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -34100,19 +34705,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SingletonServiceRoleDDD815CD' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'sampleappServiceE7504FDB' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SingletonServiceRoleDDD815CD", + "logicalId": "sampleappServiceE7504FDB", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 29, + "startLine": 668, "startColumn": 4, - "endLine": 29, + "endLine": 668, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -34120,19 +34725,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Singleton8C7B99F3' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'sampleappServiceSecurityGroup0ABF0D21' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Singleton8C7B99F3", + "logicalId": "sampleappServiceSecurityGroup0ABF0D21", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 87, + "startLine": 729, "startColumn": 4, - "endLine": 87, + "endLine": 729, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -34140,35 +34745,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Rule4C995B7F' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Resource 'sampleappServiceTaskCountTargetE827DC30' of type 'AWS::ApplicationAutoScaling::ScalableTarget' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Rule4C995B7F", + "logicalId": "sampleappServiceTaskCountTargetE827DC30", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::ApplicationAutoScaling::ScalableTarget" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 118, + "startLine": 751, "startColumn": 4, - "endLine": 118, + "endLine": 751, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/http-proxy-apigateway--HttpProxy.template.json": { - "filePath": "cdk/http-proxy-apigateway--HttpProxy.template.json", + "cdk/ecs-fargate-service-with-logging--Willkommen.template.json": { + "filePath": "cdk/ecs-fargate-service-with-logging--Willkommen.template.json", "status": "OK", "metadata": { - "resourcesScanned": 9, + "resourcesScanned": 32, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 15, + "informational": 58, "debug": 0 }, "suppressed": 0, @@ -34179,68 +34784,63 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProxyAPIDeployment0905F2A51149e52ed55821cdb6db0214e7f00a2c", + "logicalId": "MyVpcF9F0CA6F", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 76, + "startLine": 6, "startColumn": 5, - "endLine": 76, + "endLine": 6, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ProxyAPI32755B5A'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProxyAPIDeploymentStageprodBE6BE99F", + "logicalId": "MyVpcF9F0CA6F", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 96, + "startLine": 9, "startColumn": 5, - "endLine": 96, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 9, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ProxyAPI32755B5A'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProxyAPIDeploymentStageprodBE6BE99F", + "logicalId": "MyVpcPublicSubnet1SubnetF6608456", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 99, + "startLine": 24, "startColumn": 5, - "endLine": 99, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 24, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -34250,381 +34850,381 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProxyAPIaws4558A94F", + "logicalId": "MyVpcPublicSubnet1SubnetF6608456", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 111, + "startLine": 32, "startColumn": 5, - "endLine": 111, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 32, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ProxyAPI32755B5A.RootResourceId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProxyAPIaws4558A94F", + "logicalId": "MyVpcPublicSubnet1SubnetF6608456", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 117, + "startLine": 48, "startColumn": 5, - "endLine": 117, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 48, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProxyAPIaws4558A94F", + "logicalId": "MyVpcPublicSubnet1RouteTableC46AB2F4", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 118, + "startLine": 65, "startColumn": 5, - "endLine": 118, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 65, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ProxyAPI32755B5A'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProxyProxyResourceGETawsB89410CC", + "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 129, + "startLine": 76, "startColumn": 5, - "endLine": 129, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 76, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ProxyAPIaws4558A94F'" + "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProxyProxyResourceGETawsB89410CC", + "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 132, + "startLine": 79, "startColumn": 5, - "endLine": 132, + "endLine": 79, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProxyProxyResourceGETawsB89410CC", + "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 133, + "startLine": 90, "startColumn": 5, - "endLine": 133, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 90, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ProxyAPI32755B5A'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProxyProxyResourceGETawsGET6AEDAC86", + "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 145, + "startLine": 94, "startColumn": 5, - "endLine": 145, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 94, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProxyProxyResourceGETawsGET6AEDAC86", + "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 157, + "startLine": 123, "startColumn": 5, - "endLine": 157, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 123, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ProxyProxyResourceGETawsB89410CC'" + "resolutionSource": "GetAtt MyVpcPublicSubnet1EIP096967CB.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProxyProxyResourceGETawsGET6AEDAC86", + "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 160, + "startLine": 129, "startColumn": 5, - "endLine": 160, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 129, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ProxyAPI32755B5A'" + "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ProxyAPI32755B5A' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProxyAPI32755B5A", + "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 150, + "startColumn": 5, + "endLine": 150, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ProxyAPICloudWatchRoleB8A087D1' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProxyAPICloudWatchRoleB8A087D1", + "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 19, - "startColumn": 4, - "endLine": 19, + "startLine": 158, + "startColumn": 5, + "endLine": 158, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ProxyAPIDeploymentStageprodBE6BE99F' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProxyAPIDeploymentStageprodBE6BE99F", + "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 92, - "startColumn": 4, - "endLine": 92, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/imagebuilder--ImagebuilderStack.template.json": { - "filePath": "cdk/imagebuilder--ImagebuilderStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 11, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 31, - "debug": 0 + "startLine": 174, + "startColumn": 5, + "endLine": 174, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Data' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GitComponenet", + "logicalId": "MyVpcPublicSubnet2RouteTable1DF17386", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Data", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 6, + "startLine": 191, "startColumn": 5, - "endLine": 6, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", + "endLine": 191, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GitComponenet", + "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 7, + "startLine": 202, "startColumn": 5, - "endLine": 7, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", + "endLine": 202, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Platform' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GitComponenet", + "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Platform", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 8, + "startLine": 205, "startColumn": 5, - "endLine": 8, + "endLine": 205, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Version' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GitComponenet", + "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Version", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 9, + "startLine": 216, "startColumn": 5, - "endLine": 9, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", + "endLine": 216, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -34634,89 +35234,89 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Data' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NodejsComponenet", + "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Data", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 18, + "startLine": 220, "startColumn": 5, - "endLine": 18, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", + "endLine": 220, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NodejsComponenet", + "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 19, + "startLine": 249, "startColumn": 5, - "endLine": 19, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", + "endLine": 249, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt MyVpcPublicSubnet2EIP8CCBA239.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Platform' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NodejsComponenet", + "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Platform", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 20, + "startLine": 255, "startColumn": 5, - "endLine": 20, + "endLine": 255, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Version' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NodejsComponenet", + "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Version", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 21, + "startLine": 276, "startColumn": 5, - "endLine": 21, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", + "endLine": 276, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -34726,20 +35326,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Data' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DockerComponenet", + "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Data", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 30, + "startLine": 284, "startColumn": 5, - "endLine": 30, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", + "endLine": 284, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -34749,112 +35348,121 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DockerComponenet", + "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 31, + "startLine": 300, "startColumn": 5, - "endLine": 31, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", + "endLine": 300, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Platform' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DockerComponenet", + "logicalId": "MyVpcPrivateSubnet1RouteTable8819E6E2", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Platform", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 32, + "startLine": 317, "startColumn": 5, - "endLine": 32, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", + "endLine": 317, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Version' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DockerComponenet", + "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Version", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 33, + "startLine": 328, "startColumn": 5, - "endLine": 33, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", + "endLine": 328, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Components' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AmazonLinux2023withGitAndNodeRecipe", + "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::ContainerRecipe" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Components", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 50, + "startLine": 331, "startColumn": 5, - "endLine": 50, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", + "endLine": 331, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet1Subnet5057CF7E'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerType' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AmazonLinux2023withGitAndNodeRecipe", + "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::ContainerRecipe" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.ContainerType", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 76, + "startLine": 342, "startColumn": 5, - "endLine": 76, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", + "endLine": 342, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -34864,43 +35472,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DockerfileTemplateData' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AmazonLinux2023withGitAndNodeRecipe", + "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::ContainerRecipe" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.DockerfileTemplateData", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 77, + "startLine": 346, "startColumn": 5, - "endLine": 77, - "endColumn": 28, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", + "endLine": 346, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AmazonLinux2023withGitAndNodeRecipe", + "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::ContainerRecipe" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 78, + "startLine": 357, "startColumn": 5, - "endLine": 78, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", + "endLine": 357, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -34910,20 +35518,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentImage' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AmazonLinux2023withGitAndNodeRecipe", + "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::ContainerRecipe" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ParentImage", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 79, + "startLine": 365, "startColumn": 5, - "endLine": 79, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", + "endLine": 365, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -34933,89 +35540,121 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TargetRepository' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AmazonLinux2023withGitAndNodeRecipe", + "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::ContainerRecipe" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.TargetRepository", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 91, + "startLine": 381, "startColumn": 5, - "endLine": 91, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", + "endLine": 381, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Version' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AmazonLinux2023withGitAndNodeRecipe", + "logicalId": "MyVpcPrivateSubnet2RouteTableCEDCEECE", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::ContainerRecipe" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Version", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 97, + "startLine": 398, "startColumn": 5, - "endLine": 97, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", + "endLine": 398, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ImageBuilderInfraConfig", + "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::InfrastructureConfiguration" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 188, + "startLine": 409, "startColumn": 5, - "endLine": 188, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", + "endLine": 409, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ImageBuilderDistConfig", + "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::DistributionConfiguration" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 212, + "startLine": 412, "startColumn": 5, - "endLine": 212, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", + "endLine": 412, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet2Subnet0040C983'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" + }, + "propertyPath": "Properties.DestinationCidrBlock", + "category": "Best Practice", + "startLine": 423, + "startColumn": 5, + "endLine": 423, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -35025,20 +35664,71 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AmazonLinux2023WithGitPipeline", + "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::ImagePipeline" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 239, + "startLine": 427, "startColumn": 5, - "endLine": 239, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", + "endLine": 427, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyVpcVPCGW488ACE0D", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 455, + "startColumn": 5, + "endLine": 455, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyTaskDefinitionF5B350B4", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 492, + "startColumn": 5, + "endLine": 492, + "endColumn": 26, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -35046,260 +35736,294 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'GitComponenet' of type 'AWS::ImageBuilder::Component' supports Tags but none are configured", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GitComponenet", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 511, + "startColumn": 5, + "endLine": 511, + "endColumn": 9, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'NodejsComponenet' of type 'AWS::ImageBuilder::Component' supports Tags but none are configured", + "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NodejsComponenet", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ExecutionRoleArn", "category": "Best Practice", - "startLine": 17, - "startColumn": 4, - "endLine": 17, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 512, + "startColumn": 5, + "endLine": 512, + "endColumn": 22, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt MyTaskDefinitionExecutionRole3D88C23D.Arn" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DockerComponenet' of type 'AWS::ImageBuilder::Component' supports Tags but none are configured", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DockerComponenet", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 29, - "startColumn": 4, - "endLine": 29, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 518, + "startColumn": 5, + "endLine": 518, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'EcrRepoForImageBuilderCodeCatalystBF634BA6' of type 'AWS::ECR::Repository' supports Tags but none are configured", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcrRepoForImageBuilderCodeCatalystBF634BA6", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", - "resourceType": "AWS::ECR::Repository" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 39, - "startColumn": 3, - "endLine": 39, - "endColumn": 46, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 519, + "startColumn": 5, + "endLine": 519, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'AmazonLinux2023withGitAndNodeRecipe' of type 'AWS::ImageBuilder::ContainerRecipe' supports Tags but none are configured", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AmazonLinux2023withGitAndNodeRecipe", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::ContainerRecipe" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 49, - "startColumn": 4, - "endLine": 49, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 520, + "startColumn": 5, + "endLine": 520, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'EC2InstanceProfileForImageBuilderA043DE9F' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EC2InstanceProfileForImageBuilderA043DE9F", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 105, - "startColumn": 4, - "endLine": 105, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 521, + "startColumn": 5, + "endLine": 521, + "endColumn": 29, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ImageBuilderInfraConfig' of type 'AWS::ImageBuilder::InfrastructureConfiguration' supports Tags but none are configured", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ImageBuilderInfraConfig", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::InfrastructureConfiguration" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 184, - "startColumn": 4, - "endLine": 184, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 524, + "startColumn": 5, + "endLine": 524, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt MyTaskDefinitionTaskRole93FBB305.Arn" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ImageBuilderDistConfig' of type 'AWS::ImageBuilder::DistributionConfiguration' supports Tags but none are configured", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ImageBuilderDistConfig", + "logicalId": "FargateServiceAC2B3B85", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::DistributionConfiguration" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 196, - "startColumn": 4, - "endLine": 196, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 598, + "startColumn": 5, + "endLine": 598, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Ec2ClusterEE43E89D'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'AmazonLinux2023WithGitPipeline' of type 'AWS::ImageBuilder::ImagePipeline' supports Tags but none are configured", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AmazonLinux2023WithGitPipeline", + "logicalId": "FargateServiceAC2B3B85", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::ImagePipeline" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 220, - "startColumn": 4, - "endLine": 220, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/inspector2--Inspector2EnableDelegatedAdminAccountStack.template.json": { - "filePath": "cdk/inspector2--Inspector2EnableDelegatedAdminAccountStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 12, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 5, - "debug": 0 + "startLine": 611, + "startColumn": 5, + "endLine": 611, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W3005", - "severity": "WARN", - "message": "'Inspector2EnableDelegatedAdminAccountResourceInspector2EnableResourceInspectorRole00253606' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AWS679f53fac002430cb0da5b7982bd22872D164C4C", + "logicalId": "FargateServiceSecurityGroup0A0E79CB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 230, - "startColumn": 4, - "endLine": 230, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 647, + "startColumn": 5, + "endLine": 647, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "logicalId": "FargateServiceSecurityGroup0A0E79CB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 346, - "startColumn": 4, - "endLine": 346, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 655, + "startColumn": 5, + "endLine": 655, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Ec2ClusterEE43E89D' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Ec2ClusterEE43E89D", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 463, + "startColumn": 3, + "endLine": 463, + "endColumn": 22, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Inspector2EnableDelegatedAdminAccountResourceInspector2EnableDelegatedAdminResourceRoleC8FD65F6' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'MyTaskDefinitionTaskRole93FBB305' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Inspector2EnableDelegatedAdminAccountResourceInspector2EnableDelegatedAdminResourceRoleC8FD65F6", + "logicalId": "MyTaskDefinitionTaskRole93FBB305", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, + "startLine": 471, "startColumn": 4, - "endLine": 6, + "endLine": 471, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -35307,19 +36031,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Inspector2EnableDelegatedAdminAccountResourceInspector2EnableResourceInspectorRole00253606' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'MyTaskDefinitionF5B350B4' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Inspector2EnableDelegatedAdminAccountResourceInspector2EnableResourceInspectorRole00253606", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 52, + "startLine": 491, "startColumn": 4, - "endLine": 52, + "endLine": 491, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -35327,19 +36051,39 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'AWS679f53fac002430cb0da5b7982bd22872D164C4C' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'MyTaskDefinitionAppContainerLogGroupA24DD1B6' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AWS679f53fac002430cb0da5b7982bd22872D164C4C", + "logicalId": "MyTaskDefinitionAppContainerLogGroupA24DD1B6", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Logs::LogGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 212, + "startLine": 535, + "startColumn": 3, + "endLine": 535, + "endColumn": 48, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyTaskDefinitionExecutionRole3D88C23D' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "MyTaskDefinitionExecutionRole3D88C23D", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 545, "startColumn": 4, - "endLine": 212, + "endLine": 545, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -35347,19 +36091,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'FargateServiceAC2B3B85' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + "logicalId": "FargateServiceAC2B3B85", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 268, + "startLine": 597, "startColumn": 4, - "endLine": 268, + "endLine": 597, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -35367,114 +36111,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'FargateServiceSecurityGroup0A0E79CB' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "logicalId": "FargateServiceSecurityGroup0A0E79CB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 329, + "startLine": 646, "startColumn": 4, - "endLine": 329, + "endLine": 646, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/inspector2--Inspector2EnableStack.template.json": { - "filePath": "cdk/inspector2--Inspector2EnableStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 2, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'EnableInspector2ResourceInspectorRole75753456' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "AWS679f53fac002430cb0da5b7982bd22872D164C4C", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 89, - "startColumn": 4, - "endLine": 89, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'EnableInspector2ResourceInspectorRole75753456' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "EnableInspector2ResourceInspectorRole75753456", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 6, - "startColumn": 4, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'AWS679f53fac002430cb0da5b7982bd22872D164C4C' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "AWS679f53fac002430cb0da5b7982bd22872D164C4C", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 71, - "startColumn": 4, - "endLine": 71, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/inspector2--Inspector2MonitoringStack.template.json": { - "filePath": "cdk/inspector2--Inspector2MonitoringStack.template.json", + "cdk/eventbridge-lambda--EventBridgeLambdaStack.template.json": { + "filePath": "cdk/eventbridge-lambda--EventBridgeLambdaStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 14, + "resourcesScanned": 8, "counts": { "fatal": 0, "errors": 0, - "warnings": 5, - "informational": 16, + "warnings": 2, + "informational": 11, "debug": 0 }, "suppressed": 0, @@ -35485,105 +36150,42 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Inspector2InitialScanHandler460C9991", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 164, - "startColumn": 5, - "endLine": 164, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" - } - }, - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "Inspector2FindingHandler1F85FFBC", + "logicalId": "Singleton8C7B99F3", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 344, + "startLine": 105, "startColumn": 5, - "endLine": 344, + "endLine": 105, "endColumn": 13, "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", + "actualValue": "python3.9", "lifecycle": "deprecated" } }, { "ruleId": "W3005", "severity": "WARN", - "message": "'Inspector2InitialScanHandlerServiceRoleA1739B7A' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Inspector2InitialScanHandler460C9991", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 167, - "startColumn": 4, - "endLine": 167, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 283, - "startColumn": 4, - "endLine": 283, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'Inspector2FindingHandlerServiceRoleCEDAFBC1' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'SingletonServiceRoleDDD815CD' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "Inspector2FindingHandler1F85FFBC", + "logicalId": "Singleton8C7B99F3", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 347, + "startLine": 108, "startColumn": 4, - "endLine": 347, + "endLine": 108, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -35591,64 +36193,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Inspector2MonitoringinitialScanRuleAllowEventRuleInspector2MonitoringStackInspector2InitialScanHandler1F2D84B66EB326AF", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 40, - "startColumn": 5, - "endLine": 40, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Inspector2MonitoringinitialScanRuleAllowEventRuleInspector2MonitoringStackInspector2InitialScanHandler1F2D84B66EB326AF", + "logicalId": "TopicTokenSubscription178F3F75E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Endpoint", "category": "Best Practice", - "startLine": 41, + "startLine": 15, "startColumn": 5, - "endLine": 41, - "endColumn": 18, + "endLine": 15, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt Inspector2InitialScanHandler460C9991.Arn" + "resolutionSource": "parameter 'email' (type String)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Inspector2MonitoringinitialScanRuleAllowEventRuleInspector2MonitoringStackInspector2InitialScanHandler1F2D84B66EB326AF", + "logicalId": "TopicTokenSubscription178F3F75E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 47, + "startLine": 18, "startColumn": 5, - "endLine": 47, - "endColumn": 15, + "endLine": 18, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -35658,24 +36240,25 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Inspector2MonitoringinitialScanRuleAllowEventRuleInspector2MonitoringStackInspector2InitialScanHandler1F2D84B66EB326AF", + "logicalId": "TopicTokenSubscription178F3F75E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.TopicArn", "category": "Best Practice", - "startLine": 48, + "startLine": 19, "startColumn": 5, - "endLine": 48, - "endColumn": 15, + "endLine": 19, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt Inspector2MonitoringinitialScanRule902E013C.Arn" + "resolutionSource": "Ref to 'TopicBFC7AF6E'" } }, { @@ -35684,15 +36267,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Inspector2MonitoringfindingScanRuleAllowEventRuleInspector2MonitoringStackInspector2FindingHandler16831F85366B3530", + "logicalId": "RuleAllowEventRuleEventBridgeLambdaStackSingleton0D05990EAAD8CFB9", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 95, + "startLine": 140, "startColumn": 5, - "endLine": 95, + "endLine": 140, "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -35706,21 +36289,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Inspector2MonitoringfindingScanRuleAllowEventRuleInspector2MonitoringStackInspector2FindingHandler16831F85366B3530", + "logicalId": "RuleAllowEventRuleEventBridgeLambdaStackSingleton0D05990EAAD8CFB9", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 96, + "startLine": 141, "startColumn": 5, - "endLine": 96, + "endLine": 141, "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt Inspector2FindingHandler1F85FFBC.Arn" + "resolutionSource": "GetAtt Singleton8C7B99F3.Arn" } }, { @@ -35729,15 +36312,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Inspector2MonitoringfindingScanRuleAllowEventRuleInspector2MonitoringStackInspector2FindingHandler16831F85366B3530", + "logicalId": "RuleAllowEventRuleEventBridgeLambdaStackSingleton0D05990EAAD8CFB9", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 102, + "startLine": 147, "startColumn": 5, - "endLine": 102, + "endLine": 147, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -35751,99 +36334,39 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Inspector2MonitoringfindingScanRuleAllowEventRuleInspector2MonitoringStackInspector2FindingHandler16831F85366B3530", + "logicalId": "RuleAllowEventRuleEventBridgeLambdaStackSingleton0D05990EAAD8CFB9", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 103, + "startLine": 148, "startColumn": 5, - "endLine": 103, + "endLine": 148, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt Inspector2MonitoringfindingScanRuleC84833CE.Arn" + "resolutionSource": "GetAtt Rule4C995B7F.Arn" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Inspector2MonitoringinitialScanRule902E013C' of type 'AWS::Events::Rule' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Inspector2MonitoringinitialScanRule902E013C", - "entityType": "Resource", - "resourceType": "AWS::Events::Rule" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 6, - "startColumn": 4, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Inspector2MonitoringfindingScanRuleC84833CE' of type 'AWS::Events::Rule' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Inspector2MonitoringfindingScanRuleC84833CE", - "entityType": "Resource", - "resourceType": "AWS::Events::Rule" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 61, - "startColumn": 4, - "endLine": 61, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Inspector2InitialScanHandlerServiceRoleA1739B7A' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Inspector2InitialScanHandlerServiceRoleA1739B7A", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 116, - "startColumn": 4, - "endLine": 116, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Inspector2InitialScanHandler460C9991' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'TopicBFC7AF6E' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Inspector2InitialScanHandler460C9991", + "logicalId": "TopicBFC7AF6E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 150, + "startLine": 5, "startColumn": 4, - "endLine": 150, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -35851,19 +36374,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'SingletonServiceRoleDDD815CD' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + "logicalId": "SingletonServiceRoleDDD815CD", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 205, + "startLine": 29, "startColumn": 4, - "endLine": 205, + "endLine": 29, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -35871,39 +36394,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'Singleton8C7B99F3' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "logicalId": "Singleton8C7B99F3", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 266, - "startColumn": 4, - "endLine": 266, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Inspector2FindingHandlerServiceRoleCEDAFBC1' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Inspector2FindingHandlerServiceRoleCEDAFBC1", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 296, + "startLine": 87, "startColumn": 4, - "endLine": 296, + "endLine": 87, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -35911,35 +36414,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Inspector2FindingHandler1F85FFBC' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'Rule4C995B7F' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Inspector2FindingHandler1F85FFBC", + "logicalId": "Rule4C995B7F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Events::Rule" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 330, + "startLine": 118, "startColumn": 4, - "endLine": 330, + "endLine": 118, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/lambda-cloudwatch-dashboard--LambdaCloudwatchDashboardStack.template.json": { - "filePath": "cdk/lambda-cloudwatch-dashboard--LambdaCloudwatchDashboardStack.template.json", + "cdk/http-proxy-apigateway--HttpProxy.template.json": { + "filePath": "cdk/http-proxy-apigateway--HttpProxy.template.json", "status": "OK", "metadata": { - "resourcesScanned": 8, + "resourcesScanned": 9, "counts": { "fatal": 0, - "errors": 1, - "warnings": 2, - "informational": 6, + "errors": 0, + "warnings": 0, + "informational": 15, "debug": 0 }, "suppressed": 0, @@ -35948,352 +36451,298 @@ }, "diagnostics": [ { - "ruleId": "E2531", - "severity": "ERROR", - "message": "Runtime 'python3.7' was deprecated on '2023-12-04'. Creation was disabled on '2024-01-09', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SampleLambdaB2FF4FA1", + "logicalId": "ProxyAPIDeployment0905F2A51149e52ed55821cdb6db0214e7f00a2c", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 54, + "propertyPath": "Properties.RestApiId", + "category": "Best Practice", + "startLine": 76, "startColumn": 5, - "endLine": 54, - "endColumn": 13, - "ruleDescription": "Check if Lambda Function Runtimes are blocked for create", + "endLine": 76, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.7", - "lifecycle": "create-blocked" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ProxyAPI32755B5A'" } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'SampleLambdaServiceRoleB1A8618F' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SampleLambdaB2FF4FA1", + "logicalId": "ProxyAPIDeploymentStageprodBE6BE99F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 57, - "startColumn": 4, - "endLine": 57, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 96, + "startColumn": 5, + "endLine": 96, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ProxyAPI32755B5A'" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "logicalId": "ProxyAPIDeploymentStageprodBE6BE99F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 236, - "startColumn": 4, - "endLine": 236, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 99, + "startColumn": 5, + "endLine": 99, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DashboardName' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleLambdaDashboard39118496", + "logicalId": "ProxyAPIaws4558A94F", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Dashboard" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.DashboardName", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 150, + "startLine": 111, "startColumn": 5, - "endLine": 150, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch", + "endLine": 111, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt ProxyAPI32755B5A.RootResourceId" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SampleLambdaServiceRoleB1A8618F' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleLambdaServiceRoleB1A8618F", + "logicalId": "ProxyAPIaws4558A94F", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SampleLambdaB2FF4FA1' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SampleLambdaB2FF4FA1", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 39, - "startColumn": 4, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 117, + "startColumn": 5, + "endLine": 117, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SampleLambdaDashboard39118496' of type 'AWS::CloudWatch::Dashboard' supports Tags but none are configured", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleLambdaDashboard39118496", + "logicalId": "ProxyAPIaws4558A94F", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Dashboard" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 94, - "startColumn": 4, - "endLine": 94, + "startLine": 118, + "startColumn": 5, + "endLine": 118, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ProxyAPI32755B5A'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + "logicalId": "ProxyProxyResourceGETawsB89410CC", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 158, - "startColumn": 4, - "endLine": 158, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 129, + "startColumn": 5, + "endLine": 129, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ProxyAPIaws4558A94F'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "logicalId": "ProxyProxyResourceGETawsB89410CC", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 219, - "startColumn": 4, - "endLine": 219, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/lambda-cron--LambdaCronExample.template.json": { - "filePath": "cdk/lambda-cron--LambdaCronExample.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 7, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Singleton8C7B99F3", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 50, + "startLine": 132, "startColumn": 5, - "endLine": 50, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 132, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.9", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'SingletonServiceRoleDDD815CD' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Singleton8C7B99F3", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 53, - "startColumn": 4, - "endLine": 53, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", + "logicalId": "ProxyProxyResourceGETawsB89410CC", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 84, + "startLine": 133, "startColumn": 5, - "endLine": 84, - "endColumn": 12, + "endLine": 133, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ProxyAPI32755B5A'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", + "logicalId": "ProxyProxyResourceGETawsGET6AEDAC86", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 85, + "startLine": 145, "startColumn": 5, - "endLine": 85, - "endColumn": 18, + "endLine": 145, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt Singleton8C7B99F3.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", + "logicalId": "ProxyProxyResourceGETawsGET6AEDAC86", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 91, + "startLine": 157, "startColumn": 5, - "endLine": 91, - "endColumn": 15, + "endLine": 157, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ProxyProxyResourceGETawsB89410CC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", + "logicalId": "ProxyProxyResourceGETawsGET6AEDAC86", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 92, + "startLine": 160, "startColumn": 5, - "endLine": 92, + "endLine": 160, "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt Rule4C995B7F.Arn" + "resolutionSource": "Ref to 'ProxyAPI32755B5A'" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SingletonServiceRoleDDD815CD' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'ProxyAPI32755B5A' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SingletonServiceRoleDDD815CD", + "logicalId": "ProxyAPI32755B5A", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::RestApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -36308,19 +36757,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Singleton8C7B99F3' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'ProxyAPICloudWatchRoleB8A087D1' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Singleton8C7B99F3", + "logicalId": "ProxyAPICloudWatchRoleB8A087D1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 39, + "startLine": 19, "startColumn": 4, - "endLine": 39, + "endLine": 19, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -36328,35 +36777,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Rule4C995B7F' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Resource 'ProxyAPIDeploymentStageprodBE6BE99F' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Rule4C995B7F", + "logicalId": "ProxyAPIDeploymentStageprodBE6BE99F", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 62, + "startLine": 92, "startColumn": 4, - "endLine": 62, + "endLine": 92, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/lambda-layer--LambdaLayerStack.template.json": { - "filePath": "cdk/lambda-layer--LambdaLayerStack.template.json", + "cdk/imagebuilder--ImagebuilderStack.template.json": { + "filePath": "cdk/imagebuilder--ImagebuilderStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 4, + "resourcesScanned": 11, "counts": { "fatal": 0, "errors": 0, - "warnings": 1, - "informational": 5, + "warnings": 0, + "informational": 31, "debug": 0 }, "suppressed": 0, @@ -36364,43 +36813,23 @@ "severityLevel": "DEBUG" }, "diagnostics": [ - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LambdaFunctionServiceRoleC555A460' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "LambdaFunctionBF21E41F", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 83, - "startColumn": 4, - "endLine": 83, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CompatibleRuntimes' is create-only; updating it will cause resource replacement", + "message": "Property 'Data' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HelperLayer49ADCD6B", + "logicalId": "GitComponenet", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::ImageBuilder::Component" }, - "propertyPath": "Properties.CompatibleRuntimes", + "propertyPath": "Properties.Data", "category": "Best Practice", "startLine": 6, "startColumn": 5, "endLine": 6, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -36410,20 +36839,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Content' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HelperLayer49ADCD6B", + "logicalId": "GitComponenet", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::ImageBuilder::Component" }, - "propertyPath": "Properties.Content", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 9, + "startLine": 7, "startColumn": 5, - "endLine": 9, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "endLine": 7, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -36433,20 +36862,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "message": "Property 'Platform' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HelperLayer49ADCD6B", + "logicalId": "GitComponenet", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::ImageBuilder::Component" }, - "propertyPath": "Properties.Description", + "propertyPath": "Properties.Platform", "category": "Best Practice", - "startLine": 15, + "startLine": 8, "startColumn": 5, - "endLine": 15, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "endLine": 8, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -36454,99 +36883,91 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LambdaFunctionServiceRoleC555A460' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Version' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionServiceRoleC555A460", + "logicalId": "GitComponenet", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ImageBuilder::Component" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Version", "category": "Best Practice", - "startLine": 28, - "startColumn": 4, - "endLine": 28, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LambdaFunctionBF21E41F' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'Data' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionBF21E41F", + "logicalId": "NodejsComponenet", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ImageBuilder::Component" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Data", "category": "Best Practice", - "startLine": 62, - "startColumn": 4, - "endLine": 62, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/lambda-manage-s3-event-notification--AStack.template.json": { - "filePath": "cdk/lambda-manage-s3-event-notification--AStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 + "startLine": 18, + "startColumn": 5, + "endLine": 18, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I3013", + "ruleId": "I9001", "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", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SampleQueue49AAAEFF", + "logicalId": "NodejsComponenet", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ImageBuilder::Component" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 23, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "startLine": 19, + "startColumn": 5, + "endLine": 19, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", + "message": "Property 'Platform' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleBucketNotification", + "logicalId": "NodejsComponenet", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::CustomResource" + "resourceType": "AWS::ImageBuilder::Component" }, - "propertyPath": "Properties.ServiceToken", + "propertyPath": "Properties.Platform", "category": "Best Practice", - "startLine": 69, + "startLine": 20, "startColumn": 5, - "endLine": 69, - "endColumn": 18, + "endLine": 20, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -36554,60 +36975,45 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SampleQueue49AAAEFF' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Property 'Version' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleQueue49AAAEFF", + "logicalId": "NodejsComponenet", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ImageBuilder::Component" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Version", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 23, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/lambda-manage-s3-event-notification--BStack.template.json": { - "filePath": "cdk/lambda-manage-s3-event-notification--BStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 + "startLine": 21, + "startColumn": 5, + "endLine": 21, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", + "message": "Property 'Data' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleBucketNotification", + "logicalId": "DockerComponenet", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::CustomResource" + "resourceType": "AWS::ImageBuilder::Component" }, - "propertyPath": "Properties.ServiceToken", + "propertyPath": "Properties.Data", "category": "Best Practice", - "startLine": 61, + "startLine": 30, "startColumn": 5, - "endLine": 61, - "endColumn": 18, + "endLine": 30, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -36615,103 +37021,45 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SampleTopic5FE9B5DC' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleTopic5FE9B5DC", + "logicalId": "DockerComponenet", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ImageBuilder::Component" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 23, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/lambda-manage-s3-event-notification--SharedStack.template.json": { - "filePath": "cdk/lambda-manage-s3-event-notification--SharedStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 4, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "S3EventNotificationsLambda20F17D80", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 96, + "startLine": 31, "startColumn": 5, - "endLine": 96, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 31, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'S3EventNotificationsLambdaServiceRoleD45D5063' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "S3EventNotificationsLambda20F17D80", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 99, - "startColumn": 4, - "endLine": 99, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'Platform' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "S3EventNotificationsLambda20F17D80", + "logicalId": "DockerComponenet", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ImageBuilder::Component" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Platform", "category": "Best Practice", - "startLine": 87, + "startLine": 32, "startColumn": 5, - "endLine": 87, - "endColumn": 18, + "endLine": 32, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -36719,192 +37067,91 @@ } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SampleBucket7F6F8160' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SampleBucket7F6F8160", - "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": 24, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'S3EventNotificationsLambdaServiceRoleD45D5063' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "S3EventNotificationsLambdaServiceRoleD45D5063", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 14, - "startColumn": 4, - "endLine": 14, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'S3EventNotificationsLambda20F17D80' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'Version' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "S3EventNotificationsLambda20F17D80", + "logicalId": "DockerComponenet", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ImageBuilder::Component" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Version", "category": "Best Practice", - "startLine": 80, - "startColumn": 4, - "endLine": 80, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/my-widget-service--MyWidgetServiceStack.template.json": { - "filePath": "cdk/my-widget-service--MyWidgetServiceStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 23, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 56, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "WidgetsWidgetHandler1BC9DB34", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 124, + "startLine": 33, "startColumn": 5, - "endLine": 124, + "endLine": 33, "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs20.x", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'WidgetsWidgetHandlerServiceRole8C2B589C' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "WidgetsWidgetHandler1BC9DB34", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 126, - "startColumn": 4, - "endLine": 126, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Components' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiDeployment406A9BD66039252bdc49ee37076fc3c8f3a2eed8", + "logicalId": "AmazonLinux2023withGitAndNodeRecipe", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::ImageBuilder::ContainerRecipe" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Components", "category": "Best Practice", - "startLine": 206, + "startLine": 50, "startColumn": 5, - "endLine": 206, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 50, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Widgetswidgetsapi72353315'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiDeploymentStageprod0D8CD1B7", + "logicalId": "AmazonLinux2023withGitAndNodeRecipe", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::ImageBuilder::ContainerRecipe" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.ContainerType", "category": "Best Practice", - "startLine": 228, + "startLine": 76, "startColumn": 5, - "endLine": 228, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 76, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Widgetswidgetsapi72353315'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'DockerfileTemplateData' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiDeploymentStageprod0D8CD1B7", + "logicalId": "AmazonLinux2023withGitAndNodeRecipe", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::ImageBuilder::ContainerRecipe" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.DockerfileTemplateData", "category": "Best Practice", - "startLine": 231, + "startLine": 77, "startColumn": 5, - "endLine": 231, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 77, + "endColumn": 28, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -36914,19 +37161,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETFA317FE0", + "logicalId": "AmazonLinux2023withGitAndNodeRecipe", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ImageBuilder::ContainerRecipe" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 243, + "startLine": 78, "startColumn": 5, - "endLine": 243, - "endColumn": 12, + "endLine": 78, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -36936,42 +37184,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentImage' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETFA317FE0", + "logicalId": "AmazonLinux2023withGitAndNodeRecipe", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ImageBuilder::ContainerRecipe" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.ParentImage", "category": "Best Practice", - "startLine": 244, + "startLine": 79, "startColumn": 5, - "endLine": 244, - "endColumn": 18, + "endLine": 79, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'TargetRepository' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETFA317FE0", + "logicalId": "AmazonLinux2023withGitAndNodeRecipe", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ImageBuilder::ContainerRecipe" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.TargetRepository", "category": "Best Practice", - "startLine": 250, + "startLine": 91, "startColumn": 5, - "endLine": 250, - "endColumn": 15, + "endLine": 91, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -36981,42 +37230,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'Version' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETFA317FE0", + "logicalId": "AmazonLinux2023withGitAndNodeRecipe", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ImageBuilder::ContainerRecipe" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Version", "category": "Best Practice", - "startLine": 251, + "startLine": 97, "startColumn": 5, - "endLine": 251, - "endColumn": 15, + "endLine": 97, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/{ref:WidgetswidgetsapiDeploymentStageprod0D8CD1B7}/GET/)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETD6697AB5", + "logicalId": "ImageBuilderInfraConfig", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ImageBuilder::InfrastructureConfiguration" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 287, + "startLine": 188, "startColumn": 5, - "endLine": 287, - "endColumn": 12, + "endLine": 188, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -37026,42 +37276,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETD6697AB5", + "logicalId": "ImageBuilderDistConfig", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ImageBuilder::DistributionConfiguration" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 288, + "startLine": 212, "startColumn": 5, - "endLine": 288, - "endColumn": 18, + "endLine": 212, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETD6697AB5", + "logicalId": "AmazonLinux2023WithGitPipeline", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ImageBuilder::ImagePipeline" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 294, + "startLine": 239, "startColumn": 5, - "endLine": 294, - "endColumn": 15, + "endLine": 239, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -37069,185 +37320,563 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'GitComponenet' of type 'AWS::ImageBuilder::Component' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETD6697AB5", + "logicalId": "GitComponenet", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ImageBuilder::Component" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 295, - "startColumn": 5, - "endLine": 295, + "startLine": 5, + "startColumn": 4, + "endLine": 5, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/test-invoke-stage/GET/)" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Resource 'NodejsComponenet' of type 'AWS::ImageBuilder::Component' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiGET2086C825", + "logicalId": "NodejsComponenet", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ImageBuilder::Component" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 328, - "startColumn": 5, - "endLine": 328, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 17, + "startColumn": 4, + "endLine": 17, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Resource 'DockerComponenet' of type 'AWS::ImageBuilder::Component' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiGET2086C825", + "logicalId": "DockerComponenet", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ImageBuilder::Component" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 359, - "startColumn": 5, - "endLine": 359, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt Widgetswidgetsapi72353315.RootResourceId" - } + "startLine": 29, + "startColumn": 4, + "endLine": 29, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'EcrRepoForImageBuilderCodeCatalystBF634BA6' of type 'AWS::ECR::Repository' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiGET2086C825", + "logicalId": "EcrRepoForImageBuilderCodeCatalystBF634BA6", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ECR::Repository" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 365, - "startColumn": 5, - "endLine": 365, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Widgetswidgetsapi72353315'" - } + "startLine": 39, + "startColumn": 3, + "endLine": 39, + "endColumn": 46, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Resource 'AmazonLinux2023withGitAndNodeRecipe' of type 'AWS::ImageBuilder::ContainerRecipe' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidAA19CFA8", + "logicalId": "AmazonLinux2023withGitAndNodeRecipe", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::ImageBuilder::ContainerRecipe" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 376, - "startColumn": 5, - "endLine": 376, + "startLine": 49, + "startColumn": 4, + "endLine": 49, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'EC2InstanceProfileForImageBuilderA043DE9F' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "EC2InstanceProfileForImageBuilderA043DE9F", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 105, + "startColumn": 4, + "endLine": 105, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ImageBuilderInfraConfig' of type 'AWS::ImageBuilder::InfrastructureConfiguration' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ImageBuilderInfraConfig", + "entityType": "Resource", + "resourceType": "AWS::ImageBuilder::InfrastructureConfiguration" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 184, + "startColumn": 4, + "endLine": 184, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ImageBuilderDistConfig' of type 'AWS::ImageBuilder::DistributionConfiguration' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ImageBuilderDistConfig", + "entityType": "Resource", + "resourceType": "AWS::ImageBuilder::DistributionConfiguration" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 196, + "startColumn": 4, + "endLine": 196, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'AmazonLinux2023WithGitPipeline' of type 'AWS::ImageBuilder::ImagePipeline' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "AmazonLinux2023WithGitPipeline", + "entityType": "Resource", + "resourceType": "AWS::ImageBuilder::ImagePipeline" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 220, + "startColumn": 4, + "endLine": 220, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/inspector2--Inspector2EnableDelegatedAdminAccountStack.template.json": { + "filePath": "cdk/inspector2--Inspector2EnableDelegatedAdminAccountStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 12, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 5, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'Inspector2EnableDelegatedAdminAccountResourceInspector2EnableResourceInspectorRole00253606' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "AWS679f53fac002430cb0da5b7982bd22872D164C4C", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 230, + "startColumn": 4, + "endLine": 230, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt Widgetswidgetsapi72353315.RootResourceId" - } + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "W3005", + "severity": "WARN", + "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 346, + "startColumn": 4, + "endLine": 346, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Resource 'Inspector2EnableDelegatedAdminAccountResourceInspector2EnableDelegatedAdminResourceRoleC8FD65F6' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidAA19CFA8", + "logicalId": "Inspector2EnableDelegatedAdminAccountResourceInspector2EnableDelegatedAdminResourceRoleC8FD65F6", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 382, - "startColumn": 5, - "endLine": 382, + "startLine": 6, + "startColumn": 4, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Inspector2EnableDelegatedAdminAccountResourceInspector2EnableResourceInspectorRole00253606' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Inspector2EnableDelegatedAdminAccountResourceInspector2EnableResourceInspectorRole00253606", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 52, + "startColumn": 4, + "endLine": 52, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'AWS679f53fac002430cb0da5b7982bd22872D164C4C' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "AWS679f53fac002430cb0da5b7982bd22872D164C4C", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 212, + "startColumn": 4, + "endLine": 212, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 268, + "startColumn": 4, + "endLine": 268, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 329, + "startColumn": 4, + "endLine": 329, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/inspector2--Inspector2EnableStack.template.json": { + "filePath": "cdk/inspector2--Inspector2EnableStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'EnableInspector2ResourceInspectorRole75753456' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "AWS679f53fac002430cb0da5b7982bd22872D164C4C", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 89, + "startColumn": 4, + "endLine": 89, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'EnableInspector2ResourceInspectorRole75753456' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidAA19CFA8", + "logicalId": "EnableInspector2ResourceInspectorRole75753456", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 383, - "startColumn": 5, - "endLine": 383, + "startLine": 6, + "startColumn": 4, + "endLine": 6, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'AWS679f53fac002430cb0da5b7982bd22872D164C4C' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "AWS679f53fac002430cb0da5b7982bd22872D164C4C", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 71, + "startColumn": 4, + "endLine": 71, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/inspector2--Inspector2MonitoringStack.template.json": { + "filePath": "cdk/inspector2--Inspector2MonitoringStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 14, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 5, + "informational": 16, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Inspector2InitialScanHandler460C9991", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 164, + "startColumn": 5, + "endLine": 164, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Widgetswidgetsapi72353315'" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Inspector2FindingHandler1F85FFBC", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 344, + "startColumn": 5, + "endLine": 344, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'Inspector2InitialScanHandlerServiceRoleA1739B7A' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Inspector2InitialScanHandler460C9991", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 167, + "startColumn": 4, + "endLine": 167, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 283, + "startColumn": 4, + "endLine": 283, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'Inspector2FindingHandlerServiceRoleCEDAFBC1' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Inspector2FindingHandler1F85FFBC", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 347, + "startColumn": 4, + "endLine": 347, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidPOSTApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTid9DF97A7A", + "logicalId": "Inspector2MonitoringinitialScanRuleAllowEventRuleInspector2MonitoringStackInspector2InitialScanHandler1F2D84B66EB326AF", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 394, + "startLine": 40, "startColumn": 5, - "endLine": 394, + "endLine": 40, "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -37261,21 +37890,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidPOSTApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTid9DF97A7A", + "logicalId": "Inspector2MonitoringinitialScanRuleAllowEventRuleInspector2MonitoringStackInspector2InitialScanHandler1F2D84B66EB326AF", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 395, + "startLine": 41, "startColumn": 5, - "endLine": 395, + "endLine": 41, "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" + "resolutionSource": "GetAtt Inspector2InitialScanHandler460C9991.Arn" } }, { @@ -37284,15 +37913,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidPOSTApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTid9DF97A7A", + "logicalId": "Inspector2MonitoringinitialScanRuleAllowEventRuleInspector2MonitoringStackInspector2InitialScanHandler1F2D84B66EB326AF", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 401, + "startLine": 47, "startColumn": 5, - "endLine": 401, + "endLine": 47, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -37306,21 +37935,21 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidPOSTApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTid9DF97A7A", + "logicalId": "Inspector2MonitoringinitialScanRuleAllowEventRuleInspector2MonitoringStackInspector2InitialScanHandler1F2D84B66EB326AF", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 402, + "startLine": 48, "startColumn": 5, - "endLine": 402, + "endLine": 48, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/{ref:WidgetswidgetsapiDeploymentStageprod0D8CD1B7}/POST/*)" + "resolutionSource": "GetAtt Inspector2MonitoringinitialScanRule902E013C.Arn" } }, { @@ -37329,15 +37958,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidPOSTApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTidF1C29E62", + "logicalId": "Inspector2MonitoringfindingScanRuleAllowEventRuleInspector2MonitoringStackInspector2FindingHandler16831F85366B3530", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 438, + "startLine": 95, "startColumn": 5, - "endLine": 438, + "endLine": 95, "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -37351,21 +37980,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidPOSTApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTidF1C29E62", + "logicalId": "Inspector2MonitoringfindingScanRuleAllowEventRuleInspector2MonitoringStackInspector2FindingHandler16831F85366B3530", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 439, + "startLine": 96, "startColumn": 5, - "endLine": 439, + "endLine": 96, "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" + "resolutionSource": "GetAtt Inspector2FindingHandler1F85FFBC.Arn" } }, { @@ -37374,15 +38003,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidPOSTApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTidF1C29E62", + "logicalId": "Inspector2MonitoringfindingScanRuleAllowEventRuleInspector2MonitoringStackInspector2FindingHandler16831F85366B3530", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 445, + "startLine": 102, "startColumn": 5, - "endLine": 445, + "endLine": 102, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -37396,360 +38025,465 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidPOSTApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTidF1C29E62", + "logicalId": "Inspector2MonitoringfindingScanRuleAllowEventRuleInspector2MonitoringStackInspector2FindingHandler16831F85366B3530", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 446, + "startLine": 103, "startColumn": 5, - "endLine": 446, + "endLine": 103, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/test-invoke-stage/POST/*)" + "resolutionSource": "GetAtt Inspector2MonitoringfindingScanRuleC84833CE.Arn" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Resource 'Inspector2MonitoringinitialScanRule902E013C' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidPOST60B9DB49", + "logicalId": "Inspector2MonitoringinitialScanRule902E013C", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 479, - "startColumn": 5, - "endLine": 479, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 6, + "startColumn": 4, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Inspector2MonitoringfindingScanRuleC84833CE' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidPOST60B9DB49", + "logicalId": "Inspector2MonitoringfindingScanRuleC84833CE", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 507, - "startColumn": 5, - "endLine": 507, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'WidgetswidgetsapiidAA19CFA8'" - } + "startLine": 61, + "startColumn": 4, + "endLine": 61, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Inspector2InitialScanHandlerServiceRoleA1739B7A' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidPOST60B9DB49", + "logicalId": "Inspector2InitialScanHandlerServiceRoleA1739B7A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 510, - "startColumn": 5, - "endLine": 510, + "startLine": 116, + "startColumn": 4, + "endLine": 116, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Widgetswidgetsapi72353315'" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Resource 'Inspector2InitialScanHandler460C9991' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid8E6C9CDF", + "logicalId": "Inspector2InitialScanHandler460C9991", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 521, - "startColumn": 5, - "endLine": 521, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 150, + "startColumn": 4, + "endLine": 150, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid8E6C9CDF", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 522, - "startColumn": 5, - "endLine": 522, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" - } + "startLine": 205, + "startColumn": 4, + "endLine": 205, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid8E6C9CDF", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 528, - "startColumn": 5, - "endLine": 528, + "startLine": 266, + "startColumn": 4, + "endLine": 266, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'Inspector2FindingHandlerServiceRoleCEDAFBC1' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid8E6C9CDF", + "logicalId": "Inspector2FindingHandlerServiceRoleCEDAFBC1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 529, - "startColumn": 5, - "endLine": 529, + "startLine": 296, + "startColumn": 4, + "endLine": 296, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/{ref:WidgetswidgetsapiDeploymentStageprod0D8CD1B7}/GET/*)" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Resource 'Inspector2FindingHandler1F85FFBC' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid5E1031AB", + "logicalId": "Inspector2FindingHandler1F85FFBC", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 565, + "startLine": 330, + "startColumn": 4, + "endLine": 330, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/lambda-cloudwatch-dashboard--LambdaCloudwatchDashboardStack.template.json": { + "filePath": "cdk/lambda-cloudwatch-dashboard--LambdaCloudwatchDashboardStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 8, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 2, + "informational": 6, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E2531", + "severity": "ERROR", + "message": "Runtime 'python3.7' was deprecated on '2023-12-04'. Creation was disabled on '2024-01-09', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SampleLambdaB2FF4FA1", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 54, "startColumn": 5, - "endLine": 565, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 54, + "endColumn": 13, + "ruleDescription": "Check if Lambda Function Runtimes are blocked for create", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "python3.7", + "lifecycle": "create-blocked" } }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'SampleLambdaServiceRoleB1A8618F' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SampleLambdaB2FF4FA1", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 57, + "startColumn": 4, + "endLine": 57, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 236, + "startColumn": 4, + "endLine": 236, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'DashboardName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid5E1031AB", + "logicalId": "SampleLambdaDashboard39118496", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::CloudWatch::Dashboard" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.DashboardName", "category": "Best Practice", - "startLine": 566, + "startLine": 150, "startColumn": 5, - "endLine": 566, - "endColumn": 18, + "endLine": 150, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Resource 'SampleLambdaServiceRoleB1A8618F' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid5E1031AB", + "logicalId": "SampleLambdaServiceRoleB1A8618F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 572, - "startColumn": 5, - "endLine": 572, + "startLine": 5, + "startColumn": 4, + "endLine": 5, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'SampleLambdaB2FF4FA1' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid5E1031AB", + "logicalId": "SampleLambdaB2FF4FA1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 573, - "startColumn": 5, - "endLine": 573, + "startLine": 39, + "startColumn": 4, + "endLine": 39, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/test-invoke-stage/GET/*)" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Resource 'SampleLambdaDashboard39118496' of type 'AWS::CloudWatch::Dashboard' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidGETABE1C648", + "logicalId": "SampleLambdaDashboard39118496", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::CloudWatch::Dashboard" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 606, - "startColumn": 5, - "endLine": 606, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 94, + "startColumn": 4, + "endLine": 94, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidGETABE1C648", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 634, - "startColumn": 5, - "endLine": 634, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'WidgetswidgetsapiidAA19CFA8'" - } + "startLine": 158, + "startColumn": 4, + "endLine": 158, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidGETABE1C648", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 637, - "startColumn": 5, - "endLine": 637, + "startLine": 219, + "startColumn": 4, + "endLine": 219, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/lambda-cron--LambdaCronExample.template.json": { + "filePath": "cdk/lambda-cron--LambdaCronExample.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 7, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Singleton8C7B99F3", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 50, + "startColumn": 5, + "endLine": 50, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Widgetswidgetsapi72353315'" + "actualValue": "python3.9", + "lifecycle": "deprecated" } }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'SingletonServiceRoleDDD815CD' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Singleton8C7B99F3", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 53, + "startColumn": 4, + "endLine": 53, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidDELETEApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid2BAC56B6", + "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 648, + "startLine": 84, "startColumn": 5, - "endLine": 648, + "endLine": 84, "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -37763,21 +38497,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidDELETEApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid2BAC56B6", + "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 649, + "startLine": 85, "startColumn": 5, - "endLine": 649, + "endLine": 85, "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" + "resolutionSource": "GetAtt Singleton8C7B99F3.Arn" } }, { @@ -37786,15 +38520,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidDELETEApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid2BAC56B6", + "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 655, + "startLine": 91, "startColumn": 5, - "endLine": 655, + "endLine": 91, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -37808,130 +38542,139 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidDELETEApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid2BAC56B6", + "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 656, + "startLine": 92, "startColumn": 5, - "endLine": 656, + "endLine": 92, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/{ref:WidgetswidgetsapiDeploymentStageprod0D8CD1B7}/DELETE/*)" + "resolutionSource": "GetAtt Rule4C995B7F.Arn" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Resource 'SingletonServiceRoleDDD815CD' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidDELETEApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid4096AFEF", + "logicalId": "SingletonServiceRoleDDD815CD", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 692, - "startColumn": 5, - "endLine": 692, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'Singleton8C7B99F3' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidDELETEApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid4096AFEF", + "logicalId": "Singleton8C7B99F3", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 693, - "startColumn": 5, - "endLine": 693, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" - } + "startLine": 39, + "startColumn": 4, + "endLine": 39, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Resource 'Rule4C995B7F' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidDELETEApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid4096AFEF", + "logicalId": "Rule4C995B7F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 699, - "startColumn": 5, - "endLine": 699, + "startLine": 62, + "startColumn": 4, + "endLine": 62, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/lambda-layer--LambdaLayerStack.template.json": { + "filePath": "cdk/lambda-layer--LambdaLayerStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 5, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'LambdaFunctionServiceRoleC555A460' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "WidgetswidgetsapiidDELETEApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid4096AFEF", + "logicalId": "LambdaFunctionBF21E41F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 700, - "startColumn": 5, - "endLine": 700, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/test-invoke-stage/DELETE/*)" - } + "startLine": 83, + "startColumn": 4, + "endLine": 83, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'CompatibleRuntimes' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidDELETEE81619C6", + "logicalId": "HelperLayer49ADCD6B", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.CompatibleRuntimes", "category": "Best Practice", - "startLine": 733, + "startLine": 6, "startColumn": 5, - "endLine": 733, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 6, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -37941,183 +38684,242 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'Content' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidDELETEE81619C6", + "logicalId": "HelperLayer49ADCD6B", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.Content", "category": "Best Practice", - "startLine": 761, + "startLine": 9, "startColumn": 5, - "endLine": 761, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 9, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'WidgetswidgetsapiidAA19CFA8'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidDELETEE81619C6", + "logicalId": "HelperLayer49ADCD6B", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 764, + "startLine": 15, "startColumn": 5, - "endLine": 764, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 15, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Widgetswidgetsapi72353315'" + "lifecycle": "create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'WidgetsWidgetStore0ED7FDB7' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'LambdaFunctionServiceRoleC555A460' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetsWidgetStore0ED7FDB7", + "logicalId": "LambdaFunctionServiceRoleC555A460", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 30, + "startLine": 28, + "startColumn": 4, + "endLine": 28, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'WidgetsWidgetHandlerServiceRole8C2B589C' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'LambdaFunctionBF21E41F' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetsWidgetHandlerServiceRole8C2B589C", + "logicalId": "LambdaFunctionBF21E41F", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 13, + "startLine": 62, "startColumn": 4, - "endLine": 13, + "endLine": 62, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "cdk/lambda-manage-s3-event-notification--AStack.template.json": { + "filePath": "cdk/lambda-manage-s3-event-notification--AStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'WidgetsWidgetHandler1BC9DB34' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "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": "WidgetsWidgetHandler1BC9DB34", + "logicalId": "SampleQueue49AAAEFF", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 103, - "startColumn": 4, - "endLine": 103, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 23, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Widgetswidgetsapi72353315' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Widgetswidgetsapi72353315", + "logicalId": "SampleBucketNotification", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::CloudFormation::CustomResource" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ServiceToken", "category": "Best Practice", - "startLine": 139, - "startColumn": 4, - "endLine": 139, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 69, + "startColumn": 5, + "endLine": 69, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'WidgetswidgetsapiCloudWatchRole8C2A5801' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'SampleQueue49AAAEFF' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiCloudWatchRole8C2A5801", + "logicalId": "SampleQueue49AAAEFF", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::SQS::Queue" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 149, - "startColumn": 4, - "endLine": 149, - "endColumn": 15, + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 23, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "cdk/lambda-manage-s3-event-notification--BStack.template.json": { + "filePath": "cdk/lambda-manage-s3-event-notification--BStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SampleBucketNotification", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::CustomResource" + }, + "propertyPath": "Properties.ServiceToken", + "category": "Best Practice", + "startLine": 61, + "startColumn": 5, + "endLine": 61, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'WidgetswidgetsapiDeploymentStageprod0D8CD1B7' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Resource 'SampleTopic5FE9B5DC' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiDeploymentStageprod0D8CD1B7", + "logicalId": "SampleTopic5FE9B5DC", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 224, - "startColumn": 4, - "endLine": 224, - "endColumn": 15, + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 23, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/pat-the-big-fan--TheBigFanStack.template.json": { - "filePath": "cdk/pat-the-big-fan--TheBigFanStack.template.json", + "cdk/lambda-manage-s3-event-notification--SharedStack.template.json": { + "filePath": "cdk/lambda-manage-s3-event-notification--SharedStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 27, + "resourcesScanned": 5, "counts": { "fatal": 0, - "errors": 2, - "warnings": 3, - "informational": 44, + "errors": 0, + "warnings": 2, + "informational": 4, "debug": 0 }, "suppressed": 0, @@ -38126,259 +38928,257 @@ }, "diagnostics": [ { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "SQSCreatedStatusSubscribeLambdaHandler0467DB95", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 277, - "startColumn": 9, - "endLine": 277, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" - } - }, - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "SQSAnyOtherStatusSubscribeLambdaHandler4037E293", + "logicalId": "S3EventNotificationsLambda20F17D80", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 423, - "startColumn": 9, - "endLine": 423, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "startLine": 96, + "startColumn": 5, + "endLine": 96, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AssetParameters18833649a477f0511316387314562906099cb212342be772321cf1075727e8d8ArtifactHash3D36986C' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "AssetParameters18833649a477f0511316387314562906099cb212342be772321cf1075727e8d8ArtifactHash3D36986C", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/AssetParameters18833649a477f0511316387314562906099cb212342be772321cf1075727e8d8ArtifactHash3D36986C", - "category": "Best Practice", - "startLine": 780, - "startColumn": 5, - "endLine": 780, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, { "ruleId": "W3005", "severity": "WARN", - "message": "'SQSCreatedStatusSubscribeLambdaHandlerServiceRole36576A8A' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'S3EventNotificationsLambdaServiceRoleD45D5063' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "SQSCreatedStatusSubscribeLambdaHandler0467DB95", + "logicalId": "S3EventNotificationsLambda20F17D80", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 279, - "startColumn": 7, - "endLine": 279, - "endColumn": 17, + "startLine": 99, + "startColumn": 4, + "endLine": 99, + "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'SQSAnyOtherStatusSubscribeLambdaHandlerServiceRole395E81EB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SQSAnyOtherStatusSubscribeLambdaHandler4037E293", + "logicalId": "S3EventNotificationsLambda20F17D80", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 425, - "startColumn": 7, - "endLine": 425, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 87, + "startColumn": 5, + "endLine": 87, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'SampleBucket7F6F8160' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "BigFanTopicStatusCreatedSubscriberQueue589E974E", + "logicalId": "SampleBucket7F6F8160", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::S3::Bucket" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 53, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 24, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'S3EventNotificationsLambdaServiceRoleD45D5063' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "BigFanTopicStatusCreatedSubscriberQueue589E974E", + "logicalId": "S3EventNotificationsLambdaServiceRoleD45D5063", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::IAM::Role" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 53, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 14, + "startColumn": 4, + "endLine": 14, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'S3EventNotificationsLambda20F17D80' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76", + "logicalId": "S3EventNotificationsLambda20F17D80", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 84, - "startColumn": 5, - "endLine": 84, - "endColumn": 54, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 80, + "startColumn": 4, + "endLine": 80, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "cdk/my-widget-service--MyWidgetServiceStack.template.json": { + "filePath": "cdk/my-widget-service--MyWidgetServiceStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 23, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 56, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "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)", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76", + "logicalId": "WidgetsWidgetHandler1BC9DB34", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::Lambda::Function" }, - "category": "Best Practice", - "startLine": 84, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 124, "startColumn": 5, - "endLine": 84, - "endColumn": 54, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "endLine": 124, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs20.x", + "lifecycle": "deprecated" + } }, { - "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)", + "ruleId": "W3005", + "severity": "WARN", + "message": "'WidgetsWidgetHandlerServiceRole8C2B589C' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "BigFanTopicStatusCreatedSubscriberQueue589E974E", + "logicalId": "WidgetsWidgetHandler1BC9DB34", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 18, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "startLine": 126, + "startColumn": 4, + "endLine": 126, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9001", "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", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76", + "logicalId": "WidgetswidgetsapiDeployment406A9BD66039252bdc49ee37076fc3c8f3a2eed8", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 86, - "startColumn": 7, - "endLine": 86, - "endColumn": 18, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "startLine": 206, + "startColumn": 5, + "endLine": 206, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Widgetswidgetsapi72353315'" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BigFanTopicStatusCreatedSubscriberQueue589E974E", + "logicalId": "WidgetswidgetsapiDeploymentStageprod0D8CD1B7", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.QueueName", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 15, - "startColumn": 9, - "endLine": 15, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "startLine": 228, + "startColumn": 5, + "endLine": 228, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Widgetswidgetsapi72353315'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BigFanTopicStatusCreatedSubscriberQueueTheBigFanStacktheBigFanTopicCC7EBE3B39DDDB95", + "logicalId": "WidgetswidgetsapiDeploymentStageprod0D8CD1B7", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 63, - "startColumn": 9, - "endLine": 63, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "startLine": 231, + "startColumn": 5, + "endLine": 231, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -38388,68 +39188,64 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BigFanTopicStatusCreatedSubscriberQueueTheBigFanStacktheBigFanTopicCC7EBE3B39DDDB95", + "logicalId": "WidgetswidgetsapiGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETFA317FE0", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.TopicArn", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 64, - "startColumn": 9, - "endLine": 64, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "startLine": 243, + "startColumn": 5, + "endLine": 243, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'theBigFanTopicF96567DE'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BigFanTopicStatusCreatedSubscriberQueueTheBigFanStacktheBigFanTopicCC7EBE3B39DDDB95", + "logicalId": "WidgetswidgetsapiGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETFA317FE0", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Endpoint", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 67, - "startColumn": 9, - "endLine": 67, + "startLine": 244, + "startColumn": 5, + "endLine": 244, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt BigFanTopicStatusCreatedSubscriberQueue589E974E.Arn" + "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76", + "logicalId": "WidgetswidgetsapiGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETFA317FE0", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.QueueName", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 87, - "startColumn": 9, - "endLine": 87, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "startLine": 250, + "startColumn": 5, + "endLine": 250, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -38459,189 +39255,185 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueueTheBigFanStacktheBigFanTopicCC7EBE3B9905847D", + "logicalId": "WidgetswidgetsapiGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETFA317FE0", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 135, - "startColumn": 9, - "endLine": 135, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "startLine": 251, + "startColumn": 5, + "endLine": 251, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/{ref:WidgetswidgetsapiDeploymentStageprod0D8CD1B7}/GET/)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueueTheBigFanStacktheBigFanTopicCC7EBE3B9905847D", + "logicalId": "WidgetswidgetsapiGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETD6697AB5", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.TopicArn", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 136, - "startColumn": 9, - "endLine": 136, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "startLine": 287, + "startColumn": 5, + "endLine": 287, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'theBigFanTopicF96567DE'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueueTheBigFanStacktheBigFanTopicCC7EBE3B9905847D", + "logicalId": "WidgetswidgetsapiGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETD6697AB5", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Endpoint", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 139, - "startColumn": 9, - "endLine": 139, + "startLine": 288, + "startColumn": 5, + "endLine": 288, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76.Arn" + "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SQSCreatedStatusSubscribeLambdaHandlerSqsEventSourceTheBigFanStackBigFanTopicStatusCreatedSubscriberQueueF8927E4802E7770C", + "logicalId": "WidgetswidgetsapiGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETD6697AB5", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.EventSourceArn", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 295, - "startColumn": 9, - "endLine": 295, - "endColumn": 24, + "startLine": 294, + "startColumn": 5, + "endLine": 294, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt BigFanTopicStatusCreatedSubscriberQueue589E974E.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SQSAnyOtherStatusSubscribeLambdaHandlerSqsEventSourceTheBigFanStackBigFanTopicAnyOtherStatusSubscriberQueue08FB964013A92B5B", + "logicalId": "WidgetswidgetsapiGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETD6697AB5", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.EventSourceArn", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 441, - "startColumn": 9, - "endLine": 441, - "endColumn": 24, + "startLine": 295, + "startColumn": 5, + "endLine": 295, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76.Arn" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/test-invoke-stage/GET/)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPIDeployment0A3D40CC3de72833f42963bffb25d554063d867d", + "logicalId": "WidgetswidgetsapiGET2086C825", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 515, - "startColumn": 9, - "endLine": 515, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 328, + "startColumn": 5, + "endLine": 328, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'theBigFanAPI6E21715A'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPIDeploymentStageprod1F15C9DC", + "logicalId": "WidgetswidgetsapiGET2086C825", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 533, - "startColumn": 9, - "endLine": 533, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 359, + "startColumn": 5, + "endLine": 359, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'theBigFanAPI6E21715A'" + "resolutionSource": "GetAtt Widgetswidgetsapi72353315.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPIDeploymentStageprod1F15C9DC", + "logicalId": "WidgetswidgetsapiGET2086C825", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 548, - "startColumn": 9, - "endLine": 548, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 365, + "startColumn": 5, + "endLine": 365, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Widgetswidgetsapi72353315'" } }, { @@ -38650,22 +39442,22 @@ "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPISendEventD29495C2", + "logicalId": "WidgetswidgetsapiidAA19CFA8", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Resource" }, "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 557, - "startColumn": 9, - "endLine": 557, - "endColumn": 18, + "startLine": 376, + "startColumn": 5, + "endLine": 376, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt theBigFanAPI6E21715A.RootResourceId" + "resolutionSource": "GetAtt Widgetswidgetsapi72353315.RootResourceId" } }, { @@ -38674,16 +39466,16 @@ "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPISendEventD29495C2", + "logicalId": "WidgetswidgetsapiidAA19CFA8", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Resource" }, "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 563, - "startColumn": 9, - "endLine": 563, - "endColumn": 18, + "startLine": 382, + "startColumn": 5, + "endLine": 382, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -38697,41 +39489,40 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPISendEventD29495C2", + "logicalId": "WidgetswidgetsapiidAA19CFA8", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Resource" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 564, - "startColumn": 9, - "endLine": 564, - "endColumn": 19, + "startLine": 383, + "startColumn": 5, + "endLine": 383, + "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'theBigFanAPI6E21715A'" + "resolutionSource": "Ref to 'Widgetswidgetsapi72353315'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPISendEventPOSTBC493093", + "logicalId": "WidgetswidgetsapiidPOSTApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTid9DF97A7A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 575, - "startColumn": 9, - "endLine": 575, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "startLine": 394, + "startColumn": 5, + "endLine": 394, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -38741,92 +39532,87 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPISendEventPOSTBC493093", + "logicalId": "WidgetswidgetsapiidPOSTApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTid9DF97A7A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 576, - "startColumn": 9, - "endLine": 576, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "startLine": 395, + "startColumn": 5, + "endLine": 395, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'theBigFanAPISendEventD29495C2'" + "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPISendEventPOSTBC493093", + "logicalId": "WidgetswidgetsapiidPOSTApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTid9DF97A7A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 579, - "startColumn": 9, - "endLine": 579, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "startLine": 401, + "startColumn": 5, + "endLine": 401, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'theBigFanAPI6E21715A'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPIResponseModelD06A5A7F", + "logicalId": "WidgetswidgetsapiidPOSTApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTid9DF97A7A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 668, - "startColumn": 9, - "endLine": 668, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 402, + "startColumn": 5, + "endLine": 402, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'theBigFanAPI6E21715A'" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/{ref:WidgetswidgetsapiDeploymentStageprod0D8CD1B7}/POST/*)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPIResponseModelD06A5A7F", + "logicalId": "WidgetswidgetsapiidPOSTApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTidF1C29E62", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ContentType", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 671, - "startColumn": 9, - "endLine": 671, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 438, + "startColumn": 5, + "endLine": 438, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -38836,90 +39622,88 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPIResponseModelD06A5A7F", + "logicalId": "WidgetswidgetsapiidPOSTApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTidF1C29E62", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 672, - "startColumn": 9, - "endLine": 672, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 439, + "startColumn": 5, + "endLine": 439, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPIErrorResponseModel11E9FBC4", + "logicalId": "WidgetswidgetsapiidPOSTApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTidF1C29E62", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 691, - "startColumn": 9, - "endLine": 691, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 445, + "startColumn": 5, + "endLine": 445, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'theBigFanAPI6E21715A'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPIErrorResponseModel11E9FBC4", + "logicalId": "WidgetswidgetsapiidPOSTApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTidF1C29E62", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ContentType", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 694, - "startColumn": 9, - "endLine": 694, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 446, + "startColumn": 5, + "endLine": 446, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/test-invoke-stage/POST/*)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPIErrorResponseModel11E9FBC4", + "logicalId": "WidgetswidgetsapiidPOST60B9DB49", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 695, - "startColumn": 9, - "endLine": 695, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 479, + "startColumn": 5, + "endLine": 479, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -38927,387 +39711,141 @@ } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'theBigFanTopicF96567DE' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "theBigFanTopicF96567DE", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BigFanTopicStatusCreatedSubscriberQueue589E974E' of type 'AWS::SQS::Queue' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BigFanTopicStatusCreatedSubscriberQueue589E974E", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76' of type 'AWS::SQS::Queue' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 86, - "startColumn": 7, - "endLine": 86, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SQSCreatedStatusSubscribeLambdaHandlerServiceRole36576A8A' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SQSCreatedStatusSubscribeLambdaHandlerServiceRole36576A8A", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 162, - "startColumn": 7, - "endLine": 162, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SQSCreatedStatusSubscribeLambdaHandler0467DB95' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SQSCreatedStatusSubscribeLambdaHandler0467DB95", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 231, - "startColumn": 7, - "endLine": 231, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SQSCreatedStatusSubscribeLambdaHandlerSqsEventSourceTheBigFanStackBigFanTopicStatusCreatedSubscriberQueueF8927E4802E7770C' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SQSCreatedStatusSubscribeLambdaHandlerSqsEventSourceTheBigFanStackBigFanTopicStatusCreatedSubscriberQueueF8927E4802E7770C", - "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 291, - "startColumn": 7, - "endLine": 291, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SQSAnyOtherStatusSubscribeLambdaHandlerServiceRole395E81EB' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SQSAnyOtherStatusSubscribeLambdaHandlerServiceRole395E81EB", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 308, - "startColumn": 7, - "endLine": 308, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SQSAnyOtherStatusSubscribeLambdaHandler4037E293' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SQSAnyOtherStatusSubscribeLambdaHandler4037E293", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 377, - "startColumn": 7, - "endLine": 377, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SQSAnyOtherStatusSubscribeLambdaHandlerSqsEventSourceTheBigFanStackBigFanTopicAnyOtherStatusSubscriberQueue08FB964013A92B5B' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SQSAnyOtherStatusSubscribeLambdaHandlerSqsEventSourceTheBigFanStackBigFanTopicAnyOtherStatusSubscriberQueue08FB964013A92B5B", - "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 437, - "startColumn": 7, - "endLine": 437, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'theBigFanAPI6E21715A' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPI6E21715A", + "logicalId": "WidgetswidgetsapiidPOST60B9DB49", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 454, - "startColumn": 7, - "endLine": 454, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 507, + "startColumn": 5, + "endLine": 507, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'WidgetswidgetsapiidAA19CFA8'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'theBigFanAPICloudWatchRoleD603B41E' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPICloudWatchRoleD603B41E", + "logicalId": "WidgetswidgetsapiidPOST60B9DB49", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 463, - "startColumn": 7, - "endLine": 463, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 510, + "startColumn": 5, + "endLine": 510, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Widgetswidgetsapi72353315'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'theBigFanAPIDeploymentStageprod1F15C9DC' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPIDeploymentStageprod1F15C9DC", + "logicalId": "WidgetswidgetsapiidGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid8E6C9CDF", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 532, - "startColumn": 7, - "endLine": 532, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 521, + "startColumn": 5, + "endLine": 521, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DefaultLambdaHanderRoleA44A3BA8' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DefaultLambdaHanderRoleA44A3BA8", + "logicalId": "WidgetswidgetsapiidGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid8E6C9CDF", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 716, - "startColumn": 7, - "endLine": 716, + "startLine": 522, + "startColumn": 5, + "endLine": 522, "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/pat-the-cloudwatch-dashboard--TheCloudwatchDashboardStack.template.json": { - "filePath": "cdk/pat-the-cloudwatch-dashboard--TheCloudwatchDashboardStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 20, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 2, - "informational": 25, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "DynamoLambdaHandlerFB6EB814", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 160, - "startColumn": 9, - "endLine": 160, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" + "lifecycle": "create-only", + "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" } }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AssetParameters2e2fb63cef5de8866986a28a524c8f97b58a2ec13b66aa5753892cafdd7dbe46ArtifactHash18C20B66' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "AssetParameters2e2fb63cef5de8866986a28a524c8f97b58a2ec13b66aa5753892cafdd7dbe46ArtifactHash18C20B66", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/AssetParameters2e2fb63cef5de8866986a28a524c8f97b58a2ec13b66aa5753892cafdd7dbe46ArtifactHash18C20B66", - "category": "Best Practice", - "startLine": 1058, - "startColumn": 5, - "endLine": 1058, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'DynamoLambdaHandlerServiceRole4C867B01' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "DynamoLambdaHandlerFB6EB814", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 162, - "startColumn": 7, - "endLine": 162, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HitsFF5AF8CD", + "logicalId": "WidgetswidgetsapiidGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid8E6C9CDF", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 6, - "startColumn": 9, - "endLine": 6, - "endColumn": 19, + "startLine": 528, + "startColumn": 5, + "endLine": 528, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ProtocolType' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HttpAPI8D545486", + "logicalId": "WidgetswidgetsapiidGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid8E6C9CDF", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Api" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ProtocolType", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 176, - "startColumn": 9, - "endLine": 176, - "endColumn": 22, + "startLine": 529, + "startColumn": 5, + "endLine": 529, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/{ref:WidgetswidgetsapiDeploymentStageprod0D8CD1B7}/GET/*)" } }, { @@ -39316,16 +39854,16 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HttpAPIDefaultRouteTheCloudwatchDashboardStackHttpAPIDefaultRoute851EEAB4Permission3852997E", + "logicalId": "WidgetswidgetsapiidGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid5E1031AB", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 185, - "startColumn": 9, - "endLine": 185, - "endColumn": 16, + "startLine": 565, + "startColumn": 5, + "endLine": 565, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -39338,21 +39876,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HttpAPIDefaultRouteTheCloudwatchDashboardStackHttpAPIDefaultRoute851EEAB4Permission3852997E", + "logicalId": "WidgetswidgetsapiidGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid5E1031AB", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 186, - "startColumn": 9, - "endLine": 186, - "endColumn": 22, + "startLine": 566, + "startColumn": 5, + "endLine": 566, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt DynamoLambdaHandlerFB6EB814.Arn" + "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" } }, { @@ -39361,16 +39899,16 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HttpAPIDefaultRouteTheCloudwatchDashboardStackHttpAPIDefaultRoute851EEAB4Permission3852997E", + "logicalId": "WidgetswidgetsapiidGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid5E1031AB", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 192, - "startColumn": 9, - "endLine": 192, - "endColumn": 19, + "startLine": 572, + "startColumn": 5, + "endLine": 572, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -39383,112 +39921,110 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HttpAPIDefaultRouteTheCloudwatchDashboardStackHttpAPIDefaultRoute851EEAB4Permission3852997E", + "logicalId": "WidgetswidgetsapiidGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid5E1031AB", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 193, - "startColumn": 9, - "endLine": 193, - "endColumn": 19, + "startLine": 573, + "startColumn": 5, + "endLine": 573, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:HttpAPI8D545486}/*/*)" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/test-invoke-stage/GET/*)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HttpAPIDefaultRouteDefaultRouteIntegration9F0AC785", + "logicalId": "WidgetswidgetsapiidGETABE1C648", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Integration" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 225, - "startColumn": 9, - "endLine": 225, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 606, + "startColumn": 5, + "endLine": 606, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'HttpAPI8D545486'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HttpAPIDefaultRouteF9949FE6", + "logicalId": "WidgetswidgetsapiidGETABE1C648", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Route" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 244, - "startColumn": 9, - "endLine": 244, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", + "startLine": 634, + "startColumn": 5, + "endLine": 634, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'HttpAPI8D545486'" + "resolutionSource": "Ref to 'WidgetswidgetsapiidAA19CFA8'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HttpAPIDefaultStage1BC7D78F", + "logicalId": "WidgetswidgetsapiidGETABE1C648", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Stage" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 267, - "startColumn": 9, - "endLine": 267, + "startLine": 637, + "startColumn": 5, + "endLine": 637, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'HttpAPI8D545486'" + "resolutionSource": "Ref to 'Widgetswidgetsapi72353315'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HttpAPIDefaultStage1BC7D78F", + "logicalId": "WidgetswidgetsapiidDELETEApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid2BAC56B6", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 270, - "startColumn": 9, - "endLine": 270, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", + "startLine": 648, + "startColumn": 5, + "endLine": 648, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -39496,317 +40032,366 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'HitsFF5AF8CD' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HitsFF5AF8CD", + "logicalId": "WidgetswidgetsapiidDELETEApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid2BAC56B6", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, + "startLine": 649, + "startColumn": 5, + "endLine": 649, "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DynamoLambdaHandlerServiceRole4C867B01' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambdaHandlerServiceRole4C867B01", + "logicalId": "WidgetswidgetsapiidDELETEApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid2BAC56B6", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 655, + "startColumn": 5, + "endLine": 655, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DynamoLambdaHandlerFB6EB814' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambdaHandlerFB6EB814", + "logicalId": "WidgetswidgetsapiidDELETEApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid2BAC56B6", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 107, - "startColumn": 7, - "endLine": 107, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 656, + "startColumn": 5, + "endLine": 656, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/{ref:WidgetswidgetsapiDeploymentStageprod0D8CD1B7}/DELETE/*)" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'HttpAPI8D545486' of type 'AWS::ApiGatewayV2::Api' supports Tags but none are configured", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HttpAPI8D545486", + "logicalId": "WidgetswidgetsapiidDELETEApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid4096AFEF", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Api" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 174, - "startColumn": 7, - "endLine": 174, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 692, + "startColumn": 5, + "endLine": 692, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'HttpAPIDefaultStage1BC7D78F' of type 'AWS::ApiGatewayV2::Stage' supports Tags but none are configured", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HttpAPIDefaultStage1BC7D78F", + "logicalId": "WidgetswidgetsapiidDELETEApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid4096AFEF", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 266, - "startColumn": 7, - "endLine": 266, + "startLine": 693, + "startColumn": 5, + "endLine": 693, "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'errorTopicE59AB483' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "errorTopicE59AB483", + "logicalId": "WidgetswidgetsapiidDELETEApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid4096AFEF", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 277, + "startLine": 699, "startColumn": 5, - "endLine": 277, - "endColumn": 24, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 699, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'APIGateway4XXErrors1647FE3DB' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "APIGateway4XXErrors1647FE3DB", + "logicalId": "WidgetswidgetsapiidDELETEApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid4096AFEF", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 285, - "startColumn": 7, - "endLine": 285, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 700, + "startColumn": 5, + "endLine": 700, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/test-invoke-stage/DELETE/*)" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'APIGateway5XXErrors0A91D7B4E' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "APIGateway5XXErrors0A91D7B4E", + "logicalId": "WidgetswidgetsapiidDELETEE81619C6", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 354, - "startColumn": 7, - "endLine": 354, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 733, + "startColumn": 5, + "endLine": 733, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'APIp99latencyalarm1s67095ACE' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "APIp99latencyalarm1s67095ACE", + "logicalId": "WidgetswidgetsapiidDELETEE81619C6", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 385, - "startColumn": 7, - "endLine": 385, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 761, + "startColumn": 5, + "endLine": 761, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'WidgetswidgetsapiidAA19CFA8'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "WidgetswidgetsapiidDELETEE81619C6", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" + }, + "propertyPath": "Properties.RestApiId", + "category": "Best Practice", + "startLine": 764, + "startColumn": 5, + "endLine": 764, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Widgetswidgetsapi72353315'" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DynamoLambda2ErrorDE3BEB2F' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Resource 'WidgetsWidgetStore0ED7FDB7' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambda2ErrorDE3BEB2F", + "logicalId": "WidgetsWidgetStore0ED7FDB7", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 416, - "startColumn": 7, - "endLine": 416, - "endColumn": 18, + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 30, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DynamoLambdap99LongDuration1s739ED568' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Resource 'WidgetsWidgetHandlerServiceRole8C2B589C' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambdap99LongDuration1s739ED568", + "logicalId": "WidgetsWidgetHandlerServiceRole8C2B589C", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 481, - "startColumn": 7, - "endLine": 481, - "endColumn": 18, + "startLine": 13, + "startColumn": 4, + "endLine": 13, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DynamoLambda2Throttled090CFA4C' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Resource 'WidgetsWidgetHandler1BC9DB34' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambda2Throttled090CFA4C", + "logicalId": "WidgetsWidgetHandler1BC9DB34", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 511, - "startColumn": 7, - "endLine": 511, - "endColumn": 18, + "startLine": 103, + "startColumn": 4, + "endLine": 103, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DynamoDBTableReadsWritesThrottled13F6F2AE' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Resource 'Widgetswidgetsapi72353315' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DynamoDBTableReadsWritesThrottled13F6F2AE", + "logicalId": "Widgetswidgetsapi72353315", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::ApiGateway::RestApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 576, - "startColumn": 7, - "endLine": 576, - "endColumn": 18, + "startLine": 139, + "startColumn": 4, + "endLine": 139, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DynamoDBErrors0FA6C66C9' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Resource 'WidgetswidgetsapiCloudWatchRole8C2A5801' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DynamoDBErrors0FA6C66C9", + "logicalId": "WidgetswidgetsapiCloudWatchRole8C2A5801", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 641, - "startColumn": 7, - "endLine": 641, - "endColumn": 18, + "startLine": 149, + "startColumn": 4, + "endLine": 149, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CloudWatchDashBoard043C60B6' of type 'AWS::CloudWatch::Dashboard' supports Tags but none are configured", + "message": "Resource 'WidgetswidgetsapiDeploymentStageprod0D8CD1B7' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CloudWatchDashBoard043C60B6", + "logicalId": "WidgetswidgetsapiDeploymentStageprod0D8CD1B7", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Dashboard" + "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 900, - "startColumn": 7, - "endLine": 900, - "endColumn": 18, + "startLine": 224, + "startColumn": 4, + "endLine": 224, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/pat-the-destined-lambda--TheDestinedLambdaStack.template.json": { - "filePath": "cdk/pat-the-destined-lambda--TheDestinedLambdaStack.template.json", + "cdk/pat-the-big-fan--TheBigFanStack.template.json": { + "filePath": "cdk/pat-the-big-fan--TheBigFanStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 28, + "resourcesScanned": 27, "counts": { "fatal": 0, - "errors": 3, - "warnings": 4, - "informational": 49, + "errors": 2, + "warnings": 3, + "informational": 44, "debug": 0 }, "suppressed": 0, @@ -39820,38 +40405,15 @@ "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "destinedLambda8DF776BB", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 127, - "startColumn": 9, - "endLine": 127, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" - } - }, - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "SuccessLambdaHandler0E2CD797", + "logicalId": "SQSCreatedStatusSubscribeLambdaHandler0467DB95", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 289, + "startLine": 277, "startColumn": 9, - "endLine": 289, + "endLine": 277, "endColumn": 17, "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", @@ -39866,15 +40428,15 @@ "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "FailureLambdaHandlerBB58C051", + "logicalId": "SQSAnyOtherStatusSubscribeLambdaHandler4037E293", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 446, + "startLine": 423, "startColumn": 9, - "endLine": 446, + "endLine": 423, "endColumn": 17, "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", @@ -39886,17 +40448,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'AssetParameters46d205b682091147559b63b9f28b2b0fcfd0b5f3e873a3b40a905e1f82d2001aArtifactHashE6B80060' is not referenced anywhere in the template", + "message": "Parameter 'AssetParameters18833649a477f0511316387314562906099cb212342be772321cf1075727e8d8ArtifactHash3D36986C' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "AssetParameters46d205b682091147559b63b9f28b2b0fcfd0b5f3e873a3b40a905e1f82d2001aArtifactHashE6B80060", + "logicalId": "AssetParameters18833649a477f0511316387314562906099cb212342be772321cf1075727e8d8ArtifactHash3D36986C", "entityType": "Parameter" }, - "propertyPath": "Parameters/AssetParameters46d205b682091147559b63b9f28b2b0fcfd0b5f3e873a3b40a905e1f82d2001aArtifactHashE6B80060", + "propertyPath": "Parameters/AssetParameters18833649a477f0511316387314562906099cb212342be772321cf1075727e8d8ArtifactHash3D36986C", "category": "Best Practice", - "startLine": 841, + "startLine": 780, "startColumn": 5, - "endLine": 841, + "endLine": 780, "endColumn": 105, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -39904,19 +40466,19 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'destinedLambdaServiceRole87608B6F' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'SQSCreatedStatusSubscribeLambdaHandlerServiceRole36576A8A' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "destinedLambda8DF776BB", + "logicalId": "SQSCreatedStatusSubscribeLambdaHandler0467DB95", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 129, + "startLine": 279, "startColumn": 7, - "endLine": 129, + "endLine": 279, "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -39924,218 +40486,171 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'SuccessLambdaHandlerServiceRole77BD70C4' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'SQSAnyOtherStatusSubscribeLambdaHandlerServiceRole395E81EB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "SuccessLambdaHandler0E2CD797", + "logicalId": "SQSAnyOtherStatusSubscribeLambdaHandler4037E293", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 292, + "startLine": 425, "startColumn": 7, - "endLine": 292, + "endLine": 425, "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FailureLambdaHandlerServiceRole7E0414CB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "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": "FailureLambdaHandlerBB58C051", + "logicalId": "BigFanTopicStatusCreatedSubscriberQueue589E974E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 449, - "startColumn": 7, - "endLine": 449, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 53, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "DestinedEventBus14820B65", + "logicalId": "BigFanTopicStatusCreatedSubscriberQueue589E974E", "entityType": "Resource", - "resourceType": "AWS::Events::EventBus" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 6, - "startColumn": 9, - "endLine": 6, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-events", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 53, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "destinedLambdaEventInvokeConfig3CA2AF7E", + "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventInvokeConfig" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 142, - "startColumn": 9, - "endLine": 142, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'destinedLambda8DF776BB'" - } + "startLine": 84, + "startColumn": 5, + "endLine": 84, + "endColumn": 54, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Qualifier' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "destinedLambdaEventInvokeConfig3CA2AF7E", + "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventInvokeConfig" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Qualifier", "category": "Best Practice", - "startLine": 145, - "startColumn": 9, - "endLine": 145, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 84, + "startColumn": 5, + "endLine": 84, + "endColumn": 54, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "destinedLambdaAllowInvokeTheDestinedLambdaStacktheDestinedLambdaTopic8CE84AB4D93BC799", + "logicalId": "BigFanTopicStatusCreatedSubscriberQueue589E974E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 173, - "startColumn": 9, - "endLine": 173, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 18, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "destinedLambdaAllowInvokeTheDestinedLambdaStacktheDestinedLambdaTopic8CE84AB4D93BC799", + "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 174, - "startColumn": 9, - "endLine": 174, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt destinedLambda8DF776BB.Arn" - } + "startLine": 86, + "startColumn": 7, + "endLine": 86, + "endColumn": 18, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "destinedLambdaAllowInvokeTheDestinedLambdaStacktheDestinedLambdaTopic8CE84AB4D93BC799", + "logicalId": "BigFanTopicStatusCreatedSubscriberQueue589E974E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.QueueName", "category": "Best Practice", - "startLine": 180, + "startLine": 15, "startColumn": 9, - "endLine": 180, + "endLine": 15, "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "destinedLambdaAllowInvokeTheDestinedLambdaStacktheDestinedLambdaTopic8CE84AB4D93BC799", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 181, - "startColumn": 9, - "endLine": 181, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'theDestinedLambdaTopic8F2C8FB6'" - } - }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "destinedLambdatheDestinedLambdaTopic8E937C7F", + "logicalId": "BigFanTopicStatusCreatedSubscriberQueueTheBigFanStacktheBigFanTopicCC7EBE3B39DDDB95", "entityType": "Resource", "resourceType": "AWS::SNS::Subscription" }, "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 192, + "startLine": 63, "startColumn": 9, - "endLine": 192, + "endLine": 63, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -40150,22 +40665,22 @@ "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "destinedLambdatheDestinedLambdaTopic8E937C7F", + "logicalId": "BigFanTopicStatusCreatedSubscriberQueueTheBigFanStacktheBigFanTopicCC7EBE3B39DDDB95", "entityType": "Resource", "resourceType": "AWS::SNS::Subscription" }, "propertyPath": "Properties.TopicArn", "category": "Best Practice", - "startLine": 193, + "startLine": 64, "startColumn": 9, - "endLine": 193, + "endLine": 64, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'theDestinedLambdaTopic8F2C8FB6'" + "resolutionSource": "Ref to 'theBigFanTopicF96567DE'" } }, { @@ -40174,63 +40689,41 @@ "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "destinedLambdatheDestinedLambdaTopic8E937C7F", + "logicalId": "BigFanTopicStatusCreatedSubscriberQueueTheBigFanStacktheBigFanTopicCC7EBE3B39DDDB95", "entityType": "Resource", "resourceType": "AWS::SNS::Subscription" }, "propertyPath": "Properties.Endpoint", "category": "Best Practice", - "startLine": 196, + "startLine": 67, "startColumn": 9, - "endLine": 196, + "endLine": 67, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt destinedLambda8DF776BB.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'EventBusName' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "successRuleE9E88056", - "entityType": "Resource", - "resourceType": "AWS::Events::Rule" - }, - "propertyPath": "Properties.EventBusName", - "category": "Best Practice", - "startLine": 305, - "startColumn": 9, - "endLine": 305, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'DestinedEventBus14820B65'" + "resolutionSource": "GetAtt BigFanTopicStatusCreatedSubscriberQueue589E974E.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "successRuleAllowEventRuleTheDestinedLambdaStacksuccessRuleDD139E31353F8BE2", + "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.QueueName", "category": "Best Practice", - "startLine": 345, + "startLine": 87, "startColumn": 9, - "endLine": 345, - "endColumn": 16, + "endLine": 87, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -40240,42 +40733,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "successRuleAllowEventRuleTheDestinedLambdaStacksuccessRuleDD139E31353F8BE2", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 346, - "startColumn": 9, - "endLine": 346, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt SuccessLambdaHandler0E2CD797.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "successRuleAllowEventRuleTheDestinedLambdaStacksuccessRuleDD139E31353F8BE2", + "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueueTheBigFanStacktheBigFanTopicCC7EBE3B9905847D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 352, + "startLine": 135, "startColumn": 9, - "endLine": 352, - "endColumn": 19, + "endLine": 135, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -40285,137 +40756,95 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "successRuleAllowEventRuleTheDestinedLambdaStacksuccessRuleDD139E31353F8BE2", + "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueueTheBigFanStacktheBigFanTopicCC7EBE3B9905847D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.TopicArn", "category": "Best Practice", - "startLine": 353, + "startLine": 136, "startColumn": 9, - "endLine": 353, - "endColumn": 19, + "endLine": 136, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt successRuleE9E88056.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'EventBusName' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "failureRule10D0B2E4", - "entityType": "Resource", - "resourceType": "AWS::Events::Rule" - }, - "propertyPath": "Properties.EventBusName", - "category": "Best Practice", - "startLine": 462, - "startColumn": 9, - "endLine": 462, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'DestinedEventBus14820B65'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "failureRuleAllowEventRuleTheDestinedLambdaStackfailureRule39380610D37AD724", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 494, - "startColumn": 9, - "endLine": 494, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" + "resolutionSource": "Ref to 'theBigFanTopicF96567DE'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "failureRuleAllowEventRuleTheDestinedLambdaStackfailureRule39380610D37AD724", + "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueueTheBigFanStacktheBigFanTopicCC7EBE3B9905847D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Endpoint", "category": "Best Practice", - "startLine": 495, + "startLine": 139, "startColumn": 9, - "endLine": 495, - "endColumn": 22, + "endLine": 139, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt FailureLambdaHandlerBB58C051.Arn" + "resolutionSource": "GetAtt BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "failureRuleAllowEventRuleTheDestinedLambdaStackfailureRule39380610D37AD724", + "logicalId": "SQSCreatedStatusSubscribeLambdaHandlerSqsEventSourceTheBigFanStackBigFanTopicStatusCreatedSubscriberQueueF8927E4802E7770C", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.EventSourceArn", "category": "Best Practice", - "startLine": 501, + "startLine": 295, "startColumn": 9, - "endLine": 501, - "endColumn": 19, + "endLine": 295, + "endColumn": 24, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt BigFanTopicStatusCreatedSubscriberQueue589E974E.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "failureRuleAllowEventRuleTheDestinedLambdaStackfailureRule39380610D37AD724", + "logicalId": "SQSAnyOtherStatusSubscribeLambdaHandlerSqsEventSourceTheBigFanStackBigFanTopicAnyOtherStatusSubscriberQueue08FB964013A92B5B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.EventSourceArn", "category": "Best Practice", - "startLine": 502, + "startLine": 441, "startColumn": 9, - "endLine": 502, - "endColumn": 19, + "endLine": 441, + "endColumn": 24, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt failureRule10D0B2E4.Arn" + "resolutionSource": "GetAtt BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76.Arn" } }, { @@ -40424,22 +40853,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPIDeploymentC364859Eae40584f53d9b7bb31907a57bb781ad3", + "logicalId": "theBigFanAPIDeployment0A3D40CC3de72833f42963bffb25d554063d867d", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Deployment" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 576, + "startLine": 515, "startColumn": 9, - "endLine": 576, + "endLine": 515, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'theDestinedLambdaAPIBAB2789B'" + "resolutionSource": "Ref to 'theBigFanAPI6E21715A'" } }, { @@ -40448,22 +40877,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPIDeploymentStageprodD67BDFB2", + "logicalId": "theBigFanAPIDeploymentStageprod1F15C9DC", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 594, + "startLine": 533, "startColumn": 9, - "endLine": 594, + "endLine": 533, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'theDestinedLambdaAPIBAB2789B'" + "resolutionSource": "Ref to 'theBigFanAPI6E21715A'" } }, { @@ -40472,15 +40901,15 @@ "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPIDeploymentStageprodD67BDFB2", + "logicalId": "theBigFanAPIDeploymentStageprod1F15C9DC", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 609, + "startLine": 548, "startColumn": 9, - "endLine": 609, + "endLine": 548, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -40495,22 +40924,22 @@ "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPISendEventC20585CF", + "logicalId": "theBigFanAPISendEventD29495C2", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Resource" }, "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 618, + "startLine": 557, "startColumn": 9, - "endLine": 618, + "endLine": 557, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt theDestinedLambdaAPIBAB2789B.RootResourceId" + "resolutionSource": "GetAtt theBigFanAPI6E21715A.RootResourceId" } }, { @@ -40519,15 +40948,15 @@ "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPISendEventC20585CF", + "logicalId": "theBigFanAPISendEventD29495C2", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Resource" }, "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 624, + "startLine": 563, "startColumn": 9, - "endLine": 624, + "endLine": 563, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -40542,22 +40971,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPISendEventC20585CF", + "logicalId": "theBigFanAPISendEventD29495C2", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Resource" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 625, + "startLine": 564, "startColumn": 9, - "endLine": 625, + "endLine": 564, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'theDestinedLambdaAPIBAB2789B'" + "resolutionSource": "Ref to 'theBigFanAPI6E21715A'" } }, { @@ -40566,15 +40995,15 @@ "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPISendEventGETC3F11CCE", + "logicalId": "theBigFanAPISendEventPOSTBC493093", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 636, + "startLine": 575, "startColumn": 9, - "endLine": 636, + "endLine": 575, "endColumn": 20, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -40589,22 +41018,22 @@ "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPISendEventGETC3F11CCE", + "logicalId": "theBigFanAPISendEventPOSTBC493093", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 637, + "startLine": 576, "startColumn": 9, - "endLine": 637, + "endLine": 576, "endColumn": 20, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'theDestinedLambdaAPISendEventC20585CF'" + "resolutionSource": "Ref to 'theBigFanAPISendEventD29495C2'" } }, { @@ -40613,22 +41042,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPISendEventGETC3F11CCE", + "logicalId": "theBigFanAPISendEventPOSTBC493093", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 640, + "startLine": 579, "startColumn": 9, - "endLine": 640, + "endLine": 579, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'theDestinedLambdaAPIBAB2789B'" + "resolutionSource": "Ref to 'theBigFanAPI6E21715A'" } }, { @@ -40637,22 +41066,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPIResponseModel7D59062C", + "logicalId": "theBigFanAPIResponseModelD06A5A7F", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Model" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 729, + "startLine": 668, "startColumn": 9, - "endLine": 729, + "endLine": 668, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'theDestinedLambdaAPIBAB2789B'" + "resolutionSource": "Ref to 'theBigFanAPI6E21715A'" } }, { @@ -40661,15 +41090,15 @@ "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPIResponseModel7D59062C", + "logicalId": "theBigFanAPIResponseModelD06A5A7F", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Model" }, "propertyPath": "Properties.ContentType", "category": "Best Practice", - "startLine": 732, + "startLine": 671, "startColumn": 9, - "endLine": 732, + "endLine": 671, "endColumn": 21, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -40684,15 +41113,15 @@ "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPIResponseModel7D59062C", + "logicalId": "theBigFanAPIResponseModelD06A5A7F", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Model" }, "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 733, + "startLine": 672, "startColumn": 9, - "endLine": 733, + "endLine": 672, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -40707,22 +41136,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPIErrorResponseModel5F76D2FC", + "logicalId": "theBigFanAPIErrorResponseModel11E9FBC4", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Model" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 752, + "startLine": 691, "startColumn": 9, - "endLine": 752, + "endLine": 691, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'theDestinedLambdaAPIBAB2789B'" + "resolutionSource": "Ref to 'theBigFanAPI6E21715A'" } }, { @@ -40731,15 +41160,15 @@ "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPIErrorResponseModel5F76D2FC", + "logicalId": "theBigFanAPIErrorResponseModel11E9FBC4", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Model" }, "propertyPath": "Properties.ContentType", "category": "Best Practice", - "startLine": 755, + "startLine": 694, "startColumn": 9, - "endLine": 755, + "endLine": 694, "endColumn": 21, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -40754,15 +41183,15 @@ "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPIErrorResponseModel5F76D2FC", + "logicalId": "theBigFanAPIErrorResponseModel11E9FBC4", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Model" }, "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 756, + "startLine": 695, "startColumn": 9, - "endLine": 756, + "endLine": 695, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -40774,12 +41203,12 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DestinedEventBus14820B65' of type 'AWS::Events::EventBus' supports Tags but none are configured", + "message": "Resource 'theBigFanTopicF96567DE' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DestinedEventBus14820B65", + "logicalId": "theBigFanTopicF96567DE", "entityType": "Resource", - "resourceType": "AWS::Events::EventBus" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -40794,12 +41223,12 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'theDestinedLambdaTopic8F2C8FB6' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'BigFanTopicStatusCreatedSubscriberQueue589E974E' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaTopic8F2C8FB6", + "logicalId": "BigFanTopicStatusCreatedSubscriberQueue589E974E", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::SQS::Queue" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -40814,19 +41243,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'destinedLambdaServiceRole87608B6F' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "destinedLambdaServiceRole87608B6F", + "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::SQS::Queue" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 23, + "startLine": 86, "startColumn": 7, - "endLine": 23, + "endLine": 86, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -40834,39 +41263,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'destinedLambda8DF776BB' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'SQSCreatedStatusSubscribeLambdaHandlerServiceRole36576A8A' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "destinedLambda8DF776BB", + "logicalId": "SQSCreatedStatusSubscribeLambdaHandlerServiceRole36576A8A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 81, + "startLine": 162, "startColumn": 7, - "endLine": 81, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SuccessLambdaHandlerServiceRole77BD70C4' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SuccessLambdaHandlerServiceRole77BD70C4", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 209, - "startColumn": 7, - "endLine": 209, + "endLine": 162, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -40874,19 +41283,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SuccessLambdaHandler0E2CD797' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'SQSCreatedStatusSubscribeLambdaHandler0467DB95' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SuccessLambdaHandler0E2CD797", + "logicalId": "SQSCreatedStatusSubscribeLambdaHandler0467DB95", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 243, + "startLine": 231, "startColumn": 7, - "endLine": 243, + "endLine": 231, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -40894,19 +41303,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'successRuleE9E88056' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Resource 'SQSCreatedStatusSubscribeLambdaHandlerSqsEventSourceTheBigFanStackBigFanTopicStatusCreatedSubscriberQueueF8927E4802E7770C' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "successRuleE9E88056", + "logicalId": "SQSCreatedStatusSubscribeLambdaHandlerSqsEventSourceTheBigFanStackBigFanTopicStatusCreatedSubscriberQueueF8927E4802E7770C", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::Lambda::EventSourceMapping" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 303, + "startLine": 291, "startColumn": 7, - "endLine": 303, + "endLine": 291, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -40914,19 +41323,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FailureLambdaHandlerServiceRole7E0414CB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'SQSAnyOtherStatusSubscribeLambdaHandlerServiceRole395E81EB' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FailureLambdaHandlerServiceRole7E0414CB", + "logicalId": "SQSAnyOtherStatusSubscribeLambdaHandlerServiceRole395E81EB", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 366, + "startLine": 308, "startColumn": 7, - "endLine": 366, + "endLine": 308, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -40934,19 +41343,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FailureLambdaHandlerBB58C051' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'SQSAnyOtherStatusSubscribeLambdaHandler4037E293' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FailureLambdaHandlerBB58C051", + "logicalId": "SQSAnyOtherStatusSubscribeLambdaHandler4037E293", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 400, + "startLine": 377, "startColumn": 7, - "endLine": 400, + "endLine": 377, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -40954,19 +41363,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'failureRule10D0B2E4' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Resource 'SQSAnyOtherStatusSubscribeLambdaHandlerSqsEventSourceTheBigFanStackBigFanTopicAnyOtherStatusSubscriberQueue08FB964013A92B5B' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "failureRule10D0B2E4", + "logicalId": "SQSAnyOtherStatusSubscribeLambdaHandlerSqsEventSourceTheBigFanStackBigFanTopicAnyOtherStatusSubscriberQueue08FB964013A92B5B", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::Lambda::EventSourceMapping" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 460, + "startLine": 437, "startColumn": 7, - "endLine": 460, + "endLine": 437, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -40974,19 +41383,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'theDestinedLambdaAPIBAB2789B' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Resource 'theBigFanAPI6E21715A' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPIBAB2789B", + "logicalId": "theBigFanAPI6E21715A", "entityType": "Resource", "resourceType": "AWS::ApiGateway::RestApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 515, + "startLine": 454, "startColumn": 7, - "endLine": 515, + "endLine": 454, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -40994,19 +41403,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'theDestinedLambdaAPICloudWatchRoleCDF408DA' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'theBigFanAPICloudWatchRoleD603B41E' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPICloudWatchRoleCDF408DA", + "logicalId": "theBigFanAPICloudWatchRoleD603B41E", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 524, + "startLine": 463, "startColumn": 7, - "endLine": 524, + "endLine": 463, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -41014,19 +41423,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'theDestinedLambdaAPIDeploymentStageprodD67BDFB2' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Resource 'theBigFanAPIDeploymentStageprod1F15C9DC' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPIDeploymentStageprodD67BDFB2", + "logicalId": "theBigFanAPIDeploymentStageprod1F15C9DC", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 593, + "startLine": 532, "startColumn": 7, - "endLine": 593, + "endLine": 532, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -41034,35 +41443,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ApiGatewaySnsRole904B65D6' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'DefaultLambdaHanderRoleA44A3BA8' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewaySnsRole904B65D6", + "logicalId": "DefaultLambdaHanderRoleA44A3BA8", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 777, + "startLine": 716, "startColumn": 7, - "endLine": 777, + "endLine": 716, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/pat-the-dynamo-streamer--TheDynamoStreamerStack.template.json": { - "filePath": "cdk/pat-the-dynamo-streamer--TheDynamoStreamerStack.template.json", + "cdk/pat-the-cloudwatch-dashboard--TheCloudwatchDashboardStack.template.json": { + "filePath": "cdk/pat-the-cloudwatch-dashboard--TheCloudwatchDashboardStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 17, + "resourcesScanned": 20, "counts": { "fatal": 0, "errors": 1, "warnings": 2, - "informational": 26, + "informational": 25, "debug": 0 }, "suppressed": 0, @@ -41076,15 +41485,15 @@ "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "dynamoStreamSubscriberLambdaHandlerD2AAE139", + "logicalId": "DynamoLambdaHandlerFB6EB814", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 152, + "startLine": 160, "startColumn": 9, - "endLine": 152, + "endLine": 160, "endColumn": 17, "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", @@ -41096,17 +41505,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'AssetParametersdea71d0871b06cc6149d538db9f3627c5e43599da253f86c0ab81528b3ccf675ArtifactHashCA4FFEF8' is not referenced anywhere in the template", + "message": "Parameter 'AssetParameters2e2fb63cef5de8866986a28a524c8f97b58a2ec13b66aa5753892cafdd7dbe46ArtifactHash18C20B66' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "AssetParametersdea71d0871b06cc6149d538db9f3627c5e43599da253f86c0ab81528b3ccf675ArtifactHashCA4FFEF8", + "logicalId": "AssetParameters2e2fb63cef5de8866986a28a524c8f97b58a2ec13b66aa5753892cafdd7dbe46ArtifactHash18C20B66", "entityType": "Parameter" }, - "propertyPath": "Parameters/AssetParametersdea71d0871b06cc6149d538db9f3627c5e43599da253f86c0ab81528b3ccf675ArtifactHashCA4FFEF8", + "propertyPath": "Parameters/AssetParameters2e2fb63cef5de8866986a28a524c8f97b58a2ec13b66aa5753892cafdd7dbe46ArtifactHash18C20B66", "category": "Best Practice", - "startLine": 527, + "startLine": 1058, "startColumn": 5, - "endLine": 527, + "endLine": 1058, "endColumn": 105, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -41114,19 +41523,19 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'dynamoStreamSubscriberLambdaHandlerServiceRole70DB8A47' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'DynamoLambdaHandlerServiceRole4C867B01' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "dynamoStreamSubscriberLambdaHandlerD2AAE139", + "logicalId": "DynamoLambdaHandlerFB6EB814", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 154, + "startLine": 162, "startColumn": 7, - "endLine": 154, + "endLine": 162, "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -41137,7 +41546,7 @@ "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheDynamoStreamer641C5E5B", + "logicalId": "HitsFF5AF8CD", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, @@ -41156,42 +41565,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "dynamoStreamSubscriberLambdaHandlerDynamoDBEventSourceTheDynamoStreamerStackTheDynamoStreamerB472C427C1D10245", - "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" - }, - "propertyPath": "Properties.EventSourceArn", - "category": "Best Practice", - "startLine": 171, - "startColumn": 9, - "endLine": 171, - "endColumn": 24, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt TheDynamoStreamer641C5E5B.StreamArn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'StartingPosition' is create-only; updating it will cause resource replacement", + "message": "Property 'ProtocolType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "dynamoStreamSubscriberLambdaHandlerDynamoDBEventSourceTheDynamoStreamerStackTheDynamoStreamerB472C427C1D10245", + "logicalId": "HttpAPI8D545486", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::ApiGatewayV2::Api" }, - "propertyPath": "Properties.StartingPosition", + "propertyPath": "Properties.ProtocolType", "category": "Best Practice", - "startLine": 177, + "startLine": 176, "startColumn": 9, - "endLine": 177, - "endColumn": 26, + "endLine": 176, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -41201,68 +41587,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DynamoStreamerAPIDeployment8F20C3E380de34421a04eed5e7cc4a28266c5690", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 246, - "startColumn": 9, - "endLine": 246, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'DynamoStreamerAPICA573C81'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DynamoStreamerAPIDeploymentStageprod0700648B", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 264, - "startColumn": 9, - "endLine": 264, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'DynamoStreamerAPICA573C81'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoStreamerAPIDeploymentStageprod0700648B", + "logicalId": "HttpAPIDefaultRouteTheCloudwatchDashboardStackHttpAPIDefaultRoute851EEAB4Permission3852997E", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 279, + "startLine": 185, "startColumn": 9, - "endLine": 279, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 185, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -41272,44 +41609,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoStreamerAPIInsertItemACBD0A97", + "logicalId": "HttpAPIDefaultRouteTheCloudwatchDashboardStackHttpAPIDefaultRoute851EEAB4Permission3852997E", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 288, + "startLine": 186, "startColumn": 9, - "endLine": 288, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 186, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt DynamoStreamerAPICA573C81.RootResourceId" + "resolutionSource": "GetAtt DynamoLambdaHandlerFB6EB814.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoStreamerAPIInsertItemACBD0A97", + "logicalId": "HttpAPIDefaultRouteTheCloudwatchDashboardStackHttpAPIDefaultRoute851EEAB4Permission3852997E", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 294, + "startLine": 192, "startColumn": 9, - "endLine": 294, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 192, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -41319,232 +41654,115 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoStreamerAPIInsertItemACBD0A97", + "logicalId": "HttpAPIDefaultRouteTheCloudwatchDashboardStackHttpAPIDefaultRoute851EEAB4Permission3852997E", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 295, + "startLine": 193, "startColumn": 9, - "endLine": 295, + "endLine": 193, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'DynamoStreamerAPICA573C81'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DynamoStreamerAPIInsertItemPOSTCDE209E1", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.HttpMethod", - "category": "Best Practice", - "startLine": 306, - "startColumn": 9, - "endLine": 306, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:HttpAPI8D545486}/*/*)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoStreamerAPIInsertItemPOSTCDE209E1", + "logicalId": "HttpAPIDefaultRouteDefaultRouteIntegration9F0AC785", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ApiGatewayV2::Integration" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 307, + "startLine": 225, "startColumn": 9, - "endLine": 307, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 225, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'DynamoStreamerAPIInsertItemACBD0A97'" + "resolutionSource": "Ref to 'HttpAPI8D545486'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoStreamerAPIInsertItemPOSTCDE209E1", + "logicalId": "HttpAPIDefaultRouteF9949FE6", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ApiGatewayV2::Route" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 310, + "startLine": 244, "startColumn": 9, - "endLine": 310, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 244, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'DynamoStreamerAPICA573C81'" + "resolutionSource": "Ref to 'HttpAPI8D545486'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoStreamerAPIResponseModel5C9A2FF6", + "logicalId": "HttpAPIDefaultStage1BC7D78F", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::ApiGatewayV2::Stage" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 396, + "startLine": 267, "startColumn": 9, - "endLine": 396, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 267, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'DynamoStreamerAPICA573C81'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DynamoStreamerAPIResponseModel5C9A2FF6", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" - }, - "propertyPath": "Properties.ContentType", - "category": "Best Practice", - "startLine": 399, - "startColumn": 9, - "endLine": 399, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DynamoStreamerAPIResponseModel5C9A2FF6", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" - }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 400, - "startColumn": 9, - "endLine": 400, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" + "resolutionSource": "Ref to 'HttpAPI8D545486'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoStreamerAPIErrorResponseModelEB962BDA", + "logicalId": "HttpAPIDefaultStage1BC7D78F", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::ApiGatewayV2::Stage" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 419, + "startLine": 270, "startColumn": 9, - "endLine": 419, + "endLine": 270, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'DynamoStreamerAPICA573C81'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DynamoStreamerAPIErrorResponseModelEB962BDA", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" - }, - "propertyPath": "Properties.ContentType", - "category": "Best Practice", - "startLine": 422, - "startColumn": 9, - "endLine": 422, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DynamoStreamerAPIErrorResponseModelEB962BDA", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" - }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 423, - "startColumn": 9, - "endLine": 423, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -41554,10 +41772,10 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TheDynamoStreamer641C5E5B' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'HitsFF5AF8CD' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TheDynamoStreamer641C5E5B", + "logicalId": "HitsFF5AF8CD", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, @@ -41574,19 +41792,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'dynamoStreamSubscriberLambdaHandlerServiceRole70DB8A47' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'DynamoLambdaHandlerServiceRole4C867B01' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "dynamoStreamSubscriberLambdaHandlerServiceRole70DB8A47", + "logicalId": "DynamoLambdaHandlerServiceRole4C867B01", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 34, + "startLine": 28, "startColumn": 7, - "endLine": 34, + "endLine": 28, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -41594,19 +41812,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'dynamoStreamSubscriberLambdaHandlerD2AAE139' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'DynamoLambdaHandlerFB6EB814' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "dynamoStreamSubscriberLambdaHandlerD2AAE139", + "logicalId": "DynamoLambdaHandlerFB6EB814", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 106, + "startLine": 107, "startColumn": 7, - "endLine": 106, + "endLine": 107, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -41614,19 +41832,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'dynamoStreamSubscriberLambdaHandlerDynamoDBEventSourceTheDynamoStreamerStackTheDynamoStreamerB472C427C1D10245' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", + "message": "Resource 'HttpAPI8D545486' of type 'AWS::ApiGatewayV2::Api' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "dynamoStreamSubscriberLambdaHandlerDynamoDBEventSourceTheDynamoStreamerStackTheDynamoStreamerB472C427C1D10245", + "logicalId": "HttpAPI8D545486", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::ApiGatewayV2::Api" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 166, + "startLine": 174, "startColumn": 7, - "endLine": 166, + "endLine": 174, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -41634,19 +41852,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DynamoStreamerAPICA573C81' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Resource 'HttpAPIDefaultStage1BC7D78F' of type 'AWS::ApiGatewayV2::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DynamoStreamerAPICA573C81", + "logicalId": "HttpAPIDefaultStage1BC7D78F", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::ApiGatewayV2::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 185, + "startLine": 266, "startColumn": 7, - "endLine": 185, + "endLine": 266, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -41654,39 +41872,39 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DynamoStreamerAPICloudWatchRoleEF2543E3' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'errorTopicE59AB483' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DynamoStreamerAPICloudWatchRoleEF2543E3", + "logicalId": "errorTopicE59AB483", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 194, - "startColumn": 7, - "endLine": 194, - "endColumn": 18, + "startLine": 277, + "startColumn": 5, + "endLine": 277, + "endColumn": 24, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DynamoStreamerAPIDeploymentStageprod0700648B' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Resource 'APIGateway4XXErrors1647FE3DB' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DynamoStreamerAPIDeploymentStageprod0700648B", + "logicalId": "APIGateway4XXErrors1647FE3DB", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::CloudWatch::Alarm" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 263, + "startLine": 285, "startColumn": 7, - "endLine": 263, + "endLine": 285, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -41694,35 +41912,175 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DefaultLambdaHanderRoleA44A3BA8' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'APIGateway5XXErrors0A91D7B4E' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DefaultLambdaHanderRoleA44A3BA8", + "logicalId": "APIGateway5XXErrors0A91D7B4E", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::CloudWatch::Alarm" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 444, + "startLine": 354, "startColumn": 7, - "endLine": 444, + "endLine": 354, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'APIp99latencyalarm1s67095ACE' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "APIp99latencyalarm1s67095ACE", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 385, + "startColumn": 7, + "endLine": 385, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DynamoLambda2ErrorDE3BEB2F' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "DynamoLambda2ErrorDE3BEB2F", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 416, + "startColumn": 7, + "endLine": 416, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DynamoLambdap99LongDuration1s739ED568' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "DynamoLambdap99LongDuration1s739ED568", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 481, + "startColumn": 7, + "endLine": 481, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DynamoLambda2Throttled090CFA4C' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "DynamoLambda2Throttled090CFA4C", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 511, + "startColumn": 7, + "endLine": 511, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DynamoDBTableReadsWritesThrottled13F6F2AE' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "DynamoDBTableReadsWritesThrottled13F6F2AE", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 576, + "startColumn": 7, + "endLine": 576, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DynamoDBErrors0FA6C66C9' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "DynamoDBErrors0FA6C66C9", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 641, + "startColumn": 7, + "endLine": 641, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CloudWatchDashBoard043C60B6' of type 'AWS::CloudWatch::Dashboard' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "CloudWatchDashBoard043C60B6", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Dashboard" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 900, + "startColumn": 7, + "endLine": 900, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/pat-the-eventbridge-atm--TheEventbridgeAtmStack.template.json": { - "filePath": "cdk/pat-the-eventbridge-atm--TheEventbridgeAtmStack.template.json", + "cdk/pat-the-destined-lambda--TheDestinedLambdaStack.template.json": { + "filePath": "cdk/pat-the-destined-lambda--TheDestinedLambdaStack.template.json", "status": "OK", "metadata": { "resourcesScanned": 28, "counts": { "fatal": 0, - "errors": 4, - "warnings": 6, - "informational": 54, + "errors": 3, + "warnings": 4, + "informational": 49, "debug": 0 }, "suppressed": 0, @@ -41736,38 +42094,15 @@ "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "atmProducerLambda71029F8F", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 109, - "startColumn": 9, - "endLine": 109, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" - } - }, - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "atmConsumer1LambdaC3C4DA46", + "logicalId": "destinedLambda8DF776BB", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 203, + "startLine": 127, "startColumn": 9, - "endLine": 203, + "endLine": 127, "endColumn": 17, "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", @@ -41782,15 +42117,15 @@ "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "atmConsumer2LambdaB7E263A7", + "logicalId": "SuccessLambdaHandler0E2CD797", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 352, + "startLine": 289, "startColumn": 9, - "endLine": 352, + "endLine": 289, "endColumn": 17, "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", @@ -41805,15 +42140,15 @@ "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "atmConsumer3Lambda880BEEDF", + "logicalId": "FailureLambdaHandlerBB58C051", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 502, + "startLine": 446, "startColumn": 9, - "endLine": 502, + "endLine": 446, "endColumn": 17, "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", @@ -41825,35 +42160,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'AssetParameters9e5a75b7255f8eb613b34870191414422d068cd4c7a85e389d57bef239df88e2ArtifactHash4CB2B431' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "AssetParameters9e5a75b7255f8eb613b34870191414422d068cd4c7a85e389d57bef239df88e2ArtifactHash4CB2B431", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/AssetParameters9e5a75b7255f8eb613b34870191414422d068cd4c7a85e389d57bef239df88e2ArtifactHash4CB2B431", - "category": "Best Practice", - "startLine": 957, - "startColumn": 5, - "endLine": 957, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AssetParameters0e0f30ed3f1938ea2f79b237fca2e084bafedb8d899074223167739de6f64fd8ArtifactHash62E19501' is not referenced anywhere in the template", + "message": "Parameter 'AssetParameters46d205b682091147559b63b9f28b2b0fcfd0b5f3e873a3b40a905e1f82d2001aArtifactHashE6B80060' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "AssetParameters0e0f30ed3f1938ea2f79b237fca2e084bafedb8d899074223167739de6f64fd8ArtifactHash62E19501", + "logicalId": "AssetParameters46d205b682091147559b63b9f28b2b0fcfd0b5f3e873a3b40a905e1f82d2001aArtifactHashE6B80060", "entityType": "Parameter" }, - "propertyPath": "Parameters/AssetParameters0e0f30ed3f1938ea2f79b237fca2e084bafedb8d899074223167739de6f64fd8ArtifactHash62E19501", + "propertyPath": "Parameters/AssetParameters46d205b682091147559b63b9f28b2b0fcfd0b5f3e873a3b40a905e1f82d2001aArtifactHashE6B80060", "category": "Best Practice", - "startLine": 969, + "startLine": 841, "startColumn": 5, - "endLine": 969, + "endLine": 841, "endColumn": 105, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -41861,19 +42178,19 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'atmProducerLambdaServiceRoleEF3D6079' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'destinedLambdaServiceRole87608B6F' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "atmProducerLambda71029F8F", + "logicalId": "destinedLambda8DF776BB", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 111, + "startLine": 129, "startColumn": 7, - "endLine": 111, + "endLine": 129, "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -41881,19 +42198,19 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'atmConsumer1LambdaServiceRole70132707' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'SuccessLambdaHandlerServiceRole77BD70C4' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "atmConsumer1LambdaC3C4DA46", + "logicalId": "SuccessLambdaHandler0E2CD797", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 205, + "startLine": 292, "startColumn": 7, - "endLine": 205, + "endLine": 292, "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -41901,42 +42218,92 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'atmConsumer2LambdaServiceRole130B888D' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'FailureLambdaHandlerServiceRole7E0414CB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "atmConsumer2LambdaB7E263A7", + "logicalId": "FailureLambdaHandlerBB58C051", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 354, + "startLine": 449, "startColumn": 7, - "endLine": 354, + "endLine": 449, "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'atmConsumer3LambdaServiceRoleCF9BAEA7' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "atmConsumer3Lambda880BEEDF", + "logicalId": "DestinedEventBus14820B65", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Events::EventBus" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 504, - "startColumn": 7, - "endLine": 504, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 6, + "startColumn": 9, + "endLine": 6, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-events", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "destinedLambdaEventInvokeConfig3CA2AF7E", + "entityType": "Resource", + "resourceType": "AWS::Lambda::EventInvokeConfig" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 142, + "startColumn": 9, + "endLine": 142, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'destinedLambda8DF776BB'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Qualifier' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "destinedLambdaEventInvokeConfig3CA2AF7E", + "entityType": "Resource", + "resourceType": "AWS::Lambda::EventInvokeConfig" + }, + "propertyPath": "Properties.Qualifier", + "category": "Best Practice", + "startLine": 145, + "startColumn": 9, + "endLine": 145, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", @@ -41944,15 +42311,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer1LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer1LambdaRuleEB0F67E45F2D141B", + "logicalId": "destinedLambdaAllowInvokeTheDestinedLambdaStacktheDestinedLambdaTopic8CE84AB4D93BC799", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 251, + "startLine": 173, "startColumn": 9, - "endLine": 251, + "endLine": 173, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -41966,21 +42333,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer1LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer1LambdaRuleEB0F67E45F2D141B", + "logicalId": "destinedLambdaAllowInvokeTheDestinedLambdaStacktheDestinedLambdaTopic8CE84AB4D93BC799", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 252, + "startLine": 174, "startColumn": 9, - "endLine": 252, + "endLine": 174, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt atmConsumer1LambdaC3C4DA46.Arn" + "resolutionSource": "GetAtt destinedLambda8DF776BB.Arn" } }, { @@ -41989,15 +42356,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer1LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer1LambdaRuleEB0F67E45F2D141B", + "logicalId": "destinedLambdaAllowInvokeTheDestinedLambdaStacktheDestinedLambdaTopic8CE84AB4D93BC799", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 258, + "startLine": 180, "startColumn": 9, - "endLine": 258, + "endLine": 180, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -42011,39 +42378,40 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer1LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer1LambdaRuleEB0F67E45F2D141B", + "logicalId": "destinedLambdaAllowInvokeTheDestinedLambdaStacktheDestinedLambdaTopic8CE84AB4D93BC799", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 259, + "startLine": 181, "startColumn": 9, - "endLine": 259, + "endLine": 181, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt atmConsumer1LambdaRuleC1D6BC2F.Arn" + "resolutionSource": "Ref to 'theDestinedLambdaTopic8F2C8FB6'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer2LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer2LambdaRuleF5729F59774A4AE8", + "logicalId": "destinedLambdatheDestinedLambdaTopic8E937C7F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 401, + "startLine": 192, "startColumn": 9, - "endLine": 401, - "endColumn": 16, + "endLine": 192, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -42053,69 +42421,72 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer2LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer2LambdaRuleF5729F59774A4AE8", + "logicalId": "destinedLambdatheDestinedLambdaTopic8E937C7F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.TopicArn", "category": "Best Practice", - "startLine": 402, + "startLine": 193, "startColumn": 9, - "endLine": 402, - "endColumn": 22, + "endLine": 193, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt atmConsumer2LambdaB7E263A7.Arn" + "resolutionSource": "Ref to 'theDestinedLambdaTopic8F2C8FB6'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer2LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer2LambdaRuleF5729F59774A4AE8", + "logicalId": "destinedLambdatheDestinedLambdaTopic8E937C7F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Endpoint", "category": "Best Practice", - "startLine": 408, + "startLine": 196, "startColumn": 9, - "endLine": 408, - "endColumn": 19, + "endLine": 196, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt destinedLambda8DF776BB.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'EventBusName' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer2LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer2LambdaRuleF5729F59774A4AE8", + "logicalId": "successRuleE9E88056", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.EventBusName", "category": "Best Practice", - "startLine": 409, + "startLine": 305, "startColumn": 9, - "endLine": 409, - "endColumn": 19, + "endLine": 305, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt atmConsumer2LambdaRule5894DC8E.Arn" + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'DestinedEventBus14820B65'" } }, { @@ -42124,15 +42495,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer3LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer3LambdaRuleC926722A1B0365D4", + "logicalId": "successRuleAllowEventRuleTheDestinedLambdaStacksuccessRuleDD139E31353F8BE2", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 551, + "startLine": 345, "startColumn": 9, - "endLine": 551, + "endLine": 345, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -42146,21 +42517,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer3LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer3LambdaRuleC926722A1B0365D4", + "logicalId": "successRuleAllowEventRuleTheDestinedLambdaStacksuccessRuleDD139E31353F8BE2", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 552, + "startLine": 346, "startColumn": 9, - "endLine": 552, + "endLine": 346, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt atmConsumer3Lambda880BEEDF.Arn" + "resolutionSource": "GetAtt SuccessLambdaHandler0E2CD797.Arn" } }, { @@ -42169,15 +42540,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer3LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer3LambdaRuleC926722A1B0365D4", + "logicalId": "successRuleAllowEventRuleTheDestinedLambdaStacksuccessRuleDD139E31353F8BE2", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 558, + "startLine": 352, "startColumn": 9, - "endLine": 558, + "endLine": 352, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -42191,181 +42562,107 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer3LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer3LambdaRuleC926722A1B0365D4", + "logicalId": "successRuleAllowEventRuleTheDestinedLambdaStacksuccessRuleDD139E31353F8BE2", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 559, + "startLine": 353, "startColumn": 9, - "endLine": 559, + "endLine": 353, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt atmConsumer3LambdaRule41A00643.Arn" + "resolutionSource": "GetAtt successRuleE9E88056.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'EventBusName' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointDeployment318525DA98cf1fe46f6a8379cb8241a5e412a297", + "logicalId": "failureRule10D0B2E4", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.EventBusName", "category": "Best Practice", - "startLine": 633, + "startLine": 462, "startColumn": 9, - "endLine": 633, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 462, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'EndpointEEF1FD8F'" + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'DestinedEventBus14820B65'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointDeploymentStageprodB78BEEA0", + "logicalId": "failureRuleAllowEventRuleTheDestinedLambdaStackfailureRule39380610D37AD724", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 650, + "startLine": 494, "startColumn": 9, - "endLine": 650, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 494, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'EndpointEEF1FD8F'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointDeploymentStageprodB78BEEA0", + "logicalId": "failureRuleAllowEventRuleTheDestinedLambdaStackfailureRule39380610D37AD724", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.StageName", - "category": "Best Practice", - "startLine": 656, - "startColumn": 9, - "endLine": 656, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Endpointproxy39E2174E", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" - }, - "propertyPath": "Properties.ParentId", - "category": "Best Practice", - "startLine": 665, - "startColumn": 9, - "endLine": 665, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt EndpointEEF1FD8F.RootResourceId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Endpointproxy39E2174E", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" - }, - "propertyPath": "Properties.PathPart", - "category": "Best Practice", - "startLine": 671, - "startColumn": 9, - "endLine": 671, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Endpointproxy39E2174E", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" - }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 672, + "startLine": 495, "startColumn": 9, - "endLine": 672, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 495, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'EndpointEEF1FD8F'" + "resolutionSource": "GetAtt FailureLambdaHandlerBB58C051.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANYproxyC2C9F151", + "logicalId": "failureRuleAllowEventRuleTheDestinedLambdaStackfailureRule39380610D37AD724", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 683, + "startLine": 501, "startColumn": 9, - "endLine": 683, - "endColumn": 16, + "endLine": 501, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -42375,87 +42672,91 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANYproxyC2C9F151", + "logicalId": "failureRuleAllowEventRuleTheDestinedLambdaStackfailureRule39380610D37AD724", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 684, + "startLine": 502, "startColumn": 9, - "endLine": 684, - "endColumn": 22, + "endLine": 502, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt atmProducerLambda71029F8F.Arn" + "resolutionSource": "GetAtt failureRule10D0B2E4.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANYproxyC2C9F151", + "logicalId": "theDestinedLambdaAPIDeploymentC364859Eae40584f53d9b7bb31907a57bb781ad3", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 690, + "startLine": 576, "startColumn": 9, - "endLine": 690, + "endLine": 576, "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'theDestinedLambdaAPIBAB2789B'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANYproxyC2C9F151", + "logicalId": "theDestinedLambdaAPIDeploymentStageprodD67BDFB2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 691, + "startLine": 594, "startColumn": 9, - "endLine": 691, + "endLine": 594, "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/{ref:EndpointDeploymentStageprodB78BEEA0}/*/*)" + "resolutionSource": "Ref to 'theDestinedLambdaAPIBAB2789B'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYproxy14296A4D", + "logicalId": "theDestinedLambdaAPIDeploymentStageprodD67BDFB2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 727, + "startLine": 609, "startColumn": 9, - "endLine": 727, - "endColumn": 16, + "endLine": 609, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -42465,42 +42766,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYproxy14296A4D", + "logicalId": "theDestinedLambdaAPISendEventC20585CF", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 728, + "startLine": 618, "startColumn": 9, - "endLine": 728, - "endColumn": 22, + "endLine": 618, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt atmProducerLambda71029F8F.Arn" + "resolutionSource": "GetAtt theDestinedLambdaAPIBAB2789B.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYproxy14296A4D", + "logicalId": "theDestinedLambdaAPISendEventC20585CF", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 734, + "startLine": 624, "startColumn": 9, - "endLine": 734, - "endColumn": 19, + "endLine": 624, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -42510,24 +42813,25 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYproxy14296A4D", + "logicalId": "theDestinedLambdaAPISendEventC20585CF", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 735, + "startLine": 625, "startColumn": 9, - "endLine": 735, + "endLine": 625, "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/test-invoke-stage/*/*)" + "resolutionSource": "Ref to 'theDestinedLambdaAPIBAB2789B'" } }, { @@ -42536,15 +42840,15 @@ "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYC09721C5", + "logicalId": "theDestinedLambdaAPISendEventGETC3F11CCE", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 767, + "startLine": 636, "startColumn": 9, - "endLine": 767, + "endLine": 636, "endColumn": 20, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -42559,22 +42863,22 @@ "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYC09721C5", + "logicalId": "theDestinedLambdaAPISendEventGETC3F11CCE", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 768, + "startLine": 637, "startColumn": 9, - "endLine": 768, + "endLine": 637, "endColumn": 20, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Endpointproxy39E2174E'" + "resolutionSource": "Ref to 'theDestinedLambdaAPISendEventC20585CF'" } }, { @@ -42583,85 +42887,65 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYC09721C5", + "logicalId": "theDestinedLambdaAPISendEventGETC3F11CCE", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 771, + "startLine": 640, "startColumn": 9, - "endLine": 771, + "endLine": 640, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'EndpointEEF1FD8F'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "EndpointANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANY2B0F1701", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 810, - "startColumn": 9, - "endLine": 810, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" + "resolutionSource": "Ref to 'theDestinedLambdaAPIBAB2789B'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANY2B0F1701", + "logicalId": "theDestinedLambdaAPIResponseModel7D59062C", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 811, + "startLine": 729, "startColumn": 9, - "endLine": 811, - "endColumn": 22, + "endLine": 729, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt atmProducerLambda71029F8F.Arn" + "resolutionSource": "Ref to 'theDestinedLambdaAPIBAB2789B'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANY2B0F1701", + "logicalId": "theDestinedLambdaAPIResponseModel7D59062C", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.ContentType", "category": "Best Practice", - "startLine": 817, + "startLine": 732, "startColumn": 9, - "endLine": 817, - "endColumn": 19, + "endLine": 732, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -42671,42 +42955,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "EndpointANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANY2B0F1701", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 818, - "startColumn": 9, - "endLine": 818, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/{ref:EndpointDeploymentStageprodB78BEEA0}/*/)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYFFED7414", + "logicalId": "theDestinedLambdaAPIResponseModel7D59062C", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 854, + "startLine": 733, "startColumn": 9, - "endLine": 854, - "endColumn": 16, + "endLine": 733, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -42716,42 +42978,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYFFED7414", + "logicalId": "theDestinedLambdaAPIErrorResponseModel5F76D2FC", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 855, + "startLine": 752, "startColumn": 9, - "endLine": 855, - "endColumn": 22, + "endLine": 752, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt atmProducerLambda71029F8F.Arn" + "resolutionSource": "Ref to 'theDestinedLambdaAPIBAB2789B'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYFFED7414", + "logicalId": "theDestinedLambdaAPIErrorResponseModel5F76D2FC", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.ContentType", "category": "Best Practice", - "startLine": 861, + "startLine": 755, "startColumn": 9, - "endLine": 861, - "endColumn": 19, + "endLine": 755, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -42761,43 +43025,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "EndpointANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYFFED7414", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 862, - "startColumn": 9, - "endLine": 862, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/test-invoke-stage/*/)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANY485C938B", + "logicalId": "theDestinedLambdaAPIErrorResponseModel5F76D2FC", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 894, + "startLine": 756, "startColumn": 9, - "endLine": 894, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 756, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -42805,69 +43046,61 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Resource 'DestinedEventBus14820B65' of type 'AWS::Events::EventBus' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EndpointANY485C938B", + "logicalId": "DestinedEventBus14820B65", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Events::EventBus" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 895, - "startColumn": 9, - "endLine": 895, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt EndpointEEF1FD8F.RootResourceId" - } + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'theDestinedLambdaTopic8F2C8FB6' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EndpointANY485C938B", + "logicalId": "theDestinedLambdaTopic8F2C8FB6", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 901, - "startColumn": 9, - "endLine": 901, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'EndpointEEF1FD8F'" - } + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'atmProducerLambdaServiceRoleEF3D6079' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'destinedLambdaServiceRole87608B6F' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "atmProducerLambdaServiceRoleEF3D6079", + "logicalId": "destinedLambdaServiceRole87608B6F", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 23, "startColumn": 7, - "endLine": 5, + "endLine": 23, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -42875,19 +43108,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'atmProducerLambda71029F8F' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'destinedLambda8DF776BB' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "atmProducerLambda71029F8F", + "logicalId": "destinedLambda8DF776BB", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 63, + "startLine": 81, "startColumn": 7, - "endLine": 63, + "endLine": 81, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -42895,19 +43128,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'atmConsumer1LambdaServiceRole70132707' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'SuccessLambdaHandlerServiceRole77BD70C4' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer1LambdaServiceRole70132707", + "logicalId": "SuccessLambdaHandlerServiceRole77BD70C4", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 123, + "startLine": 209, "startColumn": 7, - "endLine": 123, + "endLine": 209, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -42915,19 +43148,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'atmConsumer1LambdaC3C4DA46' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'SuccessLambdaHandler0E2CD797' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer1LambdaC3C4DA46", + "logicalId": "SuccessLambdaHandler0E2CD797", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 157, + "startLine": 243, "startColumn": 7, - "endLine": 157, + "endLine": 243, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -42935,19 +43168,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'atmConsumer1LambdaRuleC1D6BC2F' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Resource 'successRuleE9E88056' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer1LambdaRuleC1D6BC2F", + "logicalId": "successRuleE9E88056", "entityType": "Resource", "resourceType": "AWS::Events::Rule" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 216, + "startLine": 303, "startColumn": 7, - "endLine": 216, + "endLine": 303, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -42955,19 +43188,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'atmConsumer2LambdaServiceRole130B888D' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'FailureLambdaHandlerServiceRole7E0414CB' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer2LambdaServiceRole130B888D", + "logicalId": "FailureLambdaHandlerServiceRole7E0414CB", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 272, + "startLine": 366, "startColumn": 7, - "endLine": 272, + "endLine": 366, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -42975,19 +43208,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'atmConsumer2LambdaB7E263A7' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'FailureLambdaHandlerBB58C051' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer2LambdaB7E263A7", + "logicalId": "FailureLambdaHandlerBB58C051", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 306, + "startLine": 400, "startColumn": 7, - "endLine": 306, + "endLine": 400, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -42995,19 +43228,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'atmConsumer2LambdaRule5894DC8E' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Resource 'failureRule10D0B2E4' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer2LambdaRule5894DC8E", + "logicalId": "failureRule10D0B2E4", "entityType": "Resource", "resourceType": "AWS::Events::Rule" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 365, + "startLine": 460, "startColumn": 7, - "endLine": 365, + "endLine": 460, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -43015,52 +43248,12 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'atmConsumer3LambdaServiceRoleCF9BAEA7' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'theDestinedLambdaAPIBAB2789B' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer3LambdaServiceRoleCF9BAEA7", + "logicalId": "theDestinedLambdaAPIBAB2789B", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 422, - "startColumn": 7, - "endLine": 422, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'atmConsumer3Lambda880BEEDF' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "atmConsumer3Lambda880BEEDF", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 456, - "startColumn": 7, - "endLine": 456, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'atmConsumer3LambdaRule41A00643' of type 'AWS::Events::Rule' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "atmConsumer3LambdaRule41A00643", - "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::ApiGateway::RestApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -43075,19 +43268,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EndpointEEF1FD8F' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Resource 'theDestinedLambdaAPICloudWatchRoleCDF408DA' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EndpointEEF1FD8F", + "logicalId": "theDestinedLambdaAPICloudWatchRoleCDF408DA", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 572, + "startLine": 524, "startColumn": 7, - "endLine": 572, + "endLine": 524, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -43095,19 +43288,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EndpointCloudWatchRoleC3C64E0F' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'theDestinedLambdaAPIDeploymentStageprodD67BDFB2' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EndpointCloudWatchRoleC3C64E0F", + "logicalId": "theDestinedLambdaAPIDeploymentStageprodD67BDFB2", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 581, + "startLine": 593, "startColumn": 7, - "endLine": 581, + "endLine": 593, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -43115,35 +43308,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EndpointDeploymentStageprodB78BEEA0' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Resource 'ApiGatewaySnsRole904B65D6' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EndpointDeploymentStageprodB78BEEA0", + "logicalId": "ApiGatewaySnsRole904B65D6", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 649, + "startLine": 777, "startColumn": 7, - "endLine": 649, + "endLine": 777, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/pat-the-eventbridge-circuit-breaker--TheEventbridgeCircuitBreakerStack.template.json": { - "filePath": "cdk/pat-the-eventbridge-circuit-breaker--TheEventbridgeCircuitBreakerStack.template.json", + "cdk/pat-the-dynamo-streamer--TheDynamoStreamerStack.template.json": { + "filePath": "cdk/pat-the-dynamo-streamer--TheDynamoStreamerStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 22, + "resourcesScanned": 17, "counts": { "fatal": 0, - "errors": 2, - "warnings": 4, - "informational": 42, + "errors": 1, + "warnings": 2, + "informational": 26, "debug": 0 }, "suppressed": 0, @@ -43157,38 +43350,15 @@ "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "WebserviceIntegrationLambdaHandler5E349AB7", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 213, - "startColumn": 9, - "endLine": 213, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" - } - }, - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "ErrorLambdaHandler4224322A", + "logicalId": "dynamoStreamSubscriberLambdaHandlerD2AAE139", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 365, + "startLine": 152, "startColumn": 9, - "endLine": 365, + "endLine": 152, "endColumn": 17, "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", @@ -43200,35 +43370,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'AssetParameters0641c2be6bec286d59c7c75ed1e4ce6e7dc5be0e4a14b52b1088d92b3977f68eArtifactHash7779B76D' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "AssetParameters0641c2be6bec286d59c7c75ed1e4ce6e7dc5be0e4a14b52b1088d92b3977f68eArtifactHash7779B76D", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/AssetParameters0641c2be6bec286d59c7c75ed1e4ce6e7dc5be0e4a14b52b1088d92b3977f68eArtifactHash7779B76D", - "category": "Best Practice", - "startLine": 821, - "startColumn": 5, - "endLine": 821, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AssetParameters73ddeceb533c98a62d83046532b46a5c3457eefa2ea3fc5c6816dfd09424e4a2ArtifactHash5AB686F1' is not referenced anywhere in the template", + "message": "Parameter 'AssetParametersdea71d0871b06cc6149d538db9f3627c5e43599da253f86c0ab81528b3ccf675ArtifactHashCA4FFEF8' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "AssetParameters73ddeceb533c98a62d83046532b46a5c3457eefa2ea3fc5c6816dfd09424e4a2ArtifactHash5AB686F1", + "logicalId": "AssetParametersdea71d0871b06cc6149d538db9f3627c5e43599da253f86c0ab81528b3ccf675ArtifactHashCA4FFEF8", "entityType": "Parameter" }, - "propertyPath": "Parameters/AssetParameters73ddeceb533c98a62d83046532b46a5c3457eefa2ea3fc5c6816dfd09424e4a2ArtifactHash5AB686F1", + "propertyPath": "Parameters/AssetParametersdea71d0871b06cc6149d538db9f3627c5e43599da253f86c0ab81528b3ccf675ArtifactHashCA4FFEF8", "category": "Best Practice", - "startLine": 833, + "startLine": 527, "startColumn": 5, - "endLine": 833, + "endLine": 527, "endColumn": 105, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -43236,39 +43388,19 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'WebserviceIntegrationLambdaHandlerServiceRole851361F8' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "WebserviceIntegrationLambdaHandler5E349AB7", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 216, - "startColumn": 7, - "endLine": 216, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ErrorLambdaHandlerServiceRole5D9F8D61' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'dynamoStreamSubscriberLambdaHandlerServiceRole70DB8A47' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "ErrorLambdaHandler4224322A", + "logicalId": "dynamoStreamSubscriberLambdaHandlerD2AAE139", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 368, + "startLine": 154, "startColumn": 7, - "endLine": 368, + "endLine": 154, "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -43279,7 +43411,7 @@ "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreaker4FAEA3DB", + "logicalId": "TheDynamoStreamer641C5E5B", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, @@ -43298,115 +43430,70 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "webserviceErrorRuleAllowEventRuleTheEventbridgeCircuitBreakerStackwebserviceErrorRule5CA5849AC9CE1102", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 415, - "startColumn": 9, - "endLine": 415, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "webserviceErrorRuleAllowEventRuleTheEventbridgeCircuitBreakerStackwebserviceErrorRule5CA5849AC9CE1102", + "logicalId": "dynamoStreamSubscriberLambdaHandlerDynamoDBEventSourceTheDynamoStreamerStackTheDynamoStreamerB472C427C1D10245", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.EventSourceArn", "category": "Best Practice", - "startLine": 416, + "startLine": 171, "startColumn": 9, - "endLine": 416, - "endColumn": 22, + "endLine": 171, + "endColumn": 24, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ErrorLambdaHandler4224322A.Arn" + "resolutionSource": "GetAtt TheDynamoStreamer641C5E5B.StreamArn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'StartingPosition' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "webserviceErrorRuleAllowEventRuleTheEventbridgeCircuitBreakerStackwebserviceErrorRule5CA5849AC9CE1102", + "logicalId": "dynamoStreamSubscriberLambdaHandlerDynamoDBEventSourceTheDynamoStreamerStackTheDynamoStreamerB472C427C1D10245", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.StartingPosition", "category": "Best Practice", - "startLine": 422, + "startLine": 177, "startColumn": 9, - "endLine": 422, - "endColumn": 19, + "endLine": 177, + "endColumn": 26, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "webserviceErrorRuleAllowEventRuleTheEventbridgeCircuitBreakerStackwebserviceErrorRule5CA5849AC9CE1102", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 423, - "startColumn": 9, - "endLine": 423, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt webserviceErrorRuleCE293636.Arn" - } - }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayDeployment9F2A82FA10260421dc831e654354d72baa60bfb0", + "logicalId": "DynamoStreamerAPIDeployment8F20C3E380de34421a04eed5e7cc4a28266c5690", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Deployment" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 497, + "startLine": 246, "startColumn": 9, - "endLine": 497, + "endLine": 246, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" + "resolutionSource": "Ref to 'DynamoStreamerAPICA573C81'" } }, { @@ -43415,22 +43502,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayDeploymentStageprod84F6B9E5", + "logicalId": "DynamoStreamerAPIDeploymentStageprod0700648B", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 514, + "startLine": 264, "startColumn": 9, - "endLine": 514, + "endLine": 264, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" + "resolutionSource": "Ref to 'DynamoStreamerAPICA573C81'" } }, { @@ -43439,15 +43526,15 @@ "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayDeploymentStageprod84F6B9E5", + "logicalId": "DynamoStreamerAPIDeploymentStageprod0700648B", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 520, + "startLine": 279, "startColumn": 9, - "endLine": 520, + "endLine": 279, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -43462,22 +43549,22 @@ "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayproxy1147E2CF", + "logicalId": "DynamoStreamerAPIInsertItemACBD0A97", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Resource" }, "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 529, + "startLine": 288, "startColumn": 9, - "endLine": 529, + "endLine": 288, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt CircuitBreakerGateway122B123C.RootResourceId" + "resolutionSource": "GetAtt DynamoStreamerAPICA573C81.RootResourceId" } }, { @@ -43486,15 +43573,15 @@ "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayproxy1147E2CF", + "logicalId": "DynamoStreamerAPIInsertItemACBD0A97", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Resource" }, "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 535, + "startLine": 294, "startColumn": 9, - "endLine": 535, + "endLine": 294, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -43509,40 +43596,41 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayproxy1147E2CF", + "logicalId": "DynamoStreamerAPIInsertItemACBD0A97", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Resource" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 536, + "startLine": 295, "startColumn": 9, - "endLine": 536, + "endLine": 295, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" + "resolutionSource": "Ref to 'DynamoStreamerAPICA573C81'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxy584EF780", + "logicalId": "DynamoStreamerAPIInsertItemPOSTCDE209E1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 547, + "startLine": 306, "startColumn": 9, - "endLine": 547, - "endColumn": 16, + "endLine": 306, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -43552,87 +43640,92 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxy584EF780", + "logicalId": "DynamoStreamerAPIInsertItemPOSTCDE209E1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 548, + "startLine": 307, "startColumn": 9, - "endLine": 548, - "endColumn": 22, + "endLine": 307, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt WebserviceIntegrationLambdaHandler5E349AB7.Arn" + "resolutionSource": "Ref to 'DynamoStreamerAPIInsertItemACBD0A97'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxy584EF780", + "logicalId": "DynamoStreamerAPIInsertItemPOSTCDE209E1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 554, + "startLine": 310, "startColumn": 9, - "endLine": 554, + "endLine": 310, "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'DynamoStreamerAPICA573C81'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxy584EF780", + "logicalId": "DynamoStreamerAPIResponseModel5C9A2FF6", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 555, + "startLine": 396, "startColumn": 9, - "endLine": 555, + "endLine": 396, "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:CircuitBreakerGateway122B123C}/{ref:CircuitBreakerGatewayDeploymentStageprod84F6B9E5}/*/*)" + "resolutionSource": "Ref to 'DynamoStreamerAPICA573C81'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxyE09D3DF2", + "logicalId": "DynamoStreamerAPIResponseModel5C9A2FF6", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.ContentType", "category": "Best Practice", - "startLine": 591, + "startLine": 399, "startColumn": 9, - "endLine": 591, - "endColumn": 16, + "endLine": 399, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -43642,88 +43735,90 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxyE09D3DF2", + "logicalId": "DynamoStreamerAPIResponseModel5C9A2FF6", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 592, + "startLine": 400, "startColumn": 9, - "endLine": 592, - "endColumn": 22, + "endLine": 400, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt WebserviceIntegrationLambdaHandler5E349AB7.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxyE09D3DF2", + "logicalId": "DynamoStreamerAPIErrorResponseModelEB962BDA", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 598, + "startLine": 419, "startColumn": 9, - "endLine": 598, + "endLine": 419, "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'DynamoStreamerAPICA573C81'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxyE09D3DF2", + "logicalId": "DynamoStreamerAPIErrorResponseModelEB962BDA", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.ContentType", "category": "Best Practice", - "startLine": 599, + "startLine": 422, "startColumn": 9, - "endLine": 599, - "endColumn": 19, + "endLine": 422, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:CircuitBreakerGateway122B123C}/test-invoke-stage/*/*)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayproxyANY759880DB", + "logicalId": "DynamoStreamerAPIErrorResponseModelEB962BDA", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 631, + "startLine": 423, "startColumn": 9, - "endLine": 631, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 423, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -43731,320 +43826,61 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Resource 'TheDynamoStreamer641C5E5B' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayproxyANY759880DB", + "logicalId": "TheDynamoStreamer641C5E5B", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 632, - "startColumn": 9, - "endLine": 632, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'CircuitBreakerGatewayproxy1147E2CF'" - } + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'dynamoStreamSubscriberLambdaHandlerServiceRole70DB8A47' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayproxyANY759880DB", + "logicalId": "dynamoStreamSubscriberLambdaHandlerServiceRole70DB8A47", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 635, - "startColumn": 9, - "endLine": 635, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" - } + "startLine": 34, + "startColumn": 7, + "endLine": 34, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Resource 'dynamoStreamSubscriberLambdaHandlerD2AAE139' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY2D2F06E0", + "logicalId": "dynamoStreamSubscriberLambdaHandlerD2AAE139", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 674, - "startColumn": 9, - "endLine": 674, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CircuitBreakerGatewayANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY2D2F06E0", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 675, - "startColumn": 9, - "endLine": 675, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt WebserviceIntegrationLambdaHandler5E349AB7.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CircuitBreakerGatewayANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY2D2F06E0", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 681, - "startColumn": 9, - "endLine": 681, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CircuitBreakerGatewayANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY2D2F06E0", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 682, - "startColumn": 9, - "endLine": 682, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:CircuitBreakerGateway122B123C}/{ref:CircuitBreakerGatewayDeploymentStageprod84F6B9E5}/*/)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CircuitBreakerGatewayANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY33532EB9", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 718, - "startColumn": 9, - "endLine": 718, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CircuitBreakerGatewayANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY33532EB9", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 719, - "startColumn": 9, - "endLine": 719, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt WebserviceIntegrationLambdaHandler5E349AB7.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CircuitBreakerGatewayANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY33532EB9", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 725, - "startColumn": 9, - "endLine": 725, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CircuitBreakerGatewayANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY33532EB9", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 726, - "startColumn": 9, - "endLine": 726, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:CircuitBreakerGateway122B123C}/test-invoke-stage/*/)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CircuitBreakerGatewayANYE076316B", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.HttpMethod", - "category": "Best Practice", - "startLine": 758, - "startColumn": 9, - "endLine": 758, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CircuitBreakerGatewayANYE076316B", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.ResourceId", - "category": "Best Practice", - "startLine": 759, - "startColumn": 9, - "endLine": 759, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt CircuitBreakerGateway122B123C.RootResourceId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CircuitBreakerGatewayANYE076316B", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 765, - "startColumn": 9, - "endLine": 765, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CircuitBreaker4FAEA3DB' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CircuitBreaker4FAEA3DB", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, + "startLine": 106, "startColumn": 7, - "endLine": 5, + "endLine": 106, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -44052,19 +43888,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'WebserviceIntegrationLambdaHandlerServiceRole851361F8' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'dynamoStreamSubscriberLambdaHandlerDynamoDBEventSourceTheDynamoStreamerStackTheDynamoStreamerB472C427C1D10245' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WebserviceIntegrationLambdaHandlerServiceRole851361F8", + "logicalId": "dynamoStreamSubscriberLambdaHandlerDynamoDBEventSourceTheDynamoStreamerStackTheDynamoStreamerB472C427C1D10245", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::EventSourceMapping" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 69, + "startLine": 166, "startColumn": 7, - "endLine": 69, + "endLine": 166, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -44072,19 +43908,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'WebserviceIntegrationLambdaHandler5E349AB7' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'DynamoStreamerAPICA573C81' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WebserviceIntegrationLambdaHandler5E349AB7", + "logicalId": "DynamoStreamerAPICA573C81", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::RestApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 160, + "startLine": 185, "startColumn": 7, - "endLine": 160, + "endLine": 185, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -44092,59 +43928,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ErrorLambdaHandlerServiceRole5D9F8D61' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'DynamoStreamerAPICloudWatchRoleEF2543E3' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ErrorLambdaHandlerServiceRole5D9F8D61", + "logicalId": "DynamoStreamerAPICloudWatchRoleEF2543E3", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 228, - "startColumn": 7, - "endLine": 228, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ErrorLambdaHandler4224322A' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ErrorLambdaHandler4224322A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 312, - "startColumn": 7, - "endLine": 312, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'webserviceErrorRuleCE293636' of type 'AWS::Events::Rule' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "webserviceErrorRuleCE293636", - "entityType": "Resource", - "resourceType": "AWS::Events::Rule" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 380, + "startLine": 194, "startColumn": 7, - "endLine": 380, + "endLine": 194, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -44152,19 +43948,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CircuitBreakerGateway122B123C' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Resource 'DynamoStreamerAPIDeploymentStageprod0700648B' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGateway122B123C", + "logicalId": "DynamoStreamerAPIDeploymentStageprod0700648B", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 436, + "startLine": 263, "startColumn": 7, - "endLine": 436, + "endLine": 263, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -44172,55 +43968,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CircuitBreakerGatewayCloudWatchRole934DF897' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'DefaultLambdaHanderRoleA44A3BA8' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayCloudWatchRole934DF897", + "logicalId": "DefaultLambdaHanderRoleA44A3BA8", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 445, - "startColumn": 7, - "endLine": 445, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CircuitBreakerGatewayDeploymentStageprod84F6B9E5' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CircuitBreakerGatewayDeploymentStageprod84F6B9E5", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 513, + "startLine": 444, "startColumn": 7, - "endLine": 513, + "endLine": 444, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/pat-the-eventbridge-etl--TheEventbridgeEtlStack.template.json": { - "filePath": "cdk/pat-the-eventbridge-etl--TheEventbridgeEtlStack.template.json", + "cdk/pat-the-eventbridge-atm--TheEventbridgeAtmStack.template.json": { + "filePath": "cdk/pat-the-eventbridge-atm--TheEventbridgeAtmStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 57, + "resourcesScanned": 28, "counts": { "fatal": 0, - "errors": 5, - "warnings": 10, - "informational": 86, + "errors": 4, + "warnings": 6, + "informational": 54, "debug": 0 }, "suppressed": 0, @@ -44228,44 +44004,21 @@ "severityLevel": "DEBUG" }, "diagnostics": [ - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs10.x' was deprecated on '2021-07-30'. Creation was disabled on '2021-07-30', and updates were disabled on '2022-02-14'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 199, - "startColumn": 9, - "endLine": 199, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs10.x", - "lifecycle": "end-of-life" - } - }, { "ruleId": "E2533", "severity": "ERROR", "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "extractLambdaHandlerD06B8F09", + "logicalId": "atmProducerLambda71029F8F", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 1089, + "startLine": 109, "startColumn": 9, - "endLine": 1089, + "endLine": 109, "endColumn": 17, "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", @@ -44280,15 +44033,15 @@ "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "TransformLambdaHandler60ABE8EE", + "logicalId": "atmConsumer1LambdaC3C4DA46", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 1225, + "startLine": 203, "startColumn": 9, - "endLine": 1225, + "endLine": 203, "endColumn": 17, "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", @@ -44303,15 +44056,15 @@ "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "LoadLambdaHandlerFDA03D53", + "logicalId": "atmConsumer2LambdaB7E263A7", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 1434, + "startLine": 352, "startColumn": 9, - "endLine": 1434, + "endLine": 352, "endColumn": 17, "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", @@ -44326,15 +44079,15 @@ "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "ObserveLambdaHandler685FFDBB", + "logicalId": "atmConsumer3Lambda880BEEDF", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 1585, + "startLine": 502, "startColumn": 9, - "endLine": 1585, + "endLine": 502, "endColumn": 17, "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", @@ -44346,53 +44099,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'AssetParameters63e74618e2833e3346e7223ed172c961dfc5f22e47a02bfd8e38e313b20b30dfArtifactHash20D89EF6' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "AssetParameters63e74618e2833e3346e7223ed172c961dfc5f22e47a02bfd8e38e313b20b30dfArtifactHash20D89EF6", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/AssetParameters63e74618e2833e3346e7223ed172c961dfc5f22e47a02bfd8e38e313b20b30dfArtifactHash20D89EF6", - "category": "Best Practice", - "startLine": 1665, - "startColumn": 5, - "endLine": 1665, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AssetParametersa20da5839df7117061434d7118e435f02499368b8c588c15b84f94ecfb7732f2ArtifactHash202B02F0' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "AssetParametersa20da5839df7117061434d7118e435f02499368b8c588c15b84f94ecfb7732f2ArtifactHash202B02F0", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/AssetParametersa20da5839df7117061434d7118e435f02499368b8c588c15b84f94ecfb7732f2ArtifactHash202B02F0", - "category": "Best Practice", - "startLine": 1677, - "startColumn": 5, - "endLine": 1677, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AssetParameters7239a648a454455008a419ce89d65c3755bf0e160fd4f91f8d3b4d16c5598d41ArtifactHash40B763DF' is not referenced anywhere in the template", + "message": "Parameter 'AssetParameters9e5a75b7255f8eb613b34870191414422d068cd4c7a85e389d57bef239df88e2ArtifactHash4CB2B431' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "AssetParameters7239a648a454455008a419ce89d65c3755bf0e160fd4f91f8d3b4d16c5598d41ArtifactHash40B763DF", + "logicalId": "AssetParameters9e5a75b7255f8eb613b34870191414422d068cd4c7a85e389d57bef239df88e2ArtifactHash4CB2B431", "entityType": "Parameter" }, - "propertyPath": "Parameters/AssetParameters7239a648a454455008a419ce89d65c3755bf0e160fd4f91f8d3b4d16c5598d41ArtifactHash40B763DF", + "propertyPath": "Parameters/AssetParameters9e5a75b7255f8eb613b34870191414422d068cd4c7a85e389d57bef239df88e2ArtifactHash4CB2B431", "category": "Best Practice", - "startLine": 1689, + "startLine": 957, "startColumn": 5, - "endLine": 1689, + "endLine": 957, "endColumn": 105, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -44400,17 +44117,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'AssetParameters21981f2afd308d5c462488a4129b87ce9d6ca2227128358b2d6e11e7d9f1c4b6ArtifactHashD80D6D6D' is not referenced anywhere in the template", + "message": "Parameter 'AssetParameters0e0f30ed3f1938ea2f79b237fca2e084bafedb8d899074223167739de6f64fd8ArtifactHash62E19501' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "AssetParameters21981f2afd308d5c462488a4129b87ce9d6ca2227128358b2d6e11e7d9f1c4b6ArtifactHashD80D6D6D", + "logicalId": "AssetParameters0e0f30ed3f1938ea2f79b237fca2e084bafedb8d899074223167739de6f64fd8ArtifactHash62E19501", "entityType": "Parameter" }, - "propertyPath": "Parameters/AssetParameters21981f2afd308d5c462488a4129b87ce9d6ca2227128358b2d6e11e7d9f1c4b6ArtifactHashD80D6D6D", + "propertyPath": "Parameters/AssetParameters0e0f30ed3f1938ea2f79b237fca2e084bafedb8d899074223167739de6f64fd8ArtifactHash62E19501", "category": "Best Practice", - "startLine": 1701, + "startLine": 969, "startColumn": 5, - "endLine": 1701, + "endLine": 969, "endColumn": 105, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -44418,19 +44135,19 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'newObjectInLandingBucketEventQueue67CBE2F2' dependency already enforced by a 'GetAtt' at 'Properties.NotificationConfiguration.QueueConfigurations.0.QueueArn'", + "message": "'atmProducerLambdaServiceRoleEF3D6079' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "LandingBucketNotificationsEF1634C6", + "logicalId": "atmProducerLambda71029F8F", "entityType": "Resource", - "resourceType": "Custom::S3BucketNotifications" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 65, + "startLine": 111, "startColumn": 7, - "endLine": 65, + "endLine": 111, "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -44438,19 +44155,19 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'atmConsumer1LambdaServiceRole70132707' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", + "logicalId": "atmConsumer1LambdaC3C4DA46", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 202, + "startLine": 205, "startColumn": 7, - "endLine": 202, + "endLine": 205, "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -44458,19 +44175,19 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'extractLambdaHandlerServiceRole8A50F829' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'atmConsumer2LambdaServiceRole130B888D' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "extractLambdaHandlerD06B8F09", + "logicalId": "atmConsumer2LambdaB7E263A7", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 1091, + "startLine": 354, "startColumn": 7, - "endLine": 1091, + "endLine": 354, "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -44478,155 +44195,83 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'TransformLambdaHandlerServiceRole710C039E' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'atmConsumer3LambdaServiceRoleCF9BAEA7' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "TransformLambdaHandler60ABE8EE", + "logicalId": "atmConsumer3Lambda880BEEDF", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 1228, + "startLine": 504, "startColumn": 7, - "endLine": 1228, + "endLine": 504, "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LoadLambdaHandlerServiceRole83E61748' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LoadLambdaHandlerFDA03D53", + "logicalId": "atmConsumer1LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer1LambdaRuleEB0F67E45F2D141B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 1437, - "startColumn": 7, - "endLine": 1437, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ObserveLambdaHandlerServiceRole040C69BA' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "ObserveLambdaHandler685FFDBB", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 1588, - "startColumn": 7, - "endLine": 1588, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for 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": "newObjectInLandingBucketEventQueue67CBE2F2", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 73, - "startColumn": 5, - "endLine": 73, - "endColumn": 48, - "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": "newObjectInLandingBucketEventQueue67CBE2F2", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 73, - "startColumn": 5, - "endLine": 73, - "endColumn": 48, - "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": "newObjectInLandingBucketEventQueue67CBE2F2", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 75, - "startColumn": 7, - "endLine": 75, - "endColumn": 18, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "startLine": 251, + "startColumn": 9, + "endLine": 251, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TransformedDataB0572681", + "logicalId": "atmConsumer1LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer1LambdaRuleEB0F67E45F2D141B", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 6, + "startLine": 252, "startColumn": 9, - "endLine": 6, - "endColumn": 19, + "endLine": 252, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt atmConsumer1LambdaC3C4DA46.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Vpc8378EB38", + "logicalId": "atmConsumer1LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer1LambdaRuleEB0F67E45F2D141B", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 213, + "startLine": 258, "startColumn": 9, - "endLine": 213, + "endLine": 258, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -44637,41 +44282,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Vpc8378EB38", + "logicalId": "atmConsumer1LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer1LambdaRuleEB0F67E45F2D141B", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 216, + "startLine": 259, "startColumn": 9, - "endLine": 216, - "endColumn": 25, + "endLine": 259, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt atmConsumer1LambdaRuleC1D6BC2F.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "atmConsumer2LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer2LambdaRuleF5729F59774A4AE8", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 231, + "startLine": 401, "startColumn": 9, - "endLine": 231, - "endColumn": 19, + "endLine": 401, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -44681,42 +44327,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "atmConsumer2LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer2LambdaRuleF5729F59774A4AE8", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 232, + "startLine": 402, "startColumn": 9, - "endLine": 232, - "endColumn": 15, + "endLine": 402, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "GetAtt atmConsumer2LambdaB7E263A7.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "atmConsumer2LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer2LambdaRuleF5729F59774A4AE8", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 235, + "startLine": 408, "startColumn": 9, - "endLine": 235, - "endColumn": 26, + "endLine": 408, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -44726,190 +44372,181 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTable6C95E38E", + "logicalId": "atmConsumer2LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer2LambdaRuleF5729F59774A4AE8", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 266, + "startLine": 409, "startColumn": 9, - "endLine": 266, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 409, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "GetAtt atmConsumer2LambdaRule5894DC8E.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", + "logicalId": "atmConsumer3LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer3LambdaRuleC926722A1B0365D4", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 283, + "startLine": 551, "startColumn": 9, - "endLine": 283, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 551, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", + "logicalId": "atmConsumer3LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer3LambdaRuleC926722A1B0365D4", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 286, + "startLine": 552, "startColumn": 9, - "endLine": 286, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 552, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt atmConsumer3Lambda880BEEDF.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", + "logicalId": "atmConsumer3LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer3LambdaRuleC926722A1B0365D4", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 297, + "startLine": 558, "startColumn": 9, - "endLine": 297, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 558, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", + "logicalId": "atmConsumer3LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer3LambdaRuleC926722A1B0365D4", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 300, + "startLine": 559, "startColumn": 9, - "endLine": 300, - "endColumn": 30, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 559, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt atmConsumer3LambdaRule41A00643.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", + "logicalId": "EndpointDeployment318525DA98cf1fe46f6a8379cb8241a5e412a297", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 330, + "startLine": 633, "startColumn": 9, - "endLine": 330, - "endColumn": 22, + "endLine": 633, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcPublicSubnet1EIPD7E02669.AllocationId" + "resolutionSource": "Ref to 'EndpointEEF1FD8F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", + "logicalId": "EndpointDeploymentStageprodB78BEEA0", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 336, + "startLine": 650, "startColumn": 9, - "endLine": 336, - "endColumn": 18, + "endLine": 650, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'" + "resolutionSource": "Ref to 'EndpointEEF1FD8F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "EndpointDeploymentStageprodB78BEEA0", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 353, + "startLine": 656, "startColumn": 9, - "endLine": 353, + "endLine": 656, "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -44919,42 +44556,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "Endpointproxy39E2174E", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 354, + "startLine": 665, "startColumn": 9, - "endLine": 354, - "endColumn": 15, + "endLine": 665, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "GetAtt EndpointEEF1FD8F.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "Endpointproxy39E2174E", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 357, + "startLine": 671, "startColumn": 9, - "endLine": 357, - "endColumn": 26, + "endLine": 671, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -44964,189 +44603,177 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTable94F7E489", + "logicalId": "Endpointproxy39E2174E", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 388, + "startLine": 672, "startColumn": 9, - "endLine": 388, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 672, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'EndpointEEF1FD8F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "logicalId": "EndpointproxyANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANYproxyC2C9F151", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 405, + "startLine": 683, "startColumn": 9, - "endLine": 405, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 683, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "logicalId": "EndpointproxyANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANYproxyC2C9F151", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 408, + "startLine": 684, "startColumn": 9, - "endLine": 408, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 684, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt atmProducerLambda71029F8F.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", + "logicalId": "EndpointproxyANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANYproxyC2C9F151", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 419, + "startLine": 690, "startColumn": 9, - "endLine": 419, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 690, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", + "logicalId": "EndpointproxyANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANYproxyC2C9F151", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 422, + "startLine": 691, "startColumn": 9, - "endLine": 422, - "endColumn": 30, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 691, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/{ref:EndpointDeploymentStageprodB78BEEA0}/*/*)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2NATGateway9182C01D", + "logicalId": "EndpointproxyANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYproxy14296A4D", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 452, + "startLine": 727, "startColumn": 9, - "endLine": 452, - "endColumn": 22, + "endLine": 727, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcPublicSubnet2EIP3C605A87.AllocationId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2NATGateway9182C01D", + "logicalId": "EndpointproxyANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYproxy14296A4D", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 458, + "startLine": 728, "startColumn": 9, - "endLine": 458, - "endColumn": 18, + "endLine": 728, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'" + "resolutionSource": "GetAtt atmProducerLambda71029F8F.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "EndpointproxyANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYproxy14296A4D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 475, + "startLine": 734, "startColumn": 9, - "endLine": 475, + "endLine": 734, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -45157,42 +44784,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "EndpointproxyANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYproxy14296A4D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 476, + "startLine": 735, "startColumn": 9, - "endLine": 476, - "endColumn": 15, + "endLine": 735, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/test-invoke-stage/*/*)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "EndpointproxyANYC09721C5", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 479, + "startLine": 767, "startColumn": 9, - "endLine": 479, - "endColumn": 26, + "endLine": 767, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -45202,122 +44830,112 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableB2C5B500", + "logicalId": "EndpointproxyANYC09721C5", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 510, + "startLine": 768, "startColumn": 9, - "endLine": 510, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 768, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'Endpointproxy39E2174E'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", + "logicalId": "EndpointproxyANYC09721C5", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 527, + "startLine": 771, "startColumn": 9, - "endLine": 527, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 771, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "Ref to 'EndpointEEF1FD8F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", + "logicalId": "EndpointANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANY2B0F1701", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 530, + "startLine": 810, "startColumn": 9, - "endLine": 530, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 810, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1Subnet536B997A'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "logicalId": "EndpointANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANY2B0F1701", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 541, + "startLine": 811, "startColumn": 9, - "endLine": 541, + "endLine": 811, "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'" + "resolutionSource": "GetAtt atmProducerLambda71029F8F.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "logicalId": "EndpointANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANY2B0F1701", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 544, + "startLine": 817, "startColumn": 9, - "endLine": 544, - "endColumn": 30, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 817, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -45327,429 +44945,628 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "EndpointANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANY2B0F1701", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 556, + "startLine": 818, "startColumn": 9, - "endLine": 556, + "endLine": 818, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/{ref:EndpointDeploymentStageprodB78BEEA0}/*/)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "EndpointANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYFFED7414", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 557, + "startLine": 854, "startColumn": 9, - "endLine": 557, - "endColumn": 15, + "endLine": 854, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "EndpointANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYFFED7414", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 560, + "startLine": 855, "startColumn": 9, - "endLine": 560, - "endColumn": 26, + "endLine": 855, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt atmProducerLambda71029F8F.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableA678073B", + "logicalId": "EndpointANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYFFED7414", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 591, + "startLine": 861, "startColumn": 9, - "endLine": 591, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 861, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", + "logicalId": "EndpointANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYFFED7414", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 608, + "startLine": 862, "startColumn": 9, - "endLine": 608, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 862, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/test-invoke-stage/*/)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", + "logicalId": "EndpointANY485C938B", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 611, + "startLine": 894, "startColumn": 9, - "endLine": 611, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 894, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2Subnet3788AAA1'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", + "logicalId": "EndpointANY485C938B", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 622, + "startLine": 895, "startColumn": 9, - "endLine": 622, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 895, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'" + "resolutionSource": "GetAtt EndpointEEF1FD8F.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", + "logicalId": "EndpointANY485C938B", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 625, + "startLine": 901, "startColumn": 9, - "endLine": 625, - "endColumn": 30, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 901, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'EndpointEEF1FD8F'" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'atmProducerLambdaServiceRoleEF3D6079' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcVPCGWBF912B6E", + "logicalId": "atmProducerLambdaServiceRoleEF3D6079", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 651, - "startColumn": 9, - "endLine": 651, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Resource 'atmProducerLambda71029F8F' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefinition8E3B365E", + "logicalId": "atmProducerLambda71029F8F", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 745, - "startColumn": 9, - "endLine": 745, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 63, + "startColumn": 7, + "endLine": 63, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Resource 'atmConsumer1LambdaServiceRole70132707' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefinition8E3B365E", + "logicalId": "atmConsumer1LambdaServiceRole70132707", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 794, - "startColumn": 9, - "endLine": 794, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 123, + "startColumn": 7, + "endLine": 123, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'atmConsumer1LambdaC3C4DA46' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefinition8E3B365E", + "logicalId": "atmConsumer1LambdaC3C4DA46", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ExecutionRoleArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 795, - "startColumn": 9, - "endLine": 795, - "endColumn": 26, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateTaskDefinitionExecutionRoleE69A8E33.Arn" - } + "startLine": 157, + "startColumn": 7, + "endLine": 157, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Resource 'atmConsumer1LambdaRuleC1D6BC2F' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefinition8E3B365E", + "logicalId": "atmConsumer1LambdaRuleC1D6BC2F", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 801, - "startColumn": 9, - "endLine": 801, - "endColumn": 16, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 216, + "startColumn": 7, + "endLine": 216, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Resource 'atmConsumer2LambdaServiceRole130B888D' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefinition8E3B365E", + "logicalId": "atmConsumer2LambdaServiceRole130B888D", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 802, - "startColumn": 9, - "endLine": 802, - "endColumn": 16, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 272, + "startColumn": 7, + "endLine": 272, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Resource 'atmConsumer2LambdaB7E263A7' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefinition8E3B365E", + "logicalId": "atmConsumer2LambdaB7E263A7", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 803, - "startColumn": 9, - "endLine": 803, - "endColumn": 21, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 306, + "startColumn": 7, + "endLine": 306, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Resource 'atmConsumer2LambdaRule5894DC8E' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefinition8E3B365E", + "logicalId": "atmConsumer2LambdaRule5894DC8E", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 804, - "startColumn": 9, - "endLine": 804, - "endColumn": 33, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 365, + "startColumn": 7, + "endLine": 365, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'atmConsumer3LambdaServiceRoleCF9BAEA7' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefinition8E3B365E", + "logicalId": "atmConsumer3LambdaServiceRoleCF9BAEA7", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.TaskRoleArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 807, - "startColumn": 9, - "endLine": 807, - "endColumn": 21, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateTaskDefinitionTaskRoleE3C2BCAA.Arn" - } + "startLine": 422, + "startColumn": 7, + "endLine": 422, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'atmConsumer3Lambda880BEEDF' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "extractLambdaHandlerSqsEventSourceTheEventbridgeEtlStacknewObjectInLandingBucketEventQueueA6103BFC894EEFC5", + "logicalId": "atmConsumer3Lambda880BEEDF", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.EventSourceArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1107, - "startColumn": 9, - "endLine": 1107, - "endColumn": 24, + "startLine": 456, + "startColumn": 7, + "endLine": 456, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'atmConsumer3LambdaRule41A00643' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "atmConsumer3LambdaRule41A00643", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 515, + "startColumn": 7, + "endLine": 515, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'EndpointEEF1FD8F' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "EndpointEEF1FD8F", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 572, + "startColumn": 7, + "endLine": 572, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'EndpointCloudWatchRoleC3C64E0F' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "EndpointCloudWatchRoleC3C64E0F", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 581, + "startColumn": 7, + "endLine": 581, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'EndpointDeploymentStageprodB78BEEA0' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "EndpointDeploymentStageprodB78BEEA0", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Stage" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 649, + "startColumn": 7, + "endLine": 649, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/pat-the-eventbridge-circuit-breaker--TheEventbridgeCircuitBreakerStack.template.json": { + "filePath": "cdk/pat-the-eventbridge-circuit-breaker--TheEventbridgeCircuitBreakerStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 22, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 4, + "informational": 42, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "WebserviceIntegrationLambdaHandler5E349AB7", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 213, + "startColumn": 9, + "endLine": 213, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } + }, + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ErrorLambdaHandler4224322A", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 365, + "startColumn": 9, + "endLine": 365, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParameters0641c2be6bec286d59c7c75ed1e4ce6e7dc5be0e4a14b52b1088d92b3977f68eArtifactHash7779B76D' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "AssetParameters0641c2be6bec286d59c7c75ed1e4ce6e7dc5be0e4a14b52b1088d92b3977f68eArtifactHash7779B76D", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/AssetParameters0641c2be6bec286d59c7c75ed1e4ce6e7dc5be0e4a14b52b1088d92b3977f68eArtifactHash7779B76D", + "category": "Best Practice", + "startLine": 821, + "startColumn": 5, + "endLine": 821, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParameters73ddeceb533c98a62d83046532b46a5c3457eefa2ea3fc5c6816dfd09424e4a2ArtifactHash5AB686F1' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "AssetParameters73ddeceb533c98a62d83046532b46a5c3457eefa2ea3fc5c6816dfd09424e4a2ArtifactHash5AB686F1", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/AssetParameters73ddeceb533c98a62d83046532b46a5c3457eefa2ea3fc5c6816dfd09424e4a2ArtifactHash5AB686F1", + "category": "Best Practice", + "startLine": 833, + "startColumn": 5, + "endLine": 833, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'WebserviceIntegrationLambdaHandlerServiceRole851361F8' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "WebserviceIntegrationLambdaHandler5E349AB7", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 216, + "startColumn": 7, + "endLine": 216, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'ErrorLambdaHandlerServiceRole5D9F8D61' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ErrorLambdaHandler4224322A", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 368, + "startColumn": 7, + "endLine": 368, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CircuitBreaker4FAEA3DB", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.KeySchema", + "category": "Best Practice", + "startLine": 6, + "startColumn": 9, + "endLine": 6, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt newObjectInLandingBucketEventQueue67CBE2F2.Arn" + "lifecycle": "conditional-create-only" } }, { @@ -45758,15 +45575,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "transformRuleAllowEventRuleTheEventbridgeEtlStacktransformRuleF338DDCD2082D030", + "logicalId": "webserviceErrorRuleAllowEventRuleTheEventbridgeCircuitBreakerStackwebserviceErrorRule5CA5849AC9CE1102", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 1275, + "startLine": 415, "startColumn": 9, - "endLine": 1275, + "endLine": 415, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -45780,21 +45597,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "transformRuleAllowEventRuleTheEventbridgeEtlStacktransformRuleF338DDCD2082D030", + "logicalId": "webserviceErrorRuleAllowEventRuleTheEventbridgeCircuitBreakerStackwebserviceErrorRule5CA5849AC9CE1102", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 1276, + "startLine": 416, "startColumn": 9, - "endLine": 1276, + "endLine": 416, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt TransformLambdaHandler60ABE8EE.Arn" + "resolutionSource": "GetAtt ErrorLambdaHandler4224322A.Arn" } }, { @@ -45803,15 +45620,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "transformRuleAllowEventRuleTheEventbridgeEtlStacktransformRuleF338DDCD2082D030", + "logicalId": "webserviceErrorRuleAllowEventRuleTheEventbridgeCircuitBreakerStackwebserviceErrorRule5CA5849AC9CE1102", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 1282, + "startLine": 422, "startColumn": 9, - "endLine": 1282, + "endLine": 422, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -45825,84 +45642,88 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "transformRuleAllowEventRuleTheEventbridgeEtlStacktransformRuleF338DDCD2082D030", + "logicalId": "webserviceErrorRuleAllowEventRuleTheEventbridgeCircuitBreakerStackwebserviceErrorRule5CA5849AC9CE1102", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 1283, + "startLine": 423, "startColumn": 9, - "endLine": 1283, + "endLine": 423, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt transformRuleFEA34632.Arn" + "resolutionSource": "GetAtt webserviceErrorRuleCE293636.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "loadRuleAllowEventRuleTheEventbridgeEtlStackloadRuleE4CE7871DBE863BA", + "logicalId": "CircuitBreakerGatewayDeployment9F2A82FA10260421dc831e654354d72baa60bfb0", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 1484, + "startLine": 497, "startColumn": 9, - "endLine": 1484, - "endColumn": 16, + "endLine": 497, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "loadRuleAllowEventRuleTheEventbridgeEtlStackloadRuleE4CE7871DBE863BA", + "logicalId": "CircuitBreakerGatewayDeploymentStageprod84F6B9E5", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 1485, + "startLine": 514, "startColumn": 9, - "endLine": 1485, - "endColumn": 22, + "endLine": 514, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt LoadLambdaHandlerFDA03D53.Arn" + "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "loadRuleAllowEventRuleTheEventbridgeEtlStackloadRuleE4CE7871DBE863BA", + "logicalId": "CircuitBreakerGatewayDeploymentStageprod84F6B9E5", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 1491, + "startLine": 520, "startColumn": 9, - "endLine": 1491, + "endLine": 520, "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -45912,24 +45733,72 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "loadRuleAllowEventRuleTheEventbridgeEtlStackloadRuleE4CE7871DBE863BA", + "logicalId": "CircuitBreakerGatewayproxy1147E2CF", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 1492, + "startLine": 529, "startColumn": 9, - "endLine": 1492, + "endLine": 529, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt CircuitBreakerGateway122B123C.RootResourceId" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CircuitBreakerGatewayproxy1147E2CF", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Resource" + }, + "propertyPath": "Properties.PathPart", + "category": "Best Practice", + "startLine": 535, + "startColumn": 9, + "endLine": 535, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CircuitBreakerGatewayproxy1147E2CF", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Resource" + }, + "propertyPath": "Properties.RestApiId", + "category": "Best Practice", + "startLine": 536, + "startColumn": 9, + "endLine": 536, "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt loadRuleF0FAF418.Arn" + "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" } }, { @@ -45938,15 +45807,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "observeRuleAllowEventRuleTheEventbridgeEtlStackobserveRuleDD299C278D51D81A", + "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxy584EF780", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 1626, + "startLine": 547, "startColumn": 9, - "endLine": 1626, + "endLine": 547, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -45960,21 +45829,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "observeRuleAllowEventRuleTheEventbridgeEtlStackobserveRuleDD299C278D51D81A", + "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxy584EF780", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 1627, + "startLine": 548, "startColumn": 9, - "endLine": 1627, + "endLine": 548, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ObserveLambdaHandler685FFDBB.Arn" + "resolutionSource": "GetAtt WebserviceIntegrationLambdaHandler5E349AB7.Arn" } }, { @@ -45983,15 +45852,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "observeRuleAllowEventRuleTheEventbridgeEtlStackobserveRuleDD299C278D51D81A", + "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxy584EF780", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 1633, + "startLine": 554, "startColumn": 9, - "endLine": 1633, + "endLine": 554, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -46005,299 +45874,451 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "observeRuleAllowEventRuleTheEventbridgeEtlStackobserveRuleDD299C278D51D81A", + "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxy584EF780", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 1634, + "startLine": 555, "startColumn": 9, - "endLine": 1634, + "endLine": 555, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt observeRule9CF2E16C.Arn" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:CircuitBreakerGateway122B123C}/{ref:CircuitBreakerGatewayDeploymentStageprod84F6B9E5}/*/*)" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TransformedDataB0572681' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TransformedDataB0572681", + "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxyE09D3DF2", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 591, + "startColumn": 9, + "endLine": 591, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LandingBucket23FE90FB' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LandingBucket23FE90FB", + "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxyE09D3DF2", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 29, - "startColumn": 5, - "endLine": 29, - "endColumn": 27, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 592, + "startColumn": 9, + "endLine": 592, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt WebserviceIntegrationLambdaHandler5E349AB7.Arn" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'newObjectInLandingBucketEventQueue67CBE2F2' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "newObjectInLandingBucketEventQueue67CBE2F2", + "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxyE09D3DF2", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 75, - "startColumn": 7, - "endLine": 75, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 598, + "startColumn": 9, + "endLine": 598, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC", + "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxyE09D3DF2", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 129, - "startColumn": 7, - "endLine": 129, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, + "startLine": 599, + "startColumn": 9, + "endLine": 599, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:CircuitBreakerGateway122B123C}/test-invoke-stage/*/*)" + } + }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", + "logicalId": "CircuitBreakerGatewayproxyANY759880DB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 187, - "startColumn": 7, - "endLine": 187, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 631, + "startColumn": 9, + "endLine": 631, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Ec2ClusterEE43E89D' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterEE43E89D", + "logicalId": "CircuitBreakerGatewayproxyANY759880DB", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 662, - "startColumn": 5, - "endLine": 662, - "endColumn": 24, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 632, + "startColumn": 9, + "endLine": 632, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'CircuitBreakerGatewayproxy1147E2CF'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateTaskDefinitionTaskRoleE3C2BCAA' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefinitionTaskRoleE3C2BCAA", + "logicalId": "CircuitBreakerGatewayproxyANY759880DB", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 670, - "startColumn": 7, - "endLine": 670, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 635, + "startColumn": 9, + "endLine": 635, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateTaskDefinition8E3B365E' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefinition8E3B365E", + "logicalId": "CircuitBreakerGatewayANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY2D2F06E0", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 744, - "startColumn": 7, - "endLine": 744, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 674, + "startColumn": 9, + "endLine": 674, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateTaskDefinitionAppContainerLogGroup20407D7C' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefinitionAppContainerLogGroup20407D7C", + "logicalId": "CircuitBreakerGatewayANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY2D2F06E0", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 820, - "startColumn": 7, - "endLine": 820, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 675, + "startColumn": 9, + "endLine": 675, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt WebserviceIntegrationLambdaHandler5E349AB7.Arn" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateTaskDefinitionExecutionRoleE69A8E33' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefinitionExecutionRoleE69A8E33", + "logicalId": "CircuitBreakerGatewayANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY2D2F06E0", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 831, - "startColumn": 7, - "endLine": 831, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 681, + "startColumn": 9, + "endLine": 681, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'extractLambdaHandlerServiceRole8A50F829' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "extractLambdaHandlerServiceRole8A50F829", + "logicalId": "CircuitBreakerGatewayANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY2D2F06E0", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 916, - "startColumn": 7, - "endLine": 916, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 682, + "startColumn": 9, + "endLine": 682, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:CircuitBreakerGateway122B123C}/{ref:CircuitBreakerGatewayDeploymentStageprod84F6B9E5}/*/)" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'extractLambdaHandlerD06B8F09' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "extractLambdaHandlerD06B8F09", + "logicalId": "CircuitBreakerGatewayANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY33532EB9", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 1015, - "startColumn": 7, - "endLine": 1015, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 718, + "startColumn": 9, + "endLine": 718, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'extractLambdaHandlerSqsEventSourceTheEventbridgeEtlStacknewObjectInLandingBucketEventQueueA6103BFC894EEFC5' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "extractLambdaHandlerSqsEventSourceTheEventbridgeEtlStacknewObjectInLandingBucketEventQueueA6103BFC894EEFC5", + "logicalId": "CircuitBreakerGatewayANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY33532EB9", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 1103, - "startColumn": 7, - "endLine": 1103, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 719, + "startColumn": 9, + "endLine": 719, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt WebserviceIntegrationLambdaHandler5E349AB7.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CircuitBreakerGatewayANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY33532EB9", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 725, + "startColumn": 9, + "endLine": 725, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CircuitBreakerGatewayANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY33532EB9", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.SourceArn", + "category": "Best Practice", + "startLine": 726, + "startColumn": 9, + "endLine": 726, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:CircuitBreakerGateway122B123C}/test-invoke-stage/*/)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CircuitBreakerGatewayANYE076316B", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" + }, + "propertyPath": "Properties.HttpMethod", + "category": "Best Practice", + "startLine": 758, + "startColumn": 9, + "endLine": 758, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CircuitBreakerGatewayANYE076316B", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" + }, + "propertyPath": "Properties.ResourceId", + "category": "Best Practice", + "startLine": 759, + "startColumn": 9, + "endLine": 759, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt CircuitBreakerGateway122B123C.RootResourceId" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CircuitBreakerGatewayANYE076316B", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" + }, + "propertyPath": "Properties.RestApiId", + "category": "Best Practice", + "startLine": 765, + "startColumn": 9, + "endLine": 765, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TransformLambdaHandlerServiceRole710C039E' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'CircuitBreaker4FAEA3DB' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TransformLambdaHandlerServiceRole710C039E", + "logicalId": "CircuitBreaker4FAEA3DB", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1120, + "startLine": 5, "startColumn": 7, - "endLine": 1120, + "endLine": 5, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -46305,19 +46326,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TransformLambdaHandler60ABE8EE' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'WebserviceIntegrationLambdaHandlerServiceRole851361F8' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TransformLambdaHandler60ABE8EE", + "logicalId": "WebserviceIntegrationLambdaHandlerServiceRole851361F8", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1178, + "startLine": 69, "startColumn": 7, - "endLine": 1178, + "endLine": 69, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -46325,19 +46346,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'transformRuleFEA34632' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Resource 'WebserviceIntegrationLambdaHandler5E349AB7' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "transformRuleFEA34632", + "logicalId": "WebserviceIntegrationLambdaHandler5E349AB7", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1240, + "startLine": 160, "startColumn": 7, - "endLine": 1240, + "endLine": 160, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -46345,19 +46366,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LoadLambdaHandlerServiceRole83E61748' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'ErrorLambdaHandlerServiceRole5D9F8D61' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LoadLambdaHandlerServiceRole83E61748", + "logicalId": "ErrorLambdaHandlerServiceRole5D9F8D61", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1296, + "startLine": 228, "startColumn": 7, - "endLine": 1296, + "endLine": 228, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -46365,19 +46386,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LoadLambdaHandlerFDA03D53' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'ErrorLambdaHandler4224322A' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LoadLambdaHandlerFDA03D53", + "logicalId": "ErrorLambdaHandler4224322A", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1380, + "startLine": 312, "startColumn": 7, - "endLine": 1380, + "endLine": 312, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -46385,19 +46406,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'loadRuleF0FAF418' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Resource 'webserviceErrorRuleCE293636' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "loadRuleF0FAF418", + "logicalId": "webserviceErrorRuleCE293636", "entityType": "Resource", "resourceType": "AWS::Events::Rule" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1449, + "startLine": 380, "startColumn": 7, - "endLine": 1449, + "endLine": 380, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -46405,19 +46426,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ObserveLambdaHandlerServiceRole040C69BA' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'CircuitBreakerGateway122B123C' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ObserveLambdaHandlerServiceRole040C69BA", + "logicalId": "CircuitBreakerGateway122B123C", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::RestApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1505, + "startLine": 436, "startColumn": 7, - "endLine": 1505, + "endLine": 436, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -46425,19 +46446,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ObserveLambdaHandler685FFDBB' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'CircuitBreakerGatewayCloudWatchRole934DF897' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ObserveLambdaHandler685FFDBB", + "logicalId": "CircuitBreakerGatewayCloudWatchRole934DF897", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1539, + "startLine": 445, "startColumn": 7, - "endLine": 1539, + "endLine": 445, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -46445,35 +46466,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'observeRule9CF2E16C' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Resource 'CircuitBreakerGatewayDeploymentStageprod84F6B9E5' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "observeRule9CF2E16C", + "logicalId": "CircuitBreakerGatewayDeploymentStageprod84F6B9E5", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1599, + "startLine": 513, "startColumn": 7, - "endLine": 1599, + "endLine": 513, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/pat-the-lambda-circuit-breaker--TheLambdaCircuitBreakerStack.template.json": { - "filePath": "cdk/pat-the-lambda-circuit-breaker--TheLambdaCircuitBreakerStack.template.json", + "cdk/pat-the-eventbridge-etl--TheEventbridgeEtlStack.template.json": { + "filePath": "cdk/pat-the-eventbridge-etl--TheEventbridgeEtlStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 10, + "resourcesScanned": 57, "counts": { "fatal": 0, - "errors": 1, - "warnings": 2, - "informational": 15, + "errors": 5, + "warnings": 10, + "informational": 86, "debug": 0 }, "suppressed": 0, @@ -46484,71 +46505,372 @@ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'nodejs10.x' was deprecated on '2021-07-30'. Creation was disabled on '2021-07-30', and updates were disabled on '2022-02-14'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "UnreliableLambdaHandlerD4A4DED9", + "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 163, + "startLine": 199, "startColumn": 9, - "endLine": 163, + "endLine": 199, "endColumn": 17, "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", + "actualValue": "nodejs10.x", "lifecycle": "end-of-life" } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AssetParameters10055657af1eff76a705caf565ca43f7d08fe1e63f74c33f37aedad342e3f011ArtifactHash90D8A3A6' is not referenced anywhere in the template", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "AssetParameters10055657af1eff76a705caf565ca43f7d08fe1e63f74c33f37aedad342e3f011ArtifactHash90D8A3A6", - "entityType": "Parameter" + "logicalId": "extractLambdaHandlerD06B8F09", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/AssetParameters10055657af1eff76a705caf565ca43f7d08fe1e63f74c33f37aedad342e3f011ArtifactHash90D8A3A6", - "category": "Best Practice", - "startLine": 300, - "startColumn": 5, - "endLine": 300, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1089, + "startColumn": 9, + "endLine": 1089, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'UnreliableLambdaHandlerServiceRole955A5CFD' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "UnreliableLambdaHandlerD4A4DED9", + "logicalId": "TransformLambdaHandler60ABE8EE", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1225, + "startColumn": 9, + "endLine": 1225, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } + }, + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "LoadLambdaHandlerFDA03D53", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1434, + "startColumn": 9, + "endLine": 1434, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } + }, + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ObserveLambdaHandler685FFDBB", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1585, + "startColumn": 9, + "endLine": 1585, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParameters63e74618e2833e3346e7223ed172c961dfc5f22e47a02bfd8e38e313b20b30dfArtifactHash20D89EF6' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "AssetParameters63e74618e2833e3346e7223ed172c961dfc5f22e47a02bfd8e38e313b20b30dfArtifactHash20D89EF6", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/AssetParameters63e74618e2833e3346e7223ed172c961dfc5f22e47a02bfd8e38e313b20b30dfArtifactHash20D89EF6", + "category": "Best Practice", + "startLine": 1665, + "startColumn": 5, + "endLine": 1665, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParametersa20da5839df7117061434d7118e435f02499368b8c588c15b84f94ecfb7732f2ArtifactHash202B02F0' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "AssetParametersa20da5839df7117061434d7118e435f02499368b8c588c15b84f94ecfb7732f2ArtifactHash202B02F0", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/AssetParametersa20da5839df7117061434d7118e435f02499368b8c588c15b84f94ecfb7732f2ArtifactHash202B02F0", + "category": "Best Practice", + "startLine": 1677, + "startColumn": 5, + "endLine": 1677, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParameters7239a648a454455008a419ce89d65c3755bf0e160fd4f91f8d3b4d16c5598d41ArtifactHash40B763DF' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "AssetParameters7239a648a454455008a419ce89d65c3755bf0e160fd4f91f8d3b4d16c5598d41ArtifactHash40B763DF", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/AssetParameters7239a648a454455008a419ce89d65c3755bf0e160fd4f91f8d3b4d16c5598d41ArtifactHash40B763DF", + "category": "Best Practice", + "startLine": 1689, + "startColumn": 5, + "endLine": 1689, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParameters21981f2afd308d5c462488a4129b87ce9d6ca2227128358b2d6e11e7d9f1c4b6ArtifactHashD80D6D6D' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "AssetParameters21981f2afd308d5c462488a4129b87ce9d6ca2227128358b2d6e11e7d9f1c4b6ArtifactHashD80D6D6D", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/AssetParameters21981f2afd308d5c462488a4129b87ce9d6ca2227128358b2d6e11e7d9f1c4b6ArtifactHashD80D6D6D", + "category": "Best Practice", + "startLine": 1701, + "startColumn": 5, + "endLine": 1701, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'newObjectInLandingBucketEventQueue67CBE2F2' dependency already enforced by a 'GetAtt' at 'Properties.NotificationConfiguration.QueueConfigurations.0.QueueArn'", + "source": "CFN_LINT", + "entity": { + "logicalId": "LandingBucketNotificationsEF1634C6", + "entityType": "Resource", + "resourceType": "Custom::S3BucketNotifications" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 65, + "startColumn": 7, + "endLine": 65, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 165, + "startLine": 202, "startColumn": 7, - "endLine": 165, + "endLine": 202, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'extractLambdaHandlerServiceRole8A50F829' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "extractLambdaHandlerD06B8F09", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1091, + "startColumn": 7, + "endLine": 1091, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'TransformLambdaHandlerServiceRole710C039E' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "TransformLambdaHandler60ABE8EE", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1228, + "startColumn": 7, + "endLine": 1228, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'LoadLambdaHandlerServiceRole83E61748' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "LoadLambdaHandlerFDA03D53", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1437, + "startColumn": 7, + "endLine": 1437, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'ObserveLambdaHandlerServiceRole040C69BA' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ObserveLambdaHandler685FFDBB", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1588, + "startColumn": 7, + "endLine": 1588, "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for 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": "newObjectInLandingBucketEventQueue67CBE2F2", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "category": "Best Practice", + "startLine": 73, + "startColumn": 5, + "endLine": 73, + "endColumn": 48, + "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": "newObjectInLandingBucketEventQueue67CBE2F2", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "category": "Best Practice", + "startLine": 73, + "startColumn": 5, + "endLine": 73, + "endColumn": 48, + "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": "newObjectInLandingBucketEventQueue67CBE2F2", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 75, + "startColumn": 7, + "endLine": 75, + "endColumn": 18, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerTable02DAD2B8", + "logicalId": "TransformedDataB0572681", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, @@ -46567,19 +46889,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ProtocolType' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGateway122B123C", + "logicalId": "Vpc8378EB38", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Api" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.ProtocolType", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 179, + "startLine": 213, "startColumn": 9, - "endLine": 179, - "endColumn": 22, + "endLine": 213, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -46589,19 +46911,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayDefaultRouteTheLambdaCircuitBreakerStackCircuitBreakerGatewayDefaultRoute883D7748Permission8BF71621", + "logicalId": "Vpc8378EB38", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 188, + "startLine": 216, "startColumn": 9, - "endLine": 188, - "endColumn": 16, + "endLine": 216, + "endColumn": 25, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 231, + "startColumn": 9, + "endLine": 231, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -46611,42 +46955,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayDefaultRouteTheLambdaCircuitBreakerStackCircuitBreakerGatewayDefaultRoute883D7748Permission8BF71621", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 189, + "startLine": 232, "startColumn": 9, - "endLine": 189, - "endColumn": 22, + "endLine": 232, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt UnreliableLambdaHandlerD4A4DED9.Arn" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayDefaultRouteTheLambdaCircuitBreakerStackCircuitBreakerGatewayDefaultRoute883D7748Permission8BF71621", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 195, + "startLine": 235, "startColumn": 9, - "endLine": 195, - "endColumn": 19, + "endLine": 235, + "endColumn": 26, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -46656,115 +47000,122 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayDefaultRouteTheLambdaCircuitBreakerStackCircuitBreakerGatewayDefaultRoute883D7748Permission8BF71621", + "logicalId": "VpcPublicSubnet1RouteTable6C95E38E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 196, + "startLine": 266, "startColumn": 9, - "endLine": 196, - "endColumn": 19, + "endLine": 266, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:CircuitBreakerGateway122B123C}/*/*)" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayDefaultRouteDefaultRouteIntegrationF55AEBDB", + "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Integration" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 228, + "startLine": 283, "startColumn": 9, - "endLine": 228, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 283, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" + "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayDefaultRouteCB8326BD", + "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Route" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 247, + "startLine": 286, "startColumn": 9, - "endLine": 247, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", + "endLine": 286, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" + "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayDefaultStageC51956FB", + "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Stage" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 270, + "startLine": 297, "startColumn": 9, - "endLine": 270, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", + "endLine": 297, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" + "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayDefaultStageC51956FB", + "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Stage" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 273, + "startLine": 300, "startColumn": 9, - "endLine": 273, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", + "endLine": 300, + "endColumn": 30, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -46772,636 +47123,1015 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CircuitBreakerTable02DAD2B8' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerTable02DAD2B8", + "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 330, + "startColumn": 9, + "endLine": 330, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt VpcPublicSubnet1EIPD7E02669.AllocationId" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'UnreliableLambdaHandlerServiceRole955A5CFD' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UnreliableLambdaHandlerServiceRole955A5CFD", + "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 31, - "startColumn": 7, - "endLine": 31, + "startLine": 336, + "startColumn": 9, + "endLine": 336, "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'UnreliableLambdaHandlerD4A4DED9' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UnreliableLambdaHandlerD4A4DED9", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 110, - "startColumn": 7, - "endLine": 110, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 353, + "startColumn": 9, + "endLine": 353, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CircuitBreakerGateway122B123C' of type 'AWS::ApiGatewayV2::Api' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGateway122B123C", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Api" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 177, - "startColumn": 7, - "endLine": 177, + "startLine": 354, + "startColumn": 9, + "endLine": 354, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 357, + "startColumn": 9, + "endLine": 357, + "endColumn": 26, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "VpcPublicSubnet2RouteTable94F7E489", + "entityType": "Resource", + "resourceType": "AWS::EC2::RouteTable" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 388, + "startColumn": 9, + "endLine": 388, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 405, + "startColumn": 9, + "endLine": 405, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 408, + "startColumn": 9, + "endLine": 408, "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CircuitBreakerGatewayDefaultStageC51956FB' of type 'AWS::ApiGatewayV2::Stage' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayDefaultStageC51956FB", + "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Stage" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 269, - "startColumn": 7, - "endLine": 269, + "startLine": 419, + "startColumn": 9, + "endLine": 419, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" + }, + "propertyPath": "Properties.DestinationCidrBlock", + "category": "Best Practice", + "startLine": 422, + "startColumn": 9, + "endLine": 422, + "endColumn": 30, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "VpcPublicSubnet2NATGateway9182C01D", + "entityType": "Resource", + "resourceType": "AWS::EC2::NatGateway" + }, + "propertyPath": "Properties.AllocationId", + "category": "Best Practice", + "startLine": 452, + "startColumn": 9, + "endLine": 452, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt VpcPublicSubnet2EIP3C605A87.AllocationId" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "VpcPublicSubnet2NATGateway9182C01D", + "entityType": "Resource", + "resourceType": "AWS::EC2::NatGateway" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 458, + "startColumn": 9, + "endLine": 458, "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/pat-the-saga-stepfunction--TheSagaStepfunctionSingleTableStack.template.json": { - "filePath": "cdk/pat-the-saga-stepfunction--TheSagaStepfunctionSingleTableStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 44, - "counts": { - "fatal": 0, - "errors": 9, - "warnings": 11, - "informational": 53, - "debug": 0 + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "reserveFlightLambdaHandler3C75473D", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 171, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 475, "startColumn": 9, - "endLine": 171, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "endLine": 475, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" + "lifecycle": "create-only" } }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "confirmFlightLambdaHandler96C3663F", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 317, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 476, "startColumn": 9, - "endLine": 317, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "endLine": 476, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "cancelFlightLambdaHandler437EEC76", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 463, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 479, "startColumn": 9, - "endLine": 463, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "endLine": 479, + "endColumn": 26, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" + "lifecycle": "create-only" } }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "reserveHotelLambdaHandler020AE24A", + "logicalId": "VpcPrivateSubnet1RouteTableB2C5B500", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 609, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 510, "startColumn": 9, - "endLine": 609, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "endLine": 510, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "confirmHotelLambdaHandler882ACF2D", + "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 755, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 527, "startColumn": 9, - "endLine": 755, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "endLine": 527, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "cancelHotelLambdaHandler09F13EF6", + "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 901, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 530, "startColumn": 9, - "endLine": 901, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "endLine": 530, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet1Subnet536B997A'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "takePaymentLambdaHandlerB96529D4", + "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 1047, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 541, "startColumn": 9, - "endLine": 1047, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "endLine": 541, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'" } }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "refundPaymentLambdaHandler932D11D5", + "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 1193, + "propertyPath": "Properties.DestinationCidrBlock", + "category": "Best Practice", + "startLine": 544, "startColumn": 9, - "endLine": 1193, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "endLine": 544, + "endColumn": 30, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" + "lifecycle": "create-only" } }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "sagaLambdaHandlerFC24742F", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 1540, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 556, "startColumn": 9, - "endLine": 1540, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "endLine": 556, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" + "lifecycle": "create-only" } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AssetParameters4278db4a1a47077b6c8d42c246c4d59d434f12973a4fcecd1a62b809ce2aed1eArtifactHash48F8E85F' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AssetParameters4278db4a1a47077b6c8d42c246c4d59d434f12973a4fcecd1a62b809ce2aed1eArtifactHash48F8E85F", - "entityType": "Parameter" + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Parameters/AssetParameters4278db4a1a47077b6c8d42c246c4d59d434f12973a4fcecd1a62b809ce2aed1eArtifactHash48F8E85F", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1939, - "startColumn": 5, - "endLine": 1939, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 557, + "startColumn": 9, + "endLine": 557, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'reserveFlightLambdaHandlerServiceRole985C586D' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "reserveFlightLambdaHandler3C75473D", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 173, - "startColumn": 7, - "endLine": 173, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 560, + "startColumn": 9, + "endLine": 560, + "endColumn": 26, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'confirmFlightLambdaHandlerServiceRole45F91B6E' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "confirmFlightLambdaHandler96C3663F", + "logicalId": "VpcPrivateSubnet2RouteTableA678073B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 319, - "startColumn": 7, - "endLine": 319, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 591, + "startColumn": 9, + "endLine": 591, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'cancelFlightLambdaHandlerServiceRole7F2439CB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "cancelFlightLambdaHandler437EEC76", + "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 465, - "startColumn": 7, - "endLine": 465, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 608, + "startColumn": 9, + "endLine": 608, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'reserveHotelLambdaHandlerServiceRole452F23B7' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "reserveHotelLambdaHandler020AE24A", + "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", "startLine": 611, - "startColumn": 7, + "startColumn": 9, "endLine": 611, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet2Subnet3788AAA1'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'confirmHotelLambdaHandlerServiceRoleD5F8F90E' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "confirmHotelLambdaHandler882ACF2D", + "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 757, - "startColumn": 7, - "endLine": 757, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 622, + "startColumn": 9, + "endLine": 622, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'cancelHotelLambdaHandlerServiceRole4815D152' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "cancelHotelLambdaHandler09F13EF6", + "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 903, - "startColumn": 7, - "endLine": 903, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 625, + "startColumn": 9, + "endLine": 625, + "endColumn": 30, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'takePaymentLambdaHandlerServiceRole56CA2808' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "takePaymentLambdaHandlerB96529D4", + "logicalId": "VpcVPCGWBF912B6E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1049, - "startColumn": 7, - "endLine": 1049, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 651, + "startColumn": 9, + "endLine": 651, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'refundPaymentLambdaHandlerServiceRole62F72F0D' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "refundPaymentLambdaHandler932D11D5", + "logicalId": "FargateTaskDefinition8E3B365E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 745, + "startColumn": 9, + "endLine": 745, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FargateTaskDefinition8E3B365E", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Cpu", + "category": "Best Practice", + "startLine": 794, + "startColumn": 9, + "endLine": 794, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FargateTaskDefinition8E3B365E", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.ExecutionRoleArn", + "category": "Best Practice", + "startLine": 795, + "startColumn": 9, + "endLine": 795, + "endColumn": 26, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FargateTaskDefinitionExecutionRoleE69A8E33.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FargateTaskDefinition8E3B365E", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Family", + "category": "Best Practice", + "startLine": 801, + "startColumn": 9, + "endLine": 801, + "endColumn": 16, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FargateTaskDefinition8E3B365E", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Memory", + "category": "Best Practice", + "startLine": 802, + "startColumn": 9, + "endLine": 802, + "endColumn": 16, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FargateTaskDefinition8E3B365E", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.NetworkMode", + "category": "Best Practice", + "startLine": 803, + "startColumn": 9, + "endLine": 803, + "endColumn": 21, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FargateTaskDefinition8E3B365E", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.RequiresCompatibilities", + "category": "Best Practice", + "startLine": 804, + "startColumn": 9, + "endLine": 804, + "endColumn": 33, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FargateTaskDefinition8E3B365E", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 1195, - "startColumn": 7, - "endLine": 1195, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 807, + "startColumn": 9, + "endLine": 807, + "endColumn": 21, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FargateTaskDefinitionTaskRoleE3C2BCAA.Arn" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'BookingSagaRole82982544' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BookingSagaFA991213", + "logicalId": "extractLambdaHandlerSqsEventSourceTheEventbridgeEtlStacknewObjectInLandingBucketEventQueueA6103BFC894EEFC5", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.EventSourceArn", "category": "Best Practice", - "startLine": 1417, - "startColumn": 7, - "endLine": 1417, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1107, + "startColumn": 9, + "endLine": 1107, + "endColumn": 24, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt newObjectInLandingBucketEventQueue67CBE2F2.Arn" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'sagaLambdaHandlerServiceRole7EB685BD' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "sagaLambdaHandlerFC24742F", + "logicalId": "transformRuleAllowEventRuleTheEventbridgeEtlStacktransformRuleF338DDCD2082D030", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 1542, - "startColumn": 7, - "endLine": 1542, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1275, + "startColumn": 9, + "endLine": 1275, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BookingsB1C24132", + "logicalId": "transformRuleAllowEventRuleTheEventbridgeEtlStacktransformRuleF338DDCD2082D030", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 6, + "startLine": 1276, "startColumn": 9, - "endLine": 6, - "endColumn": 19, + "endLine": 1276, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt TransformLambdaHandler60ABE8EE.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableDeployment96972FE77ef5b9d25f9d7a35316435e48684bb49", + "logicalId": "transformRuleAllowEventRuleTheEventbridgeEtlStacktransformRuleF338DDCD2082D030", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 1615, + "startLine": 1282, "startColumn": 9, - "endLine": 1615, + "endLine": 1282, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'SagaPatternSingleTable288D85B3'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableDeploymentStageprod92F0690D", + "logicalId": "transformRuleAllowEventRuleTheEventbridgeEtlStacktransformRuleF338DDCD2082D030", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 1632, + "startLine": 1283, "startColumn": 9, - "endLine": 1632, + "endLine": 1283, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SagaPatternSingleTable288D85B3'" + "resolutionSource": "GetAtt transformRuleFEA34632.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableDeploymentStageprod92F0690D", + "logicalId": "loadRuleAllowEventRuleTheEventbridgeEtlStackloadRuleE4CE7871DBE863BA", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 1638, + "startLine": 1484, "startColumn": 9, - "endLine": 1638, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 1484, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -47411,44 +48141,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableproxy9F7D6084", + "logicalId": "loadRuleAllowEventRuleTheEventbridgeEtlStackloadRuleE4CE7871DBE863BA", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 1647, + "startLine": 1485, "startColumn": 9, - "endLine": 1647, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 1485, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt SagaPatternSingleTable288D85B3.RootResourceId" + "resolutionSource": "GetAtt LoadLambdaHandlerFDA03D53.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableproxy9F7D6084", + "logicalId": "loadRuleAllowEventRuleTheEventbridgeEtlStackloadRuleE4CE7871DBE863BA", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 1653, + "startLine": 1491, "startColumn": 9, - "endLine": 1653, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 1491, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -47458,25 +48186,24 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableproxy9F7D6084", + "logicalId": "loadRuleAllowEventRuleTheEventbridgeEtlStackloadRuleE4CE7871DBE863BA", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 1654, + "startLine": 1492, "startColumn": 9, - "endLine": 1654, + "endLine": 1492, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SagaPatternSingleTable288D85B3'" + "resolutionSource": "GetAtt loadRuleF0FAF418.Arn" } }, { @@ -47485,15 +48212,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyCC0ED567", + "logicalId": "observeRuleAllowEventRuleTheEventbridgeEtlStackobserveRuleDD299C278D51D81A", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 1665, + "startLine": 1626, "startColumn": 9, - "endLine": 1665, + "endLine": 1626, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -47507,21 +48234,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyCC0ED567", + "logicalId": "observeRuleAllowEventRuleTheEventbridgeEtlStackobserveRuleDD299C278D51D81A", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 1666, + "startLine": 1627, "startColumn": 9, - "endLine": 1666, + "endLine": 1627, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt sagaLambdaHandlerFC24742F.Arn" + "resolutionSource": "GetAtt ObserveLambdaHandler685FFDBB.Arn" } }, { @@ -47530,15 +48257,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyCC0ED567", + "logicalId": "observeRuleAllowEventRuleTheEventbridgeEtlStackobserveRuleDD299C278D51D81A", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 1672, + "startLine": 1633, "startColumn": 9, - "endLine": 1672, + "endLine": 1633, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -47552,272 +48279,585 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyCC0ED567", + "logicalId": "observeRuleAllowEventRuleTheEventbridgeEtlStackobserveRuleDD299C278D51D81A", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 1673, + "startLine": 1634, "startColumn": 9, - "endLine": 1673, + "endLine": 1634, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:SagaPatternSingleTable288D85B3}/{ref:SagaPatternSingleTableDeploymentStageprod92F0690D}/*/*)" + "resolutionSource": "GetAtt observeRule9CF2E16C.Arn" } }, { - "ruleId": "I9001", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TransformedDataB0572681' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "TransformedDataB0572681", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LandingBucket23FE90FB' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "LandingBucket23FE90FB", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 27, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'newObjectInLandingBucketEventQueue67CBE2F2' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "newObjectInLandingBucketEventQueue67CBE2F2", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 75, + "startColumn": 7, + "endLine": 75, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 129, + "startColumn": 7, + "endLine": 129, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 187, + "startColumn": 7, + "endLine": 187, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Ec2ClusterEE43E89D' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Ec2ClusterEE43E89D", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 662, + "startColumn": 5, + "endLine": 662, + "endColumn": 24, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FargateTaskDefinitionTaskRoleE3C2BCAA' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FargateTaskDefinitionTaskRoleE3C2BCAA", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 670, + "startColumn": 7, + "endLine": 670, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FargateTaskDefinition8E3B365E' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FargateTaskDefinition8E3B365E", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 744, + "startColumn": 7, + "endLine": 744, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FargateTaskDefinitionAppContainerLogGroup20407D7C' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FargateTaskDefinitionAppContainerLogGroup20407D7C", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 820, + "startColumn": 7, + "endLine": 820, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FargateTaskDefinitionExecutionRoleE69A8E33' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FargateTaskDefinitionExecutionRoleE69A8E33", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 831, + "startColumn": 7, + "endLine": 831, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'extractLambdaHandlerServiceRole8A50F829' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "extractLambdaHandlerServiceRole8A50F829", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 916, + "startColumn": 7, + "endLine": 916, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'extractLambdaHandlerD06B8F09' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "extractLambdaHandlerD06B8F09", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1015, + "startColumn": 7, + "endLine": 1015, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'extractLambdaHandlerSqsEventSourceTheEventbridgeEtlStacknewObjectInLandingBucketEventQueueA6103BFC894EEFC5' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "extractLambdaHandlerSqsEventSourceTheEventbridgeEtlStacknewObjectInLandingBucketEventQueueA6103BFC894EEFC5", + "entityType": "Resource", + "resourceType": "AWS::Lambda::EventSourceMapping" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1103, + "startColumn": 7, + "endLine": 1103, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TransformLambdaHandlerServiceRole710C039E' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "TransformLambdaHandlerServiceRole710C039E", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1120, + "startColumn": 7, + "endLine": 1120, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TransformLambdaHandler60ABE8EE' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "TransformLambdaHandler60ABE8EE", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1178, + "startColumn": 7, + "endLine": 1178, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Resource 'transformRuleFEA34632' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyFFAFB063", + "logicalId": "transformRuleFEA34632", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1709, - "startColumn": 9, - "endLine": 1709, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 1240, + "startColumn": 7, + "endLine": 1240, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'LoadLambdaHandlerServiceRole83E61748' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyFFAFB063", + "logicalId": "LoadLambdaHandlerServiceRole83E61748", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1710, - "startColumn": 9, - "endLine": 1710, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt sagaLambdaHandlerFC24742F.Arn" - } + "startLine": 1296, + "startColumn": 7, + "endLine": 1296, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Resource 'LoadLambdaHandlerFDA03D53' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyFFAFB063", + "logicalId": "LoadLambdaHandlerFDA03D53", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1716, - "startColumn": 9, - "endLine": 1716, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 1380, + "startColumn": 7, + "endLine": 1380, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'loadRuleF0FAF418' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyFFAFB063", + "logicalId": "loadRuleF0FAF418", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1717, - "startColumn": 9, - "endLine": 1717, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:SagaPatternSingleTable288D85B3}/test-invoke-stage/*/*)" - } + "startLine": 1449, + "startColumn": 7, + "endLine": 1449, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Resource 'ObserveLambdaHandlerServiceRole040C69BA' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableproxyANY8778A55C", + "logicalId": "ObserveLambdaHandlerServiceRole040C69BA", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1749, - "startColumn": 9, - "endLine": 1749, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 1505, + "startColumn": 7, + "endLine": 1505, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Resource 'ObserveLambdaHandler685FFDBB' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableproxyANY8778A55C", + "logicalId": "ObserveLambdaHandler685FFDBB", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1750, - "startColumn": 9, - "endLine": 1750, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'SagaPatternSingleTableproxy9F7D6084'" - } + "startLine": 1539, + "startColumn": 7, + "endLine": 1539, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'observeRule9CF2E16C' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableproxyANY8778A55C", + "logicalId": "observeRule9CF2E16C", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1753, - "startColumn": 9, - "endLine": 1753, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'SagaPatternSingleTable288D85B3'" - } + "startLine": 1599, + "startColumn": 7, + "endLine": 1599, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/pat-the-lambda-circuit-breaker--TheLambdaCircuitBreakerStack.template.json": { + "filePath": "cdk/pat-the-lambda-circuit-breaker--TheLambdaCircuitBreakerStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 10, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 2, + "informational": 15, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "SagaPatternSingleTableANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYF602862D", + "logicalId": "UnreliableLambdaHandlerD4A4DED9", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 1792, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 163, "startColumn": 9, - "endLine": 1792, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 163, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParameters10055657af1eff76a705caf565ca43f7d08fe1e63f74c33f37aedad342e3f011ArtifactHash90D8A3A6' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "SagaPatternSingleTableANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYF602862D", + "logicalId": "AssetParameters10055657af1eff76a705caf565ca43f7d08fe1e63f74c33f37aedad342e3f011ArtifactHash90D8A3A6", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/AssetParameters10055657af1eff76a705caf565ca43f7d08fe1e63f74c33f37aedad342e3f011ArtifactHash90D8A3A6", + "category": "Best Practice", + "startLine": 300, + "startColumn": 5, + "endLine": 300, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'UnreliableLambdaHandlerServiceRole955A5CFD' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "UnreliableLambdaHandlerD4A4DED9", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 1793, - "startColumn": 9, - "endLine": 1793, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt sagaLambdaHandlerFC24742F.Arn" - } + "startLine": 165, + "startColumn": 7, + "endLine": 165, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYF602862D", + "logicalId": "CircuitBreakerTable02DAD2B8", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 1799, + "startLine": 6, "startColumn": 9, - "endLine": 1799, + "endLine": 6, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'ProtocolType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYF602862D", + "logicalId": "CircuitBreakerGateway122B123C", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGatewayV2::Api" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.ProtocolType", "category": "Best Practice", - "startLine": 1800, + "startLine": 179, "startColumn": 9, - "endLine": 1800, - "endColumn": 19, + "endLine": 179, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:SagaPatternSingleTable288D85B3}/{ref:SagaPatternSingleTableDeploymentStageprod92F0690D}/*/)" + "lifecycle": "create-only" } }, { @@ -47826,15 +48866,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANY8FD1CF02", + "logicalId": "CircuitBreakerGatewayDefaultRouteTheLambdaCircuitBreakerStackCircuitBreakerGatewayDefaultRoute883D7748Permission8BF71621", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 1836, + "startLine": 188, "startColumn": 9, - "endLine": 1836, + "endLine": 188, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -47848,21 +48888,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANY8FD1CF02", + "logicalId": "CircuitBreakerGatewayDefaultRouteTheLambdaCircuitBreakerStackCircuitBreakerGatewayDefaultRoute883D7748Permission8BF71621", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 1837, + "startLine": 189, "startColumn": 9, - "endLine": 1837, + "endLine": 189, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt sagaLambdaHandlerFC24742F.Arn" + "resolutionSource": "GetAtt UnreliableLambdaHandlerD4A4DED9.Arn" } }, { @@ -47871,15 +48911,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANY8FD1CF02", + "logicalId": "CircuitBreakerGatewayDefaultRouteTheLambdaCircuitBreakerStackCircuitBreakerGatewayDefaultRoute883D7748Permission8BF71621", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 1843, + "startLine": 195, "startColumn": 9, - "endLine": 1843, + "endLine": 195, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -47893,270 +48933,134 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANY8FD1CF02", + "logicalId": "CircuitBreakerGatewayDefaultRouteTheLambdaCircuitBreakerStackCircuitBreakerGatewayDefaultRoute883D7748Permission8BF71621", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 1844, + "startLine": 196, "startColumn": 9, - "endLine": 1844, + "endLine": 196, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:SagaPatternSingleTable288D85B3}/test-invoke-stage/*/)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SagaPatternSingleTableANYFE1A7CB0", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.HttpMethod", - "category": "Best Practice", - "startLine": 1876, - "startColumn": 9, - "endLine": 1876, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SagaPatternSingleTableANYFE1A7CB0", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.ResourceId", - "category": "Best Practice", - "startLine": 1877, - "startColumn": 9, - "endLine": 1877, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt SagaPatternSingleTable288D85B3.RootResourceId" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:CircuitBreakerGateway122B123C}/*/*)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableANYFE1A7CB0", + "logicalId": "CircuitBreakerGatewayDefaultRouteDefaultRouteIntegrationF55AEBDB", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ApiGatewayV2::Integration" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 1883, + "startLine": 228, "startColumn": 9, - "endLine": 1883, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 228, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SagaPatternSingleTable288D85B3'" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BookingsB1C24132' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BookingsB1C24132", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'reserveFlightLambdaHandlerServiceRole985C586D' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "reserveFlightLambdaHandlerServiceRole985C586D", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 39, - "startColumn": 7, - "endLine": 39, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'reserveFlightLambdaHandler3C75473D' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "reserveFlightLambdaHandler3C75473D", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 118, - "startColumn": 7, - "endLine": 118, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'confirmFlightLambdaHandlerServiceRole45F91B6E' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "confirmFlightLambdaHandlerServiceRole45F91B6E", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 185, - "startColumn": 7, - "endLine": 185, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'confirmFlightLambdaHandler96C3663F' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "confirmFlightLambdaHandler96C3663F", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 264, - "startColumn": 7, - "endLine": 264, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'cancelFlightLambdaHandlerServiceRole7F2439CB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "cancelFlightLambdaHandlerServiceRole7F2439CB", + "logicalId": "CircuitBreakerGatewayDefaultRouteCB8326BD", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGatewayV2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 331, - "startColumn": 7, - "endLine": 331, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 247, + "startColumn": 9, + "endLine": 247, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'cancelFlightLambdaHandler437EEC76' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "cancelFlightLambdaHandler437EEC76", + "logicalId": "CircuitBreakerGatewayDefaultStageC51956FB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGatewayV2::Stage" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 410, - "startColumn": 7, - "endLine": 410, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 270, + "startColumn": 9, + "endLine": 270, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'reserveHotelLambdaHandlerServiceRole452F23B7' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "reserveHotelLambdaHandlerServiceRole452F23B7", + "logicalId": "CircuitBreakerGatewayDefaultStageC51956FB", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGatewayV2::Stage" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 477, - "startColumn": 7, - "endLine": 477, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 273, + "startColumn": 9, + "endLine": 273, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'reserveHotelLambdaHandler020AE24A' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'CircuitBreakerTable02DAD2B8' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "reserveHotelLambdaHandler020AE24A", + "logicalId": "CircuitBreakerTable02DAD2B8", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 556, + "startLine": 5, "startColumn": 7, - "endLine": 556, + "endLine": 5, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -48164,19 +49068,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'confirmHotelLambdaHandlerServiceRoleD5F8F90E' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'UnreliableLambdaHandlerServiceRole955A5CFD' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "confirmHotelLambdaHandlerServiceRoleD5F8F90E", + "logicalId": "UnreliableLambdaHandlerServiceRole955A5CFD", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 623, + "startLine": 31, "startColumn": 7, - "endLine": 623, + "endLine": 31, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -48184,19 +49088,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'confirmHotelLambdaHandler882ACF2D' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'UnreliableLambdaHandlerD4A4DED9' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "confirmHotelLambdaHandler882ACF2D", + "logicalId": "UnreliableLambdaHandlerD4A4DED9", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 702, + "startLine": 110, "startColumn": 7, - "endLine": 702, + "endLine": 110, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -48204,19 +49108,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'cancelHotelLambdaHandlerServiceRole4815D152' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'CircuitBreakerGateway122B123C' of type 'AWS::ApiGatewayV2::Api' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "cancelHotelLambdaHandlerServiceRole4815D152", + "logicalId": "CircuitBreakerGateway122B123C", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGatewayV2::Api" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 769, + "startLine": 177, "startColumn": 7, - "endLine": 769, + "endLine": 177, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -48224,360 +49128,383 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'cancelHotelLambdaHandler09F13EF6' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'CircuitBreakerGatewayDefaultStageC51956FB' of type 'AWS::ApiGatewayV2::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "cancelHotelLambdaHandler09F13EF6", + "logicalId": "CircuitBreakerGatewayDefaultStageC51956FB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGatewayV2::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 848, + "startLine": 269, "startColumn": 7, - "endLine": 848, + "endLine": 269, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "cdk/pat-the-saga-stepfunction--TheSagaStepfunctionSingleTableStack.template.json": { + "filePath": "cdk/pat-the-saga-stepfunction--TheSagaStepfunctionSingleTableStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 44, + "counts": { + "fatal": 0, + "errors": 9, + "warnings": 11, + "informational": 53, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'takePaymentLambdaHandlerServiceRole56CA2808' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "takePaymentLambdaHandlerServiceRole56CA2808", + "logicalId": "reserveFlightLambdaHandler3C75473D", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 915, - "startColumn": 7, - "endLine": 915, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 171, + "startColumn": 9, + "endLine": 171, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'takePaymentLambdaHandlerB96529D4' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "takePaymentLambdaHandlerB96529D4", + "logicalId": "confirmFlightLambdaHandler96C3663F", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 994, - "startColumn": 7, - "endLine": 994, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 317, + "startColumn": 9, + "endLine": 317, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'refundPaymentLambdaHandlerServiceRole62F72F0D' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "refundPaymentLambdaHandlerServiceRole62F72F0D", + "logicalId": "cancelFlightLambdaHandler437EEC76", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1061, - "startColumn": 7, - "endLine": 1061, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 463, + "startColumn": 9, + "endLine": 463, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'refundPaymentLambdaHandler932D11D5' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "refundPaymentLambdaHandler932D11D5", + "logicalId": "reserveHotelLambdaHandler020AE24A", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1140, - "startColumn": 7, - "endLine": 1140, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 609, + "startColumn": 9, + "endLine": 609, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BookingSagaRole82982544' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "BookingSagaRole82982544", + "logicalId": "confirmHotelLambdaHandler882ACF2D", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1207, - "startColumn": 7, - "endLine": 1207, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 755, + "startColumn": 9, + "endLine": 755, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BookingSagaFA991213' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "BookingSagaFA991213", + "logicalId": "cancelHotelLambdaHandler09F13EF6", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1337, - "startColumn": 7, - "endLine": 1337, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 901, + "startColumn": 9, + "endLine": 901, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'sagaLambdaHandlerServiceRole7EB685BD' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "sagaLambdaHandlerServiceRole7EB685BD", + "logicalId": "takePaymentLambdaHandlerB96529D4", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1427, - "startColumn": 7, - "endLine": 1427, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1047, + "startColumn": 9, + "endLine": 1047, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'sagaLambdaHandlerFC24742F' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "sagaLambdaHandlerFC24742F", + "logicalId": "refundPaymentLambdaHandler932D11D5", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1487, - "startColumn": 7, - "endLine": 1487, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1193, + "startColumn": 9, + "endLine": 1193, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SagaPatternSingleTable288D85B3' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "SagaPatternSingleTable288D85B3", + "logicalId": "sagaLambdaHandlerFC24742F", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1554, - "startColumn": 7, - "endLine": 1554, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1540, + "startColumn": 9, + "endLine": 1540, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SagaPatternSingleTableCloudWatchRole130684F0' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParameters4278db4a1a47077b6c8d42c246c4d59d434f12973a4fcecd1a62b809ce2aed1eArtifactHash48F8E85F' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "SagaPatternSingleTableCloudWatchRole130684F0", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "logicalId": "AssetParameters4278db4a1a47077b6c8d42c246c4d59d434f12973a4fcecd1a62b809ce2aed1eArtifactHash48F8E85F", + "entityType": "Parameter" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Parameters/AssetParameters4278db4a1a47077b6c8d42c246c4d59d434f12973a4fcecd1a62b809ce2aed1eArtifactHash48F8E85F", "category": "Best Practice", - "startLine": 1563, - "startColumn": 7, - "endLine": 1563, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", + "startLine": 1939, + "startColumn": 5, + "endLine": 1939, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SagaPatternSingleTableDeploymentStageprod92F0690D' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'reserveFlightLambdaHandlerServiceRole985C586D' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "SagaPatternSingleTableDeploymentStageprod92F0690D", + "logicalId": "reserveFlightLambdaHandler3C75473D", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 1631, + "startLine": 173, "startColumn": 7, - "endLine": 1631, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/pat-the-scalable-webhook--TheScalableWebhookStack.template.json": { - "filePath": "cdk/pat-the-scalable-webhook--TheScalableWebhookStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 22, - "counts": { - "fatal": 0, - "errors": 2, - "warnings": 4, - "informational": 43, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ + "endLine": 173, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "ruleId": "W3005", + "severity": "WARN", + "message": "'confirmFlightLambdaHandlerServiceRole45F91B6E' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "SQSPublishLambdaHandler51EE31BE", + "logicalId": "confirmFlightLambdaHandler96C3663F", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 160, - "startColumn": 9, - "endLine": 160, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 319, + "startColumn": 7, + "endLine": 319, "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" - } + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "ruleId": "W3005", + "severity": "WARN", + "message": "'cancelFlightLambdaHandlerServiceRole7F2439CB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "SQSSubscribeLambdaHandlerBBB58615", + "logicalId": "cancelFlightLambdaHandler437EEC76", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 326, - "startColumn": 9, - "endLine": 326, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 465, + "startColumn": 7, + "endLine": 465, "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" - } + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "W2001", + "ruleId": "W3005", "severity": "WARN", - "message": "Parameter 'AssetParameterscd03efd5e3dbce0aea763ea8c5588ad4d6461d50c589e8809f87413cbe5203e9ArtifactHash5CFE4D33' is not referenced anywhere in the template", + "message": "'reserveHotelLambdaHandlerServiceRole452F23B7' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "AssetParameterscd03efd5e3dbce0aea763ea8c5588ad4d6461d50c589e8809f87413cbe5203e9ArtifactHash5CFE4D33", - "entityType": "Parameter" + "logicalId": "reserveHotelLambdaHandler020AE24A", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/AssetParameterscd03efd5e3dbce0aea763ea8c5588ad4d6461d50c589e8809f87413cbe5203e9ArtifactHash5CFE4D33", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 742, - "startColumn": 5, - "endLine": 742, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", + "startLine": 611, + "startColumn": 7, + "endLine": 611, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "W2001", + "ruleId": "W3005", "severity": "WARN", - "message": "Parameter 'AssetParametersf0094c070470b05f97252ebe03e67953eb53b4659ffb3c5e01faea04951f5958ArtifactHashB6117B67' is not referenced anywhere in the template", + "message": "'confirmHotelLambdaHandlerServiceRoleD5F8F90E' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "AssetParametersf0094c070470b05f97252ebe03e67953eb53b4659ffb3c5e01faea04951f5958ArtifactHashB6117B67", - "entityType": "Parameter" + "logicalId": "confirmHotelLambdaHandler882ACF2D", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/AssetParametersf0094c070470b05f97252ebe03e67953eb53b4659ffb3c5e01faea04951f5958ArtifactHashB6117B67", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 754, - "startColumn": 5, - "endLine": 754, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", + "startLine": 757, + "startColumn": 7, + "endLine": 757, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { "ruleId": "W3005", "severity": "WARN", - "message": "'SQSPublishLambdaHandlerServiceRole4F9A1044' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'cancelHotelLambdaHandlerServiceRole4815D152' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "SQSPublishLambdaHandler51EE31BE", + "logicalId": "cancelHotelLambdaHandler09F13EF6", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 162, + "startLine": 903, "startColumn": 7, - "endLine": 162, + "endLine": 903, "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -48585,76 +49512,81 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'SQSSubscribeLambdaHandlerServiceRoleB6261F09' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'takePaymentLambdaHandlerServiceRole56CA2808' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "SQSSubscribeLambdaHandlerBBB58615", + "logicalId": "takePaymentLambdaHandlerB96529D4", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 328, + "startLine": 1049, "startColumn": 7, - "endLine": 328, + "endLine": 1049, "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for 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)", + "ruleId": "W3005", + "severity": "WARN", + "message": "'refundPaymentLambdaHandlerServiceRole62F72F0D' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "RDSPublishQueue2BEA1A7F", + "logicalId": "refundPaymentLambdaHandler932D11D5", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 29, - "startColumn": 5, - "endLine": 29, - "endColumn": 29, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 1195, + "startColumn": 7, + "endLine": 1195, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "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)", + "ruleId": "W3005", + "severity": "WARN", + "message": "'BookingSagaRole82982544' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", "source": "CFN_LINT", "entity": { - "logicalId": "RDSPublishQueue2BEA1A7F", + "logicalId": "BookingSagaFA991213", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::StepFunctions::StateMachine" }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 29, - "startColumn": 5, - "endLine": 29, - "endColumn": 29, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 1417, + "startColumn": 7, + "endLine": 1417, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "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)", + "ruleId": "W3005", + "severity": "WARN", + "message": "'sagaLambdaHandlerServiceRole7EB685BD' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "RDSPublishQueue2BEA1A7F", + "logicalId": "sagaLambdaHandlerFC24742F", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 31, + "startLine": 1542, "startColumn": 7, - "endLine": 31, - "endColumn": 18, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "endLine": 1542, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { @@ -48663,7 +49595,7 @@ "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Messages804FA4EB", + "logicalId": "BookingsB1C24132", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, @@ -48679,51 +49611,28 @@ "lifecycle": "conditional-create-only" } }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SQSSubscribeLambdaHandlerSqsEventSourceTheScalableWebhookStackRDSPublishQueue119E6E347AD14066", - "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" - }, - "propertyPath": "Properties.EventSourceArn", - "category": "Best Practice", - "startLine": 344, - "startColumn": 9, - "endLine": 344, - "endColumn": 24, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt RDSPublishQueue2BEA1A7F.Arn" - } - }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointDeployment318525DAd36b722f04bf6c9ce03a896415e5529d", + "logicalId": "SagaPatternSingleTableDeployment96972FE77ef5b9d25f9d7a35316435e48684bb49", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Deployment" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 418, + "startLine": 1615, "startColumn": 9, - "endLine": 418, + "endLine": 1615, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'EndpointEEF1FD8F'" + "resolutionSource": "Ref to 'SagaPatternSingleTable288D85B3'" } }, { @@ -48732,22 +49641,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointDeploymentStageprodB78BEEA0", + "logicalId": "SagaPatternSingleTableDeploymentStageprod92F0690D", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 435, + "startLine": 1632, "startColumn": 9, - "endLine": 435, + "endLine": 1632, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'EndpointEEF1FD8F'" + "resolutionSource": "Ref to 'SagaPatternSingleTable288D85B3'" } }, { @@ -48756,15 +49665,15 @@ "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointDeploymentStageprodB78BEEA0", + "logicalId": "SagaPatternSingleTableDeploymentStageprod92F0690D", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 441, + "startLine": 1638, "startColumn": 9, - "endLine": 441, + "endLine": 1638, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -48779,22 +49688,22 @@ "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Endpointproxy39E2174E", + "logicalId": "SagaPatternSingleTableproxy9F7D6084", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Resource" }, "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 450, + "startLine": 1647, "startColumn": 9, - "endLine": 450, + "endLine": 1647, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt EndpointEEF1FD8F.RootResourceId" + "resolutionSource": "GetAtt SagaPatternSingleTable288D85B3.RootResourceId" } }, { @@ -48803,15 +49712,15 @@ "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Endpointproxy39E2174E", + "logicalId": "SagaPatternSingleTableproxy9F7D6084", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Resource" }, "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 456, + "startLine": 1653, "startColumn": 9, - "endLine": 456, + "endLine": 1653, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -48826,22 +49735,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Endpointproxy39E2174E", + "logicalId": "SagaPatternSingleTableproxy9F7D6084", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Resource" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 457, + "startLine": 1654, "startColumn": 9, - "endLine": 457, + "endLine": 1654, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'EndpointEEF1FD8F'" + "resolutionSource": "Ref to 'SagaPatternSingleTable288D85B3'" } }, { @@ -48850,15 +49759,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYproxy6224F0D7", + "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyCC0ED567", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 468, + "startLine": 1665, "startColumn": 9, - "endLine": 468, + "endLine": 1665, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -48872,21 +49781,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYproxy6224F0D7", + "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyCC0ED567", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 469, + "startLine": 1666, "startColumn": 9, - "endLine": 469, + "endLine": 1666, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt SQSPublishLambdaHandler51EE31BE.Arn" + "resolutionSource": "GetAtt sagaLambdaHandlerFC24742F.Arn" } }, { @@ -48895,15 +49804,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYproxy6224F0D7", + "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyCC0ED567", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 475, + "startLine": 1672, "startColumn": 9, - "endLine": 475, + "endLine": 1672, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -48917,21 +49826,21 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYproxy6224F0D7", + "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyCC0ED567", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 476, + "startLine": 1673, "startColumn": 9, - "endLine": 476, + "endLine": 1673, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/{ref:EndpointDeploymentStageprodB78BEEA0}/*/*)" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:SagaPatternSingleTable288D85B3}/{ref:SagaPatternSingleTableDeploymentStageprod92F0690D}/*/*)" } }, { @@ -48940,15 +49849,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANYproxy171AE875", + "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyFFAFB063", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 512, + "startLine": 1709, "startColumn": 9, - "endLine": 512, + "endLine": 1709, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -48962,21 +49871,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANYproxy171AE875", + "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyFFAFB063", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 513, + "startLine": 1710, "startColumn": 9, - "endLine": 513, + "endLine": 1710, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt SQSPublishLambdaHandler51EE31BE.Arn" + "resolutionSource": "GetAtt sagaLambdaHandlerFC24742F.Arn" } }, { @@ -48985,15 +49894,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANYproxy171AE875", + "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyFFAFB063", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 519, + "startLine": 1716, "startColumn": 9, - "endLine": 519, + "endLine": 1716, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -49007,21 +49916,21 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANYproxy171AE875", + "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyFFAFB063", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 520, + "startLine": 1717, "startColumn": 9, - "endLine": 520, + "endLine": 1717, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/test-invoke-stage/*/*)" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:SagaPatternSingleTable288D85B3}/test-invoke-stage/*/*)" } }, { @@ -49030,15 +49939,15 @@ "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYC09721C5", + "logicalId": "SagaPatternSingleTableproxyANY8778A55C", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 552, + "startLine": 1749, "startColumn": 9, - "endLine": 552, + "endLine": 1749, "endColumn": 20, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -49053,22 +49962,22 @@ "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYC09721C5", + "logicalId": "SagaPatternSingleTableproxyANY8778A55C", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 553, + "startLine": 1750, "startColumn": 9, - "endLine": 553, + "endLine": 1750, "endColumn": 20, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Endpointproxy39E2174E'" + "resolutionSource": "Ref to 'SagaPatternSingleTableproxy9F7D6084'" } }, { @@ -49077,22 +49986,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYC09721C5", + "logicalId": "SagaPatternSingleTableproxyANY8778A55C", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 556, + "startLine": 1753, "startColumn": 9, - "endLine": 556, + "endLine": 1753, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'EndpointEEF1FD8F'" + "resolutionSource": "Ref to 'SagaPatternSingleTable288D85B3'" } }, { @@ -49101,15 +50010,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYA4DEC70E", + "logicalId": "SagaPatternSingleTableANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYF602862D", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 595, + "startLine": 1792, "startColumn": 9, - "endLine": 595, + "endLine": 1792, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -49123,21 +50032,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYA4DEC70E", + "logicalId": "SagaPatternSingleTableANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYF602862D", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 596, + "startLine": 1793, "startColumn": 9, - "endLine": 596, + "endLine": 1793, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt SQSPublishLambdaHandler51EE31BE.Arn" + "resolutionSource": "GetAtt sagaLambdaHandlerFC24742F.Arn" } }, { @@ -49146,15 +50055,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYA4DEC70E", + "logicalId": "SagaPatternSingleTableANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYF602862D", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 602, + "startLine": 1799, "startColumn": 9, - "endLine": 602, + "endLine": 1799, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -49168,21 +50077,21 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYA4DEC70E", + "logicalId": "SagaPatternSingleTableANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYF602862D", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 603, + "startLine": 1800, "startColumn": 9, - "endLine": 603, + "endLine": 1800, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/{ref:EndpointDeploymentStageprodB78BEEA0}/*/)" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:SagaPatternSingleTable288D85B3}/{ref:SagaPatternSingleTableDeploymentStageprod92F0690D}/*/)" } }, { @@ -49191,15 +50100,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANY6F14FF34", + "logicalId": "SagaPatternSingleTableANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANY8FD1CF02", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 639, + "startLine": 1836, "startColumn": 9, - "endLine": 639, + "endLine": 1836, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -49213,21 +50122,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANY6F14FF34", + "logicalId": "SagaPatternSingleTableANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANY8FD1CF02", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 640, + "startLine": 1837, "startColumn": 9, - "endLine": 640, + "endLine": 1837, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt SQSPublishLambdaHandler51EE31BE.Arn" + "resolutionSource": "GetAtt sagaLambdaHandlerFC24742F.Arn" } }, { @@ -49236,15 +50145,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANY6F14FF34", + "logicalId": "SagaPatternSingleTableANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANY8FD1CF02", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 646, + "startLine": 1843, "startColumn": 9, - "endLine": 646, + "endLine": 1843, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -49258,21 +50167,21 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANY6F14FF34", + "logicalId": "SagaPatternSingleTableANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANY8FD1CF02", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 647, + "startLine": 1844, "startColumn": 9, - "endLine": 647, + "endLine": 1844, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/test-invoke-stage/*/)" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:SagaPatternSingleTable288D85B3}/test-invoke-stage/*/)" } }, { @@ -49281,15 +50190,15 @@ "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANY485C938B", + "logicalId": "SagaPatternSingleTableANYFE1A7CB0", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 679, + "startLine": 1876, "startColumn": 9, - "endLine": 679, + "endLine": 1876, "endColumn": 20, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -49304,22 +50213,22 @@ "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANY485C938B", + "logicalId": "SagaPatternSingleTableANYFE1A7CB0", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 680, + "startLine": 1877, "startColumn": 9, - "endLine": 680, + "endLine": 1877, "endColumn": 20, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt EndpointEEF1FD8F.RootResourceId" + "resolutionSource": "GetAtt SagaPatternSingleTable288D85B3.RootResourceId" } }, { @@ -49328,31 +50237,31 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANY485C938B", + "logicalId": "SagaPatternSingleTableANYFE1A7CB0", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 686, + "startLine": 1883, "startColumn": 9, - "endLine": 686, + "endLine": 1883, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'EndpointEEF1FD8F'" + "resolutionSource": "Ref to 'SagaPatternSingleTable288D85B3'" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Messages804FA4EB' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'BookingsB1C24132' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Messages804FA4EB", + "logicalId": "BookingsB1C24132", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, @@ -49369,119 +50278,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'RDSPublishQueue2BEA1A7F' of type 'AWS::SQS::Queue' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "RDSPublishQueue2BEA1A7F", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 31, - "startColumn": 7, - "endLine": 31, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SQSPublishLambdaHandlerServiceRole4F9A1044' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SQSPublishLambdaHandlerServiceRole4F9A1044", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 40, - "startColumn": 7, - "endLine": 40, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SQSPublishLambdaHandler51EE31BE' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SQSPublishLambdaHandler51EE31BE", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 107, - "startColumn": 7, - "endLine": 107, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SQSSubscribeLambdaHandlerServiceRoleB6261F09' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SQSSubscribeLambdaHandlerServiceRoleB6261F09", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 174, - "startColumn": 7, - "endLine": 174, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SQSSubscribeLambdaHandlerBBB58615' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SQSSubscribeLambdaHandlerBBB58615", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 269, - "startColumn": 7, - "endLine": 269, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SQSSubscribeLambdaHandlerSqsEventSourceTheScalableWebhookStackRDSPublishQueue119E6E347AD14066' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", + "message": "Resource 'reserveFlightLambdaHandlerServiceRole985C586D' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SQSSubscribeLambdaHandlerSqsEventSourceTheScalableWebhookStackRDSPublishQueue119E6E347AD14066", + "logicalId": "reserveFlightLambdaHandlerServiceRole985C586D", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 340, + "startLine": 39, "startColumn": 7, - "endLine": 340, + "endLine": 39, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -49489,19 +50298,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EndpointEEF1FD8F' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Resource 'reserveFlightLambdaHandler3C75473D' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EndpointEEF1FD8F", + "logicalId": "reserveFlightLambdaHandler3C75473D", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 357, + "startLine": 118, "startColumn": 7, - "endLine": 357, + "endLine": 118, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -49509,19 +50318,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EndpointCloudWatchRoleC3C64E0F' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'confirmFlightLambdaHandlerServiceRole45F91B6E' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EndpointCloudWatchRoleC3C64E0F", + "logicalId": "confirmFlightLambdaHandlerServiceRole45F91B6E", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 366, + "startLine": 185, "startColumn": 7, - "endLine": 366, + "endLine": 185, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -49529,231 +50338,179 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EndpointDeploymentStageprodB78BEEA0' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Resource 'confirmFlightLambdaHandler96C3663F' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EndpointDeploymentStageprodB78BEEA0", + "logicalId": "confirmFlightLambdaHandler96C3663F", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 434, + "startLine": 264, "startColumn": 7, - "endLine": 434, + "endLine": 264, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "cdk/pat-the-scheduled-lambda--TheScheduledLambdaStack.template.json": { - "filePath": "cdk/pat-the-scheduled-lambda--TheScheduledLambdaStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 2, - "informational": 9, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'cancelFlightLambdaHandlerServiceRole7F2439CB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "scheduledLambda8A84450D", + "logicalId": "cancelFlightLambdaHandlerServiceRole7F2439CB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 157, - "startColumn": 9, - "endLine": 157, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" - } - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AssetParametersfccd72c2ce1888b6c8217fce01f0e35905d3c065025a088dfaf338bfa934ab6aArtifactHash79DE4220' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "AssetParametersfccd72c2ce1888b6c8217fce01f0e35905d3c065025a088dfaf338bfa934ab6aArtifactHash79DE4220", - "entityType": "Parameter" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Parameters/AssetParametersfccd72c2ce1888b6c8217fce01f0e35905d3c065025a088dfaf338bfa934ab6aArtifactHash79DE4220", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 232, - "startColumn": 5, - "endLine": 232, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", + "startLine": 331, + "startColumn": 7, + "endLine": 331, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'scheduledLambdaServiceRoleB98DFEFD' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'cancelFlightLambdaHandler437EEC76' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "scheduledLambda8A84450D", + "logicalId": "cancelFlightLambdaHandler437EEC76", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 159, + "startLine": 410, "startColumn": 7, - "endLine": 159, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 410, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'reserveHotelLambdaHandlerServiceRole452F23B7' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RequestTableC81DB378", + "logicalId": "reserveHotelLambdaHandlerServiceRole452F23B7", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, - "startColumn": 9, - "endLine": 6, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 477, + "startColumn": 7, + "endLine": 477, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Resource 'reserveHotelLambdaHandler020AE24A' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "scheduledLambdascheduleAllowEventRuleTheScheduledLambdaStackscheduledLambdaschedule2517ED8826359872", + "logicalId": "reserveHotelLambdaHandler020AE24A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 193, - "startColumn": 9, - "endLine": 193, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 556, + "startColumn": 7, + "endLine": 556, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'confirmHotelLambdaHandlerServiceRoleD5F8F90E' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "scheduledLambdascheduleAllowEventRuleTheScheduledLambdaStackscheduledLambdaschedule2517ED8826359872", + "logicalId": "confirmHotelLambdaHandlerServiceRoleD5F8F90E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 194, - "startColumn": 9, - "endLine": 194, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt scheduledLambda8A84450D.Arn" - } + "startLine": 623, + "startColumn": 7, + "endLine": 623, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Resource 'confirmHotelLambdaHandler882ACF2D' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "scheduledLambdascheduleAllowEventRuleTheScheduledLambdaStackscheduledLambdaschedule2517ED8826359872", + "logicalId": "confirmHotelLambdaHandler882ACF2D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 200, - "startColumn": 9, - "endLine": 200, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 702, + "startColumn": 7, + "endLine": 702, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'cancelHotelLambdaHandlerServiceRole4815D152' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "scheduledLambdascheduleAllowEventRuleTheScheduledLambdaStackscheduledLambdaschedule2517ED8826359872", + "logicalId": "cancelHotelLambdaHandlerServiceRole4815D152", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 201, - "startColumn": 9, - "endLine": 201, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt scheduledLambdaschedule99960653.Arn" - } + "startLine": 769, + "startColumn": 7, + "endLine": 769, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'RequestTableC81DB378' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'cancelHotelLambdaHandler09F13EF6' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RequestTableC81DB378", + "logicalId": "cancelHotelLambdaHandler09F13EF6", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 848, "startColumn": 7, - "endLine": 5, + "endLine": 848, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -49761,19 +50518,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'scheduledLambdaServiceRoleB98DFEFD' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'takePaymentLambdaHandlerServiceRole56CA2808' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "scheduledLambdaServiceRoleB98DFEFD", + "logicalId": "takePaymentLambdaHandlerServiceRole56CA2808", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 31, + "startLine": 915, "startColumn": 7, - "endLine": 31, + "endLine": 915, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -49781,19 +50538,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'scheduledLambda8A84450D' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'takePaymentLambdaHandlerB96529D4' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "scheduledLambda8A84450D", + "logicalId": "takePaymentLambdaHandlerB96529D4", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 104, + "startLine": 994, "startColumn": 7, - "endLine": 104, + "endLine": 994, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -49801,540 +50558,489 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'scheduledLambdaschedule99960653' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Resource 'refundPaymentLambdaHandlerServiceRole62F72F0D' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "scheduledLambdaschedule99960653", + "logicalId": "refundPaymentLambdaHandlerServiceRole62F72F0D", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 171, + "startLine": 1061, "startColumn": 7, - "endLine": 171, + "endLine": 1061, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "cdk/pat-the-simple-graphql-service--TheSimpleGraphqlServiceStack.template.json": { - "filePath": "cdk/pat-the-simple-graphql-service--TheSimpleGraphqlServiceStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 22, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 2, - "informational": 36, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'refundPaymentLambdaHandler932D11D5' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "LoyaltyLambdaHandler5918F0DA", + "logicalId": "refundPaymentLambdaHandler932D11D5", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 549, - "startColumn": 9, - "endLine": 549, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" - } - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AssetParametersb25d8c2ed9aaae99613538bc392d450ea9e3929b481ed8fb98a0442b719dcf43ArtifactHashDE7AA66F' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "AssetParametersb25d8c2ed9aaae99613538bc392d450ea9e3929b481ed8fb98a0442b719dcf43ArtifactHashDE7AA66F", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/AssetParametersb25d8c2ed9aaae99613538bc392d450ea9e3929b481ed8fb98a0442b719dcf43ArtifactHashDE7AA66F", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 580, - "startColumn": 5, - "endLine": 580, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", + "startLine": 1140, + "startColumn": 7, + "endLine": 1140, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LoyaltyLambdaHandlerServiceRole62E814E8' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BookingSagaRole82982544' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "LoyaltyLambdaHandler5918F0DA", + "logicalId": "BookingSagaRole82982544", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 551, + "startLine": 1207, "startColumn": 7, - "endLine": 551, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 1207, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'BookingSagaFA991213' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiSchema510EECD7", + "logicalId": "BookingSagaFA991213", "entityType": "Resource", - "resourceType": "AWS::AppSync::GraphQLSchema" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 59, - "startColumn": 9, - "endLine": 59, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiF70053CD.ApiId" - } + "startLine": 1337, + "startColumn": 7, + "endLine": 1337, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'sagaLambdaHandlerServiceRole7EB685BD' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiDefaultApiKeyF991C37B", + "logicalId": "sagaLambdaHandlerServiceRole7EB685BD", "entityType": "Resource", - "resourceType": "AWS::AppSync::ApiKey" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 74, - "startColumn": 9, - "endLine": 74, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiF70053CD.ApiId" - } + "startLine": 1427, + "startColumn": 7, + "endLine": 1427, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'sagaLambdaHandlerFC24742F' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiCustomerFEDF5079", + "logicalId": "sagaLambdaHandlerFC24742F", "entityType": "Resource", - "resourceType": "AWS::AppSync::DataSource" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 156, - "startColumn": 9, - "endLine": 156, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiF70053CD.ApiId" - } + "startLine": 1487, + "startColumn": 7, + "endLine": 1487, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Resource 'SagaPatternSingleTable288D85B3' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiCustomerFEDF5079", + "logicalId": "SagaPatternSingleTable288D85B3", "entityType": "Resource", - "resourceType": "AWS::AppSync::DataSource" + "resourceType": "AWS::ApiGateway::RestApi" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 162, - "startColumn": 9, - "endLine": 162, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 1554, + "startColumn": 7, + "endLine": 1554, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'SagaPatternSingleTableCloudWatchRole130684F0' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiQuerygetCustomersResolver522EE433", + "logicalId": "SagaPatternSingleTableCloudWatchRole130684F0", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 186, - "startColumn": 9, - "endLine": 186, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiF70053CD.ApiId" - } + "startLine": 1563, + "startColumn": 7, + "endLine": 1563, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", + "message": "Resource 'SagaPatternSingleTableDeploymentStageprod92F0690D' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiQuerygetCustomersResolver522EE433", + "logicalId": "SagaPatternSingleTableDeploymentStageprod92F0690D", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.FieldName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 192, - "startColumn": 9, - "endLine": 192, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 1631, + "startColumn": 7, + "endLine": 1631, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/pat-the-scalable-webhook--TheScalableWebhookStack.template.json": { + "filePath": "cdk/pat-the-scalable-webhook--TheScalableWebhookStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 22, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 4, + "informational": 43, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "ApiQuerygetCustomersResolver522EE433", + "logicalId": "SQSPublishLambdaHandler51EE31BE", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.TypeName", - "category": "Best Practice", - "startLine": 193, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 160, "startColumn": 9, - "endLine": 193, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 160, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "ApiQuerygetCustomerResolver007520DC", + "logicalId": "SQSSubscribeLambdaHandlerBBB58615", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ApiId", - "category": "Best Practice", - "startLine": 210, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 326, "startColumn": 9, - "endLine": 210, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 326, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiF70053CD.ApiId" + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParameterscd03efd5e3dbce0aea763ea8c5588ad4d6461d50c589e8809f87413cbe5203e9ArtifactHash5CFE4D33' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "ApiQuerygetCustomerResolver007520DC", - "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "logicalId": "AssetParameterscd03efd5e3dbce0aea763ea8c5588ad4d6461d50c589e8809f87413cbe5203e9ArtifactHash5CFE4D33", + "entityType": "Parameter" }, - "propertyPath": "Properties.FieldName", + "propertyPath": "Parameters/AssetParameterscd03efd5e3dbce0aea763ea8c5588ad4d6461d50c589e8809f87413cbe5203e9ArtifactHash5CFE4D33", "category": "Best Practice", - "startLine": 216, - "startColumn": 9, - "endLine": 216, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 742, + "startColumn": 5, + "endLine": 742, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParametersf0094c070470b05f97252ebe03e67953eb53b4659ffb3c5e01faea04951f5958ArtifactHashB6117B67' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "ApiQuerygetCustomerResolver007520DC", + "logicalId": "AssetParametersf0094c070470b05f97252ebe03e67953eb53b4659ffb3c5e01faea04951f5958ArtifactHashB6117B67", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/AssetParametersf0094c070470b05f97252ebe03e67953eb53b4659ffb3c5e01faea04951f5958ArtifactHashB6117B67", + "category": "Best Practice", + "startLine": 754, + "startColumn": 5, + "endLine": 754, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'SQSPublishLambdaHandlerServiceRole4F9A1044' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SQSPublishLambdaHandler51EE31BE", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.TypeName", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 217, - "startColumn": 9, - "endLine": 217, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 162, + "startColumn": 7, + "endLine": 162, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'SQSSubscribeLambdaHandlerServiceRoleB6261F09' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "ApiMutationaddCustomerResolver53321A05", + "logicalId": "SQSSubscribeLambdaHandlerBBB58615", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 234, - "startColumn": 9, - "endLine": 234, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiF70053CD.ApiId" - } + "startLine": 328, + "startColumn": 7, + "endLine": 328, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "ApiMutationaddCustomerResolver53321A05", + "logicalId": "RDSPublishQueue2BEA1A7F", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.FieldName", "category": "Best Practice", - "startLine": 240, - "startColumn": 9, - "endLine": 240, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 29, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "ApiMutationaddCustomerResolver53321A05", + "logicalId": "RDSPublishQueue2BEA1A7F", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.TypeName", "category": "Best Practice", - "startLine": 241, - "startColumn": 9, - "endLine": 241, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 29, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "ApiMutationsaveCustomerResolver85516C23", + "logicalId": "RDSPublishQueue2BEA1A7F", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 258, - "startColumn": 9, - "endLine": 258, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiF70053CD.ApiId" - } + "startLine": 31, + "startColumn": 7, + "endLine": 31, + "endColumn": 18, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiMutationsaveCustomerResolver85516C23", + "logicalId": "Messages804FA4EB", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.FieldName", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 264, + "startLine": 6, "startColumn": 9, - "endLine": 264, + "endLine": 6, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", + "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiMutationsaveCustomerResolver85516C23", + "logicalId": "SQSSubscribeLambdaHandlerSqsEventSourceTheScalableWebhookStackRDSPublishQueue119E6E347AD14066", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.TypeName", + "propertyPath": "Properties.EventSourceArn", "category": "Best Practice", - "startLine": 265, + "startLine": 344, "startColumn": 9, - "endLine": 265, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 344, + "endColumn": 24, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt RDSPublishQueue2BEA1A7F.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiMutationsaveCustomerWithFirstOrderResolver66DBDFD0", + "logicalId": "EndpointDeployment318525DAd36b722f04bf6c9ce03a896415e5529d", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 282, + "startLine": 418, "startColumn": 9, - "endLine": 282, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 418, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiF70053CD.ApiId" + "resolutionSource": "Ref to 'EndpointEEF1FD8F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiMutationsaveCustomerWithFirstOrderResolver66DBDFD0", + "logicalId": "EndpointDeploymentStageprodB78BEEA0", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.FieldName", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 288, + "startLine": 435, "startColumn": 9, - "endLine": 288, + "endLine": 435, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'EndpointEEF1FD8F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiMutationsaveCustomerWithFirstOrderResolver66DBDFD0", + "logicalId": "EndpointDeploymentStageprodB78BEEA0", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.TypeName", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 289, + "startLine": 441, "startColumn": 9, - "endLine": 289, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 441, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -50344,44 +51050,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiMutationremoveCustomerResolver8435F803", + "logicalId": "Endpointproxy39E2174E", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 306, + "startLine": 450, "startColumn": 9, - "endLine": 306, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 450, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiF70053CD.ApiId" + "resolutionSource": "GetAtt EndpointEEF1FD8F.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiMutationremoveCustomerResolver8435F803", + "logicalId": "Endpointproxy39E2174E", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.FieldName", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 312, + "startLine": 456, "startColumn": 9, - "endLine": 312, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 456, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -50391,137 +51097,133 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiMutationremoveCustomerResolver8435F803", + "logicalId": "Endpointproxy39E2174E", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.TypeName", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 313, + "startLine": 457, "startColumn": 9, - "endLine": 313, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 457, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'EndpointEEF1FD8F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiLoyaltyE1BE9BB1", + "logicalId": "EndpointproxyANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYproxy6224F0D7", "entityType": "Resource", - "resourceType": "AWS::AppSync::DataSource" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 379, + "startLine": 468, "startColumn": 9, - "endLine": 379, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", + "endLine": 468, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiF70053CD.ApiId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiLoyaltyE1BE9BB1", + "logicalId": "EndpointproxyANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYproxy6224F0D7", "entityType": "Resource", - "resourceType": "AWS::AppSync::DataSource" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 385, + "startLine": 469, "startColumn": 9, - "endLine": 385, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", + "endLine": 469, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt SQSPublishLambdaHandler51EE31BE.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiQuerygetLoyaltyLevelResolverC862DCEF", + "logicalId": "EndpointproxyANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYproxy6224F0D7", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 409, + "startLine": 475, "startColumn": 9, - "endLine": 409, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 475, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiF70053CD.ApiId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiQuerygetLoyaltyLevelResolverC862DCEF", + "logicalId": "EndpointproxyANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYproxy6224F0D7", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.FieldName", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 415, + "startLine": 476, "startColumn": 9, - "endLine": 415, + "endLine": 476, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/{ref:EndpointDeploymentStageprodB78BEEA0}/*/*)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiQuerygetLoyaltyLevelResolverC862DCEF", + "logicalId": "EndpointproxyANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANYproxy171AE875", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.TypeName", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 416, + "startLine": 512, "startColumn": 9, - "endLine": 416, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 512, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -50531,310 +51233,230 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "thesimplegraphqlserviceapikey", + "logicalId": "EndpointproxyANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANYproxy171AE875", "entityType": "Resource", - "resourceType": "AWS::AppSync::ApiKey" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 433, + "startLine": 513, "startColumn": 9, - "endLine": 433, - "endColumn": 15, + "endLine": 513, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiF70053CD.ApiId" + "resolutionSource": "GetAtt SQSPublishLambdaHandler51EE31BE.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CustomerTable260DCC08", + "logicalId": "EndpointproxyANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANYproxy171AE875", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 447, + "startLine": 519, "startColumn": 9, - "endLine": 447, + "endLine": 519, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ApiApiLogsRole90293F72' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ApiApiLogsRole90293F72", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ApiF70053CD' of type 'AWS::AppSync::GraphQLApi' supports Tags but none are configured", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiF70053CD", + "logicalId": "EndpointproxyANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANYproxy171AE875", "entityType": "Resource", - "resourceType": "AWS::AppSync::GraphQLApi" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 39, - "startColumn": 7, - "endLine": 39, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 520, + "startColumn": 9, + "endLine": 520, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/test-invoke-stage/*/*)" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ApiCustomerServiceRole28709567' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiCustomerServiceRole28709567", + "logicalId": "EndpointproxyANYC09721C5", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 90, - "startColumn": 7, - "endLine": 90, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 552, + "startColumn": 9, + "endLine": 552, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ApiLoyaltyServiceRole2B487CD2' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiLoyaltyServiceRole2B487CD2", + "logicalId": "EndpointproxyANYC09721C5", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 329, - "startColumn": 7, - "endLine": 329, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 553, + "startColumn": 9, + "endLine": 553, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Endpointproxy39E2174E'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CustomerTable260DCC08' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CustomerTable260DCC08", + "logicalId": "EndpointproxyANYC09721C5", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 446, - "startColumn": 7, - "endLine": 446, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 556, + "startColumn": 9, + "endLine": 556, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'EndpointEEF1FD8F'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LoyaltyLambdaHandlerServiceRole62E814E8' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LoyaltyLambdaHandlerServiceRole62E814E8", + "logicalId": "EndpointANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYA4DEC70E", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 469, - "startColumn": 7, - "endLine": 469, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 595, + "startColumn": 9, + "endLine": 595, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LoyaltyLambdaHandler5918F0DA' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LoyaltyLambdaHandler5918F0DA", + "logicalId": "EndpointANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYA4DEC70E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 503, - "startColumn": 7, - "endLine": 503, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/pat-the-simple-webservice--TheSimpleWebserviceStack.template.json": { - "filePath": "cdk/pat-the-simple-webservice--TheSimpleWebserviceStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 10, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 2, - "informational": 15, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "DynamoLambdaHandlerFB6EB814", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 163, + "startLine": 596, "startColumn": 9, - "endLine": 163, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "endLine": 596, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" + "lifecycle": "create-only", + "resolutionSource": "GetAtt SQSPublishLambdaHandler51EE31BE.Arn" } }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AssetParameters2e2fb63cef5de8866986a28a524c8f97b58a2ec13b66aa5753892cafdd7dbe46ArtifactHash18C20B66' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "AssetParameters2e2fb63cef5de8866986a28a524c8f97b58a2ec13b66aa5753892cafdd7dbe46ArtifactHash18C20B66", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/AssetParameters2e2fb63cef5de8866986a28a524c8f97b58a2ec13b66aa5753892cafdd7dbe46ArtifactHash18C20B66", - "category": "Best Practice", - "startLine": 300, - "startColumn": 5, - "endLine": 300, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'DynamoLambdaHandlerServiceRole4C867B01' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "DynamoLambdaHandlerFB6EB814", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 165, - "startColumn": 7, - "endLine": 165, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HitsFF5AF8CD", + "logicalId": "EndpointANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYA4DEC70E", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 6, + "startLine": 602, "startColumn": 9, - "endLine": 6, + "endLine": 602, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ProtocolType' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointEEF1FD8F", + "logicalId": "EndpointANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYA4DEC70E", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Api" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ProtocolType", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 179, + "startLine": 603, "startColumn": 9, - "endLine": 179, - "endColumn": 22, + "endLine": 603, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/{ref:EndpointDeploymentStageprodB78BEEA0}/*/)" } }, { @@ -50843,15 +51465,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointDefaultRouteTheSimpleWebserviceStackEndpointDefaultRouteC99962AAPermission4BC0F1E3", + "logicalId": "EndpointANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANY6F14FF34", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 188, + "startLine": 639, "startColumn": 9, - "endLine": 188, + "endLine": 639, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -50865,21 +51487,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointDefaultRouteTheSimpleWebserviceStackEndpointDefaultRouteC99962AAPermission4BC0F1E3", + "logicalId": "EndpointANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANY6F14FF34", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 189, + "startLine": 640, "startColumn": 9, - "endLine": 189, + "endLine": 640, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt DynamoLambdaHandlerFB6EB814.Arn" + "resolutionSource": "GetAtt SQSPublishLambdaHandler51EE31BE.Arn" } }, { @@ -50888,15 +51510,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointDefaultRouteTheSimpleWebserviceStackEndpointDefaultRouteC99962AAPermission4BC0F1E3", + "logicalId": "EndpointANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANY6F14FF34", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 195, + "startLine": 646, "startColumn": 9, - "endLine": 195, + "endLine": 646, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -50910,88 +51532,87 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointDefaultRouteTheSimpleWebserviceStackEndpointDefaultRouteC99962AAPermission4BC0F1E3", + "logicalId": "EndpointANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANY6F14FF34", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 196, + "startLine": 647, "startColumn": 9, - "endLine": 196, + "endLine": 647, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/*/*)" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/test-invoke-stage/*/)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointDefaultRouteDefaultRouteIntegration4584A785", + "logicalId": "EndpointANY485C938B", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Integration" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 228, + "startLine": 679, "startColumn": 9, - "endLine": 228, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 679, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'EndpointEEF1FD8F'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointDefaultRouteB7B22F2B", + "logicalId": "EndpointANY485C938B", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Route" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 247, + "startLine": 680, "startColumn": 9, - "endLine": 247, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", + "endLine": 680, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'EndpointEEF1FD8F'" + "resolutionSource": "GetAtt EndpointEEF1FD8F.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointDefaultStage0AD21F27", + "logicalId": "EndpointANY485C938B", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Stage" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 270, + "startLine": 686, "startColumn": 9, - "endLine": 270, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", + "endLine": 686, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -51000,44 +51621,121 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Resource 'Messages804FA4EB' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EndpointDefaultStage0AD21F27", + "logicalId": "Messages804FA4EB", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Stage" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 273, - "startColumn": 9, - "endLine": 273, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'RDSPublishQueue2BEA1A7F' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "RDSPublishQueue2BEA1A7F", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 31, + "startColumn": 7, + "endLine": 31, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SQSPublishLambdaHandlerServiceRole4F9A1044' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SQSPublishLambdaHandlerServiceRole4F9A1044", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 40, + "startColumn": 7, + "endLine": 40, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SQSPublishLambdaHandler51EE31BE' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SQSPublishLambdaHandler51EE31BE", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 107, + "startColumn": 7, + "endLine": 107, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SQSSubscribeLambdaHandlerServiceRoleB6261F09' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SQSSubscribeLambdaHandlerServiceRoleB6261F09", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 174, + "startColumn": 7, + "endLine": 174, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'HitsFF5AF8CD' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'SQSSubscribeLambdaHandlerBBB58615' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "HitsFF5AF8CD", + "logicalId": "SQSSubscribeLambdaHandlerBBB58615", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 269, "startColumn": 7, - "endLine": 5, + "endLine": 269, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -51045,19 +51743,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DynamoLambdaHandlerServiceRole4C867B01' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'SQSSubscribeLambdaHandlerSqsEventSourceTheScalableWebhookStackRDSPublishQueue119E6E347AD14066' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambdaHandlerServiceRole4C867B01", + "logicalId": "SQSSubscribeLambdaHandlerSqsEventSourceTheScalableWebhookStackRDSPublishQueue119E6E347AD14066", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::EventSourceMapping" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 31, + "startLine": 340, "startColumn": 7, - "endLine": 31, + "endLine": 340, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -51065,19 +51763,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DynamoLambdaHandlerFB6EB814' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'EndpointEEF1FD8F' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambdaHandlerFB6EB814", + "logicalId": "EndpointEEF1FD8F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::RestApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 110, + "startLine": 357, "startColumn": 7, - "endLine": 110, + "endLine": 357, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -51085,19 +51783,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EndpointEEF1FD8F' of type 'AWS::ApiGatewayV2::Api' supports Tags but none are configured", + "message": "Resource 'EndpointCloudWatchRoleC3C64E0F' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EndpointEEF1FD8F", + "logicalId": "EndpointCloudWatchRoleC3C64E0F", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Api" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 177, + "startLine": 366, "startColumn": 7, - "endLine": 177, + "endLine": 366, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -51105,35 +51803,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EndpointDefaultStage0AD21F27' of type 'AWS::ApiGatewayV2::Stage' supports Tags but none are configured", + "message": "Resource 'EndpointDeploymentStageprodB78BEEA0' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EndpointDefaultStage0AD21F27", + "logicalId": "EndpointDeploymentStageprodB78BEEA0", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Stage" + "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 269, + "startLine": 434, "startColumn": 7, - "endLine": 269, + "endLine": 434, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/pat-the-state-machine--TheStateMachineStack.template.json": { - "filePath": "cdk/pat-the-state-machine--TheStateMachineStack.template.json", + "cdk/pat-the-scheduled-lambda--TheScheduledLambdaStack.template.json": { + "filePath": "cdk/pat-the-scheduled-lambda--TheScheduledLambdaStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 11, + "resourcesScanned": 7, "counts": { "fatal": 0, "errors": 1, - "warnings": 3, - "informational": 13, + "warnings": 2, + "informational": 9, "debug": 0 }, "suppressed": 0, @@ -51147,15 +51845,15 @@ "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "pineappleCheckLambdaHandlerFDB742D5", + "logicalId": "scheduledLambda8A84450D", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 85, + "startLine": 157, "startColumn": 9, - "endLine": 85, + "endLine": 157, "endColumn": 17, "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", @@ -51167,17 +51865,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'AssetParameters86bbf54b0bd4ccecf85d2ecc5cb12563bcd092af45115fa1898ee6b4bcfaf6c4ArtifactHashB08CD707' is not referenced anywhere in the template", + "message": "Parameter 'AssetParametersfccd72c2ce1888b6c8217fce01f0e35905d3c065025a088dfaf338bfa934ab6aArtifactHash79DE4220' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "AssetParameters86bbf54b0bd4ccecf85d2ecc5cb12563bcd092af45115fa1898ee6b4bcfaf6c4ArtifactHashB08CD707", + "logicalId": "AssetParametersfccd72c2ce1888b6c8217fce01f0e35905d3c065025a088dfaf338bfa934ab6aArtifactHash79DE4220", "entityType": "Parameter" }, - "propertyPath": "Parameters/AssetParameters86bbf54b0bd4ccecf85d2ecc5cb12563bcd092af45115fa1898ee6b4bcfaf6c4ArtifactHashB08CD707", + "propertyPath": "Parameters/AssetParametersfccd72c2ce1888b6c8217fce01f0e35905d3c065025a088dfaf338bfa934ab6aArtifactHash79DE4220", "category": "Best Practice", - "startLine": 334, + "startLine": 232, "startColumn": 5, - "endLine": 334, + "endLine": 232, "endColumn": 105, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -51185,39 +51883,19 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'pineappleCheckLambdaHandlerServiceRoleFC4E3211' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'scheduledLambdaServiceRoleB98DFEFD' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "pineappleCheckLambdaHandlerFDB742D5", + "logicalId": "scheduledLambda8A84450D", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 87, - "startColumn": 7, - "endLine": 87, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'StateMachineRoleB840431D' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", - "source": "CFN_LINT", - "entity": { - "logicalId": "StateMachine2E01A3A5", - "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 195, + "startLine": 159, "startColumn": 7, - "endLine": 195, + "endLine": 159, "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -51225,42 +51903,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StateMachineType' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StateMachine2E01A3A5", + "logicalId": "RequestTableC81DB378", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.StateMachineType", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 190, + "startLine": 6, "startColumn": 9, - "endLine": 190, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-stepfunctions.git", + "endLine": 6, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ProtocolType' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "thestatemachineapi69C81CC4", + "logicalId": "scheduledLambdascheduleAllowEventRuleTheScheduledLambdaStackscheduledLambdaschedule2517ED8826359872", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Api" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ProtocolType", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 244, + "startLine": 193, "startColumn": 9, - "endLine": 244, - "endColumn": 22, + "endLine": 193, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -51270,44 +51947,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "thestatemachineapiDefaultStageE23A2C15", + "logicalId": "scheduledLambdascheduleAllowEventRuleTheScheduledLambdaStackscheduledLambdaschedule2517ED8826359872", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 253, + "startLine": 194, "startColumn": 9, - "endLine": 253, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", + "endLine": 194, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'thestatemachineapi69C81CC4'" + "resolutionSource": "GetAtt scheduledLambda8A84450D.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "thestatemachineapiDefaultStageE23A2C15", + "logicalId": "scheduledLambdascheduleAllowEventRuleTheScheduledLambdaStackscheduledLambdaschedule2517ED8826359872", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 256, + "startLine": 200, "startColumn": 9, - "endLine": 256, + "endLine": 200, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -51317,60 +51992,35 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Integ", - "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Integration" - }, - "propertyPath": "Properties.ApiId", - "category": "Best Practice", - "startLine": 266, - "startColumn": 9, - "endLine": 266, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'thestatemachineapi69C81CC4'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DefaultRoute", + "logicalId": "scheduledLambdascheduleAllowEventRuleTheScheduledLambdaStackscheduledLambdaschedule2517ED8826359872", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 294, + "startLine": 201, "startColumn": 9, - "endLine": 294, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", + "endLine": 201, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'thestatemachineapi69C81CC4'" + "resolutionSource": "GetAtt scheduledLambdaschedule99960653.Arn" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'pineappleCheckLambdaHandlerServiceRoleFC4E3211' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'RequestTableC81DB378' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "pineappleCheckLambdaHandlerServiceRoleFC4E3211", + "logicalId": "RequestTableC81DB378", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -51385,79 +52035,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'pineappleCheckLambdaHandlerFDB742D5' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "pineappleCheckLambdaHandlerFDB742D5", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 39, - "startColumn": 7, - "endLine": 39, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'StateMachineRoleB840431D' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "StateMachineRoleB840431D", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 98, - "startColumn": 7, - "endLine": 98, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'StateMachine2E01A3A5' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "StateMachine2E01A3A5", - "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 168, - "startColumn": 7, - "endLine": 168, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'HttpApiRole79B5C31A' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'scheduledLambdaServiceRoleB98DFEFD' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "HttpApiRole79B5C31A", + "logicalId": "scheduledLambdaServiceRoleB98DFEFD", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 205, + "startLine": 31, "startColumn": 7, - "endLine": 205, + "endLine": 31, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -51465,19 +52055,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'thestatemachineapi69C81CC4' of type 'AWS::ApiGatewayV2::Api' supports Tags but none are configured", + "message": "Resource 'scheduledLambda8A84450D' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "thestatemachineapi69C81CC4", + "logicalId": "scheduledLambda8A84450D", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Api" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 242, + "startLine": 104, "startColumn": 7, - "endLine": 242, + "endLine": 104, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -51485,35 +52075,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'thestatemachineapiDefaultStageE23A2C15' of type 'AWS::ApiGatewayV2::Stage' supports Tags but none are configured", + "message": "Resource 'scheduledLambdaschedule99960653' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "thestatemachineapiDefaultStageE23A2C15", + "logicalId": "scheduledLambdaschedule99960653", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Stage" + "resourceType": "AWS::Events::Rule" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 252, + "startLine": 171, "startColumn": 7, - "endLine": 252, + "endLine": 171, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/pat-the-waf-apigateway--APIGatewayStack.template.json": { - "filePath": "cdk/pat-the-waf-apigateway--APIGatewayStack.template.json", + "cdk/pat-the-simple-graphql-service--TheSimpleGraphqlServiceStack.template.json": { + "filePath": "cdk/pat-the-simple-graphql-service--TheSimpleGraphqlServiceStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 12, + "resourcesScanned": 22, "counts": { "fatal": 0, "errors": 1, "warnings": 2, - "informational": 22, + "informational": 36, "debug": 0 }, "suppressed": 0, @@ -51527,15 +52117,15 @@ "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "HelloWorldHandler30C22324", + "logicalId": "LoyaltyLambdaHandler5918F0DA", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 85, + "startLine": 549, "startColumn": 9, - "endLine": 85, + "endLine": 549, "endColumn": 17, "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", @@ -51547,17 +52137,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'AssetParametersdbbf200867db4bc38eadd4ce5f5b75dce1049f40752e3c690ec4f6b17c996a69ArtifactHash53F25514' is not referenced anywhere in the template", + "message": "Parameter 'AssetParametersb25d8c2ed9aaae99613538bc392d450ea9e3929b481ed8fb98a0442b719dcf43ArtifactHashDE7AA66F' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "AssetParametersdbbf200867db4bc38eadd4ce5f5b75dce1049f40752e3c690ec4f6b17c996a69ArtifactHash53F25514", + "logicalId": "AssetParametersb25d8c2ed9aaae99613538bc392d450ea9e3929b481ed8fb98a0442b719dcf43ArtifactHashDE7AA66F", "entityType": "Parameter" }, - "propertyPath": "Parameters/AssetParametersdbbf200867db4bc38eadd4ce5f5b75dce1049f40752e3c690ec4f6b17c996a69ArtifactHash53F25514", + "propertyPath": "Parameters/AssetParametersb25d8c2ed9aaae99613538bc392d450ea9e3929b481ed8fb98a0442b719dcf43ArtifactHashDE7AA66F", "category": "Best Practice", - "startLine": 388, + "startLine": 580, "startColumn": 5, - "endLine": 388, + "endLine": 580, "endColumn": 105, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -51565,19 +52155,19 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'HelloWorldHandlerServiceRole56E6BFBA' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'LoyaltyLambdaHandlerServiceRole62E814E8' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "HelloWorldHandler30C22324", + "logicalId": "LoyaltyLambdaHandler5918F0DA", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 87, + "startLine": 551, "startColumn": 7, - "endLine": 87, + "endLine": 551, "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -51585,115 +52175,90 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIDeploymentDDF5787C50cd54e1b820c67ddfe6e24991b1dd3f", + "logicalId": "ApiSchema510EECD7", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::AppSync::GraphQLSchema" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 164, + "startLine": 59, "startColumn": 9, - "endLine": 164, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 59, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'WafGatewayAPI5BA7C2CE'" + "resolutionSource": "GetAtt ApiF70053CD.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIDeploymentStageprodEF5FA49F", + "logicalId": "ApiDefaultApiKeyF991C37B", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::AppSync::ApiKey" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 180, + "startLine": 74, "startColumn": 9, - "endLine": 180, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 74, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'WafGatewayAPI5BA7C2CE'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "WafGatewayAPIDeploymentStageprodEF5FA49F", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" - }, - "propertyPath": "Properties.StageName", - "category": "Best Practice", - "startLine": 201, - "startColumn": 9, - "endLine": 201, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" + "resolutionSource": "GetAtt ApiF70053CD.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIhelloworldC628BF91", + "logicalId": "ApiCustomerFEDF5079", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::AppSync::DataSource" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 210, + "startLine": 156, "startColumn": 9, - "endLine": 210, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 156, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt WafGatewayAPI5BA7C2CE.RootResourceId" + "resolutionSource": "GetAtt ApiF70053CD.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIhelloworldC628BF91", + "logicalId": "ApiCustomerFEDF5079", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::AppSync::DataSource" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 216, + "startLine": 162, "startColumn": 9, - "endLine": 216, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 162, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -51703,43 +52268,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIhelloworldC628BF91", + "logicalId": "ApiQuerygetCustomersResolver522EE433", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 217, + "startLine": 186, "startColumn": 9, - "endLine": 217, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 186, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'WafGatewayAPI5BA7C2CE'" + "resolutionSource": "GetAtt ApiF70053CD.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIhelloworldGETApiPermissionAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworldC704FF2F", + "logicalId": "ApiQuerygetCustomersResolver522EE433", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.FieldName", "category": "Best Practice", - "startLine": 228, + "startLine": 192, "startColumn": 9, - "endLine": 228, - "endColumn": 16, + "endLine": 192, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -51749,42 +52315,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "WafGatewayAPIhelloworldGETApiPermissionAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworldC704FF2F", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 229, - "startColumn": 9, - "endLine": 229, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt HelloWorldHandler30C22324.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIhelloworldGETApiPermissionAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworldC704FF2F", + "logicalId": "ApiQuerygetCustomersResolver522EE433", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.TypeName", "category": "Best Practice", - "startLine": 235, + "startLine": 193, "startColumn": 9, - "endLine": 235, - "endColumn": 19, + "endLine": 193, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -51794,42 +52338,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIhelloworldGETApiPermissionAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworldC704FF2F", + "logicalId": "ApiQuerygetCustomerResolver007520DC", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 236, - "startColumn": 9, - "endLine": 236, - "endColumn": 19, + "startLine": 210, + "startColumn": 9, + "endLine": 210, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:WafGatewayAPI5BA7C2CE}/{ref:WafGatewayAPIDeploymentStageprodEF5FA49F}/GET/helloworld)" + "resolutionSource": "GetAtt ApiF70053CD.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIhelloworldGETApiPermissionTestAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworld3D2EE2D0", + "logicalId": "ApiQuerygetCustomerResolver007520DC", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.FieldName", "category": "Best Practice", - "startLine": 272, + "startLine": 216, "startColumn": 9, - "endLine": 272, - "endColumn": 16, + "endLine": 216, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -51839,88 +52385,90 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIhelloworldGETApiPermissionTestAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworld3D2EE2D0", + "logicalId": "ApiQuerygetCustomerResolver007520DC", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.TypeName", "category": "Best Practice", - "startLine": 273, + "startLine": 217, "startColumn": 9, - "endLine": 273, - "endColumn": 22, + "endLine": 217, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt HelloWorldHandler30C22324.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIhelloworldGETApiPermissionTestAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworld3D2EE2D0", + "logicalId": "ApiMutationaddCustomerResolver53321A05", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 279, + "startLine": 234, "startColumn": 9, - "endLine": 279, - "endColumn": 19, + "endLine": 234, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt ApiF70053CD.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIhelloworldGETApiPermissionTestAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworld3D2EE2D0", + "logicalId": "ApiMutationaddCustomerResolver53321A05", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.FieldName", "category": "Best Practice", - "startLine": 280, + "startLine": 240, "startColumn": 9, - "endLine": 280, + "endLine": 240, "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:WafGatewayAPI5BA7C2CE}/test-invoke-stage/GET/helloworld)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIhelloworldGET802399FF", + "logicalId": "ApiMutationaddCustomerResolver53321A05", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.TypeName", "category": "Best Practice", - "startLine": 312, + "startLine": 241, "startColumn": 9, - "endLine": 312, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 241, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -51930,187 +52478,184 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIhelloworldGET802399FF", + "logicalId": "ApiMutationsaveCustomerResolver85516C23", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 313, + "startLine": 258, "startColumn": 9, - "endLine": 313, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 258, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'WafGatewayAPIhelloworldC628BF91'" + "resolutionSource": "GetAtt ApiF70053CD.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIhelloworldGET802399FF", + "logicalId": "ApiMutationsaveCustomerResolver85516C23", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.FieldName", "category": "Best Practice", - "startLine": 316, + "startLine": 264, "startColumn": 9, - "endLine": 316, + "endLine": 264, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'WafGatewayAPI5BA7C2CE'" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'HelloWorldHandlerServiceRole56E6BFBA' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HelloWorldHandlerServiceRole56E6BFBA", + "logicalId": "ApiMutationsaveCustomerResolver85516C23", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.TypeName", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, + "startLine": 265, + "startColumn": 9, + "endLine": 265, "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'HelloWorldHandler30C22324' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HelloWorldHandler30C22324", + "logicalId": "ApiMutationsaveCustomerWithFirstOrderResolver66DBDFD0", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 39, - "startColumn": 7, - "endLine": 39, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 282, + "startColumn": 9, + "endLine": 282, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt ApiF70053CD.ApiId" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'WafGatewayAPI5BA7C2CE' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPI5BA7C2CE", + "logicalId": "ApiMutationsaveCustomerWithFirstOrderResolver66DBDFD0", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FieldName", "category": "Best Practice", - "startLine": 98, - "startColumn": 7, - "endLine": 98, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 288, + "startColumn": 9, + "endLine": 288, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'WafGatewayAPICloudWatchRoleEE79D232' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPICloudWatchRoleEE79D232", + "logicalId": "ApiMutationsaveCustomerWithFirstOrderResolver66DBDFD0", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.TypeName", "category": "Best Practice", - "startLine": 112, - "startColumn": 7, - "endLine": 112, + "startLine": 289, + "startColumn": 9, + "endLine": 289, "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'WafGatewayAPIDeploymentStageprodEF5FA49F' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIDeploymentStageprodEF5FA49F", + "logicalId": "ApiMutationremoveCustomerResolver8435F803", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 179, - "startColumn": 7, - "endLine": 179, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/pat-the-waf-apigateway--TheWafStack.template.json": { - "filePath": "cdk/pat-the-waf-apigateway--TheWafStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 4, - "debug": 0 + "startLine": 306, + "startColumn": 9, + "endLine": 306, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt ApiF70053CD.ApiId" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Scope' is create-only; updating it will cause resource replacement", + "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebACL", + "logicalId": "ApiMutationremoveCustomerResolver8435F803", "entityType": "Resource", - "resourceType": "AWS::WAFv2::WebACL" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.Scope", + "propertyPath": "Properties.FieldName", "category": "Best Practice", - "startLine": 9, + "startLine": 312, "startColumn": 9, - "endLine": 9, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-wafv2.git", + "endLine": 312, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -52120,189 +52665,114 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebACLAssociation", + "logicalId": "ApiMutationremoveCustomerResolver8435F803", "entityType": "Resource", - "resourceType": "AWS::WAFv2::WebACLAssociation" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.ResourceArn", + "propertyPath": "Properties.TypeName", "category": "Best Practice", - "startLine": 105, + "startLine": 313, "startColumn": 9, - "endLine": 105, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-wafv2.git", + "endLine": 313, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:apigateway:us-east-1::/restapis/{dynamic}/stages/{dynamic})" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'WebACLArn' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebACLAssociation", + "logicalId": "ApiLoyaltyE1BE9BB1", "entityType": "Resource", - "resourceType": "AWS::WAFv2::WebACLAssociation" + "resourceType": "AWS::AppSync::DataSource" }, - "propertyPath": "Properties.WebACLArn", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 124, + "startLine": 379, "startColumn": 9, - "endLine": 124, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-wafv2.git", + "endLine": 379, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt WebACL.Arn" + "resolutionSource": "GetAtt ApiF70053CD.ApiId" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'WebACL' of type 'AWS::WAFv2::WebACL' supports Tags but none are configured", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebACL", + "logicalId": "ApiLoyaltyE1BE9BB1", "entityType": "Resource", - "resourceType": "AWS::WAFv2::WebACL" + "resourceType": "AWS::AppSync::DataSource" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/pat-the-xray-tracer--TheXrayDynamoFlow.template.json": { - "filePath": "cdk/pat-the-xray-tracer--TheXrayDynamoFlow.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 2, - "informational": 12, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "DynamoLambdaHandlerFB6EB814", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 171, + "startLine": 385, "startColumn": 9, - "endLine": 171, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "endLine": 385, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" + "lifecycle": "create-only" } }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", - "category": "Best Practice", - "startLine": 256, - "startColumn": 5, - "endLine": 256, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'DynamoLambdaHandlerServiceRole4C867B01' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "DynamoLambdaHandlerFB6EB814", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 176, - "startColumn": 7, - "endLine": 176, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HitsFF5AF8CD", + "logicalId": "ApiQuerygetLoyaltyLevelResolverC862DCEF", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 6, + "startLine": 409, "startColumn": 9, - "endLine": 6, - "endColumn": 19, + "endLine": 409, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt ApiF70053CD.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambdaHandlerAllowInvokeTheXrayDynamoFlowSNSTopicCD4F86C04F3B929A", + "logicalId": "ApiQuerygetLoyaltyLevelResolverC862DCEF", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.FieldName", "category": "Best Practice", - "startLine": 189, + "startLine": 415, "startColumn": 9, - "endLine": 189, - "endColumn": 16, + "endLine": 415, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -52312,182 +52782,167 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambdaHandlerAllowInvokeTheXrayDynamoFlowSNSTopicCD4F86C04F3B929A", + "logicalId": "ApiQuerygetLoyaltyLevelResolverC862DCEF", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.TypeName", "category": "Best Practice", - "startLine": 190, + "startLine": 416, "startColumn": 9, - "endLine": 190, - "endColumn": 22, + "endLine": 416, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt DynamoLambdaHandlerFB6EB814.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambdaHandlerAllowInvokeTheXrayDynamoFlowSNSTopicCD4F86C04F3B929A", + "logicalId": "thesimplegraphqlserviceapikey", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AppSync::ApiKey" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 196, + "startLine": 433, "startColumn": 9, - "endLine": 196, - "endColumn": 19, + "endLine": 433, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt ApiF70053CD.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambdaHandlerAllowInvokeTheXrayDynamoFlowSNSTopicCD4F86C04F3B929A", + "logicalId": "CustomerTable260DCC08", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 197, + "startLine": 447, "startColumn": 9, - "endLine": 197, + "endLine": 447, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Resource 'ApiApiLogsRole90293F72' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambdaHandlerSNSTopic27AC0D9B", + "logicalId": "ApiApiLogsRole90293F72", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 208, - "startColumn": 9, - "endLine": 208, + "startLine": 5, + "startColumn": 7, + "endLine": 5, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'ApiF70053CD' of type 'AWS::AppSync::GraphQLApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambdaHandlerSNSTopic27AC0D9B", + "logicalId": "ApiF70053CD", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::AppSync::GraphQLApi" }, - "propertyPath": "Properties.TopicArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 209, - "startColumn": 9, - "endLine": 209, + "startLine": 39, + "startColumn": 7, + "endLine": 39, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", + "message": "Resource 'ApiCustomerServiceRole28709567' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambdaHandlerSNSTopic27AC0D9B", + "logicalId": "ApiCustomerServiceRole28709567", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Endpoint", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 212, - "startColumn": 9, - "endLine": 212, + "startLine": 90, + "startColumn": 7, + "endLine": 90, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt DynamoLambdaHandlerFB6EB814.Arn" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Region' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'ApiLoyaltyServiceRole2B487CD2' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambdaHandlerSNSTopic27AC0D9B", + "logicalId": "ApiLoyaltyServiceRole2B487CD2", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Region", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 218, - "startColumn": 9, - "endLine": 218, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Select with unresolvable arguments)" - } + "startLine": 329, + "startColumn": 7, + "endLine": 329, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'HitsFF5AF8CD' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'CustomerTable260DCC08' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "HitsFF5AF8CD", + "logicalId": "CustomerTable260DCC08", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 446, "startColumn": 7, - "endLine": 5, + "endLine": 446, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -52495,19 +52950,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DynamoLambdaHandlerServiceRole4C867B01' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'LoyaltyLambdaHandlerServiceRole62E814E8' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambdaHandlerServiceRole4C867B01", + "logicalId": "LoyaltyLambdaHandlerServiceRole62E814E8", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 31, + "startLine": 469, "startColumn": 7, - "endLine": 31, + "endLine": 469, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -52515,35 +52970,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DynamoLambdaHandlerFB6EB814' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'LoyaltyLambdaHandler5918F0DA' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambdaHandlerFB6EB814", + "logicalId": "LoyaltyLambdaHandler5918F0DA", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 118, + "startLine": 503, "startColumn": 7, - "endLine": 118, + "endLine": 503, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/pat-the-xray-tracer--TheXrayHttpFlow.template.json": { - "filePath": "cdk/pat-the-xray-tracer--TheXrayHttpFlow.template.json", + "cdk/pat-the-simple-webservice--TheSimpleWebserviceStack.template.json": { + "filePath": "cdk/pat-the-simple-webservice--TheSimpleWebserviceStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 6, + "resourcesScanned": 10, "counts": { "fatal": 0, "errors": 1, "warnings": 2, - "informational": 10, + "informational": 15, "debug": 0 }, "suppressed": 0, @@ -52557,15 +53012,15 @@ "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "httpLambdaHandler66D9C9A8", + "logicalId": "DynamoLambdaHandlerFB6EB814", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 112, + "startLine": 163, "startColumn": 9, - "endLine": 112, + "endLine": 163, "endColumn": 17, "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", @@ -52577,17 +53032,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903' is not referenced anywhere in the template", + "message": "Parameter 'AssetParameters2e2fb63cef5de8866986a28a524c8f97b58a2ec13b66aa5753892cafdd7dbe46ArtifactHash18C20B66' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", + "logicalId": "AssetParameters2e2fb63cef5de8866986a28a524c8f97b58a2ec13b66aa5753892cafdd7dbe46ArtifactHash18C20B66", "entityType": "Parameter" }, - "propertyPath": "Parameters/AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", + "propertyPath": "Parameters/AssetParameters2e2fb63cef5de8866986a28a524c8f97b58a2ec13b66aa5753892cafdd7dbe46ArtifactHash18C20B66", "category": "Best Practice", - "startLine": 197, + "startLine": 300, "startColumn": 5, - "endLine": 197, + "endLine": 300, "endColumn": 105, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -52595,38 +53050,82 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'httpLambdaHandlerServiceRole01D49A7D' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'DynamoLambdaHandlerServiceRole4C867B01' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "httpLambdaHandler66D9C9A8", + "logicalId": "DynamoLambdaHandlerFB6EB814", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 117, + "startLine": 165, "startColumn": 7, - "endLine": 117, + "endLine": 165, "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "HitsFF5AF8CD", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.KeySchema", + "category": "Best Practice", + "startLine": 6, + "startColumn": 9, + "endLine": 6, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ProtocolType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "EndpointEEF1FD8F", + "entityType": "Resource", + "resourceType": "AWS::ApiGatewayV2::Api" + }, + "propertyPath": "Properties.ProtocolType", + "category": "Best Practice", + "startLine": 179, + "startColumn": 9, + "endLine": 179, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "httpLambdaHandlerAllowInvokeTheXrayHttpFlowSNSTopic4903AFE806D4343B", + "logicalId": "EndpointDefaultRouteTheSimpleWebserviceStackEndpointDefaultRouteC99962AAPermission4BC0F1E3", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 130, + "startLine": 188, "startColumn": 9, - "endLine": 130, + "endLine": 188, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -52640,21 +53139,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "httpLambdaHandlerAllowInvokeTheXrayHttpFlowSNSTopic4903AFE806D4343B", + "logicalId": "EndpointDefaultRouteTheSimpleWebserviceStackEndpointDefaultRouteC99962AAPermission4BC0F1E3", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 131, + "startLine": 189, "startColumn": 9, - "endLine": 131, + "endLine": 189, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt httpLambdaHandler66D9C9A8.Arn" + "resolutionSource": "GetAtt DynamoLambdaHandlerFB6EB814.Arn" } }, { @@ -52663,15 +53162,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "httpLambdaHandlerAllowInvokeTheXrayHttpFlowSNSTopic4903AFE806D4343B", + "logicalId": "EndpointDefaultRouteTheSimpleWebserviceStackEndpointDefaultRouteC99962AAPermission4BC0F1E3", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 137, + "startLine": 195, "startColumn": 9, - "endLine": 137, + "endLine": 195, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -52685,127 +53184,127 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "httpLambdaHandlerAllowInvokeTheXrayHttpFlowSNSTopic4903AFE806D4343B", + "logicalId": "EndpointDefaultRouteTheSimpleWebserviceStackEndpointDefaultRouteC99962AAPermission4BC0F1E3", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 138, + "startLine": 196, "startColumn": 9, - "endLine": 138, + "endLine": 196, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/*/*)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "httpLambdaHandlerSNSTopicEE70E0D4", + "logicalId": "EndpointDefaultRouteDefaultRouteIntegration4584A785", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::ApiGatewayV2::Integration" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 149, + "startLine": 228, "startColumn": 9, - "endLine": 149, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 228, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'EndpointEEF1FD8F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "httpLambdaHandlerSNSTopicEE70E0D4", + "logicalId": "EndpointDefaultRouteB7B22F2B", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::ApiGatewayV2::Route" }, - "propertyPath": "Properties.TopicArn", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 150, + "startLine": 247, "startColumn": 9, - "endLine": 150, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 247, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" + "resolutionSource": "Ref to 'EndpointEEF1FD8F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "httpLambdaHandlerSNSTopicEE70E0D4", + "logicalId": "EndpointDefaultStage0AD21F27", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::ApiGatewayV2::Stage" }, - "propertyPath": "Properties.Endpoint", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 153, + "startLine": 270, "startColumn": 9, - "endLine": 153, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 270, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt httpLambdaHandler66D9C9A8.Arn" + "resolutionSource": "Ref to 'EndpointEEF1FD8F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Region' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "httpLambdaHandlerSNSTopicEE70E0D4", + "logicalId": "EndpointDefaultStage0AD21F27", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::ApiGatewayV2::Stage" }, - "propertyPath": "Properties.Region", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 159, + "startLine": 273, "startColumn": 9, - "endLine": 159, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 273, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Select with unresolvable arguments)" + "lifecycle": "create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'httpLambdaHandlerServiceRole01D49A7D' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'HitsFF5AF8CD' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "httpLambdaHandlerServiceRole01D49A7D", + "logicalId": "HitsFF5AF8CD", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -52820,35 +53319,95 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'httpLambdaHandler66D9C9A8' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'DynamoLambdaHandlerServiceRole4C867B01' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "httpLambdaHandler66D9C9A8", + "logicalId": "DynamoLambdaHandlerServiceRole4C867B01", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 31, + "startColumn": 7, + "endLine": 31, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DynamoLambdaHandlerFB6EB814' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "DynamoLambdaHandlerFB6EB814", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 66, + "startLine": 110, "startColumn": 7, - "endLine": 66, + "endLine": 110, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'EndpointEEF1FD8F' of type 'AWS::ApiGatewayV2::Api' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "EndpointEEF1FD8F", + "entityType": "Resource", + "resourceType": "AWS::ApiGatewayV2::Api" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 177, + "startColumn": 7, + "endLine": 177, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'EndpointDefaultStage0AD21F27' of type 'AWS::ApiGatewayV2::Stage' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "EndpointDefaultStage0AD21F27", + "entityType": "Resource", + "resourceType": "AWS::ApiGatewayV2::Stage" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 269, + "startColumn": 7, + "endLine": 269, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/pat-the-xray-tracer--TheXraySQSFlow.template.json": { - "filePath": "cdk/pat-the-xray-tracer--TheXraySQSFlow.template.json", + "cdk/pat-the-state-machine--TheStateMachineStack.template.json": { + "filePath": "cdk/pat-the-state-machine--TheStateMachineStack.template.json", "status": "OK", "metadata": { "resourcesScanned": 11, "counts": { "fatal": 0, - "errors": 2, + "errors": 1, "warnings": 3, - "informational": 18, + "informational": 13, "debug": 0 }, "suppressed": 0, @@ -52862,38 +53421,15 @@ "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "sqsLambdaHandler0DD5DF9B", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 142, - "startColumn": 9, - "endLine": 142, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" - } - }, - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "sqsSubscribeLambdaHandlerD66392B8", + "logicalId": "pineappleCheckLambdaHandlerFDB742D5", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 332, + "startLine": 85, "startColumn": 9, - "endLine": 332, + "endLine": 85, "endColumn": 17, "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", @@ -52905,17 +53441,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903' is not referenced anywhere in the template", + "message": "Parameter 'AssetParameters86bbf54b0bd4ccecf85d2ecc5cb12563bcd092af45115fa1898ee6b4bcfaf6c4ArtifactHashB08CD707' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", + "logicalId": "AssetParameters86bbf54b0bd4ccecf85d2ecc5cb12563bcd092af45115fa1898ee6b4bcfaf6c4ArtifactHashB08CD707", "entityType": "Parameter" }, - "propertyPath": "Parameters/AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", + "propertyPath": "Parameters/AssetParameters86bbf54b0bd4ccecf85d2ecc5cb12563bcd092af45115fa1898ee6b4bcfaf6c4ArtifactHashB08CD707", "category": "Best Practice", - "startLine": 384, + "startLine": 334, "startColumn": 5, - "endLine": 384, + "endLine": 334, "endColumn": 105, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -52923,19 +53459,19 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'sqsLambdaHandlerServiceRole2F57B7B5' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'pineappleCheckLambdaHandlerServiceRoleFC4E3211' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "sqsLambdaHandler0DD5DF9B", + "logicalId": "pineappleCheckLambdaHandlerFDB742D5", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 147, + "startLine": 87, "startColumn": 7, - "endLine": 147, + "endLine": 87, "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -52943,139 +53479,62 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'sqsSubscribeLambdaHandlerServiceRole8F070FD3' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "sqsSubscribeLambdaHandlerD66392B8", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 337, - "startColumn": 7, - "endLine": 337, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for 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": "Queue4A7E3555", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 5, - "endLine": 3, - "endColumn": 19, - "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": "Queue4A7E3555", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 5, - "endLine": 3, - "endColumn": 19, - "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)", + "message": "'StateMachineRoleB840431D' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", "source": "CFN_LINT", "entity": { - "logicalId": "Queue4A7E3555", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "sqsLambdaHandlerAllowInvokeTheXraySQSFlowSNSTopicA671E652005D4F97", + "logicalId": "StateMachine2E01A3A5", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.Action", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 160, - "startColumn": 9, - "endLine": 160, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 195, + "startColumn": 7, + "endLine": 195, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'StateMachineType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sqsLambdaHandlerAllowInvokeTheXraySQSFlowSNSTopicA671E652005D4F97", + "logicalId": "StateMachine2E01A3A5", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.StateMachineType", "category": "Best Practice", - "startLine": 161, + "startLine": 190, "startColumn": 9, - "endLine": 161, - "endColumn": 22, + "endLine": 190, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-stepfunctions.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt sqsLambdaHandler0DD5DF9B.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'ProtocolType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sqsLambdaHandlerAllowInvokeTheXraySQSFlowSNSTopicA671E652005D4F97", + "logicalId": "thestatemachineapi69C81CC4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGatewayV2::Api" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.ProtocolType", "category": "Best Practice", - "startLine": 167, + "startLine": 244, "startColumn": 9, - "endLine": 167, - "endColumn": 19, + "endLine": 244, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -53085,43 +53544,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sqsLambdaHandlerAllowInvokeTheXraySQSFlowSNSTopicA671E652005D4F97", + "logicalId": "thestatemachineapiDefaultStageE23A2C15", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGatewayV2::Stage" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 168, + "startLine": 253, "startColumn": 9, - "endLine": 168, - "endColumn": 19, + "endLine": 253, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" + "resolutionSource": "Ref to 'thestatemachineapi69C81CC4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sqsLambdaHandlerSNSTopicC33599CE", + "logicalId": "thestatemachineapiDefaultStageE23A2C15", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::ApiGatewayV2::Stage" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 179, + "startLine": 256, "startColumn": 9, - "endLine": 179, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 256, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -53131,114 +53591,87 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sqsLambdaHandlerSNSTopicC33599CE", + "logicalId": "Integ", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::ApiGatewayV2::Integration" }, - "propertyPath": "Properties.TopicArn", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 180, + "startLine": 266, "startColumn": 9, - "endLine": 180, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 266, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" + "resolutionSource": "Ref to 'thestatemachineapi69C81CC4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sqsLambdaHandlerSNSTopicC33599CE", + "logicalId": "DefaultRoute", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::ApiGatewayV2::Route" }, - "propertyPath": "Properties.Endpoint", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 183, + "startLine": 294, "startColumn": 9, - "endLine": 183, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 294, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt sqsLambdaHandler0DD5DF9B.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Region' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "sqsLambdaHandlerSNSTopicC33599CE", - "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" - }, - "propertyPath": "Properties.Region", - "category": "Best Practice", - "startLine": 189, - "startColumn": 9, - "endLine": 189, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Select with unresolvable arguments)" + "resolutionSource": "Ref to 'thestatemachineapi69C81CC4'" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'pineappleCheckLambdaHandlerServiceRoleFC4E3211' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sqsSubscribeLambdaHandlerSqsEventSourceTheXraySQSFlowQueue7994C13E559DCA00", + "logicalId": "pineappleCheckLambdaHandlerServiceRoleFC4E3211", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.EventSourceArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 353, - "startColumn": 9, - "endLine": 353, - "endColumn": 24, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt Queue4A7E3555.Arn" - } + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Queue4A7E3555' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Resource 'pineappleCheckLambdaHandlerFDB742D5' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Queue4A7E3555", + "logicalId": "pineappleCheckLambdaHandlerFDB742D5", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 39, "startColumn": 7, - "endLine": 5, + "endLine": 39, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -53246,19 +53679,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sqsLambdaHandlerServiceRole2F57B7B5' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'StateMachineRoleB840431D' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sqsLambdaHandlerServiceRole2F57B7B5", + "logicalId": "StateMachineRoleB840431D", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 14, + "startLine": 98, "startColumn": 7, - "endLine": 14, + "endLine": 98, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -53266,19 +53699,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sqsLambdaHandler0DD5DF9B' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'StateMachine2E01A3A5' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sqsLambdaHandler0DD5DF9B", + "logicalId": "StateMachine2E01A3A5", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::StepFunctions::StateMachine" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 89, + "startLine": 168, "startColumn": 7, - "endLine": 89, + "endLine": 168, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -53286,19 +53719,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sqsSubscribeLambdaHandlerServiceRole8F070FD3' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'HttpApiRole79B5C31A' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sqsSubscribeLambdaHandlerServiceRole8F070FD3", + "logicalId": "HttpApiRole79B5C31A", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 209, + "startLine": 205, "startColumn": 7, - "endLine": 209, + "endLine": 205, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -53306,19 +53739,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sqsSubscribeLambdaHandlerD66392B8' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'thestatemachineapi69C81CC4' of type 'AWS::ApiGatewayV2::Api' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sqsSubscribeLambdaHandlerD66392B8", + "logicalId": "thestatemachineapi69C81CC4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGatewayV2::Api" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 286, + "startLine": 242, "startColumn": 7, - "endLine": 286, + "endLine": 242, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -53326,35 +53759,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sqsSubscribeLambdaHandlerSqsEventSourceTheXraySQSFlowQueue7994C13E559DCA00' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", + "message": "Resource 'thestatemachineapiDefaultStageE23A2C15' of type 'AWS::ApiGatewayV2::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sqsSubscribeLambdaHandlerSqsEventSourceTheXraySQSFlowQueue7994C13E559DCA00", + "logicalId": "thestatemachineapiDefaultStageE23A2C15", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::ApiGatewayV2::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 349, + "startLine": 252, "startColumn": 7, - "endLine": 349, + "endLine": 252, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/pat-the-xray-tracer--TheXraySnsFlow.template.json": { - "filePath": "cdk/pat-the-xray-tracer--TheXraySnsFlow.template.json", + "cdk/pat-the-waf-apigateway--APIGatewayStack.template.json": { + "filePath": "cdk/pat-the-waf-apigateway--APIGatewayStack.template.json", "status": "OK", "metadata": { "resourcesScanned": 12, "counts": { "fatal": 0, - "errors": 2, - "warnings": 3, - "informational": 20, + "errors": 1, + "warnings": 2, + "informational": 22, "debug": 0 }, "suppressed": 0, @@ -53368,38 +53801,15 @@ "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "snsLambdaHandlerE7B0ABE3", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 135, - "startColumn": 9, - "endLine": 135, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" - } - }, - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "snsSubscriptionLambdaHandler68619CD8", + "logicalId": "HelloWorldHandler30C22324", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 309, + "startLine": 85, "startColumn": 9, - "endLine": 309, + "endLine": 85, "endColumn": 17, "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", @@ -53411,17 +53821,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903' is not referenced anywhere in the template", + "message": "Parameter 'AssetParametersdbbf200867db4bc38eadd4ce5f5b75dce1049f40752e3c690ec4f6b17c996a69ArtifactHash53F25514' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", + "logicalId": "AssetParametersdbbf200867db4bc38eadd4ce5f5b75dce1049f40752e3c690ec4f6b17c996a69ArtifactHash53F25514", "entityType": "Parameter" }, - "propertyPath": "Parameters/AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", + "propertyPath": "Parameters/AssetParametersdbbf200867db4bc38eadd4ce5f5b75dce1049f40752e3c690ec4f6b17c996a69ArtifactHash53F25514", "category": "Best Practice", - "startLine": 381, + "startLine": 388, "startColumn": 5, - "endLine": 381, + "endLine": 388, "endColumn": 105, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -53429,59 +53839,88 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'snsLambdaHandlerServiceRole7F428B88' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'HelloWorldHandlerServiceRole56E6BFBA' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "snsLambdaHandlerE7B0ABE3", + "logicalId": "HelloWorldHandler30C22324", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 140, + "startLine": 87, "startColumn": 7, - "endLine": 140, + "endLine": 87, "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'snsSubscriptionLambdaHandlerServiceRole215E543C' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "snsSubscriptionLambdaHandler68619CD8", + "logicalId": "WafGatewayAPIDeploymentDDF5787C50cd54e1b820c67ddfe6e24991b1dd3f", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 314, - "startColumn": 7, - "endLine": 314, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 164, + "startColumn": 9, + "endLine": 164, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'WafGatewayAPI5BA7C2CE'" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsLambdaHandlerAllowInvokeTheXraySnsFlowSNSTopic80B9595935AF18F0", + "logicalId": "WafGatewayAPIDeploymentStageprodEF5FA49F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 153, + "startLine": 180, "startColumn": 9, - "endLine": 153, - "endColumn": 16, + "endLine": 180, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'WafGatewayAPI5BA7C2CE'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "WafGatewayAPIDeploymentStageprodEF5FA49F", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Stage" + }, + "propertyPath": "Properties.StageName", + "category": "Best Practice", + "startLine": 201, + "startColumn": 9, + "endLine": 201, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -53491,42 +53930,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsLambdaHandlerAllowInvokeTheXraySnsFlowSNSTopic80B9595935AF18F0", + "logicalId": "WafGatewayAPIhelloworldC628BF91", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 154, + "startLine": 210, "startColumn": 9, - "endLine": 154, - "endColumn": 22, + "endLine": 210, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt snsLambdaHandlerE7B0ABE3.Arn" + "resolutionSource": "GetAtt WafGatewayAPI5BA7C2CE.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsLambdaHandlerAllowInvokeTheXraySnsFlowSNSTopic80B9595935AF18F0", + "logicalId": "WafGatewayAPIhelloworldC628BF91", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 160, + "startLine": 216, "startColumn": 9, - "endLine": 160, - "endColumn": 19, + "endLine": 216, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -53536,43 +53977,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsLambdaHandlerAllowInvokeTheXraySnsFlowSNSTopic80B9595935AF18F0", + "logicalId": "WafGatewayAPIhelloworldC628BF91", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 161, + "startLine": 217, "startColumn": 9, - "endLine": 161, + "endLine": 217, "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" + "resolutionSource": "Ref to 'WafGatewayAPI5BA7C2CE'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsLambdaHandlerSNSTopic3B2CFF1D", + "logicalId": "WafGatewayAPIhelloworldGETApiPermissionAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworldC704FF2F", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 172, + "startLine": 228, "startColumn": 9, - "endLine": 172, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 228, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -53582,73 +54023,69 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsLambdaHandlerSNSTopic3B2CFF1D", + "logicalId": "WafGatewayAPIhelloworldGETApiPermissionAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworldC704FF2F", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.TopicArn", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 173, + "startLine": 229, "startColumn": 9, - "endLine": 173, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 229, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" + "resolutionSource": "GetAtt HelloWorldHandler30C22324.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsLambdaHandlerSNSTopic3B2CFF1D", + "logicalId": "WafGatewayAPIhelloworldGETApiPermissionAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworldC704FF2F", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Endpoint", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 176, + "startLine": 235, "startColumn": 9, - "endLine": 176, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 235, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt snsLambdaHandlerE7B0ABE3.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Region' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsLambdaHandlerSNSTopic3B2CFF1D", + "logicalId": "WafGatewayAPIhelloworldGETApiPermissionAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworldC704FF2F", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Region", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 182, + "startLine": 236, "startColumn": 9, - "endLine": 182, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 236, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Select with unresolvable arguments)" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:WafGatewayAPI5BA7C2CE}/{ref:WafGatewayAPIDeploymentStageprodEF5FA49F}/GET/helloworld)" } }, { @@ -53657,15 +54094,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsSubscriptionLambdaHandlerAllowInvokeTheXraySnsFlowTheXRayTracerSnsTopic86AE60703F758919", + "logicalId": "WafGatewayAPIhelloworldGETApiPermissionTestAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworld3D2EE2D0", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 327, + "startLine": 272, "startColumn": 9, - "endLine": 327, + "endLine": 272, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -53679,21 +54116,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsSubscriptionLambdaHandlerAllowInvokeTheXraySnsFlowTheXRayTracerSnsTopic86AE60703F758919", + "logicalId": "WafGatewayAPIhelloworldGETApiPermissionTestAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworld3D2EE2D0", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 328, + "startLine": 273, "startColumn": 9, - "endLine": 328, + "endLine": 273, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt snsSubscriptionLambdaHandler68619CD8.Arn" + "resolutionSource": "GetAtt HelloWorldHandler30C22324.Arn" } }, { @@ -53702,15 +54139,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsSubscriptionLambdaHandlerAllowInvokeTheXraySnsFlowTheXRayTracerSnsTopic86AE60703F758919", + "logicalId": "WafGatewayAPIhelloworldGETApiPermissionTestAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworld3D2EE2D0", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 334, + "startLine": 279, "startColumn": 9, - "endLine": 334, + "endLine": 279, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -53724,40 +54161,40 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsSubscriptionLambdaHandlerAllowInvokeTheXraySnsFlowTheXRayTracerSnsTopic86AE60703F758919", + "logicalId": "WafGatewayAPIhelloworldGETApiPermissionTestAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworld3D2EE2D0", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 335, + "startLine": 280, "startColumn": 9, - "endLine": 335, + "endLine": 280, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheXRayTracerSnsTopicCCE2005E'" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:WafGatewayAPI5BA7C2CE}/test-invoke-stage/GET/helloworld)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsSubscriptionLambdaHandlerTheXRayTracerSnsTopic6FDB75DD", + "logicalId": "WafGatewayAPIhelloworldGET802399FF", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 346, + "startLine": 312, "startColumn": 9, - "endLine": 346, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 312, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -53767,60 +54204,60 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsSubscriptionLambdaHandlerTheXRayTracerSnsTopic6FDB75DD", + "logicalId": "WafGatewayAPIhelloworldGET802399FF", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.TopicArn", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 347, + "startLine": 313, "startColumn": 9, - "endLine": 347, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 313, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheXRayTracerSnsTopicCCE2005E'" + "resolutionSource": "Ref to 'WafGatewayAPIhelloworldC628BF91'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsSubscriptionLambdaHandlerTheXRayTracerSnsTopic6FDB75DD", + "logicalId": "WafGatewayAPIhelloworldGET802399FF", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Endpoint", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 350, + "startLine": 316, "startColumn": 9, - "endLine": 350, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 316, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt snsSubscriptionLambdaHandler68619CD8.Arn" + "resolutionSource": "Ref to 'WafGatewayAPI5BA7C2CE'" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TheXRayTracerSnsTopicCCE2005E' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'HelloWorldHandlerServiceRole56E6BFBA' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TheXRayTracerSnsTopicCCE2005E", + "logicalId": "HelloWorldHandlerServiceRole56E6BFBA", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -53835,19 +54272,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'snsLambdaHandlerServiceRole7F428B88' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'HelloWorldHandler30C22324' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "snsLambdaHandlerServiceRole7F428B88", + "logicalId": "HelloWorldHandler30C22324", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 14, + "startLine": 39, "startColumn": 7, - "endLine": 14, + "endLine": 39, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -53855,19 +54292,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'snsLambdaHandlerE7B0ABE3' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'WafGatewayAPI5BA7C2CE' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "snsLambdaHandlerE7B0ABE3", + "logicalId": "WafGatewayAPI5BA7C2CE", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::RestApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 82, + "startLine": 98, "startColumn": 7, - "endLine": 82, + "endLine": 98, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -53875,19 +54312,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'snsSubscriptionLambdaHandlerServiceRole215E543C' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'WafGatewayAPICloudWatchRoleEE79D232' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "snsSubscriptionLambdaHandlerServiceRole215E543C", + "logicalId": "WafGatewayAPICloudWatchRoleEE79D232", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 202, + "startLine": 112, "startColumn": 7, - "endLine": 202, + "endLine": 112, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -53895,35 +54332,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'snsSubscriptionLambdaHandler68619CD8' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'WafGatewayAPIDeploymentStageprodEF5FA49F' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "snsSubscriptionLambdaHandler68619CD8", + "logicalId": "WafGatewayAPIDeploymentStageprodEF5FA49F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 263, + "startLine": 179, "startColumn": 7, - "endLine": 263, + "endLine": 179, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/pat-the-xray-tracer--TheXrayTracerStack.template.json": { - "filePath": "cdk/pat-the-xray-tracer--TheXrayTracerStack.template.json", + "cdk/pat-the-waf-apigateway--TheWafStack.template.json": { + "filePath": "cdk/pat-the-waf-apigateway--TheWafStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 14, + "resourcesScanned": 3, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 23, + "informational": 4, "debug": 0 }, "suppressed": 0, @@ -53934,233 +54371,212 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Scope' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIDeploymentB3CB89A0a689bf68bef2302d0715c2d1a50794fc", + "logicalId": "WebACL", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::WAFv2::WebACL" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Scope", "category": "Best Practice", - "startLine": 75, + "startLine": 9, "startColumn": 9, - "endLine": 75, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 9, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-wafv2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'xrayTracerAPIA84CAE80'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIDeploymentStageprod85442A48", + "logicalId": "WebACLAssociation", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::WAFv2::WebACLAssociation" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.ResourceArn", "category": "Best Practice", - "startLine": 94, + "startLine": 105, "startColumn": 9, - "endLine": 94, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 105, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-wafv2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'xrayTracerAPIA84CAE80'" + "resolutionSource": "dynamic (Join:arn:aws:apigateway:us-east-1::/restapis/{dynamic}/stages/{dynamic})" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'WebACLArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIDeploymentStageprod85442A48", + "logicalId": "WebACLAssociation", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::WAFv2::WebACLAssociation" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.WebACLArn", "category": "Best Practice", - "startLine": 109, + "startLine": 124, "startColumn": 9, - "endLine": 109, + "endLine": 124, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "xrayTracerAPIGET7490A366", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.HttpMethod", - "category": "Best Practice", - "startLine": 119, - "startColumn": 9, - "endLine": 119, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-wafv2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt WebACL.Arn" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Resource 'WebACL' of type 'AWS::WAFv2::WebACL' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIGET7490A366", + "logicalId": "WebACL", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::WAFv2::WebACL" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 120, - "startColumn": 9, - "endLine": 120, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt xrayTracerAPIA84CAE80.RootResourceId" - } + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/pat-the-xray-tracer--TheXrayDynamoFlow.template.json": { + "filePath": "cdk/pat-the-xray-tracer--TheXrayDynamoFlow.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 7, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 2, + "informational": 12, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "xrayTracerAPIGET7490A366", + "logicalId": "DynamoLambdaHandlerFB6EB814", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 126, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 171, "startColumn": 9, - "endLine": 126, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 171, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'xrayTracerAPIA84CAE80'" + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "xrayTracerAPIproxy719DA214", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "logicalId": "AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", + "entityType": "Parameter" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Parameters/AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", "category": "Best Practice", - "startLine": 215, - "startColumn": 9, - "endLine": 215, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt xrayTracerAPIA84CAE80.RootResourceId" - } + "startLine": 256, + "startColumn": 5, + "endLine": 256, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'DynamoLambdaHandlerServiceRole4C867B01' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "xrayTracerAPIproxy719DA214", + "logicalId": "DynamoLambdaHandlerFB6EB814", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 221, - "startColumn": 9, - "endLine": 221, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 176, + "startColumn": 7, + "endLine": 176, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIproxy719DA214", + "logicalId": "HitsFF5AF8CD", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 222, + "startLine": 6, "startColumn": 9, - "endLine": 222, + "endLine": 6, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'xrayTracerAPIA84CAE80'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIproxyGET4E348609", + "logicalId": "DynamoLambdaHandlerAllowInvokeTheXrayDynamoFlowSNSTopicCD4F86C04F3B929A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 233, + "startLine": 189, "startColumn": 9, - "endLine": 233, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 189, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -54170,115 +54586,88 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIproxyGET4E348609", + "logicalId": "DynamoLambdaHandlerAllowInvokeTheXrayDynamoFlowSNSTopicCD4F86C04F3B929A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 234, + "startLine": 190, "startColumn": 9, - "endLine": 234, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 190, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'xrayTracerAPIproxy719DA214'" + "resolutionSource": "GetAtt DynamoLambdaHandlerFB6EB814.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIproxyGET4E348609", + "logicalId": "DynamoLambdaHandlerAllowInvokeTheXrayDynamoFlowSNSTopicCD4F86C04F3B929A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 237, + "startLine": 196, "startColumn": 9, - "endLine": 237, + "endLine": 196, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'xrayTracerAPIA84CAE80'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIResponseModel2591E14E", + "logicalId": "DynamoLambdaHandlerAllowInvokeTheXrayDynamoFlowSNSTopicCD4F86C04F3B929A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 326, + "startLine": 197, "startColumn": 9, - "endLine": 326, + "endLine": 197, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'xrayTracerAPIA84CAE80'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "xrayTracerAPIResponseModel2591E14E", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" - }, - "propertyPath": "Properties.ContentType", - "category": "Best Practice", - "startLine": 329, - "startColumn": 9, - "endLine": 329, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" + "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIResponseModel2591E14E", + "logicalId": "DynamoLambdaHandlerSNSTopic27AC0D9B", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 330, + "startLine": 208, "startColumn": 9, - "endLine": 330, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 208, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -54288,129 +54677,91 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIErrorResponseModel24719E91", + "logicalId": "DynamoLambdaHandlerSNSTopic27AC0D9B", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.TopicArn", "category": "Best Practice", - "startLine": 349, + "startLine": 209, "startColumn": 9, - "endLine": 349, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 209, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'xrayTracerAPIA84CAE80'" + "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", + "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIErrorResponseModel24719E91", + "logicalId": "DynamoLambdaHandlerSNSTopic27AC0D9B", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.ContentType", + "propertyPath": "Properties.Endpoint", "category": "Best Practice", - "startLine": 352, + "startLine": 212, "startColumn": 9, - "endLine": 352, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 212, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt DynamoLambdaHandlerFB6EB814.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "xrayTracerAPIErrorResponseModel24719E91", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" - }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 353, - "startColumn": 9, - "endLine": 353, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TheXRayTracerSnsFanOutTopicDE7E70F8' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TheXRayTracerSnsFanOutTopicDE7E70F8", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'xrayTracerAPIA84CAE80' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Property 'Region' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIA84CAE80", + "logicalId": "DynamoLambdaHandlerSNSTopic27AC0D9B", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Region", "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 218, + "startColumn": 9, + "endLine": 218, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Select with unresolvable arguments)" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'xrayTracerAPICloudWatchRoleCCB113F4' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'HitsFF5AF8CD' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPICloudWatchRoleCCB113F4", + "logicalId": "HitsFF5AF8CD", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 23, + "startLine": 5, "startColumn": 7, - "endLine": 23, + "endLine": 5, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -54418,19 +54769,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'xrayTracerAPIDeploymentStageprod85442A48' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Resource 'DynamoLambdaHandlerServiceRole4C867B01' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIDeploymentStageprod85442A48", + "logicalId": "DynamoLambdaHandlerServiceRole4C867B01", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 93, + "startLine": 31, "startColumn": 7, - "endLine": 93, + "endLine": 31, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -54438,35 +54789,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ApiGatewaySNSRole1BAAAE75' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'DynamoLambdaHandlerFB6EB814' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewaySNSRole1BAAAE75", + "logicalId": "DynamoLambdaHandlerFB6EB814", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 374, + "startLine": 118, "startColumn": 7, - "endLine": 374, + "endLine": 118, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/py-api-cors-lambda--ApiCorsLambdaStack.template.json": { - "filePath": "cdk/py-api-cors-lambda--ApiCorsLambdaStack.template.json", + "cdk/pat-the-xray-tracer--TheXrayHttpFlow.template.json": { + "filePath": "cdk/pat-the-xray-tracer--TheXrayHttpFlow.template.json", "status": "OK", "metadata": { - "resourcesScanned": 13, + "resourcesScanned": 6, "counts": { "fatal": 0, "errors": 1, - "warnings": 1, - "informational": 25, + "warnings": 2, + "informational": 10, "debug": 0 }, "suppressed": 0, @@ -54475,113 +54826,127 @@ }, "diagnostics": [ { - "ruleId": "E2531", + "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'python3.7' was deprecated on '2023-12-04'. Creation was disabled on '2024-01-09', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "ApiCorsLambda5083F55F", + "logicalId": "httpLambdaHandler66D9C9A8", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 53, - "startColumn": 5, - "endLine": 53, - "endColumn": 13, - "ruleDescription": "Check if Lambda Function Runtimes are blocked for create", + "startLine": 112, + "startColumn": 9, + "endLine": 112, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "actualValue": "python3.7", - "lifecycle": "create-blocked" + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" } }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", + "category": "Best Practice", + "startLine": 197, + "startColumn": 5, + "endLine": 197, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, { "ruleId": "W3005", "severity": "WARN", - "message": "'ApiCorsLambdaServiceRole0DB39061' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'httpLambdaHandlerServiceRole01D49A7D' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "ApiCorsLambda5083F55F", + "logicalId": "httpLambdaHandler66D9C9A8", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 55, - "startColumn": 4, - "endLine": 55, - "endColumn": 14, + "startLine": 117, + "startColumn": 7, + "endLine": 117, + "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsDeployment248C0700a88c9b4f7fb5eae343fa3265f3ea5ffe", + "logicalId": "httpLambdaHandlerAllowInvokeTheXrayHttpFlowSNSTopic4903AFE806D4343B", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 133, - "startColumn": 5, - "endLine": 133, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 130, + "startColumn": 9, + "endLine": 130, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ApiGatewayWithCors6DE4076F'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsDeploymentStageprod7F1DD875", + "logicalId": "httpLambdaHandlerAllowInvokeTheXrayHttpFlowSNSTopic4903AFE806D4343B", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 153, - "startColumn": 5, - "endLine": 153, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 131, + "startColumn": 9, + "endLine": 131, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ApiGatewayWithCors6DE4076F'" + "resolutionSource": "GetAtt httpLambdaHandler66D9C9A8.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsDeploymentStageprod7F1DD875", + "logicalId": "httpLambdaHandlerAllowInvokeTheXrayHttpFlowSNSTopic4903AFE806D4343B", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 156, - "startColumn": 5, - "endLine": 156, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 137, + "startColumn": 9, + "endLine": 137, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -54591,44 +54956,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsexample5AE32A3C", + "logicalId": "httpLambdaHandlerAllowInvokeTheXrayHttpFlowSNSTopic4903AFE806D4343B", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 168, - "startColumn": 5, - "endLine": 168, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 138, + "startColumn": 9, + "endLine": 138, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiGatewayWithCors6DE4076F.RootResourceId" + "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsexample5AE32A3C", + "logicalId": "httpLambdaHandlerSNSTopicEE70E0D4", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 174, - "startColumn": 5, - "endLine": 174, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 149, + "startColumn": 9, + "endLine": 149, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -54638,159 +55002,309 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsexample5AE32A3C", + "logicalId": "httpLambdaHandlerSNSTopicEE70E0D4", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.TopicArn", "category": "Best Practice", - "startLine": 175, - "startColumn": 5, - "endLine": 175, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 150, + "startColumn": 9, + "endLine": 150, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ApiGatewayWithCors6DE4076F'" + "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsexampleOPTIONS2F5D9F4D", + "logicalId": "httpLambdaHandlerSNSTopicEE70E0D4", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.Endpoint", "category": "Best Practice", - "startLine": 188, - "startColumn": 5, - "endLine": 188, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "startLine": 153, + "startColumn": 9, + "endLine": 153, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt httpLambdaHandler66D9C9A8.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'Region' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsexampleOPTIONS2F5D9F4D", + "logicalId": "httpLambdaHandlerSNSTopicEE70E0D4", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.Region", "category": "Best Practice", - "startLine": 215, - "startColumn": 5, - "endLine": 215, + "startLine": 159, + "startColumn": 9, + "endLine": 159, "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ApiGatewayWithCorsexample5AE32A3C'" + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Select with unresolvable arguments)" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'httpLambdaHandlerServiceRole01D49A7D' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsexampleOPTIONS2F5D9F4D", + "logicalId": "httpLambdaHandlerServiceRole01D49A7D", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 218, - "startColumn": 5, - "endLine": 218, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ApiGatewayWithCors6DE4076F'" - } + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Resource 'httpLambdaHandler66D9C9A8' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample83B6C89A", + "logicalId": "httpLambdaHandler66D9C9A8", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 229, - "startColumn": 5, - "endLine": 229, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", + "startLine": 66, + "startColumn": 7, + "endLine": 66, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/pat-the-xray-tracer--TheXraySQSFlow.template.json": { + "filePath": "cdk/pat-the-xray-tracer--TheXraySQSFlow.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 11, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 3, + "informational": 18, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "sqsLambdaHandler0DD5DF9B", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 142, + "startColumn": 9, + "endLine": 142, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "sqsSubscribeLambdaHandlerD66392B8", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 332, + "startColumn": 9, + "endLine": 332, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", + "category": "Best Practice", + "startLine": 384, + "startColumn": 5, + "endLine": 384, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'sqsLambdaHandlerServiceRole2F57B7B5' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "sqsLambdaHandler0DD5DF9B", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 147, + "startColumn": 7, + "endLine": 147, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'sqsSubscribeLambdaHandlerServiceRole8F070FD3' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "sqsSubscribeLambdaHandlerD66392B8", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 337, + "startColumn": 7, + "endLine": 337, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "ApiGatewayWithCorsexampleGETApiPermissionApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample83B6C89A", + "logicalId": "Queue4A7E3555", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 230, + "startLine": 3, "startColumn": 5, - "endLine": 230, + "endLine": 3, + "endColumn": 19, + "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": "Queue4A7E3555", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 19, + "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": "Queue4A7E3555", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 5, + "startColumn": 7, + "endLine": 5, "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiCorsLambda5083F55F.Arn" - } + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample83B6C89A", + "logicalId": "sqsLambdaHandlerAllowInvokeTheXraySQSFlowSNSTopicA671E652005D4F97", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 236, - "startColumn": 5, - "endLine": 236, - "endColumn": 15, + "startLine": 160, + "startColumn": 9, + "endLine": 160, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -54800,42 +55314,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample83B6C89A", + "logicalId": "sqsLambdaHandlerAllowInvokeTheXraySQSFlowSNSTopicA671E652005D4F97", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 237, - "startColumn": 5, - "endLine": 237, - "endColumn": 15, + "startLine": 161, + "startColumn": 9, + "endLine": 161, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:ApiGatewayWithCors6DE4076F}/{ref:ApiGatewayWithCorsDeploymentStageprod7F1DD875}/GET/example)" + "resolutionSource": "GetAtt sqsLambdaHandler0DD5DF9B.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionTestApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample07A026FD", + "logicalId": "sqsLambdaHandlerAllowInvokeTheXraySQSFlowSNSTopicA671E652005D4F97", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 273, - "startColumn": 5, - "endLine": 273, - "endColumn": 12, + "startLine": 167, + "startColumn": 9, + "endLine": 167, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -54845,42 +55359,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionTestApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample07A026FD", + "logicalId": "sqsLambdaHandlerAllowInvokeTheXraySQSFlowSNSTopicA671E652005D4F97", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 274, - "startColumn": 5, - "endLine": 274, - "endColumn": 18, + "startLine": 168, + "startColumn": 9, + "endLine": 168, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiCorsLambda5083F55F.Arn" + "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionTestApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample07A026FD", + "logicalId": "sqsLambdaHandlerSNSTopicC33599CE", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 280, - "startColumn": 5, - "endLine": 280, - "endColumn": 15, + "startLine": 179, + "startColumn": 9, + "endLine": 179, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -54890,209 +55405,230 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionTestApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample07A026FD", + "logicalId": "sqsLambdaHandlerSNSTopicC33599CE", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.TopicArn", "category": "Best Practice", - "startLine": 281, - "startColumn": 5, - "endLine": 281, - "endColumn": 15, + "startLine": 180, + "startColumn": 9, + "endLine": 180, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:ApiGatewayWithCors6DE4076F}/test-invoke-stage/GET/example)" + "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsexampleGETCC962CB3", + "logicalId": "sqsLambdaHandlerSNSTopicC33599CE", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.Endpoint", "category": "Best Practice", - "startLine": 314, - "startColumn": 5, - "endLine": 314, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "startLine": 183, + "startColumn": 9, + "endLine": 183, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt sqsLambdaHandler0DD5DF9B.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'Region' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsexampleGETCC962CB3", + "logicalId": "sqsLambdaHandlerSNSTopicC33599CE", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.Region", "category": "Best Practice", - "startLine": 358, - "startColumn": 5, - "endLine": 358, + "startLine": 189, + "startColumn": 9, + "endLine": 189, "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ApiGatewayWithCorsexample5AE32A3C'" + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Select with unresolvable arguments)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsexampleGETCC962CB3", + "logicalId": "sqsSubscribeLambdaHandlerSqsEventSourceTheXraySQSFlowQueue7994C13E559DCA00", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.EventSourceArn", "category": "Best Practice", - "startLine": 361, - "startColumn": 5, - "endLine": 361, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "startLine": 353, + "startColumn": 9, + "endLine": 353, + "endColumn": 24, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ApiGatewayWithCors6DE4076F'" + "resolutionSource": "GetAtt Queue4A7E3555.Arn" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ApiCorsLambdaServiceRole0DB39061' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'Queue4A7E3555' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiCorsLambdaServiceRole0DB39061", + "logicalId": "Queue4A7E3555", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::SQS::Queue" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 5, - "startColumn": 4, + "startColumn": 7, "endLine": 5, - "endColumn": 15, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ApiCorsLambda5083F55F' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'sqsLambdaHandlerServiceRole2F57B7B5' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiCorsLambda5083F55F", + "logicalId": "sqsLambdaHandlerServiceRole2F57B7B5", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 39, - "startColumn": 4, - "endLine": 39, - "endColumn": 15, + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ApiGatewayWithCors6DE4076F' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Resource 'sqsLambdaHandler0DD5DF9B' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCors6DE4076F", + "logicalId": "sqsLambdaHandler0DD5DF9B", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 67, - "startColumn": 4, - "endLine": 67, - "endColumn": 15, + "startLine": 89, + "startColumn": 7, + "endLine": 89, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ApiGatewayWithCorsCloudWatchRole9C3700F0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'sqsSubscribeLambdaHandlerServiceRole8F070FD3' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsCloudWatchRole9C3700F0", + "logicalId": "sqsSubscribeLambdaHandlerServiceRole8F070FD3", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 76, - "startColumn": 4, - "endLine": 76, - "endColumn": 15, + "startLine": 209, + "startColumn": 7, + "endLine": 209, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ApiGatewayWithCorsDeploymentStageprod7F1DD875' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Resource 'sqsSubscribeLambdaHandlerD66392B8' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsDeploymentStageprod7F1DD875", + "logicalId": "sqsSubscribeLambdaHandlerD66392B8", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 149, - "startColumn": 4, - "endLine": 149, - "endColumn": 15, + "startLine": 286, + "startColumn": 7, + "endLine": 286, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'sqsSubscribeLambdaHandlerSqsEventSourceTheXraySQSFlowQueue7994C13E559DCA00' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "sqsSubscribeLambdaHandlerSqsEventSourceTheXraySQSFlowQueue7994C13E559DCA00", + "entityType": "Resource", + "resourceType": "AWS::Lambda::EventSourceMapping" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 349, + "startColumn": 7, + "endLine": 349, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/py-api-eventbridge-lambda--ApiEventBridgeLambdaStack.template.json": { - "filePath": "cdk/py-api-eventbridge-lambda--ApiEventBridgeLambdaStack.template.json", + "cdk/pat-the-xray-tracer--TheXraySnsFlow.template.json": { + "filePath": "cdk/pat-the-xray-tracer--TheXraySnsFlow.template.json", "status": "OK", "metadata": { - "resourcesScanned": 28, + "resourcesScanned": 12, "counts": { "fatal": 0, - "errors": 0, - "warnings": 6, - "informational": 41, + "errors": 2, + "warnings": 3, + "informational": 20, "debug": 0 }, "suppressed": 0, @@ -55101,133 +55637,293 @@ }, "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "eventProducerLambda100D549C", + "logicalId": "snsLambdaHandlerE7B0ABE3", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 77, - "startColumn": 5, - "endLine": 77, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "startLine": 135, + "startColumn": 9, + "endLine": 135, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "eventConsumer1Lambda4AF2292E", + "logicalId": "snsSubscriptionLambdaHandler68619CD8", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 140, - "startColumn": 5, - "endLine": 140, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "startLine": 309, + "startColumn": 9, + "endLine": 309, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" } }, { - "ruleId": "W2531", + "ruleId": "W2001", "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Parameter 'AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "eventConsumer2Lambda1631C47A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "logicalId": "AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", + "entityType": "Parameter" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 250, + "propertyPath": "Parameters/AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", + "category": "Best Practice", + "startLine": 381, "startColumn": 5, - "endLine": 250, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" - } + "endLine": 381, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { "ruleId": "W3005", "severity": "WARN", - "message": "'eventProducerLambdaServiceRoleD019EB99' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'snsLambdaHandlerServiceRole7F428B88' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "eventProducerLambda100D549C", + "logicalId": "snsLambdaHandlerE7B0ABE3", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 79, - "startColumn": 4, - "endLine": 79, - "endColumn": 14, + "startLine": 140, + "startColumn": 7, + "endLine": 140, + "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { "ruleId": "W3005", "severity": "WARN", - "message": "'eventConsumer1LambdaServiceRoleC8CCBFC5' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'snsSubscriptionLambdaHandlerServiceRole215E543C' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "eventConsumer1Lambda4AF2292E", + "logicalId": "snsSubscriptionLambdaHandler68619CD8", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 142, - "startColumn": 4, - "endLine": 142, - "endColumn": 14, + "startLine": 314, + "startColumn": 7, + "endLine": 314, + "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'eventConsumer2LambdaServiceRole6B878884' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "eventConsumer2Lambda1631C47A", + "logicalId": "snsLambdaHandlerAllowInvokeTheXraySnsFlowSNSTopic80B9595935AF18F0", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 252, - "startColumn": 4, - "endLine": 252, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 153, + "startColumn": 9, + "endLine": 153, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "snsLambdaHandlerAllowInvokeTheXraySnsFlowSNSTopic80B9595935AF18F0", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 154, + "startColumn": 9, + "endLine": 154, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt snsLambdaHandlerE7B0ABE3.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "snsLambdaHandlerAllowInvokeTheXraySnsFlowSNSTopic80B9595935AF18F0", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 160, + "startColumn": 9, + "endLine": 160, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "snsLambdaHandlerAllowInvokeTheXraySnsFlowSNSTopic80B9595935AF18F0", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.SourceArn", + "category": "Best Practice", + "startLine": 161, + "startColumn": 9, + "endLine": 161, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "snsLambdaHandlerSNSTopic3B2CFF1D", + "entityType": "Resource", + "resourceType": "AWS::SNS::Subscription" + }, + "propertyPath": "Properties.Protocol", + "category": "Best Practice", + "startLine": 172, + "startColumn": 9, + "endLine": 172, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "snsLambdaHandlerSNSTopic3B2CFF1D", + "entityType": "Resource", + "resourceType": "AWS::SNS::Subscription" + }, + "propertyPath": "Properties.TopicArn", + "category": "Best Practice", + "startLine": 173, + "startColumn": 9, + "endLine": 173, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "snsLambdaHandlerSNSTopic3B2CFF1D", + "entityType": "Resource", + "resourceType": "AWS::SNS::Subscription" + }, + "propertyPath": "Properties.Endpoint", + "category": "Best Practice", + "startLine": 176, + "startColumn": 9, + "endLine": 176, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt snsLambdaHandlerE7B0ABE3.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Region' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "snsLambdaHandlerSNSTopic3B2CFF1D", + "entityType": "Resource", + "resourceType": "AWS::SNS::Subscription" + }, + "propertyPath": "Properties.Region", + "category": "Best Practice", + "startLine": 182, + "startColumn": 9, + "endLine": 182, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Select with unresolvable arguments)" + } }, { "ruleId": "I9001", @@ -55235,16 +55931,16 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "eventConsumer1LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer1Lambda3A2F7294318BC23E", + "logicalId": "snsSubscriptionLambdaHandlerAllowInvokeTheXraySnsFlowTheXRayTracerSnsTopic86AE60703F758919", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 181, - "startColumn": 5, - "endLine": 181, - "endColumn": 12, + "startLine": 327, + "startColumn": 9, + "endLine": 327, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -55257,21 +55953,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "eventConsumer1LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer1Lambda3A2F7294318BC23E", + "logicalId": "snsSubscriptionLambdaHandlerAllowInvokeTheXraySnsFlowTheXRayTracerSnsTopic86AE60703F758919", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 182, - "startColumn": 5, - "endLine": 182, - "endColumn": 18, + "startLine": 328, + "startColumn": 9, + "endLine": 328, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt eventConsumer1Lambda4AF2292E.Arn" + "resolutionSource": "GetAtt snsSubscriptionLambdaHandler68619CD8.Arn" } }, { @@ -55280,16 +55976,16 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "eventConsumer1LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer1Lambda3A2F7294318BC23E", + "logicalId": "snsSubscriptionLambdaHandlerAllowInvokeTheXraySnsFlowTheXRayTracerSnsTopic86AE60703F758919", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 188, - "startColumn": 5, - "endLine": 188, - "endColumn": 15, + "startLine": 334, + "startColumn": 9, + "endLine": 334, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -55302,39 +55998,40 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "eventConsumer1LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer1Lambda3A2F7294318BC23E", + "logicalId": "snsSubscriptionLambdaHandlerAllowInvokeTheXraySnsFlowTheXRayTracerSnsTopic86AE60703F758919", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 189, - "startColumn": 5, - "endLine": 189, - "endColumn": 15, + "startLine": 335, + "startColumn": 9, + "endLine": 335, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt eventConsumer1LambdaRule288E5FF9.Arn" + "resolutionSource": "Ref to 'TheXRayTracerSnsTopicCCE2005E'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "eventConsumer2LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer2LambdaB60B781EECB58ACF", + "logicalId": "snsSubscriptionLambdaHandlerTheXRayTracerSnsTopic6FDB75DD", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 291, - "startColumn": 5, - "endLine": 291, - "endColumn": 12, + "startLine": 346, + "startColumn": 9, + "endLine": 346, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -55344,93 +56041,192 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "eventConsumer2LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer2LambdaB60B781EECB58ACF", + "logicalId": "snsSubscriptionLambdaHandlerTheXRayTracerSnsTopic6FDB75DD", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.TopicArn", "category": "Best Practice", - "startLine": 292, - "startColumn": 5, - "endLine": 292, + "startLine": 347, + "startColumn": 9, + "endLine": 347, "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt eventConsumer2Lambda1631C47A.Arn" + "resolutionSource": "Ref to 'TheXRayTracerSnsTopicCCE2005E'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "eventConsumer2LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer2LambdaB60B781EECB58ACF", + "logicalId": "snsSubscriptionLambdaHandlerTheXRayTracerSnsTopic6FDB75DD", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Endpoint", "category": "Best Practice", - "startLine": 298, - "startColumn": 5, - "endLine": 298, - "endColumn": 15, + "startLine": 350, + "startColumn": 9, + "endLine": 350, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt snsSubscriptionLambdaHandler68619CD8.Arn" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'TheXRayTracerSnsTopicCCE2005E' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "eventConsumer2LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer2LambdaB60B781EECB58ACF", + "logicalId": "TheXRayTracerSnsTopicCCE2005E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 299, - "startColumn": 5, - "endLine": 299, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt eventConsumer2LambdaRule54312CB1.Arn" - } + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'snsLambdaHandlerServiceRole7F428B88' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "snsLambdaHandlerServiceRole7F428B88", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'snsLambdaHandlerE7B0ABE3' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "snsLambdaHandlerE7B0ABE3", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 82, + "startColumn": 7, + "endLine": 82, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'snsSubscriptionLambdaHandlerServiceRole215E543C' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "snsSubscriptionLambdaHandlerServiceRole215E543C", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 202, + "startColumn": 7, + "endLine": 202, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'snsSubscriptionLambdaHandler68619CD8' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "snsSubscriptionLambdaHandler68619CD8", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 263, + "startColumn": 7, + "endLine": 263, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/pat-the-xray-tracer--TheXrayTracerStack.template.json": { + "filePath": "cdk/pat-the-xray-tracer--TheXrayTracerStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 14, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 23, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumerDeploymentD1A021868a8af37caaafdc0f762b784f7555ad86", + "logicalId": "xrayTracerAPIDeploymentB3CB89A0a689bf68bef2302d0715c2d1a50794fc", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Deployment" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 551, - "startColumn": 5, - "endLine": 551, - "endColumn": 15, + "startLine": 75, + "startColumn": 9, + "endLine": 75, + "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SampleAPIEventBridgeMultiConsumer52DC1403'" + "resolutionSource": "Ref to 'xrayTracerAPIA84CAE80'" } }, { @@ -55439,22 +56235,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumerDeploymentStageprodDE087A58", + "logicalId": "xrayTracerAPIDeploymentStageprod85442A48", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 570, - "startColumn": 5, - "endLine": 570, - "endColumn": 15, + "startLine": 94, + "startColumn": 9, + "endLine": 94, + "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SampleAPIEventBridgeMultiConsumer52DC1403'" + "resolutionSource": "Ref to 'xrayTracerAPIA84CAE80'" } }, { @@ -55463,16 +56259,16 @@ "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumerDeploymentStageprodDE087A58", + "logicalId": "xrayTracerAPIDeploymentStageprod85442A48", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 573, - "startColumn": 5, - "endLine": 573, - "endColumn": 15, + "startLine": 109, + "startColumn": 9, + "endLine": 109, + "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -55483,48 +56279,48 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumeritems997C90A7", + "logicalId": "xrayTracerAPIGET7490A366", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 585, - "startColumn": 5, - "endLine": 585, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 119, + "startColumn": 9, + "endLine": 119, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt SampleAPIEventBridgeMultiConsumer52DC1403.RootResourceId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumeritems997C90A7", + "logicalId": "xrayTracerAPIGET7490A366", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 591, - "startColumn": 5, - "endLine": 591, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 120, + "startColumn": 9, + "endLine": 120, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt xrayTracerAPIA84CAE80.RootResourceId" } }, { @@ -55533,85 +56329,65 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumeritems997C90A7", + "logicalId": "xrayTracerAPIGET7490A366", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 592, - "startColumn": 5, - "endLine": 592, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 126, + "startColumn": 9, + "endLine": 126, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SampleAPIEventBridgeMultiConsumer52DC1403'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitemsA86E071B", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 603, - "startColumn": 5, - "endLine": 603, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" + "resolutionSource": "Ref to 'xrayTracerAPIA84CAE80'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitemsA86E071B", + "logicalId": "xrayTracerAPIproxy719DA214", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 604, - "startColumn": 5, - "endLine": 604, + "startLine": 215, + "startColumn": 9, + "endLine": 215, "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt eventProducerLambda100D549C.Arn" + "resolutionSource": "GetAtt xrayTracerAPIA84CAE80.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitemsA86E071B", + "logicalId": "xrayTracerAPIproxy719DA214", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 610, - "startColumn": 5, - "endLine": 610, - "endColumn": 15, + "startLine": 221, + "startColumn": 9, + "endLine": 221, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -55621,42 +56397,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitemsA86E071B", + "logicalId": "xrayTracerAPIproxy719DA214", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 611, - "startColumn": 5, - "endLine": 611, - "endColumn": 15, + "startLine": 222, + "startColumn": 9, + "endLine": 222, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:SampleAPIEventBridgeMultiConsumer52DC1403}/{ref:SampleAPIEventBridgeMultiConsumerDeploymentStageprodDE087A58}/POST/items)" + "resolutionSource": "Ref to 'xrayTracerAPIA84CAE80'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionTestApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitems910D1EE7", + "logicalId": "xrayTracerAPIproxyGET4E348609", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 647, - "startColumn": 5, - "endLine": 647, - "endColumn": 12, + "startLine": 233, + "startColumn": 9, + "endLine": 233, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -55666,88 +56444,92 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionTestApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitems910D1EE7", + "logicalId": "xrayTracerAPIproxyGET4E348609", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 648, - "startColumn": 5, - "endLine": 648, - "endColumn": 18, + "startLine": 234, + "startColumn": 9, + "endLine": 234, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt eventProducerLambda100D549C.Arn" + "resolutionSource": "Ref to 'xrayTracerAPIproxy719DA214'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionTestApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitems910D1EE7", + "logicalId": "xrayTracerAPIproxyGET4E348609", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 654, - "startColumn": 5, - "endLine": 654, - "endColumn": 15, + "startLine": 237, + "startColumn": 9, + "endLine": 237, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'xrayTracerAPIA84CAE80'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionTestApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitems910D1EE7", + "logicalId": "xrayTracerAPIResponseModel2591E14E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 655, - "startColumn": 5, - "endLine": 655, - "endColumn": 15, + "startLine": 326, + "startColumn": 9, + "endLine": 326, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:SampleAPIEventBridgeMultiConsumer52DC1403}/test-invoke-stage/POST/items)" + "resolutionSource": "Ref to 'xrayTracerAPIA84CAE80'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTD2DFDA56", + "logicalId": "xrayTracerAPIResponseModel2591E14E", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.ContentType", "category": "Best Practice", - "startLine": 688, - "startColumn": 5, - "endLine": 688, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "startLine": 329, + "startColumn": 9, + "endLine": 329, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -55757,25 +56539,24 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTD2DFDA56", + "logicalId": "xrayTracerAPIResponseModel2591E14E", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 716, - "startColumn": 5, - "endLine": 716, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "startLine": 330, + "startColumn": 9, + "endLine": 330, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'SampleAPIEventBridgeMultiConsumeritems997C90A7'" + "lifecycle": "create-only" } }, { @@ -55784,401 +56565,420 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTD2DFDA56", + "logicalId": "xrayTracerAPIErrorResponseModel24719E91", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ApiGateway::Model" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 719, - "startColumn": 5, - "endLine": 719, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "startLine": 349, + "startColumn": 9, + "endLine": 349, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SampleAPIEventBridgeMultiConsumer52DC1403'" + "resolutionSource": "Ref to 'xrayTracerAPIA84CAE80'" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'eventProducerLambdaServiceRoleD019EB99' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "eventProducerLambdaServiceRoleD019EB99", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'eventProducerLambda100D549C' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "eventProducerLambda100D549C", + "logicalId": "xrayTracerAPIErrorResponseModel24719E91", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContentType", "category": "Best Practice", - "startLine": 63, - "startColumn": 4, - "endLine": 63, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 352, + "startColumn": 9, + "endLine": 352, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'eventConsumer1LambdaServiceRoleC8CCBFC5' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "eventConsumer1LambdaServiceRoleC8CCBFC5", + "logicalId": "xrayTracerAPIErrorResponseModel24719E91", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 92, - "startColumn": 4, - "endLine": 92, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 353, + "startColumn": 9, + "endLine": 353, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'eventConsumer1Lambda4AF2292E' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'TheXRayTracerSnsFanOutTopicDE7E70F8' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "eventConsumer1Lambda4AF2292E", + "logicalId": "TheXRayTracerSnsFanOutTopicDE7E70F8", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 126, - "startColumn": 4, - "endLine": 126, - "endColumn": 15, + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'eventConsumer1LambdaRule288E5FF9' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Resource 'xrayTracerAPIA84CAE80' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "eventConsumer1LambdaRule288E5FF9", + "logicalId": "xrayTracerAPIA84CAE80", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::ApiGateway::RestApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 154, - "startColumn": 4, - "endLine": 154, - "endColumn": 15, + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'eventConsumer2LambdaServiceRole6B878884' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'xrayTracerAPICloudWatchRoleCCB113F4' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "eventConsumer2LambdaServiceRole6B878884", + "logicalId": "xrayTracerAPICloudWatchRoleCCB113F4", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 202, - "startColumn": 4, - "endLine": 202, - "endColumn": 15, + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'eventConsumer2Lambda1631C47A' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'xrayTracerAPIDeploymentStageprod85442A48' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "eventConsumer2Lambda1631C47A", + "logicalId": "xrayTracerAPIDeploymentStageprod85442A48", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 236, - "startColumn": 4, - "endLine": 236, - "endColumn": 15, + "startLine": 93, + "startColumn": 7, + "endLine": 93, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'eventConsumer2LambdaRule54312CB1' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Resource 'ApiGatewaySNSRole1BAAAE75' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "eventConsumer2LambdaRule54312CB1", + "logicalId": "ApiGatewaySNSRole1BAAAE75", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 264, - "startColumn": 4, - "endLine": 264, - "endColumn": 15, + "startLine": 374, + "startColumn": 7, + "endLine": 374, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "cdk/py-api-cors-lambda--ApiCorsLambdaStack.template.json": { + "filePath": "cdk/py-api-cors-lambda--ApiCorsLambdaStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 13, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 1, + "informational": 25, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'testngestbucketD7155299' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E2531", + "severity": "ERROR", + "message": "Runtime 'python3.7' was deprecated on '2023-12-04'. Creation was disabled on '2024-01-09', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "testngestbucketD7155299", + "logicalId": "ApiCorsLambda5083F55F", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 310, - "startColumn": 3, - "endLine": 310, - "endColumn": 27, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 53, + "startColumn": 5, + "endLine": 53, + "endColumn": 13, + "ruleDescription": "Check if Lambda Function Runtimes are blocked for create", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.7", + "lifecycle": "create-blocked" + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myRoleE60D68E8' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'ApiCorsLambdaServiceRole0DB39061' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "myRoleE60D68E8", + "logicalId": "ApiCorsLambda5083F55F", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 320, + "startLine": 55, "startColumn": 4, - "endLine": 320, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endLine": 55, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'consumer3firehose' of type 'AWS::KinesisFirehose::DeliveryStream' supports Tags but none are configured", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "consumer3firehose", + "logicalId": "ApiGatewayWithCorsDeployment248C0700a88c9b4f7fb5eae343fa3265f3ea5ffe", "entityType": "Resource", - "resourceType": "AWS::KinesisFirehose::DeliveryStream" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 375, - "startColumn": 4, - "endLine": 375, + "startLine": 133, + "startColumn": 5, + "endLine": 133, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ApiGatewayWithCors6DE4076F'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'consumer3firehoseEventsRoleECB13871' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "consumer3firehoseEventsRoleECB13871", + "logicalId": "ApiGatewayWithCorsDeploymentStageprod7F1DD875", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 401, - "startColumn": 4, - "endLine": 401, + "startLine": 153, + "startColumn": 5, + "endLine": 153, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ApiGatewayWithCors6DE4076F'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'eventConsumer3KinesisRuleB8D02F6F' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "eventConsumer3KinesisRuleB8D02F6F", + "logicalId": "ApiGatewayWithCorsDeploymentStageprod7F1DD875", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 453, - "startColumn": 4, - "endLine": 453, + "startLine": 156, + "startColumn": 5, + "endLine": 156, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SampleAPIEventBridgeMultiConsumer52DC1403' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumer52DC1403", + "logicalId": "ApiGatewayWithCorsexample5AE32A3C", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 485, - "startColumn": 4, - "endLine": 485, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 168, + "startColumn": 5, + "endLine": 168, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt ApiGatewayWithCors6DE4076F.RootResourceId" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SampleAPIEventBridgeMultiConsumerCloudWatchRoleE43B891E' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumerCloudWatchRoleE43B891E", + "logicalId": "ApiGatewayWithCorsexample5AE32A3C", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 494, - "startColumn": 4, - "endLine": 494, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 174, + "startColumn": 5, + "endLine": 174, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SampleAPIEventBridgeMultiConsumerDeploymentStageprodDE087A58' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumerDeploymentStageprodDE087A58", + "logicalId": "ApiGatewayWithCorsexample5AE32A3C", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 566, - "startColumn": 4, - "endLine": 566, + "startLine": 175, + "startColumn": 5, + "endLine": 175, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/py-api-sqs-lambda--ApiSqsLambdaStack.template.json": { - "filePath": "cdk/py-api-sqs-lambda--ApiSqsLambdaStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 15, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 22, - "debug": 0 + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ApiGatewayWithCors6DE4076F'" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W3005", - "severity": "WARN", - "message": "'SQSTriggerLambdaServiceRole0C427DE8' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SQSTriggerLambda99F71FB3", + "logicalId": "ApiGatewayWithCorsexampleOPTIONS2F5D9F4D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 344, - "startColumn": 4, - "endLine": 344, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 188, + "startColumn": 5, + "endLine": 188, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "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", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SQSQueue7674CD17", + "logicalId": "ApiGatewayWithCorsexampleOPTIONS2F5D9F4D", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 20, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "startLine": 215, + "startColumn": 5, + "endLine": 215, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ApiGatewayWithCorsexample5AE32A3C'" + } }, { "ruleId": "I9001", @@ -56186,88 +56986,85 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGWDeployment621CA0B04c89657aa92ebebc2018c4cd4a761ecd", + "logicalId": "ApiGatewayWithCorsexampleOPTIONS2F5D9F4D", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 113, + "startLine": 218, "startColumn": 5, - "endLine": 113, + "endLine": 218, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ApiGW45519054'" + "resolutionSource": "Ref to 'ApiGatewayWithCors6DE4076F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGWDeploymentStageprodDFD8EC11", + "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample83B6C89A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 133, + "startLine": 229, "startColumn": 5, - "endLine": 133, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 229, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ApiGW45519054'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGWDeploymentStageprodDFD8EC11", + "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample83B6C89A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 136, + "startLine": 230, "startColumn": 5, - "endLine": 136, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 230, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt ApiCorsLambda5083F55F.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGWANYD1FA3A5F", + "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample83B6C89A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 149, + "startLine": 236, "startColumn": 5, - "endLine": 149, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 236, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -56277,92 +57074,87 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGWANYD1FA3A5F", + "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample83B6C89A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 153, + "startLine": 237, "startColumn": 5, - "endLine": 153, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 237, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiGW45519054.RootResourceId" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:ApiGatewayWithCors6DE4076F}/{ref:ApiGatewayWithCorsDeploymentStageprod7F1DD875}/GET/example)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGWANYD1FA3A5F", + "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionTestApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample07A026FD", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 159, + "startLine": 273, "startColumn": 5, - "endLine": 159, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 273, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ApiGW45519054'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGWexampleDE4620AC", + "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionTestApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample07A026FD", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 170, + "startLine": 274, "startColumn": 5, - "endLine": 170, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 274, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiGW45519054.RootResourceId" + "resolutionSource": "GetAtt ApiCorsLambda5083F55F.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGWexampleDE4620AC", + "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionTestApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample07A026FD", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 176, + "startLine": 280, "startColumn": 5, - "endLine": 176, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 280, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -56372,25 +57164,24 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGWexampleDE4620AC", + "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionTestApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample07A026FD", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 177, + "startLine": 281, "startColumn": 5, - "endLine": 177, + "endLine": 281, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ApiGW45519054'" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:ApiGatewayWithCors6DE4076F}/test-invoke-stage/GET/example)" } }, { @@ -56399,15 +57190,15 @@ "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGWexamplePOST6CAE6201", + "logicalId": "ApiGatewayWithCorsexampleGETCC962CB3", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 189, + "startLine": 314, "startColumn": 5, - "endLine": 189, + "endLine": 314, "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56422,22 +57213,22 @@ "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGWexamplePOST6CAE6201", + "logicalId": "ApiGatewayWithCorsexampleGETCC962CB3", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 246, + "startLine": 358, "startColumn": 5, - "endLine": 246, + "endLine": 358, "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ApiGWexampleDE4620AC'" + "resolutionSource": "Ref to 'ApiGatewayWithCorsexample5AE32A3C'" } }, { @@ -56446,103 +57237,40 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGWexamplePOST6CAE6201", + "logicalId": "ApiGatewayWithCorsexampleGETCC962CB3", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 249, + "startLine": 361, "startColumn": 5, - "endLine": 249, + "endLine": 361, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ApiGW45519054'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SQSTriggerLambdaSqsEventSourceApiSqsLambdaStackSQSQueue975096D28FB9A750", - "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" - }, - "propertyPath": "Properties.EventSourceArn", - "category": "Best Practice", - "startLine": 358, - "startColumn": 5, - "endLine": 358, - "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt SQSQueue7674CD17.Arn" + "resolutionSource": "Ref to 'ApiGatewayWithCors6DE4076F'" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SQSQueue7674CD17' of type 'AWS::SQS::Queue' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SQSQueue7674CD17", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 20, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'RestAPIRoleA3B4EFA3' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'ApiCorsLambdaServiceRole0DB39061' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RestAPIRoleA3B4EFA3", + "logicalId": "ApiCorsLambdaServiceRole0DB39061", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 13, - "startColumn": 4, - "endLine": 13, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ApiGW45519054' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ApiGW45519054", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 47, + "startLine": 5, "startColumn": 4, - "endLine": 47, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -56550,19 +57278,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ApiGWCloudWatchRole51A9A431' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'ApiCorsLambda5083F55F' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiGWCloudWatchRole51A9A431", + "logicalId": "ApiCorsLambda5083F55F", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 56, + "startLine": 39, "startColumn": 4, - "endLine": 56, + "endLine": 39, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -56570,19 +57298,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ApiGWDeploymentStageprodDFD8EC11' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Resource 'ApiGatewayWithCors6DE4076F' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiGWDeploymentStageprodDFD8EC11", + "logicalId": "ApiGatewayWithCors6DE4076F", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::ApiGateway::RestApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 129, + "startLine": 67, "startColumn": 4, - "endLine": 129, + "endLine": 67, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -56590,39 +57318,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SQSTriggerLambdaServiceRole0C427DE8' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'ApiGatewayWithCorsCloudWatchRole9C3700F0' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SQSTriggerLambdaServiceRole0C427DE8", + "logicalId": "ApiGatewayWithCorsCloudWatchRole9C3700F0", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 259, - "startColumn": 4, - "endLine": 259, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SQSTriggerLambda99F71FB3' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SQSTriggerLambda99F71FB3", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 328, + "startLine": 76, "startColumn": 4, - "endLine": 328, + "endLine": 76, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -56630,35 +57338,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SQSTriggerLambdaSqsEventSourceApiSqsLambdaStackSQSQueue975096D28FB9A750' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", + "message": "Resource 'ApiGatewayWithCorsDeploymentStageprod7F1DD875' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SQSTriggerLambdaSqsEventSourceApiSqsLambdaStackSQSQueue975096D28FB9A750", + "logicalId": "ApiGatewayWithCorsDeploymentStageprod7F1DD875", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 357, + "startLine": 149, "startColumn": 4, - "endLine": 357, + "endLine": 149, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/py-athena-s3-glue--DemoAthenaS3GlueStack.template.json": { - "filePath": "cdk/py-athena-s3-glue--DemoAthenaS3GlueStack.template.json", + "cdk/py-api-eventbridge-lambda--ApiEventBridgeLambdaStack.template.json": { + "filePath": "cdk/py-api-eventbridge-lambda--ApiEventBridgeLambdaStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 21, + "resourcesScanned": 28, "counts": { "fatal": 0, "errors": 0, - "warnings": 4, - "informational": 23, + "warnings": 6, + "informational": 41, "debug": 0 }, "suppressed": 0, @@ -56669,65 +57377,88 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "logicalId": "eventProducerLambda100D549C", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 158, + "startLine": 77, "startColumn": 5, - "endLine": 158, + "endLine": 77, "endColumn": 13, "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", + "actualValue": "python3.8", "lifecycle": "deprecated" } }, { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", + "logicalId": "eventConsumer1Lambda4AF2292E", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 502, + "startLine": 140, "startColumn": 5, - "endLine": 502, + "endLine": 140, "endColumn": 13, "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "actualValue": "python3.9", + "actualValue": "python3.8", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "eventConsumer2Lambda1631C47A", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 250, + "startColumn": 5, + "endLine": 250, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", "lifecycle": "deprecated" } }, { "ruleId": "W3005", "severity": "WARN", - "message": "'CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'eventProducerLambdaServiceRoleD019EB99' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "logicalId": "eventProducerLambda100D549C", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 172, + "startLine": 79, "startColumn": 4, - "endLine": 172, + "endLine": 79, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -56735,19 +57466,39 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'eventConsumer1LambdaServiceRoleC8CCBFC5' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", + "logicalId": "eventConsumer1Lambda4AF2292E", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 511, + "startLine": 142, "startColumn": 4, - "endLine": 511, + "endLine": 142, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'eventConsumer2LambdaServiceRole6B878884' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "eventConsumer2Lambda1631C47A", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 252, + "startColumn": 4, + "endLine": 252, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -56755,19 +57506,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "logsbucketE18563D9", + "logicalId": "eventConsumer1LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer1Lambda3A2F7294318BC23E", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 6, + "startLine": 181, "startColumn": 5, - "endLine": 6, - "endColumn": 16, + "endLine": 181, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -56777,42 +57528,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "logsbucketPolicy6C60198C", + "logicalId": "eventConsumer1LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer1Lambda3A2F7294318BC23E", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 41, + "startLine": 182, "startColumn": 5, - "endLine": 41, - "endColumn": 12, + "endLine": 182, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'logsbucketE18563D9'" + "resolutionSource": "GetAtt eventConsumer1Lambda4AF2292E.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "queryoutputbucket3DDDB997", + "logicalId": "eventConsumer1LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer1Lambda3A2F7294318BC23E", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 184, + "startLine": 188, "startColumn": 5, - "endLine": 184, - "endColumn": 16, + "endLine": 188, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -56822,43 +57573,87 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "queryoutputbucketPolicy2BC02580", + "logicalId": "eventConsumer1LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer1Lambda3A2F7294318BC23E", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 215, + "startLine": 189, "startColumn": 5, - "endLine": 215, - "endColumn": 12, + "endLine": 189, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'queryoutputbucket3DDDB997'" + "resolutionSource": "GetAtt eventConsumer1LambdaRule288E5FF9.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Content' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "samplefilesAwsCliLayerCFFFB375", + "logicalId": "eventConsumer2LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer2LambdaB60B781EECB58ACF", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Content", + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 291, + "startColumn": 5, + "endLine": 291, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "eventConsumer2LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer2LambdaB60B781EECB58ACF", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", "category": "Best Practice", "startLine": 292, "startColumn": 5, "endLine": 292, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt eventConsumer2Lambda1631C47A.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "eventConsumer2LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer2LambdaB60B781EECB58ACF", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 298, + "startColumn": 5, + "endLine": 298, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -56868,43 +57663,91 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "eventConsumer2LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer2LambdaB60B781EECB58ACF", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.SourceArn", + "category": "Best Practice", + "startLine": 299, + "startColumn": 5, + "endLine": 299, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt eventConsumer2LambdaRule54312CB1.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SampleAPIEventBridgeMultiConsumerDeploymentD1A021868a8af37caaafdc0f762b784f7555ad86", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Deployment" + }, + "propertyPath": "Properties.RestApiId", + "category": "Best Practice", + "startLine": 551, + "startColumn": 5, + "endLine": 551, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SampleAPIEventBridgeMultiConsumer52DC1403'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "samplefilesAwsCliLayerCFFFB375", + "logicalId": "SampleAPIEventBridgeMultiConsumerDeploymentStageprodDE087A58", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.Description", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 298, + "startLine": 570, "startColumn": 5, - "endLine": 298, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "endLine": 570, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SampleAPIEventBridgeMultiConsumer52DC1403'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "gluecrawlerroleB13EEB29", + "logicalId": "SampleAPIEventBridgeMultiConsumerDeploymentStageprodDE087A58", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 555, + "startLine": 573, "startColumn": 5, - "endLine": 555, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 573, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -56914,43 +57757,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "logscrawler", + "logicalId": "SampleAPIEventBridgeMultiConsumeritems997C90A7", "entityType": "Resource", - "resourceType": "AWS::Glue::Crawler" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 571, + "startLine": 585, "startColumn": 5, - "endLine": 571, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-glue.git", + "endLine": 585, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt SampleAPIEventBridgeMultiConsumer52DC1403.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "logauditingworkgroup", + "logicalId": "SampleAPIEventBridgeMultiConsumeritems997C90A7", "entityType": "Resource", - "resourceType": "AWS::Athena::WorkGroup" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 618, + "startLine": 591, "startColumn": 5, - "endLine": 618, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "endLine": 591, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -56960,43 +57804,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Database' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "producteventsbydatequery", + "logicalId": "SampleAPIEventBridgeMultiConsumeritems997C90A7", "entityType": "Resource", - "resourceType": "AWS::Athena::NamedQuery" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Database", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 651, + "startLine": 592, "startColumn": 5, - "endLine": 651, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "endLine": 592, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SampleAPIEventBridgeMultiConsumer52DC1403'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "producteventsbydatequery", + "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitemsA86E071B", "entityType": "Resource", - "resourceType": "AWS::Athena::NamedQuery" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 652, + "startLine": 603, "startColumn": 5, - "endLine": 652, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "endLine": 603, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -57006,43 +57850,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'QueryString' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "producteventsbydatequery", + "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitemsA86E071B", "entityType": "Resource", - "resourceType": "AWS::Athena::NamedQuery" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.QueryString", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 653, + "startLine": 604, "startColumn": 5, - "endLine": 653, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "endLine": 604, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt eventProducerLambda100D549C.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'WorkGroup' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "producteventsbydatequery", + "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitemsA86E071B", "entityType": "Resource", - "resourceType": "AWS::Athena::NamedQuery" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.WorkGroup", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 654, + "startLine": 610, "startColumn": 5, - "endLine": 654, + "endLine": 610, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -57052,43 +57895,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Database' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "usereventsbydatequery", + "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitemsA86E071B", "entityType": "Resource", - "resourceType": "AWS::Athena::NamedQuery" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Database", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 666, + "startLine": 611, "startColumn": 5, - "endLine": 666, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "endLine": 611, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:SampleAPIEventBridgeMultiConsumer52DC1403}/{ref:SampleAPIEventBridgeMultiConsumerDeploymentStageprodDE087A58}/POST/items)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "usereventsbydatequery", + "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionTestApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitems910D1EE7", "entityType": "Resource", - "resourceType": "AWS::Athena::NamedQuery" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 667, + "startLine": 647, "startColumn": 5, - "endLine": 667, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "endLine": 647, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -57098,43 +57940,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'QueryString' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "usereventsbydatequery", + "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionTestApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitems910D1EE7", "entityType": "Resource", - "resourceType": "AWS::Athena::NamedQuery" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.QueryString", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 668, + "startLine": 648, "startColumn": 5, - "endLine": 668, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "endLine": 648, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt eventProducerLambda100D549C.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'WorkGroup' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "usereventsbydatequery", + "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionTestApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitems910D1EE7", "entityType": "Resource", - "resourceType": "AWS::Athena::NamedQuery" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.WorkGroup", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 669, + "startLine": 654, "startColumn": 5, - "endLine": 669, + "endLine": 654, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -57144,43 +57985,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Database' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "alleventsbyuserIdquery", + "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionTestApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitems910D1EE7", "entityType": "Resource", - "resourceType": "AWS::Athena::NamedQuery" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Database", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 681, + "startLine": 655, "startColumn": 5, - "endLine": 681, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "endLine": 655, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:SampleAPIEventBridgeMultiConsumer52DC1403}/test-invoke-stage/POST/items)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "alleventsbyuserIdquery", + "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTD2DFDA56", "entityType": "Resource", - "resourceType": "AWS::Athena::NamedQuery" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 682, + "startLine": 688, "startColumn": 5, - "endLine": 682, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "endLine": 688, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -57190,65 +58031,67 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'QueryString' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "alleventsbyuserIdquery", + "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTD2DFDA56", "entityType": "Resource", - "resourceType": "AWS::Athena::NamedQuery" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.QueryString", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 683, + "startLine": 716, "startColumn": 5, - "endLine": 683, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "endLine": 716, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SampleAPIEventBridgeMultiConsumeritems997C90A7'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'WorkGroup' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "alleventsbyuserIdquery", + "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTD2DFDA56", "entityType": "Resource", - "resourceType": "AWS::Athena::NamedQuery" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.WorkGroup", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 684, + "startLine": 719, "startColumn": 5, - "endLine": 684, + "endLine": 719, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SampleAPIEventBridgeMultiConsumer52DC1403'" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'eventProducerLambdaServiceRoleD019EB99' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "logicalId": "eventProducerLambdaServiceRoleD019EB99", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 117, + "startLine": 5, "startColumn": 4, - "endLine": 117, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -57256,196 +58099,99 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'eventProducerLambda100D549C' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "logicalId": "eventProducerLambda100D549C", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 142, + "startLine": 63, "startColumn": 4, - "endLine": 142, + "endLine": 63, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "cdk/py-datasync-s3--cdk-datasync-s3-to-s3-iam.template.json": { - "filePath": "cdk/py-datasync-s3--cdk-datasync-s3-to-s3-iam.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 8, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CDKDataSyncS3AccessRole0C49AEBFA", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.RoleName", - "category": "Best Practice", - "startLine": 19, - "startColumn": 5, - "endLine": 19, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CDKDataSyncS3Policy034C77CD2", - "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" - }, - "propertyPath": "Properties.Description", - "category": "Best Practice", - "startLine": 55, - "startColumn": 5, - "endLine": 55, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CDKDataSyncS3Policy034C77CD2", - "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" - }, - "propertyPath": "Properties.Path", - "category": "Best Practice", - "startLine": 56, - "startColumn": 5, - "endLine": 56, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", + "message": "Resource 'eventConsumer1LambdaServiceRoleC8CCBFC5' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CDKDataSyncS3AccessRole18E349368", + "logicalId": "eventConsumer1LambdaServiceRoleC8CCBFC5", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 83, - "startColumn": 5, - "endLine": 83, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 92, + "startColumn": 4, + "endLine": 92, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "message": "Resource 'eventConsumer1Lambda4AF2292E' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CDKDataSyncS3Policy1E7D7BFA5", + "logicalId": "eventConsumer1Lambda4AF2292E", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Description", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 119, - "startColumn": 5, - "endLine": 119, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 126, + "startColumn": 4, + "endLine": 126, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Resource 'eventConsumer1LambdaRule288E5FF9' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CDKDataSyncS3Policy1E7D7BFA5", + "logicalId": "eventConsumer1LambdaRule288E5FF9", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 120, - "startColumn": 5, - "endLine": 120, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 154, + "startColumn": 4, + "endLine": 154, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CDKDataSyncS3AccessRole0C49AEBFA' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'eventConsumer2LambdaServiceRole6B878884' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CDKDataSyncS3AccessRole0C49AEBFA", + "logicalId": "eventConsumer2LambdaServiceRole6B878884", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 202, "startColumn": 4, - "endLine": 5, + "endLine": 202, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -57453,190 +58199,159 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CDKDataSyncS3AccessRole18E349368' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'eventConsumer2Lambda1631C47A' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CDKDataSyncS3AccessRole18E349368", + "logicalId": "eventConsumer2Lambda1631C47A", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 69, + "startLine": 236, "startColumn": 4, - "endLine": 69, + "endLine": 236, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "cdk/py-datasync-s3--cdk-datasync-s3-to-s3.template.json": { - "filePath": "cdk/py-datasync-s3--cdk-datasync-s3-to-s3.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 7, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'S3BucketArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'eventConsumer2LambdaRule54312CB1' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DataSyncS3Location0", + "logicalId": "eventConsumer2LambdaRule54312CB1", "entityType": "Resource", - "resourceType": "AWS::DataSync::LocationS3" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.S3BucketArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 11, - "startColumn": 5, - "endLine": 11, - "endColumn": 17, - "ruleDescription": "Hardcoded ARN property", + "startLine": 264, + "startColumn": 4, + "endLine": 264, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'S3BucketArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'testngestbucketD7155299' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DataSyncS3Location1", + "logicalId": "testngestbucketD7155299", "entityType": "Resource", - "resourceType": "AWS::DataSync::LocationS3" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.S3BucketArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 26, - "startColumn": 5, - "endLine": 26, - "endColumn": 17, - "ruleDescription": "Hardcoded ARN property", + "startLine": 310, + "startColumn": 3, + "endLine": 310, + "endColumn": 27, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'S3BucketArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'myRoleE60D68E8' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DataSyncS3Location0", + "logicalId": "myRoleE60D68E8", "entityType": "Resource", - "resourceType": "AWS::DataSync::LocationS3" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.S3BucketArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 11, - "startColumn": 5, - "endLine": 11, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 320, + "startColumn": 4, + "endLine": 320, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'S3BucketArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'consumer3firehose' of type 'AWS::KinesisFirehose::DeliveryStream' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DataSyncS3Location1", + "logicalId": "consumer3firehose", "entityType": "Resource", - "resourceType": "AWS::DataSync::LocationS3" + "resourceType": "AWS::KinesisFirehose::DeliveryStream" }, - "propertyPath": "Properties.S3BucketArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 26, - "startColumn": 5, - "endLine": 26, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 375, + "startColumn": 4, + "endLine": 375, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'DestinationLocationArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'consumer3firehoseEventsRoleECB13871' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DataSyncS3toS3Task", + "logicalId": "consumer3firehoseEventsRoleECB13871", "entityType": "Resource", - "resourceType": "AWS::DataSync::Task" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.DestinationLocationArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 37, - "startColumn": 5, - "endLine": 37, - "endColumn": 28, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt DataSyncS3Location0.LocationArn" - } + "startLine": 401, + "startColumn": 4, + "endLine": 401, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SourceLocationArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'eventConsumer3KinesisRuleB8D02F6F' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DataSyncS3toS3Task", + "logicalId": "eventConsumer3KinesisRuleB8D02F6F", "entityType": "Resource", - "resourceType": "AWS::DataSync::Task" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.SourceLocationArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 43, - "startColumn": 5, - "endLine": 43, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt DataSyncS3Location1.LocationArn" - } + "startLine": 453, + "startColumn": 4, + "endLine": 453, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DataSyncS3Location0' of type 'AWS::DataSync::LocationS3' supports Tags but none are configured", + "message": "Resource 'SampleAPIEventBridgeMultiConsumer52DC1403' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DataSyncS3Location0", + "logicalId": "SampleAPIEventBridgeMultiConsumer52DC1403", "entityType": "Resource", - "resourceType": "AWS::DataSync::LocationS3" + "resourceType": "AWS::ApiGateway::RestApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 485, "startColumn": 4, - "endLine": 5, + "endLine": 485, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -57644,19 +58359,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DataSyncS3Location1' of type 'AWS::DataSync::LocationS3' supports Tags but none are configured", + "message": "Resource 'SampleAPIEventBridgeMultiConsumerCloudWatchRoleE43B891E' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DataSyncS3Location1", + "logicalId": "SampleAPIEventBridgeMultiConsumerCloudWatchRoleE43B891E", "entityType": "Resource", - "resourceType": "AWS::DataSync::LocationS3" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 20, + "startLine": 494, "startColumn": 4, - "endLine": 20, + "endLine": 494, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -57664,35 +58379,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DataSyncS3toS3Task' of type 'AWS::DataSync::Task' supports Tags but none are configured", + "message": "Resource 'SampleAPIEventBridgeMultiConsumerDeploymentStageprodDE087A58' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DataSyncS3toS3Task", + "logicalId": "SampleAPIEventBridgeMultiConsumerDeploymentStageprodDE087A58", "entityType": "Resource", - "resourceType": "AWS::DataSync::Task" + "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 36, + "startLine": 566, "startColumn": 4, - "endLine": 36, + "endLine": 566, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/py-docker-app-with-asg-alb--ASGStack.template.json": { - "filePath": "cdk/py-docker-app-with-asg-alb--ASGStack.template.json", + "cdk/py-api-sqs-lambda--ApiSqsLambdaStack.template.json": { + "filePath": "cdk/py-api-sqs-lambda--ApiSqsLambdaStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 13, + "resourcesScanned": 15, "counts": { "fatal": 0, "errors": 0, "warnings": 1, - "informational": 38, + "informational": 22, "debug": 0 }, "suppressed": 0, @@ -57701,180 +58416,109 @@ }, "diagnostics": [ { - "ruleId": "W3697", + "ruleId": "W3005", "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "message": "'SQSTriggerLambdaServiceRole0C427DE8' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "appasgLaunchConfig9EFFB3A3", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "category": "Deprecation", - "startLine": 91, - "startColumn": 3, - "endLine": 91, - "endColumn": 30, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "appasgInstanceSecurityGroup8B8185FA", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "appasgInstanceSecurityGroup8B8185FA", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: NetworkStack:ExportsOutputRefTheVPC92636AB00B2A4A70)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "appasgInstanceSecurityGroupfromASGStacksgalb85F2758980805783DB9D", + "logicalId": "SQSTriggerLambda99F71FB3", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 32, - "startColumn": 5, - "endLine": 32, + "startLine": 344, + "startColumn": 4, + "endLine": 344, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "appasgInstanceSecurityGroupfromASGStacksgalb85F2758980805783DB9D", + "logicalId": "SQSQueue7674CD17", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 33, - "startColumn": 5, - "endLine": 33, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt appasgInstanceSecurityGroup8B8185FA.GroupId" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 20, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "appasgInstanceSecurityGroupfromASGStacksgalb85F2758980805783DB9D", + "logicalId": "ApiGWDeployment621CA0B04c89657aa92ebebc2018c4cd4a761ecd", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 39, + "startLine": 113, "startColumn": 5, - "endLine": 39, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 113, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ApiGW45519054'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "appasgInstanceSecurityGroupfromASGStacksgalb85F2758980805783DB9D", + "logicalId": "ApiGWDeploymentStageprodDFD8EC11", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.SourceSecurityGroupId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 40, + "startLine": 133, "startColumn": 5, - "endLine": 40, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 133, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt sgalbE4BDB11E.GroupId" + "resolutionSource": "Ref to 'ApiGW45519054'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "appasgInstanceSecurityGroupfromASGStacksgalb85F2758980805783DB9D", + "logicalId": "ApiGWDeploymentStageprodDFD8EC11", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 46, + "startLine": 136, "startColumn": 5, - "endLine": 46, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 136, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -57884,44 +58528,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "appasgLaunchConfig9EFFB3A3", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.IamInstanceProfile", - "category": "Best Practice", - "startLine": 94, - "startColumn": 5, - "endLine": 94, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'appasgInstanceProfile55323240'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "appasgLaunchConfig9EFFB3A3", + "logicalId": "ApiGWANYD1FA3A5F", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 97, + "startLine": 149, "startColumn": 5, - "endLine": 97, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 149, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -57931,89 +58551,92 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "appasgLaunchConfig9EFFB3A3", + "logicalId": "ApiGWANYD1FA3A5F", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 100, + "startLine": 153, "startColumn": 5, - "endLine": 100, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 153, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt ApiGW45519054.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "appasgLaunchConfig9EFFB3A3", + "logicalId": "ApiGWANYD1FA3A5F", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.KeyName", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 101, + "startLine": 159, "startColumn": 5, - "endLine": 101, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 159, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ApiGW45519054'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "appasgLaunchConfig9EFFB3A3", + "logicalId": "ApiGWexampleDE4620AC", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.SecurityGroups", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 102, + "startLine": 170, "startColumn": 5, - "endLine": 102, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 170, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt ApiGW45519054.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is create-only; updating it will cause resource replacement", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "appasgLaunchConfig9EFFB3A3", + "logicalId": "ApiGWexampleDE4620AC", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 116, + "startLine": 176, "startColumn": 5, - "endLine": 116, + "endLine": 176, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -58023,339 +58646,402 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "appasgASGE5B53758", + "logicalId": "ApiGWexampleDE4620AC", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.LaunchConfigurationName", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 130, + "startLine": 177, "startColumn": 5, - "endLine": 130, - "endColumn": 29, + "endLine": 177, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'appasgLaunchConfig9EFFB3A3'" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ApiGW45519054'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "appasgASGE5B53758", + "logicalId": "ApiGWexamplePOST6CAE6201", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.VPCZoneIdentifier", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 147, + "startLine": 189, "startColumn": 5, - "endLine": 147, - "endColumn": 23, + "endLine": 189, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgnextcloud40AB2A88", + "logicalId": "ApiGWexamplePOST6CAE6201", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 168, + "startLine": 246, "startColumn": 5, - "endLine": 168, - "endColumn": 22, + "endLine": 246, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ApiGWexampleDE4620AC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgnextcloud40AB2A88", + "logicalId": "ApiGWexamplePOST6CAE6201", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.GroupName", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 169, + "startLine": 249, "startColumn": 5, - "endLine": 169, + "endLine": 249, "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ApiGW45519054'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgnextcloud40AB2A88", + "logicalId": "SQSTriggerLambdaSqsEventSourceApiSqsLambdaStackSQSQueue975096D28FB9A750", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.EventSourceArn", "category": "Best Practice", - "startLine": 186, + "startLine": 358, "startColumn": 5, - "endLine": 186, - "endColumn": 11, + "endLine": 358, + "endColumn": 20, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: NetworkStack:ExportsOutputRefTheVPC92636AB00B2A4A70)" + "resolutionSource": "GetAtt SQSQueue7674CD17.Arn" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Resource 'SQSQueue7674CD17' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sgnextcloudfromASGStacksgalb85F275898080011A1DCA", + "logicalId": "SQSQueue7674CD17", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 198, - "startColumn": 5, - "endLine": 198, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 20, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Resource 'RestAPIRoleA3B4EFA3' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sgnextcloudfromASGStacksgalb85F275898080011A1DCA", + "logicalId": "RestAPIRoleA3B4EFA3", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 199, - "startColumn": 5, - "endLine": 199, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt sgnextcloud40AB2A88.GroupId" - } + "startLine": 13, + "startColumn": 4, + "endLine": 13, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Resource 'ApiGW45519054' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sgnextcloudfromASGStacksgalb85F275898080011A1DCA", + "logicalId": "ApiGW45519054", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ApiGateway::RestApi" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 205, - "startColumn": 5, - "endLine": 205, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 47, + "startColumn": 4, + "endLine": 47, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", + "message": "Resource 'ApiGWCloudWatchRole51A9A431' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sgnextcloudfromASGStacksgalb85F275898080011A1DCA", + "logicalId": "ApiGWCloudWatchRole51A9A431", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.SourceSecurityGroupId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 206, - "startColumn": 5, - "endLine": 206, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt sgalbE4BDB11E.GroupId" - } + "startLine": 56, + "startColumn": 4, + "endLine": 56, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Resource 'ApiGWDeploymentStageprodDFD8EC11' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sgnextcloudfromASGStacksgalb85F275898080011A1DCA", + "logicalId": "ApiGWDeploymentStageprodDFD8EC11", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 212, - "startColumn": 5, - "endLine": 212, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 129, + "startColumn": 4, + "endLine": 129, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Resource 'SQSTriggerLambdaServiceRole0C427DE8' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sgalbE4BDB11E", + "logicalId": "SQSTriggerLambdaServiceRole0C427DE8", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 221, - "startColumn": 5, - "endLine": 221, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 259, + "startColumn": 4, + "endLine": 259, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", + "message": "Resource 'SQSTriggerLambda99F71FB3' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sgalbE4BDB11E", + "logicalId": "SQSTriggerLambda99F71FB3", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.GroupName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 222, - "startColumn": 5, - "endLine": 222, + "startLine": 328, + "startColumn": 4, + "endLine": 328, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'SQSTriggerLambdaSqsEventSourceApiSqsLambdaStackSQSQueue975096D28FB9A750' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sgalbE4BDB11E", + "logicalId": "SQSTriggerLambdaSqsEventSourceApiSqsLambdaStackSQSQueue975096D28FB9A750", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 239, + "startLine": 357, + "startColumn": 4, + "endLine": 357, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/py-athena-s3-glue--DemoAthenaS3GlueStack.template.json": { + "filePath": "cdk/py-athena-s3-glue--DemoAthenaS3GlueStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 21, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 4, + "informational": 23, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 158, "startColumn": 5, - "endLine": 239, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 158, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: NetworkStack:ExportsOutputRefTheVPC92636AB00B2A4A70)" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "ALBAEE750D2", + "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Scheme", - "category": "Best Practice", - "startLine": 256, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 502, "startColumn": 5, - "endLine": 256, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 502, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "python3.9", + "lifecycle": "deprecated" } }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 172, + "startColumn": 4, + "endLine": 172, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 511, + "startColumn": 4, + "endLine": 511, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ALBAEE750D2", + "logicalId": "logsbucketE18563D9", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 273, + "startLine": 6, "startColumn": 5, - "endLine": 273, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endLine": 6, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -58365,43 +59051,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ALBListener3B99FF85", + "logicalId": "logsbucketPolicy6C60198C", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Properties.LoadBalancerArn", + "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 290, + "startLine": 41, "startColumn": 5, - "endLine": 290, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", + "endLine": 41, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ALBAEE750D2'" + "resolutionSource": "Ref to 'logsbucketE18563D9'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ALBListenerTargetGroupD5D64FBA", + "logicalId": "queryoutputbucket3DDDB997", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 303, + "startLine": 184, "startColumn": 5, - "endLine": 303, - "endColumn": 10, + "endLine": 184, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -58411,41 +59096,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ALBListenerTargetGroupD5D64FBA", + "logicalId": "queryoutputbucketPolicy2BC02580", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 304, + "startLine": 215, "startColumn": 5, - "endLine": 304, - "endColumn": 14, + "endLine": 215, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'queryoutputbucket3DDDB997'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", + "message": "Property 'Content' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ALBListenerTargetGroupD5D64FBA", + "logicalId": "samplefilesAwsCliLayerCFFFB375", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.TargetType", + "propertyPath": "Properties.Content", "category": "Best Practice", - "startLine": 311, + "startLine": 292, "startColumn": 5, - "endLine": 311, - "endColumn": 16, + "endLine": 292, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -58455,161 +59142,158 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ALBListenerTargetGroupD5D64FBA", + "logicalId": "samplefilesAwsCliLayerCFFFB375", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 312, + "startLine": 298, "startColumn": 5, - "endLine": 312, - "endColumn": 11, + "endLine": 298, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: NetworkStack:ExportsOutputRefTheVPC92636AB00B2A4A70)" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'sgnextcloud40AB2A88' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgnextcloud40AB2A88", + "logicalId": "gluecrawlerroleB13EEB29", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 167, - "startColumn": 4, - "endLine": 167, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 555, + "startColumn": 5, + "endLine": 555, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'sgalbE4BDB11E' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgalbE4BDB11E", + "logicalId": "logscrawler", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Glue::Crawler" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 220, - "startColumn": 4, - "endLine": 220, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 571, + "startColumn": 5, + "endLine": 571, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-glue.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ALBAEE750D2' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ALBAEE750D2", + "logicalId": "logauditingworkgroup", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::Athena::WorkGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 249, - "startColumn": 4, - "endLine": 249, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 618, + "startColumn": 5, + "endLine": 618, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ALBListener3B99FF85' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", + "message": "Property 'Database' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ALBListener3B99FF85", + "logicalId": "producteventsbydatequery", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::Athena::NamedQuery" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Database", "category": "Best Practice", - "startLine": 281, - "startColumn": 4, - "endLine": 281, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 651, + "startColumn": 5, + "endLine": 651, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ALBListenerTargetGroupD5D64FBA' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ALBListenerTargetGroupD5D64FBA", + "logicalId": "producteventsbydatequery", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::Athena::NamedQuery" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 302, - "startColumn": 4, - "endLine": 302, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/py-docker-app-with-asg-alb--NetworkStack.template.json": { - "filePath": "cdk/py-docker-app-with-asg-alb--NetworkStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 22, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 37, - "debug": 0 + "startLine": 652, + "startColumn": 5, + "endLine": 652, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'QueryString' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPC92636AB0", + "logicalId": "producteventsbydatequery", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Athena::NamedQuery" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.QueryString", "category": "Best Practice", - "startLine": 6, + "startLine": 653, "startColumn": 5, - "endLine": 6, - "endColumn": 15, + "endLine": 653, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -58619,41 +59303,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'WorkGroup' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPC92636AB0", + "logicalId": "producteventsbydatequery", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Athena::NamedQuery" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.WorkGroup", "category": "Best Practice", - "startLine": 9, + "startLine": 654, "startColumn": 5, - "endLine": 9, - "endColumn": 21, + "endLine": 654, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'Database' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPublicSubnet1Subnet770D4FF2", + "logicalId": "usereventsbydatequery", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Athena::NamedQuery" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Database", "category": "Best Practice", - "startLine": 24, + "startLine": 666, "startColumn": 5, - "endLine": 24, - "endColumn": 22, + "endLine": 666, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -58663,19 +59349,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPublicSubnet1Subnet770D4FF2", + "logicalId": "usereventsbydatequery", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Athena::NamedQuery" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 32, + "startLine": 667, "startColumn": 5, - "endLine": 32, - "endColumn": 15, + "endLine": 667, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -58685,121 +59372,112 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'QueryString' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPublicSubnet1Subnet770D4FF2", + "logicalId": "usereventsbydatequery", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Athena::NamedQuery" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.QueryString", "category": "Best Practice", - "startLine": 48, + "startLine": 668, "startColumn": 5, - "endLine": 48, - "endColumn": 11, + "endLine": 668, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPC92636AB0'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'WorkGroup' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPublicSubnet1RouteTable17DA183D", + "logicalId": "usereventsbydatequery", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::Athena::NamedQuery" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.WorkGroup", "category": "Best Practice", - "startLine": 65, + "startLine": 669, "startColumn": 5, - "endLine": 65, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 669, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPC92636AB0'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Database' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPublicSubnet1RouteTableAssociationE5186D77", + "logicalId": "alleventsbyuserIdquery", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Athena::NamedQuery" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Database", "category": "Best Practice", - "startLine": 76, + "startLine": 681, "startColumn": 5, - "endLine": 76, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 681, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPCPublicSubnet1RouteTable17DA183D'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPublicSubnet1RouteTableAssociationE5186D77", + "logicalId": "alleventsbyuserIdquery", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Athena::NamedQuery" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 79, + "startLine": 682, "startColumn": 5, - "endLine": 79, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 682, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPCPublicSubnet1Subnet770D4FF2'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'QueryString' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPublicSubnet1DefaultRoute6D26543F", + "logicalId": "alleventsbyuserIdquery", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Athena::NamedQuery" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.QueryString", "category": "Best Practice", - "startLine": 90, + "startLine": 683, "startColumn": 5, - "endLine": 90, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 683, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -58809,89 +59487,148 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'WorkGroup' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPublicSubnet1DefaultRoute6D26543F", + "logicalId": "alleventsbyuserIdquery", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Athena::NamedQuery" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.WorkGroup", "category": "Best Practice", - "startLine": 94, + "startLine": 684, "startColumn": 5, - "endLine": 94, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 684, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPCPublicSubnet1RouteTable17DA183D'" + "lifecycle": "create-only" } }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 117, + "startColumn": 4, + "endLine": 117, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 142, + "startColumn": 4, + "endLine": 142, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/py-datasync-s3--cdk-datasync-s3-to-s3-iam.template.json": { + "filePath": "cdk/py-datasync-s3--cdk-datasync-s3-to-s3-iam.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 8, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPublicSubnet1NATGatewayC61D892B", + "logicalId": "CDKDataSyncS3AccessRole0C49AEBFA", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 123, + "startLine": 19, "startColumn": 5, - "endLine": 123, - "endColumn": 18, + "endLine": 19, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt TheVPCPublicSubnet1EIP4412F690.AllocationId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPublicSubnet1NATGatewayC61D892B", + "logicalId": "CDKDataSyncS3Policy034C77CD2", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 129, + "startLine": 55, "startColumn": 5, - "endLine": 129, - "endColumn": 14, + "endLine": 55, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPCPublicSubnet1Subnet770D4FF2'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPublicSubnet2Subnet73F96DA9", + "logicalId": "CDKDataSyncS3Policy034C77CD2", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 150, + "startLine": 56, "startColumn": 5, - "endLine": 150, - "endColumn": 22, + "endLine": 56, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -58901,19 +59638,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPublicSubnet2Subnet73F96DA9", + "logicalId": "CDKDataSyncS3AccessRole18E349368", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 158, + "startLine": 83, "startColumn": 5, - "endLine": 158, - "endColumn": 15, + "endLine": 83, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -58923,121 +59661,186 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPublicSubnet2Subnet73F96DA9", + "logicalId": "CDKDataSyncS3Policy1E7D7BFA5", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 174, + "startLine": 119, "startColumn": 5, - "endLine": 174, - "endColumn": 11, + "endLine": 119, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPC92636AB0'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPublicSubnet2RouteTable3609F42C", + "logicalId": "CDKDataSyncS3Policy1E7D7BFA5", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 191, + "startLine": 120, "startColumn": 5, - "endLine": 191, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 120, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPC92636AB0'" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'CDKDataSyncS3AccessRole0C49AEBFA' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPublicSubnet2RouteTableAssociationB4B0A733", + "logicalId": "CDKDataSyncS3AccessRole0C49AEBFA", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CDKDataSyncS3AccessRole18E349368' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "CDKDataSyncS3AccessRole18E349368", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 69, + "startColumn": 4, + "endLine": 69, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/py-datasync-s3--cdk-datasync-s3-to-s3.template.json": { + "filePath": "cdk/py-datasync-s3--cdk-datasync-s3-to-s3.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 7, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'S3BucketArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", + "entity": { + "logicalId": "DataSyncS3Location0", + "entityType": "Resource", + "resourceType": "AWS::DataSync::LocationS3" + }, + "propertyPath": "Properties.S3BucketArn", + "category": "Best Practice", + "startLine": 11, + "startColumn": 5, + "endLine": 11, + "endColumn": 17, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" + }, + { + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'S3BucketArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", + "entity": { + "logicalId": "DataSyncS3Location1", + "entityType": "Resource", + "resourceType": "AWS::DataSync::LocationS3" + }, + "propertyPath": "Properties.S3BucketArn", "category": "Best Practice", - "startLine": 202, + "startLine": 26, "startColumn": 5, - "endLine": 202, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPCPublicSubnet2RouteTable3609F42C'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "endLine": 26, + "endColumn": 17, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'S3BucketArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPublicSubnet2RouteTableAssociationB4B0A733", + "logicalId": "DataSyncS3Location0", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::DataSync::LocationS3" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.S3BucketArn", "category": "Best Practice", - "startLine": 205, + "startLine": 11, "startColumn": 5, - "endLine": 205, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 11, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPCPublicSubnet2Subnet73F96DA9'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'S3BucketArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPublicSubnet2DefaultRouteFEB062B2", + "logicalId": "DataSyncS3Location1", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::DataSync::LocationS3" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.S3BucketArn", "category": "Best Practice", - "startLine": 216, + "startLine": 26, "startColumn": 5, - "endLine": 216, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 26, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -59047,189 +59850,211 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationLocationArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPublicSubnet2DefaultRouteFEB062B2", + "logicalId": "DataSyncS3toS3Task", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::DataSync::Task" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.DestinationLocationArn", "category": "Best Practice", - "startLine": 220, + "startLine": 37, "startColumn": 5, - "endLine": 220, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 37, + "endColumn": 28, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPCPublicSubnet2RouteTable3609F42C'" + "resolutionSource": "GetAtt DataSyncS3Location0.LocationArn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceLocationArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet1Subnet571D3690", + "logicalId": "DataSyncS3toS3Task", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DataSync::Task" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.SourceLocationArn", "category": "Best Practice", - "startLine": 234, + "startLine": 43, "startColumn": 5, - "endLine": 234, - "endColumn": 22, + "endLine": 43, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt DataSyncS3Location1.LocationArn" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'DataSyncS3Location0' of type 'AWS::DataSync::LocationS3' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet1Subnet571D3690", + "logicalId": "DataSyncS3Location0", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DataSync::LocationS3" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 242, - "startColumn": 5, - "endLine": 242, + "startLine": 5, + "startColumn": 4, + "endLine": 5, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'DataSyncS3Location1' of type 'AWS::DataSync::LocationS3' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet1Subnet571D3690", + "logicalId": "DataSyncS3Location1", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DataSync::LocationS3" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 258, - "startColumn": 5, - "endLine": 258, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPC92636AB0'" - } + "startLine": 20, + "startColumn": 4, + "endLine": 20, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'DataSyncS3toS3Task' of type 'AWS::DataSync::Task' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet1RouteTableF6513BC2", + "logicalId": "DataSyncS3toS3Task", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::DataSync::Task" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 275, - "startColumn": 5, - "endLine": 275, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPC92636AB0'" - } + "startLine": 36, + "startColumn": 4, + "endLine": 36, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/py-docker-app-with-asg-alb--ASGStack.template.json": { + "filePath": "cdk/py-docker-app-with-asg-alb--ASGStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 13, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 38, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "appasgLaunchConfig9EFFB3A3", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "category": "Deprecation", + "startLine": 91, + "startColumn": 3, + "endLine": 91, + "endColumn": 30, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet1RouteTableAssociation46F1FFFC", + "logicalId": "appasgInstanceSecurityGroup8B8185FA", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 286, + "startLine": 6, "startColumn": 5, - "endLine": 286, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 6, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPCPrivateSubnet1RouteTableF6513BC2'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet1RouteTableAssociation46F1FFFC", + "logicalId": "appasgInstanceSecurityGroup8B8185FA", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 289, + "startLine": 20, "startColumn": 5, - "endLine": 289, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 20, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPCPrivateSubnet1Subnet571D3690'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "dynamic (cross-stack import: NetworkStack:ExportsOutputRefTheVPC92636AB00B2A4A70)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet1DefaultRouteD1B9E467", + "logicalId": "appasgInstanceSecurityGroupfromASGStacksgalb85F2758980805783DB9D", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 300, + "startLine": 32, "startColumn": 5, - "endLine": 300, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 32, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -59239,43 +60064,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet1DefaultRouteD1B9E467", + "logicalId": "appasgInstanceSecurityGroupfromASGStacksgalb85F2758980805783DB9D", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 304, + "startLine": 33, "startColumn": 5, - "endLine": 304, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 33, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPCPrivateSubnet1RouteTableF6513BC2'" + "resolutionSource": "GetAtt appasgInstanceSecurityGroup8B8185FA.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet2SubnetCC3D7013", + "logicalId": "appasgInstanceSecurityGroupfromASGStacksgalb85F2758980805783DB9D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 315, + "startLine": 39, "startColumn": 5, - "endLine": 315, - "endColumn": 22, + "endLine": 39, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -59285,143 +60111,137 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet2SubnetCC3D7013", + "logicalId": "appasgInstanceSecurityGroupfromASGStacksgalb85F2758980805783DB9D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.SourceSecurityGroupId", "category": "Best Practice", - "startLine": 323, + "startLine": 40, "startColumn": 5, - "endLine": 323, - "endColumn": 15, + "endLine": 40, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt sgalbE4BDB11E.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet2SubnetCC3D7013", + "logicalId": "appasgInstanceSecurityGroupfromASGStacksgalb85F2758980805783DB9D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 339, + "startLine": 46, "startColumn": 5, - "endLine": 339, - "endColumn": 11, + "endLine": 46, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPC92636AB0'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet2RouteTable9AC81FAC", + "logicalId": "appasgLaunchConfig9EFFB3A3", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.IamInstanceProfile", "category": "Best Practice", - "startLine": 356, + "startLine": 94, "startColumn": 5, - "endLine": 356, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 94, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPC92636AB0'" + "resolutionSource": "Ref to 'appasgInstanceProfile55323240'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet2RouteTableAssociation336D47D1", + "logicalId": "appasgLaunchConfig9EFFB3A3", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 367, + "startLine": 97, "startColumn": 5, - "endLine": 367, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 97, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPCPrivateSubnet2RouteTable9AC81FAC'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet2RouteTableAssociation336D47D1", + "logicalId": "appasgLaunchConfig9EFFB3A3", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 370, + "startLine": 100, "startColumn": 5, - "endLine": 370, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 100, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPCPrivateSubnet2SubnetCC3D7013'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet2DefaultRoute52A1F245", + "logicalId": "appasgLaunchConfig9EFFB3A3", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.KeyName", "category": "Best Practice", - "startLine": 381, + "startLine": 101, "startColumn": 5, - "endLine": 381, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 101, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -59431,130 +60251,93 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet2DefaultRoute52A1F245", + "logicalId": "appasgLaunchConfig9EFFB3A3", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.SecurityGroups", "category": "Best Practice", - "startLine": 385, + "startLine": 102, "startColumn": 5, - "endLine": 385, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 102, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPCPrivateSubnet2RouteTable9AC81FAC'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'UserData' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCVPCGWC9B93E30", + "logicalId": "appasgLaunchConfig9EFFB3A3", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 413, + "startLine": 116, "startColumn": 5, - "endLine": 413, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "endLine": 116, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPC92636AB0'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } - } - ] - }, - "cdk/py-docker-app-with-asg-alb--RDSStack.template.json": { - "filePath": "cdk/py-docker-app-with-asg-alb--RDSStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 6, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 1, - "informational": 13, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3062", - "severity": "ERROR", - "message": "DBInstanceClass 'db.r4.large' is not valid for Engine 'mysql' EngineVersion '8.0.16'", - "source": "CFN_LINT", - "entity": { - "logicalId": "RDSE0E96D00", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.DBInstanceClass", - "category": "Resource", - "startLine": 96, - "startColumn": 5, - "endLine": 96, - "endColumn": 21, - "ruleDescription": "Validates RDS DB Instance Class based on Engine and EngineVersion", - "phase": "LINT" }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", - "entity": { - "logicalId": "RDSE0E96D00", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 93, - "startColumn": 4, - "endLine": 93, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "entity": { + "logicalId": "appasgASGE5B53758", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Properties.LaunchConfigurationName", + "category": "Best Practice", + "startLine": 130, + "startColumn": 5, + "endLine": 130, + "endColumn": 29, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'appasgLaunchConfig9EFFB3A3'" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "RDSE0E96D00", + "logicalId": "appasgASGE5B53758", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties", + "propertyPath": "Properties.VPCZoneIdentifier", "category": "Best Practice", - "startLine": 93, - "startColumn": 4, - "endLine": 93, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "startLine": 147, + "startColumn": 5, + "endLine": 147, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9001", @@ -59562,15 +60345,15 @@ "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgrds6871B7A8", + "logicalId": "sgnextcloud40AB2A88", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 6, + "startLine": 168, "startColumn": 5, - "endLine": 6, + "endLine": 168, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -59584,15 +60367,15 @@ "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgrds6871B7A8", + "logicalId": "sgnextcloud40AB2A88", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.GroupName", "category": "Best Practice", - "startLine": 7, + "startLine": 169, "startColumn": 5, - "endLine": 7, + "endLine": 169, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -59606,15 +60389,15 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgrds6871B7A8", + "logicalId": "sgnextcloud40AB2A88", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 24, + "startLine": 186, "startColumn": 5, - "endLine": 24, + "endLine": 186, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -59626,258 +60409,273 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SecretId' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RDSSecretAttachment39FC3A79", + "logicalId": "sgnextcloudfromASGStacksgalb85F275898080011A1DCA", "entityType": "Resource", - "resourceType": "AWS::SecretsManager::SecretTargetAttachment" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.SecretId", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 79, + "startLine": 198, "startColumn": 5, - "endLine": 79, + "endLine": 198, "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'RDSSecret3683CA93'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DBSubnetGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RDSE0E96D00", + "logicalId": "sgnextcloudfromASGStacksgalb85F275898080011A1DCA", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.DBSubnetGroupName", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 97, + "startLine": 199, "startColumn": 5, - "endLine": 97, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 199, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'RDSSubnetGroup3527AC04'" + "resolutionSource": "GetAtt sgnextcloud40AB2A88.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RDSE0E96D00", + "logicalId": "sgnextcloudfromASGStacksgalb85F275898080011A1DCA", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 100, + "startLine": 205, "startColumn": 5, - "endLine": 100, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 205, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RDSE0E96D00", + "logicalId": "sgnextcloudfromASGStacksgalb85F275898080011A1DCA", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.SourceSecurityGroupId", "category": "Best Practice", - "startLine": 114, + "startLine": 206, "startColumn": 5, - "endLine": 114, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 206, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:{dynamic}{ref:RDSSecret3683CA93}:SecretString:username::}})" + "resolutionSource": "GetAtt sgalbE4BDB11E.GroupId" } }, { - "ruleId": "I9003", + "ruleId": "I9001", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", + "entity": { + "logicalId": "sgnextcloudfromASGStacksgalb85F275898080011A1DCA", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupIngress" + }, + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" + "startLine": 212, + "startColumn": 5, + "endLine": 212, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'sgrds6871B7A8' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgrds6871B7A8", + "logicalId": "sgalbE4BDB11E", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 221, + "startColumn": 5, + "endLine": 221, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'RDSSubnetGroup3527AC04' of type 'AWS::RDS::DBSubnetGroup' supports Tags but none are configured", + "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RDSSubnetGroup3527AC04", + "logicalId": "sgalbE4BDB11E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBSubnetGroup" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.GroupName", "category": "Best Practice", - "startLine": 34, - "startColumn": 4, - "endLine": 34, + "startLine": 222, + "startColumn": 5, + "endLine": 222, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'RDSSecret3683CA93' of type 'AWS::SecretsManager::Secret' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RDSSecret3683CA93", + "logicalId": "sgalbE4BDB11E", "entityType": "Resource", - "resourceType": "AWS::SecretsManager::Secret" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 51, - "startColumn": 4, - "endLine": 51, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 239, + "startColumn": 5, + "endLine": 239, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import: NetworkStack:ExportsOutputRefTheVPC92636AB00B2A4A70)" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'RDSE0E96D00' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RDSE0E96D00", + "logicalId": "ALBAEE750D2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Scheme", "category": "Best Practice", - "startLine": 93, - "startColumn": 4, - "endLine": 93, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/py-docker-app-with-asg-alb--StorageStack.template.json": { - "filePath": "cdk/py-docker-app-with-asg-alb--StorageStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 7, - "debug": 0 + "startLine": 256, + "startColumn": 5, + "endLine": 256, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "efsstorage", + "logicalId": "ALBAEE750D2", "entityType": "Resource", - "resourceType": "AWS::EFS::FileSystem" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 273, + "startColumn": 5, + "endLine": 273, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "efsstorage", + "logicalId": "ALBListener3B99FF85", "entityType": "Resource", - "resourceType": "AWS::EFS::FileSystem" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, + "propertyPath": "Properties.LoadBalancerArn", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 290, + "startColumn": 5, + "endLine": 290, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ALBAEE750D2'" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Encrypted' is create-only; updating it will cause resource replacement", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "efsstorage", + "logicalId": "ALBListenerTargetGroupD5D64FBA", "entityType": "Resource", - "resourceType": "AWS::EFS::FileSystem" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Encrypted", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 6, + "startLine": 303, "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 303, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -59887,19 +60685,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgefs8B17F90D", + "logicalId": "ALBListenerTargetGroupD5D64FBA", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 15, + "startLine": 304, "startColumn": 5, - "endLine": 15, - "endColumn": 22, + "endLine": 304, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -59909,19 +60707,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgefs8B17F90D", + "logicalId": "ALBListenerTargetGroupD5D64FBA", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.GroupName", + "propertyPath": "Properties.TargetType", "category": "Best Practice", - "startLine": 16, + "startLine": 311, "startColumn": 5, - "endLine": 16, - "endColumn": 15, + "endLine": 311, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -59934,15 +60732,15 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgefs8B17F90D", + "logicalId": "ALBListenerTargetGroupD5D64FBA", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 33, + "startLine": 312, "startColumn": 5, - "endLine": 33, + "endLine": 312, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -59954,210 +60752,203 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sgefs8B17F90D' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'sgnextcloud40AB2A88' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sgefs8B17F90D", + "logicalId": "sgnextcloud40AB2A88", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 14, + "startLine": 167, "startColumn": 4, - "endLine": 14, + "endLine": 167, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "cdk/py-dynamodb-lambda--dynamodb-lambda.template.json": { - "filePath": "cdk/py-dynamodb-lambda--dynamodb-lambda.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 11, - "counts": { - "fatal": 0, - "errors": 2, - "warnings": 2, - "informational": 15, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'sgalbE4BDB11E' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "producerlambdafunctionCE724CE7", + "logicalId": "sgalbE4BDB11E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 123, - "startColumn": 5, - "endLine": 123, - "endColumn": 13, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.6", - "lifecycle": "end-of-life" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 220, + "startColumn": 4, + "endLine": 220, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ALBAEE750D2' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "consumerlambdafunction40710347", + "logicalId": "ALBAEE750D2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 246, - "startColumn": 5, - "endLine": 246, - "endColumn": 13, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.6", - "lifecycle": "end-of-life" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 249, + "startColumn": 4, + "endLine": 249, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'producerlambdafunctionServiceRole5400FE21' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ALBListener3B99FF85' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "producerlambdafunctionCE724CE7", + "logicalId": "ALBListener3B99FF85", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 125, + "startLine": 281, "startColumn": 4, - "endLine": 125, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 281, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'consumerlambdafunctionServiceRole116B0746' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ALBListenerTargetGroupD5D64FBA' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "consumerlambdafunction40710347", + "logicalId": "ALBListenerTargetGroupD5D64FBA", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 248, + "startLine": 302, "startColumn": 4, - "endLine": 248, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 302, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "cdk/py-docker-app-with-asg-alb--NetworkStack.template.json": { + "filePath": "cdk/py-docker-app-with-asg-alb--NetworkStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 22, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 37, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "demotable002BE91A", + "logicalId": "TheVPC92636AB0", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 12, + "startLine": 6, "startColumn": 5, - "endLine": 12, + "endLine": 6, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "oneminuteruleAllowEventRuledynamodblambdaproducerlambdafunction1E7146624783D604", + "logicalId": "TheVPC92636AB0", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 292, + "startLine": 9, "startColumn": 5, - "endLine": 292, - "endColumn": 12, + "endLine": 9, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "oneminuteruleAllowEventRuledynamodblambdaproducerlambdafunction1E7146624783D604", + "logicalId": "TheVPCPublicSubnet1Subnet770D4FF2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 293, + "startLine": 24, "startColumn": 5, - "endLine": 293, - "endColumn": 18, + "endLine": 24, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt producerlambdafunctionCE724CE7.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "oneminuteruleAllowEventRuledynamodblambdaproducerlambdafunction1E7146624783D604", + "logicalId": "TheVPCPublicSubnet1Subnet770D4FF2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 299, + "startLine": 32, "startColumn": 5, - "endLine": 299, + "endLine": 32, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -60168,350 +60959,359 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "oneminuteruleAllowEventRuledynamodblambdaproducerlambdafunction1E7146624783D604", + "logicalId": "TheVPCPublicSubnet1Subnet770D4FF2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 300, + "startLine": 48, "startColumn": 5, - "endLine": 300, - "endColumn": 15, + "endLine": 48, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt oneminuteruleE9168CE5.Arn" + "resolutionSource": "Ref to 'TheVPC92636AB0'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "oneminuteruleAllowEventRuledynamodblambdaconsumerlambdafunction1EF0C7D6888AA909", + "logicalId": "TheVPCPublicSubnet1RouteTable17DA183D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 314, + "startLine": 65, "startColumn": 5, - "endLine": 314, - "endColumn": 12, + "endLine": 65, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'TheVPC92636AB0'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "oneminuteruleAllowEventRuledynamodblambdaconsumerlambdafunction1EF0C7D6888AA909", + "logicalId": "TheVPCPublicSubnet1RouteTableAssociationE5186D77", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 315, + "startLine": 76, "startColumn": 5, - "endLine": 315, + "endLine": 76, "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt consumerlambdafunction40710347.Arn" + "resolutionSource": "Ref to 'TheVPCPublicSubnet1RouteTable17DA183D'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "oneminuteruleAllowEventRuledynamodblambdaconsumerlambdafunction1EF0C7D6888AA909", + "logicalId": "TheVPCPublicSubnet1RouteTableAssociationE5186D77", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 321, + "startLine": 79, "startColumn": 5, - "endLine": 321, - "endColumn": 15, + "endLine": 79, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'TheVPCPublicSubnet1Subnet770D4FF2'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "oneminuteruleAllowEventRuledynamodblambdaconsumerlambdafunction1EF0C7D6888AA909", + "logicalId": "TheVPCPublicSubnet1DefaultRoute6D26543F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 322, + "startLine": 90, "startColumn": 5, - "endLine": 322, - "endColumn": 15, + "endLine": 90, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt oneminuteruleE9168CE5.Arn" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'demotable002BE91A' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "demotable002BE91A", + "logicalId": "TheVPCPublicSubnet1DefaultRoute6D26543F", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 94, + "startColumn": 5, + "endLine": 94, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'TheVPCPublicSubnet1RouteTable17DA183D'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'producerlambdafunctionServiceRole5400FE21' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "producerlambdafunctionServiceRole5400FE21", + "logicalId": "TheVPCPublicSubnet1NATGatewayC61D892B", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 31, - "startColumn": 4, - "endLine": 31, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 123, + "startColumn": 5, + "endLine": 123, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt TheVPCPublicSubnet1EIP4412F690.AllocationId" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'producerlambdafunctionCE724CE7' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "producerlambdafunctionCE724CE7", + "logicalId": "TheVPCPublicSubnet1NATGatewayC61D892B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 102, - "startColumn": 4, - "endLine": 102, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 129, + "startColumn": 5, + "endLine": 129, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'TheVPCPublicSubnet1Subnet770D4FF2'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'consumerlambdafunctionServiceRole116B0746' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "consumerlambdafunctionServiceRole116B0746", + "logicalId": "TheVPCPublicSubnet2Subnet73F96DA9", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 138, - "startColumn": 4, - "endLine": 138, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 150, + "startColumn": 5, + "endLine": 150, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'consumerlambdafunction40710347' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "consumerlambdafunction40710347", + "logicalId": "TheVPCPublicSubnet2Subnet73F96DA9", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 225, - "startColumn": 4, - "endLine": 225, + "startLine": 158, + "startColumn": 5, + "endLine": 158, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'oneminuteruleE9168CE5' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "oneminuteruleE9168CE5", + "logicalId": "TheVPCPublicSubnet2Subnet73F96DA9", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 261, - "startColumn": 4, - "endLine": 261, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/py-ec2-cloudwatch--ec2-cloudwatch.template.json": { - "filePath": "cdk/py-ec2-cloudwatch--ec2-cloudwatch.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 43, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 3, - "informational": 74, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3628", - "severity": "ERROR", - "message": "'Write a EC2 instance type' is not valid in any region", - "source": "CFN_LINT", - "entity": { - "logicalId": "WebInstanceF774E10D", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.InstanceType", - "category": "Resource", - "startLine": 758, + "startLine": 174, "startColumn": 5, - "endLine": 758, - "endColumn": 18, - "ruleDescription": "Validate EC2 instance types based on region", - "phase": "LINT" + "endLine": 174, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'TheVPC92636AB0'" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'AWSb4cf1abd4e4f4bc699441af7ccd9ec37ServiceRole9FFE9C50' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AWSb4cf1abd4e4f4bc699441af7ccd9ec371511E620", + "logicalId": "TheVPCPublicSubnet2RouteTable3609F42C", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 925, - "startColumn": 4, - "endLine": 925, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 191, + "startColumn": 5, + "endLine": 191, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'TheVPC92636AB0'" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'30' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WebInstanceF774E10D", + "logicalId": "TheVPCPublicSubnet2RouteTableAssociationB4B0A733", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.VolumeSize", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 746, - "startColumn": 8, - "endLine": 746, - "endColumn": 19, + "startLine": 202, + "startColumn": 5, + "endLine": 202, + "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'TheVPCPublicSubnet2RouteTable3609F42C'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WebInstanceF774E10D", + "logicalId": "TheVPCPublicSubnet2RouteTableAssociationB4B0A733", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.DeleteOnTermination", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 748, - "startColumn": 8, - "endLine": 748, - "endColumn": 28, + "startLine": 205, + "startColumn": 5, + "endLine": 205, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'TheVPCPublicSubnet2Subnet73F96DA9'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKAC02ED99", + "logicalId": "TheVPCPublicSubnet2DefaultRouteFEB062B2", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 6, + "startLine": 216, "startColumn": 5, - "endLine": 6, - "endColumn": 15, + "endLine": 216, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -60521,23 +61321,25 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKAC02ED99", + "logicalId": "TheVPCPublicSubnet2DefaultRouteFEB062B2", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 9, + "startLine": 220, "startColumn": 5, - "endLine": 9, - "endColumn": 21, + "endLine": 220, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'TheVPCPublicSubnet2RouteTable3609F42C'" } }, { @@ -60546,15 +61348,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet1SubnetE7F939D2", + "logicalId": "TheVPCPrivateSubnet1Subnet571D3690", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 24, + "startLine": 234, "startColumn": 5, - "endLine": 24, + "endLine": 234, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -60568,15 +61370,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet1SubnetE7F939D2", + "logicalId": "TheVPCPrivateSubnet1Subnet571D3690", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 32, + "startLine": 242, "startColumn": 5, - "endLine": 32, + "endLine": 242, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -60590,21 +61392,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet1SubnetE7F939D2", + "logicalId": "TheVPCPrivateSubnet1Subnet571D3690", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 48, + "startLine": 258, "startColumn": 5, - "endLine": 48, + "endLine": 258, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" + "resolutionSource": "Ref to 'TheVPC92636AB0'" } }, { @@ -60613,22 +61415,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet1RouteTable0BDD81D8", + "logicalId": "TheVPCPrivateSubnet1RouteTableF6513BC2", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 65, + "startLine": 275, "startColumn": 5, - "endLine": 65, + "endLine": 275, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" + "resolutionSource": "Ref to 'TheVPC92636AB0'" } }, { @@ -60637,22 +61439,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet1RouteTableAssociation616E7197", + "logicalId": "TheVPCPrivateSubnet1RouteTableAssociation46F1FFFC", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 76, + "startLine": 286, "startColumn": 5, - "endLine": 76, + "endLine": 286, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet1RouteTable0BDD81D8'", + "resolutionSource": "Ref to 'TheVPCPrivateSubnet1RouteTableF6513BC2'", "extra": { "replacement_strategy": "delete_then_create" } @@ -60664,22 +61466,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet1RouteTableAssociation616E7197", + "logicalId": "TheVPCPrivateSubnet1RouteTableAssociation46F1FFFC", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 79, + "startLine": 289, "startColumn": 5, - "endLine": 79, + "endLine": 289, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet1SubnetE7F939D2'", + "resolutionSource": "Ref to 'TheVPCPrivateSubnet1Subnet571D3690'", "extra": { "replacement_strategy": "delete_then_create" } @@ -60691,15 +61493,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet1DefaultRoute1FF73EA6", + "logicalId": "TheVPCPrivateSubnet1DefaultRouteD1B9E467", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 90, + "startLine": 300, "startColumn": 5, - "endLine": 90, + "endLine": 300, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60714,68 +61516,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet1DefaultRoute1FF73EA6", + "logicalId": "TheVPCPrivateSubnet1DefaultRouteD1B9E467", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 94, + "startLine": 304, "startColumn": 5, - "endLine": 94, + "endLine": 304, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet1RouteTable0BDD81D8'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VpcFromCDKPublicSubnet1NATGateway291FE40B", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.AllocationId", - "category": "Best Practice", - "startLine": 123, - "startColumn": 5, - "endLine": 123, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcFromCDKPublicSubnet1EIP637D1D3D.AllocationId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VpcFromCDKPublicSubnet1NATGateway291FE40B", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 129, - "startColumn": 5, - "endLine": 129, - "endColumn": 14, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet1SubnetE7F939D2'" + "resolutionSource": "Ref to 'TheVPCPrivateSubnet1RouteTableF6513BC2'" } }, { @@ -60784,15 +61540,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet2SubnetBDC76372", + "logicalId": "TheVPCPrivateSubnet2SubnetCC3D7013", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 150, + "startLine": 315, "startColumn": 5, - "endLine": 150, + "endLine": 315, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -60806,15 +61562,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet2SubnetBDC76372", + "logicalId": "TheVPCPrivateSubnet2SubnetCC3D7013", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 158, + "startLine": 323, "startColumn": 5, - "endLine": 158, + "endLine": 323, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -60828,21 +61584,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet2SubnetBDC76372", + "logicalId": "TheVPCPrivateSubnet2SubnetCC3D7013", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 174, + "startLine": 339, "startColumn": 5, - "endLine": 174, + "endLine": 339, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" + "resolutionSource": "Ref to 'TheVPC92636AB0'" } }, { @@ -60851,22 +61607,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet2RouteTableF7A722BD", + "logicalId": "TheVPCPrivateSubnet2RouteTable9AC81FAC", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 191, + "startLine": 356, "startColumn": 5, - "endLine": 191, + "endLine": 356, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" + "resolutionSource": "Ref to 'TheVPC92636AB0'" } }, { @@ -60875,22 +61631,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet2RouteTableAssociation163F9AFA", + "logicalId": "TheVPCPrivateSubnet2RouteTableAssociation336D47D1", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 202, + "startLine": 367, "startColumn": 5, - "endLine": 202, + "endLine": 367, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet2RouteTableF7A722BD'", + "resolutionSource": "Ref to 'TheVPCPrivateSubnet2RouteTable9AC81FAC'", "extra": { "replacement_strategy": "delete_then_create" } @@ -60902,22 +61658,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet2RouteTableAssociation163F9AFA", + "logicalId": "TheVPCPrivateSubnet2RouteTableAssociation336D47D1", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 205, + "startLine": 370, "startColumn": 5, - "endLine": 205, + "endLine": 370, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet2SubnetBDC76372'", + "resolutionSource": "Ref to 'TheVPCPrivateSubnet2SubnetCC3D7013'", "extra": { "replacement_strategy": "delete_then_create" } @@ -60929,15 +61685,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet2DefaultRouteC022B913", + "logicalId": "TheVPCPrivateSubnet2DefaultRoute52A1F245", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 216, + "startLine": 381, "startColumn": 5, - "endLine": 216, + "endLine": 381, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60952,85 +61708,143 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet2DefaultRouteC022B913", + "logicalId": "TheVPCPrivateSubnet2DefaultRoute52A1F245", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 220, + "startLine": 385, "startColumn": 5, - "endLine": 220, + "endLine": 385, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet2RouteTableF7A722BD'" + "resolutionSource": "Ref to 'TheVPCPrivateSubnet2RouteTable9AC81FAC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet2NATGateway3450887A", + "logicalId": "TheVPCVPCGWC9B93E30", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 249, + "startLine": 413, "startColumn": 5, - "endLine": 249, - "endColumn": 18, + "endLine": 413, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcFromCDKPublicSubnet2EIP09D8D9CE.AllocationId" + "resolutionSource": "Ref to 'TheVPC92636AB0'", + "extra": { + "replacement_strategy": "delete_then_create" + } } + } + ] + }, + "cdk/py-docker-app-with-asg-alb--RDSStack.template.json": { + "filePath": "cdk/py-docker-app-with-asg-alb--RDSStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 6, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 1, + "informational": 13, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3062", + "severity": "ERROR", + "message": "DBInstanceClass 'db.r4.large' is not valid for Engine 'mysql' EngineVersion '8.0.16'", + "source": "CFN_LINT", + "entity": { + "logicalId": "RDSE0E96D00", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.DBInstanceClass", + "category": "Resource", + "startLine": 96, + "startColumn": 5, + "endLine": 96, + "endColumn": 21, + "ruleDescription": "Validates RDS DB Instance Class based on Engine and EngineVersion", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet2NATGateway3450887A", + "logicalId": "RDSE0E96D00", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 93, + "startColumn": 4, + "endLine": 93, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "RDSE0E96D00", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 255, - "startColumn": 5, - "endLine": 255, - "endColumn": 14, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet2SubnetBDC76372'" - } + "startLine": 93, + "startColumn": 4, + "endLine": 93, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet1SubnetE081A3F6", + "logicalId": "sgrds6871B7A8", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 276, + "startLine": 6, "startColumn": 5, - "endLine": 276, + "endLine": 6, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -61041,18 +61855,18 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet1SubnetE081A3F6", + "logicalId": "sgrds6871B7A8", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.GroupName", "category": "Best Practice", - "startLine": 284, + "startLine": 7, "startColumn": 5, - "endLine": 284, + "endLine": 7, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -61066,163 +61880,299 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet1SubnetE081A3F6", + "logicalId": "sgrds6871B7A8", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 300, + "startLine": 24, "startColumn": 5, - "endLine": 300, + "endLine": 24, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" + "resolutionSource": "dynamic (cross-stack import: NetworkStack:ExportsOutputRefTheVPC92636AB00B2A4A70)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'SecretId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet1RouteTableB5578A45", + "logicalId": "RDSSecretAttachment39FC3A79", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::SecretsManager::SecretTargetAttachment" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.SecretId", "category": "Best Practice", - "startLine": 317, + "startLine": 79, "startColumn": 5, - "endLine": 317, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 79, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" + "resolutionSource": "Ref to 'RDSSecret3683CA93'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'DBSubnetGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet1RouteTableAssociation7F2E7FF7", + "logicalId": "RDSE0E96D00", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.DBSubnetGroupName", "category": "Best Practice", - "startLine": 328, + "startLine": 97, "startColumn": 5, - "endLine": 328, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 97, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPrivateSubnet1RouteTableB5578A45'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "Ref to 'RDSSubnetGroup3527AC04'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet1RouteTableAssociation7F2E7FF7", + "logicalId": "RDSE0E96D00", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 331, + "startLine": 100, "startColumn": 5, - "endLine": 331, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 100, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPrivateSubnet1SubnetE081A3F6'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet1DefaultRoute3081953E", + "logicalId": "RDSE0E96D00", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.MasterUsername", + "category": "Best Practice", + "startLine": 114, + "startColumn": 5, + "endLine": 114, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:{dynamic}{ref:RDSSecret3683CA93}:SecretString:username::}})" + } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'sgrds6871B7A8' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "sgrds6871B7A8", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'RDSSubnetGroup3527AC04' of type 'AWS::RDS::DBSubnetGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "RDSSubnetGroup3527AC04", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBSubnetGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 34, + "startColumn": 4, + "endLine": 34, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'RDSSecret3683CA93' of type 'AWS::SecretsManager::Secret' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "RDSSecret3683CA93", + "entityType": "Resource", + "resourceType": "AWS::SecretsManager::Secret" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 51, + "startColumn": 4, + "endLine": 51, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'RDSE0E96D00' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "RDSE0E96D00", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 93, + "startColumn": 4, + "endLine": 93, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/py-docker-app-with-asg-alb--StorageStack.template.json": { + "filePath": "cdk/py-docker-app-with-asg-alb--StorageStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 7, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "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": "efsstorage", + "entityType": "Resource", + "resourceType": "AWS::EFS::FileSystem" + }, + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 14, + "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": "efsstorage", + "entityType": "Resource", + "resourceType": "AWS::EFS::FileSystem" }, - "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 342, - "startColumn": 5, - "endLine": 342, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Encrypted' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet1DefaultRoute3081953E", + "logicalId": "efsstorage", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EFS::FileSystem" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Encrypted", "category": "Best Practice", - "startLine": 346, + "startLine": 6, "startColumn": 5, - "endLine": 346, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 6, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPrivateSubnet1RouteTableB5578A45'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet2Subnet6D9A025D", + "logicalId": "sgefs8B17F90D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 357, + "startLine": 15, "startColumn": 5, - "endLine": 357, + "endLine": 15, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -61233,18 +62183,18 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet2Subnet6D9A025D", + "logicalId": "sgefs8B17F90D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.GroupName", "category": "Best Practice", - "startLine": 365, + "startLine": 16, "startColumn": 5, - "endLine": 365, + "endLine": 16, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -61258,118 +62208,186 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet2Subnet6D9A025D", + "logicalId": "sgefs8B17F90D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 381, + "startLine": 33, "startColumn": 5, - "endLine": 381, + "endLine": 33, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" + "resolutionSource": "dynamic (cross-stack import: NetworkStack:ExportsOutputRefTheVPC92636AB00B2A4A70)" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'sgefs8B17F90D' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet2RouteTable5CB16C6C", + "logicalId": "sgefs8B17F90D", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 398, + "startLine": 14, + "startColumn": 4, + "endLine": 14, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/py-dynamodb-lambda--dynamodb-lambda.template.json": { + "filePath": "cdk/py-dynamodb-lambda--dynamodb-lambda.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 11, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 2, + "informational": 15, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "producerlambdafunctionCE724CE7", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 123, "startColumn": 5, - "endLine": 398, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 123, + "endColumn": 13, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" + "actualValue": "python3.6", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet2RouteTableAssociation68ADF807", + "logicalId": "consumerlambdafunction40710347", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 409, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 246, "startColumn": 5, - "endLine": 409, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 246, + "endColumn": 13, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPrivateSubnet2RouteTable5CB16C6C'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "actualValue": "python3.6", + "lifecycle": "end-of-life" } }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'producerlambdafunctionServiceRole5400FE21' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "producerlambdafunctionCE724CE7", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 125, + "startColumn": 4, + "endLine": 125, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'consumerlambdafunctionServiceRole116B0746' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "consumerlambdafunction40710347", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 248, + "startColumn": 4, + "endLine": 248, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet2RouteTableAssociation68ADF807", + "logicalId": "demotable002BE91A", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 412, + "startLine": 12, "startColumn": 5, - "endLine": 412, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 12, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPrivateSubnet2Subnet6D9A025D'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet2DefaultRoute0D482744", + "logicalId": "oneminuteruleAllowEventRuledynamodblambdaproducerlambdafunction1E7146624783D604", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 423, + "startLine": 292, "startColumn": 5, - "endLine": 423, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 292, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -61379,92 +62397,87 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet2DefaultRoute0D482744", + "logicalId": "oneminuteruleAllowEventRuledynamodblambdaproducerlambdafunction1E7146624783D604", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 427, + "startLine": 293, "startColumn": 5, - "endLine": 427, + "endLine": 293, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPrivateSubnet2RouteTable5CB16C6C'" + "resolutionSource": "GetAtt producerlambdafunctionCE724CE7.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKVPCGW6C4E6589", + "logicalId": "oneminuteruleAllowEventRuledynamodblambdaproducerlambdafunction1E7146624783D604", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 455, + "startLine": 299, "startColumn": 5, - "endLine": 455, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "endLine": 299, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ServiceName' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKS3EndpointF02E5219", + "logicalId": "oneminuteruleAllowEventRuledynamodblambdaproducerlambdafunction1E7146624783D604", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCEndpoint" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ServiceName", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 474, + "startLine": 300, "startColumn": 5, - "endLine": 474, - "endColumn": 17, + "endLine": 300, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt oneminuteruleE9168CE5.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcEndpointType' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKS3EndpointF02E5219", + "logicalId": "oneminuteruleAllowEventRuledynamodblambdaconsumerlambdafunction1EF0C7D6888AA909", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCEndpoint" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcEndpointType", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 492, + "startLine": 314, "startColumn": 5, - "endLine": 492, - "endColumn": 21, + "endLine": 314, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -61474,42 +62487,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKS3EndpointF02E5219", + "logicalId": "oneminuteruleAllowEventRuledynamodblambdaconsumerlambdafunction1EF0C7D6888AA909", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCEndpoint" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 493, + "startLine": 315, "startColumn": 5, - "endLine": 493, - "endColumn": 11, + "endLine": 315, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" + "resolutionSource": "GetAtt consumerlambdafunction40710347.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BastionHostInstanceSecurityGroupE75D4274", + "logicalId": "oneminuteruleAllowEventRuledynamodblambdaconsumerlambdafunction1EF0C7D6888AA909", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 504, + "startLine": 321, "startColumn": 5, - "endLine": 504, - "endColumn": 22, + "endLine": 321, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -61519,159 +62532,282 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BastionHostInstanceSecurityGroupE75D4274", + "logicalId": "oneminuteruleAllowEventRuledynamodblambdaconsumerlambdafunction1EF0C7D6888AA909", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 527, + "startLine": 322, "startColumn": 5, - "endLine": 527, - "endColumn": 11, + "endLine": 322, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" + "resolutionSource": "GetAtt oneminuteruleE9168CE5.Arn" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Resource 'demotable002BE91A' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BastionHost30F9ED05", + "logicalId": "demotable002BE91A", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 605, - "startColumn": 5, - "endLine": 605, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'producerlambdafunctionServiceRole5400FE21' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "producerlambdafunctionServiceRole5400FE21", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 31, + "startColumn": 4, + "endLine": 31, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'producerlambdafunctionCE724CE7' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "producerlambdafunctionCE724CE7", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 102, + "startColumn": 4, + "endLine": 102, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'consumerlambdafunctionServiceRole116B0746' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "consumerlambdafunctionServiceRole116B0746", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 138, + "startColumn": 4, + "endLine": 138, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'consumerlambdafunction40710347' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "consumerlambdafunction40710347", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 225, + "startColumn": 4, + "endLine": 225, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'oneminuteruleE9168CE5' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "oneminuteruleE9168CE5", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 261, + "startColumn": 4, + "endLine": 261, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/py-ec2-cloudwatch--ec2-cloudwatch.template.json": { + "filePath": "cdk/py-ec2-cloudwatch--ec2-cloudwatch.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 43, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 3, + "informational": 74, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3628", + "severity": "ERROR", + "message": "'Write a EC2 instance type' is not valid in any region", + "source": "CFN_LINT", + "entity": { + "logicalId": "WebInstanceF774E10D", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.InstanceType", + "category": "Resource", + "startLine": 758, + "startColumn": 5, + "endLine": 758, + "endColumn": 18, + "ruleDescription": "Validate EC2 instance types based on region", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'AWSb4cf1abd4e4f4bc699441af7ccd9ec37ServiceRole9FFE9C50' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "BastionHost30F9ED05", + "logicalId": "AWSb4cf1abd4e4f4bc699441af7ccd9ec371511E620", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 616, - "startColumn": 5, - "endLine": 616, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 925, + "startColumn": 4, + "endLine": 925, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "'30' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", "entity": { - "logicalId": "BastionHost30F9ED05", + "logicalId": "WebInstanceF774E10D", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.VolumeSize", "category": "Best Practice", - "startLine": 619, - "startColumn": 5, - "endLine": 619, - "endColumn": 18, + "startLine": 746, + "startColumn": 8, + "endLine": 746, + "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", "entity": { - "logicalId": "BastionHost30F9ED05", + "logicalId": "WebInstanceF774E10D", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.SecurityGroupIds", + "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.DeleteOnTermination", "category": "Best Practice", - "startLine": 620, - "startColumn": 5, - "endLine": 620, - "endColumn": 22, + "startLine": 748, + "startColumn": 8, + "endLine": 748, + "endColumn": 28, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BastionHost30F9ED05", + "logicalId": "VpcFromCDKAC02ED99", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 628, + "startLine": 6, "startColumn": 5, - "endLine": 628, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 6, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet1SubnetE7F939D2'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BastionHost30F9ED05", + "logicalId": "VpcFromCDKAC02ED99", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 637, + "startLine": 9, "startColumn": 5, - "endLine": 637, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 9, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -61681,18 +62817,18 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroupDD263621", + "logicalId": "VpcFromCDKPublicSubnet1SubnetE7F939D2", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 652, + "startLine": 24, "startColumn": 5, - "endLine": 652, + "endLine": 24, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -61703,18 +62839,18 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroupDD263621", + "logicalId": "VpcFromCDKPublicSubnet1SubnetE7F939D2", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.GroupName", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 653, + "startLine": 32, "startColumn": 5, - "endLine": 653, + "endLine": 32, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -61728,15 +62864,15 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroupDD263621", + "logicalId": "VpcFromCDKPublicSubnet1SubnetE7F939D2", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 684, + "startLine": 48, "startColumn": 5, - "endLine": 684, + "endLine": 48, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -61748,139 +62884,149 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebInstanceF774E10D", + "logicalId": "VpcFromCDKPublicSubnet1RouteTable0BDD81D8", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 734, + "startLine": 65, "startColumn": 5, - "endLine": 734, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 65, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebInstanceF774E10D", + "logicalId": "VpcFromCDKPublicSubnet1RouteTableAssociation616E7197", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.BlockDeviceMappings", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 742, + "startLine": 76, "startColumn": 5, - "endLine": 742, - "endColumn": 25, + "endLine": 76, + "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet1RouteTable0BDD81D8'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebInstanceF774E10D", + "logicalId": "VpcFromCDKPublicSubnet1RouteTableAssociation616E7197", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 755, + "startLine": 79, "startColumn": 5, - "endLine": 755, - "endColumn": 13, + "endLine": 79, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet1SubnetE7F939D2'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebInstanceF774E10D", + "logicalId": "VpcFromCDKPublicSubnet1DefaultRoute1FF73EA6", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 758, + "startLine": 90, "startColumn": 5, - "endLine": 758, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 90, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebInstanceF774E10D", + "logicalId": "VpcFromCDKPublicSubnet1DefaultRoute1FF73EA6", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.KeyName", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 759, + "startLine": 94, "startColumn": 5, - "endLine": 759, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 94, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet1RouteTable0BDD81D8'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebInstanceF774E10D", + "logicalId": "VpcFromCDKPublicSubnet1NATGateway291FE40B", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.SecurityGroupIds", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 760, + "startLine": 123, "startColumn": 5, - "endLine": 760, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 123, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt VpcFromCDKPublicSubnet1EIP637D1D3D.AllocationId" } }, { @@ -61889,17 +63035,16 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebInstanceF774E10D", + "logicalId": "VpcFromCDKPublicSubnet1NATGateway291FE40B", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::NatGateway" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 768, + "startLine": 129, "startColumn": 5, - "endLine": 768, + "endLine": 129, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -61910,42 +63055,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "WebInstanceF774E10D", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.UserData", - "category": "Best Practice", - "startLine": 777, - "startColumn": 5, - "endLine": 777, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ScheduleRuleAllowEventRuleec2cloudwatchScheduleRuleScheduleRuleTarget0Handler5EF9EBA726A6C94B", + "logicalId": "VpcFromCDKPublicSubnet2SubnetBDC76372", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 828, + "startLine": 150, "startColumn": 5, - "endLine": 828, - "endColumn": 12, + "endLine": 150, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -61955,41 +63077,18 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ScheduleRuleAllowEventRuleec2cloudwatchScheduleRuleScheduleRuleTarget0Handler5EF9EBA726A6C94B", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 829, - "startColumn": 5, - "endLine": 829, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt AWSb4cf1abd4e4f4bc699441af7ccd9ec371511E620.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ScheduleRuleAllowEventRuleec2cloudwatchScheduleRuleScheduleRuleTarget0Handler5EF9EBA726A6C94B", + "logicalId": "VpcFromCDKPublicSubnet2SubnetBDC76372", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 835, + "startLine": 158, "startColumn": 5, - "endLine": 835, + "endLine": 158, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -62000,286 +63099,195 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ScheduleRuleAllowEventRuleec2cloudwatchScheduleRuleScheduleRuleTarget0Handler5EF9EBA726A6C94B", + "logicalId": "VpcFromCDKPublicSubnet2SubnetBDC76372", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 836, + "startLine": 174, "startColumn": 5, - "endLine": 836, - "endColumn": 15, + "endLine": 174, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ScheduleRuleDA5BD877.Arn" + "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BackupVaultName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackupVault3A9C5852", + "logicalId": "VpcFromCDKPublicSubnet2RouteTableF7A722BD", "entityType": "Resource", - "resourceType": "AWS::Backup::BackupVault" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.BackupVaultName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 939, + "startLine": 191, "startColumn": 5, - "endLine": 939, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 191, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BackupPlanId' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AWSBackupPlanSelectionAF95B30F", + "logicalId": "VpcFromCDKPublicSubnet2RouteTableAssociation163F9AFA", "entityType": "Resource", - "resourceType": "AWS::Backup::BackupSelection" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.BackupPlanId", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 1011, + "startLine": 202, "startColumn": 5, - "endLine": 1011, + "endLine": 202, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt AWSBackupPlanD181A800.BackupPlanId" + "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet2RouteTableF7A722BD'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BackupSelection' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AWSBackupPlanSelectionAF95B30F", + "logicalId": "VpcFromCDKPublicSubnet2RouteTableAssociation163F9AFA", "entityType": "Resource", - "resourceType": "AWS::Backup::BackupSelection" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.BackupSelection", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 1017, + "startLine": 205, "startColumn": 5, - "endLine": 1017, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 205, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SecurityGroupDD263621' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SecurityGroupDD263621", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 651, - "startColumn": 4, - "endLine": 651, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ScheduleRuleDA5BD877' of type 'AWS::Events::Rule' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ScheduleRuleDA5BD877", - "entityType": "Resource", - "resourceType": "AWS::Events::Rule" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 790, - "startColumn": 4, - "endLine": 790, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'AWSb4cf1abd4e4f4bc699441af7ccd9ec37ServiceRole9FFE9C50' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "AWSb4cf1abd4e4f4bc699441af7ccd9ec37ServiceRole9FFE9C50", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 849, - "startColumn": 4, - "endLine": 849, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'AWSb4cf1abd4e4f4bc699441af7ccd9ec371511E620' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "AWSb4cf1abd4e4f4bc699441af7ccd9ec371511E620", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 907, - "startColumn": 4, - "endLine": 907, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet2SubnetBDC76372'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'AWSBackupPlanSelectionRole2A44F724' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AWSBackupPlanSelectionRole2A44F724", + "logicalId": "VpcFromCDKPublicSubnet2DefaultRouteC022B913", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 976, - "startColumn": 4, - "endLine": 976, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStack.template.json": { - "filePath": "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 29, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 43, - "debug": 0 + "startLine": 216, + "startColumn": 5, + "endLine": 216, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W3005", - "severity": "WARN", - "message": "'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", + "logicalId": "VpcFromCDKPublicSubnet2DefaultRouteC022B913", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 589, - "startColumn": 4, - "endLine": 589, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 220, + "startColumn": 5, + "endLine": 220, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet2RouteTableF7A722BD'" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCD8B6F71D", + "logicalId": "VpcFromCDKPublicSubnet2NATGateway3450887A", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 6, + "startLine": 249, "startColumn": 5, - "endLine": 6, - "endColumn": 15, + "endLine": 249, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt VpcFromCDKPublicSubnet2EIP09D8D9CE.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCD8B6F71D", + "logicalId": "VpcFromCDKPublicSubnet2NATGateway3450887A", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 9, + "startLine": 255, "startColumn": 5, - "endLine": 9, - "endColumn": 21, + "endLine": 255, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet2SubnetBDC76372'" } }, { @@ -62288,15 +63296,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet1Subnet2B93B79E", + "logicalId": "VpcFromCDKPrivateSubnet1SubnetE081A3F6", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 24, + "startLine": 276, "startColumn": 5, - "endLine": 24, + "endLine": 276, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -62310,15 +63318,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet1Subnet2B93B79E", + "logicalId": "VpcFromCDKPrivateSubnet1SubnetE081A3F6", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 32, + "startLine": 284, "startColumn": 5, - "endLine": 32, + "endLine": 284, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -62332,21 +63340,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet1Subnet2B93B79E", + "logicalId": "VpcFromCDKPrivateSubnet1SubnetE081A3F6", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 48, + "startLine": 300, "startColumn": 5, - "endLine": 48, + "endLine": 300, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" + "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" } }, { @@ -62355,22 +63363,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet1RouteTableC0F77754", + "logicalId": "VpcFromCDKPrivateSubnet1RouteTableB5578A45", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 65, + "startLine": 317, "startColumn": 5, - "endLine": 65, + "endLine": 317, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" + "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" } }, { @@ -62379,22 +63387,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet1RouteTableAssociation902A4A27", + "logicalId": "VpcFromCDKPrivateSubnet1RouteTableAssociation7F2E7FF7", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 76, + "startLine": 328, "startColumn": 5, - "endLine": 76, + "endLine": 328, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet1RouteTableC0F77754'", + "resolutionSource": "Ref to 'VpcFromCDKPrivateSubnet1RouteTableB5578A45'", "extra": { "replacement_strategy": "delete_then_create" } @@ -62406,22 +63414,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet1RouteTableAssociation902A4A27", + "logicalId": "VpcFromCDKPrivateSubnet1RouteTableAssociation7F2E7FF7", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 79, + "startLine": 331, "startColumn": 5, - "endLine": 79, + "endLine": 331, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet1Subnet2B93B79E'", + "resolutionSource": "Ref to 'VpcFromCDKPrivateSubnet1SubnetE081A3F6'", "extra": { "replacement_strategy": "delete_then_create" } @@ -62433,15 +63441,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet1DefaultRoute1092379D", + "logicalId": "VpcFromCDKPrivateSubnet1DefaultRoute3081953E", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 90, + "startLine": 342, "startColumn": 5, - "endLine": 90, + "endLine": 342, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62456,68 +63464,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet1DefaultRoute1092379D", + "logicalId": "VpcFromCDKPrivateSubnet1DefaultRoute3081953E", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 94, + "startLine": 346, "startColumn": 5, - "endLine": 94, + "endLine": 346, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet1RouteTableC0F77754'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet1NATGatewayBD9137E7", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.AllocationId", - "category": "Best Practice", - "startLine": 123, - "startColumn": 5, - "endLine": 123, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ServiceConnectVPCPublicSubnet1EIPB85E54D1.AllocationId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet1NATGatewayBD9137E7", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 129, - "startColumn": 5, - "endLine": 129, - "endColumn": 14, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet1Subnet2B93B79E'" + "resolutionSource": "Ref to 'VpcFromCDKPrivateSubnet1RouteTableB5578A45'" } }, { @@ -62526,15 +63488,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet2Subnet285316DC", + "logicalId": "VpcFromCDKPrivateSubnet2Subnet6D9A025D", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 150, + "startLine": 357, "startColumn": 5, - "endLine": 150, + "endLine": 357, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -62548,15 +63510,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet2Subnet285316DC", + "logicalId": "VpcFromCDKPrivateSubnet2Subnet6D9A025D", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 158, + "startLine": 365, "startColumn": 5, - "endLine": 158, + "endLine": 365, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -62570,21 +63532,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet2Subnet285316DC", + "logicalId": "VpcFromCDKPrivateSubnet2Subnet6D9A025D", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 174, + "startLine": 381, "startColumn": 5, - "endLine": 174, + "endLine": 381, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" + "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" } }, { @@ -62593,22 +63555,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet2RouteTable5A43F858", + "logicalId": "VpcFromCDKPrivateSubnet2RouteTable5CB16C6C", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 191, + "startLine": 398, "startColumn": 5, - "endLine": 191, + "endLine": 398, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" + "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" } }, { @@ -62617,22 +63579,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet2RouteTableAssociation4EB0B814", + "logicalId": "VpcFromCDKPrivateSubnet2RouteTableAssociation68ADF807", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 202, + "startLine": 409, "startColumn": 5, - "endLine": 202, + "endLine": 409, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet2RouteTable5A43F858'", + "resolutionSource": "Ref to 'VpcFromCDKPrivateSubnet2RouteTable5CB16C6C'", "extra": { "replacement_strategy": "delete_then_create" } @@ -62644,22 +63606,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet2RouteTableAssociation4EB0B814", + "logicalId": "VpcFromCDKPrivateSubnet2RouteTableAssociation68ADF807", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 205, + "startLine": 412, "startColumn": 5, - "endLine": 205, + "endLine": 412, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet2Subnet285316DC'", + "resolutionSource": "Ref to 'VpcFromCDKPrivateSubnet2Subnet6D9A025D'", "extra": { "replacement_strategy": "delete_then_create" } @@ -62671,15 +63633,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet2DefaultRoute5E2EBF45", + "logicalId": "VpcFromCDKPrivateSubnet2DefaultRoute0D482744", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 216, + "startLine": 423, "startColumn": 5, - "endLine": 216, + "endLine": 423, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62694,86 +63656,89 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet2DefaultRoute5E2EBF45", + "logicalId": "VpcFromCDKPrivateSubnet2DefaultRoute0D482744", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 220, + "startLine": 427, "startColumn": 5, - "endLine": 220, + "endLine": 427, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet2RouteTable5A43F858'" + "resolutionSource": "Ref to 'VpcFromCDKPrivateSubnet2RouteTable5CB16C6C'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet2NATGatewayCDA3DB43", + "logicalId": "VpcFromCDKVPCGW6C4E6589", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 249, + "startLine": 455, "startColumn": 5, - "endLine": 249, - "endColumn": 18, + "endLine": 455, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ServiceConnectVPCPublicSubnet2EIP04E6F20C.AllocationId" + "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'ServiceName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet2NATGatewayCDA3DB43", + "logicalId": "VpcFromCDKS3EndpointF02E5219", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::EC2::VPCEndpoint" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.ServiceName", "category": "Best Practice", - "startLine": 255, + "startLine": 474, "startColumn": 5, - "endLine": 255, - "endColumn": 14, + "endLine": 474, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet2Subnet285316DC'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcEndpointType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet1SubnetD04D043D", + "logicalId": "VpcFromCDKS3EndpointF02E5219", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::VPCEndpoint" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.VpcEndpointType", "category": "Best Practice", - "startLine": 276, + "startLine": 492, "startColumn": 5, - "endLine": 276, - "endColumn": 22, + "endLine": 492, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -62783,19 +63748,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet1SubnetD04D043D", + "logicalId": "VpcFromCDKS3EndpointF02E5219", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::VPCEndpoint" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 284, + "startLine": 493, "startColumn": 5, - "endLine": 284, - "endColumn": 15, + "endLine": 493, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "BastionHostInstanceSecurityGroupE75D4274", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 504, + "startColumn": 5, + "endLine": 504, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -62808,72 +63796,113 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet1SubnetD04D043D", + "logicalId": "BastionHostInstanceSecurityGroupE75D4274", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 300, + "startLine": 527, "startColumn": 5, - "endLine": 300, + "endLine": 527, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" + "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet1RouteTable3887499F", + "logicalId": "BastionHost30F9ED05", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 317, + "startLine": 605, "startColumn": 5, - "endLine": 317, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 605, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet1RouteTableAssociation843B9F02", + "logicalId": "BastionHost30F9ED05", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 328, + "startLine": 616, "startColumn": 5, - "endLine": 328, + "endLine": 616, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "BastionHost30F9ED05", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 619, + "startColumn": 5, + "endLine": 619, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCPrivateSubnet1RouteTable3887499F'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "BastionHost30F9ED05", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.SecurityGroupIds", + "category": "Best Practice", + "startLine": 620, + "startColumn": 5, + "endLine": 620, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" } }, { @@ -62882,44 +63911,85 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet1RouteTableAssociation843B9F02", + "logicalId": "BastionHost30F9ED05", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 331, + "startLine": 628, "startColumn": 5, - "endLine": 331, + "endLine": 628, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet1SubnetE7F939D2'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "BastionHost30F9ED05", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 637, + "startColumn": 5, + "endLine": 637, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCPrivateSubnet1SubnetD04D043D'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SecurityGroupDD263621", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 652, + "startColumn": 5, + "endLine": 652, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet1DefaultRouteCFD77CC9", + "logicalId": "SecurityGroupDD263621", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.GroupName", "category": "Best Practice", - "startLine": 342, + "startLine": 653, "startColumn": 5, - "endLine": 342, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 653, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -62929,25 +63999,24 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet1DefaultRouteCFD77CC9", + "logicalId": "SecurityGroupDD263621", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 346, + "startLine": 684, "startColumn": 5, - "endLine": 346, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 684, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCPrivateSubnet1RouteTable3887499F'" + "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" } }, { @@ -62956,16 +64025,17 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet2Subnet5FF59B97", + "logicalId": "WebInstanceF774E10D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 357, + "startLine": 734, "startColumn": 5, - "endLine": 357, + "endLine": 734, "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -62975,381 +64045,350 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet2Subnet5FF59B97", + "logicalId": "WebInstanceF774E10D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.BlockDeviceMappings", "category": "Best Practice", - "startLine": 365, + "startLine": 742, "startColumn": 5, - "endLine": 365, - "endColumn": 15, + "endLine": 742, + "endColumn": 25, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet2Subnet5FF59B97", + "logicalId": "WebInstanceF774E10D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 381, + "startLine": 755, "startColumn": 5, - "endLine": 381, - "endColumn": 11, + "endLine": 755, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet2RouteTable30EC1F5C", + "logicalId": "WebInstanceF774E10D", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 398, + "startLine": 758, "startColumn": 5, - "endLine": 398, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 758, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet2RouteTableAssociationFF89750A", + "logicalId": "WebInstanceF774E10D", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.KeyName", "category": "Best Practice", - "startLine": 409, + "startLine": 759, "startColumn": 5, - "endLine": 409, - "endColumn": 18, + "endLine": 759, + "endColumn": 13, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCPrivateSubnet2RouteTable30EC1F5C'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet2RouteTableAssociationFF89750A", + "logicalId": "WebInstanceF774E10D", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.SecurityGroupIds", "category": "Best Practice", - "startLine": 412, + "startLine": 760, "startColumn": 5, - "endLine": 412, - "endColumn": 14, + "endLine": 760, + "endColumn": 22, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCPrivateSubnet2Subnet5FF59B97'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet2DefaultRoute85237B46", + "logicalId": "WebInstanceF774E10D", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 423, + "startLine": 768, "startColumn": 5, - "endLine": 423, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 768, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet1SubnetE7F939D2'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet2DefaultRoute85237B46", + "logicalId": "WebInstanceF774E10D", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 427, + "startLine": 777, "startColumn": 5, - "endLine": 427, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 777, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCPrivateSubnet2RouteTable30EC1F5C'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCVPCGW60A84FEA", + "logicalId": "ScheduleRuleAllowEventRuleec2cloudwatchScheduleRuleScheduleRuleTarget0Handler5EF9EBA726A6C94B", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 455, + "startLine": 828, "startColumn": 5, - "endLine": 455, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "endLine": 828, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0", + "logicalId": "ScheduleRuleAllowEventRuleec2cloudwatchScheduleRuleScheduleRuleTarget0Handler5EF9EBA726A6C94B", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 490, - "startColumn": 4, - "endLine": 490, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 829, + "startColumn": 5, + "endLine": 829, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt AWSb4cf1abd4e4f4bc699441af7ccd9ec371511E620.Arn" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", + "logicalId": "ScheduleRuleAllowEventRuleec2cloudwatchScheduleRuleScheduleRuleTarget0Handler5EF9EBA726A6C94B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 562, - "startColumn": 4, - "endLine": 562, + "startLine": 835, + "startColumn": 5, + "endLine": 835, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'EcrStackNestedStackEcrStackNestedStackResource706AA777' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcrStackNestedStackEcrStackNestedStackResource706AA777", + "logicalId": "ScheduleRuleAllowEventRuleec2cloudwatchScheduleRuleScheduleRuleTarget0Handler5EF9EBA726A6C94B", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 600, - "startColumn": 4, - "endLine": 600, + "startLine": 836, + "startColumn": 5, + "endLine": 836, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt ScheduleRuleDA5BD877.Arn" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'EcsStackNestedStackEcsStackNestedStackResource48283A58' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Property 'BackupVaultName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsStackNestedStackEcsStackNestedStackResource48283A58", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 632, - "startColumn": 4, - "endLine": 632, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStackEcrStack6B6F0F99.nested.template.json": { - "filePath": "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStackEcrStack6B6F0F99.nested.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 8, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 6, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiBServiceRole8C8B0491' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiB28EAD8E4", + "logicalId": "BackupVault3A9C5852", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Backup::BackupVault" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.BackupVaultName", "category": "Best Practice", - "startLine": 163, - "startColumn": 4, - "endLine": 163, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 939, + "startColumn": 5, + "endLine": 939, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RepositoryName' is create-only; updating it will cause resource replacement", + "message": "Property 'BackupPlanId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendRepository7D714FA2", + "logicalId": "AWSBackupPlanSelectionAF95B30F", "entityType": "Resource", - "resourceType": "AWS::ECR::Repository" + "resourceType": "AWS::Backup::BackupSelection" }, - "propertyPath": "Properties.RepositoryName", + "propertyPath": "Properties.BackupPlanId", "category": "Best Practice", - "startLine": 6, + "startLine": 1011, "startColumn": 5, - "endLine": 6, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ecr.git", + "endLine": 1011, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt AWSBackupPlanD181A800.BackupPlanId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RepositoryName' is create-only; updating it will cause resource replacement", + "message": "Property 'BackupSelection' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendDataRepositoryD361813E", + "logicalId": "AWSBackupPlanSelectionAF95B30F", "entityType": "Resource", - "resourceType": "AWS::ECR::Repository" + "resourceType": "AWS::Backup::BackupSelection" }, - "propertyPath": "Properties.RepositoryName", + "propertyPath": "Properties.BackupSelection", "category": "Best Practice", - "startLine": 17, + "startLine": 1017, "startColumn": 5, - "endLine": 17, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ecr.git", + "endLine": 1017, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FrontendRepository7D714FA2' of type 'AWS::ECR::Repository' supports Tags but none are configured", + "message": "Resource 'SecurityGroupDD263621' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FrontendRepository7D714FA2", + "logicalId": "SecurityGroupDD263621", "entityType": "Resource", - "resourceType": "AWS::ECR::Repository" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 651, "startColumn": 4, - "endLine": 5, + "endLine": 651, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -63357,19 +64396,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BackendDataRepositoryD361813E' of type 'AWS::ECR::Repository' supports Tags but none are configured", + "message": "Resource 'ScheduleRuleDA5BD877' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BackendDataRepositoryD361813E", + "logicalId": "ScheduleRuleDA5BD877", "entityType": "Resource", - "resourceType": "AWS::ECR::Repository" + "resourceType": "AWS::Events::Rule" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 16, + "startLine": 790, "startColumn": 4, - "endLine": 16, + "endLine": 790, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -63377,19 +64416,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiBServiceRole8C8B0491' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'AWSb4cf1abd4e4f4bc699441af7ccd9ec37ServiceRole9FFE9C50' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiBServiceRole8C8B0491", + "logicalId": "AWSb4cf1abd4e4f4bc699441af7ccd9ec37ServiceRole9FFE9C50", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 70, + "startLine": 849, "startColumn": 4, - "endLine": 70, + "endLine": 849, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -63397,35 +64436,55 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiB28EAD8E4' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'AWSb4cf1abd4e4f4bc699441af7ccd9ec371511E620' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiB28EAD8E4", + "logicalId": "AWSb4cf1abd4e4f4bc699441af7ccd9ec371511E620", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 144, + "startLine": 907, "startColumn": 4, - "endLine": 144, + "endLine": 907, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'AWSBackupPlanSelectionRole2A44F724' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "AWSBackupPlanSelectionRole2A44F724", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 976, + "startColumn": 4, + "endLine": 976, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStackEcsStack19C526D0.nested.template.json": { - "filePath": "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStackEcsStack19C526D0.nested.template.json", + "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStack.template.json": { + "filePath": "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 20, + "resourcesScanned": 29, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 61, + "warnings": 1, + "informational": 43, "debug": 0 }, "suppressed": 0, @@ -63434,43 +64493,41 @@ }, "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "ECSCluster7D463CD4", + "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ClusterName", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 589, + "startColumn": 4, + "endLine": 589, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ECSClusterDefaultServiceDiscoveryNamespace5AC2D2BE", + "logicalId": "ServiceConnectVPCD8B6F71D", "entityType": "Resource", - "resourceType": "AWS::ServiceDiscovery::PrivateDnsNamespace" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 29, + "startLine": 6, "startColumn": 5, - "endLine": 29, - "endColumn": 10, + "endLine": 6, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -63480,66 +64537,63 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Vpc' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ECSClusterDefaultServiceDiscoveryNamespace5AC2D2BE", + "logicalId": "ServiceConnectVPCD8B6F71D", "entityType": "Resource", - "resourceType": "AWS::ServiceDiscovery::PrivateDnsNamespace" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Vpc", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 30, + "startLine": 9, "startColumn": 5, - "endLine": 30, - "endColumn": 9, + "endLine": 9, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'referencetoCdkExamplesServiceConnectStackServiceConnectVPCE46B65DFRef' (type String)" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ECSServiceLogGroupD961AA4E", + "logicalId": "ServiceConnectVPCPublicSubnet1Subnet2B93B79E", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 41, + "startLine": 24, "startColumn": 5, - "endLine": 41, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "endLine": 24, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:{ref:ECSCluster7D463CD4}-service)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ECSSecurityGroupA14DBE7D", + "logicalId": "ServiceConnectVPCPublicSubnet1Subnet2B93B79E", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 219, + "startLine": 32, "startColumn": 5, - "endLine": 219, - "endColumn": 22, + "endLine": 32, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -63552,227 +64606,232 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ECSSecurityGroupA14DBE7D", + "logicalId": "ServiceConnectVPCPublicSubnet1Subnet2B93B79E", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 238, + "startLine": 48, "startColumn": 5, - "endLine": 238, + "endLine": 48, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "parameter 'referencetoCdkExamplesServiceConnectStackServiceConnectVPCE46B65DFRef' (type String)" + "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", + "logicalId": "ServiceConnectVPCPublicSubnet1RouteTableC0F77754", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 250, + "startLine": 65, "startColumn": 5, - "endLine": 250, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 65, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", + "logicalId": "ServiceConnectVPCPublicSubnet1RouteTableAssociation902A4A27", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 251, + "startLine": 76, "startColumn": 5, - "endLine": 251, - "endColumn": 13, + "endLine": 76, + "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ECSSecurityGroupA14DBE7D.GroupId" + "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet1RouteTableC0F77754'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", + "logicalId": "ServiceConnectVPCPublicSubnet1RouteTableAssociation902A4A27", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 257, + "startLine": 79, "startColumn": 5, - "endLine": 257, - "endColumn": 16, + "endLine": 79, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet1Subnet2B93B79E'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", + "logicalId": "ServiceConnectVPCPublicSubnet1DefaultRoute1092379D", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.SourceSecurityGroupId", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 258, + "startLine": 90, "startColumn": 5, - "endLine": 258, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 90, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt PublicLBSG963B1ACE.GroupId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", + "logicalId": "ServiceConnectVPCPublicSubnet1DefaultRoute1092379D", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 264, + "startLine": 94, "startColumn": 5, - "endLine": 264, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 94, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet1RouteTableC0F77754'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendTaskDefinition6CBC2B00", + "logicalId": "ServiceConnectVPCPublicSubnet1NATGatewayBD9137E7", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 273, + "startLine": 123, "startColumn": 5, - "endLine": 273, - "endColumn": 26, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 123, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt ServiceConnectVPCPublicSubnet1EIPB85E54D1.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendTaskDefinition6CBC2B00", + "logicalId": "ServiceConnectVPCPublicSubnet1NATGatewayBD9137E7", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 302, + "startLine": 129, "startColumn": 5, - "endLine": 302, - "endColumn": 9, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 129, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet1Subnet2B93B79E'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendTaskDefinition6CBC2B00", + "logicalId": "ServiceConnectVPCPublicSubnet2Subnet285316DC", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ExecutionRoleArn", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 303, + "startLine": 150, "startColumn": 5, - "endLine": 303, + "endLine": 150, "endColumn": 22, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ECSTaskIamRole84EB0A02.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendTaskDefinition6CBC2B00", + "logicalId": "ServiceConnectVPCPublicSubnet2Subnet285316DC", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 309, + "startLine": 158, "startColumn": 5, - "endLine": 309, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 158, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -63782,113 +64841,121 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendTaskDefinition6CBC2B00", + "logicalId": "ServiceConnectVPCPublicSubnet2Subnet285316DC", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 310, + "startLine": 174, "startColumn": 5, - "endLine": 310, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 174, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendTaskDefinition6CBC2B00", + "logicalId": "ServiceConnectVPCPublicSubnet2RouteTable5A43F858", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 311, + "startLine": 191, "startColumn": 5, - "endLine": 311, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 191, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendTaskDefinition6CBC2B00", + "logicalId": "ServiceConnectVPCPublicSubnet2RouteTableAssociation4EB0B814", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 312, + "startLine": 202, "startColumn": 5, - "endLine": 312, - "endColumn": 29, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 202, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet2RouteTable5A43F858'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendTaskDefinition6CBC2B00", + "logicalId": "ServiceConnectVPCPublicSubnet2RouteTableAssociation4EB0B814", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.TaskRoleArn", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 315, + "startLine": 205, "startColumn": 5, - "endLine": 315, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 205, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt TaskexecutionRole978012CD.Arn" + "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet2Subnet285316DC'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendTaskDefinitionEC224DE6", + "logicalId": "ServiceConnectVPCPublicSubnet2DefaultRoute5E2EBF45", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 337, + "startLine": 216, "startColumn": 5, - "endLine": 337, + "endLine": 216, "endColumn": 26, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -63898,90 +64965,89 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendTaskDefinitionEC224DE6", + "logicalId": "ServiceConnectVPCPublicSubnet2DefaultRoute5E2EBF45", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 366, + "startLine": 220, "startColumn": 5, - "endLine": 366, - "endColumn": 9, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 220, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet2RouteTable5A43F858'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendTaskDefinitionEC224DE6", + "logicalId": "ServiceConnectVPCPublicSubnet2NATGatewayCDA3DB43", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.ExecutionRoleArn", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 367, + "startLine": 249, "startColumn": 5, - "endLine": 367, - "endColumn": 22, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 249, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ECSTaskIamRole84EB0A02.Arn" + "resolutionSource": "GetAtt ServiceConnectVPCPublicSubnet2EIP04E6F20C.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendTaskDefinitionEC224DE6", + "logicalId": "ServiceConnectVPCPublicSubnet2NATGatewayCDA3DB43", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 373, + "startLine": 255, "startColumn": 5, - "endLine": 373, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 255, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet2Subnet285316DC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendTaskDefinitionEC224DE6", + "logicalId": "ServiceConnectVPCPrivateSubnet1SubnetD04D043D", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 374, + "startLine": 276, "startColumn": 5, - "endLine": 374, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 276, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -63991,20 +65057,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendTaskDefinitionEC224DE6", + "logicalId": "ServiceConnectVPCPrivateSubnet1SubnetD04D043D", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 375, + "startLine": 284, "startColumn": 5, - "endLine": 375, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 284, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -64014,111 +65079,121 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendTaskDefinitionEC224DE6", + "logicalId": "ServiceConnectVPCPrivateSubnet1SubnetD04D043D", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 376, + "startLine": 300, "startColumn": 5, - "endLine": 376, - "endColumn": 29, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 300, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendTaskDefinitionEC224DE6", + "logicalId": "ServiceConnectVPCPrivateSubnet1RouteTable3887499F", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.TaskRoleArn", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 379, + "startLine": 317, "startColumn": 5, - "endLine": 379, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 317, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt TaskexecutionRole978012CD.Arn" + "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendServiceBC94BA93", + "logicalId": "ServiceConnectVPCPrivateSubnet1RouteTableAssociation843B9F02", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Cluster", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 401, + "startLine": 328, "startColumn": 5, - "endLine": 401, - "endColumn": 13, + "endLine": 328, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ECSCluster7D463CD4'" + "resolutionSource": "Ref to 'ServiceConnectVPCPrivateSubnet1RouteTable3887499F'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendServiceBC94BA93", + "logicalId": "ServiceConnectVPCPrivateSubnet1RouteTableAssociation843B9F02", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.LaunchType", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 411, + "startLine": 331, "startColumn": 5, - "endLine": 411, - "endColumn": 16, + "endLine": 331, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCPrivateSubnet1SubnetD04D043D'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ServiceName' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendServiceBC94BA93", + "logicalId": "ServiceConnectVPCPrivateSubnet1DefaultRouteCFD77CC9", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.ServiceName", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 456, + "startLine": 342, "startColumn": 5, - "endLine": 456, - "endColumn": 17, + "endLine": 342, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -64128,64 +65203,65 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendService7A4224EE", + "logicalId": "ServiceConnectVPCPrivateSubnet1DefaultRouteCFD77CC9", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Cluster", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 473, + "startLine": 346, "startColumn": 5, - "endLine": 473, - "endColumn": 13, + "endLine": 346, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ECSCluster7D463CD4'" + "resolutionSource": "Ref to 'ServiceConnectVPCPrivateSubnet1RouteTable3887499F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendService7A4224EE", + "logicalId": "ServiceConnectVPCPrivateSubnet2Subnet5FF59B97", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.LaunchType", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 482, + "startLine": 357, "startColumn": 5, - "endLine": 482, - "endColumn": 16, + "endLine": 357, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ServiceName' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendService7A4224EE", + "logicalId": "ServiceConnectVPCPrivateSubnet2Subnet5FF59B97", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ServiceName", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 518, + "startLine": 365, "startColumn": 5, - "endLine": 518, - "endColumn": 17, + "endLine": 365, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -64195,23 +65271,24 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublicLBSG963B1ACE", + "logicalId": "ServiceConnectVPCPrivateSubnet2Subnet5FF59B97", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 533, + "startLine": 381, "startColumn": 5, - "endLine": 533, - "endColumn": 22, + "endLine": 381, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" } }, { @@ -64220,83 +65297,95 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublicLBSG963B1ACE", + "logicalId": "ServiceConnectVPCPrivateSubnet2RouteTable30EC1F5C", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 550, + "startLine": 398, "startColumn": 5, - "endLine": 550, + "endLine": 398, "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "parameter 'referencetoCdkExamplesServiceConnectStackServiceConnectVPCE46B65DFRef' (type String)" + "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup3D7CD9B8", + "logicalId": "ServiceConnectVPCPrivateSubnet2RouteTableAssociationFF89750A", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 566, + "startLine": 409, "startColumn": 5, - "endLine": 566, - "endColumn": 10, + "endLine": 409, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCPrivateSubnet2RouteTable30EC1F5C'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup3D7CD9B8", + "logicalId": "ServiceConnectVPCPrivateSubnet2RouteTableAssociationFF89750A", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 567, + "startLine": 412, "startColumn": 5, - "endLine": 567, - "endColumn": 10, + "endLine": 412, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCPrivateSubnet2Subnet5FF59B97'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup3D7CD9B8", + "logicalId": "ServiceConnectVPCPrivateSubnet2DefaultRoute85237B46", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 568, + "startLine": 423, "startColumn": 5, - "endLine": 568, - "endColumn": 14, + "endLine": 423, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -64306,23 +65395,25 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup3D7CD9B8", + "logicalId": "ServiceConnectVPCPrivateSubnet2DefaultRoute85237B46", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.TargetType", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 579, + "startLine": 427, "startColumn": 5, - "endLine": 579, - "endColumn": 16, + "endLine": 427, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCPrivateSubnet2RouteTable30EC1F5C'" } }, { @@ -64331,126 +65422,201 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup3D7CD9B8", + "logicalId": "ServiceConnectVPCVPCGW60A84FEA", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 581, + "startLine": 455, "startColumn": 5, - "endLine": 581, + "endLine": 455, "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "parameter 'referencetoCdkExamplesServiceConnectStackServiceConnectVPCE46B65DFRef' (type String)" + "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", + "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FrontendLB2FA80AC2", + "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Scheme", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 602, - "startColumn": 5, - "endLine": 602, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 490, + "startColumn": 4, + "endLine": 490, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FrontendLB2FA80AC2", + "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 619, - "startColumn": 5, - "endLine": 619, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 562, + "startColumn": 4, + "endLine": 562, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'EcrStackNestedStackEcrStackNestedStackResource706AA777' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "EcrStackNestedStackEcrStackNestedStackResource706AA777", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 600, + "startColumn": 4, + "endLine": 600, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'EcsStackNestedStackEcsStackNestedStackResource48283A58' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "EcsStackNestedStackEcsStackNestedStackResource48283A58", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 632, + "startColumn": 4, + "endLine": 632, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStackEcrStack6B6F0F99.nested.template.json": { + "filePath": "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStackEcrStack6B6F0F99.nested.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 8, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 6, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiBServiceRole8C8B0491' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiB28EAD8E4", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 163, + "startColumn": 4, + "endLine": 163, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", + "message": "Property 'RepositoryName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendLBListener230479D8", + "logicalId": "FrontendRepository7D714FA2", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::ECR::Repository" }, - "propertyPath": "Properties.LoadBalancerArn", + "propertyPath": "Properties.RepositoryName", "category": "Best Practice", - "startLine": 636, + "startLine": 6, "startColumn": 5, - "endLine": 636, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", + "endLine": 6, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ecr.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'FrontendLB2FA80AC2'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ListenerArn' is create-only; updating it will cause resource replacement", + "message": "Property 'RepositoryName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ListenerRule73F9AC5E", + "logicalId": "BackendDataRepositoryD361813E", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::ListenerRule" + "resourceType": "AWS::ECR::Repository" }, - "propertyPath": "Properties.ListenerArn", + "propertyPath": "Properties.RepositoryName", "category": "Best Practice", - "startLine": 667, + "startLine": 17, "startColumn": 5, - "endLine": 667, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2", + "endLine": 17, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ecr.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'FrontendLBListener230479D8'" + "lifecycle": "create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ECSCluster7D463CD4' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Resource 'FrontendRepository7D714FA2' of type 'AWS::ECR::Repository' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ECSCluster7D463CD4", + "logicalId": "FrontendRepository7D714FA2", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::ECR::Repository" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -64465,19 +65631,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ECSClusterDefaultServiceDiscoveryNamespace5AC2D2BE' of type 'AWS::ServiceDiscovery::PrivateDnsNamespace' supports Tags but none are configured", + "message": "Resource 'BackendDataRepositoryD361813E' of type 'AWS::ECR::Repository' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ECSClusterDefaultServiceDiscoveryNamespace5AC2D2BE", + "logicalId": "BackendDataRepositoryD361813E", "entityType": "Resource", - "resourceType": "AWS::ServiceDiscovery::PrivateDnsNamespace" + "resourceType": "AWS::ECR::Repository" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 28, + "startLine": 16, "startColumn": 4, - "endLine": 28, + "endLine": 16, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -64485,19 +65651,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ECSServiceLogGroupD961AA4E' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Resource 'CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiBServiceRole8C8B0491' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ECSServiceLogGroupD961AA4E", + "logicalId": "CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiBServiceRole8C8B0491", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 40, + "startLine": 70, "startColumn": 4, - "endLine": 40, + "endLine": 70, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -64505,398 +65671,591 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ECSTaskIamRole84EB0A02' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiB28EAD8E4' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ECSTaskIamRole84EB0A02", + "logicalId": "CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiB28EAD8E4", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 62, + "startLine": 144, "startColumn": 4, - "endLine": 62, + "endLine": 144, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStackEcsStack19C526D0.nested.template.json": { + "filePath": "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStackEcsStack19C526D0.nested.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 20, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 61, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TaskexecutionRole978012CD' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskexecutionRole978012CD", + "logicalId": "ECSCluster7D463CD4", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::Cluster" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ClusterName", "category": "Best Practice", - "startLine": 172, - "startColumn": 4, - "endLine": 172, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ECSClusterDefaultServiceDiscoveryNamespace5AC2D2BE", + "entityType": "Resource", + "resourceType": "AWS::ServiceDiscovery::PrivateDnsNamespace" + }, + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 10, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Vpc' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ECSClusterDefaultServiceDiscoveryNamespace5AC2D2BE", + "entityType": "Resource", + "resourceType": "AWS::ServiceDiscovery::PrivateDnsNamespace" + }, + "propertyPath": "Properties.Vpc", + "category": "Best Practice", + "startLine": 30, + "startColumn": 5, + "endLine": 30, + "endColumn": 9, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'referencetoCdkExamplesServiceConnectStackServiceConnectVPCE46B65DFRef' (type String)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ECSServiceLogGroupD961AA4E", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "propertyPath": "Properties.LogGroupName", + "category": "Best Practice", + "startLine": 41, + "startColumn": 5, + "endLine": 41, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:{ref:ECSCluster7D463CD4}-service)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ECSSecurityGroupA14DBE7D", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 219, + "startColumn": 5, + "endLine": 219, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ECSSecurityGroupA14DBE7D", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 238, + "startColumn": 5, + "endLine": 238, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'referencetoCdkExamplesServiceConnectStackServiceConnectVPCE46B65DFRef' (type String)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupIngress" + }, + "propertyPath": "Properties.FromPort", + "category": "Best Practice", + "startLine": 250, + "startColumn": 5, + "endLine": 250, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ECSSecurityGroupA14DBE7D' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ECSSecurityGroupA14DBE7D", + "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 218, - "startColumn": 4, - "endLine": 218, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 251, + "startColumn": 5, + "endLine": 251, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt ECSSecurityGroupA14DBE7D.GroupId" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FrontendTaskDefinition6CBC2B00' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendTaskDefinition6CBC2B00", + "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 272, - "startColumn": 4, - "endLine": 272, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 257, + "startColumn": 5, + "endLine": 257, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FrontendTaskDefinitionFrontendContainerLogGroup994ED50C' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendTaskDefinitionFrontendContainerLogGroup994ED50C", + "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SourceSecurityGroupId", "category": "Best Practice", - "startLine": 326, - "startColumn": 3, - "endLine": 326, - "endColumn": 59, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 258, + "startColumn": 5, + "endLine": 258, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt PublicLBSG963B1ACE.GroupId" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BackendTaskDefinitionEC224DE6' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendTaskDefinitionEC224DE6", + "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 336, - "startColumn": 4, - "endLine": 336, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 264, + "startColumn": 5, + "endLine": 264, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BackendTaskDefinitionBackendContainerLogGroup5E30F6E8' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendTaskDefinitionBackendContainerLogGroup5E30F6E8", + "logicalId": "FrontendTaskDefinition6CBC2B00", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 390, - "startColumn": 3, - "endLine": 390, - "endColumn": 57, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 273, + "startColumn": 5, + "endLine": 273, + "endColumn": 26, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FrontendServiceBC94BA93' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendServiceBC94BA93", + "logicalId": "FrontendTaskDefinition6CBC2B00", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 400, - "startColumn": 4, - "endLine": 400, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 302, + "startColumn": 5, + "endLine": 302, + "endColumn": 9, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BackendService7A4224EE' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendService7A4224EE", + "logicalId": "FrontendTaskDefinition6CBC2B00", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ExecutionRoleArn", "category": "Best Practice", - "startLine": 472, - "startColumn": 4, - "endLine": 472, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 303, + "startColumn": 5, + "endLine": 303, + "endColumn": 22, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt ECSTaskIamRole84EB0A02.Arn" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'PublicLBSG963B1ACE' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublicLBSG963B1ACE", + "logicalId": "FrontendTaskDefinition6CBC2B00", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 532, - "startColumn": 4, - "endLine": 532, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 309, + "startColumn": 5, + "endLine": 309, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TargetGroup3D7CD9B8' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup3D7CD9B8", + "logicalId": "FrontendTaskDefinition6CBC2B00", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 560, - "startColumn": 4, - "endLine": 560, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 310, + "startColumn": 5, + "endLine": 310, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FrontendLB2FA80AC2' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendLB2FA80AC2", + "logicalId": "FrontendTaskDefinition6CBC2B00", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 591, - "startColumn": 4, - "endLine": 591, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 311, + "startColumn": 5, + "endLine": 311, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FrontendLBListener230479D8' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendLBListener230479D8", + "logicalId": "FrontendTaskDefinition6CBC2B00", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 627, - "startColumn": 4, - "endLine": 627, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 312, + "startColumn": 5, + "endLine": 312, + "endColumn": 29, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ListenerRule73F9AC5E' of type 'AWS::ElasticLoadBalancingV2::ListenerRule' supports Tags but none are configured", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ListenerRule73F9AC5E", + "logicalId": "FrontendTaskDefinition6CBC2B00", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::ListenerRule" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 648, - "startColumn": 4, - "endLine": 648, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/py-emr--emr-cluster.template.json": { - "filePath": "cdk/py-emr--emr-cluster.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 16, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 33, - "debug": 0 + "startLine": 315, + "startColumn": 5, + "endLine": 315, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt TaskexecutionRole978012CD.Arn" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "emrcluster", + "logicalId": "BackendTaskDefinitionEC224DE6", "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" + "resourceType": "AWS::ECS::TaskDefinition" }, + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 314, - "startColumn": 3, - "endLine": 314, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 337, + "startColumn": 5, + "endLine": 337, + "endColumn": 26, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "emrcluster", + "logicalId": "BackendTaskDefinitionEC224DE6", "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" + "resourceType": "AWS::ECS::TaskDefinition" }, + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 314, - "startColumn": 3, - "endLine": 314, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 366, + "startColumn": 5, + "endLine": 366, + "endColumn": 9, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcA2121C38", + "logicalId": "BackendTaskDefinitionEC224DE6", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.ExecutionRoleArn", "category": "Best Practice", - "startLine": 6, + "startLine": 367, "startColumn": 5, - "endLine": 6, - "endColumn": 15, + "endLine": 367, + "endColumn": 22, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt ECSTaskIamRole84EB0A02.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcA2121C38", + "logicalId": "BackendTaskDefinitionEC224DE6", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 9, + "startLine": 373, "startColumn": 5, - "endLine": 9, - "endColumn": 21, + "endLine": 373, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet1SubnetA635257E", + "logicalId": "BackendTaskDefinitionEC224DE6", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 24, + "startLine": 374, "startColumn": 5, - "endLine": 24, - "endColumn": 22, + "endLine": 374, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -64906,19 +66265,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet1SubnetA635257E", + "logicalId": "BackendTaskDefinitionEC224DE6", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 32, + "startLine": 375, "startColumn": 5, - "endLine": 32, - "endColumn": 15, + "endLine": 375, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -64928,121 +66288,111 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet1SubnetA635257E", + "logicalId": "BackendTaskDefinitionEC224DE6", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 48, + "startLine": 376, "startColumn": 5, - "endLine": 48, - "endColumn": 11, + "endLine": 376, + "endColumn": 29, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcA2121C38'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet1RouteTableA38152FE", + "logicalId": "BackendTaskDefinitionEC224DE6", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 65, + "startLine": 379, "startColumn": 5, - "endLine": 65, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 379, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcA2121C38'" + "resolutionSource": "GetAtt TaskexecutionRole978012CD.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet1RouteTableAssociationB46101B8", + "logicalId": "FrontendServiceBC94BA93", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 76, + "startLine": 401, "startColumn": 5, - "endLine": 76, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 401, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcpublicSubnet1RouteTableA38152FE'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "Ref to 'ECSCluster7D463CD4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet1RouteTableAssociationB46101B8", + "logicalId": "FrontendServiceBC94BA93", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 79, + "startLine": 411, "startColumn": 5, - "endLine": 79, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 411, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcpublicSubnet1SubnetA635257E'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ServiceName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet1DefaultRouteF0973989", + "logicalId": "FrontendServiceBC94BA93", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.ServiceName", "category": "Best Practice", - "startLine": 90, + "startLine": 456, "startColumn": 5, - "endLine": 90, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 456, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -65052,65 +66402,64 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet1DefaultRouteF0973989", + "logicalId": "BackendService7A4224EE", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 94, + "startLine": 473, "startColumn": 5, - "endLine": 94, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 473, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcpublicSubnet1RouteTableA38152FE'" + "resolutionSource": "Ref to 'ECSCluster7D463CD4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet2Subnet027D165B", + "logicalId": "BackendService7A4224EE", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 108, + "startLine": 482, "startColumn": 5, - "endLine": 108, - "endColumn": 22, + "endLine": 482, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ServiceName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet2Subnet027D165B", + "logicalId": "BackendService7A4224EE", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.ServiceName", "category": "Best Practice", - "startLine": 116, + "startLine": 518, "startColumn": 5, - "endLine": 116, - "endColumn": 15, + "endLine": 518, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -65120,24 +66469,23 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet2Subnet027D165B", + "logicalId": "PublicLBSG963B1ACE", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 132, + "startLine": 533, "startColumn": 5, - "endLine": 132, - "endColumn": 11, + "endLine": 533, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcA2121C38'" + "lifecycle": "create-only" } }, { @@ -65146,95 +66494,83 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet2RouteTableA6135437", + "logicalId": "PublicLBSG963B1ACE", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 149, + "startLine": 550, "startColumn": 5, - "endLine": 149, + "endLine": 550, "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcA2121C38'" + "resolutionSource": "parameter 'referencetoCdkExamplesServiceConnectStackServiceConnectVPCE46B65DFRef' (type String)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet2RouteTableAssociation73F6478A", + "logicalId": "TargetGroup3D7CD9B8", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 160, + "startLine": 566, "startColumn": 5, - "endLine": 160, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 566, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcpublicSubnet2RouteTableA6135437'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet2RouteTableAssociation73F6478A", + "logicalId": "TargetGroup3D7CD9B8", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 163, + "startLine": 567, "startColumn": 5, - "endLine": 163, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 567, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcpublicSubnet2Subnet027D165B'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet2DefaultRoute13685A07", + "logicalId": "TargetGroup3D7CD9B8", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 174, + "startLine": 568, "startColumn": 5, - "endLine": 174, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 568, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -65244,25 +66580,23 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet2DefaultRoute13685A07", + "logicalId": "TargetGroup3D7CD9B8", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.TargetType", "category": "Best Practice", - "startLine": 178, + "startLine": 579, "startColumn": 5, - "endLine": 178, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 579, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcpublicSubnet2RouteTableA6135437'" + "lifecycle": "create-only" } }, { @@ -65271,43 +66605,40 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcVPCGW7984C166", + "logicalId": "TargetGroup3D7CD9B8", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 209, + "startLine": 581, "startColumn": 5, - "endLine": 209, + "endLine": 581, "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcA2121C38'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "parameter 'referencetoCdkExamplesServiceConnectStackServiceConnectVPCE46B65DFRef' (type String)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceProfileName' is create-only; updating it will cause resource replacement", + "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "emrjobflowprofile", + "logicalId": "FrontendLB2FA80AC2", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.InstanceProfileName", + "propertyPath": "Properties.Scheme", "category": "Best Practice", - "startLine": 303, + "startLine": 602, "startColumn": 5, - "endLine": 303, - "endColumn": 25, + "endLine": 602, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -65317,19 +66648,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Applications' is create-only; updating it will cause resource replacement", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "emrcluster", + "logicalId": "FrontendLB2FA80AC2", "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.Applications", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 317, + "startLine": 619, "startColumn": 5, - "endLine": 317, - "endColumn": 18, + "endLine": 619, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -65339,174 +66671,267 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Configurations' is create-only; updating it will cause resource replacement", + "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "emrcluster", + "logicalId": "FrontendLBListener230479D8", "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "Properties.Configurations", + "propertyPath": "Properties.LoadBalancerArn", "category": "Best Practice", - "startLine": 322, + "startLine": 636, "startColumn": 5, - "endLine": 322, - "endColumn": 20, + "endLine": 636, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'FrontendLB2FA80AC2'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'JobFlowRole' is create-only; updating it will cause resource replacement", + "message": "Property 'ListenerArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "emrcluster", + "logicalId": "ListenerRule73F9AC5E", "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" + "resourceType": "AWS::ElasticLoadBalancingV2::ListenerRule" }, - "propertyPath": "Properties.JobFlowRole", + "propertyPath": "Properties.ListenerArn", "category": "Best Practice", - "startLine": 365, + "startLine": 667, "startColumn": 5, - "endLine": 365, + "endLine": 667, "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'FrontendLBListener230479D8'" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'LogUri' is create-only; updating it will cause resource replacement", + "message": "Resource 'ECSCluster7D463CD4' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "emrcluster", + "logicalId": "ECSCluster7D463CD4", "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" + "resourceType": "AWS::ECS::Cluster" }, - "propertyPath": "Properties.LogUri", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 366, - "startColumn": 5, - "endLine": 366, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Resource 'ECSClusterDefaultServiceDiscoveryNamespace5AC2D2BE' of type 'AWS::ServiceDiscovery::PrivateDnsNamespace' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "emrcluster", + "logicalId": "ECSClusterDefaultServiceDiscoveryNamespace5AC2D2BE", "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" + "resourceType": "AWS::ServiceDiscovery::PrivateDnsNamespace" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 378, - "startColumn": 5, - "endLine": 378, - "endColumn": 10, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 28, + "startColumn": 4, + "endLine": 28, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ReleaseLabel' is create-only; updating it will cause resource replacement", + "message": "Resource 'ECSServiceLogGroupD961AA4E' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "emrcluster", + "logicalId": "ECSServiceLogGroupD961AA4E", "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.ReleaseLabel", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 379, - "startColumn": 5, - "endLine": 379, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 40, + "startColumn": 4, + "endLine": 40, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ServiceRole' is create-only; updating it will cause resource replacement", + "message": "Resource 'ECSTaskIamRole84EB0A02' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "emrcluster", + "logicalId": "ECSTaskIamRole84EB0A02", "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.ServiceRole", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 380, - "startColumn": 5, - "endLine": 380, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'emrservicerole3BE5EDAF'" - } + "startLine": 62, + "startColumn": 4, + "endLine": 62, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Steps' is create-only; updating it will cause resource replacement", + "message": "Resource 'TaskexecutionRole978012CD' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "emrcluster", + "logicalId": "TaskexecutionRole978012CD", "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Steps", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 383, - "startColumn": 5, - "endLine": 383, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 172, + "startColumn": 4, + "endLine": 172, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ECSSecurityGroupA14DBE7D' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ECSSecurityGroupA14DBE7D", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 218, + "startColumn": 4, + "endLine": 218, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FrontendTaskDefinition6CBC2B00' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FrontendTaskDefinition6CBC2B00", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 272, + "startColumn": 4, + "endLine": 272, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FrontendTaskDefinitionFrontendContainerLogGroup994ED50C' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FrontendTaskDefinitionFrontendContainerLogGroup994ED50C", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 326, + "startColumn": 3, + "endLine": 326, + "endColumn": 59, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BackendTaskDefinitionEC224DE6' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "BackendTaskDefinitionEC224DE6", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 336, + "startColumn": 4, + "endLine": 336, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BackendTaskDefinitionBackendContainerLogGroup5E30F6E8' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "BackendTaskDefinitionBackendContainerLogGroup5E30F6E8", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 390, + "startColumn": 3, + "endLine": 390, + "endColumn": 57, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'emrservicerole3BE5EDAF' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'FrontendServiceBC94BA93' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "emrservicerole3BE5EDAF", + "logicalId": "FrontendServiceBC94BA93", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 219, + "startLine": 400, "startColumn": 4, - "endLine": 219, + "endLine": 400, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -65514,19 +66939,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'emrjobflowrole15D4DAE5' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'BackendService7A4224EE' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "emrjobflowrole15D4DAE5", + "logicalId": "BackendService7A4224EE", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 268, + "startLine": 472, "startColumn": 4, - "endLine": 268, + "endLine": 472, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -65534,163 +66959,137 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'emrcluster' of type 'AWS::EMR::Cluster' supports Tags but none are configured", + "message": "Resource 'PublicLBSG963B1ACE' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "emrcluster", + "logicalId": "PublicLBSG963B1ACE", "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 316, + "startLine": 532, "startColumn": 4, - "endLine": 316, + "endLine": 532, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "cdk/py-iotcore--CdkIotThingStack.template.json": { - "filePath": "cdk/py-iotcore--CdkIotThingStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 19, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 5, - "informational": 22, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 189, - "startColumn": 5, - "endLine": 189, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" - } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TargetGroup3D7CD9B8' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "IoTCertProviderframeworkonEvent8FF1476F", + "logicalId": "TargetGroup3D7CD9B8", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 321, - "startColumn": 5, - "endLine": 321, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 560, + "startColumn": 4, + "endLine": 560, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'CdkThing001LambdaRoleD7EE5CD3' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FrontendLB2FA80AC2' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "CertHandler220363A9", + "logicalId": "FrontendLB2FA80AC2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 87, + "startLine": 591, "startColumn": 4, - "endLine": 87, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 591, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FrontendLBListener230479D8' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "logicalId": "FrontendLBListener230479D8", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 204, + "startLine": 627, "startColumn": 4, - "endLine": 204, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 627, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'IoTCertProviderframeworkonEventServiceRole80DDBEA7' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ListenerRule73F9AC5E' of type 'AWS::ElasticLoadBalancingV2::ListenerRule' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "IoTCertProviderframeworkonEvent8FF1476F", + "logicalId": "ListenerRule73F9AC5E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::ListenerRule" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 324, + "startLine": 648, "startColumn": 4, - "endLine": 324, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 648, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "cdk/py-emr--emr-cluster.template.json": { + "filePath": "cdk/py-emr--emr-cluster.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 16, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 33, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "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": "CfnLogGroup", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::EMR::Cluster" }, "category": "Best Practice", - "startLine": 516, + "startLine": 314, "startColumn": 3, - "endLine": 516, - "endColumn": 15, + "endLine": 314, + "endColumn": 14, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -65700,29 +67099,29 @@ "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": "CfnLogGroup", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::EMR::Cluster" }, "category": "Best Practice", - "startLine": 516, + "startLine": 314, "startColumn": 3, - "endLine": 516, - "endColumn": 15, + "endLine": 314, + "endColumn": 14, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ThingName' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyCdkThing", + "logicalId": "vpcA2121C38", "entityType": "Resource", - "resourceType": "AWS::IoT::Thing" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.ThingName", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", "startLine": 6, "startColumn": 5, @@ -65737,64 +67136,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CertHandler220363A9", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 76, - "startColumn": 5, - "endLine": 76, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "IoTCertCustomResource", + "logicalId": "vpcA2121C38", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::CustomResource" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.ServiceToken", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 338, + "startLine": 9, "startColumn": 5, - "endLine": 338, - "endColumn": 18, + "endLine": 9, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt IoTCertProviderframeworkonEvent8FF1476F.Arn" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CfnPolicy", + "logicalId": "vpcpublicSubnet1SubnetA635257E", "entityType": "Resource", - "resourceType": "AWS::IoT::Policy" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.PolicyName", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 407, + "startLine": 24, "startColumn": 5, - "endLine": 407, - "endColumn": 16, + "endLine": 24, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -65804,20 +67180,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CdkThing001PolicyPrincipalAttachment", + "logicalId": "vpcpublicSubnet1SubnetA635257E", "entityType": "Resource", - "resourceType": "AWS::IoT::PolicyPrincipalAttachment" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.PolicyName", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 416, + "startLine": 32, "startColumn": 5, - "endLine": 416, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 32, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -65827,562 +67202,430 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CdkThing001PolicyPrincipalAttachment", + "logicalId": "vpcpublicSubnet1SubnetA635257E", "entityType": "Resource", - "resourceType": "AWS::IoT::PolicyPrincipalAttachment" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 417, + "startLine": 48, "startColumn": 5, - "endLine": 417, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 48, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:iot:us-east-1:123456789012:cert/{ref:IoTCertCustomResource})" + "resolutionSource": "Ref to 'vpcA2121C38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CdkThing001ThingPrincipalAttachment", + "logicalId": "vpcpublicSubnet1RouteTableA38152FE", "entityType": "Resource", - "resourceType": "AWS::IoT::ThingPrincipalAttachment" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 447, + "startLine": 65, "startColumn": 5, - "endLine": 447, - "endColumn": 15, + "endLine": 65, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:iot:us-east-1:123456789012:cert/{ref:IoTCertCustomResource})" + "resolutionSource": "Ref to 'vpcA2121C38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ThingName' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CdkThing001ThingPrincipalAttachment", + "logicalId": "vpcpublicSubnet1RouteTableAssociationB46101B8", "entityType": "Resource", - "resourceType": "AWS::IoT::ThingPrincipalAttachment" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.ThingName", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 469, + "startLine": 76, "startColumn": 5, - "endLine": 469, - "endColumn": 15, + "endLine": 76, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'vpcpublicSubnet1RouteTableA38152FE'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CfnRole", + "logicalId": "vpcpublicSubnet1RouteTableAssociationB46101B8", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 510, + "startLine": 79, "startColumn": 5, - "endLine": 510, + "endLine": 79, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'vpcpublicSubnet1SubnetA635257E'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CfnLogGroup", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "propertyPath": "Properties.LogGroupName", - "category": "Best Practice", - "startLine": 519, - "startColumn": 5, - "endLine": 519, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CdkThing001LambdaRoleD7EE5CD3' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CdkThing001LambdaRoleD7EE5CD3", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 14, - "startColumn": 4, - "endLine": 14, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CertHandler220363A9' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CertHandler220363A9", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 69, - "startColumn": 4, - "endLine": 69, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 126, - "startColumn": 4, - "endLine": 126, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 187, - "startColumn": 4, - "endLine": 187, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'IoTCertProviderframeworkonEventServiceRole80DDBEA7' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "IoTCertProviderframeworkonEventServiceRole80DDBEA7", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 217, - "startColumn": 4, - "endLine": 217, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'IoTCertProviderframeworkonEvent8FF1476F' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "IoTCertProviderframeworkonEvent8FF1476F", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 296, - "startColumn": 4, - "endLine": 296, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CfnPolicy' of type 'AWS::IoT::Policy' supports Tags but none are configured", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CfnPolicy", + "logicalId": "vpcpublicSubnet1DefaultRouteF0973989", "entityType": "Resource", - "resourceType": "AWS::IoT::Policy" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 353, - "startColumn": 4, - "endLine": 353, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 90, + "startColumn": 5, + "endLine": 90, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CfnRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CfnRole", + "logicalId": "vpcpublicSubnet1DefaultRouteF0973989", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 477, - "startColumn": 4, - "endLine": 477, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 94, + "startColumn": 5, + "endLine": 94, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'vpcpublicSubnet1RouteTableA38152FE'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CfnLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CfnLogGroup", + "logicalId": "vpcpublicSubnet2Subnet027D165B", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 518, - "startColumn": 4, - "endLine": 518, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 108, + "startColumn": 5, + "endLine": 108, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CdkIoTCoreRule' of type 'AWS::IoT::TopicRule' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CdkIoTCoreRule", + "logicalId": "vpcpublicSubnet2Subnet027D165B", "entityType": "Resource", - "resourceType": "AWS::IoT::TopicRule" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 528, - "startColumn": 4, - "endLine": 528, + "startLine": 116, + "startColumn": 5, + "endLine": 116, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/py-lambda-cron--LambdaCronExample.template.json": { - "filePath": "cdk/py-lambda-cron--LambdaCronExample.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 7, - "debug": 0 + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W3005", - "severity": "WARN", - "message": "'SingletonServiceRoleDDD815CD' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Singleton8C7B99F3", + "logicalId": "vpcpublicSubnet2Subnet027D165B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 53, - "startColumn": 4, - "endLine": 53, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 132, + "startColumn": 5, + "endLine": 132, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'vpcA2121C38'" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", + "logicalId": "vpcpublicSubnet2RouteTableA6135437", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 84, + "startLine": 149, "startColumn": 5, - "endLine": 84, - "endColumn": 12, + "endLine": 149, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'vpcA2121C38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", + "logicalId": "vpcpublicSubnet2RouteTableAssociation73F6478A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 85, + "startLine": 160, "startColumn": 5, - "endLine": 85, + "endLine": 160, "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt Singleton8C7B99F3.Arn" + "resolutionSource": "Ref to 'vpcpublicSubnet2RouteTableA6135437'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", + "logicalId": "vpcpublicSubnet2RouteTableAssociation73F6478A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 91, + "startLine": 163, "startColumn": 5, - "endLine": 91, - "endColumn": 15, + "endLine": 163, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'vpcpublicSubnet2Subnet027D165B'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", + "logicalId": "vpcpublicSubnet2DefaultRoute13685A07", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 92, + "startLine": 174, "startColumn": 5, - "endLine": 92, - "endColumn": 15, + "endLine": 174, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt Rule4C995B7F.Arn" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SingletonServiceRoleDDD815CD' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SingletonServiceRoleDDD815CD", + "logicalId": "vpcpublicSubnet2DefaultRoute13685A07", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 178, + "startColumn": 5, + "endLine": 178, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'vpcpublicSubnet2RouteTableA6135437'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Singleton8C7B99F3' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Singleton8C7B99F3", + "logicalId": "vpcVPCGW7984C166", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 39, - "startColumn": 4, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 209, + "startColumn": 5, + "endLine": 209, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'vpcA2121C38'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Rule4C995B7F' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Property 'InstanceProfileName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Rule4C995B7F", + "logicalId": "emrjobflowprofile", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.InstanceProfileName", "category": "Best Practice", - "startLine": 62, - "startColumn": 4, - "endLine": 62, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/py-lambda-from-container--LambdaContainerFunctionStack.template.json": { - "filePath": "cdk/py-lambda-from-container--LambdaContainerFunctionStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 4, - "debug": 0 + "startLine": 303, + "startColumn": 5, + "endLine": 303, + "endColumn": 25, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W3005", - "severity": "WARN", - "message": "'lambdaContainerFunctionServiceRole5E36DB3C' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Applications' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "lambdaContainerFunction5815FD88", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EMR::Cluster" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Applications", "category": "Best Practice", - "startLine": 63, - "startColumn": 4, - "endLine": 63, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 317, + "startColumn": 5, + "endLine": 317, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'Configurations' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "lambdaContainerFunction5815FD88", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EMR::Cluster" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Configurations", "category": "Best Practice", - "startLine": 51, + "startLine": 322, "startColumn": 5, - "endLine": 51, - "endColumn": 18, + "endLine": 322, + "endColumn": 20, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -66392,18 +67635,18 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PackageType' is create-only; updating it will cause resource replacement", + "message": "Property 'JobFlowRole' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "lambdaContainerFunction5815FD88", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EMR::Cluster" }, - "propertyPath": "Properties.PackageType", + "propertyPath": "Properties.JobFlowRole", "category": "Best Practice", - "startLine": 53, + "startLine": 365, "startColumn": 5, - "endLine": 53, + "endLine": 365, "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -66412,147 +67655,110 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'lambdaContainerFunctionServiceRole5E36DB3C' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'LogUri' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "lambdaContainerFunctionServiceRole5E36DB3C", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EMR::Cluster" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.LogUri", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 366, + "startColumn": 5, + "endLine": 366, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'lambdaContainerFunction5815FD88' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "lambdaContainerFunction5815FD88", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EMR::Cluster" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 39, - "startColumn": 4, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/py-lambda-layer--LambdaLayerExample.template.json": { - "filePath": "cdk/py-lambda-layer--LambdaLayerExample.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 5, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", - "entity": { - "logicalId": "lambdafunction45C982D3", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 83, + "startLine": 378, "startColumn": 5, - "endLine": 83, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 378, + "endColumn": 10, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'lambdafunctionServiceRole85538ADB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ReleaseLabel' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "lambdafunction45C982D3", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EMR::Cluster" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.ReleaseLabel", "category": "Best Practice", - "startLine": 85, - "startColumn": 4, - "endLine": 85, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 379, + "startColumn": 5, + "endLine": 379, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CompatibleRuntimes' is create-only; updating it will cause resource replacement", + "message": "Property 'ServiceRole' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helperlayerC2FA2F58", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::EMR::Cluster" }, - "propertyPath": "Properties.CompatibleRuntimes", + "propertyPath": "Properties.ServiceRole", "category": "Best Practice", - "startLine": 6, + "startLine": 380, "startColumn": 5, - "endLine": 6, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "endLine": 380, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'emrservicerole3BE5EDAF'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Content' is create-only; updating it will cause resource replacement", + "message": "Property 'Steps' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helperlayerC2FA2F58", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::EMR::Cluster" }, - "propertyPath": "Properties.Content", + "propertyPath": "Properties.Steps", "category": "Best Practice", - "startLine": 11, + "startLine": 383, "startColumn": 5, - "endLine": 11, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "endLine": 383, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -66560,44 +67766,41 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "message": "Resource 'emrservicerole3BE5EDAF' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "helperlayerC2FA2F58", + "logicalId": "emrservicerole3BE5EDAF", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Description", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 219, + "startColumn": 4, + "endLine": 219, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'lambdafunctionServiceRole85538ADB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'emrjobflowrole15D4DAE5' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "lambdafunctionServiceRole85538ADB", + "logicalId": "emrjobflowrole15D4DAE5", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 30, + "startLine": 268, "startColumn": 4, - "endLine": 30, + "endLine": 268, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -66605,35 +67808,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'lambdafunction45C982D3' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'emrcluster' of type 'AWS::EMR::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "lambdafunction45C982D3", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EMR::Cluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 64, + "startLine": 316, "startColumn": 4, - "endLine": 64, + "endLine": 316, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/py-stepfunctions--aws-stepfunctions-integ.template.json": { - "filePath": "cdk/py-stepfunctions--aws-stepfunctions-integ.template.json", + "cdk/py-iotcore--CdkIotThingStack.template.json": { + "filePath": "cdk/py-iotcore--CdkIotThingStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 8, + "resourcesScanned": 19, "counts": { "fatal": 0, "errors": 0, "warnings": 5, - "informational": 6, + "informational": 22, "debug": 0 }, "suppressed": 0, @@ -66644,65 +67847,65 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "submitLambda3C32AFD4", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 53, + "startLine": 189, "startColumn": 5, - "endLine": 53, + "endLine": 189, "endColumn": 13, "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "actualValue": "python3.9", + "actualValue": "nodejs18.x", "lifecycle": "deprecated" } }, { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "statusLambdaCF47B86D", + "logicalId": "IoTCertProviderframeworkonEvent8FF1476F", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 115, + "startLine": 321, "startColumn": 5, - "endLine": 115, + "endLine": 321, "endColumn": 13, "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "actualValue": "python3.9", + "actualValue": "nodejs18.x", "lifecycle": "deprecated" } }, { "ruleId": "W3005", "severity": "WARN", - "message": "'submitLambdaServiceRole576DCA8F' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'CdkThing001LambdaRoleD7EE5CD3' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "submitLambda3C32AFD4", + "logicalId": "CertHandler220363A9", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 55, + "startLine": 87, "startColumn": 4, - "endLine": 55, + "endLine": 87, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -66710,19 +67913,19 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'statusLambdaServiceRoleD1132168' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "statusLambdaCF47B86D", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 117, + "startLine": 204, "startColumn": 4, - "endLine": 117, + "endLine": 204, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -66730,422 +67933,75 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'StateMachineRoleB840431D' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", + "message": "'IoTCertProviderframeworkonEventServiceRole80DDBEA7' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "StateMachine2E01A3A5", + "logicalId": "IoTCertProviderframeworkonEvent8FF1476F", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 258, + "startLine": 324, "startColumn": 4, - "endLine": 258, + "endLine": 324, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'submitLambdaServiceRole576DCA8F' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "submitLambdaServiceRole576DCA8F", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'submitLambda3C32AFD4' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "submitLambda3C32AFD4", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 39, - "startColumn": 4, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'statusLambdaServiceRoleD1132168' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "statusLambdaServiceRoleD1132168", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 67, - "startColumn": 4, - "endLine": 67, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'statusLambdaCF47B86D' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "statusLambdaCF47B86D", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 101, - "startColumn": 4, - "endLine": 101, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'StateMachineRoleB840431D' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "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": "StateMachineRoleB840431D", + "logicalId": "CfnLogGroup", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 129, - "startColumn": 4, - "endLine": 129, + "startLine": 516, + "startColumn": 3, + "endLine": 516, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'StateMachine2E01A3A5' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "StateMachine2E01A3A5", - "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 220, - "startColumn": 4, - "endLine": 220, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/py-url-shortener--urlshort-app.template.json": { - "filePath": "cdk/py-url-shortener--urlshort-app.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 20, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 3, - "informational": 39, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E2531", - "severity": "ERROR", - "message": "Runtime 'python3.7' was deprecated on '2023-12-04'. Creation was disabled on '2024-01-09', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", - "entity": { - "logicalId": "UrlShortenerFunctionB5E87AC1", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 141, - "startColumn": 5, - "endLine": 141, - "endColumn": 13, - "ruleDescription": "Check if Lambda Function Runtimes are blocked for create", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.7", - "lifecycle": "create-blocked" - } - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'UrlShortenerFunctionServiceRole2FBF9CDA' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "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": "UrlShortenerFunctionB5E87AC1", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 144, - "startColumn": 4, - "endLine": 144, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'RegionalCertificateArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiDomain85D0CE65", + "logicalId": "CfnLogGroup", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::DomainName" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.RegionalCertificateArn", "category": "Best Practice", - "startLine": 499, - "startColumn": 5, - "endLine": 499, - "endColumn": 28, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" - }, - { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiDomain85D0CE65", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::DomainName" - }, - "category": "Security", - "startLine": 490, + "startLine": 516, "startColumn": 3, - "endLine": 490, - "endColumn": 33, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TableCD117FA1", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.KeySchema", - "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiDeployment97FF782966d8a7a27285a49d048d420aab9f3106", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 223, - "startColumn": 5, - "endLine": 223, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiDeploymentStageprod9A3CCA44", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 243, - "startColumn": 5, - "endLine": 243, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiDeploymentStageprod9A3CCA44", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" - }, - "propertyPath": "Properties.StageName", - "category": "Best Practice", - "startLine": 246, - "startColumn": 5, - "endLine": 246, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiproxy991A3B5C", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" - }, - "propertyPath": "Properties.ParentId", - "category": "Best Practice", - "startLine": 258, - "startColumn": 5, - "endLine": 258, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt UrlShortenerApi1FE619BE.RootResourceId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiproxy991A3B5C", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" - }, - "propertyPath": "Properties.PathPart", - "category": "Best Practice", - "startLine": 264, - "startColumn": 5, - "endLine": 264, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiproxy991A3B5C", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 265, - "startColumn": 5, - "endLine": 265, + "endLine": 516, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" - } + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'ThingName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiproxyANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYproxy8ED41C08", + "logicalId": "MyCdkThing", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IoT::Thing" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.ThingName", "category": "Best Practice", - "startLine": 276, + "startLine": 6, "startColumn": 5, - "endLine": 276, - "endColumn": 12, + "endLine": 6, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -67158,84 +68014,84 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiproxyANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYproxy8ED41C08", + "logicalId": "CertHandler220363A9", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 277, + "startLine": 76, "startColumn": 5, - "endLine": 277, + "endLine": 76, "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt UrlShortenerFunctionB5E87AC1.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiproxyANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYproxy8ED41C08", + "logicalId": "IoTCertCustomResource", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::CloudFormation::CustomResource" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.ServiceToken", "category": "Best Practice", - "startLine": 283, + "startLine": 338, "startColumn": 5, - "endLine": 283, - "endColumn": 15, + "endLine": 338, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt IoTCertProviderframeworkonEvent8FF1476F.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiproxyANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYproxy8ED41C08", + "logicalId": "CfnPolicy", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IoT::Policy" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.PolicyName", "category": "Best Practice", - "startLine": 284, + "startLine": 407, "startColumn": 5, - "endLine": 284, - "endColumn": 15, + "endLine": 407, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:111111111111:{ref:UrlShortenerApi1FE619BE}/{ref:UrlShortenerApiDeploymentStageprod9A3CCA44}/*/*)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiproxyANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYproxy1B61094D", + "logicalId": "CdkThing001PolicyPrincipalAttachment", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IoT::PolicyPrincipalAttachment" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.PolicyName", "category": "Best Practice", - "startLine": 312, + "startLine": 416, "startColumn": 5, - "endLine": 312, - "endColumn": 12, + "endLine": 416, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -67245,24 +68101,25 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiproxyANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYproxy1B61094D", + "logicalId": "CdkThing001PolicyPrincipalAttachment", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IoT::PolicyPrincipalAttachment" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 313, + "startLine": 417, "startColumn": 5, - "endLine": 313, - "endColumn": 18, + "endLine": 417, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt UrlShortenerFunctionB5E87AC1.Arn" + "resolutionSource": "dynamic (Join:arn:aws:iot:us-east-1:123456789012:cert/{ref:IoTCertCustomResource})" } }, { @@ -67271,62 +68128,62 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiproxyANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYproxy1B61094D", + "logicalId": "CdkThing001ThingPrincipalAttachment", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IoT::ThingPrincipalAttachment" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 319, + "startLine": 447, "startColumn": 5, - "endLine": 319, + "endLine": 447, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:iot:us-east-1:123456789012:cert/{ref:IoTCertCustomResource})" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'ThingName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiproxyANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYproxy1B61094D", + "logicalId": "CdkThing001ThingPrincipalAttachment", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IoT::ThingPrincipalAttachment" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.ThingName", "category": "Best Practice", - "startLine": 320, + "startLine": 469, "startColumn": 5, - "endLine": 320, + "endLine": 469, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:111111111111:{ref:UrlShortenerApi1FE619BE}/test-invoke-stage/*/*)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiproxyANY05B511A9", + "logicalId": "CfnRole", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 345, + "startLine": 510, "startColumn": 5, - "endLine": 345, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 510, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -67336,381 +68193,364 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiproxyANY05B511A9", + "logicalId": "CfnLogGroup", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 369, + "startLine": 519, "startColumn": 5, - "endLine": 369, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 519, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UrlShortenerApiproxy991A3B5C'" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'CdkThing001LambdaRoleD7EE5CD3' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiproxyANY05B511A9", + "logicalId": "CdkThing001LambdaRoleD7EE5CD3", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 372, - "startColumn": 5, - "endLine": 372, + "startLine": 14, + "startColumn": 4, + "endLine": 14, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Resource 'CertHandler220363A9' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYB5D53F00", + "logicalId": "CertHandler220363A9", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 383, - "startColumn": 5, - "endLine": 383, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 69, + "startColumn": 4, + "endLine": 69, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYB5D53F00", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 384, - "startColumn": 5, - "endLine": 384, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt UrlShortenerFunctionB5E87AC1.Arn" - } + "startLine": 126, + "startColumn": 4, + "endLine": 126, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYB5D53F00", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 390, - "startColumn": 5, - "endLine": 390, + "startLine": 187, + "startColumn": 4, + "endLine": 187, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'IoTCertProviderframeworkonEventServiceRole80DDBEA7' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYB5D53F00", + "logicalId": "IoTCertProviderframeworkonEventServiceRole80DDBEA7", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 391, - "startColumn": 5, - "endLine": 391, + "startLine": 217, + "startColumn": 4, + "endLine": 217, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:111111111111:{ref:UrlShortenerApi1FE619BE}/{ref:UrlShortenerApiDeploymentStageprod9A3CCA44}/*/)" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Resource 'IoTCertProviderframeworkonEvent8FF1476F' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYD47A7EFF", + "logicalId": "IoTCertProviderframeworkonEvent8FF1476F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 419, - "startColumn": 5, - "endLine": 419, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 296, + "startColumn": 4, + "endLine": 296, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'CfnPolicy' of type 'AWS::IoT::Policy' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYD47A7EFF", + "logicalId": "CfnPolicy", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IoT::Policy" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 420, - "startColumn": 5, - "endLine": 420, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt UrlShortenerFunctionB5E87AC1.Arn" - } + "startLine": 353, + "startColumn": 4, + "endLine": 353, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Resource 'CfnRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYD47A7EFF", + "logicalId": "CfnRole", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 426, - "startColumn": 5, - "endLine": 426, + "startLine": 477, + "startColumn": 4, + "endLine": 477, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'CfnLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYD47A7EFF", + "logicalId": "CfnLogGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 427, - "startColumn": 5, - "endLine": 427, + "startLine": 518, + "startColumn": 4, + "endLine": 518, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:111111111111:{ref:UrlShortenerApi1FE619BE}/test-invoke-stage/*/)" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Resource 'CdkIoTCoreRule' of type 'AWS::IoT::TopicRule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiANY5994BD69", + "logicalId": "CdkIoTCoreRule", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::IoT::TopicRule" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 452, - "startColumn": 5, - "endLine": 452, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 528, + "startColumn": 4, + "endLine": 528, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/py-lambda-cron--LambdaCronExample.template.json": { + "filePath": "cdk/py-lambda-cron--LambdaCronExample.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 7, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'SingletonServiceRoleDDD815CD' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "UrlShortenerApiANY5994BD69", + "logicalId": "Singleton8C7B99F3", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 476, - "startColumn": 5, - "endLine": 476, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt UrlShortenerApi1FE619BE.RootResourceId" - } + "startLine": 53, + "startColumn": 4, + "endLine": 53, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiANY5994BD69", + "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 482, + "startLine": 84, "startColumn": 5, - "endLine": 482, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 84, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DomainName' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiDomain85D0CE65", + "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::DomainName" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.DomainName", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 493, + "startLine": 85, "startColumn": 5, - "endLine": 493, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 85, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt Singleton8C7B99F3.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DomainName' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiDomainMapurlshortappUrlShortenerApiB1BAB0CD7C6BCC1C", + "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::BasePathMapping" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.DomainName", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 508, + "startLine": 91, "startColumn": 5, - "endLine": 508, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 91, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UrlShortenerApiDomain85D0CE65'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerDomain9F16453F", + "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.HostedZoneId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 539, + "startLine": 92, "startColumn": 5, - "endLine": 539, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "endLine": 92, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt Rule4C995B7F.Arn" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TableCD117FA1' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'SingletonServiceRoleDDD815CD' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TableCD117FA1", + "logicalId": "SingletonServiceRoleDDD815CD", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -67725,19 +68565,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'UrlShortenerFunctionServiceRole2FBF9CDA' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'Singleton8C7B99F3' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerFunctionServiceRole2FBF9CDA", + "logicalId": "Singleton8C7B99F3", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 31, + "startLine": 39, "startColumn": 4, - "endLine": 31, + "endLine": 39, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -67745,79 +68585,122 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'UrlShortenerFunctionB5E87AC1' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'Rule4C995B7F' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerFunctionB5E87AC1", + "logicalId": "Rule4C995B7F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Events::Rule" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 122, + "startLine": 62, "startColumn": 4, - "endLine": 122, + "endLine": 62, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "cdk/py-lambda-from-container--LambdaContainerFunctionStack.template.json": { + "filePath": "cdk/py-lambda-from-container--LambdaContainerFunctionStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 4, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'UrlShortenerApi1FE619BE' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'lambdaContainerFunctionServiceRole5E36DB3C' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "UrlShortenerApi1FE619BE", + "logicalId": "lambdaContainerFunction5815FD88", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 157, + "startLine": 63, "startColumn": 4, - "endLine": 157, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endLine": 63, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'UrlShortenerApiCloudWatchRole28577D98' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiCloudWatchRole28577D98", + "logicalId": "lambdaContainerFunction5815FD88", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 166, - "startColumn": 4, - "endLine": 166, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 51, + "startColumn": 5, + "endLine": 51, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'PackageType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "lambdaContainerFunction5815FD88", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.PackageType", + "category": "Best Practice", + "startLine": 53, + "startColumn": 5, + "endLine": 53, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'UrlShortenerApiDeploymentStageprod9A3CCA44' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Resource 'lambdaContainerFunctionServiceRole5E36DB3C' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiDeploymentStageprod9A3CCA44", + "logicalId": "lambdaContainerFunctionServiceRole5E36DB3C", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 239, + "startLine": 5, "startColumn": 4, - "endLine": 239, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -67825,35 +68708,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'UrlShortenerApiDomain85D0CE65' of type 'AWS::ApiGateway::DomainName' supports Tags but none are configured", + "message": "Resource 'lambdaContainerFunction5815FD88' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiDomain85D0CE65", + "logicalId": "lambdaContainerFunction5815FD88", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::DomainName" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 492, + "startLine": 39, "startColumn": 4, - "endLine": 492, + "endLine": 39, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/py-url-shortener--urlshort-load-test.template.json": { - "filePath": "cdk/py-url-shortener--urlshort-load-test.template.json", + "cdk/py-lambda-layer--LambdaLayerExample.template.json": { + "filePath": "cdk/py-lambda-layer--LambdaLayerExample.template.json", "status": "OK", "metadata": { - "resourcesScanned": 8, + "resourcesScanned": 4, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 18, + "warnings": 2, + "informational": 5, "debug": 0 }, "suppressed": 0, @@ -67862,92 +68745,88 @@ }, "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "generatorPingTask1D3C2E79", + "logicalId": "lambdafunction45C982D3", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 32, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 83, "startColumn": 5, - "endLine": 32, - "endColumn": 26, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 83, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "python3.8", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'lambdafunctionServiceRole85538ADB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "generatorPingTask1D3C2E79", + "logicalId": "lambdafunction45C982D3", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 47, - "startColumn": 5, - "endLine": 47, - "endColumn": 9, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 85, + "startColumn": 4, + "endLine": 85, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'CompatibleRuntimes' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "generatorPingTask1D3C2E79", + "logicalId": "helperlayerC2FA2F58", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.ExecutionRoleArn", + "propertyPath": "Properties.CompatibleRuntimes", "category": "Best Practice", - "startLine": 48, + "startLine": 6, "startColumn": 5, - "endLine": 48, - "endColumn": 22, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 6, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt generatorPingTaskExecutionRoleA7BE7F8B.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'Content' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "generatorPingTask1D3C2E79", + "logicalId": "helperlayerC2FA2F58", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.Content", "category": "Best Practice", - "startLine": 54, + "startLine": 11, "startColumn": 5, - "endLine": 54, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 11, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -67957,20 +68836,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "generatorPingTask1D3C2E79", + "logicalId": "helperlayerC2FA2F58", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 55, + "startLine": 17, "startColumn": 5, - "endLine": 55, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 17, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -67978,200 +68857,206 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Resource 'lambdafunctionServiceRole85538ADB' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "generatorPingTask1D3C2E79", + "logicalId": "lambdafunctionServiceRole85538ADB", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 56, - "startColumn": 5, - "endLine": 56, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 30, + "startColumn": 4, + "endLine": 30, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Resource 'lambdafunction45C982D3' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "generatorPingTask1D3C2E79", + "logicalId": "lambdafunction45C982D3", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 57, - "startColumn": 5, - "endLine": 57, - "endColumn": 29, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 64, + "startColumn": 4, + "endLine": 64, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/py-stepfunctions--aws-stepfunctions-integ.template.json": { + "filePath": "cdk/py-stepfunctions--aws-stepfunctions-integ.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 8, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 5, + "informational": 6, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "generatorPingTask1D3C2E79", + "logicalId": "submitLambda3C32AFD4", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.TaskRoleArn", - "category": "Best Practice", - "startLine": 60, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 53, "startColumn": 5, - "endLine": 60, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 53, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt generatorPingTaskTaskRoleA4886BE8.Arn" + "actualValue": "python3.9", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "generatorserviceServiceA6AC5079", + "logicalId": "statusLambdaCF47B86D", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Cluster", - "category": "Best Practice", - "startLine": 138, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 115, "startColumn": 5, - "endLine": 138, + "endLine": 115, "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'generatorcluster9804CB70'" + "actualValue": "python3.9", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'submitLambdaServiceRole576DCA8F' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "generatorserviceServiceA6AC5079", + "logicalId": "submitLambda3C32AFD4", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.LaunchType", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 152, - "startColumn": 5, - "endLine": 152, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 55, + "startColumn": 4, + "endLine": 55, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'statusLambdaServiceRoleD1132168' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "generatorserviceSecurityGroup3D8BECF8", + "logicalId": "statusLambdaCF47B86D", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 185, - "startColumn": 5, - "endLine": 185, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 117, + "startColumn": 4, + "endLine": 117, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'StateMachineRoleB840431D' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", + "source": "CFN_LINT", "entity": { - "logicalId": "generatorserviceSecurityGroup3D8BECF8", + "logicalId": "StateMachine2E01A3A5", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 193, - "startColumn": 5, - "endLine": 193, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 258, + "startColumn": 4, + "endLine": 258, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'generatorcluster9804CB70' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Resource 'submitLambdaServiceRole576DCA8F' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "generatorcluster9804CB70", + "logicalId": "submitLambdaServiceRole576DCA8F", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 28, + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'generatorPingTaskTaskRoleA4886BE8' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'submitLambda3C32AFD4' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "generatorPingTaskTaskRoleA4886BE8", + "logicalId": "submitLambda3C32AFD4", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 11, + "startLine": 39, "startColumn": 4, - "endLine": 11, + "endLine": 39, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -68179,19 +69064,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'generatorPingTask1D3C2E79' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'statusLambdaServiceRoleD1132168' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "generatorPingTask1D3C2E79", + "logicalId": "statusLambdaServiceRoleD1132168", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 31, + "startLine": 67, "startColumn": 4, - "endLine": 31, + "endLine": 67, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -68199,19 +69084,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'generatorPingTaskExecutionRoleA7BE7F8B' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'statusLambdaCF47B86D' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "generatorPingTaskExecutionRoleA7BE7F8B", + "logicalId": "statusLambdaCF47B86D", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 73, + "startLine": 101, "startColumn": 4, - "endLine": 73, + "endLine": 101, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -68219,19 +69104,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'generatorserviceServiceA6AC5079' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Resource 'StateMachineRoleB840431D' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "generatorserviceServiceA6AC5079", + "logicalId": "StateMachineRoleB840431D", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 137, + "startLine": 129, "startColumn": 4, - "endLine": 137, + "endLine": 129, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -68239,35 +69124,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'generatorserviceSecurityGroup3D8BECF8' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'StateMachine2E01A3A5' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "generatorserviceSecurityGroup3D8BECF8", + "logicalId": "StateMachine2E01A3A5", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::StepFunctions::StateMachine" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 184, + "startLine": 220, "startColumn": 4, - "endLine": 184, + "endLine": 220, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/r53-resolver--R53ResolverStack.template.json": { - "filePath": "cdk/r53-resolver--R53ResolverStack.template.json", + "cdk/py-url-shortener--urlshort-app.template.json": { + "filePath": "cdk/py-url-shortener--urlshort-app.template.json", "status": "OK", "metadata": { - "resourcesScanned": 18, + "resourcesScanned": 20, "counts": { "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 33, + "errors": 1, + "warnings": 3, + "informational": 39, "debug": 0 }, "suppressed": 0, @@ -68275,108 +69160,173 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "E2531", + "severity": "ERROR", + "message": "Runtime 'python3.7' was deprecated on '2023-12-04'. Creation was disabled on '2024-01-09', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "UrlShortenerFunctionB5E87AC1", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 141, + "startColumn": 5, + "endLine": 141, + "endColumn": 13, + "ruleDescription": "Check if Lambda Function Runtimes are blocked for create", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.7", + "lifecycle": "create-blocked" + } + }, { "ruleId": "W3005", "severity": "WARN", - "message": "'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'UrlShortenerFunctionServiceRole2FBF9CDA' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", + "logicalId": "UrlShortenerFunctionB5E87AC1", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 271, + "startLine": 144, "startColumn": 4, - "endLine": 271, + "endLine": 144, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'RegionalCertificateArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", + "entity": { + "logicalId": "UrlShortenerApiDomain85D0CE65", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "propertyPath": "Properties.RegionalCertificateArn", + "category": "Best Practice", + "startLine": 499, + "startColumn": 5, + "endLine": 499, + "endColumn": 28, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "UrlShortenerApiDomain85D0CE65", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "category": "Security", + "startLine": 490, + "startColumn": 3, + "endLine": 490, + "endColumn": 33, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPC9B993306", + "logicalId": "TableCD117FA1", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 6, + "startLine": 12, "startColumn": 5, - "endLine": 6, + "endLine": 12, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPC9B993306", + "logicalId": "UrlShortenerApiDeployment97FF782966d8a7a27285a49d048d420aab9f3106", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 9, + "startLine": 223, "startColumn": 5, - "endLine": 9, - "endColumn": 21, + "endLine": 223, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet1Subnet5DBB6B2C", + "logicalId": "UrlShortenerApiDeploymentStageprod9A3CCA44", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 24, + "startLine": 243, "startColumn": 5, - "endLine": 24, - "endColumn": 22, + "endLine": 243, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet1Subnet5DBB6B2C", + "logicalId": "UrlShortenerApiDeploymentStageprod9A3CCA44", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 32, + "startLine": 246, "startColumn": 5, - "endLine": 32, + "endLine": 246, "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -68386,120 +69336,180 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet1Subnet5DBB6B2C", + "logicalId": "UrlShortenerApiproxy991A3B5C", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 48, + "startLine": 258, "startColumn": 5, - "endLine": 48, - "endColumn": 11, + "endLine": 258, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" + "resolutionSource": "GetAtt UrlShortenerApi1FE619BE.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet1RouteTable6E169019", + "logicalId": "UrlShortenerApiproxy991A3B5C", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 65, + "startLine": 264, "startColumn": 5, - "endLine": 65, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 264, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "UrlShortenerApiproxy991A3B5C", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Resource" + }, + "propertyPath": "Properties.RestApiId", + "category": "Best Practice", + "startLine": 265, + "startColumn": 5, + "endLine": 265, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" + "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet1RouteTableAssociation41B46D9B", + "logicalId": "UrlShortenerApiproxyANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYproxy8ED41C08", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 76, + "startLine": 276, "startColumn": 5, - "endLine": 76, + "endLine": 276, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "UrlShortenerApiproxyANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYproxy8ED41C08", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 277, + "startColumn": 5, + "endLine": 277, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPCPrivateSubnet1RouteTable6E169019'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt UrlShortenerFunctionB5E87AC1.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet1RouteTableAssociation41B46D9B", + "logicalId": "UrlShortenerApiproxyANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYproxy8ED41C08", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 79, + "startLine": 283, "startColumn": 5, - "endLine": 79, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 283, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "UrlShortenerApiproxyANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYproxy8ED41C08", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.SourceArn", + "category": "Best Practice", + "startLine": 284, + "startColumn": 5, + "endLine": 284, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPCPrivateSubnet1Subnet5DBB6B2C'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:111111111111:{ref:UrlShortenerApi1FE619BE}/{ref:UrlShortenerApiDeploymentStageprod9A3CCA44}/*/*)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet2Subnet495784E7", + "logicalId": "UrlShortenerApiproxyANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYproxy1B61094D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 90, + "startLine": 312, "startColumn": 5, - "endLine": 90, - "endColumn": 22, + "endLine": 312, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -68509,18 +69519,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet2Subnet495784E7", + "logicalId": "UrlShortenerApiproxyANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYproxy1B61094D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 98, + "startLine": 313, "startColumn": 5, - "endLine": 98, + "endLine": 313, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt UrlShortenerFunctionB5E87AC1.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "UrlShortenerApiproxyANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYproxy1B61094D", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 319, + "startColumn": 5, + "endLine": 319, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -68531,166 +69564,203 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet2Subnet495784E7", + "logicalId": "UrlShortenerApiproxyANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYproxy1B61094D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 114, + "startLine": 320, "startColumn": 5, - "endLine": 114, - "endColumn": 11, + "endLine": 320, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:111111111111:{ref:UrlShortenerApi1FE619BE}/test-invoke-stage/*/*)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet2RouteTable0899A697", + "logicalId": "UrlShortenerApiproxyANY05B511A9", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 131, + "startLine": 345, "startColumn": 5, - "endLine": 131, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 345, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet2RouteTableAssociation53E27A3B", + "logicalId": "UrlShortenerApiproxyANY05B511A9", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 142, + "startLine": 369, "startColumn": 5, - "endLine": 142, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 369, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPCPrivateSubnet2RouteTable0899A697'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "Ref to 'UrlShortenerApiproxy991A3B5C'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet2RouteTableAssociation53E27A3B", + "logicalId": "UrlShortenerApiproxyANY05B511A9", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 145, + "startLine": 372, "startColumn": 5, - "endLine": 145, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 372, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPCPrivateSubnet2Subnet495784E7'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FirewallRuleGroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BlockListRuleGroupDirectBlockListRuleGroupAssociation40E90DB0", + "logicalId": "UrlShortenerApiANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYB5D53F00", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.FirewallRuleGroupId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 316, + "startLine": 383, "startColumn": 5, - "endLine": 316, - "endColumn": 25, + "endLine": 383, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "UrlShortenerApiANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYB5D53F00", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 384, + "startColumn": 5, + "endLine": 384, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt BlockListRuleGroup55F6B55D.Id" + "resolutionSource": "GetAtt UrlShortenerFunctionB5E87AC1.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BlockListRuleGroupDirectBlockListRuleGroupAssociation40E90DB0", + "logicalId": "UrlShortenerApiANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYB5D53F00", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 390, + "startColumn": 5, + "endLine": 390, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "UrlShortenerApiANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYB5D53F00", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 323, + "startLine": 391, "startColumn": 5, - "endLine": 323, - "endColumn": 11, + "endLine": 391, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:111111111111:{ref:UrlShortenerApi1FE619BE}/{ref:UrlShortenerApiDeploymentStageprod9A3CCA44}/*/)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgoutboundendpointEC0509A3", + "logicalId": "UrlShortenerApiANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYD47A7EFF", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 334, + "startLine": 419, "startColumn": 5, - "endLine": 334, - "endColumn": 22, + "endLine": 419, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -68700,43 +69770,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgoutboundendpointEC0509A3", + "logicalId": "UrlShortenerApiANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYD47A7EFF", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 396, + "startLine": 420, "startColumn": 5, - "endLine": 396, - "endColumn": 11, + "endLine": 420, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" + "resolutionSource": "GetAtt UrlShortenerFunctionB5E87AC1.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Direction' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OutboundEndpoint", + "logicalId": "UrlShortenerApiANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYD47A7EFF", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverEndpoint" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Direction", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 407, + "startLine": 426, "startColumn": 5, - "endLine": 407, + "endLine": 426, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53resolver", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -68746,42 +69815,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SecurityGroupIds' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OutboundEndpoint", + "logicalId": "UrlShortenerApiANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYD47A7EFF", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverEndpoint" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.SecurityGroupIds", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 420, + "startLine": 427, "startColumn": 5, - "endLine": 420, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53resolver", + "endLine": 427, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:111111111111:{ref:UrlShortenerApi1FE619BE}/test-invoke-stage/*/)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sginboundendpoint32081788", + "logicalId": "UrlShortenerApiANY5994BD69", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 436, + "startLine": 452, "startColumn": 5, - "endLine": 436, - "endColumn": 22, + "endLine": 452, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -68791,66 +69861,68 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sginboundendpoint32081788", + "logicalId": "UrlShortenerApiANY5994BD69", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 460, + "startLine": 476, "startColumn": 5, - "endLine": 460, - "endColumn": 11, + "endLine": 476, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" + "resolutionSource": "GetAtt UrlShortenerApi1FE619BE.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Direction' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "InboundEndpoint", + "logicalId": "UrlShortenerApiANY5994BD69", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverEndpoint" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Direction", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 471, + "startLine": 482, "startColumn": 5, - "endLine": 471, + "endLine": 482, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53resolver", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SecurityGroupIds' is create-only; updating it will cause resource replacement", + "message": "Property 'DomainName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "InboundEndpoint", + "logicalId": "UrlShortenerApiDomain85D0CE65", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverEndpoint" + "resourceType": "AWS::ApiGateway::DomainName" }, - "propertyPath": "Properties.SecurityGroupIds", + "propertyPath": "Properties.DomainName", "category": "Best Practice", - "startLine": 484, + "startLine": 493, "startColumn": 5, - "endLine": 484, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53resolver", + "endLine": 493, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -68858,61 +69930,68 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'DomainName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0", + "logicalId": "UrlShortenerApiDomainMapurlshortappUrlShortenerApiB1BAB0CD7C6BCC1C", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::BasePathMapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DomainName", "category": "Best Practice", - "startLine": 180, - "startColumn": 4, - "endLine": 180, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 508, + "startColumn": 5, + "endLine": 508, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UrlShortenerApiDomain85D0CE65'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", + "logicalId": "UrlShortenerDomain9F16453F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "startLine": 252, - "startColumn": 4, - "endLine": 252, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 539, + "startColumn": 5, + "endLine": 539, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BlockListC03D0423' of type 'AWS::Route53Resolver::FirewallDomainList' supports Tags but none are configured", + "message": "Resource 'TableCD117FA1' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BlockListC03D0423", + "logicalId": "TableCD117FA1", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallDomainList" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 282, + "startLine": 5, "startColumn": 4, - "endLine": 282, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -68920,19 +69999,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BlockListRuleGroup55F6B55D' of type 'AWS::Route53Resolver::FirewallRuleGroup' supports Tags but none are configured", + "message": "Resource 'UrlShortenerFunctionServiceRole2FBF9CDA' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BlockListRuleGroup55F6B55D", + "logicalId": "UrlShortenerFunctionServiceRole2FBF9CDA", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallRuleGroup" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 294, + "startLine": 31, "startColumn": 4, - "endLine": 294, + "endLine": 31, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -68940,19 +70019,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BlockListRuleGroupDirectBlockListRuleGroupAssociation40E90DB0' of type 'AWS::Route53Resolver::FirewallRuleGroupAssociation' supports Tags but none are configured", + "message": "Resource 'UrlShortenerFunctionB5E87AC1' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BlockListRuleGroupDirectBlockListRuleGroupAssociation40E90DB0", + "logicalId": "UrlShortenerFunctionB5E87AC1", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 315, + "startLine": 122, "startColumn": 4, - "endLine": 315, + "endLine": 122, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -68960,19 +70039,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sgoutboundendpointEC0509A3' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'UrlShortenerApi1FE619BE' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sgoutboundendpointEC0509A3", + "logicalId": "UrlShortenerApi1FE619BE", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::RestApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 333, + "startLine": 157, "startColumn": 4, - "endLine": 333, + "endLine": 157, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -68980,19 +70059,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'OutboundEndpoint' of type 'AWS::Route53Resolver::ResolverEndpoint' supports Tags but none are configured", + "message": "Resource 'UrlShortenerApiCloudWatchRole28577D98' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "OutboundEndpoint", + "logicalId": "UrlShortenerApiCloudWatchRole28577D98", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverEndpoint" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 406, + "startLine": 166, "startColumn": 4, - "endLine": 406, + "endLine": 166, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -69000,19 +70079,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sginboundendpoint32081788' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'UrlShortenerApiDeploymentStageprod9A3CCA44' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sginboundendpoint32081788", + "logicalId": "UrlShortenerApiDeploymentStageprod9A3CCA44", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 435, + "startLine": 239, "startColumn": 4, - "endLine": 435, + "endLine": 239, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -69020,35 +70099,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'InboundEndpoint' of type 'AWS::Route53Resolver::ResolverEndpoint' supports Tags but none are configured", + "message": "Resource 'UrlShortenerApiDomain85D0CE65' of type 'AWS::ApiGateway::DomainName' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "InboundEndpoint", + "logicalId": "UrlShortenerApiDomain85D0CE65", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverEndpoint" + "resourceType": "AWS::ApiGateway::DomainName" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 470, + "startLine": 492, "startColumn": 4, - "endLine": 470, + "endLine": 492, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/rekognition-lambda-s3-trigger--RekognitionLambdaS3TriggerStack.template.json": { - "filePath": "cdk/rekognition-lambda-s3-trigger--RekognitionLambdaS3TriggerStack.template.json", + "cdk/py-url-shortener--urlshort-load-test.template.json": { + "filePath": "cdk/py-url-shortener--urlshort-load-test.template.json", "status": "OK", "metadata": { - "resourcesScanned": 15, + "resourcesScanned": 8, "counts": { "fatal": 0, "errors": 0, - "warnings": 4, - "informational": 14, + "warnings": 0, + "informational": 18, "debug": 0 }, "suppressed": 0, @@ -69057,104 +70136,115 @@ }, "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "RekFunction9837D13D", + "logicalId": "generatorPingTask1D3C2E79", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 310, + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 32, "startColumn": 5, - "endLine": 310, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 32, + "endColumn": 26, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs20.x", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'RekFunctionServiceRole3947AEF4' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "RekFunction9837D13D", + "logicalId": "generatorPingTask1D3C2E79", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 312, - "startColumn": 4, - "endLine": 312, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 47, + "startColumn": 5, + "endLine": 47, + "endColumn": 9, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", + "logicalId": "generatorPingTask1D3C2E79", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.ExecutionRoleArn", "category": "Best Practice", - "startLine": 428, - "startColumn": 4, - "endLine": 428, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 48, + "startColumn": 5, + "endLine": 48, + "endColumn": 22, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt generatorPingTaskExecutionRoleA7BE7F8B.Arn" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "logicalId": "generatorPingTask1D3C2E79", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 516, - "startColumn": 4, - "endLine": 516, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 54, + "startColumn": 5, + "endLine": 54, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", + "logicalId": "generatorPingTask1D3C2E79", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 103, + "startLine": 55, "startColumn": 5, - "endLine": 103, + "endLine": 55, "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -69164,42 +70254,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", + "logicalId": "generatorPingTask1D3C2E79", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 104, + "startLine": 56, "startColumn": 5, - "endLine": 104, - "endColumn": 18, + "endLine": 56, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt RekFunction9837D13D.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", + "logicalId": "generatorPingTask1D3C2E79", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 110, + "startLine": 57, "startColumn": 5, - "endLine": 110, - "endColumn": 15, + "endLine": 57, + "endColumn": 29, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -69209,79 +70300,125 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceAccount' is create-only; updating it will cause resource replacement", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", + "logicalId": "generatorPingTask1D3C2E79", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.SourceAccount", + "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 111, + "startLine": 60, "startColumn": 5, - "endLine": 111, - "endColumn": 19, + "endLine": 60, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt generatorPingTaskTaskRoleA4886BE8.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", + "logicalId": "generatorserviceServiceA6AC5079", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 114, + "startLine": 138, + "startColumn": 5, + "endLine": 138, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'generatorcluster9804CB70'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "generatorserviceServiceA6AC5079", + "entityType": "Resource", + "resourceType": "AWS::ECS::Service" + }, + "propertyPath": "Properties.LaunchType", + "category": "Best Practice", + "startLine": 152, + "startColumn": 5, + "endLine": 152, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "generatorserviceSecurityGroup3D8BECF8", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 185, "startColumn": 5, - "endLine": 114, - "endColumn": 15, + "endLine": 185, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt Bucket83908E77.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Classifications0C921F6C", + "logicalId": "generatorserviceSecurityGroup3D8BECF8", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 134, + "startLine": 193, "startColumn": 5, - "endLine": 134, - "endColumn": 15, + "endLine": 193, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket83908E77' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'generatorcluster9804CB70' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket83908E77", + "logicalId": "generatorcluster9804CB70", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECS::Cluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -69289,26 +70426,26 @@ "startLine": 3, "startColumn": 3, "endLine": 3, - "endColumn": 18, + "endColumn": 28, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Classifications0C921F6C' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'generatorPingTaskTaskRoleA4886BE8' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Classifications0C921F6C", + "logicalId": "generatorPingTaskTaskRoleA4886BE8", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 127, + "startLine": 11, "startColumn": 4, - "endLine": 127, + "endLine": 11, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -69316,19 +70453,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'RekFunctionServiceRole3947AEF4' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'generatorPingTask1D3C2E79' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RekFunctionServiceRole3947AEF4", + "logicalId": "generatorPingTask1D3C2E79", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 153, + "startLine": 31, "startColumn": 4, - "endLine": 153, + "endLine": 31, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -69336,19 +70473,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'RekFunction9837D13D' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'generatorPingTaskExecutionRoleA7BE7F8B' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RekFunction9837D13D", + "logicalId": "generatorPingTaskExecutionRoleA7BE7F8B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 286, + "startLine": 73, "startColumn": 4, - "endLine": 286, + "endLine": 73, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -69356,19 +70493,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'generatorserviceServiceA6AC5079' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC", + "logicalId": "generatorserviceServiceA6AC5079", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 350, + "startLine": 137, "startColumn": 4, - "endLine": 350, + "endLine": 137, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -69376,267 +70513,272 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'generatorserviceSecurityGroup3D8BECF8' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", + "logicalId": "generatorserviceSecurityGroup3D8BECF8", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 413, + "startLine": 184, "startColumn": 4, - "endLine": 413, + "endLine": 184, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "cdk/r53-resolver--R53ResolverStack.template.json": { + "filePath": "cdk/r53-resolver--R53ResolverStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 18, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 33, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 438, + "startLine": 271, "startColumn": 4, - "endLine": 438, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endLine": 271, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "logicalId": "R53ResolverTestVPC9B993306", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 499, - "startColumn": 4, - "endLine": 499, + "startLine": 6, + "startColumn": 5, + "endLine": 6, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/resource-overrides--resource-overrides.template.json": { - "filePath": "cdk/resource-overrides--resource-overrides.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 21, - "counts": { - "fatal": 2, - "errors": 2, - "warnings": 4, - "informational": 31, - "debug": 0 + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('Foo' was unexpected)", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "R53ResolverTestVPC9B993306", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Foo", - "category": "Schema", - "startLine": 418, + "propertyPath": "Properties.InstanceTenancy", + "category": "Best Practice", + "startLine": 9, "startColumn": 5, - "endLine": 418, - "endColumn": 9, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Additional properties are not allowed", + "endLine": 9, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "Foo", - "extra": { - "allowed_properties": [ - "AssociatePublicIpAddress", - "BlockDeviceMappings", - "ClassicLinkVPCId", - "ClassicLinkVPCSecurityGroups", - "EbsOptimized", - "IamInstanceProfile", - "ImageId", - "InstanceId", - "InstanceMonitoring", - "InstanceType", - "KernelId", - "KeyName", - "LaunchConfigurationName", - "MetadataOptions", - "PlacementTenancy", - "RamDiskId", - "SecurityGroups", - "SpotPrice", - "UserData" - ] - } + "lifecycle": "conditional-create-only" } }, { - "ruleId": "F3006", - "severity": "FATAL", - "message": "Unknown resource type 'AWS::S3::Bucketeer'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyBucketF68F3FF0", + "logicalId": "R53ResolverTestVPCPrivateSubnet1Subnet5DBB6B2C", "entityType": "Resource", - "resourceType": "AWS::S3::Bucketeer" + "resourceType": "AWS::EC2::Subnet" }, - "category": "Schema", - "startLine": 11, - "startColumn": 3, - "endLine": 11, - "endColumn": 20, - "ruleDescription": "AWS resource type must be recognized and available in the configured region", + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 24, + "startColumn": 5, + "endLine": 24, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "extra": { - "resource_type": "AWS::S3::Bucketeer" - } + "lifecycle": "create-only" } }, { - "ruleId": "E3001", - "severity": "ERROR", - "message": "Resource 'MyBucketF68F3FF0' has invalid property 'Transform'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyBucketF68F3FF0", + "logicalId": "R53ResolverTestVPCPrivateSubnet1Subnet5DBB6B2C", "entityType": "Resource", - "resourceType": "AWS::S3::Bucketeer" + "resourceType": "AWS::EC2::Subnet" }, - "category": "Resource", - "startLine": 78, - "startColumn": 4, - "endLine": 78, - "endColumn": 14, - "ruleDescription": "Basic CloudFormation Resource Check", - "phase": "PARSE" + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 32, + "startColumn": 5, + "endLine": 32, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3016", - "severity": "ERROR", - "message": "UpdatePolicy is not supported on resource type 'AWS::S3::Bucketeer'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyBucketF68F3FF0", + "logicalId": "R53ResolverTestVPCPrivateSubnet1Subnet5DBB6B2C", "entityType": "Resource", - "resourceType": "AWS::S3::Bucketeer" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "UpdatePolicy", - "suggestedFix": "Remove UpdatePolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::ElastiCache::ReplicationGroup, AWS::Elasticsearch::Domain, AWS::Lambda::Alias, AWS::OpenSearchService::Domain", - "category": "Resource", - "startLine": 71, - "startColumn": 4, - "endLine": 71, - "endColumn": 17, - "ruleDescription": "Check UpdatePolicy values for Resources", - "phase": "LINT" + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 48, + "startColumn": 5, + "endLine": 48, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'Other34654A52' dependency already enforced by a 'GetAtt' at 'Properties.AnalyticsConfigurations.0.StorageClassAnalysis.DataExport.Destination.BucketArn'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyBucketF68F3FF0", + "logicalId": "R53ResolverTestVPCPrivateSubnet1RouteTable6E169019", "entityType": "Resource", - "resourceType": "AWS::S3::Bucketeer" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 68, - "startColumn": 4, - "endLine": 68, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 65, + "startColumn": 5, + "endLine": 65, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'Other34654A52' dependency already enforced by a 'GetAtt' at 'Properties.Token'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyBucketF68F3FF0", + "logicalId": "R53ResolverTestVPCPrivateSubnet1RouteTableAssociation41B46D9B", "entityType": "Resource", - "resourceType": "AWS::S3::Bucketeer" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 68, - "startColumn": 4, - "endLine": 68, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 76, + "startColumn": 5, + "endLine": 76, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'R53ResolverTestVPCPrivateSubnet1RouteTable6E169019'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'Other34654A52' dependency already enforced by a 'Ref' at 'Properties.LoggingConfiguration.DestinationBucketName'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyBucketF68F3FF0", + "logicalId": "R53ResolverTestVPCPrivateSubnet1RouteTableAssociation41B46D9B", "entityType": "Resource", - "resourceType": "AWS::S3::Bucketeer" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 68, - "startColumn": 4, - "endLine": 68, + "startLine": 79, + "startColumn": 5, + "endLine": 79, "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'R53ResolverTestVPCPrivateSubnet1Subnet5DBB6B2C'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "W3697", - "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "R53ResolverTestVPCPrivateSubnet2Subnet495784E7", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EC2::Subnet" }, - "category": "Deprecation", - "startLine": 397, - "startColumn": 3, - "endLine": 397, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 90, + "startColumn": 5, + "endLine": 90, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", @@ -69644,109 +70786,189 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCB9E5F0B4", + "logicalId": "R53ResolverTestVPCPrivateSubnet2Subnet495784E7", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 98, + "startColumn": 5, + "endLine": 98, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "R53ResolverTestVPCPrivateSubnet2Subnet495784E7", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 114, + "startColumn": 5, + "endLine": 114, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "R53ResolverTestVPCPrivateSubnet2RouteTable0899A697", + "entityType": "Resource", + "resourceType": "AWS::EC2::RouteTable" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 131, + "startColumn": 5, + "endLine": 131, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "R53ResolverTestVPCPrivateSubnet2RouteTableAssociation53E27A3B", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 83, + "startLine": 142, "startColumn": 5, - "endLine": 83, - "endColumn": 15, + "endLine": 142, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'R53ResolverTestVPCPrivateSubnet2RouteTable0899A697'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCB9E5F0B4", + "logicalId": "R53ResolverTestVPCPrivateSubnet2RouteTableAssociation53E27A3B", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 86, + "startLine": 145, "startColumn": 5, - "endLine": 86, - "endColumn": 21, + "endLine": 145, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'R53ResolverTestVPCPrivateSubnet2Subnet495784E7'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'FirewallRuleGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1SubnetB4246D30", + "logicalId": "BlockListRuleGroupDirectBlockListRuleGroupAssociation40E90DB0", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.FirewallRuleGroupId", "category": "Best Practice", - "startLine": 101, + "startLine": 316, "startColumn": 5, - "endLine": 101, - "endColumn": 22, + "endLine": 316, + "endColumn": 25, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt BlockListRuleGroup55F6B55D.Id" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1SubnetB4246D30", + "logicalId": "BlockListRuleGroupDirectBlockListRuleGroupAssociation40E90DB0", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 109, + "startLine": 323, "startColumn": 5, - "endLine": 109, - "endColumn": 15, + "endLine": 323, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1SubnetB4246D30", + "logicalId": "sgoutboundendpointEC0509A3", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 125, + "startLine": 334, "startColumn": 5, - "endLine": 125, - "endColumn": 11, + "endLine": 334, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "lifecycle": "create-only" } }, { @@ -69755,95 +70977,85 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1RouteTableFEE4B781", + "logicalId": "sgoutboundendpointEC0509A3", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 142, + "startLine": 396, "startColumn": 5, - "endLine": 142, + "endLine": 396, "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Direction' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", + "logicalId": "OutboundEndpoint", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Route53Resolver::ResolverEndpoint" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Direction", "category": "Best Practice", - "startLine": 153, + "startLine": 407, "startColumn": 5, - "endLine": 153, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 407, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53resolver", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'SecurityGroupIds' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", + "logicalId": "OutboundEndpoint", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Route53Resolver::ResolverEndpoint" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.SecurityGroupIds", "category": "Best Practice", - "startLine": 156, + "startLine": 420, "startColumn": 5, - "endLine": 156, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 420, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53resolver", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", + "logicalId": "sginboundendpoint32081788", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 167, + "startLine": 436, "startColumn": 5, - "endLine": 167, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 436, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -69853,111 +71065,370 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", + "logicalId": "sginboundendpoint32081788", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 171, + "startLine": 460, "startColumn": 5, - "endLine": 171, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 460, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'" + "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Property 'Direction' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1NATGatewayE0556630", + "logicalId": "InboundEndpoint", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::Route53Resolver::ResolverEndpoint" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.Direction", "category": "Best Practice", - "startLine": 200, + "startLine": 471, "startColumn": 5, - "endLine": 200, - "endColumn": 18, + "endLine": 471, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53resolver", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt VPCPublicSubnet1EIP6AD938E8.AllocationId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'SecurityGroupIds' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1NATGatewayE0556630", + "logicalId": "InboundEndpoint", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::Route53Resolver::ResolverEndpoint" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.SecurityGroupIds", "category": "Best Practice", - "startLine": 206, + "startLine": 484, "startColumn": 5, - "endLine": 206, - "endColumn": 14, + "endLine": 484, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53resolver", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", + "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 227, + "startLine": 180, + "startColumn": 4, + "endLine": 180, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 252, + "startColumn": 4, + "endLine": 252, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BlockListC03D0423' of type 'AWS::Route53Resolver::FirewallDomainList' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "BlockListC03D0423", + "entityType": "Resource", + "resourceType": "AWS::Route53Resolver::FirewallDomainList" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 282, + "startColumn": 4, + "endLine": 282, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BlockListRuleGroup55F6B55D' of type 'AWS::Route53Resolver::FirewallRuleGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "BlockListRuleGroup55F6B55D", + "entityType": "Resource", + "resourceType": "AWS::Route53Resolver::FirewallRuleGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 294, + "startColumn": 4, + "endLine": 294, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BlockListRuleGroupDirectBlockListRuleGroupAssociation40E90DB0' of type 'AWS::Route53Resolver::FirewallRuleGroupAssociation' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "BlockListRuleGroupDirectBlockListRuleGroupAssociation40E90DB0", + "entityType": "Resource", + "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 315, + "startColumn": 4, + "endLine": 315, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'sgoutboundendpointEC0509A3' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "sgoutboundendpointEC0509A3", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 333, + "startColumn": 4, + "endLine": 333, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'OutboundEndpoint' of type 'AWS::Route53Resolver::ResolverEndpoint' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "OutboundEndpoint", + "entityType": "Resource", + "resourceType": "AWS::Route53Resolver::ResolverEndpoint" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 406, + "startColumn": 4, + "endLine": 406, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'sginboundendpoint32081788' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "sginboundendpoint32081788", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 435, + "startColumn": 4, + "endLine": 435, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'InboundEndpoint' of type 'AWS::Route53Resolver::ResolverEndpoint' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "InboundEndpoint", + "entityType": "Resource", + "resourceType": "AWS::Route53Resolver::ResolverEndpoint" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 470, + "startColumn": 4, + "endLine": 470, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/rekognition-lambda-s3-trigger--RekognitionLambdaS3TriggerStack.template.json": { + "filePath": "cdk/rekognition-lambda-s3-trigger--RekognitionLambdaS3TriggerStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 15, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 4, + "informational": 14, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "RekFunction9837D13D", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 310, "startColumn": 5, - "endLine": 227, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 310, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs20.x", + "lifecycle": "deprecated" } }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'RekFunctionServiceRole3947AEF4' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "RekFunction9837D13D", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 312, + "startColumn": 4, + "endLine": 312, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 428, + "startColumn": 4, + "endLine": 428, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 516, + "startColumn": 4, + "endLine": 516, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", + "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 235, + "startLine": 103, "startColumn": 5, - "endLine": 235, - "endColumn": 15, + "endLine": 103, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -69967,438 +71438,495 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", + "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 251, + "startLine": 104, "startColumn": 5, - "endLine": 251, - "endColumn": 11, + "endLine": 104, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "GetAtt RekFunction9837D13D.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1RouteTableBE8A6027", + "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 268, + "startLine": 110, "startColumn": 5, - "endLine": 268, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 110, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceAccount' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1RouteTableAssociation347902D1", + "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.SourceAccount", "category": "Best Practice", - "startLine": 279, + "startLine": 111, "startColumn": 5, - "endLine": 279, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 111, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet1RouteTableBE8A6027'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1RouteTableAssociation347902D1", + "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 282, + "startLine": 114, "startColumn": 5, - "endLine": 282, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 114, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet1Subnet8BCA10E0'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt Bucket83908E77.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1DefaultRouteAE1D6490", + "logicalId": "Classifications0C921F6C", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 293, + "startLine": 134, "startColumn": 5, - "endLine": 293, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 134, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Bucket83908E77' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1DefaultRouteAE1D6490", + "logicalId": "Bucket83908E77", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 297, - "startColumn": 5, - "endLine": 297, + "startLine": 3, + "startColumn": 3, + "endLine": 3, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet1RouteTableBE8A6027'" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Classifications0C921F6C' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCVPCGW99B986DC", + "logicalId": "Classifications0C921F6C", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 325, - "startColumn": 5, - "endLine": 325, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 127, + "startColumn": 4, + "endLine": 127, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Resource 'RekFunctionServiceRole3947AEF4' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroup0525485D", + "logicalId": "RekFunctionServiceRole3947AEF4", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 336, - "startColumn": 5, - "endLine": 336, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 153, + "startColumn": 4, + "endLine": 153, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'RekFunction9837D13D' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroup0525485D", + "logicalId": "RekFunction9837D13D", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 286, + "startColumn": 4, + "endLine": 286, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 350, - "startColumn": 5, + "startColumn": 4, "endLine": 350, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" - } + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", + "message": "Resource 'BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.IamInstanceProfile", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 400, - "startColumn": 5, - "endLine": 400, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ASGInstanceProfile0A2834D7'" - } + "startLine": 413, + "startColumn": 4, + "endLine": 413, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 403, - "startColumn": 5, - "endLine": 403, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 438, + "startColumn": 4, + "endLine": 438, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", + "entity": { + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 499, + "startColumn": 4, + "endLine": 499, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/resource-overrides--resource-overrides.template.json": { + "filePath": "cdk/resource-overrides--resource-overrides.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 21, + "counts": { + "fatal": 2, + "errors": 2, + "warnings": 4, + "informational": 31, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3002", + "severity": "FATAL", + "message": "Additional properties are not allowed ('Foo' was unexpected)", + "source": "SCHEMA", "entity": { "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 406, + "propertyPath": "Properties.Foo", + "category": "Schema", + "startLine": 418, "startColumn": 5, - "endLine": 406, - "endColumn": 18, + "endLine": 418, + "endColumn": 9, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "ruleDescription": "Additional properties are not allowed", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "property": "Foo", + "extra": { + "allowed_properties": [ + "AssociatePublicIpAddress", + "BlockDeviceMappings", + "ClassicLinkVPCId", + "ClassicLinkVPCSecurityGroups", + "EbsOptimized", + "IamInstanceProfile", + "ImageId", + "InstanceId", + "InstanceMonitoring", + "InstanceType", + "KernelId", + "KeyName", + "LaunchConfigurationName", + "MetadataOptions", + "PlacementTenancy", + "RamDiskId", + "SecurityGroups", + "SpotPrice", + "UserData" + ] + } } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3006", + "severity": "FATAL", + "message": "Unknown resource type 'AWS::S3::Bucketeer'", + "source": "SCHEMA", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "MyBucketF68F3FF0", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::S3::Bucketeer" }, - "propertyPath": "Properties.SecurityGroups", - "category": "Best Practice", - "startLine": 407, - "startColumn": 5, - "endLine": 407, + "category": "Schema", + "startLine": 11, + "startColumn": 3, + "endLine": 11, "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "ruleDescription": "AWS resource type must be recognized and available in the configured region", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "extra": { + "resource_type": "AWS::S3::Bucketeer" + } } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3001", + "severity": "ERROR", + "message": "Resource 'MyBucketF68F3FF0' has invalid property 'Transform'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", + "source": "CFN_LINT", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "MyBucketF68F3FF0", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::S3::Bucketeer" }, - "propertyPath": "Properties.UserData", + "category": "Resource", + "startLine": 78, + "startColumn": 4, + "endLine": 78, + "endColumn": 14, + "ruleDescription": "Basic CloudFormation Resource Check", + "phase": "PARSE" + }, + { + "ruleId": "E3016", + "severity": "ERROR", + "message": "UpdatePolicy is not supported on resource type 'AWS::S3::Bucketeer'", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyBucketF68F3FF0", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucketeer" + }, + "propertyPath": "UpdatePolicy", + "suggestedFix": "Remove UpdatePolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::ElastiCache::ReplicationGroup, AWS::Elasticsearch::Domain, AWS::Lambda::Alias, AWS::OpenSearchService::Domain", + "category": "Resource", + "startLine": 71, + "startColumn": 4, + "endLine": 71, + "endColumn": 17, + "ruleDescription": "Check UpdatePolicy values for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'Other34654A52' dependency already enforced by a 'GetAtt' at 'Properties.AnalyticsConfigurations.0.StorageClassAnalysis.DataExport.Destination.BucketArn'", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyBucketF68F3FF0", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucketeer" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 415, - "startColumn": 5, - "endLine": 415, + "startLine": 68, + "startColumn": 4, + "endLine": 68, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'Other34654A52' dependency already enforced by a 'GetAtt' at 'Properties.Token'", + "source": "CFN_LINT", "entity": { - "logicalId": "ASG46ED3070", + "logicalId": "MyBucketF68F3FF0", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::S3::Bucketeer" }, - "propertyPath": "Properties.LaunchConfigurationName", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 432, - "startColumn": 5, - "endLine": 432, - "endColumn": 29, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'ASGLaunchConfigC00AF12B'" - } + "startLine": 68, + "startColumn": 4, + "endLine": 68, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'Other34654A52' dependency already enforced by a 'Ref' at 'Properties.LoggingConfiguration.DestinationBucketName'", + "source": "CFN_LINT", "entity": { - "logicalId": "ASG46ED3070", + "logicalId": "MyBucketF68F3FF0", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::S3::Bucketeer" }, - "propertyPath": "Properties.VPCZoneIdentifier", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 444, - "startColumn": 5, - "endLine": 444, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 68, + "startColumn": 4, + "endLine": 68, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Other34654A52' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "source": "CFN_LINT", "entity": { - "logicalId": "Other34654A52", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 3, + "category": "Deprecation", + "startLine": 397, "startColumn": 3, - "endLine": 3, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/route53-resolver-dns-firewall--Route53ResolverDnsFirewallStack.template.json": { - "filePath": "cdk/route53-resolver-dns-firewall--Route53ResolverDnsFirewallStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 31, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 55, - "debug": 0 + "endLine": 397, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Vpc8378EB38", + "logicalId": "VPCB9E5F0B4", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 6, + "startLine": 83, "startColumn": 5, - "endLine": 6, + "endLine": 83, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -70412,15 +71940,15 @@ "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Vpc8378EB38", + "logicalId": "VPCB9E5F0B4", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 9, + "startLine": 86, "startColumn": 5, - "endLine": 9, + "endLine": 86, "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -70434,15 +71962,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "VPCPublicSubnet1SubnetB4246D30", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 24, + "startLine": 101, "startColumn": 5, - "endLine": 24, + "endLine": 101, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -70456,15 +71984,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "VPCPublicSubnet1SubnetB4246D30", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 32, + "startLine": 109, "startColumn": 5, - "endLine": 32, + "endLine": 109, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -70478,21 +72006,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "VPCPublicSubnet1SubnetB4246D30", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 48, + "startLine": 125, "startColumn": 5, - "endLine": 48, + "endLine": 125, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { @@ -70501,22 +72029,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTable6C95E38E", + "logicalId": "VPCPublicSubnet1RouteTableFEE4B781", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 65, + "startLine": 142, "startColumn": 5, - "endLine": 65, + "endLine": 142, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { @@ -70525,22 +72053,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", + "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 76, + "startLine": 153, "startColumn": 5, - "endLine": 76, + "endLine": 153, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'", + "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'", "extra": { "replacement_strategy": "delete_then_create" } @@ -70552,22 +72080,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", + "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 79, + "startLine": 156, "startColumn": 5, - "endLine": 79, + "endLine": 156, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'", + "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'", "extra": { "replacement_strategy": "delete_then_create" } @@ -70579,15 +72107,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", + "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 90, + "startLine": 167, "startColumn": 5, - "endLine": 90, + "endLine": 167, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -70602,22 +72130,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", + "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 94, + "startLine": 171, "startColumn": 5, - "endLine": 94, + "endLine": 171, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'" + "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'" } }, { @@ -70626,21 +72154,21 @@ "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", + "logicalId": "VPCPublicSubnet1NATGatewayE0556630", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 123, + "startLine": 200, "startColumn": 5, - "endLine": 123, + "endLine": 200, "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcPublicSubnet1EIPD7E02669.AllocationId" + "resolutionSource": "GetAtt VPCPublicSubnet1EIP6AD938E8.AllocationId" } }, { @@ -70649,21 +72177,21 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", + "logicalId": "VPCPublicSubnet1NATGatewayE0556630", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 129, + "startLine": 206, "startColumn": 5, - "endLine": 129, + "endLine": 206, "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'" + "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'" } }, { @@ -70672,15 +72200,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 150, + "startLine": 227, "startColumn": 5, - "endLine": 150, + "endLine": 227, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -70694,15 +72222,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 158, + "startLine": 235, "startColumn": 5, - "endLine": 158, + "endLine": 235, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -70716,21 +72244,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 174, + "startLine": 251, "startColumn": 5, - "endLine": 174, + "endLine": 251, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { @@ -70739,22 +72267,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTable94F7E489", + "logicalId": "VPCPrivateSubnet1RouteTableBE8A6027", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 191, + "startLine": 268, "startColumn": 5, - "endLine": 191, + "endLine": 268, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { @@ -70763,22 +72291,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "logicalId": "VPCPrivateSubnet1RouteTableAssociation347902D1", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 202, + "startLine": 279, "startColumn": 5, - "endLine": 202, + "endLine": 279, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'", + "resolutionSource": "Ref to 'VPCPrivateSubnet1RouteTableBE8A6027'", "extra": { "replacement_strategy": "delete_then_create" } @@ -70790,22 +72318,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "logicalId": "VPCPrivateSubnet1RouteTableAssociation347902D1", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 205, + "startLine": 282, "startColumn": 5, - "endLine": 205, + "endLine": 282, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'", + "resolutionSource": "Ref to 'VPCPrivateSubnet1Subnet8BCA10E0'", "extra": { "replacement_strategy": "delete_then_create" } @@ -70817,15 +72345,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", + "logicalId": "VPCPrivateSubnet1DefaultRouteAE1D6490", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 216, + "startLine": 293, "startColumn": 5, - "endLine": 216, + "endLine": 293, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -70840,85 +72368,66 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", + "logicalId": "VPCPrivateSubnet1DefaultRouteAE1D6490", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 220, + "startLine": 297, "startColumn": 5, - "endLine": 220, + "endLine": 297, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VpcPublicSubnet2NATGateway9182C01D", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.AllocationId", - "category": "Best Practice", - "startLine": 249, - "startColumn": 5, - "endLine": 249, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcPublicSubnet2EIP3C605A87.AllocationId" + "resolutionSource": "Ref to 'VPCPrivateSubnet1RouteTableBE8A6027'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2NATGateway9182C01D", + "logicalId": "VPCVPCGW99B986DC", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 255, + "startLine": 325, "startColumn": 5, - "endLine": 255, - "endColumn": 14, + "endLine": 325, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "ASGInstanceSecurityGroup0525485D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 276, + "startLine": 336, "startColumn": 5, - "endLine": 276, + "endLine": 336, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -70926,146 +72435,70 @@ "lifecycle": "create-only" } }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 284, - "startColumn": 5, - "endLine": 284, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 300, - "startColumn": 5, - "endLine": 300, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } - }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableB2C5B500", + "logicalId": "ASGInstanceSecurityGroup0525485D", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 317, + "startLine": 350, "startColumn": 5, - "endLine": 317, + "endLine": 350, "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 328, - "startColumn": 5, - "endLine": 328, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.IamInstanceProfile", "category": "Best Practice", - "startLine": 331, + "startLine": 400, "startColumn": 5, - "endLine": 331, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 400, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1Subnet536B997A'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "Ref to 'ASGInstanceProfile0A2834D7'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 342, + "startLine": 403, "startColumn": 5, - "endLine": 342, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 403, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -71075,43 +72508,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 346, + "startLine": 406, "startColumn": 5, - "endLine": 346, + "endLine": 406, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 357, - "startColumn": 5, - "endLine": 357, - "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -71121,19 +72531,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.SecurityGroups", "category": "Best Practice", - "startLine": 365, + "startLine": 407, "startColumn": 5, - "endLine": 365, - "endColumn": 15, + "endLine": 407, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -71143,121 +72554,126 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'UserData' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 381, + "startLine": 415, "startColumn": 5, - "endLine": 381, - "endColumn": 11, + "endLine": 415, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableA678073B", + "logicalId": "ASG46ED3070", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.LaunchConfigurationName", "category": "Best Practice", - "startLine": 398, + "startLine": 432, "startColumn": 5, - "endLine": 398, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 432, + "endColumn": 29, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'ASGLaunchConfigC00AF12B'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", + "logicalId": "ASG46ED3070", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.VPCZoneIdentifier", "category": "Best Practice", - "startLine": 409, + "startLine": 444, "startColumn": 5, - "endLine": 409, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 444, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Other34654A52' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", + "logicalId": "Other34654A52", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 412, - "startColumn": 5, - "endLine": 412, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2Subnet3788AAA1'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/route53-resolver-dns-firewall--Route53ResolverDnsFirewallStack.template.json": { + "filePath": "cdk/route53-resolver-dns-firewall--Route53ResolverDnsFirewallStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 31, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 55, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", + "logicalId": "Vpc8378EB38", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 423, + "startLine": 6, "startColumn": 5, - "endLine": 423, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 6, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -71267,71 +72683,63 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", + "logicalId": "Vpc8378EB38", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 427, + "startLine": 9, "startColumn": 5, - "endLine": 427, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 9, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcVPCGWBF912B6E", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 455, + "startLine": 24, "startColumn": 5, - "endLine": 455, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "endLine": 24, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DNSFirewallLogGroupF0EEB7D4", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 466, + "startLine": 32, "startColumn": 5, - "endLine": 466, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "endLine": 32, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -71341,110 +72749,121 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationArn' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DNSLogsConfig", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfig" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.DestinationArn", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 478, + "startLine": 48, "startColumn": 5, - "endLine": 478, - "endColumn": 20, + "endLine": 48, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt DNSFirewallLogGroupF0EEB7D4.Arn" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DNSLogsConfig", + "logicalId": "VpcPublicSubnet1RouteTable6C95E38E", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfig" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 484, + "startLine": 65, "startColumn": 5, - "endLine": 484, - "endColumn": 10, + "endLine": 65, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResolverQueryLogConfigId' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DNSLogAssoc", + "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.ResolverQueryLogConfigId", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 493, + "startLine": 76, "startColumn": 5, - "endLine": 493, - "endColumn": 30, + "endLine": 76, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'DNSLogsConfig'" + "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DNSLogAssoc", + "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 496, + "startLine": 79, "startColumn": 5, - "endLine": 496, - "endColumn": 16, + "endLine": 79, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AllowedDomainList", + "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallDomainList" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 510, + "startLine": 90, "startColumn": 5, - "endLine": 510, - "endColumn": 10, + "endLine": 90, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -71454,404 +72873,235 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BlockedDomainList", + "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallDomainList" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 523, + "startLine": 94, "startColumn": 5, - "endLine": 523, - "endColumn": 10, + "endLine": 94, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DNSRuleGroup", + "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallRuleGroup" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 549, + "startLine": 123, "startColumn": 5, - "endLine": 549, - "endColumn": 10, + "endLine": 123, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt VpcPublicSubnet1EIPD7E02669.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FirewallRuleGroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FirewallRuleGroupAssociation", + "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.FirewallRuleGroupId", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 558, + "startLine": 129, "startColumn": 5, - "endLine": 558, - "endColumn": 25, + "endLine": 129, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'DNSRuleGroup'" + "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FirewallRuleGroupAssociation", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 563, + "startLine": 150, "startColumn": 5, - "endLine": 563, - "endColumn": 11, + "endLine": 150, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DNSFirewallLogGroupF0EEB7D4' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "DNSFirewallLogGroupF0EEB7D4", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 465, - "startColumn": 4, - "endLine": 465, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DNSLogsConfig' of type 'AWS::Route53Resolver::ResolverQueryLoggingConfig' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "DNSLogsConfig", - "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfig" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 477, - "startColumn": 4, - "endLine": 477, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'AllowedDomainList' of type 'AWS::Route53Resolver::FirewallDomainList' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "AllowedDomainList", - "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallDomainList" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 506, - "startColumn": 4, - "endLine": 506, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BlockedDomainList' of type 'AWS::Route53Resolver::FirewallDomainList' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BlockedDomainList", - "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallDomainList" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 518, - "startColumn": 4, - "endLine": 518, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DNSRuleGroup' of type 'AWS::Route53Resolver::FirewallRuleGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "DNSRuleGroup", - "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallRuleGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 531, - "startColumn": 4, - "endLine": 531, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FirewallRuleGroupAssociation' of type 'AWS::Route53Resolver::FirewallRuleGroupAssociation' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FirewallRuleGroupAssociation", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 557, - "startColumn": 4, - "endLine": 557, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/s3-object-lambda--S3ObjectLambdaStack.template.json": { - "filePath": "cdk/s3-object-lambda--S3ObjectLambdaStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 9, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 3, - "informational": 12, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "retrieveTransformedObjectLambdaD5D6532C", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 155, + "startLine": 158, "startColumn": 5, - "endLine": 155, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 158, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs20.x", - "lifecycle": "deprecated" - } - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'retrieveTransformedObjectLambdaServiceRole27FF342E' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "retrieveTransformedObjectLambdaD5D6532C", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 157, - "startColumn": 4, - "endLine": 157, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3045", - "severity": "WARN", - "message": "AccessControl property is deprecated. Use bucket policies instead", - "source": "CFN_LINT", - "entity": { - "logicalId": "examplebucketC9DFA43E", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.AccessControl", - "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", - "category": "Deprecation", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 19, - "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", - "phase": "LINT", - "context": { - "actualValue": "BucketOwnerFullControl" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "examplebucketPolicyE09B485E", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 32, + "startLine": 174, "startColumn": 5, - "endLine": 32, - "endColumn": 12, + "endLine": 174, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'examplebucketC9DFA43E'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "retrieveTransformedObjectLambdainvocationRestrictionD58B0218", + "logicalId": "VpcPublicSubnet2RouteTable94F7E489", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 171, + "startLine": 191, "startColumn": 5, - "endLine": 171, - "endColumn": 12, + "endLine": 191, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "retrieveTransformedObjectLambdainvocationRestrictionD58B0218", + "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 172, + "startLine": 202, "startColumn": 5, - "endLine": 172, + "endLine": 202, "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt retrieveTransformedObjectLambdaD5D6532C.Arn" + "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "retrieveTransformedObjectLambdainvocationRestrictionD58B0218", + "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 178, + "startLine": 205, "startColumn": 5, - "endLine": 178, - "endColumn": 15, + "endLine": 205, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceAccount' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "retrieveTransformedObjectLambdainvocationRestrictionD58B0218", + "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.SourceAccount", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 181, + "startLine": 216, "startColumn": 5, - "endLine": 181, - "endColumn": 19, + "endLine": 216, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -71861,277 +73111,235 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "exampleBucketAP", + "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", "entityType": "Resource", - "resourceType": "AWS::S3::AccessPoint" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 192, + "startLine": 220, "startColumn": 5, - "endLine": 192, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-s3", + "endLine": 220, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'examplebucketC9DFA43E'" + "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "exampleBucketAP", + "logicalId": "VpcPublicSubnet2NATGateway9182C01D", "entityType": "Resource", - "resourceType": "AWS::S3::AccessPoint" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 195, + "startLine": 249, "startColumn": 5, - "endLine": 195, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-s3", + "endLine": 249, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt VpcPublicSubnet2EIP3C605A87.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "s3ObjectLambdaAP", + "logicalId": "VpcPublicSubnet2NATGateway9182C01D", "entityType": "Resource", - "resourceType": "AWS::S3ObjectLambda::AccessPoint" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 238, + "startLine": 255, "startColumn": 5, - "endLine": 238, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 255, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'examplebucketC9DFA43E' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "examplebucketC9DFA43E", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'retrieveTransformedObjectLambdaServiceRole27FF342E' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "retrieveTransformedObjectLambdaServiceRole27FF342E", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 83, - "startColumn": 4, - "endLine": 83, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 276, + "startColumn": 5, + "endLine": 276, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'retrieveTransformedObjectLambdaD5D6532C' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "retrieveTransformedObjectLambdaD5D6532C", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 141, - "startColumn": 4, - "endLine": 141, + "startLine": 284, + "startColumn": 5, + "endLine": 284, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'exampleBucketAP' of type 'AWS::S3::AccessPoint' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "exampleBucketAP", - "entityType": "Resource", - "resourceType": "AWS::S3::AccessPoint" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 191, - "startColumn": 4, - "endLine": 191, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/ssm-document-association--SsmDocumentAssociationStack.template.json": { - "filePath": "cdk/ssm-document-association--SsmDocumentAssociationStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 17, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 28, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 316, - "startColumn": 4, - "endLine": 316, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 300, + "startColumn": 5, + "endLine": 300, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Content' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TimeWriterDocument", + "logicalId": "VpcPrivateSubnet1RouteTableB2C5B500", "entityType": "Resource", - "resourceType": "AWS::SSM::Document" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Content", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 6, + "startLine": 317, "startColumn": 5, - "endLine": 6, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", + "endLine": 317, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DocumentType' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TimeWriterDocument", + "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", "entityType": "Resource", - "resourceType": "AWS::SSM::Document" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.DocumentType", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 36, + "startLine": 328, "startColumn": 5, - "endLine": 36, + "endLine": 328, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TimeWriterDocument", + "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", "entityType": "Resource", - "resourceType": "AWS::SSM::Document" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 37, + "startLine": 331, "startColumn": 5, - "endLine": 37, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", + "endLine": 331, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet1Subnet536B997A'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpc2979FA29", + "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 71, + "startLine": 342, "startColumn": 5, - "endLine": 71, - "endColumn": 15, + "endLine": 342, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -72141,23 +73349,25 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpc2979FA29", + "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 74, + "startLine": 346, "startColumn": 5, - "endLine": 74, - "endColumn": 21, + "endLine": 346, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'" } }, { @@ -72166,15 +73376,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 89, + "startLine": 357, "startColumn": 5, - "endLine": 89, + "endLine": 357, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -72188,15 +73398,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 97, + "startLine": 365, "startColumn": 5, - "endLine": 97, + "endLine": 365, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -72210,21 +73420,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 113, + "startLine": 381, "startColumn": 5, - "endLine": 113, + "endLine": 381, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SSMDocumentTestVpc2979FA29'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -72233,22 +73443,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpcpublicSubnet1RouteTable4C0F352E", + "logicalId": "VpcPrivateSubnet2RouteTableA678073B", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 130, + "startLine": 398, "startColumn": 5, - "endLine": 130, + "endLine": 398, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SSMDocumentTestVpc2979FA29'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -72257,22 +73467,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpcpublicSubnet1RouteTableAssociation3C51BE77", + "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 141, + "startLine": 409, "startColumn": 5, - "endLine": 141, + "endLine": 409, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SSMDocumentTestVpcpublicSubnet1RouteTable4C0F352E'", + "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'", "extra": { "replacement_strategy": "delete_then_create" } @@ -72284,22 +73494,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpcpublicSubnet1RouteTableAssociation3C51BE77", + "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 144, + "startLine": 412, "startColumn": 5, - "endLine": 144, + "endLine": 412, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E'", + "resolutionSource": "Ref to 'VpcPrivateSubnet2Subnet3788AAA1'", "extra": { "replacement_strategy": "delete_then_create" } @@ -72311,15 +73521,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpcpublicSubnet1DefaultRouteE60C709F", + "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 155, + "startLine": 423, "startColumn": 5, - "endLine": 155, + "endLine": 423, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -72334,22 +73544,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpcpublicSubnet1DefaultRouteE60C709F", + "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 159, + "startLine": 427, "startColumn": 5, - "endLine": 159, + "endLine": 427, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SSMDocumentTestVpcpublicSubnet1RouteTable4C0F352E'" + "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'" } }, { @@ -72358,22 +73568,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpcVPCGW7C58FC59", + "logicalId": "VpcVPCGWBF912B6E", "entityType": "Resource", "resourceType": "AWS::EC2::VPCGatewayAttachment" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 190, + "startLine": 455, "startColumn": 5, - "endLine": 190, + "endLine": 455, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SSMDocumentTestVpc2979FA29'", + "resolutionSource": "Ref to 'Vpc8378EB38'", "extra": { "replacement_strategy": "delete_then_create" } @@ -72382,19 +73592,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMTestInstanceInstanceSecurityGroup68B5BAFB", + "logicalId": "DNSFirewallLogGroupF0EEB7D4", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 362, + "startLine": 466, "startColumn": 5, - "endLine": 362, - "endColumn": 22, + "endLine": 466, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -72404,43 +73615,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMTestInstanceInstanceSecurityGroup68B5BAFB", + "logicalId": "DNSLogsConfig", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfig" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.DestinationArn", "category": "Best Practice", - "startLine": 380, + "startLine": 478, "startColumn": 5, - "endLine": 380, - "endColumn": 11, + "endLine": 478, + "endColumn": 20, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SSMDocumentTestVpc2979FA29'" + "resolutionSource": "GetAtt DNSFirewallLogGroupF0EEB7D4.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMTestInstanceA55C9969", + "logicalId": "DNSLogsConfig", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfig" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 404, + "startLine": 484, "startColumn": 5, - "endLine": 404, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 484, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -72450,20 +73660,65 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'ResolverQueryLogConfigId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMTestInstanceA55C9969", + "logicalId": "DNSLogAssoc", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.ResolverQueryLogConfigId", "category": "Best Practice", - "startLine": 415, + "startLine": 493, "startColumn": 5, - "endLine": 415, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 493, + "endColumn": 30, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'DNSLogsConfig'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "DNSLogAssoc", + "entityType": "Resource", + "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation" + }, + "propertyPath": "Properties.ResourceId", + "category": "Best Practice", + "startLine": 496, + "startColumn": 5, + "endLine": 496, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AllowedDomainList", + "entityType": "Resource", + "resourceType": "AWS::Route53Resolver::FirewallDomainList" + }, + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 510, + "startColumn": 5, + "endLine": 510, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -72473,121 +73728,129 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMTestInstanceA55C9969", + "logicalId": "BlockedDomainList", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Route53Resolver::FirewallDomainList" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 418, + "startLine": 523, "startColumn": 5, - "endLine": 418, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 523, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMTestInstanceA55C9969", + "logicalId": "DNSRuleGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Route53Resolver::FirewallRuleGroup" }, - "propertyPath": "Properties.SecurityGroupIds", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 419, + "startLine": 549, "startColumn": 5, - "endLine": 419, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 549, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'FirewallRuleGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMTestInstanceA55C9969", + "logicalId": "FirewallRuleGroupAssociation", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.FirewallRuleGroupId", "category": "Best Practice", - "startLine": 427, + "startLine": 558, "startColumn": 5, - "endLine": 427, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 558, + "endColumn": 25, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E'" + "resolutionSource": "Ref to 'DNSRuleGroup'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMTestInstanceA55C9969", + "logicalId": "FirewallRuleGroupAssociation", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 440, + "startLine": 563, "startColumn": 5, - "endLine": 440, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 563, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { - "ruleId": "I9003", + "ruleId": "I9040", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "message": "Resource 'DNSFirewallLogGroupF0EEB7D4' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", + "entity": { + "logicalId": "DNSFirewallLogGroupF0EEB7D4", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "startLine": 465, + "startColumn": 4, + "endLine": 465, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TimeWriterDocument' of type 'AWS::SSM::Document' supports Tags but none are configured", + "message": "Resource 'DNSLogsConfig' of type 'AWS::Route53Resolver::ResolverQueryLoggingConfig' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TimeWriterDocument", + "logicalId": "DNSLogsConfig", "entityType": "Resource", - "resourceType": "AWS::SSM::Document" + "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfig" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 477, "startColumn": 4, - "endLine": 5, + "endLine": 477, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -72595,19 +73858,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DocumentAssociation' of type 'AWS::SSM::Association' supports Tags but none are configured", + "message": "Resource 'AllowedDomainList' of type 'AWS::Route53Resolver::FirewallDomainList' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DocumentAssociation", + "logicalId": "AllowedDomainList", "entityType": "Resource", - "resourceType": "AWS::SSM::Association" + "resourceType": "AWS::Route53Resolver::FirewallDomainList" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 45, + "startLine": 506, "startColumn": 4, - "endLine": 45, + "endLine": 506, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -72615,19 +73878,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'BlockedDomainList' of type 'AWS::Route53Resolver::FirewallDomainList' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0", + "logicalId": "BlockedDomainList", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Route53Resolver::FirewallDomainList" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 225, + "startLine": 518, "startColumn": 4, - "endLine": 225, + "endLine": 518, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -72635,19 +73898,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'DNSRuleGroup' of type 'AWS::Route53Resolver::FirewallRuleGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", + "logicalId": "DNSRuleGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Route53Resolver::FirewallRuleGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 297, + "startLine": 531, "startColumn": 4, - "endLine": 297, + "endLine": 531, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -72655,19 +73918,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EC2SSMRole1C0EBD7B' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'FirewallRuleGroupAssociation' of type 'AWS::Route53Resolver::FirewallRuleGroupAssociation' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EC2SSMRole1C0EBD7B", + "logicalId": "FirewallRuleGroupAssociation", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 327, + "startLine": 557, "startColumn": 4, - "endLine": 327, + "endLine": 557, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" diff --git a/src/resources/expected/validation_reports5.json b/src/resources/expected/validation_reports5.json index 79287e18..4a7bc1e5 100644 --- a/src/resources/expected/validation_reports5.json +++ b/src/resources/expected/validation_reports5.json @@ -1,14 +1,14 @@ { - "cdk/static-site-basic--MyStaticSite.template.json": { - "filePath": "cdk/static-site-basic--MyStaticSite.template.json", + "cdk/s3-object-lambda--S3ObjectLambdaStack.template.json": { + "filePath": "cdk/s3-object-lambda--S3ObjectLambdaStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 11, + "resourcesScanned": 9, "counts": { "fatal": 0, "errors": 0, - "warnings": 2, - "informational": 7, + "warnings": 3, + "informational": 12, "debug": 0 }, "suppressed": 0, @@ -17,85 +17,110 @@ }, "diagnostics": [ { - "ruleId": "W3005", + "ruleId": "W2531", "severity": "WARN", - "message": "'CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "logicalId": "retrieveTransformedObjectLambdaD5D6532C", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 235, - "startColumn": 4, - "endLine": 235, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 155, + "startColumn": 5, + "endLine": 155, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs20.x", + "lifecycle": "deprecated" + } }, { "ruleId": "W3005", "severity": "WARN", - "message": "'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'retrieveTransformedObjectLambdaServiceRole27FF342E' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", + "logicalId": "retrieveTransformedObjectLambdaD5D6532C", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 404, + "startLine": 157, "startColumn": 4, - "endLine": 404, + "endLine": 157, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W3045", + "severity": "WARN", + "message": "AccessControl property is deprecated. Use bucket policies instead", + "source": "CFN_LINT", + "entity": { + "logicalId": "examplebucketC9DFA43E", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.AccessControl", + "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", + "category": "Deprecation", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 19, + "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", + "phase": "LINT", + "context": { + "actualValue": "BucketOwnerFullControl" + } + }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StaticSiteBasicWebsiteBucketPolicy8E799A1F", + "logicalId": "examplebucketPolicyE09B485E", "entityType": "Resource", "resourceType": "AWS::S3::BucketPolicy" }, "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 35, + "startLine": 32, "startColumn": 5, - "endLine": 35, + "endLine": 32, "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'StaticSiteBasicWebsiteBucket3BB70B77'" + "resolutionSource": "Ref to 'examplebucketC9DFA43E'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Content' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StaticSiteBasicDeployWebsiteAwsCliLayer198D4134", + "logicalId": "retrieveTransformedObjectLambdainvocationRestrictionD58B0218", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Content", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 133, + "startLine": 171, "startColumn": 5, - "endLine": 133, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "endLine": 171, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -105,20 +130,134 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StaticSiteBasicDeployWebsiteAwsCliLayer198D4134", + "logicalId": "retrieveTransformedObjectLambdainvocationRestrictionD58B0218", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Description", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 139, + "startLine": 172, "startColumn": 5, - "endLine": 139, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "endLine": 172, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt retrieveTransformedObjectLambdaD5D6532C.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "retrieveTransformedObjectLambdainvocationRestrictionD58B0218", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 178, + "startColumn": 5, + "endLine": 178, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SourceAccount' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "retrieveTransformedObjectLambdainvocationRestrictionD58B0218", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.SourceAccount", + "category": "Best Practice", + "startLine": 181, + "startColumn": 5, + "endLine": 181, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "exampleBucketAP", + "entityType": "Resource", + "resourceType": "AWS::S3::AccessPoint" + }, + "propertyPath": "Properties.Bucket", + "category": "Best Practice", + "startLine": 192, + "startColumn": 5, + "endLine": 192, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-s3", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'examplebucketC9DFA43E'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "exampleBucketAP", + "entityType": "Resource", + "resourceType": "AWS::S3::AccessPoint" + }, + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 195, + "startColumn": 5, + "endLine": 195, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-s3", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "s3ObjectLambdaAP", + "entityType": "Resource", + "resourceType": "AWS::S3ObjectLambda::AccessPoint" + }, + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 238, + "startColumn": 5, + "endLine": 238, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -128,19 +267,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'examplebucketC9DFA43E' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "logicalId": "examplebucketC9DFA43E", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 180, + "startLine": 5, "startColumn": 4, - "endLine": 180, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -148,19 +287,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'retrieveTransformedObjectLambdaServiceRole27FF342E' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "logicalId": "retrieveTransformedObjectLambdaServiceRole27FF342E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 205, + "startLine": 83, "startColumn": 4, - "endLine": 205, + "endLine": 83, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -168,19 +307,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'retrieveTransformedObjectLambdaD5D6532C' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", + "logicalId": "retrieveTransformedObjectLambdaD5D6532C", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 246, + "startLine": 141, "startColumn": 4, - "endLine": 246, + "endLine": 141, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -188,35 +327,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'exampleBucketAP' of type 'AWS::S3::AccessPoint' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", + "logicalId": "exampleBucketAP", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::AccessPoint" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 377, + "startLine": 191, "startColumn": 4, - "endLine": 377, + "endLine": 191, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/stepfunction-external-definition--StepfunctionExternalDefinitionStack.template.json": { - "filePath": "cdk/stepfunction-external-definition--StepfunctionExternalDefinitionStack.template.json", + "cdk/ssm-document-association--SsmDocumentAssociationStack.template.json": { + "filePath": "cdk/ssm-document-association--SsmDocumentAssociationStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 12, + "resourcesScanned": 17, "counts": { "fatal": 0, "errors": 0, "warnings": 1, - "informational": 17, + "informational": 28, "debug": 0 }, "suppressed": 0, @@ -227,19 +366,19 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'MyStateMachineRoleD59FFEBC' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", + "message": "'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "MyStateMachine6C968CA5", + "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 109, + "startLine": 316, "startColumn": 4, - "endLine": 109, + "endLine": 316, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -247,43 +386,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'Content' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyStateMachineLogGroup9955D1FE", + "logicalId": "TimeWriterDocument", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::SSM::Document" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.Content", "category": "Best Practice", "startLine": 6, "startColumn": 5, "endLine": 6, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StateMachineType' is create-only; updating it will cause resource replacement", + "message": "Property 'DocumentType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyStateMachine6C968CA5", + "logicalId": "TimeWriterDocument", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::SSM::Document" }, - "propertyPath": "Properties.StateMachineType", + "propertyPath": "Properties.DocumentType", "category": "Best Practice", - "startLine": 107, + "startLine": 36, "startColumn": 5, - "endLine": 107, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-stepfunctions.git", + "endLine": 36, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -293,115 +432,108 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiDeployment77C863276f473a57d5bd4cb772b382f83651c7a2", + "logicalId": "TimeWriterDocument", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::SSM::Document" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 138, + "startLine": 37, "startColumn": 5, - "endLine": 138, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 37, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'StepFuncApiE896FCA7'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiDeploymentStageprod5FF8FD8E", + "logicalId": "SSMDocumentTestVpc2979FA29", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 157, + "startLine": 71, "startColumn": 5, - "endLine": 157, + "endLine": 71, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'StepFuncApiE896FCA7'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiDeploymentStageprod5FF8FD8E", + "logicalId": "SSMDocumentTestVpc2979FA29", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 160, + "startLine": 74, "startColumn": 5, - "endLine": 160, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 74, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiorders391C1FA5", + "logicalId": "SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 169, + "startLine": 89, "startColumn": 5, - "endLine": 169, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 89, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt StepFuncApiE896FCA7.RootResourceId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiorders391C1FA5", + "logicalId": "SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 175, + "startLine": 97, "startColumn": 5, - "endLine": 175, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 97, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -411,352 +543,380 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiorders391C1FA5", + "logicalId": "SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 176, + "startLine": 113, "startColumn": 5, - "endLine": 176, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 113, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'StepFuncApiE896FCA7'" + "resolutionSource": "Ref to 'SSMDocumentTestVpc2979FA29'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiordersGET0318ABB9", + "logicalId": "SSMDocumentTestVpcpublicSubnet1RouteTable4C0F352E", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 234, + "startLine": 130, "startColumn": 5, - "endLine": 234, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 130, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SSMDocumentTestVpc2979FA29'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiordersGET0318ABB9", + "logicalId": "SSMDocumentTestVpcpublicSubnet1RouteTableAssociation3C51BE77", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 318, + "startLine": 141, "startColumn": 5, - "endLine": 318, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 141, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'StepFuncApiorders391C1FA5'" + "resolutionSource": "Ref to 'SSMDocumentTestVpcpublicSubnet1RouteTable4C0F352E'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiordersGET0318ABB9", + "logicalId": "SSMDocumentTestVpcpublicSubnet1RouteTableAssociation3C51BE77", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 321, + "startLine": 144, "startColumn": 5, - "endLine": 321, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 144, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'StepFuncApiE896FCA7'" + "resolutionSource": "Ref to 'SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyStateMachineLogGroup9955D1FE' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyStateMachineLogGroup9955D1FE", + "logicalId": "SSMDocumentTestVpcpublicSubnet1DefaultRouteE60C709F", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 155, + "startColumn": 5, + "endLine": 155, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyStateMachineRoleD59FFEBC' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyStateMachineRoleD59FFEBC", + "logicalId": "SSMDocumentTestVpcpublicSubnet1DefaultRouteE60C709F", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 17, - "startColumn": 4, - "endLine": 17, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 159, + "startColumn": 5, + "endLine": 159, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SSMDocumentTestVpcpublicSubnet1RouteTable4C0F352E'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyStateMachine6C968CA5' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyStateMachine6C968CA5", + "logicalId": "SSMDocumentTestVpcVPCGW7C58FC59", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 83, - "startColumn": 4, - "endLine": 83, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 190, + "startColumn": 5, + "endLine": 190, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SSMDocumentTestVpc2979FA29'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'StepFuncApiE896FCA7' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiE896FCA7", + "logicalId": "SSMTestInstanceInstanceSecurityGroup68B5BAFB", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 121, - "startColumn": 4, - "endLine": 121, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 362, + "startColumn": 5, + "endLine": 362, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'StepFuncApiDeploymentStageprod5FF8FD8E' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiDeploymentStageprod5FF8FD8E", + "logicalId": "SSMTestInstanceInstanceSecurityGroup68B5BAFB", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 153, - "startColumn": 4, - "endLine": 153, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 380, + "startColumn": 5, + "endLine": 380, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SSMDocumentTestVpc2979FA29'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'StepFuncApiordersGETStartSyncExecutionRole90998151' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiordersGETStartSyncExecutionRole90998151", + "logicalId": "SSMTestInstanceA55C9969", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 186, - "startColumn": 4, - "endLine": 186, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/stepfunctions-job-poller--aws-stepfunctions-integ.template.json": { - "filePath": "cdk/stepfunctions-job-poller--aws-stepfunctions-integ.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 11, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 5, - "informational": 8, - "debug": 0 + "startLine": 404, + "startColumn": 5, + "endLine": 404, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CheckLambda9CBBF9BA", + "logicalId": "SSMTestInstanceA55C9969", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 50, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 415, "startColumn": 5, - "endLine": 50, + "endLine": 415, "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.9", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SubmitLambda8054545E", + "logicalId": "SSMTestInstanceA55C9969", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 107, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 418, "startColumn": 5, - "endLine": 107, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 418, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.9", - "lifecycle": "deprecated" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'CheckLambdaServiceRole74B86E23' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CheckLambda9CBBF9BA", + "logicalId": "SSMTestInstanceA55C9969", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.SecurityGroupIds", "category": "Best Practice", - "startLine": 53, - "startColumn": 4, - "endLine": 53, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 419, + "startColumn": 5, + "endLine": 419, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'SubmitLambdaServiceRole98C85C39' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SubmitLambda8054545E", + "logicalId": "SSMTestInstanceA55C9969", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 110, - "startColumn": 4, - "endLine": 110, + "startLine": 427, + "startColumn": 5, + "endLine": 427, "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E'" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'CronStateMachineRoleFE85923B' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CronStateMachine7E50955B", + "logicalId": "SSMTestInstanceA55C9969", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 259, - "startColumn": 4, - "endLine": 259, + "startLine": 440, + "startColumn": 5, + "endLine": 440, "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CheckLambdaServiceRole74B86E23' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'TimeWriterDocument' of type 'AWS::SSM::Document' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CheckLambdaServiceRole74B86E23", + "logicalId": "TimeWriterDocument", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::SSM::Document" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -771,19 +931,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CheckLambda9CBBF9BA' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'DocumentAssociation' of type 'AWS::SSM::Association' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CheckLambda9CBBF9BA", + "logicalId": "DocumentAssociation", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SSM::Association" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 39, + "startLine": 45, "startColumn": 4, - "endLine": 39, + "endLine": 45, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -791,19 +951,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SubmitLambdaServiceRole98C85C39' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubmitLambdaServiceRole98C85C39", + "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 62, + "startLine": 225, "startColumn": 4, - "endLine": 62, + "endLine": 225, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -811,19 +971,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SubmitLambda8054545E' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubmitLambda8054545E", + "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 96, + "startLine": 297, "startColumn": 4, - "endLine": 96, + "endLine": 297, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -831,39 +991,167 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CronStateMachineRoleFE85923B' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'EC2SSMRole1C0EBD7B' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CronStateMachineRoleFE85923B", + "logicalId": "EC2SSMRole1C0EBD7B", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 119, + "startLine": 327, "startColumn": 4, - "endLine": 119, + "endLine": 327, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "cdk/static-site-basic--MyStaticSite.template.json": { + "filePath": "cdk/static-site-basic--MyStaticSite.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 11, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 7, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CronStateMachine7E50955B' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "CronStateMachine7E50955B", + "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 210, + "startLine": 235, "startColumn": 4, - "endLine": 210, + "endLine": 235, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 404, + "startColumn": 4, + "endLine": 404, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "StaticSiteBasicWebsiteBucketPolicy8E799A1F", + "entityType": "Resource", + "resourceType": "AWS::S3::BucketPolicy" + }, + "propertyPath": "Properties.Bucket", + "category": "Best Practice", + "startLine": 35, + "startColumn": 5, + "endLine": 35, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'StaticSiteBasicWebsiteBucket3BB70B77'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Content' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "StaticSiteBasicDeployWebsiteAwsCliLayer198D4134", + "entityType": "Resource", + "resourceType": "AWS::Lambda::LayerVersion" + }, + "propertyPath": "Properties.Content", + "category": "Best Practice", + "startLine": 133, + "startColumn": 5, + "endLine": 133, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "StaticSiteBasicDeployWebsiteAwsCliLayer198D4134", + "entityType": "Resource", + "resourceType": "AWS::Lambda::LayerVersion" + }, + "propertyPath": "Properties.Description", + "category": "Best Practice", + "startLine": 139, + "startColumn": 5, + "endLine": 139, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 180, + "startColumn": 4, + "endLine": 180, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -871,19 +1159,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CronStateMachineEventsRoleA3F136B0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CronStateMachineEventsRoleA3F136B0", + "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 271, + "startLine": 205, "startColumn": 4, - "endLine": 271, + "endLine": 205, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -891,67 +1179,55 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Rule4C995B7F' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Resource 'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Rule4C995B7F", + "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 317, + "startLine": 246, "startColumn": 4, - "endLine": 317, + "endLine": 246, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "empty.yaml": { - "filePath": "empty.yaml", - "status": "ERROR", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F1101", - "severity": "FATAL", - "message": "Empty YAML document", - "source": "SCHEMA", - "category": "Structure", - "startLine": 1, - "startColumn": 1, - "endLine": 1, - "endColumn": 1, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 377, + "startColumn": 4, + "endLine": 377, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "gh-issues/issue-144.yaml": { - "filePath": "gh-issues/issue-144.yaml", + "cdk/stepfunction-external-definition--StepfunctionExternalDefinitionStack.template.json": { + "filePath": "cdk/stepfunction-external-definition--StepfunctionExternalDefinitionStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 12, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 3, + "warnings": 1, + "informational": 17, "debug": 0 }, "suppressed": 0, @@ -959,23 +1235,43 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'MyStateMachineRoleD59FFEBC' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyStateMachine6C968CA5", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 109, + "startColumn": 4, + "endLine": 109, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Flow", + "logicalId": "MyStateMachineLogGroup9955D1FE", "entityType": "Resource", - "resourceType": "AWS::MediaConnect::Flow" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-mediaconnect.git", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -985,20 +1281,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Source.Name' is create-only; updating it will cause resource replacement", + "message": "Property 'StateMachineType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Flow", + "logicalId": "MyStateMachine6C968CA5", "entityType": "Resource", - "resourceType": "AWS::MediaConnect::Flow" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.Source.Name", + "propertyPath": "Properties.StateMachineType", "category": "Best Practice", - "startLine": 13, - "startColumn": 9, - "endLine": 13, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-mediaconnect.git", + "startLine": 107, + "startColumn": 5, + "endLine": 107, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-stepfunctions.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -1006,159 +1302,70 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Flow' of type 'AWS::MediaConnect::Flow' supports Tags but none are configured", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Flow", + "logicalId": "StepFuncApiDeployment77C863276f473a57d5bd4cb772b382f83651c7a2", "entityType": "Resource", - "resourceType": "AWS::MediaConnect::Flow" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 10, + "startLine": 138, "startColumn": 5, - "endLine": 10, + "endLine": 138, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "gh-issues/issue-183.yaml": { - "filePath": "gh-issues/issue-183.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 4, - "informational": 9, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F3031", - "severity": "FATAL", - "message": "'arn:aws:sqs:us-east-1:1111111111:MyQueue' does not match pattern '^arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:((eusc-)?[a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)$'", - "source": "SCHEMA", - "entity": { - "logicalId": "PermissionInvalidAccountId", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Schema", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 16, - "ruleDescription": "Value does not match pattern", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "arn:aws:sqs:us-east-1:1111111111:MyQueue", - "expectedConstraint": "^arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:((eusc-)?[a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)$" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'StepFuncApiE896FCA7'" } }, { - "ruleId": "W3663", - "severity": "WARN", - "message": "Lambda Permission with a SourceArn that has no account id should also specify SourceAccount", - "source": "CFN_LINT", - "entity": { - "logicalId": "PermissionInvalidAccountId", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties", - "suggestedFix": "Add SourceAccount property", - "category": "Security", - "startLine": 31, - "startColumn": 5, - "endLine": 31, - "endColumn": 15, - "ruleDescription": "Validate SourceAccount is required property", - "phase": "LINT" - }, - { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'SourceArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", - "source": "ENGINE", - "entity": { - "logicalId": "PermissionWithAccountId", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 25, - "startColumn": 7, - "endLine": 25, - "endColumn": 16, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" - }, - { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'SourceArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionInvalidAccountId", + "logicalId": "StepFuncApiDeploymentStageprod5FF8FD8E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 16, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" - }, - { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", - "entity": { - "logicalId": "PermissionWithAccountId", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "category": "Security", - "startLine": 19, - "startColumn": 3, - "endLine": 19, - "endColumn": 26, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "startLine": 157, + "startColumn": 5, + "endLine": 157, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'StepFuncApiE896FCA7'" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionWithAccountId", + "logicalId": "StepFuncApiDeploymentStageprod5FF8FD8E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 22, - "startColumn": 7, - "endLine": 22, - "endColumn": 13, + "startLine": 160, + "startColumn": 5, + "endLine": 160, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -1168,42 +1375,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionWithAccountId", + "logicalId": "StepFuncApiorders391C1FA5", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 19, + "startLine": 169, + "startColumn": 5, + "endLine": 169, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt MyLambda.Arn" + "resolutionSource": "GetAtt StepFuncApiE896FCA7.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionWithAccountId", + "logicalId": "StepFuncApiorders391C1FA5", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 24, - "startColumn": 7, - "endLine": 24, - "endColumn": 16, + "startLine": 175, + "startColumn": 5, + "endLine": 175, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -1213,41 +1422,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionWithAccountId", + "logicalId": "StepFuncApiorders391C1FA5", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 25, - "startColumn": 7, - "endLine": 25, - "endColumn": 16, + "startLine": 176, + "startColumn": 5, + "endLine": 176, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'StepFuncApiE896FCA7'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionInvalidAccountId", + "logicalId": "StepFuncApiordersGET0318ABB9", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 32, - "startColumn": 7, - "endLine": 32, - "endColumn": 13, + "startLine": 234, + "startColumn": 5, + "endLine": 234, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -1257,246 +1469,183 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionInvalidAccountId", + "logicalId": "StepFuncApiordersGET0318ABB9", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 19, + "startLine": 318, + "startColumn": 5, + "endLine": 318, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt MyLambda.Arn" + "resolutionSource": "Ref to 'StepFuncApiorders391C1FA5'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionInvalidAccountId", + "logicalId": "StepFuncApiordersGET0318ABB9", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 34, - "startColumn": 7, - "endLine": 34, - "endColumn": 16, + "startLine": 321, + "startColumn": 5, + "endLine": 321, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'StepFuncApiE896FCA7'" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyStateMachineLogGroup9955D1FE' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "PermissionInvalidAccountId", + "logicalId": "MyStateMachineLogGroup9955D1FE", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'MyStateMachineRoleD59FFEBC' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyLambda", + "logicalId": "MyStateMachineRoleD59FFEBC", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, + "startLine": 17, + "startColumn": 4, + "endLine": 17, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "gh-issues/issue-184.yaml": { - "filePath": "gh-issues/issue-184.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 5, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3025", - "severity": "ERROR", - "message": "'db.m5.large' is not one of ['db.r3.2xlarge', 'db.r3.4xlarge', 'db.r3.8xlarge', 'db.r3.large', 'db.r3.xlarge', 'db.r4.16xlarge', 'db.r4.2xlarge', 'db.r4.4xlarge', 'db.r4.8xlarge', 'db.r4.large', 'db.r4.xlarge', 'db.r5.12xlarge', 'db.r5.16xlarge', 'db.r5.24xlarge', 'db.r5.2xlarge', 'db.r5.4xlarge', 'db.r5.8xlarge', 'db.r5.large', 'db.r5.xlarge', 'db.r6g.12xlarge', 'db.r6g.16xlarge', 'db.r6g.2xlarge', 'db.r6g.4xlarge', 'db.r6g.8xlarge', 'db.r6g.large', 'db.r6g.xlarge', 'db.r6i.12xlarge', 'db.r6i.16xlarge', 'db.r6i.24xlarge', 'db.r6i.2xlarge', 'db.r6i.32xlarge', 'db.r6i.4xlarge', 'db.r6i.8xlarge', 'db.r6i.large', 'db.r6i.xlarge', 'db.r7g.12xlarge', 'db.r7g.16xlarge', 'db.r7g.2xlarge', 'db.r7g.4xlarge', 'db.r7g.8xlarge', 'db.r7g.large', 'db.r7g.xlarge', 'db.r7i.12xlarge', 'db.r7i.16xlarge', 'db.r7i.24xlarge', 'db.r7i.2xlarge', 'db.r7i.48xlarge', 'db.r7i.4xlarge', 'db.r7i.8xlarge', 'db.r7i.large', 'db.r7i.xlarge', 'db.r8g.12xlarge', 'db.r8g.16xlarge', 'db.r8g.24xlarge', 'db.r8g.2xlarge', 'db.r8g.48xlarge', 'db.r8g.4xlarge', 'db.r8g.8xlarge', 'db.r8g.large', 'db.r8g.xlarge', 'db.serverless', 'db.t2.medium', 'db.t2.small', 'db.t3.large', 'db.t3.medium', 'db.t3.small', 'db.t4g.large', 'db.t4g.medium', 'db.x2g.12xlarge', 'db.x2g.16xlarge', 'db.x2g.2xlarge', 'db.x2g.4xlarge', 'db.x2g.8xlarge', 'db.x2g.large', 'db.x2g.xlarge'] when Engine is 'aurora-mysql' in any region", - "source": "CFN_LINT", - "entity": { - "logicalId": "AuroraInstance", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.DBInstanceClass", - "category": "Resource", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 22, - "ruleDescription": "Validates RDS DB Instance Class", - "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'MyStateMachine6C968CA5' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "AuroraInstance", + "logicalId": "MyStateMachine6C968CA5", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::StepFunctions::StateMachine" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 2, - "startColumn": 3, - "endLine": 2, - "endColumn": 17, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 83, + "startColumn": 4, + "endLine": 83, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'StepFuncApiE896FCA7' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "AuroraInstance", + "logicalId": "StepFuncApiE896FCA7", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ApiGateway::RestApi" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 2, - "startColumn": 3, - "endLine": 2, - "endColumn": 17, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 121, + "startColumn": 4, + "endLine": 121, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'StepFuncApiDeploymentStageprod5FF8FD8E' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AuroraInstance", + "logicalId": "StepFuncApiDeploymentStageprod5FF8FD8E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "startLine": 153, + "startColumn": 4, + "endLine": 153, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'AuroraInstance' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Resource 'StepFuncApiordersGETStartSyncExecutionRole90998151' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AuroraInstance", + "logicalId": "StepFuncApiordersGETStartSyncExecutionRole90998151", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 4, - "startColumn": 5, - "endLine": 4, + "startLine": 186, + "startColumn": 4, + "endLine": 186, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "gh-issues/issue-185.yaml": { - "filePath": "gh-issues/issue-185.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "gh-issues/issue-186-clb.json": { - "filePath": "gh-issues/issue-186-clb.json", + "cdk/stepfunctions-job-poller--aws-stepfunctions-integ.template.json": { + "filePath": "cdk/stepfunctions-job-poller--aws-stepfunctions-integ.template.json", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 11, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 2, + "warnings": 5, + "informational": 8, "debug": 0 }, "suppressed": 0, @@ -1505,49 +1654,911 @@ }, "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "CLBA83A883E", + "logicalId": "CheckLambda9CBBF9BA", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Scheme", - "category": "Best Practice", - "startLine": 15, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 50, "startColumn": 5, - "endLine": 15, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 50, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "python3.9", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Subnets' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "CLBA83A883E", + "logicalId": "SubmitLambda8054545E", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Subnets", - "category": "Best Practice", - "startLine": 19, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 107, "startColumn": 5, - "endLine": 19, + "endLine": 107, "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Create-only property updated triggers resource replacement", + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "actualValue": "python3.9", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'CheckLambdaServiceRole74B86E23' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "CheckLambda9CBBF9BA", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 53, + "startColumn": 4, + "endLine": 53, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'SubmitLambdaServiceRole98C85C39' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SubmitLambda8054545E", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 110, + "startColumn": 4, + "endLine": 110, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'CronStateMachineRoleFE85923B' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", + "source": "CFN_LINT", + "entity": { + "logicalId": "CronStateMachine7E50955B", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 259, + "startColumn": 4, + "endLine": 259, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CheckLambdaServiceRole74B86E23' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "CheckLambdaServiceRole74B86E23", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CheckLambda9CBBF9BA' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "CheckLambda9CBBF9BA", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 39, + "startColumn": 4, + "endLine": 39, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SubmitLambdaServiceRole98C85C39' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SubmitLambdaServiceRole98C85C39", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 62, + "startColumn": 4, + "endLine": 62, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SubmitLambda8054545E' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SubmitLambda8054545E", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 96, + "startColumn": 4, + "endLine": 96, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CronStateMachineRoleFE85923B' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "CronStateMachineRoleFE85923B", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 119, + "startColumn": 4, + "endLine": 119, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CronStateMachine7E50955B' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "CronStateMachine7E50955B", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 210, + "startColumn": 4, + "endLine": 210, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CronStateMachineEventsRoleA3F136B0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "CronStateMachineEventsRoleA3F136B0", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 271, + "startColumn": 4, + "endLine": 271, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Rule4C995B7F' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Rule4C995B7F", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 317, + "startColumn": 4, + "endLine": 317, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "empty.yaml": { + "filePath": "empty.yaml", + "status": "ERROR", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F1101", + "severity": "FATAL", + "message": "Empty YAML document", + "source": "SCHEMA", + "category": "Structure", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 1, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" + } + ] + }, + "gh-issues/issue-144.yaml": { + "filePath": "gh-issues/issue-144.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Flow", + "entityType": "Resource", + "resourceType": "AWS::MediaConnect::Flow" + }, + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-mediaconnect.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Source.Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Flow", + "entityType": "Resource", + "resourceType": "AWS::MediaConnect::Flow" + }, + "propertyPath": "Properties.Source.Name", + "category": "Best Practice", + "startLine": 13, + "startColumn": 9, + "endLine": 13, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-mediaconnect.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Flow' of type 'AWS::MediaConnect::Flow' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Flow", + "entityType": "Resource", + "resourceType": "AWS::MediaConnect::Flow" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-183.yaml": { + "filePath": "gh-issues/issue-183.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 4, + "informational": 9, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3031", + "severity": "FATAL", + "message": "'arn:aws:sqs:us-east-1:1111111111:MyQueue' does not match pattern '^arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:((eusc-)?[a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)$'", + "source": "SCHEMA", + "entity": { + "logicalId": "PermissionInvalidAccountId", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.SourceArn", + "category": "Schema", + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 16, + "ruleDescription": "Value does not match pattern", + "phase": "SCHEMA", + "context": { + "actualValue": "arn:aws:sqs:us-east-1:1111111111:MyQueue", + "expectedConstraint": "^arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:((eusc-)?[a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)$" + } + }, + { + "ruleId": "W3663", + "severity": "WARN", + "message": "Lambda Permission with a SourceArn that has no account id should also specify SourceAccount", + "source": "CFN_LINT", + "entity": { + "logicalId": "PermissionInvalidAccountId", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties", + "suggestedFix": "Add SourceAccount property", + "category": "Security", + "startLine": 31, + "startColumn": 5, + "endLine": 31, + "endColumn": 15, + "ruleDescription": "Validate SourceAccount is required property", + "phase": "LINT" + }, + { + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'SourceArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", + "entity": { + "logicalId": "PermissionWithAccountId", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.SourceArn", + "category": "Best Practice", + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 16, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" + }, + { + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'SourceArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", + "entity": { + "logicalId": "PermissionInvalidAccountId", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.SourceArn", + "category": "Best Practice", + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 16, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "PermissionWithAccountId", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "category": "Security", + "startLine": 19, + "startColumn": 3, + "endLine": 19, + "endColumn": 26, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PermissionWithAccountId", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 22, + "startColumn": 7, + "endLine": 22, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PermissionWithAccountId", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt MyLambda.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PermissionWithAccountId", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 24, + "startColumn": 7, + "endLine": 24, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PermissionWithAccountId", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.SourceArn", + "category": "Best Practice", + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PermissionInvalidAccountId", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 32, + "startColumn": 7, + "endLine": 32, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PermissionInvalidAccountId", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt MyLambda.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PermissionInvalidAccountId", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 34, + "startColumn": 7, + "endLine": 34, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PermissionInvalidAccountId", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.SourceArn", + "category": "Best Practice", + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "MyLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-184.yaml": { + "filePath": "gh-issues/issue-184.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 5, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3025", + "severity": "ERROR", + "message": "'db.m5.large' is not one of ['db.r3.2xlarge', 'db.r3.4xlarge', 'db.r3.8xlarge', 'db.r3.large', 'db.r3.xlarge', 'db.r4.16xlarge', 'db.r4.2xlarge', 'db.r4.4xlarge', 'db.r4.8xlarge', 'db.r4.large', 'db.r4.xlarge', 'db.r5.12xlarge', 'db.r5.16xlarge', 'db.r5.24xlarge', 'db.r5.2xlarge', 'db.r5.4xlarge', 'db.r5.8xlarge', 'db.r5.large', 'db.r5.xlarge', 'db.r6g.12xlarge', 'db.r6g.16xlarge', 'db.r6g.2xlarge', 'db.r6g.4xlarge', 'db.r6g.8xlarge', 'db.r6g.large', 'db.r6g.xlarge', 'db.r6i.12xlarge', 'db.r6i.16xlarge', 'db.r6i.24xlarge', 'db.r6i.2xlarge', 'db.r6i.32xlarge', 'db.r6i.4xlarge', 'db.r6i.8xlarge', 'db.r6i.large', 'db.r6i.xlarge', 'db.r7g.12xlarge', 'db.r7g.16xlarge', 'db.r7g.2xlarge', 'db.r7g.4xlarge', 'db.r7g.8xlarge', 'db.r7g.large', 'db.r7g.xlarge', 'db.r7i.12xlarge', 'db.r7i.16xlarge', 'db.r7i.24xlarge', 'db.r7i.2xlarge', 'db.r7i.48xlarge', 'db.r7i.4xlarge', 'db.r7i.8xlarge', 'db.r7i.large', 'db.r7i.xlarge', 'db.r8g.12xlarge', 'db.r8g.16xlarge', 'db.r8g.24xlarge', 'db.r8g.2xlarge', 'db.r8g.48xlarge', 'db.r8g.4xlarge', 'db.r8g.8xlarge', 'db.r8g.large', 'db.r8g.xlarge', 'db.serverless', 'db.t2.medium', 'db.t2.small', 'db.t3.large', 'db.t3.medium', 'db.t3.small', 'db.t4g.large', 'db.t4g.medium', 'db.x2g.12xlarge', 'db.x2g.16xlarge', 'db.x2g.2xlarge', 'db.x2g.4xlarge', 'db.x2g.8xlarge', 'db.x2g.large', 'db.x2g.xlarge'] when Engine is 'aurora-mysql' in any region", + "source": "CFN_LINT", + "entity": { + "logicalId": "AuroraInstance", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.DBInstanceClass", + "category": "Resource", + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 22, + "ruleDescription": "Validates RDS DB Instance Class", + "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": "AuroraInstance", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 17, + "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": "AuroraInstance", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 17, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AuroraInstance", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'AuroraInstance' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "AuroraInstance", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-185.yaml": { + "filePath": "gh-issues/issue-185.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "gh-issues/issue-186-clb.json": { + "filePath": "gh-issues/issue-186-clb.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CLBA83A883E", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.Scheme", + "category": "Best Practice", + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Subnets' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CLBA83A883E", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.Subnets", + "category": "Best Practice", + "startLine": 19, + "startColumn": 5, + "endLine": 19, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" } } ] @@ -11327,192 +12338,516 @@ "message": "Resource 'UserRoleB7C3739B' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UserRoleB7C3739B", + "logicalId": "UserRoleB7C3739B", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 444, + "startColumn": 4, + "endLine": 444, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ClusterKubectlHandlerRole94549F93' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ClusterKubectlHandlerRole94549F93", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 474, + "startColumn": 4, + "endLine": 474, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ClusterControlPlaneSecurityGroupD274242C' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ClusterControlPlaneSecurityGroupD274242C", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 595, + "startColumn": 4, + "endLine": 595, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ClusterCreationRole360249B6' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ClusterCreationRole360249B6", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 616, + "startColumn": 4, + "endLine": 616, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ClusterKubectlReadyBarrier200052AF' of type 'AWS::SSM::Parameter' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ClusterKubectlReadyBarrier200052AF", + "entityType": "Resource", + "resourceType": "AWS::SSM::Parameter" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 882, + "startColumn": 4, + "endLine": 882, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ClusterNodegroupDefaultCapacityNodeGroupRole55953B04' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ClusterNodegroupDefaultCapacityNodeGroupRole55953B04", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 896, + "startColumn": 4, + "endLine": 896, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ClusterNodegroupDefaultCapacityDA0920A3' of type 'AWS::EKS::Nodegroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ClusterNodegroupDefaultCapacityDA0920A3", + "entityType": "Resource", + "resourceType": "AWS::EKS::Nodegroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 956, + "startColumn": 4, + "endLine": 956, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'awscdkawseksClusterResourceProviderNestedStackawscdkawseksClusterResourceProviderNestedStackResource9827C454' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "awscdkawseksClusterResourceProviderNestedStackawscdkawseksClusterResourceProviderNestedStackResource9827C454", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1035, + "startColumn": 4, + "endLine": 1035, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'awscdkawseksKubectlProviderNestedStackawscdkawseksKubectlProviderNestedStackResourceA7AEBA6B' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "awscdkawseksKubectlProviderNestedStackawscdkawseksKubectlProviderNestedStackResourceA7AEBA6B", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1058, + "startColumn": 4, + "endLine": 1058, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-54-bare.json": { + "filePath": "gh-issues/issue-54-bare.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "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": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-54-with-ownership.json": { + "filePath": "gh-issues/issue-54-with-ownership.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W3045", + "severity": "WARN", + "message": "AccessControl property is deprecated. Use bucket policies instead", + "source": "CFN_LINT", + "entity": { + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 444, - "startColumn": 4, - "endLine": 444, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.AccessControl", + "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", + "category": "Deprecation", + "startLine": 6, + "startColumn": 9, + "endLine": 6, + "endColumn": 23, + "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", + "phase": "LINT", + "context": { + "actualValue": "PublicRead" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ClusterKubectlHandlerRole94549F93' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ClusterKubectlHandlerRole94549F93", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 474, - "startColumn": 4, - "endLine": 474, - "endColumn": 15, + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "gh-issues/issue-54.json": { + "filePath": "gh-issues/issue-54.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 1, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ClusterControlPlaneSecurityGroupD274242C' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3045", + "severity": "ERROR", + "message": "A bucket with 'AccessControl' set should also have at least one 'OwnershipControl' configured", + "source": "CFN_LINT", "entity": { - "logicalId": "ClusterControlPlaneSecurityGroupD274242C", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 595, - "startColumn": 4, - "endLine": 595, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties", + "suggestedFix": "Add OwnershipControls to the bucket when using AccessControl", + "category": "Resource", + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Validate AccessControl are set with OwnershipControls", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ClusterCreationRole360249B6' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3045", + "severity": "WARN", + "message": "AccessControl property is deprecated. Use bucket policies instead", + "source": "CFN_LINT", "entity": { - "logicalId": "ClusterCreationRole360249B6", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 616, - "startColumn": 4, - "endLine": 616, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.AccessControl", + "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", + "category": "Deprecation", + "startLine": 6, + "startColumn": 9, + "endLine": 6, + "endColumn": 23, + "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", + "phase": "LINT", + "context": { + "actualValue": "PublicRead" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ClusterKubectlReadyBarrier200052AF' of type 'AWS::SSM::Parameter' supports Tags but none are configured", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ClusterKubectlReadyBarrier200052AF", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 882, - "startColumn": 4, - "endLine": 882, - "endColumn": 15, + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "gh-issues/issue-55.json": { + "filePath": "gh-issues/issue-55.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ClusterNodegroupDefaultCapacityNodeGroupRole55953B04' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ClusterNodegroupDefaultCapacityNodeGroupRole55953B04", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 896, - "startColumn": 4, - "endLine": 896, - "endColumn": 15, + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "gh-issues/issue-56.json": { + "filePath": "gh-issues/issue-56.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ClusterNodegroupDefaultCapacityDA0920A3' of type 'AWS::EKS::Nodegroup' supports Tags but none are configured", + "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterNodegroupDefaultCapacityDA0920A3", + "logicalId": "WeakConsumer", "entityType": "Resource", - "resourceType": "AWS::EKS::Nodegroup" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.TopicName", "category": "Best Practice", - "startLine": 956, - "startColumn": 4, - "endLine": 956, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 6, + "startColumn": 9, + "endLine": 6, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack output: StackName=\"Stack1\", Region=\"us-east-1\", OutputName=\"PublishOutputFnGetAttMyResourceArn8F315E6B\")" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'awscdkawseksClusterResourceProviderNestedStackawscdkawseksClusterResourceProviderNestedStackResource9827C454' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Resource 'WeakConsumer' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "awscdkawseksClusterResourceProviderNestedStackawscdkawseksClusterResourceProviderNestedStackResource9827C454", + "logicalId": "WeakConsumer", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1035, - "startColumn": 4, - "endLine": 1035, - "endColumn": 15, + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "gh-issues/issue-57.json": { + "filePath": "gh-issues/issue-57.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'awscdkawseksKubectlProviderNestedStackawscdkawseksKubectlProviderNestedStackResourceA7AEBA6B' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Resource 'AReallyAwesomeDistributionWithAMemorableNameThatIWillNeverForget046C0FA9' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "awscdkawseksKubectlProviderNestedStackawscdkawseksKubectlProviderNestedStackResourceA7AEBA6B", + "logicalId": "AReallyAwesomeDistributionWithAMemorableNameThatIWillNeverForget046C0FA9", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::CloudFront::Distribution" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1058, - "startColumn": 4, - "endLine": 1058, - "endColumn": 15, + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "gh-issues/issue-54-bare.json": { - "filePath": "gh-issues/issue-54-bare.json", + "gh-issues/issue-61.json": { + "filePath": "gh-issues/issue-61.json", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 0, + "fatal": 1, "errors": 0, "warnings": 0, - "informational": 1, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -11520,15 +12855,164 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "F3017", + "severity": "FATAL", + "message": "Value is not valid under any of the 5 anyOf schemas for AWS::EC2::Volume (0 branches matched; at least one is required). Required property combinations: ['AvailabilityZone', 'Size'] or ['AvailabilityZone', 'SnapshotId'] or ['AvailabilityZoneId', 'Size'] or ['AvailabilityZoneId', 'SnapshotId'] or ['SourceVolumeId']. Branch failures: branch 1: 'AvailabilityZone' is a required property, 'Size' is a required property; branch 2: 'AvailabilityZone' is a required property, 'SnapshotId' is a required property; branch 3: 'AvailabilityZoneId' is a required property, 'Size' is a required property; branch 4: 'AvailabilityZoneId' is a required property, 'SnapshotId' is a required property; branch 5: 'SourceVolumeId' is a required property.", + "source": "SCHEMA", + "entity": { + "logicalId": "Resource", + "entityType": "Resource", + "resourceType": "AWS::EC2::Volume" + }, + "propertyPath": "Properties", + "category": "Schema", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Value not valid under anyOf", + "phase": "SCHEMA", + "context": { + "expectedConstraint": "at least one anyOf branch", + "extra": { + "branchCount": 5, + "branchFailures": [ + { + "branch": 1, + "reasons": [ + { + "message": "'AvailabilityZone' is a required property", + "propertyPath": "Properties" + }, + { + "message": "'Size' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 2, + "reasons": [ + { + "message": "'AvailabilityZone' is a required property", + "propertyPath": "Properties" + }, + { + "message": "'SnapshotId' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 3, + "reasons": [ + { + "message": "'AvailabilityZoneId' is a required property", + "propertyPath": "Properties" + }, + { + "message": "'Size' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 4, + "reasons": [ + { + "message": "'AvailabilityZoneId' is a required property", + "propertyPath": "Properties" + }, + { + "message": "'SnapshotId' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 5, + "reasons": [ + { + "message": "'SourceVolumeId' is a required property", + "propertyPath": "Properties" + } + ] + } + ], + "compositionKind": "anyOf", + "matchCount": 0, + "matchOutcome": "zeroMatches", + "validPropertyCombinations": [ + [ + "AvailabilityZone", + "Size" + ], + [ + "AvailabilityZone", + "SnapshotId" + ], + [ + "AvailabilityZoneId", + "Size" + ], + [ + "AvailabilityZoneId", + "SnapshotId" + ], + [ + "SourceVolumeId" + ] + ] + } + } + }, + { + "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": "Resource", + "entityType": "Resource", + "resourceType": "AWS::EC2::Volume" + }, + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 14, + "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": "Resource", + "entityType": "Resource", + "resourceType": "AWS::EC2::Volume" + }, + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'Resource' of type 'AWS::EC2::Volume' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "Resource", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Volume" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -11536,22 +13020,22 @@ "startLine": 3, "startColumn": 5, "endLine": 3, - "endColumn": 12, + "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "gh-issues/issue-54-with-ownership.json": { - "filePath": "gh-issues/issue-54-with-ownership.json", + "gh-issues/issue-62.json": { + "filePath": "gh-issues/issue-62.json", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 0, + "fatal": 1, "errors": 0, - "warnings": 1, - "informational": 1, + "warnings": 2, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -11560,119 +13044,120 @@ }, "diagnostics": [ { - "ruleId": "W3045", - "severity": "WARN", - "message": "AccessControl property is deprecated. Use bucket policies instead", - "source": "CFN_LINT", + "ruleId": "F3032", + "severity": "FATAL", + "message": "expected minimum item count: 1, found: 0", + "source": "SCHEMA", "entity": { - "logicalId": "Bucket", + "logicalId": "Canary", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Synthetics::Canary" }, - "propertyPath": "Properties.AccessControl", - "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", - "category": "Deprecation", - "startLine": 6, + "propertyPath": "Properties.ResourcesToReplicateTags", + "category": "Schema", + "startLine": 18, "startColumn": 9, - "endLine": 6, - "endColumn": 23, - "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", - "phase": "LINT", + "endLine": 18, + "endColumn": 34, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-synthetics", + "ruleDescription": "Array item count out of bounds", + "phase": "SCHEMA", "context": { - "actualValue": "PublicRead" + "extra": { + "actual_count": 0, + "max_items": 1, + "min_items": 1 + } } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'ExecutionRoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "Canary", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Synthetics::Canary" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ExecutionRoleArn", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", + "startLine": 8, + "startColumn": 9, + "endLine": 8, + "endColumn": 26, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "Canary", + "entityType": "Resource", + "resourceType": "AWS::Synthetics::Canary" + }, + "category": "Security", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" - } - ] - }, - "gh-issues/issue-54.json": { - "filePath": "gh-issues/issue-54.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 1, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3045", - "severity": "ERROR", - "message": "A bucket with 'AccessControl' set should also have at least one 'OwnershipControl' configured", + "ruleId": "I3013", + "severity": "INFO", + "message": "'SuccessRetentionPeriod' 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": "Bucket", + "logicalId": "Canary", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Synthetics::Canary" }, "propertyPath": "Properties", - "suggestedFix": "Add OwnershipControls to the bucket when using AccessControl", - "category": "Resource", + "category": "Best Practice", "startLine": 5, "startColumn": 7, "endLine": 5, "endColumn": 18, - "ruleDescription": "Validate AccessControl are set with OwnershipControls", + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "W3045", - "severity": "WARN", - "message": "AccessControl property is deprecated. Use bucket policies instead", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "Canary", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Synthetics::Canary" }, - "propertyPath": "Properties.AccessControl", - "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", - "category": "Deprecation", + "propertyPath": "Properties.Name", + "category": "Best Practice", "startLine": 6, "startColumn": 9, "endLine": 6, - "endColumn": 23, - "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", - "phase": "LINT", + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-synthetics", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { - "actualValue": "PublicRead" + "lifecycle": "create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'Canary' of type 'AWS::Synthetics::Canary' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "Canary", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Synthetics::Canary" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -11686,14 +13171,14 @@ } ] }, - "gh-issues/issue-55.json": { - "filePath": "gh-issues/issue-55.json", + "gh-issues/issue-63.json": { + "filePath": "gh-issues/issue-63.json", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 0, + "errors": 1, "warnings": 0, "informational": 1, "debug": 0 @@ -11703,38 +13188,56 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'SomeParameter': Default must be a string", + "source": "CFN_LINT", + "entity": { + "logicalId": "SomeParameter", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/SomeParameter/Default", + "category": "Parameter", + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" + }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'Topic' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "Topic", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, + "startLine": 29, "startColumn": 7, - "endLine": 12, + "endLine": 29, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "gh-issues/issue-56.json": { - "filePath": "gh-issues/issue-56.json", + "gh-issues/issue-65.json": { + "filePath": "gh-issues/issue-65.json", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 2, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 2, + "warnings": 2, + "informational": 6, "debug": 0 }, "suppressed": 0, @@ -11742,39 +13245,167 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 7, + "startColumn": 9, + "endLine": 7, + "endColumn": 17, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "MyLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "category": "Security", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 14, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WeakConsumer", + "logicalId": "MyLambda", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.TopicName", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", "startLine": 6, "startColumn": 9, "endLine": 6, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "S3Permission", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 18, + "startColumn": 9, + "endLine": 18, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "S3Permission", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 19, + "startColumn": 9, + "endLine": 19, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack output: StackName=\"Stack1\", Region=\"us-east-1\", OutputName=\"PublishOutputFnGetAttMyResourceArn8F315E6B\")" + "resolutionSource": "Ref to 'MyLambda'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "S3Permission", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 20, + "startColumn": 9, + "endLine": 20, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SourceAccount' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "S3Permission", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.SourceAccount", + "category": "Best Practice", + "startLine": 21, + "startColumn": 9, + "endLine": 21, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'WeakConsumer' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'MyLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WeakConsumer", + "logicalId": "MyLambda", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -11788,8 +13419,8 @@ } ] }, - "gh-issues/issue-57.json": { - "filePath": "gh-issues/issue-57.json", + "gh-issues/issue-67.json": { + "filePath": "gh-issues/issue-67.json", "status": "OK", "metadata": { "resourcesScanned": 1, @@ -11797,7 +13428,7 @@ "fatal": 0, "errors": 0, "warnings": 0, - "informational": 1, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -11805,15 +13436,38 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PromAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.AlarmName", + "category": "Best Practice", + "startLine": 6, + "startColumn": 9, + "endLine": 6, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'AReallyAwesomeDistributionWithAMemorableNameThatIWillNeverForget046C0FA9' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", + "message": "Resource 'PromAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AReallyAwesomeDistributionWithAMemorableNameThatIWillNeverForget046C0FA9", + "logicalId": "PromAlarm", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::CloudWatch::Alarm" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -11827,16 +13481,16 @@ } ] }, - "gh-issues/issue-61.json": { - "filePath": "gh-issues/issue-61.json", + "gh-issues/issue-68.json": { + "filePath": "gh-issues/issue-68.json", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 2, "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 3, + "fatal": 0, + "errors": 1, + "warnings": 4, + "informational": 4, "debug": 0 }, "suppressed": 0, @@ -11845,237 +13499,193 @@ }, "diagnostics": [ { - "ruleId": "F3017", - "severity": "FATAL", - "message": "Value is not valid under any of the 5 anyOf schemas for AWS::EC2::Volume (0 branches matched; at least one is required). Required property combinations: ['AvailabilityZone', 'Size'] or ['AvailabilityZone', 'SnapshotId'] or ['AvailabilityZoneId', 'Size'] or ['AvailabilityZoneId', 'SnapshotId'] or ['SourceVolumeId']. Branch failures: branch 1: 'AvailabilityZone' is a required property, 'Size' is a required property; branch 2: 'AvailabilityZone' is a required property, 'SnapshotId' is a required property; branch 3: 'AvailabilityZoneId' is a required property, 'Size' is a required property; branch 4: 'AvailabilityZoneId' is a required property, 'SnapshotId' is a required property; branch 5: 'SourceVolumeId' is a required property.", - "source": "SCHEMA", - "entity": { - "logicalId": "Resource", - "entityType": "Resource", - "resourceType": "AWS::EC2::Volume" - }, - "propertyPath": "Properties", - "category": "Schema", - "startLine": 3, - "startColumn": 5, - "endLine": 3, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Value not valid under anyOf", - "phase": "SCHEMA", - "context": { - "expectedConstraint": "at least one anyOf branch", - "extra": { - "branchCount": 5, - "branchFailures": [ - { - "branch": 1, - "reasons": [ - { - "message": "'AvailabilityZone' is a required property", - "propertyPath": "Properties" - }, - { - "message": "'Size' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 2, - "reasons": [ - { - "message": "'AvailabilityZone' is a required property", - "propertyPath": "Properties" - }, - { - "message": "'SnapshotId' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 3, - "reasons": [ - { - "message": "'AvailabilityZoneId' is a required property", - "propertyPath": "Properties" - }, - { - "message": "'Size' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 4, - "reasons": [ - { - "message": "'AvailabilityZoneId' is a required property", - "propertyPath": "Properties" - }, - { - "message": "'SnapshotId' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 5, - "reasons": [ - { - "message": "'SourceVolumeId' is a required property", - "propertyPath": "Properties" - } - ] - } - ], - "compositionKind": "anyOf", - "matchCount": 0, - "matchOutcome": "zeroMatches", - "validPropertyCombinations": [ - [ - "AvailabilityZone", - "Size" - ], - [ - "AvailabilityZone", - "SnapshotId" - ], - [ - "AvailabilityZoneId", - "Size" - ], - [ - "AvailabilityZoneId", - "SnapshotId" - ], - [ - "SourceVolumeId" - ] - ] - } - } - }, - { - "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)", + "ruleId": "E3677", + "severity": "ERROR", + "message": "Runtime 'node99.x' is not supported with Code.ZipFile - use nodejs or python", "source": "CFN_LINT", "entity": { - "logicalId": "Resource", + "logicalId": "FutureNodeFunc", "entityType": "Resource", - "resourceType": "AWS::EC2::Volume" + "resourceType": "AWS::Lambda::Function" }, - "category": "Best Practice", - "startLine": 3, + "category": "Resource", + "startLine": 16, "startColumn": 5, - "endLine": 3, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 16, + "endColumn": 20, + "ruleDescription": "Lambda ZipFile requires nodejs or python runtime", "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)", + "ruleId": "W3030", + "severity": "WARN", + "message": "'nodejs99.x' is not one of ['dotnet10', 'dotnet6', 'dotnet8', 'dotnetcore1.0', 'dotnetcore2.0', 'dotnetcore2.1', 'dotnetcore3.1', 'go1.x', 'java11', 'java11.al2023', 'java17', 'java17.al2023', 'java21', 'java25', 'java8', 'java8.al2', 'java8.al2023', 'nodejs', 'nodejs10.x', 'nodejs12.x', 'nodejs14.x', 'nodejs16.x', 'nodejs18.x', 'nodejs20.x', 'nodejs22.x', 'nodejs24.x', 'nodejs26.x', 'nodejs4.3', 'nodejs4.3-edge', 'nodejs6.10', 'nodejs8.10', 'provided', 'provided.al2', 'provided.al2023', 'python2.7', 'python3.10', 'python3.11', 'python3.12', 'python3.13', 'python3.14', 'python3.15', 'python3.6', 'python3.7', 'python3.8', 'python3.9', 'ruby2.5', 'ruby2.7', 'ruby3.2', 'ruby3.3', 'ruby3.4', 'ruby4.0']", "source": "CFN_LINT", "entity": { - "logicalId": "Resource", - "entityType": "Resource", - "resourceType": "AWS::EC2::Volume" - }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 5, - "endLine": 3, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource' of type 'AWS::EC2::Volume' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource", + "logicalId": "MyFunc", "entityType": "Resource", - "resourceType": "AWS::EC2::Volume" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 3, - "startColumn": 5, - "endLine": 3, - "endColumn": 14, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "gh-issues/issue-62.json": { - "filePath": "gh-issues/issue-62.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 2, - "informational": 3, - "debug": 0 + "propertyPath": "Properties.Runtime", + "category": "Schema", + "startLine": 10, + "startColumn": 9, + "endLine": 10, + "endColumn": 17, + "ruleDescription": "Value not in allowed enum", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs99.x", + "extra": { + "allowed_values": [ + "dotnet10", + "dotnet6", + "dotnet8", + "dotnetcore1.0", + "dotnetcore2.0", + "dotnetcore2.1", + "dotnetcore3.1", + "go1.x", + "java11", + "java11.al2023", + "java17", + "java17.al2023", + "java21", + "java25", + "java8", + "java8.al2", + "java8.al2023", + "nodejs", + "nodejs10.x", + "nodejs12.x", + "nodejs14.x", + "nodejs16.x", + "nodejs18.x", + "nodejs20.x", + "nodejs22.x", + "nodejs24.x", + "nodejs26.x", + "nodejs4.3", + "nodejs4.3-edge", + "nodejs6.10", + "nodejs8.10", + "provided", + "provided.al2", + "provided.al2023", + "python2.7", + "python3.10", + "python3.11", + "python3.12", + "python3.13", + "python3.14", + "python3.15", + "python3.6", + "python3.7", + "python3.8", + "python3.9", + "ruby2.5", + "ruby2.7", + "ruby3.2", + "ruby3.3", + "ruby3.4", + "ruby4.0" + ] + } + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3032", - "severity": "FATAL", - "message": "expected minimum item count: 1, found: 0", - "source": "SCHEMA", + "ruleId": "W3030", + "severity": "WARN", + "message": "'node99.x' is not one of ['dotnet10', 'dotnet6', 'dotnet8', 'dotnetcore1.0', 'dotnetcore2.0', 'dotnetcore2.1', 'dotnetcore3.1', 'go1.x', 'java11', 'java11.al2023', 'java17', 'java17.al2023', 'java21', 'java25', 'java8', 'java8.al2', 'java8.al2023', 'nodejs', 'nodejs10.x', 'nodejs12.x', 'nodejs14.x', 'nodejs16.x', 'nodejs18.x', 'nodejs20.x', 'nodejs22.x', 'nodejs24.x', 'nodejs26.x', 'nodejs4.3', 'nodejs4.3-edge', 'nodejs6.10', 'nodejs8.10', 'provided', 'provided.al2', 'provided.al2023', 'python2.7', 'python3.10', 'python3.11', 'python3.12', 'python3.13', 'python3.14', 'python3.15', 'python3.6', 'python3.7', 'python3.8', 'python3.9', 'ruby2.5', 'ruby2.7', 'ruby3.2', 'ruby3.3', 'ruby3.4', 'ruby4.0']", + "source": "CFN_LINT", "entity": { - "logicalId": "Canary", + "logicalId": "FutureNodeFunc", "entityType": "Resource", - "resourceType": "AWS::Synthetics::Canary" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ResourcesToReplicateTags", + "propertyPath": "Properties.Runtime", "category": "Schema", - "startLine": 18, + "startLine": 22, "startColumn": 9, - "endLine": 18, - "endColumn": 34, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-synthetics", - "ruleDescription": "Array item count out of bounds", + "endLine": 22, + "endColumn": 17, + "ruleDescription": "Value not in allowed enum", "phase": "SCHEMA", "context": { + "actualValue": "node99.x", "extra": { - "actual_count": 0, - "max_items": 1, - "min_items": 1 + "allowed_values": [ + "dotnet10", + "dotnet6", + "dotnet8", + "dotnetcore1.0", + "dotnetcore2.0", + "dotnetcore2.1", + "dotnetcore3.1", + "go1.x", + "java11", + "java11.al2023", + "java17", + "java17.al2023", + "java21", + "java25", + "java8", + "java8.al2", + "java8.al2023", + "nodejs", + "nodejs10.x", + "nodejs12.x", + "nodejs14.x", + "nodejs16.x", + "nodejs18.x", + "nodejs20.x", + "nodejs22.x", + "nodejs24.x", + "nodejs26.x", + "nodejs4.3", + "nodejs4.3-edge", + "nodejs6.10", + "nodejs8.10", + "provided", + "provided.al2", + "provided.al2023", + "python2.7", + "python3.10", + "python3.11", + "python3.12", + "python3.13", + "python3.14", + "python3.15", + "python3.6", + "python3.7", + "python3.8", + "python3.9", + "ruby2.5", + "ruby2.7", + "ruby3.2", + "ruby3.3", + "ruby3.4", + "ruby4.0" + ] } } }, { - "ruleId": "W9002", + "ruleId": "W9013", "severity": "WARN", - "message": "Property 'ExecutionRoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "Canary", + "logicalId": "MyFunc", "entityType": "Resource", - "resourceType": "AWS::Synthetics::Canary" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ExecutionRoleArn", - "category": "Best Practice", - "startLine": 8, - "startColumn": 9, - "endLine": 8, - "endColumn": 26, - "ruleDescription": "Hardcoded ARN property", + "category": "Security", + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 12, + "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, { @@ -12084,54 +13694,56 @@ "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "Canary", + "logicalId": "FutureNodeFunc", "entityType": "Resource", - "resourceType": "AWS::Synthetics::Canary" + "resourceType": "AWS::Lambda::Function" }, "category": "Security", - "startLine": 3, + "startLine": 16, "startColumn": 5, - "endLine": 3, - "endColumn": 12, + "endLine": 16, + "endColumn": 20, "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'SuccessRetentionPeriod' 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", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Canary", + "logicalId": "MyFunc", "entityType": "Resource", - "resourceType": "AWS::Synthetics::Canary" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "startLine": 7, + "startColumn": 9, + "endLine": 7, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Canary", + "logicalId": "FutureNodeFunc", "entityType": "Resource", - "resourceType": "AWS::Synthetics::Canary" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 6, + "startLine": 19, "startColumn": 9, - "endLine": 6, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-synthetics", + "endLine": 19, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -12141,92 +13753,55 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Canary' of type 'AWS::Synthetics::Canary' supports Tags but none are configured", + "message": "Resource 'MyFunc' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Canary", + "logicalId": "MyFunc", "entityType": "Resource", - "resourceType": "AWS::Synthetics::Canary" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "gh-issues/issue-63.json": { - "filePath": "gh-issues/issue-63.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 1, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'SomeParameter': Default must be a string", - "source": "CFN_LINT", - "entity": { - "logicalId": "SomeParameter", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/SomeParameter/Default", - "category": "Parameter", - "startLine": 5, + "startLine": 6, "startColumn": 7, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" + "endLine": 6, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Topic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'FutureNodeFunc' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Topic", + "logicalId": "FutureNodeFunc", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 29, + "startLine": 18, "startColumn": 7, - "endLine": 29, + "endLine": 18, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "gh-issues/issue-65.json": { - "filePath": "gh-issues/issue-65.json", + "gh-issues/issue-69.yaml": { + "filePath": "gh-issues/issue-69.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 1, "counts": { - "fatal": 0, + "fatal": 2, "errors": 0, - "warnings": 2, - "informational": 6, + "warnings": 0, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -12235,129 +13810,160 @@ }, "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "F3032", + "severity": "FATAL", + "message": "expected maximum item count: 1, found: 2", + "source": "SCHEMA", "entity": { - "logicalId": "MyLambda", + "logicalId": "Profile", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 7, - "startColumn": 9, - "endLine": 7, - "endColumn": 17, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "propertyPath": "Properties.Roles", + "category": "Schema", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 12, + "ruleDescription": "Array item count out of bounds", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "extra": { + "actual_count": 2, + "max_items": 1, + "min_items": 0 + } } }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", + "ruleId": "F3037", + "severity": "FATAL", + "message": "Array items are not unique", + "source": "SCHEMA", "entity": { - "logicalId": "MyLambda", + "logicalId": "Profile", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::InstanceProfile" }, - "category": "Security", - "startLine": 3, - "startColumn": 5, - "endLine": 3, - "endColumn": 14, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "propertyPath": "Properties.Roles", + "category": "Schema", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 12, + "ruleDescription": "Array items not unique", + "phase": "SCHEMA", + "context": { + "actualValue": [ + "arn:aws:iam::012345678901:role/SameRole", + "arn:aws:iam::012345678901:role/SameRole" + ] + } + } + ] + }, + "good/E3019_identity_no_false_positive.yaml": { + "filePath": "good/E3019_identity_no_false_positive.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 10, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyLambda", + "logicalId": "BucketA", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 6, - "startColumn": 9, - "endLine": 6, - "endColumn": 22, + "startLine": 13, + "startColumn": 18, + "endLine": 13, + "endColumn": 28, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter 'NameA' (type String)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "S3Permission", + "logicalId": "BucketB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 18, - "startColumn": 9, - "endLine": 18, - "endColumn": 16, + "startLine": 16, + "startColumn": 18, + "endLine": 16, + "endColumn": 28, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter 'NameB' (type String)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "S3Permission", + "logicalId": "CompoundSub", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 19, - "startColumn": 9, - "endLine": 19, - "endColumn": 22, + "startLine": 20, + "startColumn": 18, + "endLine": 20, + "endColumn": 28, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyLambda'" + "resolutionSource": "dynamic (Sub:${NameA}-suffix)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "S3Permission", + "logicalId": "ConditionalLeft", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 20, - "startColumn": 9, - "endLine": 20, - "endColumn": 19, + "startLine": 25, + "startColumn": 18, + "endLine": 25, + "endColumn": 28, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -12367,19 +13973,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceAccount' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "S3Permission", + "logicalId": "ConditionalRight", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.SourceAccount", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 21, - "startColumn": 9, - "endLine": 21, - "endColumn": 23, + "startLine": 29, + "startColumn": 18, + "endLine": 29, + "endColumn": 28, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -12389,97 +13995,115 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'BucketA' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyLambda", + "logicalId": "BucketA", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BucketB' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "BucketB", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CompoundSub' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "CompoundSub", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 20, + "startColumn": 5, + "endLine": 20, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "gh-issues/issue-67.json": { - "filePath": "gh-issues/issue-67.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "message": "Resource 'ConditionalLeft' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "PromAlarm", + "logicalId": "ConditionalLeft", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.AlarmName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, - "startColumn": 9, - "endLine": 6, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 25, + "startColumn": 5, + "endLine": 25, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'PromAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Resource 'ConditionalRight' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "PromAlarm", + "logicalId": "ConditionalRight", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "gh-issues/issue-68.json": { - "filePath": "gh-issues/issue-68.json", + "good/E3022_multi_element_join_distinct.yaml": { + "filePath": "good/E3022_multi_element_join_distinct.yaml", "status": "OK", "metadata": { "resourcesScanned": 2, "counts": { "fatal": 0, - "errors": 1, - "warnings": 4, - "informational": 4, + "errors": 0, + "warnings": 0, + "informational": 6, "debug": 0 }, "suppressed": 0, @@ -12488,309 +14112,161 @@ }, "diagnostics": [ { - "ruleId": "E3677", - "severity": "ERROR", - "message": "Runtime 'node99.x' is not supported with Code.ZipFile - use nodejs or python", - "source": "CFN_LINT", - "entity": { - "logicalId": "FutureNodeFunc", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "category": "Resource", - "startLine": 16, - "startColumn": 5, - "endLine": 16, - "endColumn": 20, - "ruleDescription": "Lambda ZipFile requires nodejs or python runtime", - "phase": "LINT" - }, - { - "ruleId": "W3030", - "severity": "WARN", - "message": "'nodejs99.x' is not one of ['dotnet10', 'dotnet6', 'dotnet8', 'dotnetcore1.0', 'dotnetcore2.0', 'dotnetcore2.1', 'dotnetcore3.1', 'go1.x', 'java11', 'java11.al2023', 'java17', 'java17.al2023', 'java21', 'java25', 'java8', 'java8.al2', 'java8.al2023', 'nodejs', 'nodejs10.x', 'nodejs12.x', 'nodejs14.x', 'nodejs16.x', 'nodejs18.x', 'nodejs20.x', 'nodejs22.x', 'nodejs24.x', 'nodejs26.x', 'nodejs4.3', 'nodejs4.3-edge', 'nodejs6.10', 'nodejs8.10', 'provided', 'provided.al2', 'provided.al2023', 'python2.7', 'python3.10', 'python3.11', 'python3.12', 'python3.13', 'python3.14', 'python3.15', 'python3.6', 'python3.7', 'python3.8', 'python3.9', 'ruby2.5', 'ruby2.7', 'ruby3.2', 'ruby3.3', 'ruby3.4', 'ruby4.0']", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "MyFunc", + "logicalId": "MultiElementJoinA", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Runtime", - "category": "Schema", + "propertyPath": "Properties.SubnetId.Fn::Join", + "category": "Intrinsic Function", "startLine": 10, - "startColumn": 9, + "startColumn": 7, "endLine": 10, - "endColumn": 17, - "ruleDescription": "Value not in allowed enum", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs99.x", - "extra": { - "allowed_values": [ - "dotnet10", - "dotnet6", - "dotnet8", - "dotnetcore1.0", - "dotnetcore2.0", - "dotnetcore2.1", - "dotnetcore3.1", - "go1.x", - "java11", - "java11.al2023", - "java17", - "java17.al2023", - "java21", - "java25", - "java8", - "java8.al2", - "java8.al2023", - "nodejs", - "nodejs10.x", - "nodejs12.x", - "nodejs14.x", - "nodejs16.x", - "nodejs18.x", - "nodejs20.x", - "nodejs22.x", - "nodejs24.x", - "nodejs26.x", - "nodejs4.3", - "nodejs4.3-edge", - "nodejs6.10", - "nodejs8.10", - "provided", - "provided.al2", - "provided.al2023", - "python2.7", - "python3.10", - "python3.11", - "python3.12", - "python3.13", - "python3.14", - "python3.15", - "python3.6", - "python3.7", - "python3.8", - "python3.9", - "ruby2.5", - "ruby2.7", - "ruby3.2", - "ruby3.3", - "ruby3.4", - "ruby4.0" - ] - } - } - }, - { - "ruleId": "W3030", - "severity": "WARN", - "message": "'node99.x' is not one of ['dotnet10', 'dotnet6', 'dotnet8', 'dotnetcore1.0', 'dotnetcore2.0', 'dotnetcore2.1', 'dotnetcore3.1', 'go1.x', 'java11', 'java11.al2023', 'java17', 'java17.al2023', 'java21', 'java25', 'java8', 'java8.al2', 'java8.al2023', 'nodejs', 'nodejs10.x', 'nodejs12.x', 'nodejs14.x', 'nodejs16.x', 'nodejs18.x', 'nodejs20.x', 'nodejs22.x', 'nodejs24.x', 'nodejs26.x', 'nodejs4.3', 'nodejs4.3-edge', 'nodejs6.10', 'nodejs8.10', 'provided', 'provided.al2', 'provided.al2023', 'python2.7', 'python3.10', 'python3.11', 'python3.12', 'python3.13', 'python3.14', 'python3.15', 'python3.6', 'python3.7', 'python3.8', 'python3.9', 'ruby2.5', 'ruby2.7', 'ruby3.2', 'ruby3.3', 'ruby3.4', 'ruby4.0']", - "source": "CFN_LINT", - "entity": { - "logicalId": "FutureNodeFunc", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Schema", - "startLine": 22, - "startColumn": 9, - "endLine": 22, - "endColumn": 17, - "ruleDescription": "Value not in allowed enum", - "phase": "SCHEMA", - "context": { - "actualValue": "node99.x", - "extra": { - "allowed_values": [ - "dotnet10", - "dotnet6", - "dotnet8", - "dotnetcore1.0", - "dotnetcore2.0", - "dotnetcore2.1", - "dotnetcore3.1", - "go1.x", - "java11", - "java11.al2023", - "java17", - "java17.al2023", - "java21", - "java25", - "java8", - "java8.al2", - "java8.al2023", - "nodejs", - "nodejs10.x", - "nodejs12.x", - "nodejs14.x", - "nodejs16.x", - "nodejs18.x", - "nodejs20.x", - "nodejs22.x", - "nodejs24.x", - "nodejs26.x", - "nodejs4.3", - "nodejs4.3-edge", - "nodejs6.10", - "nodejs8.10", - "provided", - "provided.al2", - "provided.al2023", - "python2.7", - "python3.10", - "python3.11", - "python3.12", - "python3.13", - "python3.14", - "python3.15", - "python3.6", - "python3.7", - "python3.8", - "python3.9", - "ruby2.5", - "ruby2.7", - "ruby3.2", - "ruby3.3", - "ruby3.4", - "ruby4.0" - ] - } - } - }, - { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", - "entity": { - "logicalId": "MyFunc", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "category": "Security", - "startLine": 4, - "startColumn": 5, - "endLine": 4, - "endColumn": 12, - "ruleDescription": "Hardcoded account ID in ARN", + "endColumn": 15, + "ruleDescription": "Use Sub instead of Join", "phase": "LINT" }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", "entity": { - "logicalId": "FutureNodeFunc", + "logicalId": "MultiElementJoinB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "category": "Security", - "startLine": 16, - "startColumn": 5, - "endLine": 16, - "endColumn": 20, - "ruleDescription": "Hardcoded account ID in ARN", + "propertyPath": "Properties.SubnetId.Fn::Join", + "category": "Intrinsic Function", + "startLine": 15, + "startColumn": 7, + "endLine": 15, + "endColumn": 15, + "ruleDescription": "Use Sub instead of Join", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyFunc", + "logicalId": "MultiElementJoinA", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 7, - "startColumn": 9, - "endLine": 7, - "endColumn": 22, + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FutureNodeFunc", + "logicalId": "MultiElementJoinA", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 19, - "startColumn": 9, - "endLine": 19, - "endColumn": 22, + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:{dynamic}-a)", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyFunc' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyFunc", + "logicalId": "MultiElementJoinB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 6, + "startLine": 14, "startColumn": 7, - "endLine": 6, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 14, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FutureNodeFunc' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FutureNodeFunc", + "logicalId": "MultiElementJoinB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 18, + "startLine": 15, "startColumn": 7, - "endLine": 18, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 15, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:{dynamic}-b)", + "extra": { + "replacement_strategy": "delete_then_create" + } + } } ] }, - "gh-issues/issue-69.yaml": { - "filePath": "gh-issues/issue-69.yaml", + "good/E3031_cognito_user_pool_domain_pattern.yaml": { + "filePath": "good/E3031_cognito_user_pool_domain_pattern.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 5, "counts": { - "fatal": 2, + "fatal": 0, "errors": 0, "warnings": 0, - "informational": 0, + "informational": 8, "debug": 0 }, "suppressed": 0, @@ -12799,182 +14275,140 @@ }, "diagnostics": [ { - "ruleId": "F3032", - "severity": "FATAL", - "message": "expected maximum item count: 1, found: 2", - "source": "SCHEMA", - "entity": { - "logicalId": "Profile", - "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" - }, - "propertyPath": "Properties.Roles", - "category": "Schema", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 12, - "ruleDescription": "Array item count out of bounds", - "phase": "SCHEMA", - "context": { - "extra": { - "actual_count": 2, - "max_items": 1, - "min_items": 0 - } - } - }, - { - "ruleId": "F3037", - "severity": "FATAL", - "message": "Array items are not unique", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Profile", + "logicalId": "HostedUiPrefix", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::Cognito::UserPoolDomain" }, - "propertyPath": "Properties.Roles", - "category": "Schema", - "startLine": 6, + "propertyPath": "Properties.UserPoolId", + "category": "Best Practice", + "startLine": 18, "startColumn": 7, - "endLine": 6, - "endColumn": 12, - "ruleDescription": "Array items not unique", + "endLine": 18, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": [ - "arn:aws:iam::012345678901:role/SameRole", - "arn:aws:iam::012345678901:role/SameRole" - ] + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserPool'" } - } - ] - }, - "good/E3019_identity_no_false_positive.yaml": { - "filePath": "good/E3019_identity_no_false_positive.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 10, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'Domain' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BucketA", + "logicalId": "HostedUiPrefix", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Cognito::UserPoolDomain" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Domain", "category": "Best Practice", - "startLine": 13, - "startColumn": 18, - "endLine": 13, - "endColumn": 28, + "startLine": 19, + "startColumn": 7, + "endLine": 19, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'NameA' (type String)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BucketB", + "logicalId": "SingleCharacterPrefix", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Cognito::UserPoolDomain" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.UserPoolId", "category": "Best Practice", - "startLine": 16, - "startColumn": 18, - "endLine": 16, - "endColumn": 28, + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "parameter 'NameB' (type String)" + "resolutionSource": "Ref to 'UserPool'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'Domain' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CompoundSub", + "logicalId": "SingleCharacterPrefix", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Cognito::UserPoolDomain" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Domain", "category": "Best Practice", - "startLine": 20, - "startColumn": 18, - "endLine": 20, - "endColumn": 28, + "startLine": 24, + "startColumn": 7, + "endLine": 24, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:${NameA}-suffix)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalLeft", + "logicalId": "CustomDomain", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Cognito::UserPoolDomain" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.UserPoolId", "category": "Best Practice", - "startLine": 25, - "startColumn": 18, - "endLine": 25, - "endColumn": 28, + "startLine": 28, + "startColumn": 7, + "endLine": 28, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserPool'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'Domain' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalRight", + "logicalId": "CustomDomain", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Cognito::UserPoolDomain" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Domain", "category": "Best Practice", "startLine": 29, - "startColumn": 18, + "startColumn": 7, "endLine": 29, - "endColumn": 28, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -12982,506 +14416,570 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BucketA' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BucketA", + "logicalId": "ConditionallyCustomDomain", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Cognito::UserPoolDomain" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.UserPoolId", "category": "Best Practice", - "startLine": 13, - "startColumn": 5, - "endLine": 13, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserPool'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BucketB' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'Domain' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BucketB", + "logicalId": "ConditionallyCustomDomain", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Cognito::UserPoolDomain" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Domain", "category": "Best Practice", - "startLine": 16, - "startColumn": 5, - "endLine": 16, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 36, + "startColumn": 7, + "endLine": 36, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseCustomDomain'" + } + } + ] + }, + "good/E3663_custom_environment_key.yaml": { + "filePath": "good/E3663_custom_environment_key.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "good/E3680_alb_subnet_counts.yaml": { + "filePath": "good/E3680_alb_subnet_counts.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 9, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 19, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CompoundSub' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CompoundSub", + "logicalId": "Vpc", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ConditionalLeft' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalLeft", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ConditionalRight' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalRight", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 29, - "startColumn": 5, - "endLine": 29, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/E3022_multi_element_join_distinct.yaml": { - "filePath": "good/E3022_multi_element_join_distinct.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 6, - "debug": 0 + "startLine": 22, + "startColumn": 7, + "endLine": 22, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I1022", + "ruleId": "I9001", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MultiElementJoinA", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.SubnetId.Fn::Join", - "category": "Intrinsic Function", - "startLine": 10, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 26, "startColumn": 7, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "endLine": 26, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc'" + } }, { - "ruleId": "I1022", + "ruleId": "I9001", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MultiElementJoinB", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.SubnetId.Fn::Join", - "category": "Intrinsic Function", - "startLine": 15, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 27, "startColumn": 7, - "endLine": 15, - "endColumn": 15, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "endLine": 27, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MultiElementJoinA", + "logicalId": "AlbTwoSubnets", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 9, + "startLine": 31, "startColumn": 7, - "endLine": 9, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 31, + "endColumn": 11, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MultiElementJoinA", + "logicalId": "AlbSubnetsFromParameter", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 10, + "startLine": 44, "startColumn": 7, - "endLine": 10, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 44, + "endColumn": 11, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:{dynamic}-a)", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MultiElementJoinB", + "logicalId": "NlbOneSubnet", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 14, + "startLine": 49, "startColumn": 7, - "endLine": 14, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 49, + "endColumn": 11, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MultiElementJoinB", + "logicalId": "GatewayOneSubnet", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 15, + "startLine": 55, "startColumn": 7, - "endLine": 15, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 55, + "endColumn": 11, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:{dynamic}-b)", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } - } - ] - }, - "good/E3031_cognito_user_pool_domain_pattern.yaml": { - "filePath": "good/E3031_cognito_user_pool_domain_pattern.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 8, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HostedUiPrefix", + "logicalId": "ParameterTypedOneSubnet", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.UserPoolId", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 18, + "startLine": 61, "startColumn": 7, - "endLine": 18, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 61, + "endColumn": 11, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserPool'" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Domain' is create-only; updating it will cause resource replacement", + "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "HostedUiPrefix", + "logicalId": "Vpc", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Domain", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SubnetA' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 20, + "startColumn": 5, + "endLine": 20, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SubnetB' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 25, + "startColumn": 5, + "endLine": 25, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'AlbTwoSubnets' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "AlbTwoSubnets", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 30, + "startColumn": 5, + "endLine": 30, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'AlbDefaultTypeTwoSubnetMappings' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "AlbDefaultTypeTwoSubnetMappings", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 19, - "startColumn": 7, - "endLine": 19, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 37, + "startColumn": 5, + "endLine": 37, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", + "message": "Resource 'AlbSubnetsFromParameter' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SingleCharacterPrefix", + "logicalId": "AlbSubnetsFromParameter", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.UserPoolId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserPool'" - } + "startLine": 43, + "startColumn": 5, + "endLine": 43, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Domain' is create-only; updating it will cause resource replacement", + "message": "Resource 'NlbOneSubnet' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SingleCharacterPrefix", + "logicalId": "NlbOneSubnet", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.Domain", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 24, - "startColumn": 7, - "endLine": 24, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 48, + "startColumn": 5, + "endLine": 48, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", + "message": "Resource 'GatewayOneSubnet' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomDomain", + "logicalId": "GatewayOneSubnet", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.UserPoolId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserPool'" - } + "startLine": 54, + "startColumn": 5, + "endLine": 54, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Domain' is create-only; updating it will cause resource replacement", + "message": "Resource 'ParameterTypedOneSubnet' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomDomain", + "logicalId": "ParameterTypedOneSubnet", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.Domain", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 29, - "startColumn": 7, - "endLine": 29, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 60, + "startColumn": 5, + "endLine": 60, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/E9001_aws_cdk_metadata.yaml": { + "filePath": "good/E9001_aws_cdk_metadata.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionallyCustomDomain", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.UserPoolId", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 35, + "startLine": 18, "startColumn": 7, - "endLine": 35, + "endLine": 18, "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserPool'" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Domain' is create-only; updating it will cause resource replacement", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConditionallyCustomDomain", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Domain", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 36, - "startColumn": 7, - "endLine": 36, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseCustomDomain'" - } + "startLine": 17, + "startColumn": 5, + "endLine": 17, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "good/E3663_custom_environment_key.yaml": { - "filePath": "good/E3663_custom_environment_key.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "good/E3680_alb_subnet_counts.yaml": { - "filePath": "good/E3680_alb_subnet_counts.yaml", + "good/E9002_port_range_exemptions.yaml": { + "filePath": "good/E9002_port_range_exemptions.yaml", "status": "OK", "metadata": { - "resourcesScanned": 9, + "resourcesScanned": 5, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 19, + "informational": 20, "debug": 0 }, "suppressed": 0, @@ -13501,9 +14999,9 @@ }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 17, + "startLine": 10, "startColumn": 7, - "endLine": 17, + "endLine": 10, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -13511,21 +15009,43 @@ "lifecycle": "create-only" } }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "SecurityGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 21, + "startLine": 15, "startColumn": 7, - "endLine": 21, + "endLine": 15, "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -13537,64 +15057,67 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "StandaloneIngressIcmpTypeCode", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 22, + "startLine": 28, "startColumn": 7, - "endLine": 22, - "endColumn": 16, + "endLine": 28, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SecurityGroup'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "StandaloneIngressIcmpTypeCode", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 26, + "startLine": 29, "startColumn": 7, - "endLine": 26, - "endColumn": 12, + "endLine": 29, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "StandaloneIngressIcmpTypeCode", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 27, + "startLine": 30, "startColumn": 7, - "endLine": 27, - "endColumn": 16, + "endLine": 30, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13604,20 +15127,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AlbTwoSubnets", + "logicalId": "StandaloneIngressIcmpTypeCode", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.ToPort", "category": "Best Practice", "startLine": 31, "startColumn": 7, "endLine": 31, - "endColumn": 11, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13627,20 +15150,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AlbSubnetsFromParameter", + "logicalId": "StandaloneIngressIcmpTypeCode", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.CidrIp", "category": "Best Practice", - "startLine": 44, + "startLine": 32, "startColumn": 7, - "endLine": 44, - "endColumn": 11, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endLine": 32, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13650,43 +15173,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NlbOneSubnet", + "logicalId": "StandaloneIngressIcmpv6TypeCode", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 49, + "startLine": 36, "startColumn": 7, - "endLine": 49, - "endColumn": 11, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endLine": 36, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SecurityGroup'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GatewayOneSubnet", + "logicalId": "StandaloneIngressIcmpv6TypeCode", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 55, + "startLine": 37, "startColumn": 7, - "endLine": 55, - "endColumn": 11, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endLine": 37, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13696,20 +15220,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ParameterTypedOneSubnet", + "logicalId": "StandaloneIngressIcmpv6TypeCode", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 61, + "startLine": 38, "startColumn": 7, - "endLine": 61, - "endColumn": 11, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endLine": 38, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13717,161 +15241,183 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Vpc", + "logicalId": "StandaloneIngressIcmpv6TypeCode", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 16, - "startColumn": 5, - "endLine": 16, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 39, + "startColumn": 7, + "endLine": 39, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SubnetA' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Property 'CidrIpv6' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "StandaloneIngressIcmpv6TypeCode", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrIpv6", "category": "Best Practice", - "startLine": 20, - "startColumn": 5, - "endLine": 20, + "startLine": 40, + "startColumn": 7, + "endLine": 40, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SubnetB' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "StandaloneEgressAscendingRange", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 44, + "startColumn": 7, + "endLine": 44, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SecurityGroup'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'AlbTwoSubnets' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AlbTwoSubnets", + "logicalId": "StandaloneEgressAscendingRange", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 30, - "startColumn": 5, - "endLine": 30, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 45, + "startColumn": 7, + "endLine": 45, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'AlbDefaultTypeTwoSubnetMappings' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AlbDefaultTypeTwoSubnetMappings", + "logicalId": "StandaloneEgressAscendingRange", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 37, - "startColumn": 5, - "endLine": 37, + "startLine": 46, + "startColumn": 7, + "endLine": 46, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'AlbSubnetsFromParameter' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AlbSubnetsFromParameter", + "logicalId": "StandaloneEgressAscendingRange", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 43, - "startColumn": 5, - "endLine": 43, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 47, + "startColumn": 7, + "endLine": 47, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'NlbOneSubnet' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NlbOneSubnet", + "logicalId": "StandaloneEgressAscendingRange", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrIp", "category": "Best Practice", "startLine": 48, - "startColumn": 5, + "startColumn": 7, "endLine": 48, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'GatewayOneSubnet' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "GatewayOneSubnet", + "logicalId": "Vpc", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 54, + "startLine": 9, "startColumn": 5, - "endLine": 54, + "endLine": 9, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -13879,35 +15425,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ParameterTypedOneSubnet' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "message": "Resource 'SecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ParameterTypedOneSubnet", + "logicalId": "SecurityGroup", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 60, + "startLine": 13, "startColumn": 5, - "endLine": 60, + "endLine": 13, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/E9001_aws_cdk_metadata.yaml": { - "filePath": "good/E9001_aws_cdk_metadata.yaml", + "good/W1028_pseudo_param_branches_reachable.yaml": { + "filePath": "good/W1028_pseudo_param_branches_reachable.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 2, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -13915,60 +15461,38 @@ "severityLevel": "DEBUG" }, "diagnostics": [ - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 18, - "startColumn": 7, - "endLine": 18, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'KubectlHandlerRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "KubectlHandlerRole", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, + "startLine": 20, "startColumn": 5, - "endLine": 17, + "endLine": 20, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/E9002_port_range_exemptions.yaml": { - "filePath": "good/E9002_port_range_exemptions.yaml", + "good/W2530_snapstart_unreachable_or_published.yaml": { + "filePath": "good/W2530_snapstart_unreachable_or_published.yaml", "status": "OK", "metadata": { - "resourcesScanned": 5, + "resourcesScanned": 16, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 20, + "warnings": 4, + "informational": 16, "debug": 0 }, "suppressed": 0, @@ -13977,436 +15501,375 @@ }, "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Vpc", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'IsUsEast1' to False from current status True", + "source": "CFN_LINT", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "PropertiesBranchExcludedByResourceCondition", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Fn::If.Fn::If.2", "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 11, + "startColumn": 5, + "endLine": 11, + "endColumn": 11, + "ruleDescription": "Check Fn::If has a path that cannot be reached", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'IsUsEast1' to False from current status True", + "source": "CFN_LINT", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "ApplyOnBranchExcludedByResourceCondition", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.SnapStart.ApplyOn.Fn::If.2", "category": "Best Practice", - "startLine": 15, - "startColumn": 7, - "endLine": 15, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" - } + "startLine": 38, + "startColumn": 40, + "endLine": 38, + "endColumn": 41, + "ruleDescription": "Check Fn::If has a path that cannot be reached", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'IsUsEast1' to False from current status True", + "source": "CFN_LINT", "entity": { - "logicalId": "StandaloneIngressIcmpTypeCode", + "logicalId": "RepeatedConditionExcludesInnerBranch", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.SnapStart.Fn::If.1.ApplyOn.Fn::If.2", "category": "Best Practice", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'SecurityGroup'" - } + "startLine": 50, + "startColumn": 42, + "endLine": 50, + "endColumn": 43, + "ruleDescription": "Check Fn::If has a path that cannot be reached", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 1] is not reachable. When setting condition 'IsUsWest2' to True", + "source": "CFN_LINT", "entity": { - "logicalId": "StandaloneIngressIcmpTypeCode", + "logicalId": "ExclusiveConditionsExcludeInnerBranch", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.SnapStart.Fn::If.1.ApplyOn.Fn::If.1", "category": "Best Practice", - "startLine": 29, - "startColumn": 7, - "endLine": 29, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 63, + "startColumn": 36, + "endLine": 63, + "endColumn": 37, + "ruleDescription": "Check Fn::If has a path that cannot be reached", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpTypeCode", + "logicalId": "PublishedThroughSubVersion", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Lambda::Version" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 30, + "startLine": 92, "startColumn": 7, - "endLine": 30, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 92, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:${PublishedThroughSub})" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpTypeCode", + "logicalId": "PublishedFromConditionalPropertiesVersion", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Lambda::Version" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 31, + "startLine": 114, "startColumn": 7, - "endLine": 31, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 114, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt PublishedFromConditionalProperties.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpTypeCode", + "logicalId": "PublishedInMatchingConditionVersion", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Lambda::Version" }, - "propertyPath": "Properties.CidrIp", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 32, + "startLine": 132, "startColumn": 7, - "endLine": 32, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 132, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'PublishedInMatchingCondition'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpv6TypeCode", + "logicalId": "PublishedInUsEast1Version", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Lambda::Version" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 36, + "startLine": 148, "startColumn": 7, - "endLine": 36, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 148, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SecurityGroup'" + "resolutionSource": "Ref to 'PublishedInEveryDeployment'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpv6TypeCode", + "logicalId": "PublishedElsewhereVersion", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Lambda::Version" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 37, + "startLine": 153, "startColumn": 7, - "endLine": 37, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 153, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'PublishedInEveryDeployment'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpv6TypeCode", + "logicalId": "PublishedFromMatchingFunctionNameBranchVersion", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Lambda::Version" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 38, + "startLine": 168, "startColumn": 7, - "endLine": 38, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 168, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsUsEast1'" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Resource 'PropertiesBranchExcludedByResourceCondition' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpv6TypeCode", + "logicalId": "PropertiesBranchExcludedByResourceCondition", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 39, - "startColumn": 7, - "endLine": 39, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 11, + "startColumn": 5, + "endLine": 11, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrIpv6' is create-only; updating it will cause resource replacement", + "message": "Resource 'ApplyOnBranchExcludedByResourceCondition' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpv6TypeCode", + "logicalId": "ApplyOnBranchExcludedByResourceCondition", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.CidrIpv6", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 40, - "startColumn": 7, - "endLine": 40, + "startLine": 30, + "startColumn": 5, + "endLine": 30, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Resource 'RepeatedConditionExcludesInnerBranch' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StandaloneEgressAscendingRange", + "logicalId": "RepeatedConditionExcludesInnerBranch", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 44, - "startColumn": 7, - "endLine": 44, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'SecurityGroup'" - } + "startLine": 41, + "startColumn": 5, + "endLine": 41, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Resource 'ExclusiveConditionsExcludeInnerBranch' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StandaloneEgressAscendingRange", + "logicalId": "ExclusiveConditionsExcludeInnerBranch", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 45, - "startColumn": 7, - "endLine": 45, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 54, + "startColumn": 5, + "endLine": 54, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Resource 'SnapStartNoValueOrNone' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StandaloneEgressAscendingRange", + "logicalId": "SnapStartNoValueOrNone", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 46, - "startColumn": 7, - "endLine": 46, + "startLine": 67, + "startColumn": 5, + "endLine": 67, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Resource 'PublishedThroughSub' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StandaloneEgressAscendingRange", + "logicalId": "PublishedThroughSub", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 47, - "startColumn": 7, - "endLine": 47, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 80, + "startColumn": 5, + "endLine": 80, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", + "message": "Resource 'PublishedFromConditionalProperties' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StandaloneEgressAscendingRange", + "logicalId": "PublishedFromConditionalProperties", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.CidrIp", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 48, - "startColumn": 7, - "endLine": 48, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 95, + "startColumn": 5, + "endLine": 95, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "message": "Resource 'PublishedInMatchingCondition' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Vpc", + "logicalId": "PublishedInMatchingCondition", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, + "startLine": 117, "startColumn": 5, - "endLine": 9, + "endLine": 117, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -14414,58 +15877,39 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'PublishedInEveryDeployment' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "PublishedInEveryDeployment", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 13, + "startLine": 135, "startColumn": 5, - "endLine": 13, + "endLine": 135, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/W1028_pseudo_param_branches_reachable.yaml": { - "filePath": "good/W1028_pseudo_param_branches_reachable.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'KubectlHandlerRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'PublishedFromMatchingFunctionNameBranch' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "KubectlHandlerRole", + "logicalId": "PublishedFromMatchingFunctionNameBranch", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 20, + "startLine": 156, "startColumn": 5, - "endLine": 20, + "endLine": 156, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19945,272 +21389,42 @@ "startColumn": 3, "endLine": 172, "endColumn": 36, - "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": "CorrelatedOnDemandThenProvisioned", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "category": "Best Practice", - "startLine": 172, - "startColumn": 3, - "endLine": 172, - "endColumn": 36, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ValidFargate", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Family", - "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ValidFargate", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ValidFargate", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ValidFargate", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Cpu", - "category": "Best Practice", - "startLine": 15, - "startColumn": 7, - "endLine": 15, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ValidFargate", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Memory", - "category": "Best Practice", - "startLine": 16, - "startColumn": 7, - "endLine": 16, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ValidFargate", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ValidFargateSplunk", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Family", - "category": "Best Practice", - "startLine": 31, - "startColumn": 7, - "endLine": 31, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ValidFargateSplunk", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 32, - "startColumn": 7, - "endLine": 32, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ValidFargateSplunk", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 34, - "startColumn": 7, - "endLine": 34, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "ValidFargateSplunk", + "logicalId": "CorrelatedOnDemandThenProvisioned", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 172, + "startColumn": 3, + "endLine": 172, + "endColumn": 36, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ValidFargateSplunk", + "logicalId": "ValidFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 36, + "startLine": 11, "startColumn": 7, - "endLine": 36, + "endLine": 11, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -20222,19 +21436,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ValidFargateSplunk", + "logicalId": "ValidFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 37, + "startLine": 12, "startColumn": 7, - "endLine": 37, - "endColumn": 27, + "endLine": 12, + "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -20245,19 +21459,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NonFargateTask", + "logicalId": "ValidFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 48, + "startLine": 14, "startColumn": 7, - "endLine": 48, - "endColumn": 13, + "endLine": 14, + "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -20268,19 +21482,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NonFargateTask", + "logicalId": "ValidFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 49, + "startLine": 15, "startColumn": 7, - "endLine": 49, - "endColumn": 30, + "endLine": 15, + "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -20291,19 +21505,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NonFargateTask", + "logicalId": "ValidFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 51, + "startLine": 16, "startColumn": 7, - "endLine": 51, - "endColumn": 18, + "endLine": 16, + "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -20317,15 +21531,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NonFargateTask", + "logicalId": "ValidFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 52, + "startLine": 17, "startColumn": 7, - "endLine": 52, + "endLine": 17, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -20340,15 +21554,15 @@ "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "ValidFargateSplunk", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 63, + "startLine": 31, "startColumn": 7, - "endLine": 63, + "endLine": 31, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -20363,15 +21577,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "ValidFargateSplunk", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 64, + "startLine": 32, "startColumn": 7, - "endLine": 64, + "endLine": 32, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -20386,15 +21600,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "ValidFargateSplunk", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 66, + "startLine": 34, "startColumn": 7, - "endLine": 66, + "endLine": 34, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -20409,15 +21623,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "ValidFargateSplunk", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 67, + "startLine": 35, "startColumn": 7, - "endLine": 67, + "endLine": 35, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -20432,15 +21646,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "ValidFargateSplunk", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 68, + "startLine": 36, "startColumn": 7, - "endLine": 68, + "endLine": 36, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -20449,45 +21663,21 @@ "lifecycle": "create-only" } }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PlacementConstraints' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FargateNullPC", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.PlacementConstraints", - "category": "Best Practice", - "startLine": 69, - "startColumn": 7, - "endLine": 69, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" - } - }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "ValidFargateSplunk", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 70, + "startLine": 37, "startColumn": 7, - "endLine": 70, + "endLine": 37, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -20499,19 +21689,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PayPerRequestTable", + "logicalId": "NonFargateTask", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.TableName", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 79, + "startLine": 48, "startColumn": 7, - "endLine": 79, - "endColumn": 16, + "endLine": 48, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -20521,41 +21712,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "PayPerRequestTable", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.KeySchema", - "category": "Best Practice", - "startLine": 81, - "startColumn": 7, - "endLine": 81, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProvisionedTable", + "logicalId": "NonFargateTask", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.TableName", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 92, + "startLine": 49, "startColumn": 7, - "endLine": 92, - "endColumn": 16, + "endLine": 49, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -20565,41 +21735,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ProvisionedTable", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.KeySchema", - "category": "Best Practice", - "startLine": 97, - "startColumn": 7, - "endLine": 97, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DefaultWithThroughput", + "logicalId": "NonFargateTask", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.TableName", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 108, + "startLine": 51, "startColumn": 7, - "endLine": 108, - "endColumn": 16, + "endLine": 51, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -20609,23 +21758,24 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DefaultWithThroughput", + "logicalId": "NonFargateTask", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 112, + "startLine": 52, "startColumn": 7, - "endLine": 112, - "endColumn": 16, + "endLine": 52, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { @@ -20634,15 +21784,15 @@ "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateIntCpu", + "logicalId": "FargateNullPC", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 123, + "startLine": 63, "startColumn": 7, - "endLine": 123, + "endLine": 63, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -20657,15 +21807,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateIntCpu", + "logicalId": "FargateNullPC", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 124, + "startLine": 64, "startColumn": 7, - "endLine": 124, + "endLine": 64, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -20680,15 +21830,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateIntCpu", + "logicalId": "FargateNullPC", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 126, + "startLine": 66, "startColumn": 7, - "endLine": 126, + "endLine": 66, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -20703,15 +21853,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateIntCpu", + "logicalId": "FargateNullPC", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 127, + "startLine": 67, "startColumn": 7, - "endLine": 127, + "endLine": 67, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -20726,15 +21876,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateIntCpu", + "logicalId": "FargateNullPC", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 128, + "startLine": 68, "startColumn": 7, - "endLine": 128, + "endLine": 68, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -20743,21 +21893,45 @@ "lifecycle": "create-only" } }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'PlacementConstraints' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FargateNullPC", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.PlacementConstraints", + "category": "Best Practice", + "startLine": 69, + "startColumn": 7, + "endLine": 69, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" + } + }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateIntCpu", + "logicalId": "FargateNullPC", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 129, + "startLine": 70, "startColumn": 7, - "endLine": 129, + "endLine": 70, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -20769,68 +21943,63 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedFargateThenEc2", + "logicalId": "PayPerRequestTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 139, + "startLine": 79, "startColumn": 7, - "endLine": 139, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 79, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedFargateThenEc2", + "logicalId": "PayPerRequestTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 140, + "startLine": 81, "startColumn": 7, - "endLine": 140, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 81, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedFargateThenEc2", + "logicalId": "ProvisionedTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 141, + "startLine": 92, "startColumn": 7, - "endLine": 141, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 92, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -20840,43 +22009,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedFargateThenEc2", + "logicalId": "ProvisionedTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 142, + "startLine": 97, "startColumn": 7, - "endLine": 142, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 97, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedFargateThenEc2", + "logicalId": "DefaultWithThroughput", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 143, + "startLine": 108, "startColumn": 7, - "endLine": 143, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 108, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -20886,67 +22053,64 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2ThenFargate", + "logicalId": "DefaultWithThroughput", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 151, + "startLine": 112, "startColumn": 7, - "endLine": 151, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 112, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2ThenFargate", + "logicalId": "FargateIntCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 152, + "startLine": 123, "startColumn": 7, - "endLine": 152, - "endColumn": 18, + "endLine": 123, + "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2ThenFargate", + "logicalId": "FargateIntCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 153, + "startLine": 124, "startColumn": 7, - "endLine": 153, - "endColumn": 10, + "endLine": 124, + "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -20957,19 +22121,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2ThenFargate", + "logicalId": "FargateIntCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 154, + "startLine": 126, "startColumn": 7, - "endLine": 154, - "endColumn": 13, + "endLine": 126, + "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -20980,19 +22144,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2ThenFargate", + "logicalId": "FargateIntCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 155, + "startLine": 127, "startColumn": 7, - "endLine": 155, - "endColumn": 27, + "endLine": 127, + "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -21003,45 +22167,47 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedProvisionedThenOnDemand", + "logicalId": "FargateIntCpu", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 166, + "startLine": 128, "startColumn": 7, - "endLine": 166, - "endColumn": 16, + "endLine": 128, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedOnDemandThenProvisioned", + "logicalId": "FargateIntCpu", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 177, + "startLine": 129, "startColumn": 7, - "endLine": 177, - "endColumn": 16, + "endLine": 129, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { @@ -21050,15 +22216,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedFargateSizeThenEc2", + "logicalId": "CorrelatedFargateThenEc2", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 187, + "startLine": 139, "startColumn": 7, - "endLine": 187, + "endLine": 139, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -21074,15 +22240,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedFargateSizeThenEc2", + "logicalId": "CorrelatedFargateThenEc2", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 188, + "startLine": 140, "startColumn": 7, - "endLine": 188, + "endLine": 140, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -21098,22 +22264,21 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedFargateSizeThenEc2", + "logicalId": "CorrelatedFargateThenEc2", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 189, + "startLine": 141, "startColumn": 7, - "endLine": 189, + "endLine": 141, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" + "lifecycle": "create-only" } }, { @@ -21122,15 +22287,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedFargateSizeThenEc2", + "logicalId": "CorrelatedFargateThenEc2", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 190, + "startLine": 142, "startColumn": 7, - "endLine": 190, + "endLine": 142, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -21145,15 +22310,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedFargateSizeThenEc2", + "logicalId": "CorrelatedFargateThenEc2", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 191, + "startLine": 143, "startColumn": 7, - "endLine": 191, + "endLine": 143, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -21168,15 +22333,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2SizeThenFargate", + "logicalId": "CorrelatedEc2ThenFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 199, + "startLine": 151, "startColumn": 7, - "endLine": 199, + "endLine": 151, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -21192,15 +22357,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2SizeThenFargate", + "logicalId": "CorrelatedEc2ThenFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 200, + "startLine": 152, "startColumn": 7, - "endLine": 200, + "endLine": 152, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -21216,22 +22381,21 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2SizeThenFargate", + "logicalId": "CorrelatedEc2ThenFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 201, + "startLine": 153, "startColumn": 7, - "endLine": 201, + "endLine": 153, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" + "lifecycle": "create-only" } }, { @@ -21240,15 +22404,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2SizeThenFargate", + "logicalId": "CorrelatedEc2ThenFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 202, + "startLine": 154, "startColumn": 7, - "endLine": 202, + "endLine": 154, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -21263,15 +22427,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2SizeThenFargate", + "logicalId": "CorrelatedEc2ThenFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 203, + "startLine": 155, "startColumn": 7, - "endLine": 203, + "endLine": 155, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -21281,325 +22445,189 @@ } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ValidFargate' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ValidFargate", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ValidFargateSplunk' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ValidFargateSplunk", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 30, - "startColumn": 5, - "endLine": 30, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'NonFargateTask' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "NonFargateTask", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 47, - "startColumn": 5, - "endLine": 47, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FargateNullPC' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FargateNullPC", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 62, - "startColumn": 5, - "endLine": 62, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'PayPerRequestTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "PayPerRequestTable", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 78, - "startColumn": 5, - "endLine": 78, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ProvisionedTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProvisionedTable", + "logicalId": "CorrelatedProvisionedThenOnDemand", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 91, - "startColumn": 5, - "endLine": 91, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 166, + "startColumn": 7, + "endLine": 166, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DefaultWithThroughput' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DefaultWithThroughput", + "logicalId": "CorrelatedOnDemandThenProvisioned", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 107, - "startColumn": 5, - "endLine": 107, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FargateIntCpu' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FargateIntCpu", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 122, - "startColumn": 5, - "endLine": 122, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CorrelatedFargateThenEc2' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CorrelatedFargateThenEc2", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 138, - "startColumn": 5, - "endLine": 138, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 177, + "startColumn": 7, + "endLine": 177, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CorrelatedEc2ThenFargate' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2ThenFargate", + "logicalId": "CorrelatedFargateSizeThenEc2", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 150, - "startColumn": 5, - "endLine": 150, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 187, + "startColumn": 7, + "endLine": 187, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CorrelatedProvisionedThenOnDemand' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedProvisionedThenOnDemand", + "logicalId": "CorrelatedFargateSizeThenEc2", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 163, - "startColumn": 5, - "endLine": 163, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 188, + "startColumn": 7, + "endLine": 188, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CorrelatedOnDemandThenProvisioned' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedOnDemandThenProvisioned", + "logicalId": "CorrelatedFargateSizeThenEc2", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 174, - "startColumn": 5, - "endLine": 174, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 189, + "startColumn": 7, + "endLine": 189, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CorrelatedFargateSizeThenEc2' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { "logicalId": "CorrelatedFargateSizeThenEc2", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 186, - "startColumn": 5, - "endLine": 186, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 190, + "startColumn": 7, + "endLine": 190, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CorrelatedEc2SizeThenFargate' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2SizeThenFargate", + "logicalId": "CorrelatedFargateSizeThenEc2", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 198, - "startColumn": 5, - "endLine": 198, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/ecs_fargate_decimal_units.yaml": { - "filePath": "good/ecs_fargate_decimal_units.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 42, - "debug": 0 + "startLine": 191, + "startColumn": 7, + "endLine": 191, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "QuarterVcpuDecimal", + "logicalId": "CorrelatedEc2SizeThenFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 6, + "startLine": 199, "startColumn": 7, - "endLine": 6, + "endLine": 199, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" } }, { @@ -21608,21 +22636,22 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "QuarterVcpuDecimal", + "logicalId": "CorrelatedEc2SizeThenFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 7, + "startLine": 200, "startColumn": 7, - "endLine": 7, + "endLine": 200, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" } }, { @@ -21631,21 +22660,22 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "QuarterVcpuDecimal", + "logicalId": "CorrelatedEc2SizeThenFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 8, + "startLine": 201, "startColumn": 7, - "endLine": 8, + "endLine": 201, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" } }, { @@ -21654,291 +22684,360 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "QuarterVcpuDecimal", + "logicalId": "CorrelatedEc2SizeThenFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 202, + "startColumn": 7, + "endLine": 202, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CorrelatedEc2SizeThenFargate", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 203, + "startColumn": 7, + "endLine": 203, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ValidFargate' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ValidFargate", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ValidFargateSplunk' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ValidFargateSplunk", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 30, + "startColumn": 5, + "endLine": 30, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'NonFargateTask' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "NonFargateTask", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 47, + "startColumn": 5, + "endLine": 47, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Resource 'FargateNullPC' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "QuarterVcpuDecimal", + "logicalId": "FargateNullPC", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 62, + "startColumn": 5, + "endLine": 62, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Resource 'PayPerRequestTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "HalfVcpuDecimal", + "logicalId": "PayPerRequestTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 18, - "startColumn": 7, - "endLine": 18, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 78, + "startColumn": 5, + "endLine": 78, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Resource 'ProvisionedTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "HalfVcpuDecimal", + "logicalId": "ProvisionedTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 19, - "startColumn": 7, - "endLine": 19, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 91, + "startColumn": 5, + "endLine": 91, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Resource 'DefaultWithThroughput' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "HalfVcpuDecimal", + "logicalId": "DefaultWithThroughput", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 20, - "startColumn": 7, - "endLine": 20, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 107, + "startColumn": 5, + "endLine": 107, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Resource 'FargateIntCpu' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "HalfVcpuDecimal", + "logicalId": "FargateIntCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 21, - "startColumn": 7, - "endLine": 21, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 122, + "startColumn": 5, + "endLine": 122, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Resource 'CorrelatedFargateThenEc2' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "HalfVcpuDecimal", + "logicalId": "CorrelatedFargateThenEc2", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 22, - "startColumn": 7, - "endLine": 22, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 138, + "startColumn": 5, + "endLine": 138, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Resource 'CorrelatedEc2ThenFargate' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DecimalEquivalent", + "logicalId": "CorrelatedEc2ThenFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 30, - "startColumn": 7, - "endLine": 30, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 150, + "startColumn": 5, + "endLine": 150, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Resource 'CorrelatedProvisionedThenOnDemand' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DecimalEquivalent", + "logicalId": "CorrelatedProvisionedThenOnDemand", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 31, - "startColumn": 7, - "endLine": 31, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 163, + "startColumn": 5, + "endLine": 163, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Resource 'CorrelatedOnDemandThenProvisioned' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DecimalEquivalent", + "logicalId": "CorrelatedOnDemandThenProvisioned", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 32, - "startColumn": 7, - "endLine": 32, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 174, + "startColumn": 5, + "endLine": 174, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Resource 'CorrelatedFargateSizeThenEc2' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DecimalEquivalent", + "logicalId": "CorrelatedFargateSizeThenEc2", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 186, + "startColumn": 5, + "endLine": 186, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Resource 'CorrelatedEc2SizeThenFargate' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DecimalEquivalent", + "logicalId": "CorrelatedEc2SizeThenFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 34, - "startColumn": 7, - "endLine": 34, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 198, + "startColumn": 5, + "endLine": 198, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/ecs_fargate_decimal_units.yaml": { + "filePath": "good/ecs_fargate_decimal_units.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 7, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 42, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PlusDecimalEquivalent", + "logicalId": "QuarterVcpuDecimal", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 42, + "startLine": 6, "startColumn": 7, - "endLine": 42, + "endLine": 6, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -21953,15 +23052,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PlusDecimalEquivalent", + "logicalId": "QuarterVcpuDecimal", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 43, + "startLine": 7, "startColumn": 7, - "endLine": 43, + "endLine": 7, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -21976,15 +23075,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PlusDecimalEquivalent", + "logicalId": "QuarterVcpuDecimal", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 44, + "startLine": 8, "startColumn": 7, - "endLine": 44, + "endLine": 8, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -21999,15 +23098,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PlusDecimalEquivalent", + "logicalId": "QuarterVcpuDecimal", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 45, + "startLine": 9, "startColumn": 7, - "endLine": 45, + "endLine": 9, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -22022,15 +23121,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PlusDecimalEquivalent", + "logicalId": "QuarterVcpuDecimal", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 46, + "startLine": 10, "startColumn": 7, - "endLine": 46, + "endLine": 10, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -22045,15 +23144,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LeadingZeroEquivalent", + "logicalId": "HalfVcpuDecimal", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 54, + "startLine": 18, "startColumn": 7, - "endLine": 54, + "endLine": 18, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -22068,15 +23167,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LeadingZeroEquivalent", + "logicalId": "HalfVcpuDecimal", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 55, + "startLine": 19, "startColumn": 7, - "endLine": 55, + "endLine": 19, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -22091,15 +23190,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LeadingZeroEquivalent", + "logicalId": "HalfVcpuDecimal", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 56, + "startLine": 20, "startColumn": 7, - "endLine": 56, + "endLine": 20, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -22114,15 +23213,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LeadingZeroEquivalent", + "logicalId": "HalfVcpuDecimal", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 57, + "startLine": 21, "startColumn": 7, - "endLine": 57, + "endLine": 21, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -22137,15 +23236,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LeadingZeroEquivalent", + "logicalId": "HalfVcpuDecimal", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 58, + "startLine": 22, "startColumn": 7, - "endLine": 58, + "endLine": 22, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -22160,15 +23259,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LeadingDecimalPointEquivalent", + "logicalId": "DecimalEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 66, + "startLine": 30, "startColumn": 7, - "endLine": 66, + "endLine": 30, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -22183,15 +23282,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LeadingDecimalPointEquivalent", + "logicalId": "DecimalEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 67, + "startLine": 31, "startColumn": 7, - "endLine": 67, + "endLine": 31, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -22206,15 +23305,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LeadingDecimalPointEquivalent", + "logicalId": "DecimalEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 68, + "startLine": 32, "startColumn": 7, - "endLine": 68, + "endLine": 32, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -22229,15 +23328,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LeadingDecimalPointEquivalent", + "logicalId": "DecimalEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 69, + "startLine": 33, "startColumn": 7, - "endLine": 69, + "endLine": 33, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -22252,15 +23351,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LeadingDecimalPointEquivalent", + "logicalId": "DecimalEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 70, + "startLine": 34, "startColumn": 7, - "endLine": 70, + "endLine": 34, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -22275,15 +23374,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TrailingDecimalPointEquivalent", + "logicalId": "PlusDecimalEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 78, + "startLine": 42, "startColumn": 7, - "endLine": 78, + "endLine": 42, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -22298,15 +23397,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TrailingDecimalPointEquivalent", + "logicalId": "PlusDecimalEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 79, + "startLine": 43, "startColumn": 7, - "endLine": 79, + "endLine": 43, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -22316,248 +23415,158 @@ } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TrailingDecimalPointEquivalent", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Cpu", - "category": "Best Practice", - "startLine": 80, - "startColumn": 7, - "endLine": 80, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TrailingDecimalPointEquivalent", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Memory", - "category": "Best Practice", - "startLine": 81, - "startColumn": 7, - "endLine": 81, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TrailingDecimalPointEquivalent", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 82, - "startColumn": 7, - "endLine": 82, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'QuarterVcpuDecimal' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "QuarterVcpuDecimal", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'HalfVcpuDecimal' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HalfVcpuDecimal", + "logicalId": "PlusDecimalEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 44, + "startColumn": 7, + "endLine": 44, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DecimalEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DecimalEquivalent", + "logicalId": "PlusDecimalEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 29, - "startColumn": 5, - "endLine": 29, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 45, + "startColumn": 7, + "endLine": 45, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'PlusDecimalEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { "logicalId": "PlusDecimalEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 41, - "startColumn": 5, - "endLine": 41, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 46, + "startColumn": 7, + "endLine": 46, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LeadingZeroEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { "logicalId": "LeadingZeroEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 53, - "startColumn": 5, - "endLine": 53, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 54, + "startColumn": 7, + "endLine": 54, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LeadingDecimalPointEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LeadingDecimalPointEquivalent", + "logicalId": "LeadingZeroEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 65, - "startColumn": 5, - "endLine": 65, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 55, + "startColumn": 7, + "endLine": 55, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TrailingDecimalPointEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TrailingDecimalPointEquivalent", + "logicalId": "LeadingZeroEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 77, - "startColumn": 5, - "endLine": 77, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/ecs_fargate_units_and_sizes.yaml": { - "filePath": "good/ecs_fargate_units_and_sizes.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 43, - "debug": 0 + "startLine": 56, + "startColumn": 7, + "endLine": 56, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "QuarterVcpuHalfGb", + "logicalId": "LeadingZeroEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 8, + "startLine": 57, "startColumn": 7, - "endLine": 8, + "endLine": 57, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -22569,19 +23578,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "QuarterVcpuHalfGb", + "logicalId": "LeadingZeroEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 9, + "startLine": 58, "startColumn": 7, - "endLine": 9, - "endColumn": 30, + "endLine": 58, + "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -22592,19 +23601,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "QuarterVcpuHalfGb", + "logicalId": "LeadingDecimalPointEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 10, + "startLine": 66, "startColumn": 7, - "endLine": 10, - "endColumn": 18, + "endLine": 66, + "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -22615,19 +23624,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "QuarterVcpuHalfGb", + "logicalId": "LeadingDecimalPointEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 11, + "startLine": 67, "startColumn": 7, - "endLine": 11, - "endColumn": 10, + "endLine": 67, + "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -22638,19 +23647,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "QuarterVcpuHalfGb", + "logicalId": "LeadingDecimalPointEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 12, + "startLine": 68, "startColumn": 7, - "endLine": 12, - "endColumn": 13, + "endLine": 68, + "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -22661,19 +23670,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "QuarterVcpuHalfGb", + "logicalId": "LeadingDecimalPointEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 16, + "startLine": 69, "startColumn": 7, - "endLine": 16, - "endColumn": 27, + "endLine": 69, + "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -22684,19 +23693,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EightVcpuSixtyGb", + "logicalId": "LeadingDecimalPointEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 24, + "startLine": 70, "startColumn": 7, - "endLine": 24, - "endColumn": 13, + "endLine": 70, + "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -22710,15 +23719,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EightVcpuSixtyGb", + "logicalId": "TrailingDecimalPointEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 25, + "startLine": 78, "startColumn": 7, - "endLine": 25, + "endLine": 78, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -22733,15 +23742,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EightVcpuSixtyGb", + "logicalId": "TrailingDecimalPointEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 26, + "startLine": 79, "startColumn": 7, - "endLine": 26, + "endLine": 79, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -22756,15 +23765,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EightVcpuSixtyGb", + "logicalId": "TrailingDecimalPointEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 27, + "startLine": 80, "startColumn": 7, - "endLine": 27, + "endLine": 80, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -22779,15 +23788,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EightVcpuSixtyGb", + "logicalId": "TrailingDecimalPointEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 28, + "startLine": 81, "startColumn": 7, - "endLine": 28, + "endLine": 81, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -22802,15 +23811,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EightVcpuSixtyGb", + "logicalId": "TrailingDecimalPointEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 32, + "startLine": 82, "startColumn": 7, - "endLine": 32, + "endLine": 82, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -22819,21 +23828,180 @@ "lifecycle": "create-only" } }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'QuarterVcpuDecimal' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "QuarterVcpuDecimal", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'HalfVcpuDecimal' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "HalfVcpuDecimal", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 17, + "startColumn": 5, + "endLine": 17, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DecimalEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "DecimalEquivalent", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'PlusDecimalEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "PlusDecimalEquivalent", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 41, + "startColumn": 5, + "endLine": 41, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LeadingZeroEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "LeadingZeroEquivalent", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 53, + "startColumn": 5, + "endLine": 53, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LeadingDecimalPointEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "LeadingDecimalPointEquivalent", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 65, + "startColumn": 5, + "endLine": 65, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TrailingDecimalPointEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "TrailingDecimalPointEquivalent", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 77, + "startColumn": 5, + "endLine": 77, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/ecs_fargate_units_and_sizes.yaml": { + "filePath": "good/ecs_fargate_units_and_sizes.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 7, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 43, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SixteenVcpuFortyGb", + "logicalId": "QuarterVcpuHalfGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 40, + "startLine": 8, "startColumn": 7, - "endLine": 40, + "endLine": 8, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -22848,15 +24016,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SixteenVcpuFortyGb", + "logicalId": "QuarterVcpuHalfGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 41, + "startLine": 9, "startColumn": 7, - "endLine": 41, + "endLine": 9, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -22871,15 +24039,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SixteenVcpuFortyGb", + "logicalId": "QuarterVcpuHalfGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 42, + "startLine": 10, "startColumn": 7, - "endLine": 42, + "endLine": 10, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -22894,15 +24062,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SixteenVcpuFortyGb", + "logicalId": "QuarterVcpuHalfGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 43, + "startLine": 11, "startColumn": 7, - "endLine": 43, + "endLine": 11, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -22917,15 +24085,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SixteenVcpuFortyGb", + "logicalId": "QuarterVcpuHalfGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 44, + "startLine": 12, "startColumn": 7, - "endLine": 44, + "endLine": 12, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -22940,15 +24108,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SixteenVcpuFortyGb", + "logicalId": "QuarterVcpuHalfGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 48, + "startLine": 16, "startColumn": 7, - "endLine": 48, + "endLine": 16, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -22963,15 +24131,15 @@ "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuSixtyGb", + "logicalId": "EightVcpuSixtyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 56, + "startLine": 24, "startColumn": 7, - "endLine": 56, + "endLine": 24, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -22986,15 +24154,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuSixtyGb", + "logicalId": "EightVcpuSixtyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 57, + "startLine": 25, "startColumn": 7, - "endLine": 57, + "endLine": 25, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -23009,15 +24177,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuSixtyGb", + "logicalId": "EightVcpuSixtyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 58, + "startLine": 26, "startColumn": 7, - "endLine": 58, + "endLine": 26, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -23032,15 +24200,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuSixtyGb", + "logicalId": "EightVcpuSixtyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 59, + "startLine": 27, "startColumn": 7, - "endLine": 59, + "endLine": 27, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -23055,15 +24223,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuSixtyGb", + "logicalId": "EightVcpuSixtyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 60, + "startLine": 28, "startColumn": 7, - "endLine": 60, + "endLine": 28, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -23078,15 +24246,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuSixtyGb", + "logicalId": "EightVcpuSixtyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 64, + "startLine": 32, "startColumn": 7, - "endLine": 64, + "endLine": 32, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -23101,15 +24269,15 @@ "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuOneTwentyGb", + "logicalId": "SixteenVcpuFortyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 72, + "startLine": 40, "startColumn": 7, - "endLine": 72, + "endLine": 40, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -23124,15 +24292,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuOneTwentyGb", + "logicalId": "SixteenVcpuFortyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 73, + "startLine": 41, "startColumn": 7, - "endLine": 73, + "endLine": 41, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -23147,15 +24315,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuOneTwentyGb", + "logicalId": "SixteenVcpuFortyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 74, + "startLine": 42, "startColumn": 7, - "endLine": 74, + "endLine": 42, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -23170,15 +24338,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuOneTwentyGb", + "logicalId": "SixteenVcpuFortyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 75, + "startLine": 43, "startColumn": 7, - "endLine": 75, + "endLine": 43, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -23193,15 +24361,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuOneTwentyGb", + "logicalId": "SixteenVcpuFortyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 76, + "startLine": 44, "startColumn": 7, - "endLine": 76, + "endLine": 44, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -23216,15 +24384,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuOneTwentyGb", + "logicalId": "SixteenVcpuFortyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 80, + "startLine": 48, "startColumn": 7, - "endLine": 80, + "endLine": 48, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -23239,15 +24407,15 @@ "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", + "logicalId": "ThirtyTwoVcpuSixtyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 88, + "startLine": 56, "startColumn": 7, - "endLine": 88, + "endLine": 56, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -23262,15 +24430,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", + "logicalId": "ThirtyTwoVcpuSixtyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 89, + "startLine": 57, "startColumn": 7, - "endLine": 89, + "endLine": 57, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -23285,15 +24453,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", + "logicalId": "ThirtyTwoVcpuSixtyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 90, + "startLine": 58, "startColumn": 7, - "endLine": 90, + "endLine": 58, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -23308,15 +24476,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", + "logicalId": "ThirtyTwoVcpuSixtyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 91, + "startLine": 59, "startColumn": 7, - "endLine": 91, + "endLine": 59, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -23331,15 +24499,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", + "logicalId": "ThirtyTwoVcpuSixtyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 92, + "startLine": 60, "startColumn": 7, - "endLine": 92, + "endLine": 60, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -23354,15 +24522,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", + "logicalId": "ThirtyTwoVcpuSixtyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 96, + "startLine": 64, "startColumn": 7, - "endLine": 96, + "endLine": 64, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -23377,15 +24545,15 @@ "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalRequiredProperties", + "logicalId": "ThirtyTwoVcpuOneTwentyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 105, + "startLine": 72, "startColumn": 7, - "endLine": 105, + "endLine": 72, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -23400,15 +24568,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalRequiredProperties", + "logicalId": "ThirtyTwoVcpuOneTwentyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 106, + "startLine": 73, "startColumn": 7, - "endLine": 106, + "endLine": 73, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -23423,22 +24591,21 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalRequiredProperties", + "logicalId": "ThirtyTwoVcpuOneTwentyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 107, + "startLine": 74, "startColumn": 7, - "endLine": 107, + "endLine": 74, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseAlternateSize'" + "lifecycle": "create-only" } }, { @@ -23447,22 +24614,21 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalRequiredProperties", + "logicalId": "ThirtyTwoVcpuOneTwentyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 108, + "startLine": 75, "startColumn": 7, - "endLine": 108, + "endLine": 75, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseAlternateSize'" + "lifecycle": "create-only" } }, { @@ -23471,46 +24637,21 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalRequiredProperties", + "logicalId": "ThirtyTwoVcpuOneTwentyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 109, + "startLine": 76, "startColumn": 7, - "endLine": 109, + "endLine": 76, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseAlternateSize'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PlacementConstraints' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ConditionalRequiredProperties", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.PlacementConstraints", - "category": "Best Practice", - "startLine": 110, - "startColumn": 7, - "endLine": 110, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseAlternateSize'" + "lifecycle": "create-only" } }, { @@ -23519,15 +24660,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalRequiredProperties", + "logicalId": "ThirtyTwoVcpuOneTwentyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 114, + "startLine": 80, "startColumn": 7, - "endLine": 114, + "endLine": 80, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -23535,41 +24676,22 @@ "context": { "lifecycle": "create-only" } - } - ] - }, - "good/ecs_fargate_valid.yaml": { - "filePath": "good/ecs_fargate_valid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 7, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 6, + "startLine": 88, "startColumn": 7, - "endLine": 6, + "endLine": 88, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -23581,19 +24703,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 7, + "startLine": 89, "startColumn": 7, - "endLine": 7, - "endColumn": 10, + "endLine": 89, + "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -23604,19 +24726,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 8, + "startLine": 90, "startColumn": 7, - "endLine": 8, - "endColumn": 13, + "endLine": 90, + "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -23627,19 +24749,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 9, + "startLine": 91, "startColumn": 7, - "endLine": 9, - "endColumn": 18, + "endLine": 91, + "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -23650,19 +24772,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 10, + "startLine": 92, "startColumn": 7, - "endLine": 10, - "endColumn": 30, + "endLine": 92, + "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -23676,15 +24798,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 12, + "startLine": 96, "startColumn": 7, - "endLine": 12, + "endLine": 96, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -23694,99 +24816,45 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "ConditionalRequiredProperties", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/elb_https_empty_sslcertificateid.yaml": { - "filePath": "good/elb_https_empty_sslcertificateid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ELB' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ELB", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/enum_case_insensitive_casing.yaml": { - "filePath": "good/enum_case_insensitive_casing.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 6, - "debug": 0 + "startLine": 105, + "startColumn": 7, + "endLine": 105, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LowercaseType", + "logicalId": "ConditionalRequiredProperties", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 13, + "startLine": 106, "startColumn": 7, - "endLine": 13, - "endColumn": 11, + "endLine": 106, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -23796,107 +24864,116 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ComputeResources.Subnets' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LowercaseType", + "logicalId": "ConditionalRequiredProperties", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ComputeResources.Subnets", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 16, - "startColumn": 9, - "endLine": 16, - "endColumn": 16, + "startLine": 107, + "startColumn": 7, + "endLine": 107, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseAlternateSize'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ComputeResources.Type' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LowercaseType", + "logicalId": "ConditionalRequiredProperties", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ComputeResources.Type", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 18, - "startColumn": 9, - "endLine": 18, - "endColumn": 13, + "startLine": 108, + "startColumn": 7, + "endLine": 108, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseAlternateSize'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Tags' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LowercaseType", + "logicalId": "ConditionalRequiredProperties", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 20, + "startLine": 109, "startColumn": 7, - "endLine": 20, - "endColumn": 11, + "endLine": 109, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseAlternateSize'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'PlacementConstraints' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MixedCaseType", + "logicalId": "ConditionalRequiredProperties", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.PlacementConstraints", "category": "Best Practice", - "startLine": 25, + "startLine": 110, "startColumn": 7, - "endLine": 25, - "endColumn": 11, + "endLine": 110, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseAlternateSize'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Tags' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MixedCaseType", + "logicalId": "ConditionalRequiredProperties", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 27, + "startLine": 114, "startColumn": 7, - "endLine": 27, - "endColumn": 11, + "endLine": 114, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -23905,16 +24982,16 @@ } ] }, - "good/functions/dynamic_reference_embedded.yaml": { - "filePath": "good/functions/dynamic_reference_embedded.yaml", + "good/ecs_fargate_valid.yaml": { + "filePath": "good/ecs_fargate_valid.yaml", "status": "OK", "metadata": { - "resourcesScanned": 4, + "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 8, + "informational": 7, "debug": 0 }, "suppressed": 0, @@ -23925,19 +25002,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Sg", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 11, + "startLine": 6, "startColumn": 7, - "endLine": 11, - "endColumn": 23, + "endLine": 6, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -23947,141 +25025,134 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Sg", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.GroupName", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 12, + "startLine": 7, "startColumn": 7, - "endLine": 12, - "endColumn": 16, + "endLine": 7, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (dynamic reference: prefix-{{resolve:ssm:/network/sg-name}})" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 19, + "startLine": 8, "startColumn": 7, - "endLine": 19, - "endColumn": 17, + "endLine": 8, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (dynamic reference: {{resolve:ssm:/config/bucket-name}})" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Instance", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 34, + "startLine": 9, "startColumn": 7, - "endLine": 34, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 9, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (dynamic reference: prefix-{{resolve:ssm:/ec2/ami-id}})" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Instance", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 35, + "startLine": 10, "startColumn": 7, - "endLine": 35, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 10, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ScheduledRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ScheduledRule", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Instance", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 33, + "startLine": 5, "startColumn": 5, - "endLine": 33, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" diff --git a/src/resources/expected/validation_reports6.json b/src/resources/expected/validation_reports6.json index aeb29d9a..5db4b12c 100644 --- a/src/resources/expected/validation_reports6.json +++ b/src/resources/expected/validation_reports6.json @@ -1,4 +1,377 @@ { + "good/elb_https_empty_sslcertificateid.yaml": { + "filePath": "good/elb_https_empty_sslcertificateid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ELB' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ELB", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/enum_case_insensitive_casing.yaml": { + "filePath": "good/enum_case_insensitive_casing.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 6, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "LowercaseType", + "entityType": "Resource", + "resourceType": "AWS::Batch::ComputeEnvironment" + }, + "propertyPath": "Properties.Type", + "category": "Best Practice", + "startLine": 13, + "startColumn": 7, + "endLine": 13, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ComputeResources.Subnets' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "LowercaseType", + "entityType": "Resource", + "resourceType": "AWS::Batch::ComputeEnvironment" + }, + "propertyPath": "Properties.ComputeResources.Subnets", + "category": "Best Practice", + "startLine": 16, + "startColumn": 9, + "endLine": 16, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ComputeResources.Type' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "LowercaseType", + "entityType": "Resource", + "resourceType": "AWS::Batch::ComputeEnvironment" + }, + "propertyPath": "Properties.ComputeResources.Type", + "category": "Best Practice", + "startLine": 18, + "startColumn": 9, + "endLine": 18, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Tags' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "LowercaseType", + "entityType": "Resource", + "resourceType": "AWS::Batch::ComputeEnvironment" + }, + "propertyPath": "Properties.Tags", + "category": "Best Practice", + "startLine": 20, + "startColumn": 7, + "endLine": 20, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MixedCaseType", + "entityType": "Resource", + "resourceType": "AWS::Batch::ComputeEnvironment" + }, + "propertyPath": "Properties.Type", + "category": "Best Practice", + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Tags' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MixedCaseType", + "entityType": "Resource", + "resourceType": "AWS::Batch::ComputeEnvironment" + }, + "propertyPath": "Properties.Tags", + "category": "Best Practice", + "startLine": 27, + "startColumn": 7, + "endLine": 27, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + } + ] + }, + "good/functions/dynamic_reference_embedded.yaml": { + "filePath": "good/functions/dynamic_reference_embedded.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 8, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Sg", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Sg", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupName", + "category": "Best Practice", + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (dynamic reference: prefix-{{resolve:ssm:/network/sg-name}})" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.BucketName", + "category": "Best Practice", + "startLine": 19, + "startColumn": 7, + "endLine": 19, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (dynamic reference: {{resolve:ssm:/config/bucket-name}})" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 34, + "startColumn": 7, + "endLine": 34, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (dynamic reference: prefix-{{resolve:ssm:/ec2/ami-id}})" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ScheduledRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ScheduledRule", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 25, + "startColumn": 5, + "endLine": 25, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 33, + "startColumn": 5, + "endLine": 33, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, "good/functions/foreach.yaml": { "filePath": "good/functions/foreach.yaml", "status": "OK", @@ -4858,12 +5231,12 @@ "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SnapStart", + "propertyPath": "Properties.SnapStart.ApplyOn", "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", - "startLine": 13, - "startColumn": 7, - "endLine": 13, + "startLine": 14, + "startColumn": 9, + "endLine": 14, "endColumn": 16, "ruleDescription": "Validate that SnapStart is properly configured", "phase": "LINT" @@ -16275,142 +16648,5 @@ "phase": "SCHEMA" } ] - }, - "good/sam/api_stagename_valid.yaml": { - "filePath": "good/sam/api_stagename_valid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyApi' of type 'AWS::Serverless::Api' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MyApi", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Api" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/sam/connector_valid.yaml": { - "filePath": "good/sam/connector_valid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MyTopic", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 10, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MyFn", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/sam/function_deploymentpreference_with_alias.yaml": { - "filePath": "good/sam/function_deploymentpreference_with_alias.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Fn", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] } } diff --git a/src/resources/expected/validation_reports7.json b/src/resources/expected/validation_reports7.json index 327f10f5..abff28b4 100644 --- a/src/resources/expected/validation_reports7.json +++ b/src/resources/expected/validation_reports7.json @@ -1,4 +1,141 @@ { + "good/sam/api_stagename_valid.yaml": { + "filePath": "good/sam/api_stagename_valid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyApi' of type 'AWS::Serverless::Api' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "MyApi", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Api" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/sam/connector_valid.yaml": { + "filePath": "good/sam/connector_valid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "MyTopic", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "MyFn", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/sam/function_deploymentpreference_with_alias.yaml": { + "filePath": "good/sam/function_deploymentpreference_with_alias.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Fn", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, "good/sam/function_dlq_valid.yaml": { "filePath": "good/sam/function_dlq_valid.yaml", "status": "OK", @@ -30945,8275 +31082,5 @@ "phase": "LINT" } ] - }, - "quickstart/nist_vpc_management.yaml": { - "filePath": "quickstart/nist_vpc_management.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 33, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 27, - "informational": 76, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3005", - "severity": "ERROR", - "message": "'rRouteMgmtProdDMZ' will not exist when condition 'cCreatePeeringProduction' is False", - "source": "CFN_LINT", - "entity": { - "logicalId": "rDeepSecurityInfrastructureTemplate", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Add a Condition to 'rDeepSecurityInfrastructureTemplate' that implies 'cCreatePeeringProduction'", - "category": "Reference", - "startLine": 333, - "startColumn": 5, - "endLine": 333, - "endColumn": 14, - "ruleDescription": "Check DependsOn values for Resources", - "phase": "LINT" - }, - { - "ruleId": "W1030", - "severity": "WARN", - "message": "{'Ref': 'pBastionAmi'} is not a 'AWS::EC2::Image.Id' when 'Ref' is resolved", - "source": "CFN_LINT", - "entity": { - "logicalId": "rMgmtBastionInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "suggestedFix": "Use parameter type AWS::EC2::Image::Id", - "category": "Best Practice", - "startLine": 512, - "startColumn": 7, - "endLine": 512, - "endColumn": 14, - "ruleDescription": "Validate the values that come from a Ref function", - "phase": "LINT" - }, - { - "ruleId": "W1030", - "severity": "WARN", - "message": "{'Ref': 'pProductionCIDR'} is not a 'ipv4-network' when 'Ref' is resolved", - "source": "CFN_LINT", - "entity": { - "logicalId": "rRouteMgmtProdDMZ", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.DestinationCidrBlock", - "suggestedFix": "Validate the parameter value matches CIDR format", - "category": "Best Practice", - "startLine": 628, - "startColumn": 7, - "endLine": 628, - "endColumn": 27, - "ruleDescription": "Validate the values that come from a Ref function", - "phase": "LINT" - }, - { - "ruleId": "W1030", - "severity": "WARN", - "message": "{'Ref': 'pProductionCIDR'} is not a 'ipv4-network' when 'Ref' is resolved", - "source": "CFN_LINT", - "entity": { - "logicalId": "rRouteMgmtProdPrivate", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.DestinationCidrBlock", - "suggestedFix": "Validate the parameter value matches CIDR format", - "category": "Best Practice", - "startLine": 638, - "startColumn": 7, - "endLine": 638, - "endColumn": 27, - "ruleDescription": "Validate the values that come from a Ref function", - "phase": "LINT" - }, - { - "ruleId": "W2502", - "severity": "WARN", - "message": "Resource 'rDeepSecurityInfrastructureTemplate' has DependsOn 'rRouteMgmtProdDMZ' which is conditional (condition 'cCreatePeeringProduction'), but 'rDeepSecurityInfrastructureTemplate' does not have a matching condition", - "source": "ENGINE", - "entity": { - "logicalId": "rDeepSecurityInfrastructureTemplate", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Add Condition: cCreatePeeringProduction to resource 'rDeepSecurityInfrastructureTemplate'", - "category": "Best Practice", - "startLine": 333, - "startColumn": 5, - "endLine": 333, - "endColumn": 14, - "ruleDescription": "DependsOn conditional resource without matching condition", - "phase": "LINT" - }, - { - "ruleId": "W2506", - "severity": "WARN", - "message": "Parameter 'pBastionAmi' is used as an ImageId but has Type 'String' - consider using 'AWS::EC2::Image::Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "pBastionAmi", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/pBastionAmi", - "category": "Best Practice", - "startLine": 192, - "startColumn": 3, - "endLine": 192, - "endColumn": 14, - "ruleDescription": "Check if ImageId Parameters have the correct type", - "phase": "LINT" - }, - { - "ruleId": "W2508", - "severity": "WARN", - "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", - "source": "ENGINE", - "entity": { - "logicalId": "rSecurityGroupBastion", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress", - "suggestedFix": "Restrict the CIDR range to specific IP addresses", - "category": "Security", - "startLine": 689, - "startColumn": 7, - "endLine": 689, - "endColumn": 27, - "ruleDescription": "Security group allows open access to sensitive port", - "phase": "LINT" - }, - { - "ruleId": "W2508", - "severity": "WARN", - "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", - "source": "ENGINE", - "entity": { - "logicalId": "rSecurityGroupPeered", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress", - "suggestedFix": "Restrict the CIDR range to specific IP addresses", - "category": "Security", - "startLine": 704, - "startColumn": 7, - "endLine": 704, - "endColumn": 27, - "ruleDescription": "Security group allows open access to sensitive port", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rIGWManagement' dependency already enforced by a 'Ref' at 'Properties.InternetGatewayId'", - "source": "CFN_LINT", - "entity": { - "logicalId": "rGWAttachmentMgmtIGW", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 417, - "startColumn": 5, - "endLine": 417, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rDeepSecurityInfrastructureTemplate' dependency already enforced by a 'GetAtt' at 'Metadata.AWS::CloudFormation::Init.installDeepSecurityAgent.commands.0-download-DSA.command.Fn::Join.1.1'", - "source": "CFN_LINT", - "entity": { - "logicalId": "rMgmtBastionInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 479, - "startColumn": 5, - "endLine": 479, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rDeepSecurityInfrastructureTemplate' dependency already enforced by a 'GetAtt' at 'Metadata.AWS::CloudFormation::Init.installDeepSecurityAgent.commands.3-activate-DSA.command.Fn::Join.1.1'", - "source": "CFN_LINT", - "entity": { - "logicalId": "rMgmtBastionInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 479, - "startColumn": 5, - "endLine": 479, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W7001", - "severity": "WARN", - "message": "Mapping 'Parameters' is not referenced by any Fn::FindInMap", - "source": "CFN_LINT", - "entity": { - "logicalId": "Parameters", - "entityType": "Mapping" - }, - "propertyPath": "Mappings/Parameters", - "category": "Best Practice", - "startLine": 45, - "startColumn": 3, - "endLine": 45, - "endColumn": 13, - "ruleDescription": "Check if Mappings are Used", - "phase": "LINT" - }, - { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'cRegionIsUsGovWest1' is not used by any resource or Fn::If", - "source": "CFN_LINT", - "entity": { - "logicalId": "cRegionIsUsGovWest1", - "entityType": "Condition" - }, - "propertyPath": "Conditions/cRegionIsUsGovWest1", - "category": "Best Practice", - "startLine": 12, - "startColumn": 3, - "endLine": 12, - "endColumn": 22, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'20' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNatInstanceTemplate", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "propertyPath": "Properties.TimeoutInMinutes", - "category": "Best Practice", - "startLine": 583, - "startColumn": 7, - "endLine": 583, - "endColumn": 23, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rSecurityGroupBastion", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupEgress.0.FromPort", - "category": "Best Practice", - "startLine": 686, - "startColumn": 9, - "endLine": 686, - "endColumn": 17, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'65535' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rSecurityGroupBastion", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupEgress.0.ToPort", - "category": "Best Practice", - "startLine": 688, - "startColumn": 9, - "endLine": 688, - "endColumn": 15, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rSecurityGroupBastion", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.0.FromPort", - "category": "Best Practice", - "startLine": 692, - "startColumn": 9, - "endLine": 692, - "endColumn": 17, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rSecurityGroupBastion", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.0.ToPort", - "category": "Best Practice", - "startLine": 694, - "startColumn": 9, - "endLine": 694, - "endColumn": 15, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rSecurityGroupPeered", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.0.FromPort", - "category": "Best Practice", - "startLine": 706, - "startColumn": 9, - "endLine": 706, - "endColumn": 17, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rSecurityGroupPeered", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.0.ToPort", - "category": "Best Practice", - "startLine": 708, - "startColumn": 9, - "endLine": 708, - "endColumn": 15, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rSecurityGroupSSHFromMgmt", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.0.FromPort", - "category": "Best Practice", - "startLine": 721, - "startColumn": 9, - "endLine": 721, - "endColumn": 17, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rSecurityGroupSSHFromMgmt", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.0.ToPort", - "category": "Best Practice", - "startLine": 723, - "startColumn": 9, - "endLine": 723, - "endColumn": 15, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rSecurityGroupVpcNat", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.0.FromPort", - "category": "Best Practice", - "startLine": 736, - "startColumn": 9, - "endLine": 736, - "endColumn": 17, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rSecurityGroupVpcNat", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.0.ToPort", - "category": "Best Practice", - "startLine": 738, - "startColumn": 9, - "endLine": 738, - "endColumn": 15, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rSecurityGroupVpcNat", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.1.FromPort", - "category": "Best Practice", - "startLine": 741, - "startColumn": 9, - "endLine": 741, - "endColumn": 17, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rSecurityGroupVpcNat", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.1.ToPort", - "category": "Best Practice", - "startLine": 743, - "startColumn": 9, - "endLine": 743, - "endColumn": 15, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rVPCManagement", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.EnableDnsHostnames", - "category": "Best Practice", - "startLine": 754, - "startColumn": 7, - "endLine": 754, - "endColumn": 25, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rVPCManagement", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.EnableDnsSupport", - "category": "Best Practice", - "startLine": 755, - "startColumn": 7, - "endLine": 755, - "endColumn": 23, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "rDHCPoptions", - "entityType": "Resource", - "resourceType": "AWS::EC2::DHCPOptions" - }, - "propertyPath": "Properties.DomainName.Fn::Join", - "category": "Intrinsic Function", - "startLine": 322, - "startColumn": 9, - "endLine": 322, - "endColumn": 17, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "rDeepSecurityInfrastructureTemplate", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "propertyPath": "Properties.Parameters.CfnUrlPrefix.Fn::Join", - "category": "Intrinsic Function", - "startLine": 343, - "startColumn": 11, - "endLine": 343, - "endColumn": 19, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "rDeepSecurityInfrastructureTemplate", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "propertyPath": "Properties.TemplateURL.Fn::Join", - "category": "Intrinsic Function", - "startLine": 388, - "startColumn": 9, - "endLine": 388, - "endColumn": 17, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "rMgmtBastionInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.installDeepSecurityAgent.commands.0-download-DSA.command.Fn::Join", - "category": "Intrinsic Function", - "startLine": 491, - "startColumn": 17, - "endLine": 491, - "endColumn": 25, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "rMgmtBastionInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.installDeepSecurityAgent.commands.3-activate-DSA.command.Fn::Join", - "category": "Intrinsic Function", - "startLine": 504, - "startColumn": 17, - "endLine": 504, - "endColumn": 25, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "rMgmtBastionInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.UserData.Fn::Base64.Fn::Join", - "category": "Intrinsic Function", - "startLine": 527, - "startColumn": 11, - "endLine": 527, - "endColumn": 19, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNatInstanceTemplate", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "propertyPath": "Properties.TemplateURL.Fn::Join", - "category": "Intrinsic Function", - "startLine": 579, - "startColumn": 9, - "endLine": 579, - "endColumn": 17, - "ruleDescription": "Use Sub instead of Join", - "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": "rDeepSecurityInfrastructureTemplate", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "category": "Best Practice", - "startLine": 332, - "startColumn": 3, - "endLine": 332, - "endColumn": 38, - "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": "rDeepSecurityInfrastructureTemplate", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "category": "Best Practice", - "startLine": 332, - "startColumn": 3, - "endLine": 332, - "endColumn": 38, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "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": "rNatInstanceTemplate", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "category": "Best Practice", - "startLine": 556, - "startColumn": 3, - "endLine": 556, - "endColumn": 23, - "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": "rNatInstanceTemplate", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "category": "Best Practice", - "startLine": 556, - "startColumn": 3, - "endLine": 556, - "endColumn": 23, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AssociaterEIPProdBastion", - "entityType": "Resource", - "resourceType": "AWS::EC2::EIPAssociation" - }, - "propertyPath": "Properties.AllocationId", - "category": "Best Practice", - "startLine": 305, - "startColumn": 7, - "endLine": 305, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/tree/master/aws-ec2-eipassociation", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt rEIPProdBastion.AllocationId", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkInterfaceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AssociaterEIPProdBastion", - "entityType": "Resource", - "resourceType": "AWS::EC2::EIPAssociation" - }, - "propertyPath": "Properties.NetworkInterfaceId", - "category": "Best Practice", - "startLine": 309, - "startColumn": 7, - "endLine": 309, - "endColumn": 25, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/tree/master/aws-ec2-eipassociation", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rENIProductionBastion'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DhcpOptionsId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rDHCPOptionsAssocMgmt", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPCDHCPOptionsAssociation" - }, - "propertyPath": "Properties.DhcpOptionsId", - "category": "Best Practice", - "startLine": 314, - "startColumn": 7, - "endLine": 314, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rDHCPoptions'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rDHCPOptionsAssocMgmt", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPCDHCPOptionsAssociation" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 316, - "startColumn": 7, - "endLine": 316, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rVPCManagement'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DomainName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rDHCPoptions", - "entityType": "Resource", - "resourceType": "AWS::EC2::DHCPOptions" - }, - "propertyPath": "Properties.DomainName", - "category": "Best Practice", - "startLine": 321, - "startColumn": 7, - "endLine": 321, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DomainNameServers' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rDHCPoptions", - "entityType": "Resource", - "resourceType": "AWS::EC2::DHCPOptions" - }, - "propertyPath": "Properties.DomainNameServers", - "category": "Best Practice", - "startLine": 326, - "startColumn": 7, - "endLine": 326, - "endColumn": 24, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rENIProductionBastion", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkInterface" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 410, - "startColumn": 7, - "endLine": 410, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/networkinterface", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rManagementDMZSubnetA'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rGWAttachmentMgmtIGW", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 421, - "startColumn": 7, - "endLine": 421, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rVPCManagement'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rManagementDMZSubnetA", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 432, - "startColumn": 7, - "endLine": 432, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rManagementDMZSubnetA", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 434, - "startColumn": 7, - "endLine": 434, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rManagementDMZSubnetA", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 439, - "startColumn": 7, - "endLine": 439, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rVPCManagement'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rManagementDMZSubnetB", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 444, - "startColumn": 7, - "endLine": 444, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rManagementDMZSubnetB", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 446, - "startColumn": 7, - "endLine": 446, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rManagementDMZSubnetB", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 451, - "startColumn": 7, - "endLine": 451, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rVPCManagement'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rManagementPrivateSubnetA", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 456, - "startColumn": 7, - "endLine": 456, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rManagementPrivateSubnetA", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 458, - "startColumn": 7, - "endLine": 458, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rManagementPrivateSubnetA", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 463, - "startColumn": 7, - "endLine": 463, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rVPCManagement'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rManagementPrivateSubnetB", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 468, - "startColumn": 7, - "endLine": 468, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rManagementPrivateSubnetB", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 470, - "startColumn": 7, - "endLine": 470, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rManagementPrivateSubnetB", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 475, - "startColumn": 7, - "endLine": 475, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rVPCManagement'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rMgmtBastionInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 512, - "startColumn": 7, - "endLine": 512, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rMgmtBastionInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 514, - "startColumn": 7, - "endLine": 514, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rMgmtBastionInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.KeyName", - "category": "Best Practice", - "startLine": 516, - "startColumn": 7, - "endLine": 516, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rMgmtBastionInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.NetworkInterfaces", - "category": "Best Practice", - "startLine": 518, - "startColumn": 7, - "endLine": 518, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rMgmtBastionInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.UserData", - "category": "Best Practice", - "startLine": 525, - "startColumn": 7, - "endLine": 525, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNATGateway", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.AllocationId", - "category": "Best Practice", - "startLine": 549, - "startColumn": 7, - "endLine": 549, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt rEIPProdNAT.AllocationId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNATGateway", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 553, - "startColumn": 7, - "endLine": 553, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rManagementDMZSubnetA'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PeerVpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rPeeringConnectionProduction", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPCPeeringConnection" - }, - "propertyPath": "Properties.PeerVpcId", - "category": "Best Practice", - "startLine": 588, - "startColumn": 7, - "endLine": 588, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-ec2-vpcpeering.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rPeeringConnectionProduction", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPCPeeringConnection" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 593, - "startColumn": 7, - "endLine": 593, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-ec2-vpcpeering.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rVPCManagement'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteAssocMgmtDMZA", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 598, - "startColumn": 7, - "endLine": 598, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rRouteTableMgmtDMZ'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteAssocMgmtDMZA", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 600, - "startColumn": 7, - "endLine": 600, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rManagementDMZSubnetA'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteAssocMgmtPrivA", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 605, - "startColumn": 7, - "endLine": 605, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rRouteTableMgmtPrivate'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteAssocMgmtPrivA", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 607, - "startColumn": 7, - "endLine": 607, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rManagementPrivateSubnetA'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteAssocMgmtPrivB", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 612, - "startColumn": 7, - "endLine": 612, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rRouteTableMgmtPrivate'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteAssocMgmtPrivB", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 614, - "startColumn": 7, - "endLine": 614, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rManagementPrivateSubnetB'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteMgmtIGW", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.DestinationCidrBlock", - "category": "Best Practice", - "startLine": 619, - "startColumn": 7, - "endLine": 619, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteMgmtIGW", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 622, - "startColumn": 7, - "endLine": 622, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rRouteTableMgmtDMZ'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteMgmtProdDMZ", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.DestinationCidrBlock", - "category": "Best Practice", - "startLine": 628, - "startColumn": 7, - "endLine": 628, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteMgmtProdDMZ", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 630, - "startColumn": 7, - "endLine": 630, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rRouteTableMgmtDMZ'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteMgmtProdPrivate", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.DestinationCidrBlock", - "category": "Best Practice", - "startLine": 638, - "startColumn": 7, - "endLine": 638, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteMgmtProdPrivate", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 640, - "startColumn": 7, - "endLine": 640, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rRouteTableMgmtPrivate'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteProdMgmt", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.DestinationCidrBlock", - "category": "Best Practice", - "startLine": 648, - "startColumn": 7, - "endLine": 648, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteProdMgmt", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 650, - "startColumn": 7, - "endLine": 650, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteProdMgmtPublic", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.DestinationCidrBlock", - "category": "Best Practice", - "startLine": 658, - "startColumn": 7, - "endLine": 658, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteProdMgmtPublic", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 660, - "startColumn": 7, - "endLine": 660, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteTableMgmtDMZ", - "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 670, - "startColumn": 7, - "endLine": 670, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rVPCManagement'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteTableMgmtPrivate", - "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 678, - "startColumn": 7, - "endLine": 678, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rVPCManagement'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rSecurityGroupBastion", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 683, - "startColumn": 7, - "endLine": 683, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rSecurityGroupBastion", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 698, - "startColumn": 7, - "endLine": 698, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rVPCManagement'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rSecurityGroupPeered", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 703, - "startColumn": 7, - "endLine": 703, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rSecurityGroupPeered", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 712, - "startColumn": 7, - "endLine": 712, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rVPCManagement'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rSecurityGroupSSHFromMgmt", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 717, - "startColumn": 7, - "endLine": 717, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rSecurityGroupSSHFromMgmt", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 727, - "startColumn": 7, - "endLine": 727, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rVPCManagement'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rSecurityGroupVpcNat", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 732, - "startColumn": 7, - "endLine": 732, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rSecurityGroupVpcNat", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 747, - "startColumn": 7, - "endLine": 747, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rVPCManagement'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rVPCManagement", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 752, - "startColumn": 7, - "endLine": 752, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rVPCManagement", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.InstanceTenancy", - "category": "Best Practice", - "startLine": 756, - "startColumn": 7, - "endLine": 756, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rrRouteAssocMgmtDMZB", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 764, - "startColumn": 7, - "endLine": 764, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rRouteTableMgmtDMZ'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rrRouteAssocMgmtDMZB", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 766, - "startColumn": 7, - "endLine": 766, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rManagementDMZSubnetB'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'rDeepSecurityInfrastructureTemplate' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "rDeepSecurityInfrastructureTemplate", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 336, - "startColumn": 5, - "endLine": 336, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'rEIPProdBastion' of type 'AWS::EC2::EIP' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "rEIPProdBastion", - "entityType": "Resource", - "resourceType": "AWS::EC2::EIP" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 395, - "startColumn": 5, - "endLine": 395, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'rEIPProdNAT' of type 'AWS::EC2::EIP' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "rEIPProdNAT", - "entityType": "Resource", - "resourceType": "AWS::EC2::EIP" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 401, - "startColumn": 5, - "endLine": 401, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'rNATGateway' of type 'AWS::EC2::NatGateway' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "rNATGateway", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 548, - "startColumn": 5, - "endLine": 548, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'rNatInstanceTemplate' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "rNatInstanceTemplate", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 558, - "startColumn": 5, - "endLine": 558, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "quickstart/nist_vpc_production.yaml": { - "filePath": "quickstart/nist_vpc_production.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 46, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 60, - "informational": 99, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W1030", - "severity": "WARN", - "message": "{'Ref': 'pAppPrivateSubnetBCIDR'} is not a 'ipv4-network' when 'Ref' is resolved", - "source": "CFN_LINT", - "entity": { - "logicalId": "rAppPrivateSubnetB", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "suggestedFix": "Validate the parameter value matches CIDR format", - "category": "Best Practice", - "startLine": 211, - "startColumn": 7, - "endLine": 211, - "endColumn": 16, - "ruleDescription": "Validate the values that come from a Ref function", - "phase": "LINT" - }, - { - "ruleId": "W1030", - "severity": "WARN", - "message": "{'Ref': 'pDBPrivateSubnetACIDR'} is not a 'ipv4-network' when 'Ref' is resolved", - "source": "CFN_LINT", - "entity": { - "logicalId": "rDBPrivateSubnetA", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "suggestedFix": "Validate the parameter value matches CIDR format", - "category": "Best Practice", - "startLine": 226, - "startColumn": 7, - "endLine": 226, - "endColumn": 16, - "ruleDescription": "Validate the values that come from a Ref function", - "phase": "LINT" - }, - { - "ruleId": "W1030", - "severity": "WARN", - "message": "{'Ref': 'pDBPrivateSubnetBCIDR'} is not a 'ipv4-network' when 'Ref' is resolved", - "source": "CFN_LINT", - "entity": { - "logicalId": "rDBPrivateSubnetB", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "suggestedFix": "Validate the parameter value matches CIDR format", - "category": "Best Practice", - "startLine": 241, - "startColumn": 7, - "endLine": 241, - "endColumn": 16, - "ruleDescription": "Validate the values that come from a Ref function", - "phase": "LINT" - }, - { - "ruleId": "W2508", - "severity": "WARN", - "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", - "source": "ENGINE", - "entity": { - "logicalId": "rSecurityGroupMgmtBastion", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress", - "suggestedFix": "Restrict the CIDR range to specific IP addresses", - "category": "Security", - "startLine": 620, - "startColumn": 7, - "endLine": 620, - "endColumn": 27, - "ruleDescription": "Security group allows open access to sensitive port", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rIGWProd' dependency already enforced by a 'Ref' at 'Properties.InternetGatewayId'", - "source": "CFN_LINT", - "entity": { - "logicalId": "rGWAttachmentProdIGW", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 308, - "startColumn": 5, - "endLine": 308, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowALLEgressPublic", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.PortRange.From", - "category": "Best Practice", - "startLine": 383, - "startColumn": 9, - "endLine": 383, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'65535' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowALLEgressPublic", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.PortRange.To", - "category": "Best Practice", - "startLine": 384, - "startColumn": 9, - "endLine": 384, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'6' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowALLEgressPublic", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.Protocol", - "category": "Best Practice", - "startLine": 385, - "startColumn": 7, - "endLine": 385, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'100' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowALLEgressPublic", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.RuleNumber", - "category": "Best Practice", - "startLine": 387, - "startColumn": 7, - "endLine": 387, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowALLfromPrivEgress", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.PortRange.From", - "category": "Best Practice", - "startLine": 396, - "startColumn": 9, - "endLine": 396, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'65535' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowALLfromPrivEgress", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.PortRange.To", - "category": "Best Practice", - "startLine": 397, - "startColumn": 9, - "endLine": 397, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'6' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowALLfromPrivEgress", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.Protocol", - "category": "Best Practice", - "startLine": 398, - "startColumn": 7, - "endLine": 398, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'120' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowALLfromPrivEgress", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.RuleNumber", - "category": "Best Practice", - "startLine": 400, - "startColumn": 7, - "endLine": 400, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'1024' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowAllReturnTCP", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.PortRange.From", - "category": "Best Practice", - "startLine": 408, - "startColumn": 9, - "endLine": 408, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'65535' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowAllReturnTCP", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.PortRange.To", - "category": "Best Practice", - "startLine": 409, - "startColumn": 9, - "endLine": 409, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'6' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowAllReturnTCP", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.Protocol", - "category": "Best Practice", - "startLine": 410, - "startColumn": 7, - "endLine": 410, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'140' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowAllReturnTCP", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.RuleNumber", - "category": "Best Practice", - "startLine": 412, - "startColumn": 7, - "endLine": 412, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowAllTCPInternal", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.PortRange.From", - "category": "Best Practice", - "startLine": 421, - "startColumn": 9, - "endLine": 421, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'65535' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowAllTCPInternal", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.PortRange.To", - "category": "Best Practice", - "startLine": 422, - "startColumn": 9, - "endLine": 422, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'6' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowAllTCPInternal", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.Protocol", - "category": "Best Practice", - "startLine": 423, - "startColumn": 7, - "endLine": 423, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'120' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowAllTCPInternal", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.RuleNumber", - "category": "Best Practice", - "startLine": 425, - "startColumn": 7, - "endLine": 425, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowAllTCPInternalEgress", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.PortRange.From", - "category": "Best Practice", - "startLine": 434, - "startColumn": 9, - "endLine": 434, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'65535' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowAllTCPInternalEgress", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.PortRange.To", - "category": "Best Practice", - "startLine": 435, - "startColumn": 9, - "endLine": 435, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'6' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowAllTCPInternalEgress", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.Protocol", - "category": "Best Practice", - "startLine": 436, - "startColumn": 7, - "endLine": 436, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'100' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowAllTCPInternalEgress", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.RuleNumber", - "category": "Best Practice", - "startLine": 438, - "startColumn": 7, - "endLine": 438, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowBastionSSHAccess", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.PortRange.From", - "category": "Best Practice", - "startLine": 446, - "startColumn": 9, - "endLine": 446, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowBastionSSHAccess", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.PortRange.To", - "category": "Best Practice", - "startLine": 447, - "startColumn": 9, - "endLine": 447, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'6' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowBastionSSHAccess", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.Protocol", - "category": "Best Practice", - "startLine": 448, - "startColumn": 7, - "endLine": 448, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'210' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowBastionSSHAccess", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.RuleNumber", - "category": "Best Practice", - "startLine": 450, - "startColumn": 7, - "endLine": 450, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'1024' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowEgressReturnTCP", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.PortRange.From", - "category": "Best Practice", - "startLine": 459, - "startColumn": 9, - "endLine": 459, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'65535' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowEgressReturnTCP", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.PortRange.To", - "category": "Best Practice", - "startLine": 460, - "startColumn": 9, - "endLine": 460, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'6' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowEgressReturnTCP", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.Protocol", - "category": "Best Practice", - "startLine": 461, - "startColumn": 7, - "endLine": 461, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'140' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowEgressReturnTCP", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.RuleNumber", - "category": "Best Practice", - "startLine": 463, - "startColumn": 7, - "endLine": 463, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowHTTPSPublic", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.PortRange.From", - "category": "Best Practice", - "startLine": 471, - "startColumn": 9, - "endLine": 471, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowHTTPSPublic", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.PortRange.To", - "category": "Best Practice", - "startLine": 472, - "startColumn": 9, - "endLine": 472, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'6' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowHTTPSPublic", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.Protocol", - "category": "Best Practice", - "startLine": 473, - "startColumn": 7, - "endLine": 473, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'100' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowHTTPSPublic", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.RuleNumber", - "category": "Best Practice", - "startLine": 475, - "startColumn": 7, - "endLine": 475, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowHTTPfromProd", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.PortRange.From", - "category": "Best Practice", - "startLine": 484, - "startColumn": 9, - "endLine": 484, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowHTTPfromProd", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.PortRange.To", - "category": "Best Practice", - "startLine": 485, - "startColumn": 9, - "endLine": 485, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'6' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowHTTPfromProd", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.Protocol", - "category": "Best Practice", - "startLine": 486, - "startColumn": 7, - "endLine": 486, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'200' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowHTTPfromProd", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.RuleNumber", - "category": "Best Practice", - "startLine": 488, - "startColumn": 7, - "endLine": 488, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowMgmtAccessSSHtoPrivate", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.PortRange.From", - "category": "Best Practice", - "startLine": 497, - "startColumn": 9, - "endLine": 497, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowMgmtAccessSSHtoPrivate", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.PortRange.To", - "category": "Best Practice", - "startLine": 498, - "startColumn": 9, - "endLine": 498, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'6' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowMgmtAccessSSHtoPrivate", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.Protocol", - "category": "Best Practice", - "startLine": 499, - "startColumn": 7, - "endLine": 499, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'125' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowMgmtAccessSSHtoPrivate", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.RuleNumber", - "category": "Best Practice", - "startLine": 501, - "startColumn": 7, - "endLine": 501, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'1024' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowReturnTCPPriv", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.PortRange.From", - "category": "Best Practice", - "startLine": 509, - "startColumn": 9, - "endLine": 509, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'65535' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowReturnTCPPriv", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.PortRange.To", - "category": "Best Practice", - "startLine": 510, - "startColumn": 9, - "endLine": 510, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'6' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowReturnTCPPriv", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.Protocol", - "category": "Best Practice", - "startLine": 511, - "startColumn": 7, - "endLine": 511, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'140' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNACLRuleAllowReturnTCPPriv", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.RuleNumber", - "category": "Best Practice", - "startLine": 513, - "startColumn": 7, - "endLine": 513, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'20' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNatInstanceTemplate", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "propertyPath": "Properties.TimeoutInMinutes", - "category": "Best Practice", - "startLine": 553, - "startColumn": 7, - "endLine": 553, - "endColumn": 23, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rSecurityGroupMgmtBastion", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.0.FromPort", - "category": "Best Practice", - "startLine": 623, - "startColumn": 9, - "endLine": 623, - "endColumn": 17, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rSecurityGroupMgmtBastion", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.0.ToPort", - "category": "Best Practice", - "startLine": 625, - "startColumn": 9, - "endLine": 625, - "endColumn": 15, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rSecurityGroupSSHFromProd", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.0.FromPort", - "category": "Best Practice", - "startLine": 641, - "startColumn": 9, - "endLine": 641, - "endColumn": 17, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rSecurityGroupSSHFromProd", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.0.ToPort", - "category": "Best Practice", - "startLine": 643, - "startColumn": 9, - "endLine": 643, - "endColumn": 15, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rSecurityGroupVpcNat", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.0.FromPort", - "category": "Best Practice", - "startLine": 659, - "startColumn": 9, - "endLine": 659, - "endColumn": 17, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rSecurityGroupVpcNat", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.0.ToPort", - "category": "Best Practice", - "startLine": 661, - "startColumn": 9, - "endLine": 661, - "endColumn": 15, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rSecurityGroupVpcNat", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.1.FromPort", - "category": "Best Practice", - "startLine": 664, - "startColumn": 9, - "endLine": 664, - "endColumn": 17, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rSecurityGroupVpcNat", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.1.ToPort", - "category": "Best Practice", - "startLine": 666, - "startColumn": 9, - "endLine": 666, - "endColumn": 15, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rVPCProduction", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.EnableDnsHostnames", - "category": "Best Practice", - "startLine": 680, - "startColumn": 7, - "endLine": 680, - "endColumn": 25, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rVPCProduction", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.EnableDnsSupport", - "category": "Best Practice", - "startLine": 681, - "startColumn": 7, - "endLine": 681, - "endColumn": 23, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNatInstanceTemplate", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "propertyPath": "Properties.TemplateURL.Fn::Join", - "category": "Intrinsic Function", - "startLine": 549, - "startColumn": 9, - "endLine": 549, - "endColumn": 17, - "ruleDescription": "Use Sub instead of Join", - "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": "rNatInstanceTemplate", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "category": "Best Practice", - "startLine": 526, - "startColumn": 3, - "endLine": 526, - "endColumn": 23, - "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": "rNatInstanceTemplate", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "category": "Best Practice", - "startLine": 526, - "startColumn": 3, - "endLine": 526, - "endColumn": 23, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rAppPrivateSubnetA", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 180, - "startColumn": 7, - "endLine": 180, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'pRegionAZ1Name' (type AWS::EC2::AvailabilityZone::Name)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rAppPrivateSubnetA", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 182, - "startColumn": 7, - "endLine": 182, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rAppPrivateSubnetA", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 190, - "startColumn": 7, - "endLine": 190, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rVPCProduction'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rAppPrivateSubnetAssociationA", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 195, - "startColumn": 7, - "endLine": 195, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rRouteTableProdPrivate'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rAppPrivateSubnetAssociationA", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 197, - "startColumn": 7, - "endLine": 197, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rAppPrivateSubnetA'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rAppPrivateSubnetAssociationB", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 202, - "startColumn": 7, - "endLine": 202, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rRouteTableProdPrivate'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rAppPrivateSubnetAssociationB", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 204, - "startColumn": 7, - "endLine": 204, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rAppPrivateSubnetB'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rAppPrivateSubnetB", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 209, - "startColumn": 7, - "endLine": 209, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'pRegionAZ2Name' (type AWS::EC2::AvailabilityZone::Name)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rAppPrivateSubnetB", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 211, - "startColumn": 7, - "endLine": 211, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rAppPrivateSubnetB", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 219, - "startColumn": 7, - "endLine": 219, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rVPCProduction'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rDBPrivateSubnetA", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 224, - "startColumn": 7, - "endLine": 224, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'pRegionAZ1Name' (type AWS::EC2::AvailabilityZone::Name)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rDBPrivateSubnetA", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 226, - "startColumn": 7, - "endLine": 226, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rDBPrivateSubnetA", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 234, - "startColumn": 7, - "endLine": 234, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rVPCProduction'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rDBPrivateSubnetB", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 239, - "startColumn": 7, - "endLine": 239, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'pRegionAZ2Name' (type AWS::EC2::AvailabilityZone::Name)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rDBPrivateSubnetB", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 241, - "startColumn": 7, - "endLine": 241, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rDBPrivateSubnetB", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 249, - "startColumn": 7, - "endLine": 249, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rVPCProduction'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DhcpOptionsId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rDHCPOptionsAssocProd", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPCDHCPOptionsAssociation" - }, - "propertyPath": "Properties.DhcpOptionsId", - "category": "Best Practice", - "startLine": 254, - "startColumn": 7, - "endLine": 254, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rDHCPoptions'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rDHCPOptionsAssocProd", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPCDHCPOptionsAssociation" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 256, - "startColumn": 7, - "endLine": 256, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rVPCProduction'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DomainName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rDHCPoptions", - "entityType": "Resource", - "resourceType": "AWS::EC2::DHCPOptions" - }, - "propertyPath": "Properties.DomainName", - "category": "Best Practice", - "startLine": 261, - "startColumn": 7, - "endLine": 261, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DomainNameServers' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rDHCPoptions", - "entityType": "Resource", - "resourceType": "AWS::EC2::DHCPOptions" - }, - "propertyPath": "Properties.DomainNameServers", - "category": "Best Practice", - "startLine": 263, - "startColumn": 7, - "endLine": 263, - "endColumn": 24, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rDMZSubnetA", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 274, - "startColumn": 7, - "endLine": 274, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'pRegionAZ1Name' (type AWS::EC2::AvailabilityZone::Name)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rDMZSubnetA", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 276, - "startColumn": 7, - "endLine": 276, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rDMZSubnetA", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 284, - "startColumn": 7, - "endLine": 284, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rVPCProduction'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rDMZSubnetB", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 289, - "startColumn": 7, - "endLine": 289, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'pRegionAZ2Name' (type AWS::EC2::AvailabilityZone::Name)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rDMZSubnetB", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 291, - "startColumn": 7, - "endLine": 291, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rDMZSubnetB", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 299, - "startColumn": 7, - "endLine": 299, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rVPCProduction'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rGWAttachmentProdIGW", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 312, - "startColumn": 7, - "endLine": 312, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rVPCProduction'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLAssocAppPrivSubnetA", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" - }, - "propertyPath": "Properties.NetworkAclId", - "category": "Best Practice", - "startLine": 326, - "startColumn": 7, - "endLine": 326, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rNACLPrivate'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLAssocAppPrivSubnetA", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 328, - "startColumn": 7, - "endLine": 328, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rAppPrivateSubnetA'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLAssocAppPrivSubnetB", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" - }, - "propertyPath": "Properties.NetworkAclId", - "category": "Best Practice", - "startLine": 333, - "startColumn": 7, - "endLine": 333, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rNACLPrivate'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLAssocAppPrivSubnetB", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 335, - "startColumn": 7, - "endLine": 335, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rAppPrivateSubnetB'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLAssocDBPrivSubnetA", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" - }, - "propertyPath": "Properties.NetworkAclId", - "category": "Best Practice", - "startLine": 340, - "startColumn": 7, - "endLine": 340, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rNACLPrivate'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLAssocDBPrivSubnetA", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 342, - "startColumn": 7, - "endLine": 342, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rDBPrivateSubnetA'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLAssocDBPrivSubnetB", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" - }, - "propertyPath": "Properties.NetworkAclId", - "category": "Best Practice", - "startLine": 347, - "startColumn": 7, - "endLine": 347, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rNACLPrivate'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLAssocDBPrivSubnetB", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 349, - "startColumn": 7, - "endLine": 349, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rDBPrivateSubnetB'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLAssocDMZPubSubnetA", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" - }, - "propertyPath": "Properties.NetworkAclId", - "category": "Best Practice", - "startLine": 354, - "startColumn": 7, - "endLine": 354, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rNACLPublic'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLAssocDMZPubSubnetA", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 356, - "startColumn": 7, - "endLine": 356, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rDMZSubnetA'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLAssocDMZPubSubnetB", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" - }, - "propertyPath": "Properties.NetworkAclId", - "category": "Best Practice", - "startLine": 361, - "startColumn": 7, - "endLine": 361, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rNACLPublic'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLAssocDMZPubSubnetB", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 363, - "startColumn": 7, - "endLine": 363, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rDMZSubnetB'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLPrivate", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAcl" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 368, - "startColumn": 7, - "endLine": 368, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rVPCProduction'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLPublic", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAcl" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 373, - "startColumn": 7, - "endLine": 373, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rVPCProduction'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Egress' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLRuleAllowALLEgressPublic", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.Egress", - "category": "Best Practice", - "startLine": 379, - "startColumn": 7, - "endLine": 379, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLRuleAllowALLEgressPublic", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.NetworkAclId", - "category": "Best Practice", - "startLine": 380, - "startColumn": 7, - "endLine": 380, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rNACLPublic'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RuleNumber' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLRuleAllowALLEgressPublic", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.RuleNumber", - "category": "Best Practice", - "startLine": 387, - "startColumn": 7, - "endLine": 387, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Egress' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLRuleAllowALLfromPrivEgress", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.Egress", - "category": "Best Practice", - "startLine": 392, - "startColumn": 7, - "endLine": 392, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLRuleAllowALLfromPrivEgress", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.NetworkAclId", - "category": "Best Practice", - "startLine": 393, - "startColumn": 7, - "endLine": 393, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rNACLPrivate'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RuleNumber' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLRuleAllowALLfromPrivEgress", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.RuleNumber", - "category": "Best Practice", - "startLine": 400, - "startColumn": 7, - "endLine": 400, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLRuleAllowAllReturnTCP", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.NetworkAclId", - "category": "Best Practice", - "startLine": 405, - "startColumn": 7, - "endLine": 405, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rNACLPublic'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RuleNumber' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLRuleAllowAllReturnTCP", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.RuleNumber", - "category": "Best Practice", - "startLine": 412, - "startColumn": 7, - "endLine": 412, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLRuleAllowAllTCPInternal", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.NetworkAclId", - "category": "Best Practice", - "startLine": 418, - "startColumn": 7, - "endLine": 418, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rNACLPrivate'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RuleNumber' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLRuleAllowAllTCPInternal", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.RuleNumber", - "category": "Best Practice", - "startLine": 425, - "startColumn": 7, - "endLine": 425, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Egress' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLRuleAllowAllTCPInternalEgress", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.Egress", - "category": "Best Practice", - "startLine": 430, - "startColumn": 7, - "endLine": 430, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLRuleAllowAllTCPInternalEgress", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.NetworkAclId", - "category": "Best Practice", - "startLine": 431, - "startColumn": 7, - "endLine": 431, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rNACLPrivate'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RuleNumber' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLRuleAllowAllTCPInternalEgress", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.RuleNumber", - "category": "Best Practice", - "startLine": 438, - "startColumn": 7, - "endLine": 438, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLRuleAllowBastionSSHAccess", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.NetworkAclId", - "category": "Best Practice", - "startLine": 443, - "startColumn": 7, - "endLine": 443, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rNACLPublic'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RuleNumber' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLRuleAllowBastionSSHAccess", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.RuleNumber", - "category": "Best Practice", - "startLine": 450, - "startColumn": 7, - "endLine": 450, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Egress' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLRuleAllowEgressReturnTCP", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.Egress", - "category": "Best Practice", - "startLine": 455, - "startColumn": 7, - "endLine": 455, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLRuleAllowEgressReturnTCP", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.NetworkAclId", - "category": "Best Practice", - "startLine": 456, - "startColumn": 7, - "endLine": 456, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rNACLPublic'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RuleNumber' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLRuleAllowEgressReturnTCP", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.RuleNumber", - "category": "Best Practice", - "startLine": 463, - "startColumn": 7, - "endLine": 463, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLRuleAllowHTTPSPublic", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.NetworkAclId", - "category": "Best Practice", - "startLine": 468, - "startColumn": 7, - "endLine": 468, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rNACLPublic'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RuleNumber' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLRuleAllowHTTPSPublic", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.RuleNumber", - "category": "Best Practice", - "startLine": 475, - "startColumn": 7, - "endLine": 475, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLRuleAllowHTTPfromProd", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.NetworkAclId", - "category": "Best Practice", - "startLine": 481, - "startColumn": 7, - "endLine": 481, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rNACLPublic'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RuleNumber' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLRuleAllowHTTPfromProd", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.RuleNumber", - "category": "Best Practice", - "startLine": 488, - "startColumn": 7, - "endLine": 488, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLRuleAllowMgmtAccessSSHtoPrivate", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.NetworkAclId", - "category": "Best Practice", - "startLine": 494, - "startColumn": 7, - "endLine": 494, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rNACLPrivate'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RuleNumber' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLRuleAllowMgmtAccessSSHtoPrivate", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.RuleNumber", - "category": "Best Practice", - "startLine": 501, - "startColumn": 7, - "endLine": 501, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLRuleAllowReturnTCPPriv", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.NetworkAclId", - "category": "Best Practice", - "startLine": 506, - "startColumn": 7, - "endLine": 506, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rNACLPrivate'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RuleNumber' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLRuleAllowReturnTCPPriv", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" - }, - "propertyPath": "Properties.RuleNumber", - "category": "Best Practice", - "startLine": 513, - "startColumn": 7, - "endLine": 513, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNATGateway", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.AllocationId", - "category": "Best Practice", - "startLine": 519, - "startColumn": 7, - "endLine": 519, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt rEIPProdNAT.AllocationId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNATGateway", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 523, - "startColumn": 7, - "endLine": 523, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rDMZSubnetA'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteAssocDBPrivateA", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 557, - "startColumn": 7, - "endLine": 557, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rRouteTableProdPrivate'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteAssocDBPrivateA", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 559, - "startColumn": 7, - "endLine": 559, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rDBPrivateSubnetA'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteAssocDBPrivateB", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 564, - "startColumn": 7, - "endLine": 564, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rRouteTableProdPrivate'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteAssocDBPrivateB", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 566, - "startColumn": 7, - "endLine": 566, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rDBPrivateSubnetB'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteAssocProdDMZA", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 571, - "startColumn": 7, - "endLine": 571, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rRouteTableMain'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteAssocProdDMZA", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 573, - "startColumn": 7, - "endLine": 573, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rDMZSubnetA'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteAssocProdDMZB", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 578, - "startColumn": 7, - "endLine": 578, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rRouteTableMain'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteAssocProdDMZB", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 580, - "startColumn": 7, - "endLine": 580, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rDMZSubnetB'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteProdIGW", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.DestinationCidrBlock", - "category": "Best Practice", - "startLine": 586, - "startColumn": 7, - "endLine": 586, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteProdIGW", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 589, - "startColumn": 7, - "endLine": 589, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rRouteTableMain'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteProdPrivateNatGateway", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.DestinationCidrBlock", - "category": "Best Practice", - "startLine": 595, - "startColumn": 7, - "endLine": 595, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteProdPrivateNatGateway", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 598, - "startColumn": 7, - "endLine": 598, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rRouteTableProdPrivate'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteTableMain", - "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 606, - "startColumn": 7, - "endLine": 606, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rVPCProduction'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rRouteTableProdPrivate", - "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 614, - "startColumn": 7, - "endLine": 614, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rVPCProduction'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rSecurityGroupMgmtBastion", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 619, - "startColumn": 7, - "endLine": 619, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rSecurityGroupMgmtBastion", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 632, - "startColumn": 7, - "endLine": 632, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rVPCProduction'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rSecurityGroupSSHFromProd", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 637, - "startColumn": 7, - "endLine": 637, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rSecurityGroupSSHFromProd", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 650, - "startColumn": 7, - "endLine": 650, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rVPCProduction'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rSecurityGroupVpcNat", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 655, - "startColumn": 7, - "endLine": 655, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rSecurityGroupVpcNat", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 673, - "startColumn": 7, - "endLine": 673, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rVPCProduction'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rVPCProduction", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 678, - "startColumn": 7, - "endLine": 678, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rVPCProduction", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.InstanceTenancy", - "category": "Best Practice", - "startLine": 682, - "startColumn": 7, - "endLine": 682, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'rEIPProdNAT' of type 'AWS::EC2::EIP' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "rEIPProdNAT", - "entityType": "Resource", - "resourceType": "AWS::EC2::EIP" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 304, - "startColumn": 5, - "endLine": 304, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'rNACLPrivate' of type 'AWS::EC2::NetworkAcl' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLPrivate", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAcl" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 367, - "startColumn": 5, - "endLine": 367, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'rNACLPublic' of type 'AWS::EC2::NetworkAcl' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "rNACLPublic", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAcl" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 372, - "startColumn": 5, - "endLine": 372, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'rNATGateway' of type 'AWS::EC2::NatGateway' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "rNATGateway", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 518, - "startColumn": 5, - "endLine": 518, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'rNatInstanceTemplate' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "rNatInstanceTemplate", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 528, - "startColumn": 5, - "endLine": 528, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "quickstart/openshift.yaml": { - "filePath": "quickstart/openshift.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 19, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 39, - "informational": 75, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "KeyGen", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Code.S3Key.Fn::Sub", - "category": "Best Practice", - "startLine": 804, - "startColumn": 11, - "endLine": 804, - "endColumn": 18, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W2508", - "severity": "WARN", - "message": "Security group allows all traffic from 0.0.0.0/0 - sensitive port 1433 is exposed", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftInternalSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress", - "suggestedFix": "Restrict the CIDR range or limit the protocol", - "category": "Security", - "startLine": 1057, - "startColumn": 7, - "endLine": 1057, - "endColumn": 27, - "ruleDescription": "Security group allows open access to sensitive port", - "phase": "LINT" - }, - { - "ruleId": "W2508", - "severity": "WARN", - "message": "Security group allows all traffic from 0.0.0.0/0 - sensitive port 22 is exposed", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftInternalSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress", - "suggestedFix": "Restrict the CIDR range or limit the protocol", - "category": "Security", - "startLine": 1057, - "startColumn": 7, - "endLine": 1057, - "endColumn": 27, - "ruleDescription": "Security group allows open access to sensitive port", - "phase": "LINT" - }, - { - "ruleId": "W2508", - "severity": "WARN", - "message": "Security group allows all traffic from 0.0.0.0/0 - sensitive port 27017 is exposed", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftInternalSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress", - "suggestedFix": "Restrict the CIDR range or limit the protocol", - "category": "Security", - "startLine": 1057, - "startColumn": 7, - "endLine": 1057, - "endColumn": 27, - "ruleDescription": "Security group allows open access to sensitive port", - "phase": "LINT" - }, - { - "ruleId": "W2508", - "severity": "WARN", - "message": "Security group allows all traffic from 0.0.0.0/0 - sensitive port 3306 is exposed", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftInternalSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress", - "suggestedFix": "Restrict the CIDR range or limit the protocol", - "category": "Security", - "startLine": 1057, - "startColumn": 7, - "endLine": 1057, - "endColumn": 27, - "ruleDescription": "Security group allows open access to sensitive port", - "phase": "LINT" - }, - { - "ruleId": "W2508", - "severity": "WARN", - "message": "Security group allows all traffic from 0.0.0.0/0 - sensitive port 3389 is exposed", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftInternalSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress", - "suggestedFix": "Restrict the CIDR range or limit the protocol", - "category": "Security", - "startLine": 1057, - "startColumn": 7, - "endLine": 1057, - "endColumn": 27, - "ruleDescription": "Security group allows open access to sensitive port", - "phase": "LINT" - }, - { - "ruleId": "W2508", - "severity": "WARN", - "message": "Security group allows all traffic from 0.0.0.0/0 - sensitive port 5432 is exposed", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftInternalSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress", - "suggestedFix": "Restrict the CIDR range or limit the protocol", - "category": "Security", - "startLine": 1057, - "startColumn": 7, - "endLine": 1057, - "endColumn": 27, - "ruleDescription": "Security group allows open access to sensitive port", - "phase": "LINT" - }, - { - "ruleId": "W2508", - "severity": "WARN", - "message": "Security group allows all traffic from 0.0.0.0/0 - sensitive port 6379 is exposed", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftInternalSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress", - "suggestedFix": "Restrict the CIDR range or limit the protocol", - "category": "Security", - "startLine": 1057, - "startColumn": 7, - "endLine": 1057, - "endColumn": 27, - "ruleDescription": "Security group allows open access to sensitive port", - "phase": "LINT" - }, - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", - "entity": { - "logicalId": "KeyGen", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 810, - "startColumn": 7, - "endLine": 810, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" - } - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'OpenShiftNodeASG' dependency already enforced by a 'Ref' at 'Properties.UserData.Fn::Base64.Fn::Join.1.43'", - "source": "CFN_LINT", - "entity": { - "logicalId": "AnsibleConfigServer", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 283, - "startColumn": 5, - "endLine": 283, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'OpenShiftNodeASG' dependency already enforced by a 'Ref' at 'Properties.UserData.Fn::Base64.Fn::Join.1.88'", - "source": "CFN_LINT", - "entity": { - "logicalId": "AnsibleConfigServer", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 283, - "startColumn": 5, - "endLine": 283, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'KeyGen' dependency already enforced by a 'GetAtt' at 'Properties.ServiceToken'", - "source": "CFN_LINT", - "entity": { - "logicalId": "GetRSA", - "entityType": "Resource", - "resourceType": "Custom::GenerateKeys" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 774, - "startColumn": 5, - "endLine": 774, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'GetRSA' dependency already enforced by a 'GetAtt' at 'Metadata.AWS::CloudFormation::Init.GetPublicKey.files./root/.ssh/public.key.content.Fn::Join.1.1'", - "source": "CFN_LINT", - "entity": { - "logicalId": "OpenShiftMasterASLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 1085, - "startColumn": 5, - "endLine": 1085, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3697", - "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", - "source": "CFN_LINT", - "entity": { - "logicalId": "OpenShiftEtcdLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "category": "Deprecation", - "startLine": 860, - "startColumn": 3, - "endLine": 860, - "endColumn": 28, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" - }, - { - "ruleId": "W3697", - "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", - "source": "CFN_LINT", - "entity": { - "logicalId": "OpenShiftMasterASLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "category": "Deprecation", - "startLine": 1084, - "startColumn": 3, - "endLine": 1084, - "endColumn": 32, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" - }, - { - "ruleId": "W3697", - "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", - "source": "CFN_LINT", - "entity": { - "logicalId": "OpenShiftNodesLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "category": "Deprecation", - "startLine": 1414, - "startColumn": 3, - "endLine": 1414, - "endColumn": 29, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" - }, - { - "ruleId": "W7001", - "severity": "WARN", - "message": "Mapping 'LinuxAMINameMap' is not referenced by any Fn::FindInMap", - "source": "CFN_LINT", - "entity": { - "logicalId": "LinuxAMINameMap", - "entityType": "Mapping" - }, - "propertyPath": "Mappings/LinuxAMINameMap", - "category": "Best Practice", - "startLine": 25, - "startColumn": 3, - "endLine": 25, - "endColumn": 18, - "ruleDescription": "Check if Mappings are Used", - "phase": "LINT" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", - "source": "CFN_LINT", - "entity": { - "logicalId": "AnsibleConfigServer", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.NetworkInterfaces.0.AssociatePublicIpAddress", - "category": "Best Practice", - "startLine": 365, - "startColumn": 9, - "endLine": 365, - "endColumn": 33, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", - "source": "CFN_LINT", - "entity": { - "logicalId": "AnsibleConfigServer", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.NetworkInterfaces.0.DeleteOnTermination", - "category": "Best Practice", - "startLine": 366, - "startColumn": 9, - "endLine": 366, - "endColumn": 28, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'5' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "KeyGen", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Timeout", - "category": "Best Practice", - "startLine": 811, - "startColumn": 7, - "endLine": 811, - "endColumn": 14, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", - "source": "CFN_LINT", - "entity": { - "logicalId": "OpenShiftEtcdASG", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties.Tags.0.PropagateAtLaunch", - "category": "Best Practice", - "startLine": 853, - "startColumn": 9, - "endLine": 853, - "endColumn": 26, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "OpenShiftEtcdLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.VolumeSize", - "category": "Best Practice", - "startLine": 905, - "startColumn": 11, - "endLine": 905, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", - "source": "CFN_LINT", - "entity": { - "logicalId": "OpenShiftEtcdLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.InstanceMonitoring", - "category": "Best Practice", - "startLine": 913, - "startColumn": 7, - "endLine": 913, - "endColumn": 25, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", - "source": "CFN_LINT", - "entity": { - "logicalId": "OpenShiftMasterASG", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties.Tags.0.PropagateAtLaunch", - "category": "Best Practice", - "startLine": 1077, - "startColumn": 9, - "endLine": 1077, - "endColumn": 26, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "OpenShiftMasterASLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.VolumeSize", - "category": "Best Practice", - "startLine": 1130, - "startColumn": 11, - "endLine": 1130, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", - "source": "CFN_LINT", - "entity": { - "logicalId": "OpenShiftMasterASLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.InstanceMonitoring", - "category": "Best Practice", - "startLine": 1138, - "startColumn": 7, - "endLine": 1138, - "endColumn": 25, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", - "source": "CFN_LINT", - "entity": { - "logicalId": "OpenShiftNodeASG", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties.Tags.0.PropagateAtLaunch", - "category": "Best Practice", - "startLine": 1362, - "startColumn": 9, - "endLine": 1362, - "endColumn": 26, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'8080' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "OpenShiftNodeSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.1.FromPort", - "category": "Best Practice", - "startLine": 1403, - "startColumn": 9, - "endLine": 1403, - "endColumn": 17, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'8080' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "OpenShiftNodeSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.1.ToPort", - "category": "Best Practice", - "startLine": 1405, - "startColumn": 9, - "endLine": 1405, - "endColumn": 15, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "OpenShiftNodeSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.2.FromPort", - "category": "Best Practice", - "startLine": 1408, - "startColumn": 9, - "endLine": 1408, - "endColumn": 17, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "OpenShiftNodeSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.2.ToPort", - "category": "Best Practice", - "startLine": 1410, - "startColumn": 9, - "endLine": 1410, - "endColumn": 15, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "OpenShiftNodesLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.VolumeSize", - "category": "Best Practice", - "startLine": 1459, - "startColumn": 11, - "endLine": 1459, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'110' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "OpenShiftNodesLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.BlockDeviceMappings.1.Ebs.VolumeSize", - "category": "Best Practice", - "startLine": 1463, - "startColumn": 11, - "endLine": 1463, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", - "source": "CFN_LINT", - "entity": { - "logicalId": "OpenShiftNodesLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.InstanceMonitoring", - "category": "Best Practice", - "startLine": 1472, - "startColumn": 7, - "endLine": 1472, - "endColumn": 25, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'8443' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "OpenShiftSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.1.FromPort", - "category": "Best Practice", - "startLine": 1645, - "startColumn": 9, - "endLine": 1645, - "endColumn": 17, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'8444' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "OpenShiftSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.1.ToPort", - "category": "Best Practice", - "startLine": 1647, - "startColumn": 9, - "endLine": 1647, - "endColumn": 15, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "OpenShiftSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.2.FromPort", - "category": "Best Practice", - "startLine": 1650, - "startColumn": 9, - "endLine": 1650, - "endColumn": 17, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "OpenShiftSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.2.ToPort", - "category": "Best Practice", - "startLine": 1652, - "startColumn": 9, - "endLine": 1652, - "endColumn": 15, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", - "source": "ENGINE", - "entity": { - "logicalId": "AnsibleConfigServer", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 355, - "startColumn": 7, - "endLine": 355, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", - "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "ContainerAccessELBName", - "entityType": "Output" - }, - "propertyPath": "Outputs/ContainerAccessELBName/Value.Fn::Join", - "category": "Intrinsic Function", - "startLine": 123, - "startColumn": 3, - "endLine": 123, - "endColumn": 25, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "OpenShiftUI", - "entityType": "Output" - }, - "propertyPath": "Outputs/OpenShiftUI/Value.Fn::Join", - "category": "Intrinsic Function", - "startLine": 132, - "startColumn": 3, - "endLine": 132, - "endColumn": 14, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "AnsibleConfigServer", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.GetPublicKey.files./root/.ssh/public.key.content.Fn::Join", - "category": "Intrinsic Function", - "startLine": 304, - "startColumn": 17, - "endLine": 304, - "endColumn": 25, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "AnsibleConfigServer", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.SetPrivateKey.files./root/.ssh/id_rsa.content.Fn::Join", - "category": "Intrinsic Function", - "startLine": 327, - "startColumn": 17, - "endLine": 327, - "endColumn": 25, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "GetRSA", - "entityType": "Resource", - "resourceType": "Custom::GenerateKeys" - }, - "propertyPath": "Properties.ResourceProperties.RequestId.Fn::Join", - "category": "Intrinsic Function", - "startLine": 780, - "startColumn": 11, - "endLine": 780, - "endColumn": 19, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "GetRSA", - "entityType": "Resource", - "resourceType": "Custom::GenerateKeys" - }, - "propertyPath": "Properties.ResponseURL.Fn::Join", - "category": "Intrinsic Function", - "startLine": 786, - "startColumn": 9, - "endLine": 786, - "endColumn": 17, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "OpenShiftEtcdLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.GetPublicKey.files./root/.ssh/public.key.content.Fn::Join", - "category": "Intrinsic Function", - "startLine": 872, - "startColumn": 17, - "endLine": 872, - "endColumn": 25, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "OpenShiftMasterASLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.GetPublicKey.files./root/.ssh/public.key.content.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1097, - "startColumn": 17, - "endLine": 1097, - "endColumn": 25, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "OpenShiftNodesLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.GetPublicKey.files./root/.ssh/public.key.content.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1426, - "startColumn": 17, - "endLine": 1426, - "endColumn": 25, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, - { - "ruleId": "I3042", - "severity": "INFO", - "message": "ARN in Resource SetupRole contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", - "source": "CFN_LINT", - "entity": { - "logicalId": "SetupRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Policies.0.PolicyDocument.Statement.0.Resource.Fn::Sub", - "category": "Best Practice", - "startLine": 1674, - "startColumn": 15, - "endLine": 1674, - "endColumn": 22, - "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AnsibleConfigServer", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 355, - "startColumn": 7, - "endLine": 355, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AnsibleConfigServer", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 360, - "startColumn": 7, - "endLine": 360, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "parameter with AllowedValues" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AnsibleConfigServer", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.KeyName", - "category": "Best Practice", - "startLine": 362, - "startColumn": 7, - "endLine": 362, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'KeyPairName' (type AWS::EC2::KeyPair::KeyName)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AnsibleConfigServer", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.NetworkInterfaces", - "category": "Best Practice", - "startLine": 364, - "startColumn": 7, - "endLine": 364, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AnsibleConfigServer", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.UserData", - "category": "Best Practice", - "startLine": 375, - "startColumn": 7, - "endLine": 375, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Base64 with unresolvable argument)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HealthCheck' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ContainerAccessELB", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" - }, - "propertyPath": "Properties.HealthCheck", - "category": "Best Practice", - "startLine": 751, - "startColumn": 7, - "endLine": 751, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Subnets' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ContainerAccessELB", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" - }, - "propertyPath": "Properties.Subnets", - "category": "Best Practice", - "startLine": 768, - "startColumn": 7, - "endLine": 768, - "endColumn": 14, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LambdaExecutionRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Path", - "category": "Best Practice", - "startLine": 824, - "startColumn": 7, - "endLine": 824, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftEtcdASG", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties.LaunchConfigurationName", - "category": "Best Practice", - "startLine": 846, - "startColumn": 7, - "endLine": 846, - "endColumn": 30, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'OpenShiftEtcdLaunchConfig'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftEtcdASG", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties.VPCZoneIdentifier", - "category": "Best Practice", - "startLine": 855, - "startColumn": 7, - "endLine": 855, - "endColumn": 24, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BlockDeviceMappings' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftEtcdLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.BlockDeviceMappings", - "category": "Best Practice", - "startLine": 902, - "startColumn": 7, - "endLine": 902, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftEtcdLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.IamInstanceProfile", - "category": "Best Practice", - "startLine": 906, - "startColumn": 7, - "endLine": 906, - "endColumn": 25, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'SetupRoleProfile'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftEtcdLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 908, - "startColumn": 7, - "endLine": 908, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceMonitoring' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftEtcdLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.InstanceMonitoring", - "category": "Best Practice", - "startLine": 913, - "startColumn": 7, - "endLine": 913, - "endColumn": 25, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftEtcdLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 914, - "startColumn": 7, - "endLine": 914, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftEtcdLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.KeyName", - "category": "Best Practice", - "startLine": 916, - "startColumn": 7, - "endLine": 916, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'KeyPairName' (type AWS::EC2::KeyPair::KeyName)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftEtcdLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.SecurityGroups", - "category": "Best Practice", - "startLine": 918, - "startColumn": 7, - "endLine": 918, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftEtcdLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.UserData", - "category": "Best Practice", - "startLine": 920, - "startColumn": 7, - "endLine": 920, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Base64 with unresolvable argument)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftInternalSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 1056, - "startColumn": 7, - "endLine": 1056, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftInternalSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 1060, - "startColumn": 7, - "endLine": 1060, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'VPCID' (type AWS::EC2::VPC::Id)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftMasterASG", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties.LaunchConfigurationName", - "category": "Best Practice", - "startLine": 1068, - "startColumn": 7, - "endLine": 1068, - "endColumn": 30, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'OpenShiftMasterASLaunchConfig'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftMasterASG", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties.VPCZoneIdentifier", - "category": "Best Practice", - "startLine": 1079, - "startColumn": 7, - "endLine": 1079, - "endColumn": 24, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BlockDeviceMappings' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftMasterASLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.BlockDeviceMappings", - "category": "Best Practice", - "startLine": 1127, - "startColumn": 7, - "endLine": 1127, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftMasterASLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.IamInstanceProfile", - "category": "Best Practice", - "startLine": 1131, - "startColumn": 7, - "endLine": 1131, - "endColumn": 25, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'SetupRoleProfile'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftMasterASLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 1133, - "startColumn": 7, - "endLine": 1133, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceMonitoring' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftMasterASLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.InstanceMonitoring", - "category": "Best Practice", - "startLine": 1138, - "startColumn": 7, - "endLine": 1138, - "endColumn": 25, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftMasterASLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 1139, - "startColumn": 7, - "endLine": 1139, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftMasterASLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.KeyName", - "category": "Best Practice", - "startLine": 1141, - "startColumn": 7, - "endLine": 1141, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'KeyPairName' (type AWS::EC2::KeyPair::KeyName)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftMasterASLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.SecurityGroups", - "category": "Best Practice", - "startLine": 1143, - "startColumn": 7, - "endLine": 1143, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftMasterASLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.UserData", - "category": "Best Practice", - "startLine": 1145, - "startColumn": 7, - "endLine": 1145, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Base64 with unresolvable argument)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HealthCheck' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftMasterELB", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" - }, - "propertyPath": "Properties.HealthCheck", - "category": "Best Practice", - "startLine": 1286, - "startColumn": 7, - "endLine": 1286, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Subnets' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftMasterELB", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" - }, - "propertyPath": "Properties.Subnets", - "category": "Best Practice", - "startLine": 1311, - "startColumn": 7, - "endLine": 1311, - "endColumn": 14, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HealthCheck' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftMasterInternalELB", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" - }, - "propertyPath": "Properties.HealthCheck", - "category": "Best Practice", - "startLine": 1321, - "startColumn": 7, - "endLine": 1321, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftMasterInternalELB", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" - }, - "propertyPath": "Properties.Scheme", - "category": "Best Practice", - "startLine": 1340, - "startColumn": 7, - "endLine": 1340, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Subnets' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftMasterInternalELB", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" - }, - "propertyPath": "Properties.Subnets", - "category": "Best Practice", - "startLine": 1343, - "startColumn": 7, - "endLine": 1343, - "endColumn": 14, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftNodeASG", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties.LaunchConfigurationName", - "category": "Best Practice", - "startLine": 1353, - "startColumn": 7, - "endLine": 1353, - "endColumn": 30, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'OpenShiftNodesLaunchConfig'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftNodeASG", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties.VPCZoneIdentifier", - "category": "Best Practice", - "startLine": 1364, - "startColumn": 7, - "endLine": 1364, - "endColumn": 24, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HealthCheck' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftNodeInternalELB", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" - }, - "propertyPath": "Properties.HealthCheck", - "category": "Best Practice", - "startLine": 1371, - "startColumn": 7, - "endLine": 1371, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftNodeInternalELB", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" - }, - "propertyPath": "Properties.Scheme", - "category": "Best Practice", - "startLine": 1386, - "startColumn": 7, - "endLine": 1386, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Subnets' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftNodeInternalELB", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" - }, - "propertyPath": "Properties.Subnets", - "category": "Best Practice", - "startLine": 1389, - "startColumn": 7, - "endLine": 1389, - "endColumn": 14, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftNodeSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 1396, - "startColumn": 7, - "endLine": 1396, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftNodeSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 1411, - "startColumn": 7, - "endLine": 1411, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'VPCID' (type AWS::EC2::VPC::Id)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BlockDeviceMappings' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftNodesLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.BlockDeviceMappings", - "category": "Best Practice", - "startLine": 1456, - "startColumn": 7, - "endLine": 1456, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftNodesLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.IamInstanceProfile", - "category": "Best Practice", - "startLine": 1465, - "startColumn": 7, - "endLine": 1465, - "endColumn": 25, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'SetupRoleProfile'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftNodesLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 1467, - "startColumn": 7, - "endLine": 1467, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceMonitoring' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftNodesLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.InstanceMonitoring", - "category": "Best Practice", - "startLine": 1472, - "startColumn": 7, - "endLine": 1472, - "endColumn": 25, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftNodesLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 1473, - "startColumn": 7, - "endLine": 1473, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftNodesLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.KeyName", - "category": "Best Practice", - "startLine": 1475, - "startColumn": 7, - "endLine": 1475, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'KeyPairName' (type AWS::EC2::KeyPair::KeyName)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftNodesLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.SecurityGroups", - "category": "Best Practice", - "startLine": 1477, - "startColumn": 7, - "endLine": 1477, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftNodesLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.UserData", - "category": "Best Practice", - "startLine": 1479, - "startColumn": 7, - "endLine": 1479, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Base64 with unresolvable argument)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 1638, - "startColumn": 7, - "endLine": 1638, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 1653, - "startColumn": 7, - "endLine": 1653, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'VPCID' (type AWS::EC2::VPC::Id)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SetupRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Path", - "category": "Best Practice", - "startLine": 1666, - "startColumn": 7, - "endLine": 1666, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SetupRoleProfile", - "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" - }, - "propertyPath": "Properties.Path", - "category": "Best Practice", - "startLine": 1689, - "startColumn": 7, - "endLine": 1689, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ContainerAccessELB' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ContainerAccessELB", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 747, - "startColumn": 5, - "endLine": 747, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'KeyGen' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "KeyGen", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 799, - "startColumn": 5, - "endLine": 799, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "LambdaExecutionRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 814, - "startColumn": 5, - "endLine": 814, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'OpenShiftInternalSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftInternalSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1055, - "startColumn": 5, - "endLine": 1055, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'OpenShiftMasterELB' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftMasterELB", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1282, - "startColumn": 5, - "endLine": 1282, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'OpenShiftMasterInternalELB' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftMasterInternalELB", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1317, - "startColumn": 5, - "endLine": 1317, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'OpenShiftNodeInternalELB' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftNodeInternalELB", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1370, - "startColumn": 5, - "endLine": 1370, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'OpenShiftNodeSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftNodeSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1395, - "startColumn": 5, - "endLine": 1395, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'OpenShiftSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "OpenShiftSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1637, - "startColumn": 5, - "endLine": 1637, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SetupRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SetupRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1657, - "startColumn": 5, - "endLine": 1657, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] } } diff --git a/src/resources/expected/validation_reports8.json b/src/resources/expected/validation_reports8.json index 4f8a2543..ab30c4bb 100644 --- a/src/resources/expected/validation_reports8.json +++ b/src/resources/expected/validation_reports8.json @@ -1,4 +1,8274 @@ { + "quickstart/nist_vpc_management.yaml": { + "filePath": "quickstart/nist_vpc_management.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 33, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 27, + "informational": 76, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3005", + "severity": "ERROR", + "message": "'rRouteMgmtProdDMZ' will not exist when condition 'cCreatePeeringProduction' is False", + "source": "CFN_LINT", + "entity": { + "logicalId": "rDeepSecurityInfrastructureTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Add a Condition to 'rDeepSecurityInfrastructureTemplate' that implies 'cCreatePeeringProduction'", + "category": "Reference", + "startLine": 333, + "startColumn": 5, + "endLine": 333, + "endColumn": 14, + "ruleDescription": "Check DependsOn values for Resources", + "phase": "LINT" + }, + { + "ruleId": "W1030", + "severity": "WARN", + "message": "{'Ref': 'pBastionAmi'} is not a 'AWS::EC2::Image.Id' when 'Ref' is resolved", + "source": "CFN_LINT", + "entity": { + "logicalId": "rMgmtBastionInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "suggestedFix": "Use parameter type AWS::EC2::Image::Id", + "category": "Best Practice", + "startLine": 512, + "startColumn": 7, + "endLine": 512, + "endColumn": 14, + "ruleDescription": "Validate the values that come from a Ref function", + "phase": "LINT" + }, + { + "ruleId": "W1030", + "severity": "WARN", + "message": "{'Ref': 'pProductionCIDR'} is not a 'ipv4-network' when 'Ref' is resolved", + "source": "CFN_LINT", + "entity": { + "logicalId": "rRouteMgmtProdDMZ", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" + }, + "propertyPath": "Properties.DestinationCidrBlock", + "suggestedFix": "Validate the parameter value matches CIDR format", + "category": "Best Practice", + "startLine": 628, + "startColumn": 7, + "endLine": 628, + "endColumn": 27, + "ruleDescription": "Validate the values that come from a Ref function", + "phase": "LINT" + }, + { + "ruleId": "W1030", + "severity": "WARN", + "message": "{'Ref': 'pProductionCIDR'} is not a 'ipv4-network' when 'Ref' is resolved", + "source": "CFN_LINT", + "entity": { + "logicalId": "rRouteMgmtProdPrivate", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" + }, + "propertyPath": "Properties.DestinationCidrBlock", + "suggestedFix": "Validate the parameter value matches CIDR format", + "category": "Best Practice", + "startLine": 638, + "startColumn": 7, + "endLine": 638, + "endColumn": 27, + "ruleDescription": "Validate the values that come from a Ref function", + "phase": "LINT" + }, + { + "ruleId": "W2502", + "severity": "WARN", + "message": "Resource 'rDeepSecurityInfrastructureTemplate' has DependsOn 'rRouteMgmtProdDMZ' which is conditional (condition 'cCreatePeeringProduction'), but 'rDeepSecurityInfrastructureTemplate' does not have a matching condition", + "source": "ENGINE", + "entity": { + "logicalId": "rDeepSecurityInfrastructureTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Add Condition: cCreatePeeringProduction to resource 'rDeepSecurityInfrastructureTemplate'", + "category": "Best Practice", + "startLine": 333, + "startColumn": 5, + "endLine": 333, + "endColumn": 14, + "ruleDescription": "DependsOn conditional resource without matching condition", + "phase": "LINT" + }, + { + "ruleId": "W2506", + "severity": "WARN", + "message": "Parameter 'pBastionAmi' is used as an ImageId but has Type 'String' - consider using 'AWS::EC2::Image::Id'", + "source": "CFN_LINT", + "entity": { + "logicalId": "pBastionAmi", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/pBastionAmi", + "category": "Best Practice", + "startLine": 192, + "startColumn": 3, + "endLine": 192, + "endColumn": 14, + "ruleDescription": "Check if ImageId Parameters have the correct type", + "phase": "LINT" + }, + { + "ruleId": "W2508", + "severity": "WARN", + "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupBastion", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress", + "suggestedFix": "Restrict the CIDR range to specific IP addresses", + "category": "Security", + "startLine": 689, + "startColumn": 7, + "endLine": 689, + "endColumn": 27, + "ruleDescription": "Security group allows open access to sensitive port", + "phase": "LINT" + }, + { + "ruleId": "W2508", + "severity": "WARN", + "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupPeered", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress", + "suggestedFix": "Restrict the CIDR range to specific IP addresses", + "category": "Security", + "startLine": 704, + "startColumn": 7, + "endLine": 704, + "endColumn": 27, + "ruleDescription": "Security group allows open access to sensitive port", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rIGWManagement' dependency already enforced by a 'Ref' at 'Properties.InternetGatewayId'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rGWAttachmentMgmtIGW", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 417, + "startColumn": 5, + "endLine": 417, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rDeepSecurityInfrastructureTemplate' dependency already enforced by a 'GetAtt' at 'Metadata.AWS::CloudFormation::Init.installDeepSecurityAgent.commands.0-download-DSA.command.Fn::Join.1.1'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rMgmtBastionInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 479, + "startColumn": 5, + "endLine": 479, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rDeepSecurityInfrastructureTemplate' dependency already enforced by a 'GetAtt' at 'Metadata.AWS::CloudFormation::Init.installDeepSecurityAgent.commands.3-activate-DSA.command.Fn::Join.1.1'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rMgmtBastionInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 479, + "startColumn": 5, + "endLine": 479, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Parameters' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", + "entity": { + "logicalId": "Parameters", + "entityType": "Mapping" + }, + "propertyPath": "Mappings/Parameters", + "category": "Best Practice", + "startLine": 45, + "startColumn": 3, + "endLine": 45, + "endColumn": 13, + "ruleDescription": "Check if Mappings are Used", + "phase": "LINT" + }, + { + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'cRegionIsUsGovWest1' is not used by any resource or Fn::If", + "source": "CFN_LINT", + "entity": { + "logicalId": "cRegionIsUsGovWest1", + "entityType": "Condition" + }, + "propertyPath": "Conditions/cRegionIsUsGovWest1", + "category": "Best Practice", + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 22, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'20' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNatInstanceTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.TimeoutInMinutes", + "category": "Best Practice", + "startLine": 583, + "startColumn": 7, + "endLine": 583, + "endColumn": 23, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupBastion", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupEgress.0.FromPort", + "category": "Best Practice", + "startLine": 686, + "startColumn": 9, + "endLine": 686, + "endColumn": 17, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'65535' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupBastion", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupEgress.0.ToPort", + "category": "Best Practice", + "startLine": 688, + "startColumn": 9, + "endLine": 688, + "endColumn": 15, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupBastion", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0.FromPort", + "category": "Best Practice", + "startLine": 692, + "startColumn": 9, + "endLine": 692, + "endColumn": 17, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupBastion", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0.ToPort", + "category": "Best Practice", + "startLine": 694, + "startColumn": 9, + "endLine": 694, + "endColumn": 15, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupPeered", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0.FromPort", + "category": "Best Practice", + "startLine": 706, + "startColumn": 9, + "endLine": 706, + "endColumn": 17, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupPeered", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0.ToPort", + "category": "Best Practice", + "startLine": 708, + "startColumn": 9, + "endLine": 708, + "endColumn": 15, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupSSHFromMgmt", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0.FromPort", + "category": "Best Practice", + "startLine": 721, + "startColumn": 9, + "endLine": 721, + "endColumn": 17, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupSSHFromMgmt", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0.ToPort", + "category": "Best Practice", + "startLine": 723, + "startColumn": 9, + "endLine": 723, + "endColumn": 15, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupVpcNat", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0.FromPort", + "category": "Best Practice", + "startLine": 736, + "startColumn": 9, + "endLine": 736, + "endColumn": 17, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupVpcNat", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0.ToPort", + "category": "Best Practice", + "startLine": 738, + "startColumn": 9, + "endLine": 738, + "endColumn": 15, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupVpcNat", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.1.FromPort", + "category": "Best Practice", + "startLine": 741, + "startColumn": 9, + "endLine": 741, + "endColumn": 17, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupVpcNat", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.1.ToPort", + "category": "Best Practice", + "startLine": 743, + "startColumn": 9, + "endLine": 743, + "endColumn": 15, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rVPCManagement", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.EnableDnsHostnames", + "category": "Best Practice", + "startLine": 754, + "startColumn": 7, + "endLine": 754, + "endColumn": 25, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rVPCManagement", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.EnableDnsSupport", + "category": "Best Practice", + "startLine": 755, + "startColumn": 7, + "endLine": 755, + "endColumn": 23, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "rDHCPoptions", + "entityType": "Resource", + "resourceType": "AWS::EC2::DHCPOptions" + }, + "propertyPath": "Properties.DomainName.Fn::Join", + "category": "Intrinsic Function", + "startLine": 322, + "startColumn": 9, + "endLine": 322, + "endColumn": 17, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "rDeepSecurityInfrastructureTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Parameters.CfnUrlPrefix.Fn::Join", + "category": "Intrinsic Function", + "startLine": 343, + "startColumn": 11, + "endLine": 343, + "endColumn": 19, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "rDeepSecurityInfrastructureTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.TemplateURL.Fn::Join", + "category": "Intrinsic Function", + "startLine": 388, + "startColumn": 9, + "endLine": 388, + "endColumn": 17, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "rMgmtBastionInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.installDeepSecurityAgent.commands.0-download-DSA.command.Fn::Join", + "category": "Intrinsic Function", + "startLine": 491, + "startColumn": 17, + "endLine": 491, + "endColumn": 25, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "rMgmtBastionInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.installDeepSecurityAgent.commands.3-activate-DSA.command.Fn::Join", + "category": "Intrinsic Function", + "startLine": 504, + "startColumn": 17, + "endLine": 504, + "endColumn": 25, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "rMgmtBastionInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.UserData.Fn::Base64.Fn::Join", + "category": "Intrinsic Function", + "startLine": 527, + "startColumn": 11, + "endLine": 527, + "endColumn": 19, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNatInstanceTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.TemplateURL.Fn::Join", + "category": "Intrinsic Function", + "startLine": 579, + "startColumn": 9, + "endLine": 579, + "endColumn": 17, + "ruleDescription": "Use Sub instead of Join", + "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": "rDeepSecurityInfrastructureTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "category": "Best Practice", + "startLine": 332, + "startColumn": 3, + "endLine": 332, + "endColumn": 38, + "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": "rDeepSecurityInfrastructureTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "category": "Best Practice", + "startLine": 332, + "startColumn": 3, + "endLine": 332, + "endColumn": 38, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "rNatInstanceTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "category": "Best Practice", + "startLine": 556, + "startColumn": 3, + "endLine": 556, + "endColumn": 23, + "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": "rNatInstanceTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "category": "Best Practice", + "startLine": 556, + "startColumn": 3, + "endLine": 556, + "endColumn": 23, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AssociaterEIPProdBastion", + "entityType": "Resource", + "resourceType": "AWS::EC2::EIPAssociation" + }, + "propertyPath": "Properties.AllocationId", + "category": "Best Practice", + "startLine": 305, + "startColumn": 7, + "endLine": 305, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/tree/master/aws-ec2-eipassociation", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt rEIPProdBastion.AllocationId", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkInterfaceId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AssociaterEIPProdBastion", + "entityType": "Resource", + "resourceType": "AWS::EC2::EIPAssociation" + }, + "propertyPath": "Properties.NetworkInterfaceId", + "category": "Best Practice", + "startLine": 309, + "startColumn": 7, + "endLine": 309, + "endColumn": 25, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/tree/master/aws-ec2-eipassociation", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rENIProductionBastion'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DhcpOptionsId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rDHCPOptionsAssocMgmt", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPCDHCPOptionsAssociation" + }, + "propertyPath": "Properties.DhcpOptionsId", + "category": "Best Practice", + "startLine": 314, + "startColumn": 7, + "endLine": 314, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rDHCPoptions'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rDHCPOptionsAssocMgmt", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPCDHCPOptionsAssociation" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 316, + "startColumn": 7, + "endLine": 316, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rVPCManagement'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DomainName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rDHCPoptions", + "entityType": "Resource", + "resourceType": "AWS::EC2::DHCPOptions" + }, + "propertyPath": "Properties.DomainName", + "category": "Best Practice", + "startLine": 321, + "startColumn": 7, + "endLine": 321, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DomainNameServers' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rDHCPoptions", + "entityType": "Resource", + "resourceType": "AWS::EC2::DHCPOptions" + }, + "propertyPath": "Properties.DomainNameServers", + "category": "Best Practice", + "startLine": 326, + "startColumn": 7, + "endLine": 326, + "endColumn": 24, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rENIProductionBastion", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkInterface" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 410, + "startColumn": 7, + "endLine": 410, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/networkinterface", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rManagementDMZSubnetA'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rGWAttachmentMgmtIGW", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 421, + "startColumn": 7, + "endLine": 421, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rVPCManagement'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rManagementDMZSubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 432, + "startColumn": 7, + "endLine": 432, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rManagementDMZSubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 434, + "startColumn": 7, + "endLine": 434, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rManagementDMZSubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 439, + "startColumn": 7, + "endLine": 439, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rVPCManagement'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rManagementDMZSubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 444, + "startColumn": 7, + "endLine": 444, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rManagementDMZSubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 446, + "startColumn": 7, + "endLine": 446, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rManagementDMZSubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 451, + "startColumn": 7, + "endLine": 451, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rVPCManagement'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rManagementPrivateSubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 456, + "startColumn": 7, + "endLine": 456, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rManagementPrivateSubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 458, + "startColumn": 7, + "endLine": 458, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rManagementPrivateSubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 463, + "startColumn": 7, + "endLine": 463, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rVPCManagement'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rManagementPrivateSubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 468, + "startColumn": 7, + "endLine": 468, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rManagementPrivateSubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 470, + "startColumn": 7, + "endLine": 470, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rManagementPrivateSubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 475, + "startColumn": 7, + "endLine": 475, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rVPCManagement'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rMgmtBastionInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 512, + "startColumn": 7, + "endLine": 512, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rMgmtBastionInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 514, + "startColumn": 7, + "endLine": 514, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rMgmtBastionInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.KeyName", + "category": "Best Practice", + "startLine": 516, + "startColumn": 7, + "endLine": 516, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rMgmtBastionInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.NetworkInterfaces", + "category": "Best Practice", + "startLine": 518, + "startColumn": 7, + "endLine": 518, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rMgmtBastionInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 525, + "startColumn": 7, + "endLine": 525, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNATGateway", + "entityType": "Resource", + "resourceType": "AWS::EC2::NatGateway" + }, + "propertyPath": "Properties.AllocationId", + "category": "Best Practice", + "startLine": 549, + "startColumn": 7, + "endLine": 549, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt rEIPProdNAT.AllocationId" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNATGateway", + "entityType": "Resource", + "resourceType": "AWS::EC2::NatGateway" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 553, + "startColumn": 7, + "endLine": 553, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rManagementDMZSubnetA'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'PeerVpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rPeeringConnectionProduction", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPCPeeringConnection" + }, + "propertyPath": "Properties.PeerVpcId", + "category": "Best Practice", + "startLine": 588, + "startColumn": 7, + "endLine": 588, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-ec2-vpcpeering.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rPeeringConnectionProduction", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPCPeeringConnection" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 593, + "startColumn": 7, + "endLine": 593, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-ec2-vpcpeering.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rVPCManagement'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteAssocMgmtDMZA", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 598, + "startColumn": 7, + "endLine": 598, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rRouteTableMgmtDMZ'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteAssocMgmtDMZA", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 600, + "startColumn": 7, + "endLine": 600, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rManagementDMZSubnetA'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteAssocMgmtPrivA", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 605, + "startColumn": 7, + "endLine": 605, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rRouteTableMgmtPrivate'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteAssocMgmtPrivA", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 607, + "startColumn": 7, + "endLine": 607, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rManagementPrivateSubnetA'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteAssocMgmtPrivB", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 612, + "startColumn": 7, + "endLine": 612, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rRouteTableMgmtPrivate'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteAssocMgmtPrivB", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 614, + "startColumn": 7, + "endLine": 614, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rManagementPrivateSubnetB'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteMgmtIGW", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" + }, + "propertyPath": "Properties.DestinationCidrBlock", + "category": "Best Practice", + "startLine": 619, + "startColumn": 7, + "endLine": 619, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteMgmtIGW", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 622, + "startColumn": 7, + "endLine": 622, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rRouteTableMgmtDMZ'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteMgmtProdDMZ", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" + }, + "propertyPath": "Properties.DestinationCidrBlock", + "category": "Best Practice", + "startLine": 628, + "startColumn": 7, + "endLine": 628, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteMgmtProdDMZ", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 630, + "startColumn": 7, + "endLine": 630, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rRouteTableMgmtDMZ'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteMgmtProdPrivate", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" + }, + "propertyPath": "Properties.DestinationCidrBlock", + "category": "Best Practice", + "startLine": 638, + "startColumn": 7, + "endLine": 638, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteMgmtProdPrivate", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 640, + "startColumn": 7, + "endLine": 640, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rRouteTableMgmtPrivate'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteProdMgmt", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" + }, + "propertyPath": "Properties.DestinationCidrBlock", + "category": "Best Practice", + "startLine": 648, + "startColumn": 7, + "endLine": 648, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteProdMgmt", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 650, + "startColumn": 7, + "endLine": 650, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteProdMgmtPublic", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" + }, + "propertyPath": "Properties.DestinationCidrBlock", + "category": "Best Practice", + "startLine": 658, + "startColumn": 7, + "endLine": 658, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteProdMgmtPublic", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 660, + "startColumn": 7, + "endLine": 660, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteTableMgmtDMZ", + "entityType": "Resource", + "resourceType": "AWS::EC2::RouteTable" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 670, + "startColumn": 7, + "endLine": 670, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rVPCManagement'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteTableMgmtPrivate", + "entityType": "Resource", + "resourceType": "AWS::EC2::RouteTable" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 678, + "startColumn": 7, + "endLine": 678, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rVPCManagement'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupBastion", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 683, + "startColumn": 7, + "endLine": 683, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupBastion", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 698, + "startColumn": 7, + "endLine": 698, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rVPCManagement'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupPeered", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 703, + "startColumn": 7, + "endLine": 703, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupPeered", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 712, + "startColumn": 7, + "endLine": 712, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rVPCManagement'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupSSHFromMgmt", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 717, + "startColumn": 7, + "endLine": 717, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupSSHFromMgmt", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 727, + "startColumn": 7, + "endLine": 727, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rVPCManagement'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupVpcNat", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 732, + "startColumn": 7, + "endLine": 732, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupVpcNat", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 747, + "startColumn": 7, + "endLine": 747, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rVPCManagement'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rVPCManagement", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 752, + "startColumn": 7, + "endLine": 752, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rVPCManagement", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.InstanceTenancy", + "category": "Best Practice", + "startLine": 756, + "startColumn": 7, + "endLine": 756, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rrRouteAssocMgmtDMZB", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 764, + "startColumn": 7, + "endLine": 764, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rRouteTableMgmtDMZ'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rrRouteAssocMgmtDMZB", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 766, + "startColumn": 7, + "endLine": 766, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rManagementDMZSubnetB'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rDeepSecurityInfrastructureTemplate' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rDeepSecurityInfrastructureTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 336, + "startColumn": 5, + "endLine": 336, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rEIPProdBastion' of type 'AWS::EC2::EIP' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rEIPProdBastion", + "entityType": "Resource", + "resourceType": "AWS::EC2::EIP" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 395, + "startColumn": 5, + "endLine": 395, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rEIPProdNAT' of type 'AWS::EC2::EIP' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rEIPProdNAT", + "entityType": "Resource", + "resourceType": "AWS::EC2::EIP" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 401, + "startColumn": 5, + "endLine": 401, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rNATGateway' of type 'AWS::EC2::NatGateway' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rNATGateway", + "entityType": "Resource", + "resourceType": "AWS::EC2::NatGateway" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 548, + "startColumn": 5, + "endLine": 548, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rNatInstanceTemplate' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rNatInstanceTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 558, + "startColumn": 5, + "endLine": 558, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "quickstart/nist_vpc_production.yaml": { + "filePath": "quickstart/nist_vpc_production.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 46, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 60, + "informational": 99, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W1030", + "severity": "WARN", + "message": "{'Ref': 'pAppPrivateSubnetBCIDR'} is not a 'ipv4-network' when 'Ref' is resolved", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAppPrivateSubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "suggestedFix": "Validate the parameter value matches CIDR format", + "category": "Best Practice", + "startLine": 211, + "startColumn": 7, + "endLine": 211, + "endColumn": 16, + "ruleDescription": "Validate the values that come from a Ref function", + "phase": "LINT" + }, + { + "ruleId": "W1030", + "severity": "WARN", + "message": "{'Ref': 'pDBPrivateSubnetACIDR'} is not a 'ipv4-network' when 'Ref' is resolved", + "source": "CFN_LINT", + "entity": { + "logicalId": "rDBPrivateSubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "suggestedFix": "Validate the parameter value matches CIDR format", + "category": "Best Practice", + "startLine": 226, + "startColumn": 7, + "endLine": 226, + "endColumn": 16, + "ruleDescription": "Validate the values that come from a Ref function", + "phase": "LINT" + }, + { + "ruleId": "W1030", + "severity": "WARN", + "message": "{'Ref': 'pDBPrivateSubnetBCIDR'} is not a 'ipv4-network' when 'Ref' is resolved", + "source": "CFN_LINT", + "entity": { + "logicalId": "rDBPrivateSubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "suggestedFix": "Validate the parameter value matches CIDR format", + "category": "Best Practice", + "startLine": 241, + "startColumn": 7, + "endLine": 241, + "endColumn": 16, + "ruleDescription": "Validate the values that come from a Ref function", + "phase": "LINT" + }, + { + "ruleId": "W2508", + "severity": "WARN", + "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupMgmtBastion", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress", + "suggestedFix": "Restrict the CIDR range to specific IP addresses", + "category": "Security", + "startLine": 620, + "startColumn": 7, + "endLine": 620, + "endColumn": 27, + "ruleDescription": "Security group allows open access to sensitive port", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rIGWProd' dependency already enforced by a 'Ref' at 'Properties.InternetGatewayId'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rGWAttachmentProdIGW", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 308, + "startColumn": 5, + "endLine": 308, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowALLEgressPublic", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.PortRange.From", + "category": "Best Practice", + "startLine": 383, + "startColumn": 9, + "endLine": 383, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'65535' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowALLEgressPublic", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.PortRange.To", + "category": "Best Practice", + "startLine": 384, + "startColumn": 9, + "endLine": 384, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'6' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowALLEgressPublic", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.Protocol", + "category": "Best Practice", + "startLine": 385, + "startColumn": 7, + "endLine": 385, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'100' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowALLEgressPublic", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.RuleNumber", + "category": "Best Practice", + "startLine": 387, + "startColumn": 7, + "endLine": 387, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowALLfromPrivEgress", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.PortRange.From", + "category": "Best Practice", + "startLine": 396, + "startColumn": 9, + "endLine": 396, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'65535' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowALLfromPrivEgress", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.PortRange.To", + "category": "Best Practice", + "startLine": 397, + "startColumn": 9, + "endLine": 397, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'6' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowALLfromPrivEgress", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.Protocol", + "category": "Best Practice", + "startLine": 398, + "startColumn": 7, + "endLine": 398, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'120' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowALLfromPrivEgress", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.RuleNumber", + "category": "Best Practice", + "startLine": 400, + "startColumn": 7, + "endLine": 400, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'1024' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowAllReturnTCP", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.PortRange.From", + "category": "Best Practice", + "startLine": 408, + "startColumn": 9, + "endLine": 408, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'65535' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowAllReturnTCP", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.PortRange.To", + "category": "Best Practice", + "startLine": 409, + "startColumn": 9, + "endLine": 409, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'6' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowAllReturnTCP", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.Protocol", + "category": "Best Practice", + "startLine": 410, + "startColumn": 7, + "endLine": 410, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'140' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowAllReturnTCP", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.RuleNumber", + "category": "Best Practice", + "startLine": 412, + "startColumn": 7, + "endLine": 412, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowAllTCPInternal", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.PortRange.From", + "category": "Best Practice", + "startLine": 421, + "startColumn": 9, + "endLine": 421, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'65535' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowAllTCPInternal", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.PortRange.To", + "category": "Best Practice", + "startLine": 422, + "startColumn": 9, + "endLine": 422, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'6' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowAllTCPInternal", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.Protocol", + "category": "Best Practice", + "startLine": 423, + "startColumn": 7, + "endLine": 423, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'120' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowAllTCPInternal", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.RuleNumber", + "category": "Best Practice", + "startLine": 425, + "startColumn": 7, + "endLine": 425, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowAllTCPInternalEgress", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.PortRange.From", + "category": "Best Practice", + "startLine": 434, + "startColumn": 9, + "endLine": 434, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'65535' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowAllTCPInternalEgress", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.PortRange.To", + "category": "Best Practice", + "startLine": 435, + "startColumn": 9, + "endLine": 435, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'6' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowAllTCPInternalEgress", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.Protocol", + "category": "Best Practice", + "startLine": 436, + "startColumn": 7, + "endLine": 436, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'100' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowAllTCPInternalEgress", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.RuleNumber", + "category": "Best Practice", + "startLine": 438, + "startColumn": 7, + "endLine": 438, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowBastionSSHAccess", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.PortRange.From", + "category": "Best Practice", + "startLine": 446, + "startColumn": 9, + "endLine": 446, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowBastionSSHAccess", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.PortRange.To", + "category": "Best Practice", + "startLine": 447, + "startColumn": 9, + "endLine": 447, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'6' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowBastionSSHAccess", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.Protocol", + "category": "Best Practice", + "startLine": 448, + "startColumn": 7, + "endLine": 448, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'210' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowBastionSSHAccess", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.RuleNumber", + "category": "Best Practice", + "startLine": 450, + "startColumn": 7, + "endLine": 450, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'1024' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowEgressReturnTCP", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.PortRange.From", + "category": "Best Practice", + "startLine": 459, + "startColumn": 9, + "endLine": 459, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'65535' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowEgressReturnTCP", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.PortRange.To", + "category": "Best Practice", + "startLine": 460, + "startColumn": 9, + "endLine": 460, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'6' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowEgressReturnTCP", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.Protocol", + "category": "Best Practice", + "startLine": 461, + "startColumn": 7, + "endLine": 461, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'140' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowEgressReturnTCP", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.RuleNumber", + "category": "Best Practice", + "startLine": 463, + "startColumn": 7, + "endLine": 463, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowHTTPSPublic", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.PortRange.From", + "category": "Best Practice", + "startLine": 471, + "startColumn": 9, + "endLine": 471, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowHTTPSPublic", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.PortRange.To", + "category": "Best Practice", + "startLine": 472, + "startColumn": 9, + "endLine": 472, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'6' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowHTTPSPublic", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.Protocol", + "category": "Best Practice", + "startLine": 473, + "startColumn": 7, + "endLine": 473, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'100' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowHTTPSPublic", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.RuleNumber", + "category": "Best Practice", + "startLine": 475, + "startColumn": 7, + "endLine": 475, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowHTTPfromProd", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.PortRange.From", + "category": "Best Practice", + "startLine": 484, + "startColumn": 9, + "endLine": 484, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowHTTPfromProd", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.PortRange.To", + "category": "Best Practice", + "startLine": 485, + "startColumn": 9, + "endLine": 485, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'6' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowHTTPfromProd", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.Protocol", + "category": "Best Practice", + "startLine": 486, + "startColumn": 7, + "endLine": 486, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'200' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowHTTPfromProd", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.RuleNumber", + "category": "Best Practice", + "startLine": 488, + "startColumn": 7, + "endLine": 488, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowMgmtAccessSSHtoPrivate", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.PortRange.From", + "category": "Best Practice", + "startLine": 497, + "startColumn": 9, + "endLine": 497, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowMgmtAccessSSHtoPrivate", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.PortRange.To", + "category": "Best Practice", + "startLine": 498, + "startColumn": 9, + "endLine": 498, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'6' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowMgmtAccessSSHtoPrivate", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.Protocol", + "category": "Best Practice", + "startLine": 499, + "startColumn": 7, + "endLine": 499, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'125' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowMgmtAccessSSHtoPrivate", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.RuleNumber", + "category": "Best Practice", + "startLine": 501, + "startColumn": 7, + "endLine": 501, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'1024' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowReturnTCPPriv", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.PortRange.From", + "category": "Best Practice", + "startLine": 509, + "startColumn": 9, + "endLine": 509, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'65535' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowReturnTCPPriv", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.PortRange.To", + "category": "Best Practice", + "startLine": 510, + "startColumn": 9, + "endLine": 510, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'6' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowReturnTCPPriv", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.Protocol", + "category": "Best Practice", + "startLine": 511, + "startColumn": 7, + "endLine": 511, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'140' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNACLRuleAllowReturnTCPPriv", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.RuleNumber", + "category": "Best Practice", + "startLine": 513, + "startColumn": 7, + "endLine": 513, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'20' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNatInstanceTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.TimeoutInMinutes", + "category": "Best Practice", + "startLine": 553, + "startColumn": 7, + "endLine": 553, + "endColumn": 23, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupMgmtBastion", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0.FromPort", + "category": "Best Practice", + "startLine": 623, + "startColumn": 9, + "endLine": 623, + "endColumn": 17, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupMgmtBastion", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0.ToPort", + "category": "Best Practice", + "startLine": 625, + "startColumn": 9, + "endLine": 625, + "endColumn": 15, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupSSHFromProd", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0.FromPort", + "category": "Best Practice", + "startLine": 641, + "startColumn": 9, + "endLine": 641, + "endColumn": 17, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupSSHFromProd", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0.ToPort", + "category": "Best Practice", + "startLine": 643, + "startColumn": 9, + "endLine": 643, + "endColumn": 15, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupVpcNat", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0.FromPort", + "category": "Best Practice", + "startLine": 659, + "startColumn": 9, + "endLine": 659, + "endColumn": 17, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupVpcNat", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0.ToPort", + "category": "Best Practice", + "startLine": 661, + "startColumn": 9, + "endLine": 661, + "endColumn": 15, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupVpcNat", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.1.FromPort", + "category": "Best Practice", + "startLine": 664, + "startColumn": 9, + "endLine": 664, + "endColumn": 17, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupVpcNat", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.1.ToPort", + "category": "Best Practice", + "startLine": 666, + "startColumn": 9, + "endLine": 666, + "endColumn": 15, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rVPCProduction", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.EnableDnsHostnames", + "category": "Best Practice", + "startLine": 680, + "startColumn": 7, + "endLine": 680, + "endColumn": 25, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rVPCProduction", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.EnableDnsSupport", + "category": "Best Practice", + "startLine": 681, + "startColumn": 7, + "endLine": 681, + "endColumn": 23, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNatInstanceTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.TemplateURL.Fn::Join", + "category": "Intrinsic Function", + "startLine": 549, + "startColumn": 9, + "endLine": 549, + "endColumn": 17, + "ruleDescription": "Use Sub instead of Join", + "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": "rNatInstanceTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "category": "Best Practice", + "startLine": 526, + "startColumn": 3, + "endLine": 526, + "endColumn": 23, + "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": "rNatInstanceTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "category": "Best Practice", + "startLine": 526, + "startColumn": 3, + "endLine": 526, + "endColumn": 23, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rAppPrivateSubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 180, + "startColumn": 7, + "endLine": 180, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'pRegionAZ1Name' (type AWS::EC2::AvailabilityZone::Name)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rAppPrivateSubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 182, + "startColumn": 7, + "endLine": 182, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rAppPrivateSubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 190, + "startColumn": 7, + "endLine": 190, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rVPCProduction'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rAppPrivateSubnetAssociationA", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 195, + "startColumn": 7, + "endLine": 195, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rRouteTableProdPrivate'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rAppPrivateSubnetAssociationA", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 197, + "startColumn": 7, + "endLine": 197, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rAppPrivateSubnetA'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rAppPrivateSubnetAssociationB", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 202, + "startColumn": 7, + "endLine": 202, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rRouteTableProdPrivate'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rAppPrivateSubnetAssociationB", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 204, + "startColumn": 7, + "endLine": 204, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rAppPrivateSubnetB'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rAppPrivateSubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 209, + "startColumn": 7, + "endLine": 209, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'pRegionAZ2Name' (type AWS::EC2::AvailabilityZone::Name)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rAppPrivateSubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 211, + "startColumn": 7, + "endLine": 211, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rAppPrivateSubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 219, + "startColumn": 7, + "endLine": 219, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rVPCProduction'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rDBPrivateSubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 224, + "startColumn": 7, + "endLine": 224, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'pRegionAZ1Name' (type AWS::EC2::AvailabilityZone::Name)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rDBPrivateSubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 226, + "startColumn": 7, + "endLine": 226, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rDBPrivateSubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 234, + "startColumn": 7, + "endLine": 234, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rVPCProduction'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rDBPrivateSubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 239, + "startColumn": 7, + "endLine": 239, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'pRegionAZ2Name' (type AWS::EC2::AvailabilityZone::Name)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rDBPrivateSubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 241, + "startColumn": 7, + "endLine": 241, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rDBPrivateSubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 249, + "startColumn": 7, + "endLine": 249, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rVPCProduction'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DhcpOptionsId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rDHCPOptionsAssocProd", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPCDHCPOptionsAssociation" + }, + "propertyPath": "Properties.DhcpOptionsId", + "category": "Best Practice", + "startLine": 254, + "startColumn": 7, + "endLine": 254, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rDHCPoptions'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rDHCPOptionsAssocProd", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPCDHCPOptionsAssociation" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 256, + "startColumn": 7, + "endLine": 256, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rVPCProduction'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DomainName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rDHCPoptions", + "entityType": "Resource", + "resourceType": "AWS::EC2::DHCPOptions" + }, + "propertyPath": "Properties.DomainName", + "category": "Best Practice", + "startLine": 261, + "startColumn": 7, + "endLine": 261, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DomainNameServers' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rDHCPoptions", + "entityType": "Resource", + "resourceType": "AWS::EC2::DHCPOptions" + }, + "propertyPath": "Properties.DomainNameServers", + "category": "Best Practice", + "startLine": 263, + "startColumn": 7, + "endLine": 263, + "endColumn": 24, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rDMZSubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 274, + "startColumn": 7, + "endLine": 274, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'pRegionAZ1Name' (type AWS::EC2::AvailabilityZone::Name)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rDMZSubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 276, + "startColumn": 7, + "endLine": 276, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rDMZSubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 284, + "startColumn": 7, + "endLine": 284, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rVPCProduction'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rDMZSubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 289, + "startColumn": 7, + "endLine": 289, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'pRegionAZ2Name' (type AWS::EC2::AvailabilityZone::Name)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rDMZSubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 291, + "startColumn": 7, + "endLine": 291, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rDMZSubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 299, + "startColumn": 7, + "endLine": 299, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rVPCProduction'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rGWAttachmentProdIGW", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 312, + "startColumn": 7, + "endLine": 312, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rVPCProduction'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLAssocAppPrivSubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" + }, + "propertyPath": "Properties.NetworkAclId", + "category": "Best Practice", + "startLine": 326, + "startColumn": 7, + "endLine": 326, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rNACLPrivate'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLAssocAppPrivSubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 328, + "startColumn": 7, + "endLine": 328, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rAppPrivateSubnetA'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLAssocAppPrivSubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" + }, + "propertyPath": "Properties.NetworkAclId", + "category": "Best Practice", + "startLine": 333, + "startColumn": 7, + "endLine": 333, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rNACLPrivate'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLAssocAppPrivSubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 335, + "startColumn": 7, + "endLine": 335, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rAppPrivateSubnetB'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLAssocDBPrivSubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" + }, + "propertyPath": "Properties.NetworkAclId", + "category": "Best Practice", + "startLine": 340, + "startColumn": 7, + "endLine": 340, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rNACLPrivate'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLAssocDBPrivSubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 342, + "startColumn": 7, + "endLine": 342, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rDBPrivateSubnetA'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLAssocDBPrivSubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" + }, + "propertyPath": "Properties.NetworkAclId", + "category": "Best Practice", + "startLine": 347, + "startColumn": 7, + "endLine": 347, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rNACLPrivate'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLAssocDBPrivSubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 349, + "startColumn": 7, + "endLine": 349, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rDBPrivateSubnetB'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLAssocDMZPubSubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" + }, + "propertyPath": "Properties.NetworkAclId", + "category": "Best Practice", + "startLine": 354, + "startColumn": 7, + "endLine": 354, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rNACLPublic'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLAssocDMZPubSubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 356, + "startColumn": 7, + "endLine": 356, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rDMZSubnetA'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLAssocDMZPubSubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" + }, + "propertyPath": "Properties.NetworkAclId", + "category": "Best Practice", + "startLine": 361, + "startColumn": 7, + "endLine": 361, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rNACLPublic'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLAssocDMZPubSubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 363, + "startColumn": 7, + "endLine": 363, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rDMZSubnetB'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLPrivate", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAcl" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 368, + "startColumn": 7, + "endLine": 368, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rVPCProduction'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLPublic", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAcl" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 373, + "startColumn": 7, + "endLine": 373, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rVPCProduction'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Egress' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLRuleAllowALLEgressPublic", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.Egress", + "category": "Best Practice", + "startLine": 379, + "startColumn": 7, + "endLine": 379, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLRuleAllowALLEgressPublic", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.NetworkAclId", + "category": "Best Practice", + "startLine": 380, + "startColumn": 7, + "endLine": 380, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rNACLPublic'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RuleNumber' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLRuleAllowALLEgressPublic", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.RuleNumber", + "category": "Best Practice", + "startLine": 387, + "startColumn": 7, + "endLine": 387, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Egress' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLRuleAllowALLfromPrivEgress", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.Egress", + "category": "Best Practice", + "startLine": 392, + "startColumn": 7, + "endLine": 392, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLRuleAllowALLfromPrivEgress", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.NetworkAclId", + "category": "Best Practice", + "startLine": 393, + "startColumn": 7, + "endLine": 393, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rNACLPrivate'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RuleNumber' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLRuleAllowALLfromPrivEgress", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.RuleNumber", + "category": "Best Practice", + "startLine": 400, + "startColumn": 7, + "endLine": 400, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLRuleAllowAllReturnTCP", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.NetworkAclId", + "category": "Best Practice", + "startLine": 405, + "startColumn": 7, + "endLine": 405, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rNACLPublic'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RuleNumber' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLRuleAllowAllReturnTCP", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.RuleNumber", + "category": "Best Practice", + "startLine": 412, + "startColumn": 7, + "endLine": 412, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLRuleAllowAllTCPInternal", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.NetworkAclId", + "category": "Best Practice", + "startLine": 418, + "startColumn": 7, + "endLine": 418, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rNACLPrivate'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RuleNumber' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLRuleAllowAllTCPInternal", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.RuleNumber", + "category": "Best Practice", + "startLine": 425, + "startColumn": 7, + "endLine": 425, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Egress' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLRuleAllowAllTCPInternalEgress", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.Egress", + "category": "Best Practice", + "startLine": 430, + "startColumn": 7, + "endLine": 430, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLRuleAllowAllTCPInternalEgress", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.NetworkAclId", + "category": "Best Practice", + "startLine": 431, + "startColumn": 7, + "endLine": 431, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rNACLPrivate'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RuleNumber' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLRuleAllowAllTCPInternalEgress", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.RuleNumber", + "category": "Best Practice", + "startLine": 438, + "startColumn": 7, + "endLine": 438, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLRuleAllowBastionSSHAccess", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.NetworkAclId", + "category": "Best Practice", + "startLine": 443, + "startColumn": 7, + "endLine": 443, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rNACLPublic'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RuleNumber' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLRuleAllowBastionSSHAccess", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.RuleNumber", + "category": "Best Practice", + "startLine": 450, + "startColumn": 7, + "endLine": 450, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Egress' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLRuleAllowEgressReturnTCP", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.Egress", + "category": "Best Practice", + "startLine": 455, + "startColumn": 7, + "endLine": 455, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLRuleAllowEgressReturnTCP", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.NetworkAclId", + "category": "Best Practice", + "startLine": 456, + "startColumn": 7, + "endLine": 456, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rNACLPublic'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RuleNumber' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLRuleAllowEgressReturnTCP", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.RuleNumber", + "category": "Best Practice", + "startLine": 463, + "startColumn": 7, + "endLine": 463, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLRuleAllowHTTPSPublic", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.NetworkAclId", + "category": "Best Practice", + "startLine": 468, + "startColumn": 7, + "endLine": 468, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rNACLPublic'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RuleNumber' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLRuleAllowHTTPSPublic", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.RuleNumber", + "category": "Best Practice", + "startLine": 475, + "startColumn": 7, + "endLine": 475, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLRuleAllowHTTPfromProd", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.NetworkAclId", + "category": "Best Practice", + "startLine": 481, + "startColumn": 7, + "endLine": 481, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rNACLPublic'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RuleNumber' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLRuleAllowHTTPfromProd", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.RuleNumber", + "category": "Best Practice", + "startLine": 488, + "startColumn": 7, + "endLine": 488, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLRuleAllowMgmtAccessSSHtoPrivate", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.NetworkAclId", + "category": "Best Practice", + "startLine": 494, + "startColumn": 7, + "endLine": 494, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rNACLPrivate'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RuleNumber' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLRuleAllowMgmtAccessSSHtoPrivate", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.RuleNumber", + "category": "Best Practice", + "startLine": 501, + "startColumn": 7, + "endLine": 501, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLRuleAllowReturnTCPPriv", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.NetworkAclId", + "category": "Best Practice", + "startLine": 506, + "startColumn": 7, + "endLine": 506, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rNACLPrivate'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RuleNumber' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLRuleAllowReturnTCPPriv", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "propertyPath": "Properties.RuleNumber", + "category": "Best Practice", + "startLine": 513, + "startColumn": 7, + "endLine": 513, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNATGateway", + "entityType": "Resource", + "resourceType": "AWS::EC2::NatGateway" + }, + "propertyPath": "Properties.AllocationId", + "category": "Best Practice", + "startLine": 519, + "startColumn": 7, + "endLine": 519, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt rEIPProdNAT.AllocationId" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNATGateway", + "entityType": "Resource", + "resourceType": "AWS::EC2::NatGateway" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 523, + "startColumn": 7, + "endLine": 523, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rDMZSubnetA'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteAssocDBPrivateA", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 557, + "startColumn": 7, + "endLine": 557, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rRouteTableProdPrivate'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteAssocDBPrivateA", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 559, + "startColumn": 7, + "endLine": 559, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rDBPrivateSubnetA'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteAssocDBPrivateB", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 564, + "startColumn": 7, + "endLine": 564, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rRouteTableProdPrivate'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteAssocDBPrivateB", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 566, + "startColumn": 7, + "endLine": 566, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rDBPrivateSubnetB'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteAssocProdDMZA", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 571, + "startColumn": 7, + "endLine": 571, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rRouteTableMain'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteAssocProdDMZA", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 573, + "startColumn": 7, + "endLine": 573, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rDMZSubnetA'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteAssocProdDMZB", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 578, + "startColumn": 7, + "endLine": 578, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rRouteTableMain'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteAssocProdDMZB", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 580, + "startColumn": 7, + "endLine": 580, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rDMZSubnetB'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteProdIGW", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" + }, + "propertyPath": "Properties.DestinationCidrBlock", + "category": "Best Practice", + "startLine": 586, + "startColumn": 7, + "endLine": 586, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteProdIGW", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 589, + "startColumn": 7, + "endLine": 589, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rRouteTableMain'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteProdPrivateNatGateway", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" + }, + "propertyPath": "Properties.DestinationCidrBlock", + "category": "Best Practice", + "startLine": 595, + "startColumn": 7, + "endLine": 595, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteProdPrivateNatGateway", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 598, + "startColumn": 7, + "endLine": 598, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rRouteTableProdPrivate'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteTableMain", + "entityType": "Resource", + "resourceType": "AWS::EC2::RouteTable" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 606, + "startColumn": 7, + "endLine": 606, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rVPCProduction'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteTableProdPrivate", + "entityType": "Resource", + "resourceType": "AWS::EC2::RouteTable" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 614, + "startColumn": 7, + "endLine": 614, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rVPCProduction'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupMgmtBastion", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 619, + "startColumn": 7, + "endLine": 619, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupMgmtBastion", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 632, + "startColumn": 7, + "endLine": 632, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rVPCProduction'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupSSHFromProd", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 637, + "startColumn": 7, + "endLine": 637, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupSSHFromProd", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 650, + "startColumn": 7, + "endLine": 650, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rVPCProduction'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupVpcNat", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 655, + "startColumn": 7, + "endLine": 655, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupVpcNat", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 673, + "startColumn": 7, + "endLine": 673, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rVPCProduction'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rVPCProduction", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 678, + "startColumn": 7, + "endLine": 678, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rVPCProduction", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.InstanceTenancy", + "category": "Best Practice", + "startLine": 682, + "startColumn": 7, + "endLine": 682, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rEIPProdNAT' of type 'AWS::EC2::EIP' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rEIPProdNAT", + "entityType": "Resource", + "resourceType": "AWS::EC2::EIP" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 304, + "startColumn": 5, + "endLine": 304, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rNACLPrivate' of type 'AWS::EC2::NetworkAcl' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLPrivate", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAcl" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 367, + "startColumn": 5, + "endLine": 367, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rNACLPublic' of type 'AWS::EC2::NetworkAcl' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rNACLPublic", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkAcl" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 372, + "startColumn": 5, + "endLine": 372, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rNATGateway' of type 'AWS::EC2::NatGateway' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rNATGateway", + "entityType": "Resource", + "resourceType": "AWS::EC2::NatGateway" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 518, + "startColumn": 5, + "endLine": 518, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rNatInstanceTemplate' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rNatInstanceTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 528, + "startColumn": 5, + "endLine": 528, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "quickstart/openshift.yaml": { + "filePath": "quickstart/openshift.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 19, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 39, + "informational": 75, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", + "entity": { + "logicalId": "KeyGen", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Code.S3Key.Fn::Sub", + "category": "Best Practice", + "startLine": 804, + "startColumn": 11, + "endLine": 804, + "endColumn": 18, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" + }, + { + "ruleId": "W2508", + "severity": "WARN", + "message": "Security group allows all traffic from 0.0.0.0/0 - sensitive port 1433 is exposed", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftInternalSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress", + "suggestedFix": "Restrict the CIDR range or limit the protocol", + "category": "Security", + "startLine": 1057, + "startColumn": 7, + "endLine": 1057, + "endColumn": 27, + "ruleDescription": "Security group allows open access to sensitive port", + "phase": "LINT" + }, + { + "ruleId": "W2508", + "severity": "WARN", + "message": "Security group allows all traffic from 0.0.0.0/0 - sensitive port 22 is exposed", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftInternalSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress", + "suggestedFix": "Restrict the CIDR range or limit the protocol", + "category": "Security", + "startLine": 1057, + "startColumn": 7, + "endLine": 1057, + "endColumn": 27, + "ruleDescription": "Security group allows open access to sensitive port", + "phase": "LINT" + }, + { + "ruleId": "W2508", + "severity": "WARN", + "message": "Security group allows all traffic from 0.0.0.0/0 - sensitive port 27017 is exposed", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftInternalSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress", + "suggestedFix": "Restrict the CIDR range or limit the protocol", + "category": "Security", + "startLine": 1057, + "startColumn": 7, + "endLine": 1057, + "endColumn": 27, + "ruleDescription": "Security group allows open access to sensitive port", + "phase": "LINT" + }, + { + "ruleId": "W2508", + "severity": "WARN", + "message": "Security group allows all traffic from 0.0.0.0/0 - sensitive port 3306 is exposed", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftInternalSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress", + "suggestedFix": "Restrict the CIDR range or limit the protocol", + "category": "Security", + "startLine": 1057, + "startColumn": 7, + "endLine": 1057, + "endColumn": 27, + "ruleDescription": "Security group allows open access to sensitive port", + "phase": "LINT" + }, + { + "ruleId": "W2508", + "severity": "WARN", + "message": "Security group allows all traffic from 0.0.0.0/0 - sensitive port 3389 is exposed", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftInternalSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress", + "suggestedFix": "Restrict the CIDR range or limit the protocol", + "category": "Security", + "startLine": 1057, + "startColumn": 7, + "endLine": 1057, + "endColumn": 27, + "ruleDescription": "Security group allows open access to sensitive port", + "phase": "LINT" + }, + { + "ruleId": "W2508", + "severity": "WARN", + "message": "Security group allows all traffic from 0.0.0.0/0 - sensitive port 5432 is exposed", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftInternalSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress", + "suggestedFix": "Restrict the CIDR range or limit the protocol", + "category": "Security", + "startLine": 1057, + "startColumn": 7, + "endLine": 1057, + "endColumn": 27, + "ruleDescription": "Security group allows open access to sensitive port", + "phase": "LINT" + }, + { + "ruleId": "W2508", + "severity": "WARN", + "message": "Security group allows all traffic from 0.0.0.0/0 - sensitive port 6379 is exposed", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftInternalSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress", + "suggestedFix": "Restrict the CIDR range or limit the protocol", + "category": "Security", + "startLine": 1057, + "startColumn": 7, + "endLine": 1057, + "endColumn": 27, + "ruleDescription": "Security group allows open access to sensitive port", + "phase": "LINT" + }, + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "KeyGen", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 810, + "startColumn": 7, + "endLine": 810, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'OpenShiftNodeASG' dependency already enforced by a 'Ref' at 'Properties.UserData.Fn::Base64.Fn::Join.1.43'", + "source": "CFN_LINT", + "entity": { + "logicalId": "AnsibleConfigServer", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 283, + "startColumn": 5, + "endLine": 283, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'OpenShiftNodeASG' dependency already enforced by a 'Ref' at 'Properties.UserData.Fn::Base64.Fn::Join.1.88'", + "source": "CFN_LINT", + "entity": { + "logicalId": "AnsibleConfigServer", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 283, + "startColumn": 5, + "endLine": 283, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'KeyGen' dependency already enforced by a 'GetAtt' at 'Properties.ServiceToken'", + "source": "CFN_LINT", + "entity": { + "logicalId": "GetRSA", + "entityType": "Resource", + "resourceType": "Custom::GenerateKeys" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 774, + "startColumn": 5, + "endLine": 774, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'GetRSA' dependency already enforced by a 'GetAtt' at 'Metadata.AWS::CloudFormation::Init.GetPublicKey.files./root/.ssh/public.key.content.Fn::Join.1.1'", + "source": "CFN_LINT", + "entity": { + "logicalId": "OpenShiftMasterASLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1085, + "startColumn": 5, + "endLine": 1085, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "OpenShiftEtcdLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "category": "Deprecation", + "startLine": 860, + "startColumn": 3, + "endLine": 860, + "endColumn": 28, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" + }, + { + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "OpenShiftMasterASLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "category": "Deprecation", + "startLine": 1084, + "startColumn": 3, + "endLine": 1084, + "endColumn": 32, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" + }, + { + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "OpenShiftNodesLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "category": "Deprecation", + "startLine": 1414, + "startColumn": 3, + "endLine": 1414, + "endColumn": 29, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" + }, + { + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'LinuxAMINameMap' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", + "entity": { + "logicalId": "LinuxAMINameMap", + "entityType": "Mapping" + }, + "propertyPath": "Mappings/LinuxAMINameMap", + "category": "Best Practice", + "startLine": 25, + "startColumn": 3, + "endLine": 25, + "endColumn": 18, + "ruleDescription": "Check if Mappings are Used", + "phase": "LINT" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", + "entity": { + "logicalId": "AnsibleConfigServer", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.NetworkInterfaces.0.AssociatePublicIpAddress", + "category": "Best Practice", + "startLine": 365, + "startColumn": 9, + "endLine": 365, + "endColumn": 33, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", + "entity": { + "logicalId": "AnsibleConfigServer", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.NetworkInterfaces.0.DeleteOnTermination", + "category": "Best Practice", + "startLine": 366, + "startColumn": 9, + "endLine": 366, + "endColumn": 28, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'5' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "KeyGen", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Timeout", + "category": "Best Practice", + "startLine": 811, + "startColumn": 7, + "endLine": 811, + "endColumn": 14, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", + "entity": { + "logicalId": "OpenShiftEtcdASG", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Properties.Tags.0.PropagateAtLaunch", + "category": "Best Practice", + "startLine": 853, + "startColumn": 9, + "endLine": 853, + "endColumn": 26, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "OpenShiftEtcdLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.VolumeSize", + "category": "Best Practice", + "startLine": 905, + "startColumn": 11, + "endLine": 905, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", + "entity": { + "logicalId": "OpenShiftEtcdLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.InstanceMonitoring", + "category": "Best Practice", + "startLine": 913, + "startColumn": 7, + "endLine": 913, + "endColumn": 25, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", + "entity": { + "logicalId": "OpenShiftMasterASG", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Properties.Tags.0.PropagateAtLaunch", + "category": "Best Practice", + "startLine": 1077, + "startColumn": 9, + "endLine": 1077, + "endColumn": 26, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "OpenShiftMasterASLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.VolumeSize", + "category": "Best Practice", + "startLine": 1130, + "startColumn": 11, + "endLine": 1130, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", + "entity": { + "logicalId": "OpenShiftMasterASLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.InstanceMonitoring", + "category": "Best Practice", + "startLine": 1138, + "startColumn": 7, + "endLine": 1138, + "endColumn": 25, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", + "entity": { + "logicalId": "OpenShiftNodeASG", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Properties.Tags.0.PropagateAtLaunch", + "category": "Best Practice", + "startLine": 1362, + "startColumn": 9, + "endLine": 1362, + "endColumn": 26, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'8080' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "OpenShiftNodeSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.1.FromPort", + "category": "Best Practice", + "startLine": 1403, + "startColumn": 9, + "endLine": 1403, + "endColumn": 17, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'8080' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "OpenShiftNodeSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.1.ToPort", + "category": "Best Practice", + "startLine": 1405, + "startColumn": 9, + "endLine": 1405, + "endColumn": 15, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "OpenShiftNodeSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.2.FromPort", + "category": "Best Practice", + "startLine": 1408, + "startColumn": 9, + "endLine": 1408, + "endColumn": 17, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "OpenShiftNodeSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.2.ToPort", + "category": "Best Practice", + "startLine": 1410, + "startColumn": 9, + "endLine": 1410, + "endColumn": 15, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "OpenShiftNodesLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.VolumeSize", + "category": "Best Practice", + "startLine": 1459, + "startColumn": 11, + "endLine": 1459, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'110' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "OpenShiftNodesLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.BlockDeviceMappings.1.Ebs.VolumeSize", + "category": "Best Practice", + "startLine": 1463, + "startColumn": 11, + "endLine": 1463, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", + "entity": { + "logicalId": "OpenShiftNodesLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.InstanceMonitoring", + "category": "Best Practice", + "startLine": 1472, + "startColumn": 7, + "endLine": 1472, + "endColumn": 25, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'8443' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "OpenShiftSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.1.FromPort", + "category": "Best Practice", + "startLine": 1645, + "startColumn": 9, + "endLine": 1645, + "endColumn": 17, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'8444' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "OpenShiftSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.1.ToPort", + "category": "Best Practice", + "startLine": 1647, + "startColumn": 9, + "endLine": 1647, + "endColumn": 15, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "OpenShiftSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.2.FromPort", + "category": "Best Practice", + "startLine": 1650, + "startColumn": 9, + "endLine": 1650, + "endColumn": 17, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "OpenShiftSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.2.ToPort", + "category": "Best Practice", + "startLine": 1652, + "startColumn": 9, + "endLine": 1652, + "endColumn": 15, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", + "entity": { + "logicalId": "AnsibleConfigServer", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 355, + "startColumn": 7, + "endLine": 355, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "ContainerAccessELBName", + "entityType": "Output" + }, + "propertyPath": "Outputs/ContainerAccessELBName/Value.Fn::Join", + "category": "Intrinsic Function", + "startLine": 123, + "startColumn": 3, + "endLine": 123, + "endColumn": 25, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "OpenShiftUI", + "entityType": "Output" + }, + "propertyPath": "Outputs/OpenShiftUI/Value.Fn::Join", + "category": "Intrinsic Function", + "startLine": 132, + "startColumn": 3, + "endLine": 132, + "endColumn": 14, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "AnsibleConfigServer", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.GetPublicKey.files./root/.ssh/public.key.content.Fn::Join", + "category": "Intrinsic Function", + "startLine": 304, + "startColumn": 17, + "endLine": 304, + "endColumn": 25, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "AnsibleConfigServer", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.SetPrivateKey.files./root/.ssh/id_rsa.content.Fn::Join", + "category": "Intrinsic Function", + "startLine": 327, + "startColumn": 17, + "endLine": 327, + "endColumn": 25, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "GetRSA", + "entityType": "Resource", + "resourceType": "Custom::GenerateKeys" + }, + "propertyPath": "Properties.ResourceProperties.RequestId.Fn::Join", + "category": "Intrinsic Function", + "startLine": 780, + "startColumn": 11, + "endLine": 780, + "endColumn": 19, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "GetRSA", + "entityType": "Resource", + "resourceType": "Custom::GenerateKeys" + }, + "propertyPath": "Properties.ResponseURL.Fn::Join", + "category": "Intrinsic Function", + "startLine": 786, + "startColumn": 9, + "endLine": 786, + "endColumn": 17, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "OpenShiftEtcdLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.GetPublicKey.files./root/.ssh/public.key.content.Fn::Join", + "category": "Intrinsic Function", + "startLine": 872, + "startColumn": 17, + "endLine": 872, + "endColumn": 25, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "OpenShiftMasterASLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.GetPublicKey.files./root/.ssh/public.key.content.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1097, + "startColumn": 17, + "endLine": 1097, + "endColumn": 25, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "OpenShiftNodesLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.GetPublicKey.files./root/.ssh/public.key.content.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1426, + "startColumn": 17, + "endLine": 1426, + "endColumn": 25, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I3042", + "severity": "INFO", + "message": "ARN in Resource SetupRole contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", + "source": "CFN_LINT", + "entity": { + "logicalId": "SetupRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Policies.0.PolicyDocument.Statement.0.Resource.Fn::Sub", + "category": "Best Practice", + "startLine": 1674, + "startColumn": 15, + "endLine": 1674, + "endColumn": 22, + "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AnsibleConfigServer", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 355, + "startColumn": 7, + "endLine": 355, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AnsibleConfigServer", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 360, + "startColumn": 7, + "endLine": 360, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "parameter with AllowedValues" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AnsibleConfigServer", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.KeyName", + "category": "Best Practice", + "startLine": 362, + "startColumn": 7, + "endLine": 362, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'KeyPairName' (type AWS::EC2::KeyPair::KeyName)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AnsibleConfigServer", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.NetworkInterfaces", + "category": "Best Practice", + "startLine": 364, + "startColumn": 7, + "endLine": 364, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AnsibleConfigServer", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 375, + "startColumn": 7, + "endLine": 375, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Base64 with unresolvable argument)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HealthCheck' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ContainerAccessELB", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.HealthCheck", + "category": "Best Practice", + "startLine": 751, + "startColumn": 7, + "endLine": 751, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Subnets' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ContainerAccessELB", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.Subnets", + "category": "Best Practice", + "startLine": 768, + "startColumn": 7, + "endLine": 768, + "endColumn": 14, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "LambdaExecutionRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 824, + "startColumn": 7, + "endLine": 824, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftEtcdASG", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Properties.LaunchConfigurationName", + "category": "Best Practice", + "startLine": 846, + "startColumn": 7, + "endLine": 846, + "endColumn": 30, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'OpenShiftEtcdLaunchConfig'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftEtcdASG", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Properties.VPCZoneIdentifier", + "category": "Best Practice", + "startLine": 855, + "startColumn": 7, + "endLine": 855, + "endColumn": 24, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BlockDeviceMappings' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftEtcdLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.BlockDeviceMappings", + "category": "Best Practice", + "startLine": 902, + "startColumn": 7, + "endLine": 902, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftEtcdLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.IamInstanceProfile", + "category": "Best Practice", + "startLine": 906, + "startColumn": 7, + "endLine": 906, + "endColumn": 25, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SetupRoleProfile'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftEtcdLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 908, + "startColumn": 7, + "endLine": 908, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceMonitoring' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftEtcdLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.InstanceMonitoring", + "category": "Best Practice", + "startLine": 913, + "startColumn": 7, + "endLine": 913, + "endColumn": 25, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftEtcdLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 914, + "startColumn": 7, + "endLine": 914, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftEtcdLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.KeyName", + "category": "Best Practice", + "startLine": 916, + "startColumn": 7, + "endLine": 916, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'KeyPairName' (type AWS::EC2::KeyPair::KeyName)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftEtcdLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.SecurityGroups", + "category": "Best Practice", + "startLine": 918, + "startColumn": 7, + "endLine": 918, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftEtcdLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 920, + "startColumn": 7, + "endLine": 920, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Base64 with unresolvable argument)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftInternalSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 1056, + "startColumn": 7, + "endLine": 1056, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftInternalSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 1060, + "startColumn": 7, + "endLine": 1060, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'VPCID' (type AWS::EC2::VPC::Id)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftMasterASG", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Properties.LaunchConfigurationName", + "category": "Best Practice", + "startLine": 1068, + "startColumn": 7, + "endLine": 1068, + "endColumn": 30, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'OpenShiftMasterASLaunchConfig'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftMasterASG", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Properties.VPCZoneIdentifier", + "category": "Best Practice", + "startLine": 1079, + "startColumn": 7, + "endLine": 1079, + "endColumn": 24, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BlockDeviceMappings' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftMasterASLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.BlockDeviceMappings", + "category": "Best Practice", + "startLine": 1127, + "startColumn": 7, + "endLine": 1127, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftMasterASLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.IamInstanceProfile", + "category": "Best Practice", + "startLine": 1131, + "startColumn": 7, + "endLine": 1131, + "endColumn": 25, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SetupRoleProfile'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftMasterASLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 1133, + "startColumn": 7, + "endLine": 1133, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceMonitoring' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftMasterASLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.InstanceMonitoring", + "category": "Best Practice", + "startLine": 1138, + "startColumn": 7, + "endLine": 1138, + "endColumn": 25, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftMasterASLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 1139, + "startColumn": 7, + "endLine": 1139, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftMasterASLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.KeyName", + "category": "Best Practice", + "startLine": 1141, + "startColumn": 7, + "endLine": 1141, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'KeyPairName' (type AWS::EC2::KeyPair::KeyName)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftMasterASLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.SecurityGroups", + "category": "Best Practice", + "startLine": 1143, + "startColumn": 7, + "endLine": 1143, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftMasterASLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 1145, + "startColumn": 7, + "endLine": 1145, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Base64 with unresolvable argument)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HealthCheck' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftMasterELB", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.HealthCheck", + "category": "Best Practice", + "startLine": 1286, + "startColumn": 7, + "endLine": 1286, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Subnets' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftMasterELB", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.Subnets", + "category": "Best Practice", + "startLine": 1311, + "startColumn": 7, + "endLine": 1311, + "endColumn": 14, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HealthCheck' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftMasterInternalELB", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.HealthCheck", + "category": "Best Practice", + "startLine": 1321, + "startColumn": 7, + "endLine": 1321, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftMasterInternalELB", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.Scheme", + "category": "Best Practice", + "startLine": 1340, + "startColumn": 7, + "endLine": 1340, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Subnets' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftMasterInternalELB", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.Subnets", + "category": "Best Practice", + "startLine": 1343, + "startColumn": 7, + "endLine": 1343, + "endColumn": 14, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftNodeASG", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Properties.LaunchConfigurationName", + "category": "Best Practice", + "startLine": 1353, + "startColumn": 7, + "endLine": 1353, + "endColumn": 30, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'OpenShiftNodesLaunchConfig'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftNodeASG", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Properties.VPCZoneIdentifier", + "category": "Best Practice", + "startLine": 1364, + "startColumn": 7, + "endLine": 1364, + "endColumn": 24, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HealthCheck' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftNodeInternalELB", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.HealthCheck", + "category": "Best Practice", + "startLine": 1371, + "startColumn": 7, + "endLine": 1371, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftNodeInternalELB", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.Scheme", + "category": "Best Practice", + "startLine": 1386, + "startColumn": 7, + "endLine": 1386, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Subnets' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftNodeInternalELB", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.Subnets", + "category": "Best Practice", + "startLine": 1389, + "startColumn": 7, + "endLine": 1389, + "endColumn": 14, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftNodeSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 1396, + "startColumn": 7, + "endLine": 1396, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftNodeSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 1411, + "startColumn": 7, + "endLine": 1411, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'VPCID' (type AWS::EC2::VPC::Id)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BlockDeviceMappings' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftNodesLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.BlockDeviceMappings", + "category": "Best Practice", + "startLine": 1456, + "startColumn": 7, + "endLine": 1456, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftNodesLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.IamInstanceProfile", + "category": "Best Practice", + "startLine": 1465, + "startColumn": 7, + "endLine": 1465, + "endColumn": 25, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SetupRoleProfile'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftNodesLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 1467, + "startColumn": 7, + "endLine": 1467, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceMonitoring' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftNodesLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.InstanceMonitoring", + "category": "Best Practice", + "startLine": 1472, + "startColumn": 7, + "endLine": 1472, + "endColumn": 25, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftNodesLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 1473, + "startColumn": 7, + "endLine": 1473, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftNodesLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.KeyName", + "category": "Best Practice", + "startLine": 1475, + "startColumn": 7, + "endLine": 1475, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'KeyPairName' (type AWS::EC2::KeyPair::KeyName)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftNodesLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.SecurityGroups", + "category": "Best Practice", + "startLine": 1477, + "startColumn": 7, + "endLine": 1477, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftNodesLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 1479, + "startColumn": 7, + "endLine": 1479, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Base64 with unresolvable argument)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 1638, + "startColumn": 7, + "endLine": 1638, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 1653, + "startColumn": 7, + "endLine": 1653, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'VPCID' (type AWS::EC2::VPC::Id)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SetupRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 1666, + "startColumn": 7, + "endLine": 1666, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SetupRoleProfile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 1689, + "startColumn": 7, + "endLine": 1689, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ContainerAccessELB' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ContainerAccessELB", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 747, + "startColumn": 5, + "endLine": 747, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'KeyGen' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "KeyGen", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 799, + "startColumn": 5, + "endLine": 799, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "LambdaExecutionRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 814, + "startColumn": 5, + "endLine": 814, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'OpenShiftInternalSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftInternalSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1055, + "startColumn": 5, + "endLine": 1055, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'OpenShiftMasterELB' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftMasterELB", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1282, + "startColumn": 5, + "endLine": 1282, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'OpenShiftMasterInternalELB' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftMasterInternalELB", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1317, + "startColumn": 5, + "endLine": 1317, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'OpenShiftNodeInternalELB' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftNodeInternalELB", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1370, + "startColumn": 5, + "endLine": 1370, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'OpenShiftNodeSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftNodeSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1395, + "startColumn": 5, + "endLine": 1395, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'OpenShiftSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1637, + "startColumn": 5, + "endLine": 1637, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SetupRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SetupRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1657, + "startColumn": 5, + "endLine": 1657, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, "quickstart/openshift_master.yaml": { "filePath": "quickstart/openshift_master.yaml", "status": "OK", @@ -14955,13 +23225,13 @@ "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SnapStart", + "propertyPath": "Properties.SnapStart.ApplyOn", "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", "startLine": 139, - "startColumn": 7, + "startColumn": 54, "endLine": 139, - "endColumn": 16, + "endColumn": 61, "ruleDescription": "Validate that SnapStart is properly configured", "phase": "LINT" }, @@ -47675,13 +55945,13 @@ "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SnapStart", + "propertyPath": "Properties.SnapStart.ApplyOn", "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", "startLine": 102, - "startColumn": 7, + "startColumn": 35, "endLine": 102, - "endColumn": 16, + "endColumn": 42, "ruleDescription": "Validate that SnapStart is properly configured", "phase": "LINT" }, diff --git a/src/resources/templates/bad/W2530_snapstart_conditional_apply_on.yaml b/src/resources/templates/bad/W2530_snapstart_conditional_apply_on.yaml new file mode 100644 index 00000000..a615ea81 --- /dev/null +++ b/src/resources/templates/bad/W2530_snapstart_conditional_apply_on.yaml @@ -0,0 +1,100 @@ +AWSTemplateFormatVersion: '2010-09-09' +Description: SnapStart enabled through Fn::If in a reachable deployment that publishes no function version +Conditions: + IsUsEast1: !Equals [!Ref AWS::Region, us-east-1] +Resources: + PropertiesTrueBranch: + Type: AWS::Lambda::Function + Properties: !If + - IsUsEast1 + - Runtime: python3.12 + Handler: index.handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: + S3Bucket: bucket + S3Key: code.zip + SnapStart: + ApplyOn: PublishedVersions + - Runtime: python3.12 + Handler: index.handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: + S3Bucket: bucket + S3Key: code.zip + PropertiesFalseBranch: + Type: AWS::Lambda::Function + Properties: !If + - IsUsEast1 + - Runtime: python3.12 + Handler: index.handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: + S3Bucket: bucket + S3Key: code.zip + - Runtime: python3.12 + Handler: index.handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: + S3Bucket: bucket + S3Key: code.zip + SnapStart: + ApplyOn: PublishedVersions + ApplyOnTrueBranch: + Type: AWS::Lambda::Function + Properties: + Runtime: python3.12 + Handler: index.handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: + S3Bucket: bucket + S3Key: code.zip + SnapStart: + ApplyOn: !If [IsUsEast1, PublishedVersions, None] + ApplyOnFalseBranch: + Type: AWS::Lambda::Function + Properties: + Runtime: python3.12 + Handler: index.handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: + S3Bucket: bucket + S3Key: code.zip + SnapStart: + ApplyOn: !If [IsUsEast1, None, PublishedVersions] + ApplyOnBesideNoValue: + Type: AWS::Lambda::Function + Properties: + Runtime: python3.12 + Handler: index.handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: + S3Bucket: bucket + S3Key: code.zip + SnapStart: + ApplyOn: !If [IsUsEast1, !Ref AWS::NoValue, PublishedVersions] + SnapStartBesideNoValue: + Type: AWS::Lambda::Function + Properties: + Runtime: python3.12 + Handler: index.handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: + S3Bucket: bucket + S3Key: code.zip + SnapStart: !If + - IsUsEast1 + - !Ref AWS::NoValue + - ApplyOn: PublishedVersions + EveryBranchEnables: + Type: AWS::Lambda::Function + Properties: + Runtime: python3.12 + Handler: index.handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: + S3Bucket: bucket + S3Key: code.zip + SnapStart: !If + - IsUsEast1 + - ApplyOn: PublishedVersions + - ApplyOn: PublishedVersions diff --git a/src/resources/templates/bad/W2530_snapstart_version_not_coexisting.yaml b/src/resources/templates/bad/W2530_snapstart_version_not_coexisting.yaml new file mode 100644 index 00000000..aed944f8 --- /dev/null +++ b/src/resources/templates/bad/W2530_snapstart_version_not_coexisting.yaml @@ -0,0 +1,86 @@ +AWSTemplateFormatVersion: '2010-09-09' +Description: SnapStart enabled where no AWS::Lambda::Version publishes the function in the same deployment +Parameters: + Environment: + Type: String + AllowedValues: [prod, dev] + Default: dev +Conditions: + IsProd: !Equals [!Ref Environment, prod] + IsDev: !Equals [!Ref Environment, dev] + IsUsEast1: !Equals [!Ref AWS::Region, us-east-1] +Resources: + PublishedFunction: + Type: AWS::Lambda::Function + Properties: + Runtime: python3.12 + Handler: index.handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: + S3Bucket: bucket + S3Key: code.zip + VersionOnlyDependsOnFunction: + Type: AWS::Lambda::Function + Properties: + Runtime: python3.12 + Handler: index.handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: + S3Bucket: bucket + S3Key: code.zip + SnapStart: + ApplyOn: PublishedVersions + OrderedVersion: + Type: AWS::Lambda::Version + DependsOn: VersionOnlyDependsOnFunction + Properties: + FunctionName: !Ref PublishedFunction + VersionOnlyDescribesFunction: + Type: AWS::Lambda::Function + Properties: + Runtime: python3.12 + Handler: index.handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: + S3Bucket: bucket + S3Key: code.zip + SnapStart: + ApplyOn: PublishedVersions + DescribedVersion: + Type: AWS::Lambda::Version + Properties: + FunctionName: !Ref PublishedFunction + Description: !Ref VersionOnlyDescribesFunction + VersionInOtherEnvironment: + Type: AWS::Lambda::Function + Properties: + Runtime: python3.12 + Handler: index.handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: + S3Bucket: bucket + S3Key: code.zip + SnapStart: !If + - IsProd + - ApplyOn: PublishedVersions + - !Ref AWS::NoValue + DevOnlyVersion: + Type: AWS::Lambda::Version + Condition: IsDev + Properties: + FunctionName: !Ref VersionInOtherEnvironment + VersionNamesOtherFunctionWhenEnabled: + Type: AWS::Lambda::Function + Properties: + Runtime: python3.12 + Handler: index.handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: + S3Bucket: bucket + S3Key: code.zip + SnapStart: + ApplyOn: !If [IsUsEast1, PublishedVersions, None] + SwitchedVersion: + Type: AWS::Lambda::Version + Properties: + FunctionName: !If [IsUsEast1, !Ref PublishedFunction, !Ref VersionNamesOtherFunctionWhenEnabled] diff --git a/src/resources/templates/good/W2530_snapstart_unreachable_or_published.yaml b/src/resources/templates/good/W2530_snapstart_unreachable_or_published.yaml new file mode 100644 index 00000000..97807fdc --- /dev/null +++ b/src/resources/templates/good/W2530_snapstart_unreachable_or_published.yaml @@ -0,0 +1,168 @@ +AWSTemplateFormatVersion: '2010-09-09' +Description: SnapStart that is either never enabled in a reachable deployment or is published in every deployment that enables it +Conditions: + IsUsEast1: !Equals [!Ref AWS::Region, us-east-1] + IsUsWest2: !Equals [!Ref AWS::Region, us-west-2] + IsNotUsEast1: !Not [!Condition IsUsEast1] +Resources: + PropertiesBranchExcludedByResourceCondition: + Type: AWS::Lambda::Function + Condition: IsUsEast1 + Properties: !If + - IsUsEast1 + - Runtime: python3.12 + Handler: index.handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: + S3Bucket: bucket + S3Key: code.zip + - Runtime: python3.12 + Handler: index.handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: + S3Bucket: bucket + S3Key: code.zip + SnapStart: + ApplyOn: PublishedVersions + ApplyOnBranchExcludedByResourceCondition: + Type: AWS::Lambda::Function + Condition: IsUsEast1 + Properties: + Runtime: python3.12 + Handler: index.handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: + S3Bucket: bucket + S3Key: code.zip + SnapStart: + ApplyOn: !If [IsUsEast1, None, PublishedVersions] + RepeatedConditionExcludesInnerBranch: + Type: AWS::Lambda::Function + Properties: + Runtime: python3.12 + Handler: index.handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: + S3Bucket: bucket + S3Key: code.zip + SnapStart: !If + - IsUsEast1 + - ApplyOn: !If [IsUsEast1, None, PublishedVersions] + - ApplyOn: None + ExclusiveConditionsExcludeInnerBranch: + Type: AWS::Lambda::Function + Properties: + Runtime: python3.12 + Handler: index.handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: + S3Bucket: bucket + S3Key: code.zip + SnapStart: !If + - IsUsEast1 + - ApplyOn: !If [IsUsWest2, PublishedVersions, None] + - ApplyOn: None + SnapStartNoValueOrNone: + Type: AWS::Lambda::Function + Properties: + Runtime: python3.12 + Handler: index.handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: + S3Bucket: bucket + S3Key: code.zip + SnapStart: !If + - IsUsEast1 + - !Ref AWS::NoValue + - ApplyOn: None + PublishedThroughSub: + Type: AWS::Lambda::Function + Properties: + Runtime: python3.12 + Handler: index.handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: + S3Bucket: bucket + S3Key: code.zip + SnapStart: + ApplyOn: PublishedVersions + PublishedThroughSubVersion: + Type: AWS::Lambda::Version + Properties: + FunctionName: !Sub ${PublishedThroughSub} + PublishedFromConditionalProperties: + Type: AWS::Lambda::Function + Properties: !If + - IsUsEast1 + - Runtime: python3.12 + Handler: index.handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: + S3Bucket: bucket + S3Key: code.zip + SnapStart: + ApplyOn: PublishedVersions + - Runtime: python3.12 + Handler: index.handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: + S3Bucket: bucket + S3Key: code.zip + PublishedFromConditionalPropertiesVersion: + Type: AWS::Lambda::Version + Properties: + FunctionName: !GetAtt PublishedFromConditionalProperties.Arn + PublishedInMatchingCondition: + Type: AWS::Lambda::Function + Properties: + Runtime: python3.12 + Handler: index.handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: + S3Bucket: bucket + S3Key: code.zip + SnapStart: !If + - IsUsEast1 + - ApplyOn: PublishedVersions + - !Ref AWS::NoValue + PublishedInMatchingConditionVersion: + Type: AWS::Lambda::Version + Condition: IsUsEast1 + Properties: + FunctionName: !Ref PublishedInMatchingCondition + PublishedInEveryDeployment: + Type: AWS::Lambda::Function + Properties: + Runtime: python3.12 + Handler: index.handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: + S3Bucket: bucket + S3Key: code.zip + SnapStart: + ApplyOn: PublishedVersions + PublishedInUsEast1Version: + Type: AWS::Lambda::Version + Condition: IsUsEast1 + Properties: + FunctionName: !Ref PublishedInEveryDeployment + PublishedElsewhereVersion: + Type: AWS::Lambda::Version + Condition: IsNotUsEast1 + Properties: + FunctionName: !Ref PublishedInEveryDeployment + PublishedFromMatchingFunctionNameBranch: + Type: AWS::Lambda::Function + Properties: + Runtime: python3.12 + Handler: index.handler + Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/lambda + Code: + S3Bucket: bucket + S3Key: code.zip + SnapStart: + ApplyOn: !If [IsUsEast1, PublishedVersions, None] + PublishedFromMatchingFunctionNameBranchVersion: + Type: AWS::Lambda::Version + Properties: + FunctionName: !If [IsUsEast1, !Ref PublishedFromMatchingFunctionNameBranch, !Ref PublishedThroughSub] diff --git a/src/schema-validator/src/validate.rs b/src/schema-validator/src/validate.rs index 99481176..1abb811b 100644 --- a/src/schema-validator/src/validate.rs +++ b/src/schema-validator/src/validate.rs @@ -3,14 +3,15 @@ use crate::store::CompiledSchemaStore; use diagnostics::{Diagnostic, Phase, RegisteredDiagnostic, ViolationContext, resolve_section_span}; use rules::format_rule_for_format; use std::borrow::Cow; +use std::collections::hash_map::Entry; use std::collections::{BTreeSet, HashMap, HashSet}; use std::sync::{Arc, LazyLock}; use template_model::coercion::{CoerceResult, coerce_to_number, coerce_to_string, coerce_value, scalar_eq}; use template_model::conditions::Satisfiability; use template_model::consts::{ FN_CONDITION, FN_FOR_EACH_KEY_PREFIX, FN_IF, FN_REF, INTRINSIC_FN_PATH_SEGMENTS, KEY_PROPERTIES, KEY_TYPE, - MAX_REQUIRED_PROPERTY_COMBINATIONS, MAX_SCENARIO_COMBINATIONS, MAX_SCHEMA_MATCH_DEPTH as MAX_MATCH_DEPTH, - MAX_SCHEMA_SCENARIO_ASSIGNMENTS as MAX_GROUP_SCENARIO_ASSIGNMENTS, + MAX_COMPLETE_SCENARIO_PRODUCT, MAX_REQUIRED_PROPERTY_COMBINATIONS, MAX_SCENARIO_PRODUCT_NODES, + MAX_SCHEMA_MATCH_DEPTH as MAX_MATCH_DEPTH, MAX_SCHEMA_SCENARIO_ASSIGNMENTS as MAX_GROUP_SCENARIO_ASSIGNMENTS, MAX_SCHEMA_SCENARIO_MERGE_ATTEMPTS as MAX_GROUP_SCENARIO_MERGE_ATTEMPTS, PARAM_TYPE_COMMA_DELIMITED_LIST, PARAM_TYPE_NUMBER, PARAM_TYPE_STRING, SAM_FUNCTION_TYPE, SAM_SERVERLESS_TYPE_PREFIX, }; @@ -941,7 +942,7 @@ fn property_presence_alternatives( return Vec::new(); } let (scenarios, was_curtailed) = - m.resolve_scenarios_with_limit(rid, &format!("{base_path}.{property}"), MAX_GROUP_PROPERTY_SCENARIOS); + m.resolve_scenarios_with_limit_shared(rid, &format!("{base_path}.{property}"), MAX_GROUP_PROPERTY_SCENARIOS); if was_curtailed && !m.scenario_budget_exhausted() { m.record_budget_exhaustion(BudgetKind::SchemaScenarioAssignments); } @@ -1096,7 +1097,7 @@ fn property_scenario_assignments( for property_path in property_paths { let (scenarios, was_curtailed) = - m.resolve_scenarios_with_limit(rid, property_path, MAX_GROUP_PROPERTY_SCENARIOS); + m.resolve_scenarios_with_limit_shared(rid, property_path, MAX_GROUP_PROPERTY_SCENARIOS); if was_curtailed { if !m.scenario_budget_exhausted() { m.record_budget_exhaustion(BudgetKind::SchemaScenarioAssignments); @@ -3164,7 +3165,7 @@ fn outer_resolved_scenarios( let Some(value) = model.resolve_deep(resource_id, property_path).or_else(|| model.resolve(resource_id, property_path).cloned()) else { - return model.resolve_scenarios(resource_id, property_path).as_ref().clone(); + return model.resolve_scenarios(resource_id, property_path); }; let mut scenarios = Vec::new(); collect_outer_resolved_scenarios(&value, &HashMap::new(), &mut scenarios); @@ -3662,7 +3663,7 @@ fn validate_prop( // anchors the diagnostic at the branch path (`.Fn::If.`), // so reporting here too would duplicate that finding at the // un-qualified property path. - for (val, _conds) in m.resolve_scenarios(rid, prop_path).iter() { + for (val, _conds) in m.resolve_scenarios_shared(rid, prop_path).iter() { if let ResolvedValue::Concrete { value } = &val && let Some(obj) = value.as_object() { @@ -3753,13 +3754,11 @@ fn validate_prop( /// Checks `minItems`, `maxItems` and `uniqueItems` from member presence. /// -/// Members gated by `Fn::If` over `AWS::NoValue` are counted through their -/// presence literals instead of enumerating every joint assignment, so a list -/// of N independently optional items costs O(N) (O(N^2) for uniqueness) rather -/// than 2^N. Deployments whose surviving members carry an unresolved reference -/// are not counted, matching the value-scenario checks that skip dynamic values. -/// Members whose presence has no single literal conjunction fall back to the -/// joint value scenarios. +/// Members gated by `Fn::If` over `AWS::NoValue` are decided one member at a +/// time instead of enumerating every joint assignment, so a list of N +/// independently optional items never materializes its 2^N worlds. A member +/// that carries an unresolved reference still occupies a slot when present: +/// its contents are unknown, but whether it survives is not. fn validate_item_cardinality( out: &mut Vec, m: &Arc, @@ -3774,11 +3773,10 @@ fn validate_item_cardinality( match &container { ResolvedValue::List { items } => { let members = classify_members(items); - if members.iter().any(|member| member.presence == MemberPresence::Complex) { - validate_item_cardinality_from_scenarios(out, m, rid, prop_path, schema); - return; + validate_member_item_counts(out, m, rid, prop_path, schema, &members, &outer_conditions); + if schema.unique_items == Some(true) { + validate_member_uniqueness(out, m, rid, prop_path, &members, &outer_conditions); } - validate_member_cardinality(out, m, rid, prop_path, schema, &members, &outer_conditions); } ResolvedValue::Concrete { value } if value.is_array() => { let value = value.0.clone(); @@ -3789,7 +3787,7 @@ fn validate_item_cardinality( } } -fn validate_member_cardinality( +fn validate_member_item_counts( out: &mut Vec, m: &Arc, rid: &str, @@ -3798,140 +3796,467 @@ fn validate_member_cardinality( members: &[ContainerMember<'_>], outer_conditions: &HashMap, ) { - if members.iter().any(|member| member.is_dynamic && member.presence == MemberPresence::Always) { + let bounds: Vec = ItemCountBound::of(schema).collect(); + if bounds.is_empty() { return; } - let always_present = members.iter().filter(|member| member.presence == MemberPresence::Always).count() as u64; - let optional = |member: &&ContainerMember<'_>| matches!(member.presence, MemberPresence::When(_)); - - if let Some(max) = schema.max_items { - let mut witness = outer_conditions.clone(); - let mut count = always_present; - let mut skipped_unsatisfiable = false; - for member in members.iter().filter(optional).filter(|member| !member.is_dynamic) { - let mut candidate = witness.clone(); - if extend_assignment(&mut candidate, presence_literals(member)) && is_satisfiable(m, &candidate) { - witness = candidate; - count += 1; - } else { - skipped_unsatisfiable = true; + let Some(slots) = ItemSlots::from_members(members) else { + m.record_budget_exhaustion(BudgetKind::SchemaScenarioAssignments); + let always_present = members.iter().filter(|member| member.presence == MemberPresence::Always).count() as u64; + for bound in bounds { + if matches!(bound, ItemCountBound::Maximum(maximum) if always_present > maximum) + && assignment_is_proven_satisfiable(m, outer_conditions) + { + out.push(build_diagnostic_conditional( + "F3032", + &bound.violation_message(always_present), + m, + rid, + prop_path, + None, + condition_map(outer_conditions), + )); } } - if skipped_unsatisfiable { - validate_item_cardinality_from_scenarios(out, m, rid, prop_path, schema); - return; - } - if count > max { - out.push(build_diagnostic_conditional( + return; + }; + for bound in bounds { + match slots.find_violation(m, bound, outer_conditions) { + WitnessSearch::Found((witness, count)) => out.push(build_diagnostic_conditional( "F3032", - &format!("expected maximum item count: {}, found: {}", max, count), + &bound.violation_message(count), m, rid, prop_path, None, condition_map(&witness), - )); + )), + WitnessSearch::NotFound => {} + WitnessSearch::BudgetExhausted => m.record_budget_exhaustion(BudgetKind::SchemaScenarioMergeAttempts), } } +} + +/// One schema bound on the number of list items that survive deployment. +#[derive(Clone, Copy)] +enum ItemCountBound { + Maximum(u64), + Minimum(u64), +} + +impl ItemCountBound { + fn of(schema: &PropSchema) -> impl Iterator { + [schema.max_items.map(Self::Maximum), schema.min_items.map(Self::Minimum)].into_iter().flatten() + } - if let Some(min) = schema.min_items { - let mut witness = outer_conditions.clone(); - let mut count = always_present; - let mut skipped_unsatisfiable = false; - for member in members.iter().filter(optional) { - let Some((condition, value)) = presence_literals(member).first() else { + fn is_violated_by(self, count: u64) -> bool { + self.is_reachable(count, 0) + } + + /// Whether deciding the `undecided` members can still produce a violating + /// count; a decision can only add an item. + fn is_reachable(self, count: u64, undecided: u64) -> bool { + match self { + Self::Maximum(maximum) => count.saturating_add(undecided) > maximum, + Self::Minimum(minimum) => count < minimum, + } + } + + /// A maximum is approached by keeping members and a minimum by removing them. + fn prefers_present_members(self) -> bool { + matches!(self, Self::Maximum(_)) + } + + fn violation_message(self, count: u64) -> String { + match self { + Self::Maximum(maximum) => format!("expected maximum item count: {maximum}, found: {count}"), + Self::Minimum(minimum) => format!("expected minimum item count: {minimum}, found: {count}"), + } + } +} + +/// Result of a bounded search for one deployment that violates a constraint. +enum WitnessSearch { + Found(W), + NotFound, + BudgetExhausted, +} + +/// The items a list holds in every deployment, plus the decisions of the +/// members whose presence depends on conditions. +struct ItemSlots { + always_present: u64, + optional_members: Vec, +} + +impl ItemSlots { + /// `None` when a member has more branches than one bounded search admits. + fn from_members(members: &[ContainerMember<'_>]) -> Option { + let mut slots = Self { always_present: 0, optional_members: Vec::new() }; + for member in members { + match &member.presence { + MemberPresence::Always => slots.always_present += 1, + MemberPresence::Never => {} + MemberPresence::When(literals) => { + slots.optional_members.push(MemberDecisions::from_presence_literals(literals)); + } + MemberPresence::Complex => slots.optional_members.push(MemberDecisions::from_branches(member.value)?), + } + } + Some(slots) + } + + /// Backtracking search for one deployment extending `seed` whose item count + /// violates `bound`. Every optional member is decided explicitly, so a + /// witness fixes each member's presence and its count holds in every world + /// that extends it. Each added assumption must be proven satisfiable, and + /// the decisions tried are capped by the schema witness merge budget. + fn find_violation( + &self, + m: &Arc, + bound: ItemCountBound, + seed: &HashMap, + ) -> WitnessSearch<(HashMap, u64)> { + if !bound.is_reachable(self.always_present, self.optional_members.len() as u64) + || !assignment_is_proven_satisfiable(m, seed) + { + return WitnessSearch::NotFound; + } + let mut frames = vec![DecisionFrame { + assignment: seed.clone(), + count: self.always_present, + decided_members: 0, + next_decision: 0, + }]; + let mut merge_attempts = 0; + while let Some(frame) = frames.last_mut() { + let undecided = (self.optional_members.len() - frame.decided_members) as u64; + if !bound.is_reachable(frame.count, undecided) { + frames.pop(); continue; + } + let Some(member) = self.optional_members.get(frame.decided_members) else { + return WitnessSearch::Found((frame.assignment.clone(), frame.count)); }; - let mut candidate = witness.clone(); - if extend_assignment(&mut candidate, &[(condition.clone(), !value)]) && is_satisfiable(m, &candidate) { - witness = candidate; - } else if member.is_dynamic { - skipped_unsatisfiable = true; - } else { - count += 1; + let Some((literals, keeps_member)) = member.decision(bound, frame.next_decision) else { + frames.pop(); + continue; + }; + frame.next_decision += 1; + if merge_attempts == MAX_GROUP_WITNESS_MERGE_ATTEMPTS { + return WitnessSearch::BudgetExhausted; + } + merge_attempts += 1; + let mut assignment = frame.assignment.clone(); + if !extend_assignment(&mut assignment, literals) + || (assignment.len() > frame.assignment.len() && !assignment_is_proven_satisfiable(m, &assignment)) + { + continue; } + let child = DecisionFrame { + assignment, + count: frame.count + u64::from(keeps_member), + decided_members: frame.decided_members + 1, + next_decision: 0, + }; + frames.push(child); } - if skipped_unsatisfiable { - validate_item_cardinality_from_scenarios(out, m, rid, prop_path, schema); - return; - } - if count < min { - out.push(build_diagnostic_conditional( - "F3032", - &format!("expected minimum item count: {}, found: {}", min, count), - m, - rid, - prop_path, - None, - condition_map(&witness), - )); + WitnessSearch::NotFound + } +} + +/// One partially decided deployment of the item count search. +struct DecisionFrame { + assignment: HashMap, + count: u64, + decided_members: usize, + next_decision: usize, +} + +/// The literal conjunctions that decide one optional member: assuming any +/// `present` conjunction keeps the member, and assuming any `absent` +/// conjunction removes it. +struct MemberDecisions { + present: Vec>, + absent: Vec>, +} + +impl MemberDecisions { + /// A member present exactly when its literals hold is kept by assuming all + /// of them and removed by negating any one of them. + fn from_presence_literals(literals: &[(String, bool)]) -> Self { + Self { + present: vec![literals.to_vec()], + absent: literals.iter().map(|(condition, holds)| vec![(condition.clone(), !holds)]).collect(), } } - if schema.unique_items == Some(true) { - let member_alternatives: Vec, serde_json::Value)>> = members - .iter() - .map(|member| { - let mut alternatives = Vec::new(); - collect_scenarios(member.value, &HashMap::new(), MAX_SCENARIO_COMBINATIONS, &mut alternatives); - alternatives - .into_iter() - .filter(|(value, _)| !is_resolved_null(value) && !contains_dynamic_resolved(value)) - .map(|(value, conditions)| (conditions, resolved_value_to_json(&value))) - .collect() - }) - .collect(); - 'pairs: for (left_index, left_alternatives) in member_alternatives.iter().enumerate() { - for right_alternatives in &member_alternatives[left_index + 1..] { - for (left_conditions, left_json) in left_alternatives { - for (right_conditions, right_json) in right_alternatives { - if left_json != right_json { - continue; - } - let Some(witness) = try_merge_assignments(outer_conditions, left_conditions) - .and_then(|merged| try_merge_assignments(&merged, right_conditions)) - else { - continue; - }; - if is_satisfiable(m, &witness) { - out.push(build_diagnostic_conditional( - "F3037", - "Array items are not unique", - m, - rid, - prop_path, - None, - condition_map(&witness), - )); - break 'pairs; - } + /// Decisions for a member whose presence has no single literal conjunction: + /// the path literals of each outer branch, split by whether the branch + /// resolves to `AWS::NoValue`. `None` when the member has more branches + /// than one bounded search admits. + fn from_branches(value: &ResolvedValue) -> Option { + let mut decisions = Self { present: Vec::new(), absent: Vec::new() }; + decisions.collect_branches(value, &mut Vec::new()).then_some(decisions) + } + + fn collect_branches(&mut self, value: &ResolvedValue, path: &mut Vec<(String, bool)>) -> bool { + match value { + ResolvedValue::Conditional { condition, if_true, if_false } => { + if let Some(holds) = path.iter().find(|(name, _)| name == condition).map(|(_, holds)| *holds) { + return self.collect_branches(if holds { if_true } else { if_false }, path); + } + for (branch, holds) in [(if_true, true), (if_false, false)] { + path.push((condition.clone(), holds)); + let within_limit = self.collect_branches(branch, path); + path.pop(); + if !within_limit { + return false; } } + true + } + ResolvedValue::Enum { variants } => variants.iter().all(|variant| self.collect_branches(variant, path)), + branch => { + let branch_count = self.present.len() + self.absent.len(); + let decisions = if is_resolved_null(branch) { &mut self.absent } else { &mut self.present }; + if decisions.contains(path) { + return true; + } + if branch_count == MAX_GROUP_PROPERTY_SCENARIOS { + return false; + } + decisions.push(path.clone()); + true } } } -} -fn presence_literals<'m>(member: &'m ContainerMember<'_>) -> &'m [(String, bool)] { - match &member.presence { - MemberPresence::When(literals) => literals.as_slice(), - _ => &[], + /// The `index`th decision in the order that approaches `bound` soonest, + /// with whether that decision keeps the member. + fn decision(&self, bound: ItemCountBound, index: usize) -> Option<(&[(String, bool)], bool)> { + let keeps_first = bound.prefers_present_members(); + let (first, second) = if keeps_first { (&self.present, &self.absent) } else { (&self.absent, &self.present) }; + match first.get(index) { + Some(literals) => Some((literals.as_slice(), keeps_first)), + None => second.get(index - first.len()).map(|literals| (literals.as_slice(), !keeps_first)), + } } } -/// Joint-scenario fallback for containers whose member presence cannot be -/// expressed as literal conjunctions. -fn validate_item_cardinality_from_scenarios( +/// Checks `uniqueItems` across the members' surviving value alternatives. Only +/// alternatives with equal values are compared, and a duplicate is reported +/// with a proven satisfiable world in which both members survive holding that +/// value. A member with more alternatives than one bounded expansion admits +/// records the curtailment instead of concluding from a partial view. +fn validate_member_uniqueness( out: &mut Vec, m: &Arc, rid: &str, prop_path: &str, - schema: &PropSchema, + members: &[ContainerMember<'_>], + outer_conditions: &HashMap, ) { - for (value, conditions) in m.resolve_scenarios_json_shared(rid, prop_path).iter() { - if is_satisfiable(m, conditions) { - validate_item_cardinality_of_value(out, m, rid, prop_path, schema, value, conditions); + let alternative_groups = equal_value_alternative_groups(members, outer_conditions); + if alternative_groups.was_incomplete { + m.record_budget_exhaustion(BudgetKind::SchemaScenarioAssignments); + } + match duplicate_member_witness(m, &alternative_groups.groups) { + WitnessSearch::Found(witness) => out.push(build_diagnostic_conditional( + "F3037", + "Array items are not unique", + m, + rid, + prop_path, + None, + condition_map(&witness), + )), + WitnessSearch::NotFound => {} + WitnessSearch::BudgetExhausted => m.record_budget_exhaustion(BudgetKind::SchemaScenarioMergeAttempts), + } +} + +/// Concrete alternatives grouped by equal value, plus whether any member could +/// not be enumerated exactly within the per-member bound. +struct EqualValueAlternativeGroups { + groups: Vec>, + was_incomplete: bool, +} + +/// One member's concrete surviving value under one condition assignment. +struct MemberAlternative { + member_index: usize, + conditions: HashMap, +} + +/// Groups every member's concrete surviving alternatives under +/// `outer_conditions` by value, in first-appearance order, keeping one entry +/// per member, value and assignment. Each group lists a member's alternatives +/// contiguously and in member order. Members beyond the exact expansion bound +/// contribute their safe partial alternatives while marking the result incomplete. +fn equal_value_alternative_groups( + members: &[ContainerMember<'_>], + outer_conditions: &HashMap, +) -> EqualValueAlternativeGroups { + let mut groups: HashMap> = HashMap::new(); + let mut value_order = Vec::new(); + let mut was_incomplete = false; + for (member_index, member) in members.iter().enumerate() { + if member.presence == MemberPresence::Never { + continue; + } + if scenario_expansion_may_use_covering(member.value) { + was_incomplete = true; + } + let mut scenarios = Vec::new(); + if collect_scenarios(member.value, outer_conditions, MAX_GROUP_PROPERTY_SCENARIOS, &mut scenarios) { + was_incomplete = true; + } + let mut seen = HashSet::new(); + for (value, conditions) in scenarios { + if is_resolved_null(&value) || contains_dynamic_resolved(&value) { + continue; + } + let value_identity = canonical_json_key(&resolved_value_to_json(&value)); + if !seen.insert((value_identity.clone(), canonical_assignment(&conditions))) { + continue; + } + let alternative = MemberAlternative { member_index, conditions }; + match groups.entry(value_identity) { + Entry::Occupied(mut group) => group.get_mut().push(alternative), + Entry::Vacant(group) => { + value_order.push(group.key().clone()); + group.insert(vec![alternative]); + } + } + } + } + EqualValueAlternativeGroups { + groups: value_order.iter().filter_map(|value_identity| groups.remove(value_identity)).collect(), + was_incomplete, + } +} + +/// Whether expanding a value may replace an exact Cartesian product with a +/// covering set. The shape deliberately overestimates when conditions are +/// shared, conflict, or are already fixed outside the value: reporting +/// incomplete analysis is safer than treating a covering set as exhaustive. +fn scenario_expansion_may_use_covering(value: &ResolvedValue) -> bool { + #[derive(Clone, Copy)] + struct ScenarioShape { + combinations: usize, + nodes_per_combination: usize, + nested_covering: bool, + } + + fn shape(value: &ResolvedValue) -> ScenarioShape { + let combination_cap = MAX_COMPLETE_SCENARIO_PRODUCT.saturating_add(1); + match value { + ResolvedValue::Conditional { if_true, if_false, .. } => { + let left = shape(if_true); + let right = shape(if_false); + ScenarioShape { + combinations: left.combinations.saturating_add(right.combinations).min(combination_cap), + nodes_per_combination: left.nodes_per_combination.max(right.nodes_per_combination), + nested_covering: left.nested_covering || right.nested_covering, + } + } + ResolvedValue::Enum { variants } => { + let mut combined = ScenarioShape { combinations: 0, nodes_per_combination: 1, nested_covering: false }; + for variant in variants { + let variant_shape = shape(variant); + combined.combinations = + combined.combinations.saturating_add(variant_shape.combinations).min(combination_cap); + combined.nodes_per_combination = + combined.nodes_per_combination.max(variant_shape.nodes_per_combination); + combined.nested_covering |= variant_shape.nested_covering; + } + combined.combinations = combined.combinations.max(1); + combined + } + ResolvedValue::List { items } => container_shape(items.iter().map(shape)), + ResolvedValue::Map { entries } => container_shape(entries.iter().map(|entry| shape(&entry.value))), + _ => ScenarioShape { combinations: 1, nodes_per_combination: 1, nested_covering: false }, + } + } + + fn container_shape(children: impl Iterator) -> ScenarioShape { + let combination_cap = MAX_COMPLETE_SCENARIO_PRODUCT.saturating_add(1); + let node_cap = MAX_SCENARIO_PRODUCT_NODES.saturating_add(1); + let mut container = ScenarioShape { combinations: 1, nodes_per_combination: 1, nested_covering: false }; + for child in children { + container.combinations = + container.combinations.saturating_mul(child.combinations.max(1)).min(combination_cap); + container.nodes_per_combination = + container.nodes_per_combination.saturating_add(child.nodes_per_combination).min(node_cap); + container.nested_covering |= child.nested_covering; + } + let materialized_nodes = container.combinations.saturating_mul(container.nodes_per_combination); + container.nested_covering |= + container.combinations > MAX_COMPLETE_SCENARIO_PRODUCT || materialized_nodes > MAX_SCENARIO_PRODUCT_NODES; + container + } + + shape(value).nested_covering +} + +/// Finds a proven satisfiable world in which two different members survive +/// with one value, charging every pairing tried to the schema witness merge +/// budget. +fn duplicate_member_witness( + m: &Arc, + groups: &[Vec], +) -> WitnessSearch> { + let mut merge_attempts = 0; + for group in groups { + for (position, left) in group.iter().enumerate() { + let later_members = + group.iter().skip(position + 1).skip_while(|right| right.member_index == left.member_index); + for right in later_members { + if merge_attempts == MAX_GROUP_WITNESS_MERGE_ATTEMPTS { + return WitnessSearch::BudgetExhausted; + } + merge_attempts += 1; + if let Some(witness) = try_merge_assignments(&left.conditions, &right.conditions) + && assignment_is_proven_satisfiable(m, &witness) + { + return WitnessSearch::Found(witness); + } + } + } + } + WitnessSearch::NotFound +} + +/// A value identity independent of object key order: two JSON values share it +/// exactly when they are equal. +fn canonical_json_key(value: &serde_json::Value) -> String { + key_ordered_json(value).to_string() +} + +fn key_ordered_json(value: &serde_json::Value) -> serde_json::Value { + match value { + serde_json::Value::Array(items) => serde_json::Value::Array(items.iter().map(key_ordered_json).collect()), + serde_json::Value::Object(entries) => { + let mut ordered: Vec<(&String, &serde_json::Value)> = entries.iter().collect(); + ordered.sort_unstable_by_key(|(name, _)| *name); + serde_json::Value::Object( + ordered.into_iter().map(|(name, entry)| (name.clone(), key_ordered_json(entry))).collect(), + ) } + // JSON Schema compares numbers mathematically, so integral floating-point + // spellings share one key with their integer spelling; this also merges + // negative and positive zero. + serde_json::Value::Number(number) if number.is_f64() => match number.as_f64() { + Some(value) if value.fract() == 0.0 && value >= 0.0 && value < u64::MAX as f64 => { + serde_json::Value::from(value as u64) + } + Some(value) if value.fract() == 0.0 && value >= i64::MIN as f64 && value < 0.0 => { + serde_json::Value::from(value as i64) + } + _ => value.clone(), + }, + scalar => scalar.clone(), } } @@ -3951,36 +4276,23 @@ fn validate_item_cardinality_of_value( // list at deploy time, so it is not a real member. let surviving: Vec<&serde_json::Value> = items.iter().filter(|item| !item.is_null()).collect(); let count = surviving.len() as u64; - if let Some(max) = schema.max_items - && count > max - { - out.push(build_diagnostic_conditional( - "F3032", - &format!("expected maximum item count: {}, found: {}", max, count), - m, - rid, - prop_path, - None, - condition_map(conditions), - )); - } - if let Some(min) = schema.min_items - && count < min - { - out.push(build_diagnostic_conditional( - "F3032", - &format!("expected minimum item count: {}, found: {}", min, count), - m, - rid, - prop_path, - None, - condition_map(conditions), - )); + for bound in ItemCountBound::of(schema) { + if bound.is_violated_by(count) { + out.push(build_diagnostic_conditional( + "F3032", + &bound.violation_message(count), + m, + rid, + prop_path, + None, + condition_map(conditions), + )); + } } if schema.unique_items == Some(true) { - let mut seen: Vec<&serde_json::Value> = Vec::new(); + let mut seen = HashSet::new(); for item in surviving { - if seen.contains(&item) { + if !seen.insert(canonical_json_key(item)) { out.push(build_diagnostic_conditional( "F3037", "Array items are not unique", @@ -3992,7 +4304,6 @@ fn validate_item_cardinality_of_value( )); break; } - seen.push(item); } } } diff --git a/src/schema-validator/tests/item_cardinality.rs b/src/schema-validator/tests/item_cardinality.rs new file mode 100644 index 00000000..9fe94b9b --- /dev/null +++ b/src/schema-validator/tests/item_cardinality.rs @@ -0,0 +1,544 @@ +//! Item count and uniqueness checks over lists whose members are gated by +//! conditions or carry values that resolve only at deploy time. + +use diagnostics::Diagnostic; +use schema_validator::SchemaValidator; +use serde_json::{Value, json}; +use std::collections::HashMap; +use std::sync::Arc; +use template_model::{BudgetKind, SemanticModel}; + +const LIST_TYPE: &str = "AWS::Test::ItemCardinality"; + +fn list_validator(values_schema: Value) -> SchemaValidator { + SchemaValidator::try_with_additional_schemas(vec![( + LIST_TYPE, + json!({"properties": {"Values": values_schema}, "required": ["Values"], "additionalProperties": false}), + )]) + .expect("test overlay must apply") +} + +fn string_list_schema(constraint: &str, value: Value) -> Value { + let mut schema = json!({"type": "array", "items": {"type": "string"}}); + schema[constraint] = value; + schema +} + +fn list_template(sections: Value, members: Value) -> String { + let mut template = sections; + template["Resources"] = json!({"Resource": {"Type": LIST_TYPE, "Properties": {"Values": members}}}); + template.to_string() +} + +fn model(template: &str) -> Arc { + Arc::new(SemanticModel::from_bytes(template.as_bytes()).expect("template must parse")) +} + +fn validate(validator: &SchemaValidator, semantic_model: &Arc) -> Vec { + validator.validate(semantic_model, Some("us-east-1")).diagnostics +} + +fn findings<'a>(diagnostics: &'a [Diagnostic], rule_id: &str) -> Vec<&'a Diagnostic> { + diagnostics.iter().filter(|diagnostic| diagnostic.rule_id == rule_id).collect() +} + +fn scenario(literals: &[(&str, bool)]) -> Option> { + Some(literals.iter().map(|(condition, holds)| (condition.to_string(), *holds)).collect()) +} + +fn toggle_parameter() -> Value { + json!({"Type": "String", "AllowedValues": ["true", "false"]}) +} + +fn toggled_on(parameter: &str) -> Value { + json!({"Fn::Equals": [{"Ref": parameter}, "true"]}) +} + +fn if_condition(condition: &str, if_true: Value, if_false: Value) -> Value { + json!({"Fn::If": [condition, if_true, if_false]}) +} + +fn no_value() -> Value { + json!({"Ref": "AWS::NoValue"}) +} + +fn imported_value() -> Value { + json!({"Fn::ImportValue": "SharedValue"}) +} + +fn toggles(names: &[&str]) -> Value { + let parameters: serde_json::Map = + names.iter().map(|name| (format!("{name}Value"), toggle_parameter())).collect(); + let conditions: serde_json::Map = + names.iter().map(|name| (name.to_string(), toggled_on(&format!("{name}Value")))).collect(); + json!({"Parameters": parameters, "Conditions": conditions}) +} + +/// Members present only when their own condition holds, where every condition +/// selects a different value of one parameter that may also select none. +fn mutually_exclusive_members_template(member_count: usize) -> String { + let mut allowed_values = vec!["none".to_string()]; + let mut conditions = serde_json::Map::new(); + let mut members = Vec::new(); + for index in 0..member_count { + let choice = format!("choice-{index:02}"); + let condition = format!("Chooses{index:02}"); + conditions.insert(condition.clone(), json!({"Fn::Equals": [{"Ref": "Choice"}, choice]})); + allowed_values.push(choice); + members.push(if_condition(&condition, json!(format!("value-{index:02}")), no_value())); + } + list_template( + json!({ + "Parameters": {"Choice": {"Type": "String", "AllowedValues": allowed_values}}, + "Conditions": conditions + }), + Value::Array(members), + ) +} + +/// Tag-like members whose key and value each select one of +/// `allowed_value_count` parameter values, giving every member +/// `allowed_value_count^2` alternatives with keys that never collide. +fn nested_enum_members_template(member_count: usize, allowed_value_count: usize) -> String { + let allowed_values: Vec = (0..allowed_value_count).map(|index| format!("v{index:02}")).collect(); + let members: Vec = (0..member_count) + .map(|index| { + json!({ + "Key": {"Fn::Join": ["", [format!("k{index:02}-"), {"Ref": "KeySuffix"}]]}, + "Value": {"Ref": "TagValue"} + }) + }) + .collect(); + list_template( + json!({"Parameters": { + "KeySuffix": {"Type": "String", "AllowedValues": allowed_values}, + "TagValue": {"Type": "String", "AllowedValues": allowed_values} + }}), + Value::Array(members), + ) +} + +fn unique_tag_list_validator() -> SchemaValidator { + list_validator(json!({ + "type": "array", + "items": {"type": "object", "properties": {"Key": {"type": "string"}, "Value": {"type": "string"}}}, + "uniqueItems": true + })) +} + +#[test] +fn max_items_counts_members_whose_conditions_exclude_each_other() { + const MEMBER_COUNT: usize = 13; + let mut parameters = serde_json::Map::new(); + let mut conditions = serde_json::Map::new(); + let mut members = Vec::new(); + for index in 0..MEMBER_COUNT { + let condition = format!("Skip{index:02}"); + if index == 1 { + conditions.insert(condition.clone(), json!({"Fn::Not": [{"Condition": "Skip00"}]})); + } else { + let parameter = format!("Skip{index:02}Value"); + conditions.insert(condition.clone(), toggled_on(¶meter)); + parameters.insert(parameter, toggle_parameter()); + } + members.push(if_condition(&condition, no_value(), json!(format!("value-{index:02}")))); + } + let template = list_template(json!({"Parameters": parameters, "Conditions": conditions}), Value::Array(members)); + let validator = list_validator(string_list_schema("maxItems", json!(5))); + let mut expected_witness: HashMap = + (0..MEMBER_COUNT).map(|index| (format!("Skip{index:02}"), false)).collect(); + expected_witness.insert("Skip01".to_string(), true); + + let diagnostics = validate(&validator, &model(&template)); + + let violations = findings(&diagnostics, "F3032"); + assert_eq!(violations.len(), 1, "twelve members survive together in one deployment: {diagnostics:#?}"); + assert_eq!(violations[0].message, "expected maximum item count: 5, found: 12"); + assert_eq!(violations[0].condition_scenario, Some(expected_witness)); +} + +#[test] +fn min_items_counts_a_surviving_member_whose_value_is_unresolved() { + let template = list_template( + toggles(&["UseImported"]), + json!([ + if_condition("UseImported", no_value(), json!("value-a")), + if_condition("UseImported", no_value(), json!("value-b")), + if_condition("UseImported", imported_value(), no_value()), + ]), + ); + let validator = list_validator(string_list_schema("minItems", json!(2))); + + let diagnostics = validate(&validator, &model(&template)); + + let violations = findings(&diagnostics, "F3032"); + assert_eq!(violations.len(), 1, "only the imported member survives when importing: {diagnostics:#?}"); + assert_eq!(violations[0].message, "expected minimum item count: 2, found: 1"); + assert_eq!(violations[0].condition_scenario, scenario(&[("UseImported", true)])); +} + +#[test] +fn max_items_counts_an_always_present_member_whose_value_is_unresolved() { + let mut members: Vec = (1..=5).map(|index| json!(format!("value-{index}"))).collect(); + members.push(if_condition("UseShared", imported_value(), json!("value-6"))); + let template = list_template(toggles(&["UseShared"]), Value::Array(members)); + let validator = list_validator(string_list_schema("maxItems", json!(5))); + + let diagnostics = validate(&validator, &model(&template)); + + let violations = findings(&diagnostics, "F3032"); + assert_eq!(violations.len(), 1, "six members survive in every deployment: {diagnostics:#?}"); + assert_eq!(violations[0].message, "expected maximum item count: 5, found: 6"); + assert_eq!(violations[0].condition_scenario, None); +} + +#[test] +fn unique_items_is_checked_beside_a_member_whose_value_is_unresolved() { + let template = list_template(json!({}), json!(["value-a", "value-a", imported_value()])); + let validator = list_validator(string_list_schema("uniqueItems", json!(true))); + + let diagnostics = validate(&validator, &model(&template)); + + let violations = findings(&diagnostics, "F3037"); + assert_eq!(violations.len(), 1, "the two literal members are equal in every deployment: {diagnostics:#?}"); + assert_eq!(violations[0].condition_scenario, None); +} + +#[test] +fn unique_items_over_nested_enum_alternatives_stays_bounded_and_reports_incomplete_analysis() { + let semantic_model = model(&nested_enum_members_template(50, 64)); + + let diagnostics = validate(&unique_tag_list_validator(), &semantic_model); + + assert!( + findings(&diagnostics, "F3037").is_empty(), + "a curtailed expansion must not conclude a duplicate: {diagnostics:#?}" + ); + assert!( + semantic_model.exhausted_budget_kinds().contains(&BudgetKind::SchemaScenarioAssignments), + "4096 alternatives per member exceed the bounded expansion and must be recorded: {:?}", + semantic_model.exhausted_budget_kinds() + ); + assert!(semantic_model.budget_analysis_incomplete()); +} + +#[test] +fn unique_items_over_nested_enum_alternatives_within_the_bound_is_complete() { + let semantic_model = model(&nested_enum_members_template(50, 4)); + + let diagnostics = validate(&unique_tag_list_validator(), &semantic_model); + + assert!(findings(&diagnostics, "F3037").is_empty(), "member keys never collide: {diagnostics:#?}"); + assert!( + !semantic_model.exhausted_budget_kinds().contains(&BudgetKind::SchemaScenarioAssignments), + "sixteen alternatives per member are analyzed in full: {:?}", + semantic_model.exhausted_budget_kinds() + ); +} + +#[test] +fn max_items_search_reports_incomplete_analysis_when_its_budget_is_spent() { + let semantic_model = model(&mutually_exclusive_members_template(80)); + let validator = list_validator(string_list_schema("maxItems", json!(1))); + + let diagnostics = validate(&validator, &semantic_model); + + assert!( + findings(&diagnostics, "F3032").is_empty(), + "at most one member survives in any deployment: {diagnostics:#?}" + ); + assert!( + semantic_model.exhausted_budget_kinds().contains(&BudgetKind::SchemaScenarioMergeAttempts), + "proving no deployment keeps two members exceeds the merge-attempt budget and must be recorded: {:?}", + semantic_model.exhausted_budget_kinds() + ); +} + +#[test] +fn min_items_search_over_mutually_exclusive_members_finds_the_empty_deployment() { + const MEMBER_COUNT: usize = 80; + let semantic_model = model(&mutually_exclusive_members_template(MEMBER_COUNT)); + let validator = list_validator(string_list_schema("minItems", json!(1))); + let expected_witness: HashMap = + (0..MEMBER_COUNT).map(|index| (format!("Chooses{index:02}"), false)).collect(); + + let diagnostics = validate(&validator, &semantic_model); + + let violations = findings(&diagnostics, "F3032"); + assert_eq!(violations.len(), 1, "choosing none removes every member: {diagnostics:#?}"); + assert_eq!(violations[0].message, "expected minimum item count: 1, found: 0"); + assert_eq!(violations[0].condition_scenario, Some(expected_witness)); + assert!( + !semantic_model.exhausted_budget_kinds().contains(&BudgetKind::SchemaScenarioAssignments), + "the witness is found without exhausting the search budget: {:?}", + semantic_model.exhausted_budget_kinds() + ); +} + +#[test] +fn min_items_decides_each_branch_of_a_member_with_nested_conditions() { + let template = list_template( + toggles(&["UseOuter", "UseInner"]), + json!([ + "fixed", + if_condition("UseOuter", if_condition("UseInner", json!("inner"), no_value()), json!("outer")) + ]), + ); + let validator = list_validator(string_list_schema("minItems", json!(2))); + + let diagnostics = validate(&validator, &model(&template)); + + let violations = findings(&diagnostics, "F3032"); + assert_eq!(violations.len(), 1, "the nested member is absent only on its inner false branch: {diagnostics:#?}"); + assert_eq!(violations[0].message, "expected minimum item count: 2, found: 1"); + assert_eq!(violations[0].condition_scenario, scenario(&[("UseOuter", true), ("UseInner", false)])); +} + +#[test] +fn unique_items_reports_equal_alternatives_in_their_joint_world() { + let template = list_template( + toggles(&["ShareFirst", "ShareSecond"]), + json!([ + if_condition("ShareFirst", json!("shared"), json!("first")), + if_condition("ShareSecond", json!("shared"), json!("second")), + ]), + ); + let validator = list_validator(string_list_schema("uniqueItems", json!(true))); + + let diagnostics = validate(&validator, &model(&template)); + + let violations = findings(&diagnostics, "F3037"); + assert_eq!(violations.len(), 1, "both members hold the shared value together: {diagnostics:#?}"); + assert_eq!(violations[0].condition_scenario, scenario(&[("ShareFirst", true), ("ShareSecond", true)])); +} + +#[test] +fn unique_items_ignores_equal_alternatives_whose_conditions_exclude_each_other() { + let template = list_template( + json!({ + "Parameters": {"ShareFirstValue": toggle_parameter()}, + "Conditions": { + "ShareFirst": toggled_on("ShareFirstValue"), + "ShareSecond": {"Fn::Not": [{"Condition": "ShareFirst"}]} + } + }), + json!([ + if_condition("ShareFirst", json!("shared"), json!("first")), + if_condition("ShareSecond", json!("shared"), json!("second")), + ]), + ); + let validator = list_validator(string_list_schema("uniqueItems", json!(true))); + + let diagnostics = validate(&validator, &model(&template)); + + assert!( + findings(&diagnostics, "F3037").is_empty(), + "the members never hold the shared value in one deployment: {diagnostics:#?}" + ); +} + +#[test] +fn unique_items_does_not_pair_alternatives_of_one_member() { + let template = list_template( + toggles(&["UseFirst", "UseSecond"]), + json!([ + if_condition("UseFirst", json!("shared"), if_condition("UseSecond", json!("shared"), json!("other"))), + "distinct", + ]), + ); + let validator = list_validator(string_list_schema("uniqueItems", json!(true))); + + let diagnostics = validate(&validator, &model(&template)); + + assert!( + findings(&diagnostics, "F3037").is_empty(), + "one member holding one value under several conditions is a single item: {diagnostics:#?}" + ); +} + +#[test] +fn unique_items_compares_object_members_regardless_of_key_order() { + let template = list_template( + toggles(&["AddExtra"]), + json!([ + {"Key": "team", "Value": "a"}, + {"Value": "a", "Key": "team"}, + if_condition("AddExtra", json!({"Key": "extra", "Value": "b"}), no_value()), + ]), + ); + let validator = list_validator(json!({"type": "array", "items": {"type": "object"}, "uniqueItems": true})); + + let diagnostics = validate(&validator, &model(&template)); + + let violations = findings(&diagnostics, "F3037"); + assert_eq!(violations.len(), 1, "objects with the same entries are equal items: {diagnostics:#?}"); + assert_eq!(violations[0].condition_scenario, None); +} + +#[test] +fn unique_items_compares_numbers_by_mathematical_value() { + let template = list_template(json!({}), json!([1, 1.0])); + let validator = list_validator(json!({"type": "array", "items": {"type": "number"}, "uniqueItems": true})); + + let diagnostics = validate(&validator, &model(&template)); + + let violations = findings(&diagnostics, "F3037"); + assert_eq!(violations.len(), 1, "integer and floating-point spellings of one are equal: {diagnostics:#?}"); + assert_eq!(violations[0].condition_scenario, None); +} + +#[test] +fn unique_items_covering_window_reports_incomplete_analysis() { + const CONDITION_COUNT: usize = 13; + let condition_names: Vec = (0..CONDITION_COUNT).map(|index| format!("Toggle{index:02}")).collect(); + let condition_refs: Vec<&str> = condition_names.iter().map(String::as_str).collect(); + let conditional_entries: serde_json::Map = condition_names + .iter() + .enumerate() + .map(|(index, condition)| (format!("Field{index:02}"), if_condition(condition, json!("true"), json!("false")))) + .collect(); + let target_entries: serde_json::Map = (0..CONDITION_COUNT) + .map(|index| { + let value = if index < 7 { "true" } else { "false" }; + (format!("Field{index:02}"), json!(value)) + }) + .collect(); + let semantic_model = model(&list_template( + toggles(&condition_refs), + json!([Value::Object(conditional_entries), Value::Object(target_entries)]), + )); + let validator = list_validator(json!({"type": "array", "items": {"type": "object"}, "uniqueItems": true})); + + let diagnostics = validate(&validator, &semantic_model); + + assert!( + findings(&diagnostics, "F3037").is_empty(), + "the covering set does not prove the mixed world: {diagnostics:#?}" + ); + assert!( + semantic_model.exhausted_budget_kinds().contains(&BudgetKind::SchemaScenarioAssignments), + "8192 exact alternatives must not be treated as complete: {:?}", + semantic_model.exhausted_budget_kinds() + ); +} + +#[test] +fn unique_items_reports_literal_duplicate_beside_curtailed_member() { + let allowed_values: Vec = (0..258).map(|index| format!("value-{index:03}")).collect(); + let template = list_template( + json!({"Parameters": {"Choice": {"Type": "String", "AllowedValues": allowed_values}}}), + json!(["duplicate", "duplicate", {"Ref": "Choice"}]), + ); + let semantic_model = model(&template); + let validator = list_validator(string_list_schema("uniqueItems", json!(true))); + + let diagnostics = validate(&validator, &semantic_model); + + assert_eq!(findings(&diagnostics, "F3037").len(), 1, "the literal duplicate remains provable: {diagnostics:#?}"); + assert!( + semantic_model.exhausted_budget_kinds().contains(&BudgetKind::SchemaScenarioAssignments), + "the parameter member's omitted alternative must remain visible: {:?}", + semantic_model.exhausted_budget_kinds() + ); +} + +#[test] +fn max_items_reports_unconditional_violation_beside_oversized_complex_member() { + fn branching_member(depth: usize, index: &mut usize, conditions: &mut Vec) -> Value { + if depth == 0 { + let leaf = if (*index).is_multiple_of(2) { json!("optional") } else { no_value() }; + *index += 1; + return leaf; + } + let condition = format!("Branch{depth:02}"); + if !conditions.contains(&condition) { + conditions.push(condition.clone()); + } + if_condition( + &condition, + branching_member(depth - 1, index, conditions), + branching_member(depth - 1, index, conditions), + ) + } + + let mut conditions = Vec::new(); + let mut leaf_index = 0; + let complex_member = branching_member(9, &mut leaf_index, &mut conditions); + let condition_refs: Vec<&str> = conditions.iter().map(String::as_str).collect(); + let mut members: Vec = (0..6).map(|index| json!(format!("fixed-{index}"))).collect(); + members.push(complex_member); + let semantic_model = model(&list_template(toggles(&condition_refs), Value::Array(members))); + let validator = list_validator(string_list_schema("maxItems", json!(5))); + + let diagnostics = validate(&validator, &semantic_model); + + let violations = findings(&diagnostics, "F3032"); + assert_eq!(violations.len(), 1, "six unconditional members already violate the maximum: {diagnostics:#?}"); + assert_eq!(violations[0].message, "expected maximum item count: 5, found: 6"); + assert!(semantic_model.exhausted_budget_kinds().contains(&BudgetKind::SchemaScenarioAssignments)); +} + +#[test] +fn unique_items_does_not_collapse_out_of_range_integral_float() { + let template = list_template(json!({}), json!([i64::MAX, 9_223_372_036_854_775_808.0_f64])); + let validator = list_validator(json!({"type": "array", "items": {"type": "number"}, "uniqueItems": true})); + + let diagnostics = validate(&validator, &model(&template)); + + assert!( + findings(&diagnostics, "F3037").is_empty(), + "2^63 is distinct from the largest signed integer: {diagnostics:#?}" + ); +} + +#[test] +fn unique_items_with_shared_conditions_is_complete() { + let fields: serde_json::Map = (0..9) + .map(|index| (format!("Field{index}"), if_condition("Shared", json!("enabled"), json!("disabled")))) + .collect(); + let semantic_model = + model(&list_template(toggles(&["Shared"]), json!([Value::Object(fields), {"distinct": true}]))); + let validator = list_validator(json!({"type": "array", "items": {"type": "object"}, "uniqueItems": true})); + + let diagnostics = validate(&validator, &semantic_model); + + assert!(findings(&diagnostics, "F3037").is_empty(), "the two members are distinct: {diagnostics:#?}"); + assert!( + !semantic_model.exhausted_budget_kinds().contains(&BudgetKind::SchemaScenarioAssignments), + "shared conditions produce only two exact alternatives: {:?}", + semantic_model.exhausted_budget_kinds() + ); +} + +#[test] +fn unique_items_node_heavy_member_reports_incomplete_analysis() { + let heavy_conditions: Vec = (0..6).map(|index| format!("Heavy{index}")).collect(); + let light_conditions: Vec = (0..6).map(|index| format!("Light{index}")).collect(); + let condition_refs: Vec<&str> = heavy_conditions.iter().chain(&light_conditions).map(String::as_str).collect(); + let unresolved = Value::Array(vec![imported_value(); 50]); + let mut member = serde_json::Map::new(); + let mut target = serde_json::Map::new(); + for (index, condition) in heavy_conditions.iter().enumerate() { + member.insert(format!("Heavy{index}"), if_condition(condition, unresolved.clone(), json!("light"))); + target.insert(format!("Heavy{index}"), json!("light")); + } + for (index, condition) in light_conditions.iter().enumerate() { + member.insert(format!("Light{index}"), if_condition(condition, json!("a"), json!("b"))); + target.insert(format!("Light{index}"), json!(if index == 0 { "a" } else { "b" })); + } + let semantic_model = + model(&list_template(toggles(&condition_refs), json!([Value::Object(member), Value::Object(target)]))); + let validator = list_validator(json!({"type": "array", "items": {"type": "object"}, "uniqueItems": true})); + + let diagnostics = validate(&validator, &semantic_model); + + assert!( + findings(&diagnostics, "F3037").is_empty(), + "the covering set must not claim an unproven duplicate: {diagnostics:#?}" + ); + assert!( + semantic_model.exhausted_budget_kinds().contains(&BudgetKind::SchemaScenarioAssignments), + "the materialized-node bound forces covering and must be visible: {:?}", + semantic_model.exhausted_budget_kinds() + ); +} diff --git a/src/template-model/src/iam_policy.rs b/src/template-model/src/iam_policy.rs index 539ce42d..2f1001ae 100644 --- a/src/template-model/src/iam_policy.rs +++ b/src/template-model/src/iam_policy.rs @@ -579,7 +579,7 @@ fn reachable_identity_policy_scenarios( } else { let expanded = model.resolve_scenarios(resource_id, document_path); if !expanded.is_empty() { - expanded.as_ref().clone() + expanded } else if use_masked_fallback { vec![(mask_scenario_branching(&document), HashMap::new())] } else { diff --git a/src/template-model/src/model.rs b/src/template-model/src/model.rs index ef624d1e..91ad96b7 100644 --- a/src/template-model/src/model.rs +++ b/src/template-model/src/model.rs @@ -1543,7 +1543,7 @@ impl SemanticModel { /// a property can take must stop when one of them cannot be known. #[must_use] pub fn has_unresolved_scenario(&self, resource_id: &str, path: &str) -> bool { - let scenarios = self.resolve_scenarios(resource_id, path); + let scenarios = self.resolve_scenarios_shared(resource_id, path); scenarios.is_empty() || scenarios.iter().any(|(value, _)| contains_dynamic_resolved(value)) } @@ -1837,6 +1837,13 @@ impl SemanticModel { self.resolve_properties_scenarios_selected(resource_id, None) } + /// Owned copy of [`Self::resolve_properties_scenarios_shared`]; read-only + /// callers should use the shared accessor to avoid cloning the cached + /// expansion. + pub fn resolve_properties_scenarios(&self, resource_id: &str) -> Vec<(ResolvedValue, HashMap)> { + self.resolve_properties_scenarios_shared(resource_id).as_ref().clone() + } + /// Like [`Self::resolve_properties_scenarios_shared`] but expands only the /// named top-level properties. Conditions that gate other properties never /// enter the expansion, so the scenario count grows with the conditions on @@ -1911,16 +1918,28 @@ impl SemanticModel { scenario_source_path_at(&properties, relative_path, conditions, KEY_PROPERTIES) } - pub fn resolve_scenarios(&self, resource_id: &str, path: &str) -> Arc)>> { - self.resolve_scenarios_with_limit(resource_id, path, MAX_SCENARIO_COMBINATIONS).0 + /// Returns one immutable allocation of the scenarios for the value at `path` + /// under the default per-value limit, shared across read-only callers. + pub fn resolve_scenarios_shared( + &self, + resource_id: &str, + path: &str, + ) -> Arc)>> { + self.resolve_scenarios_with_limit_shared(resource_id, path, MAX_SCENARIO_COMBINATIONS).0 + } + + /// Owned copy of [`Self::resolve_scenarios_shared`]; read-only callers should + /// use the shared accessor to avoid cloning the memoized expansion. + pub fn resolve_scenarios(&self, resource_id: &str, path: &str) -> Vec<(ResolvedValue, HashMap)> { + self.resolve_scenarios_shared(resource_id, path).as_ref().clone() } /// Expands the value at `path` under a per-value scenario limit, reporting /// whether the expansion was curtailed. Results are memoized per /// `(resource, path, limit)` so repeated queries, including the default-limit - /// [`Self::resolve_scenarios`], share one allocation and charge the + /// [`Self::resolve_scenarios_shared`], share one allocation and charge the /// cumulative budget once. - pub fn resolve_scenarios_with_limit( + pub fn resolve_scenarios_with_limit_shared( &self, resource_id: &str, path: &str, @@ -1937,6 +1956,19 @@ impl SemanticModel { (scenarios, was_curtailed) } + /// Owned copy of [`Self::resolve_scenarios_with_limit_shared`]; read-only + /// callers should use the shared accessor to avoid cloning the memoized + /// expansion. + pub fn resolve_scenarios_with_limit( + &self, + resource_id: &str, + path: &str, + per_value_limit: usize, + ) -> (Vec<(ResolvedValue, HashMap)>, bool) { + let (scenarios, was_curtailed) = self.resolve_scenarios_with_limit_shared(resource_id, path, per_value_limit); + (scenarios.as_ref().clone(), was_curtailed) + } + fn expand_scenarios_at_path( &self, resource_id: &str, @@ -1975,7 +2007,7 @@ impl SemanticModel { resource_id: &str, path: &str, ) -> Vec<(serde_json::Value, HashMap)> { - self.resolve_scenarios(resource_id, path) + self.resolve_scenarios_shared(resource_id, path) .iter() .filter_map(|(val, conds)| { if contains_dynamic_resolved(val) { @@ -3445,16 +3477,17 @@ Resources: assert_eq!(s1, s2); } + const CONDITIONAL_PROPERTY_TEMPLATE: &[u8] = br#"{ + "Parameters": {"Mode": {"Type": "String"}}, + "Conditions": {"ChooseFirst": {"Fn::Equals": [{"Ref": "Mode"}, "first"]}}, + "Resources": {"R": {"Type": "T", "Properties": { + "V": {"Fn::If": ["ChooseFirst", "a", "b"]} + }}} + }"#; + #[test] fn resolve_scenarios_json_shared_reuses_allocation_and_matches_owned() { - let input = br#"{ - "Parameters": {"Mode": {"Type": "String"}}, - "Conditions": {"ChooseFirst": {"Fn::Equals": [{"Ref": "Mode"}, "first"]}}, - "Resources": {"R": {"Type": "T", "Properties": { - "V": {"Fn::If": ["ChooseFirst", "a", "b"]} - }}} - }"#; - let model = SemanticModel::from_bytes(input).unwrap(); + let model = SemanticModel::from_bytes(CONDITIONAL_PROPERTY_TEMPLATE).unwrap(); let first = model.resolve_scenarios_json_shared("R", "Properties.V"); let combinations_after_first = model.scenario_combinations_used(); @@ -3468,22 +3501,21 @@ Resources: } #[test] - fn resolve_properties_scenarios_shared_reuses_allocation() { - let input = br#"{ - "Parameters": {"Mode": {"Type": "String"}}, - "Conditions": {"ChooseFirst": {"Fn::Equals": [{"Ref": "Mode"}, "first"]}}, - "Resources": {"R": {"Type": "T", "Properties": { - "V": {"Fn::If": ["ChooseFirst", "a", "b"]} - }}} - }"#; - let model = SemanticModel::from_bytes(input).unwrap(); + fn resolve_properties_scenarios_shared_reuses_allocation_and_matches_owned() { + let model = SemanticModel::from_bytes(CONDITIONAL_PROPERTY_TEMPLATE).unwrap(); let first = model.resolve_properties_scenarios_shared("R"); let combinations_after_first = model.scenario_combinations_used(); let second = model.resolve_properties_scenarios_shared("R"); + let owned = model.resolve_properties_scenarios("R"); assert!(Arc::ptr_eq(&first, &second), "repeated shared access must reuse one allocation"); assert!(first.len() > 1, "the Fn::If value must expand the whole-properties object into multiple scenarios"); + assert_eq!( + serde_json::to_value(first.as_ref()).expect("shared scenarios serialize"), + serde_json::to_value(&owned).expect("owned scenarios serialize"), + "the owned API must return the same scenarios as the shared accessor" + ); assert_eq!( model.scenario_combinations_used(), combinations_after_first, @@ -3491,6 +3523,67 @@ Resources: ); } + #[test] + fn resolve_scenarios_shared_reuses_allocation_and_matches_owned() { + let model = SemanticModel::from_bytes(CONDITIONAL_PROPERTY_TEMPLATE).unwrap(); + + let first = model.resolve_scenarios_shared("R", "Properties.V"); + let combinations_after_first = model.scenario_combinations_used(); + let second = model.resolve_scenarios_shared("R", "Properties.V"); + let owned = model.resolve_scenarios("R", "Properties.V"); + + assert!(Arc::ptr_eq(&first, &second), "repeated shared access must reuse one allocation"); + assert_eq!(first.len(), 2, "the Fn::If value must expand into one scenario per branch"); + assert_eq!( + serde_json::to_value(first.as_ref()).expect("shared scenarios serialize"), + serde_json::to_value(&owned).expect("owned scenarios serialize"), + "the owned API must return the same scenarios as the shared accessor" + ); + assert_eq!( + model.scenario_combinations_used(), + combinations_after_first, + "cached shared and owned access must not consume additional scenario budget" + ); + } + + #[test] + fn resolve_scenarios_with_limit_owned_matches_shared_including_curtailment() { + let model = SemanticModel::from_bytes(CONDITIONAL_PROPERTY_TEMPLATE).unwrap(); + + let (shared, shared_was_curtailed) = model.resolve_scenarios_with_limit_shared("R", "Properties.V", 1); + let (repeated, repeated_was_curtailed) = model.resolve_scenarios_with_limit_shared("R", "Properties.V", 1); + let (owned, owned_was_curtailed) = model.resolve_scenarios_with_limit("R", "Properties.V", 1); + + assert!(Arc::ptr_eq(&shared, &repeated), "a repeated limited query must reuse its memoized allocation"); + assert_eq!(shared.len(), 1, "a per-value limit of one must keep only the first branch scenario"); + assert!(shared_was_curtailed, "omitting the second branch scenario must be reported as curtailment"); + assert!(repeated_was_curtailed, "a memoized result must keep its curtailment status"); + assert!(owned_was_curtailed, "the owned API must report the memoized curtailment status"); + assert_eq!( + serde_json::to_value(shared.as_ref()).expect("shared scenarios serialize"), + serde_json::to_value(&owned).expect("owned scenarios serialize"), + "the owned API must return the same scenarios as the shared accessor" + ); + } + + #[test] + fn resolve_scenarios_with_limit_shared_memoizes_each_limit_separately() { + let model = SemanticModel::from_bytes(CONDITIONAL_PROPERTY_TEMPLATE).unwrap(); + + let (limited, _) = model.resolve_scenarios_with_limit_shared("R", "Properties.V", 1); + let default_limit = model.resolve_scenarios_shared("R", "Properties.V"); + let (explicit_default_limit, was_curtailed) = + model.resolve_scenarios_with_limit_shared("R", "Properties.V", MAX_SCENARIO_COMBINATIONS); + + assert_eq!(limited.len(), 1, "a per-value limit of one must keep only the first branch scenario"); + assert_eq!(default_limit.len(), 2, "a curtailed limited expansion must not be served to a default-limit query"); + assert!( + Arc::ptr_eq(&default_limit, &explicit_default_limit), + "the default-limit accessor and an explicit default-limit query must share one memoized allocation" + ); + assert!(!was_curtailed, "the complete default-limit expansion must not report curtailment"); + } + #[test] fn default_scenario_queries_are_memoized_and_global_budget_halts_uncached_expansion() { let input = br#"{ From 6d7e3e422d92b8a7d08d4e3652ba4f37682729a2 Mon Sep 17 00:00:00 2001 From: Satyaki Ghosh Date: Tue, 13 Oct 2026 11:43:45 -0400 Subject: [PATCH 5/8] add templates --- ...E3023_cname_conditional_record_counts.yaml | 45 +++++++ .../bad/E3023_cname_projection_covering.yaml | 90 ++++++++++++++ ...3023_record_value_projection_covering.yaml | 101 ++++++++++++++++ ...23_recordsetgroup_projection_covering.yaml | 75 ++++++++++++ .../bad/E3029_alias_projection_covering.yaml | 35 ++++++ .../E3048_fargate_projection_covering.yaml | 91 ++++++++++++++ ...032_whole_properties_item_cardinality.yaml | 113 ++++++++++++++++++ 7 files changed, 550 insertions(+) create mode 100644 src/resources/templates/bad/E3023_cname_conditional_record_counts.yaml create mode 100644 src/resources/templates/bad/E3023_cname_projection_covering.yaml create mode 100644 src/resources/templates/bad/E3023_record_value_projection_covering.yaml create mode 100644 src/resources/templates/bad/E3023_recordsetgroup_projection_covering.yaml create mode 100644 src/resources/templates/bad/E3029_alias_projection_covering.yaml create mode 100644 src/resources/templates/bad/E3048_fargate_projection_covering.yaml create mode 100644 src/resources/templates/bad/F3032_whole_properties_item_cardinality.yaml diff --git a/src/resources/templates/bad/E3023_cname_conditional_record_counts.yaml b/src/resources/templates/bad/E3023_cname_conditional_record_counts.yaml new file mode 100644 index 00000000..761c88d5 --- /dev/null +++ b/src/resources/templates/bad/E3023_cname_conditional_record_counts.yaml @@ -0,0 +1,45 @@ +AWSTemplateFormatVersion: '2010-09-09' +Description: Regression fixture for conditional CNAME record-count source paths +Parameters: + Mode: + Type: String + AllowedValues: [first, second] +Conditions: + ChooseFirst: !Equals [!Ref Mode, first] +Resources: + ConditionalList: + Type: AWS::Route53::RecordSet + Properties: + HostedZoneName: example.com. + Name: list.example.com. + Type: CNAME + TTL: '300' + ResourceRecords: !If + - ChooseFirst + - [one.example.net., two.example.net.] + - [three.example.net., four.example.net.] + ConditionalProperties: + Type: AWS::Route53::RecordSet + Properties: !If + - ChooseFirst + - HostedZoneName: example.com. + Name: properties.example.com. + Type: CNAME + TTL: '300' + ResourceRecords: [five.example.net., six.example.net.] + - HostedZoneName: example.com. + Name: properties.example.com. + Type: CNAME + TTL: '300' + ResourceRecords: [seven.example.net., eight.example.net.] + SingleRecordBranches: + Type: AWS::Route53::RecordSet + Properties: + HostedZoneName: example.com. + Name: single.example.com. + Type: CNAME + TTL: '300' + ResourceRecords: !If + - ChooseFirst + - [nine.example.net.] + - [ten.example.net.] diff --git a/src/resources/templates/bad/E3023_cname_projection_covering.yaml b/src/resources/templates/bad/E3023_cname_projection_covering.yaml new file mode 100644 index 00000000..421fcba9 --- /dev/null +++ b/src/resources/templates/bad/E3023_cname_projection_covering.yaml @@ -0,0 +1,90 @@ +AWSTemplateFormatVersion: '2010-09-09' +Description: Regression fixture for correlated Route53 record identity scenarios +Parameters: + TypeFirstValue: + Type: String + AllowedValues: ['true', 'false'] + TypeSecondValue: + Type: String + AllowedValues: ['true', 'false'] + TypeThirdValue: + Type: String + AllowedValues: ['true', 'false'] + UseSubdomainValue: + Type: String + AllowedValues: ['true', 'false'] + Record00Value: + Type: String + AllowedValues: ['true', 'false'] + Record01Value: + Type: String + AllowedValues: ['true', 'false'] + Record02Value: + Type: String + AllowedValues: ['true', 'false'] + Record03Value: + Type: String + AllowedValues: ['true', 'false'] + Record04Value: + Type: String + AllowedValues: ['true', 'false'] + Record05Value: + Type: String + AllowedValues: ['true', 'false'] + Record06Value: + Type: String + AllowedValues: ['true', 'false'] + Record07Value: + Type: String + AllowedValues: ['true', 'false'] + Record08Value: + Type: String + AllowedValues: ['true', 'false'] + Record09Value: + Type: String + AllowedValues: ['true', 'false'] +Conditions: + TypeFirst: !Equals [!Ref TypeFirstValue, 'true'] + TypeSecond: !Equals [!Ref TypeSecondValue, 'true'] + TypeThird: !Equals [!Ref TypeThirdValue, 'true'] + UseSubdomain: !Equals [!Ref UseSubdomainValue, 'true'] + Record00Enabled: !Equals [!Ref Record00Value, 'true'] + Record01Enabled: !Equals [!Ref Record01Value, 'true'] + Record02Enabled: !Equals [!Ref Record02Value, 'true'] + Record03Enabled: !Equals [!Ref Record03Value, 'true'] + Record04Enabled: !Equals [!Ref Record04Value, 'true'] + Record05Enabled: !Equals [!Ref Record05Value, 'true'] + Record06Enabled: !Equals [!Ref Record06Value, 'true'] + Record07Enabled: !Equals [!Ref Record07Value, 'true'] + Record08Enabled: !Equals [!Ref Record08Value, 'true'] + Record09Enabled: !Equals [!Ref Record09Value, 'true'] + IncludeRecord00: !And [!Condition Record00Enabled, !Or [!Condition TypeFirst, !Condition TypeSecond, !Not [!Condition TypeThird]]] + IncludeRecord01: !And [!Condition Record01Enabled, !Or [!Condition TypeFirst, !Condition TypeSecond, !Not [!Condition TypeThird]]] + IncludeRecord02: !And [!Condition Record02Enabled, !Or [!Condition TypeFirst, !Condition TypeSecond, !Not [!Condition TypeThird]]] + IncludeRecord03: !And [!Condition Record03Enabled, !Or [!Condition TypeFirst, !Condition TypeSecond, !Not [!Condition TypeThird]]] + IncludeRecord04: !And [!Condition Record04Enabled, !Or [!Condition TypeFirst, !Condition TypeSecond, !Not [!Condition TypeThird]]] + IncludeRecord05: !And [!Condition Record05Enabled, !Or [!Condition TypeFirst, !Condition TypeSecond, !Not [!Condition TypeThird]]] + IncludeRecord06: !And [!Condition Record06Enabled, !Or [!Condition TypeFirst, !Condition TypeSecond, !Not [!Condition TypeThird]]] + IncludeRecord07: !And [!Condition Record07Enabled, !Or [!Condition TypeFirst, !Condition TypeSecond, !Not [!Condition TypeThird]]] + IncludeRecord08: !And [!Condition Record08Enabled, !Or [!Condition TypeFirst, !Condition TypeSecond, !Not [!Condition TypeThird]]] + IncludeRecord09: !And [!Condition Record09Enabled, !Or [!Condition TypeFirst, !Condition TypeSecond, !Not [!Condition TypeThird]]] +Resources: + Record: + Type: AWS::Route53::RecordSet + Properties: + HostedZoneName: example.com. + Name: !If [UseSubdomain, www.example.com., example.com.] + Type: !If [TypeFirst, NS, !If [TypeSecond, NS, !If [TypeThird, CNAME, NS]]] + TTL: '300' + ResourceRecords: + - target.example.net. + - !If [IncludeRecord00, target00.example.net., !Ref AWS::NoValue] + - !If [IncludeRecord01, target01.example.net., !Ref AWS::NoValue] + - !If [IncludeRecord02, target02.example.net., !Ref AWS::NoValue] + - !If [IncludeRecord03, target03.example.net., !Ref AWS::NoValue] + - !If [IncludeRecord04, target04.example.net., !Ref AWS::NoValue] + - !If [IncludeRecord05, target05.example.net., !Ref AWS::NoValue] + - !If [IncludeRecord06, target06.example.net., !Ref AWS::NoValue] + - !If [IncludeRecord07, target07.example.net., !Ref AWS::NoValue] + - !If [IncludeRecord08, target08.example.net., !Ref AWS::NoValue] + - !If [IncludeRecord09, target09.example.net., !Ref AWS::NoValue] diff --git a/src/resources/templates/bad/E3023_record_value_projection_covering.yaml b/src/resources/templates/bad/E3023_record_value_projection_covering.yaml new file mode 100644 index 00000000..ed641106 --- /dev/null +++ b/src/resources/templates/bad/E3023_record_value_projection_covering.yaml @@ -0,0 +1,101 @@ +AWSTemplateFormatVersion: '2010-09-09' +Description: Regression fixture for independently evaluated Route53 record members +Parameters: + TypeFirstValue: + Type: String + AllowedValues: ['true', 'false'] + TypeSecondValue: + Type: String + AllowedValues: ['true', 'false'] + TypeThirdValue: + Type: String + AllowedValues: ['true', 'false'] + Skip00Value: + Type: String + AllowedValues: ['true', 'false'] + Skip01Value: + Type: String + AllowedValues: ['true', 'false'] + Skip02Value: + Type: String + AllowedValues: ['true', 'false'] + Skip03Value: + Type: String + AllowedValues: ['true', 'false'] + Skip04Value: + Type: String + AllowedValues: ['true', 'false'] + Skip05Value: + Type: String + AllowedValues: ['true', 'false'] + Skip06Value: + Type: String + AllowedValues: ['true', 'false'] + Skip07Value: + Type: String + AllowedValues: ['true', 'false'] + Skip08Value: + Type: String + AllowedValues: ['true', 'false'] + Skip09Value: + Type: String + AllowedValues: ['true', 'false'] + Skip10Value: + Type: String + AllowedValues: ['true', 'false'] +Conditions: + TypeFirst: !Equals [!Ref TypeFirstValue, 'true'] + TypeSecond: !Equals [!Ref TypeSecondValue, 'true'] + TypeThird: !Equals [!Ref TypeThirdValue, 'true'] + Skip00: !Equals [!Ref Skip00Value, 'true'] + Skip01: !Equals [!Ref Skip01Value, 'true'] + Skip02: !Equals [!Ref Skip02Value, 'true'] + Skip03: !Equals [!Ref Skip03Value, 'true'] + Skip04: !Equals [!Ref Skip04Value, 'true'] + Skip05: !Equals [!Ref Skip05Value, 'true'] + Skip06: !Equals [!Ref Skip06Value, 'true'] + Skip07: !Equals [!Ref Skip07Value, 'true'] + Skip08: !Equals [!Ref Skip08Value, 'true'] + Skip09: !Equals [!Ref Skip09Value, 'true'] + Skip10: !Equals [!Ref Skip10Value, 'true'] +Resources: + CnameCountRecord: + Type: AWS::Route53::RecordSet + Properties: + HostedZoneName: example.com. + Name: count.example.com. + Type: !If [TypeFirst, NS, !If [TypeSecond, NS, !If [TypeThird, CNAME, NS]]] + TTL: '300' + ResourceRecords: + - target.example.net. + - !If [Skip00, !Ref AWS::NoValue, target00.example.net.] + - !If [Skip01, !Ref AWS::NoValue, target01.example.net.] + - !If [Skip02, !Ref AWS::NoValue, target02.example.net.] + - !If [Skip03, !Ref AWS::NoValue, target03.example.net.] + - !If [Skip04, !Ref AWS::NoValue, target04.example.net.] + - !If [Skip05, !Ref AWS::NoValue, target05.example.net.] + - !If [Skip06, !Ref AWS::NoValue, target06.example.net.] + - !If [Skip07, !Ref AWS::NoValue, target07.example.net.] + - !If [Skip08, !Ref AWS::NoValue, target08.example.net.] + - !If [Skip09, !Ref AWS::NoValue, target09.example.net.] + - !If [Skip10, !Ref AWS::NoValue, target10.example.net.] + AddressRecord: + Type: AWS::Route53::RecordSet + Properties: + HostedZoneName: example.com. + Name: address.example.com. + Type: !If [TypeFirst, NS, !If [TypeSecond, NS, !If [TypeThird, A, NS]]] + TTL: '300' + ResourceRecords: + - 192.0.2.1 + - !If [Skip00, !Ref AWS::NoValue, not-an-ip] + - !If [Skip01, !Ref AWS::NoValue, 192.0.2.2] + - !If [Skip02, !Ref AWS::NoValue, 192.0.2.3] + - !If [Skip03, !Ref AWS::NoValue, 192.0.2.4] + - !If [Skip04, !Ref AWS::NoValue, 192.0.2.5] + - !If [Skip05, !Ref AWS::NoValue, 192.0.2.6] + - !If [Skip06, !Ref AWS::NoValue, 192.0.2.7] + - !If [Skip07, !Ref AWS::NoValue, 192.0.2.8] + - !If [Skip08, !Ref AWS::NoValue, 192.0.2.9] + - !If [Skip09, !Ref AWS::NoValue, 192.0.2.10] + - !If [Skip10, !Ref AWS::NoValue, 192.0.2.11] diff --git a/src/resources/templates/bad/E3023_recordsetgroup_projection_covering.yaml b/src/resources/templates/bad/E3023_recordsetgroup_projection_covering.yaml new file mode 100644 index 00000000..721a01a8 --- /dev/null +++ b/src/resources/templates/bad/E3023_recordsetgroup_projection_covering.yaml @@ -0,0 +1,75 @@ +AWSTemplateFormatVersion: '2010-09-09' +Description: Regression fixture for independently evaluated Route53 record group members +Parameters: + TypeFirstValue: {Type: String, AllowedValues: ['true', 'false']} + TypeSecondValue: {Type: String, AllowedValues: ['true', 'false']} + TypeThirdValue: {Type: String, AllowedValues: ['true', 'false']} + Skip00Value: {Type: String, AllowedValues: ['true', 'false']} + Skip01Value: {Type: String, AllowedValues: ['true', 'false']} + Skip02Value: {Type: String, AllowedValues: ['true', 'false']} + Skip03Value: {Type: String, AllowedValues: ['true', 'false']} + Skip04Value: {Type: String, AllowedValues: ['true', 'false']} + Skip05Value: {Type: String, AllowedValues: ['true', 'false']} + Skip06Value: {Type: String, AllowedValues: ['true', 'false']} + Skip07Value: {Type: String, AllowedValues: ['true', 'false']} + Skip08Value: {Type: String, AllowedValues: ['true', 'false']} + Skip09Value: {Type: String, AllowedValues: ['true', 'false']} + Skip10Value: {Type: String, AllowedValues: ['true', 'false']} +Conditions: + TypeFirst: !Equals [!Ref TypeFirstValue, 'true'] + TypeSecond: !Equals [!Ref TypeSecondValue, 'true'] + TypeThird: !Equals [!Ref TypeThirdValue, 'true'] + Skip00: !Equals [!Ref Skip00Value, 'true'] + Skip01: !Equals [!Ref Skip01Value, 'true'] + Skip02: !Equals [!Ref Skip02Value, 'true'] + Skip03: !Equals [!Ref Skip03Value, 'true'] + Skip04: !Equals [!Ref Skip04Value, 'true'] + Skip05: !Equals [!Ref Skip05Value, 'true'] + Skip06: !Equals [!Ref Skip06Value, 'true'] + Skip07: !Equals [!Ref Skip07Value, 'true'] + Skip08: !Equals [!Ref Skip08Value, 'true'] + Skip09: !Equals [!Ref Skip09Value, 'true'] + Skip10: !Equals [!Ref Skip10Value, 'true'] +Resources: + CnameGroup: + Type: AWS::Route53::RecordSetGroup + Properties: + HostedZoneName: example.com. + RecordSets: + - Name: count.example.com. + Type: !If [TypeFirst, NS, !If [TypeSecond, NS, !If [TypeThird, CNAME, NS]]] + TTL: '300' + ResourceRecords: + - target.example.net. + - !If [Skip00, !Ref AWS::NoValue, target00.example.net.] + - !If [Skip01, !Ref AWS::NoValue, target01.example.net.] + - !If [Skip02, !Ref AWS::NoValue, target02.example.net.] + - !If [Skip03, !Ref AWS::NoValue, target03.example.net.] + - !If [Skip04, !Ref AWS::NoValue, target04.example.net.] + - !If [Skip05, !Ref AWS::NoValue, target05.example.net.] + - !If [Skip06, !Ref AWS::NoValue, target06.example.net.] + - !If [Skip07, !Ref AWS::NoValue, target07.example.net.] + - !If [Skip08, !Ref AWS::NoValue, target08.example.net.] + - !If [Skip09, !Ref AWS::NoValue, target09.example.net.] + - !If [Skip10, !Ref AWS::NoValue, target10.example.net.] + AddressGroup: + Type: AWS::Route53::RecordSetGroup + Properties: + HostedZoneName: example.com. + RecordSets: + - Name: address.example.com. + Type: !If [TypeFirst, NS, !If [TypeSecond, NS, !If [TypeThird, A, NS]]] + TTL: '300' + ResourceRecords: + - 192.0.2.1 + - !If [Skip00, !Ref AWS::NoValue, not-an-ip] + - !If [Skip01, !Ref AWS::NoValue, 192.0.2.2] + - !If [Skip02, !Ref AWS::NoValue, 192.0.2.3] + - !If [Skip03, !Ref AWS::NoValue, 192.0.2.4] + - !If [Skip04, !Ref AWS::NoValue, 192.0.2.5] + - !If [Skip05, !Ref AWS::NoValue, 192.0.2.6] + - !If [Skip06, !Ref AWS::NoValue, 192.0.2.7] + - !If [Skip07, !Ref AWS::NoValue, 192.0.2.8] + - !If [Skip08, !Ref AWS::NoValue, 192.0.2.9] + - !If [Skip09, !Ref AWS::NoValue, 192.0.2.10] + - !If [Skip10, !Ref AWS::NoValue, 192.0.2.11] diff --git a/src/resources/templates/bad/E3029_alias_projection_covering.yaml b/src/resources/templates/bad/E3029_alias_projection_covering.yaml new file mode 100644 index 00000000..3da30e9b --- /dev/null +++ b/src/resources/templates/bad/E3029_alias_projection_covering.yaml @@ -0,0 +1,35 @@ +AWSTemplateFormatVersion: '2010-09-09' +Parameters: + TtlValue: + Type: String + AllowedValues: ['60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '100', '101', '102', '103', '104', '105', '106', '107', '108', '109', '110', '111', '112', '113', '114', '115', '116', '117', '118', '119', '120', '121', '122', '123', '124', '125', '126', '127', '128', '129', '130', '131', '132', '133', '134', '135', '136', '137', '138', '139', '140', '141', '142', '143', '144', '145', '146', '147', '148', '149', '150', '151', '152', '153', '154', '155', '156', '157', '158', '159', '160', '161', '162', '163', '164', '165', '166', '167', '168', '169', '170', '171', '172', '173', '174', '175', '176', '177', '178', '179', '180', '181', '182', '183', '184', '185', '186', '187', '188', '189', '190', '191', '192', '193', '194', '195', '196', '197', '198', '199', '200', '201', '202', '203', '204', '205', '206', '207', '208', '209', '210', '211', '212', '213', '214', '215', '216', '217', '218', '219', '220', '221', '222', '223', '224', '225', '226', '227', '228', '229', '230', '231', '232', '233', '234', '235', '236', '237', '238', '239', '240', '241', '242', '243', '244', '245', '246', '247', '248', '249', '250', '251', '252', '253', '254', '255', '256', '257', '258', '259', '260', '261', '262', '263', '264', '265', '266', '267', '268', '269', '270', '271', '272', '273', '274', '275', '276', '277', '278', '279', '280', '281', '282', '283', '284', '285', '286', '287', '288', '289', '290', '291', '292', '293', '294', '295', '296', '297', '298', '299', '300', '301', '302', '303', '304', '305', '306', '307', '308', '309', '310', '311', '312', '313', '314', '315', '316', '317', '318', '319', '320', '321', '322', '323', '324', '325', '326', '327', '328', '329', '330', '331', '332', '333', '334', '335', '336', '337', '338', '339', '340', '341', '342', '343', '344', '345', '346', '347', '348', '349', '350', '351', '352', '353', '354', '355', '356', '357', '358', '359', '360', '361', '362', '363', '364', '365', '366', '367', '368', '369', '370', '371', '372', '373', '374', '375', '376', '377', '378', '379', '380', '381', '382', '383', '384', '385', '386', '387', '388', '389', '390', '391', '392', '393', '394', '395', '396', '397', '398', '399', '400', '401', '402', '403', '404', '405', '406', '407', '408', '409', '410', '411', '412', '413', '414', '415', '416', '417', '418', '419', '420', '421', '422', '423', '424', '425', '426', '427', '428', '429', '430', '431', '432', '433', '434', '435', '436', '437', '438', '439', '440', '441', '442', '443', '444', '445', '446', '447', '448', '449', '450', '451', '452', '453', '454', '455', '456', '457', '458', '459', '460', '461', '462', '463', '464', '465', '466', '467', '468', '469', '470', '471', '472', '473', '474', '475', '476', '477', '478', '479', '480', '481', '482', '483', '484', '485', '486', '487', '488', '489', '490', '491', '492', '493', '494', '495', '496', '497', '498', '499', '500', '501', '502', '503', '504', '505', '506', '507', '508', '509', '510', '511', '512', '513', '514', '515', '516', '517', '518', '519', '520', '521', '522', '523', '524', '525', '526', '527', '528', '529', '530', '531', '532', '533', '534', '535', '536', '537', '538', '539', '540', '541', '542', '543', '544', '545', '546', '547', '548', '549', '550', '551', '552', '553', '554', '555', '556', '557', '558', '559', '560', '561', '562', '563', '564', '565', '566', '567', '568', '569', '570', '571', '572', '573', '574', '575', '576', '577', '578', '579', '580', '581', '582', '583', '584', '585', '586', '587', '588', '589', '590', '591', '592', '593', '594', '595', '596', '597', '598', '599', '600', '601', '602', '603', '604', '605', '606', '607', '608', '609', '610', '611', '612', '613', '614', '615', '616', '617', '618', '619', '620', '621', '622', '623', '624', '625', '626', '627', '628', '629', '630', '631', '632', '633', '634', '635', '636', '637', '638', '639', '640', '641', '642', '643', '644', '645', '646', '647', '648', '649', '650', '651', '652', '653', '654', '655', '656', '657', '658', '659'] + AliasOffValue: + Type: String + AllowedValues: ['true', 'false'] + TypeFirstValue: + Type: String + AllowedValues: ['true', 'false'] + TypeSecondValue: + Type: String + AllowedValues: ['true', 'false'] + TypeThirdValue: + Type: String + AllowedValues: ['true', 'false'] +Conditions: + AliasOff: !Equals [!Ref AliasOffValue, 'true'] + TypeFirst: !Equals [!Ref TypeFirstValue, 'true'] + TypeSecond: !Equals [!Ref TypeSecondValue, 'true'] + TypeThird: !Equals [!Ref TypeThirdValue, 'true'] +Resources: + Record: + Type: AWS::Route53::RecordSet + Properties: + HostedZoneName: example.com. + Name: www.example.com. + Type: !If [TypeFirst, A, !If [TypeSecond, A, !If [TypeThird, NS, A]]] + TTL: !Ref TtlValue + AliasTarget: !If + - AliasOff + - !Ref AWS::NoValue + - DNSName: d111111abcdef8.cloudfront.net. + HostedZoneId: Z2FDTNDATAQYW2 diff --git a/src/resources/templates/bad/E3048_fargate_projection_covering.yaml b/src/resources/templates/bad/E3048_fargate_projection_covering.yaml new file mode 100644 index 00000000..6f6e07ed --- /dev/null +++ b/src/resources/templates/bad/E3048_fargate_projection_covering.yaml @@ -0,0 +1,91 @@ +AWSTemplateFormatVersion: '2010-09-09' +Description: Regression fixture for independently projected Fargate properties +Parameters: + LaunchType: + Type: String + AllowedValues: [FARGATE, EC2] + NetworkFirstValue: + Type: String + AllowedValues: ['true', 'false'] + NetworkSecondValue: + Type: String + AllowedValues: ['true', 'false'] + NetworkThirdValue: + Type: String + AllowedValues: ['true', 'false'] + Placement00Value: + Type: String + AllowedValues: ['true', 'false'] + Placement01Value: + Type: String + AllowedValues: ['true', 'false'] + Placement02Value: + Type: String + AllowedValues: ['true', 'false'] + Placement03Value: + Type: String + AllowedValues: ['true', 'false'] + Placement04Value: + Type: String + AllowedValues: ['true', 'false'] + Placement05Value: + Type: String + AllowedValues: ['true', 'false'] + Placement06Value: + Type: String + AllowedValues: ['true', 'false'] + Placement07Value: + Type: String + AllowedValues: ['true', 'false'] + Placement08Value: + Type: String + AllowedValues: ['true', 'false'] + Placement09Value: + Type: String + AllowedValues: ['true', 'false'] + Placement10Value: + Type: String + AllowedValues: ['true', 'false'] +Conditions: + IsFargate: !Equals [!Ref LaunchType, FARGATE] + IsNotFargate: !Not [!Condition IsFargate] + NetworkFirst: !Equals [!Ref NetworkFirstValue, 'true'] + NetworkSecond: !Equals [!Ref NetworkSecondValue, 'true'] + NetworkThird: !Equals [!Ref NetworkThirdValue, 'true'] + Placement00: !Equals [!Ref Placement00Value, 'true'] + Placement01: !Equals [!Ref Placement01Value, 'true'] + Placement02: !Equals [!Ref Placement02Value, 'true'] + Placement03: !Equals [!Ref Placement03Value, 'true'] + Placement04: !Equals [!Ref Placement04Value, 'true'] + Placement05: !Equals [!Ref Placement05Value, 'true'] + Placement06: !Equals [!Ref Placement06Value, 'true'] + Placement07: !Equals [!Ref Placement07Value, 'true'] + Placement08: !Equals [!Ref Placement08Value, 'true'] + Placement09: !Equals [!Ref Placement09Value, 'true'] + Placement10: !Equals [!Ref Placement10Value, 'true'] +Resources: + Task: + Type: AWS::ECS::TaskDefinition + Properties: + RequiresCompatibilities: !If [IsFargate, [FARGATE], [EC2]] + Cpu: !If [IsNotFargate, '256', '512'] + Memory: '1024' + NetworkMode: !If [NetworkFirst, awsvpc, !If [NetworkSecond, awsvpc, !If [NetworkThird, !Ref AWS::NoValue, awsvpc]]] + ContainerDefinitions: + - Name: app + Image: nginx + Essential: true + PlacementConstraints: !If + - IsNotFargate + - - !If [Placement00, {Type: memberOf, Expression: 'attribute:zone00 == a'}, !Ref AWS::NoValue] + - !If [Placement01, {Type: memberOf, Expression: 'attribute:zone01 == a'}, !Ref AWS::NoValue] + - !If [Placement02, {Type: memberOf, Expression: 'attribute:zone02 == a'}, !Ref AWS::NoValue] + - !If [Placement03, {Type: memberOf, Expression: 'attribute:zone03 == a'}, !Ref AWS::NoValue] + - !If [Placement04, {Type: memberOf, Expression: 'attribute:zone04 == a'}, !Ref AWS::NoValue] + - !If [Placement05, {Type: memberOf, Expression: 'attribute:zone05 == a'}, !Ref AWS::NoValue] + - !If [Placement06, {Type: memberOf, Expression: 'attribute:zone06 == a'}, !Ref AWS::NoValue] + - !If [Placement07, {Type: memberOf, Expression: 'attribute:zone07 == a'}, !Ref AWS::NoValue] + - !If [Placement08, {Type: memberOf, Expression: 'attribute:zone08 == a'}, !Ref AWS::NoValue] + - !If [Placement09, {Type: memberOf, Expression: 'attribute:zone09 == a'}, !Ref AWS::NoValue] + - !If [Placement10, {Type: memberOf, Expression: 'attribute:zone10 == a'}, !Ref AWS::NoValue] + - !Ref AWS::NoValue diff --git a/src/resources/templates/bad/F3032_whole_properties_item_cardinality.yaml b/src/resources/templates/bad/F3032_whole_properties_item_cardinality.yaml new file mode 100644 index 00000000..6d907e51 --- /dev/null +++ b/src/resources/templates/bad/F3032_whole_properties_item_cardinality.yaml @@ -0,0 +1,113 @@ +AWSTemplateFormatVersion: '2010-09-09' +Description: Regression fixture for item cardinality inside conditional resource properties +Parameters: + OuterToggle: + Type: String + AllowedValues: ['true', 'false'] + Toggle00: + Type: String + AllowedValues: ['true', 'false'] + Toggle01: + Type: String + AllowedValues: ['true', 'false'] + Toggle02: + Type: String + AllowedValues: ['true', 'false'] + Toggle03: + Type: String + AllowedValues: ['true', 'false'] + Toggle04: + Type: String + AllowedValues: ['true', 'false'] + Toggle05: + Type: String + AllowedValues: ['true', 'false'] + Toggle06: + Type: String + AllowedValues: ['true', 'false'] + Toggle07: + Type: String + AllowedValues: ['true', 'false'] + Toggle08: + Type: String + AllowedValues: ['true', 'false'] + Toggle09: + Type: String + AllowedValues: ['true', 'false'] + Toggle10: + Type: String + AllowedValues: ['true', 'false'] + Toggle11: + Type: String + AllowedValues: ['true', 'false'] + Toggle12: + Type: String + AllowedValues: ['true', 'false'] + Toggle13: + Type: String + AllowedValues: ['true', 'false'] + Toggle14: + Type: String + AllowedValues: ['true', 'false'] + Toggle15: + Type: String + AllowedValues: ['true', 'false'] + Toggle16: + Type: String + AllowedValues: ['true', 'false'] +Conditions: + OuterEnabled: !Equals [!Ref OuterToggle, 'true'] + Enabled00: !Equals [!Ref Toggle00, 'true'] + Enabled01: !Equals [!Ref Toggle01, 'true'] + Enabled02: !Equals [!Ref Toggle02, 'true'] + Enabled03: !Equals [!Ref Toggle03, 'true'] + Enabled04: !Equals [!Ref Toggle04, 'true'] + Enabled05: !Equals [!Ref Toggle05, 'true'] + Enabled06: !Equals [!Ref Toggle06, 'true'] + Enabled07: !Equals [!Ref Toggle07, 'true'] + Enabled08: !Equals [!Ref Toggle08, 'true'] + Enabled09: !Equals [!Ref Toggle09, 'true'] + Enabled10: !Equals [!Ref Toggle10, 'true'] + Enabled11: !Equals [!Ref Toggle11, 'true'] + Enabled12: !Equals [!Ref Toggle12, 'true'] + Enabled13: !Equals [!Ref Toggle13, 'true'] + Enabled14: !Equals [!Ref Toggle14, 'true'] + Enabled15: !Equals [!Ref Toggle15, 'true'] + Enabled16: !Equals [!Ref Toggle16, 'true'] +Resources: + Function: + Type: AWS::Lambda::Function + Properties: + Fn::If: + - OuterEnabled + - Code: {S3Bucket: example-bucket, S3Key: function.zip} + Handler: example.Handler + Role: arn:aws:iam::123456789012:role/example + Runtime: python3.12 + Tags: [{Key: Name, Value: cardinality-fixture}] + VpcConfig: + SubnetIds: + - !If [Enabled00, subnet-00000000000000000, !Ref AWS::NoValue] + - !If [Enabled01, subnet-00000000000000001, !Ref AWS::NoValue] + - !If [Enabled02, subnet-00000000000000002, !Ref AWS::NoValue] + - !If [Enabled03, subnet-00000000000000003, !Ref AWS::NoValue] + - !If [Enabled04, subnet-00000000000000004, !Ref AWS::NoValue] + - !If [Enabled05, subnet-00000000000000005, !Ref AWS::NoValue] + - !If [Enabled06, subnet-00000000000000006, !Ref AWS::NoValue] + - !If [Enabled07, subnet-00000000000000007, !Ref AWS::NoValue] + - !If [Enabled08, subnet-00000000000000008, !Ref AWS::NoValue] + - !If [Enabled09, !Ref AWS::NoValue, subnet-00000000000000009] + - !If [Enabled10, !Ref AWS::NoValue, subnet-0000000000000000a] + - !If [Enabled11, !Ref AWS::NoValue, subnet-0000000000000000b] + - !If [Enabled12, !Ref AWS::NoValue, subnet-0000000000000000c] + - !If [Enabled13, !Ref AWS::NoValue, subnet-0000000000000000d] + - !If [Enabled14, !Ref AWS::NoValue, subnet-0000000000000000e] + - !If [Enabled15, !Ref AWS::NoValue, subnet-0000000000000000f] + - !If [Enabled16, !Ref AWS::NoValue, subnet-00000000000000010] + - Code: {S3Bucket: example-bucket, S3Key: function.zip} + Handler: example.Handler + Role: arn:aws:iam::123456789012:role/example + Runtime: python3.12 + Tags: [{Key: Name, Value: cardinality-fixture}] + VpcConfig: + SubnetIds: [subnet-00000000000000000] From 5df692da8952f85a0e0f224092e0a1cab6651f5d Mon Sep 17 00:00:00 2001 From: Satyaki Ghosh Date: Tue, 13 Oct 2026 11:50:08 -0400 Subject: [PATCH 6/8] more fixes --- src/cel-engine/src/rules/resources_extra.rs | 213 +++++---- .../tests/resource_rule_parity.rs | 107 +++++ .../rego/resources/route53/recordset.rego | 212 +++++---- src/rego-engine/src/builtins.rs | 54 ++- src/schema-validator/src/validate.rs | 6 +- .../tests/item_cardinality.rs | 82 ++++ src/template-model/src/lib.rs | 2 +- src/template-model/src/model.rs | 439 +++++++++++++++++- 8 files changed, 911 insertions(+), 204 deletions(-) diff --git a/src/cel-engine/src/rules/resources_extra.rs b/src/cel-engine/src/rules/resources_extra.rs index 1df75bd2..6074b09b 100644 --- a/src/cel-engine/src/rules/resources_extra.rs +++ b/src/cel-engine/src/rules/resources_extra.rs @@ -7,7 +7,6 @@ use diagnostics::ResourceRef; use std::collections::{BTreeSet, HashMap, HashSet}; use std::net::{Ipv4Addr, Ipv6Addr}; use std::sync::{Arc, LazyLock}; -use template_model::SemanticModel; use template_model::coercion::{coerce_port_to_string, coerce_to_integer, coerce_to_string, scalar_eq}; use template_model::consts::{ EDGE_KIND_GET_ATT, EDGE_KIND_REF, EDGE_KIND_SELECT, FIELD_ATTR, FIELD_KIND, FIELD_MAPPINGS, FIELD_OUTGOING_REFS, @@ -24,6 +23,7 @@ use template_model::vpc_cidr::subnets_outside_vpc; use template_model::{ CAA_RECORD_PATTERN, IAM_ROLE_ARN_RULE_PATTERN, MARKER_DYNAMIC, MARKER_PARAM_TYPE, MX_RECORD_PATTERN, SourceSpan, }; +use template_model::{ListMemberScenario, SemanticModel}; use template_model::{hardcoded_az, region_enums, schedule_expression_errors}; use validation_engine::{make_resource_diagnostic, make_resource_diagnostic_at_source}; @@ -604,46 +604,90 @@ fn scenario_source_path_or_effective( m.scenario_source_path(resource_id, effective_path, conditions).unwrap_or_else(|| effective_path.to_string()) } -fn push_route53_record_value_diagnostics( +fn route53_record_value_message(record_type: &str, record: &str) -> Option { + match record_type { + "A" if record.parse::().is_err() => { + Some(format!("'{}' is not a valid IPv4 address for record type 'A'", record)) + } + "AAAA" if record.parse::().is_err() => { + Some(format!("'{}' is not a valid IPv6 address for record type 'AAAA'", record)) + } + "TXT" if !TXT_RECORD_RE.is_match(record) => { + Some(format!("TXT record value '{}' must be enclosed in double quotes", record)) + } + "CAA" if !CAA_RECORD_RE.is_match(record) => { + Some(format!("CAA record value '{}' must match format: flag tag 'value'", record)) + } + "MX" if !MX_RECORD_RE.is_match(record) => { + Some(format!("MX record value '{}' must match format: priority domain", record)) + } + _ => None, + } +} + +fn route53_cname_multiple_record_source_paths( + model: &SemanticModel, + resource_id: &str, + base_conditions: &HashMap, + type_scenarios: &[(serde_json::Value, HashMap)], + records_path: &str, +) -> BTreeSet { + let mut source_paths = BTreeSet::new(); + for (record_type, type_conditions) in type_scenarios { + if record_type.as_str() != Some("CNAME") { + continue; + } + let Some(base_and_type) = + merge_reachable_scenario_conditions(model, resource_id, base_conditions, type_conditions) + else { + continue; + }; + source_paths.extend(model.list_member_pair_source_paths(resource_id, records_path, &base_and_type)); + } + source_paths +} + +fn push_route53_record_member_diagnostics( diagnostics: &mut Vec, - m: &SemanticModel, + model: &SemanticModel, resource_id: &str, - record_type: &str, - records: &[serde_json::Value], + base_conditions: &HashMap, + type_scenarios: &[(serde_json::Value, HashMap)], + member_scenarios: &[ListMemberScenario], records_path: &str, - source_path_for: F, -) where - F: Fn(&str) -> String, -{ - for (record_index, record) in records.iter().enumerate() { - let Some(record) = record.as_str() else { +) { + let mut reported_values = HashSet::new(); + for (record_type, type_conditions) in type_scenarios { + let Some(record_type) = record_type.as_str() else { continue; }; - let message = match record_type { - "A" if record.parse::().is_err() => { - Some(format!("'{}' is not a valid IPv4 address for record type 'A'", record)) - } - "AAAA" if record.parse::().is_err() => { - Some(format!("'{}' is not a valid IPv6 address for record type 'AAAA'", record)) - } - "TXT" if !TXT_RECORD_RE.is_match(record) => { - Some(format!("TXT record value '{}' must be enclosed in double quotes", record)) - } - "CAA" if !CAA_RECORD_RE.is_match(record) => { - Some(format!("CAA record value '{}' must match format: flag tag 'value'", record)) - } - "MX" if !MX_RECORD_RE.is_match(record) => { - Some(format!("MX record value '{}' must match format: priority domain", record)) - } - _ => None, + let Some(base_and_type) = + merge_reachable_scenario_conditions(model, resource_id, base_conditions, type_conditions) + else { + continue; }; - if let Some(message) = message { - let property_path = format!("{}.{}", records_path, record_index); - let source_path = source_path_for(&property_path); + for member in member_scenarios { + let Some(conditions) = + merge_reachable_scenario_conditions(model, resource_id, &base_and_type, &member.conditions) + else { + continue; + }; + let record_value = resolved_to_route53_scenario_json(&member.value); + let Some(record) = record_value.as_str() else { + continue; + }; + let Some(message) = route53_record_value_message(record_type, record) else { + continue; + }; + let property_path = format!("{}.{}", records_path, member.index); + let source_path = scenario_source_path_or_effective(model, resource_id, &property_path, &conditions); + if !reported_values.insert((property_path.clone(), source_path.clone(), message.clone())) { + continue; + } diagnostics.push(make_resource_diagnostic_at_source( "E3023", &message, - m, + model, resource_id, &property_path, &source_path, @@ -652,13 +696,13 @@ fn push_route53_record_value_diagnostics( } } - let effective_record_count = records.iter().filter(|record| !record.is_null()).count(); - if record_type == "CNAME" && effective_record_count > 1 { - let source_path = source_path_for(records_path); + for source_path in + route53_cname_multiple_record_source_paths(model, resource_id, base_conditions, type_scenarios, records_path) + { diagnostics.push(make_resource_diagnostic_at_source( "E3023", "CNAME records must have at most 1 ResourceRecord", - m, + model, resource_id, records_path, &source_path, @@ -3548,9 +3592,8 @@ pub fn eval_extra_resources(ctx: &EvalContext) -> Vec { // Route53 RecordSet validation for name in m.resources_of_type("AWS::Route53::RecordSet") { - let scenarios = - m.resolve_properties_scenarios_projected(name, &["HostedZoneName", "Name", "ResourceRecords", "Type"]); - for (properties, conditions) in scenarios.iter() { + let identity_scenarios = m.resolve_properties_scenarios_projected(name, &["HostedZoneName", "Name", "Type"]); + for (properties, conditions) in identity_scenarios.iter() { if !scenario_is_reachable(m, name, conditions) { continue; } @@ -3577,45 +3620,41 @@ pub fn eval_extra_resources(ctx: &EvalContext) -> Vec { None, )); } - if let Some(serde_json::Value::Array(records)) = scenario_property_json(properties, "ResourceRecords") { - push_route53_record_value_diagnostics( - &mut out, - m, - name, - &record_type, - &records, - "Properties.ResourceRecords", - |property_path| scenario_source_path_or_effective(m, name, property_path, conditions), - ); - } } + + let type_scenarios = m.resolve_scenarios_json_shared(name, "Properties.Type"); + let member_scenarios = m.resolve_list_member_scenarios_shared(name, "Properties.ResourceRecords"); + push_route53_record_member_diagnostics( + &mut out, + m, + name, + &HashMap::new(), + type_scenarios.as_slice(), + member_scenarios.as_slice(), + "Properties.ResourceRecords", + ); } // RecordSetGroup - validate records within RecordSets[] for name in m.resources_of_type("AWS::Route53::RecordSetGroup") { - for (properties, conditions) in m.resolve_properties_scenarios_projected(name, &["RecordSets"]).iter() { - if !scenario_is_reachable(m, name, conditions) { + let record_set_scenarios = m.resolve_list_member_scenarios_shared(name, "Properties.RecordSets"); + for record_set_scenario in record_set_scenarios.iter() { + if !resolved_to_route53_scenario_json(&record_set_scenario.value).is_object() { continue; } - let Some(serde_json::Value::Array(record_sets)) = scenario_property_json(properties, "RecordSets") else { - continue; - }; - for (set_index, record_set) in record_sets.iter().enumerate() { - let Some(record_type) = record_set.get("Type").and_then(|value| value.as_str()) else { - continue; - }; - if let Some(records) = record_set.get("ResourceRecords").and_then(|value| value.as_array()) { - push_route53_record_value_diagnostics( - &mut out, - m, - name, - record_type, - records, - &format!("Properties.RecordSets.{}.ResourceRecords", set_index), - |property_path| scenario_source_path_or_effective(m, name, property_path, conditions), - ); - } - } + let type_path = format!("Properties.RecordSets.{}.Type", record_set_scenario.index); + let records_path = format!("Properties.RecordSets.{}.ResourceRecords", record_set_scenario.index); + let type_scenarios = m.resolve_scenarios_json_shared(name, &type_path); + let member_scenarios = m.resolve_list_member_scenarios_shared(name, &records_path); + push_route53_record_member_diagnostics( + &mut out, + m, + name, + &record_set_scenario.conditions, + type_scenarios.as_slice(), + member_scenarios.as_slice(), + &records_path, + ); } } @@ -3669,8 +3708,8 @@ pub fn eval_extra_resources(ctx: &EvalContext) -> Vec { // Route53 RecordSet Alias validation for name in m.resources_of_type("AWS::Route53::RecordSet") { - let property_scenarios = m.resolve_properties_scenarios_projected(name, &["AliasTarget", "TTL", "Type"]); - let has_alias_ttl_conflict = property_scenarios.iter().any(|(properties, conditions)| { + let alias_ttl_scenarios = m.resolve_properties_scenarios_projected(name, &["AliasTarget", "TTL"]); + let has_alias_ttl_conflict = alias_ttl_scenarios.iter().any(|(properties, conditions)| { scenario_is_reachable(m, name, conditions) && scenario_has_effective_property(properties, "AliasTarget") && scenario_has_effective_property(properties, "TTL") @@ -3686,7 +3725,8 @@ pub fn eval_extra_resources(ctx: &EvalContext) -> Vec { )); } - let invalid_alias_types: BTreeSet = property_scenarios + let alias_type_scenarios = m.resolve_properties_scenarios_projected(name, &["AliasTarget", "Type"]); + let invalid_alias_types: BTreeSet = alias_type_scenarios .iter() .filter_map(|(properties, conditions)| { if !scenario_is_reachable(m, name, conditions) @@ -4129,15 +4169,13 @@ pub fn eval_extra_resources(ctx: &EvalContext) -> Vec { continue; } - let properties_scenarios = m.resolve_properties_scenarios_projected( - name, - &["Cpu", "Memory", "NetworkMode", "PlacementConstraints"], - ); let property_can_be_missing = |property_name: &str| { - properties_scenarios.iter().any(|(properties, conditions)| { - !scenario_has_effective_property(properties, property_name) - && scenario_overlaps_any(m, name, conditions, &fargate_scenarios) - }) + m.resolve_properties_scenarios_projected(name, &[property_name]).iter().any( + |(properties, conditions)| { + !scenario_has_effective_property(properties, property_name) + && scenario_overlaps_any(m, name, conditions, &fargate_scenarios) + }, + ) }; let network_mode_scenarios = m.resolve_scenarios_json(name, "Properties.NetworkMode"); @@ -4218,10 +4256,13 @@ pub fn eval_extra_resources(ctx: &EvalContext) -> Vec { )); } - let placement_is_unsupported = properties_scenarios.iter().any(|(properties, conditions)| { - scenario_has_effective_property(properties, "PlacementConstraints") - && scenario_overlaps_any(m, name, conditions, &fargate_scenarios) - }); + let placement_is_unsupported = m + .resolve_properties_scenarios_projected(name, &["PlacementConstraints"]) + .iter() + .any(|(properties, conditions)| { + scenario_has_effective_property(properties, "PlacementConstraints") + && scenario_overlaps_any(m, name, conditions, &fargate_scenarios) + }); if placement_is_unsupported { out.push(make_resource_diagnostic( "E3048", diff --git a/src/cfn-validate/tests/resource_rule_parity.rs b/src/cfn-validate/tests/resource_rule_parity.rs index b0c5d376..0eaf5486 100644 --- a/src/cfn-validate/tests/resource_rule_parity.rs +++ b/src/cfn-validate/tests/resource_rule_parity.rs @@ -2193,3 +2193,110 @@ Resources: assert_eq!(rego_findings, cel_findings); assert!(rego_findings.is_empty(), "the matching explicit name publishes the function: {rego_findings:?}"); } + +#[test] +fn route53_cname_identity_ignores_unrelated_record_scenarios() { + let template = include_str!("../../resources/templates/bad/E3023_cname_projection_covering.yaml"); + let (rego, cel) = engines(); + let rego_findings = selected_findings_with_spans(®o, template, &["E3023"]); + let cel_findings = selected_findings_with_spans(&cel, template, &["E3023"]); + + assert_eq!(rego_findings, cel_findings, "Route53 diagnostics must be identical, spans included"); + assert_eq!(rego_findings.len(), 1, "the reachable CNAME at the zone apex must be reported: {rego_findings:?}"); + assert!(rego_findings[0].contains("|Record|Properties.Name|")); + assert!(rego_findings[0].contains("must not match HostedZoneName")); +} + +#[test] +fn fargate_missing_network_mode_ignores_ec2_only_placement_scenarios() { + let template = include_str!("../../resources/templates/bad/E3048_fargate_projection_covering.yaml"); + let (rego, cel) = engines(); + let rego_findings = selected_findings_with_spans(®o, template, &["E3048"]); + let cel_findings = selected_findings_with_spans(&cel, template, &["E3048"]); + + assert_eq!(rego_findings, cel_findings, "Fargate diagnostics must be identical, spans included"); + assert_eq!( + rego_findings.len(), + 1, + "only the reachable Fargate deployment without NetworkMode must be reported: {rego_findings:?}" + ); + assert!(rego_findings[0].contains("|Task|Properties|")); + assert!(rego_findings[0].contains("NetworkMode to be specified as 'awsvpc'")); +} + +#[test] +fn whole_properties_item_cardinality_preserves_nested_member_conditions() { + let template = include_str!("../../resources/templates/bad/F3032_whole_properties_item_cardinality.yaml"); + let (rego, cel) = engines(); + let rego_findings = selected_findings_with_spans(®o, template, &["F3032"]); + let cel_findings = selected_findings_with_spans(&cel, template, &["F3032"]); + + assert_eq!(rego_findings, cel_findings, "schema diagnostics must be identical, spans included"); + assert_eq!(rego_findings.len(), 1, "the selected branch can contain seventeen subnets: {rego_findings:?}"); + assert!(rego_findings[0].contains("|Function|Properties.VpcConfig.SubnetIds|")); + assert!(rego_findings[0].contains("expected maximum item count: 16, found: 17")); +} + +#[test] +fn route53_alias_checks_ignore_unrelated_property_scenarios() { + let template = include_str!("../../resources/templates/bad/E3029_alias_projection_covering.yaml"); + let (rego, cel) = engines(); + let rego_findings = selected_findings_with_spans(®o, template, &["E3029"]); + let cel_findings = selected_findings_with_spans(&cel, template, &["E3029"]); + + assert_eq!(rego_findings, cel_findings, "Route53 alias diagnostics must be identical, spans included"); + assert_eq!(rego_findings.len(), 2, "both independent alias constraints must be reported: {rego_findings:?}"); + assert!(rego_findings.iter().any(|finding| finding.contains("TTL must not be set when AliasTarget is specified"))); + assert!(rego_findings.iter().any(|finding| finding.contains("record type 'NS'"))); +} + +#[test] +fn route53_record_checks_expand_members_independently() { + let template = include_str!("../../resources/templates/bad/E3023_record_value_projection_covering.yaml"); + let (rego, cel) = engines(); + let rego_findings = selected_findings_with_spans(®o, template, &["E3023"]); + let cel_findings = selected_findings_with_spans(&cel, template, &["E3023"]); + + assert_eq!(rego_findings, cel_findings, "Route53 record diagnostics must be identical, spans included"); + assert_eq!(rego_findings.len(), 2, "both reachable record defects must be reported: {rego_findings:?}"); + assert!(rego_findings.iter().any(|finding| { + finding.contains("|CnameCountRecord|Properties.ResourceRecords|") + && finding.contains("at most 1 ResourceRecord") + })); + assert!(rego_findings.iter().any(|finding| { + finding.contains("|AddressRecord|Properties.ResourceRecords.1|") && finding.contains("not a valid IPv4 address") + })); +} + +#[test] +fn route53_cname_record_count_reports_each_invalid_branch() { + let template = include_str!("../../resources/templates/bad/E3023_cname_conditional_record_counts.yaml"); + let (rego, cel) = engines(); + let rego_findings = selected_findings_with_spans(®o, template, &["E3023"]); + let cel_findings = selected_findings_with_spans(&cel, template, &["E3023"]); + + assert_eq!(rego_findings, cel_findings, "conditional CNAME count diagnostics must match, spans included"); + assert_eq!(rego_findings.len(), 4, "each invalid authored branch must be reported once: {rego_findings:?}"); + assert_eq!(rego_findings.iter().filter(|finding| finding.contains("|ConditionalList|")).count(), 2); + assert_eq!(rego_findings.iter().filter(|finding| finding.contains("|ConditionalProperties|")).count(), 2); + assert!(rego_findings.iter().all(|finding| !finding.contains("|SingleRecordBranches|"))); +} + +#[test] +fn route53_recordset_group_checks_expand_members_independently() { + let template = include_str!("../../resources/templates/bad/E3023_recordsetgroup_projection_covering.yaml"); + let (rego, cel) = engines(); + let rego_findings = selected_findings_with_spans(®o, template, &["E3023"]); + let cel_findings = selected_findings_with_spans(&cel, template, &["E3023"]); + + assert_eq!(rego_findings, cel_findings, "Route53 group diagnostics must be identical, spans included"); + assert_eq!(rego_findings.len(), 2, "both reachable group record defects must be reported: {rego_findings:?}"); + assert!(rego_findings.iter().any(|finding| { + finding.contains("|CnameGroup|Properties.RecordSets.0.ResourceRecords|") + && finding.contains("at most 1 ResourceRecord") + })); + assert!(rego_findings.iter().any(|finding| { + finding.contains("|AddressGroup|Properties.RecordSets.0.ResourceRecords.1|") + && finding.contains("not a valid IPv4 address") + })); +} diff --git a/src/rego-engine/handwritten/rego/resources/route53/recordset.rego b/src/rego-engine/handwritten/rego/resources/route53/recordset.rego index 017a87d5..991e6159 100644 --- a/src/rego-engine/handwritten/rego/resources/route53/recordset.rego +++ b/src/rego-engine/handwritten/rego/resources/route53/recordset.rego @@ -15,12 +15,68 @@ _route53_scenario_reachable(name, conditions) if { is_satisfiable(object.union(conditions, {resource_condition: true})) } -_route53_record_set_scenarios(name) := {scenario | - some scenario in properties_scenarios(name, ["HostedZoneName", "Name", "ResourceRecords", "Type"]) +_route53_record_identity_scenarios(name) := {scenario | + some scenario in properties_scenarios(name, ["HostedZoneName", "Name", "Type"]) _route53_scenario_reachable(name, scenario.conditions) } -_route53_effective_record_count(records) := count([record | some record in records; record != null]) +_route53_typed_record_scenarios(name) := {scenario | + some type_scenario in resolve_scenarios(name, "Properties.Type") + some record_scenario in list_member_scenarios(name, "Properties.ResourceRecords") + _scenario_conditions_compatible(name, type_scenario.conditions, record_scenario.conditions) + conditions := object.union(type_scenario.conditions, record_scenario.conditions) + scenario := { + "record_type": type_scenario.value, + "record": record_scenario.value, + "record_index": record_scenario.index, + "conditions": conditions, + } +} + +_route53_cname_multiple_record_source_paths(name) := {source_path | + some type_scenario in resolve_scenarios(name, "Properties.Type") + type_scenario.value == "CNAME" + some source_path in list_member_pair_source_paths( + name, "Properties.ResourceRecords", type_scenario.conditions) +} + +_route53_group_typed_record_scenarios(name) := {scenario | + some record_set_scenario in list_member_scenarios(name, "Properties.RecordSets") + is_object(record_set_scenario.value) + set_index := record_set_scenario.index + type_path := sprintf("Properties.RecordSets.%d.Type", [set_index]) + records_path := sprintf("Properties.RecordSets.%d.ResourceRecords", [set_index]) + some type_scenario in resolve_scenarios(name, type_path) + _scenario_conditions_compatible(name, record_set_scenario.conditions, type_scenario.conditions) + record_set_and_type := object.union(record_set_scenario.conditions, type_scenario.conditions) + some record_scenario in list_member_scenarios(name, records_path) + _scenario_conditions_compatible(name, record_set_and_type, record_scenario.conditions) + conditions := object.union(record_set_and_type, record_scenario.conditions) + scenario := { + "record_set_index": set_index, + "record_type": type_scenario.value, + "record": record_scenario.value, + "record_index": record_scenario.index, + "conditions": conditions, + } +} + +_route53_group_cname_multiple_record_scenarios(name) := {scenario | + some record_set_scenario in list_member_scenarios(name, "Properties.RecordSets") + is_object(record_set_scenario.value) + set_index := record_set_scenario.index + type_path := sprintf("Properties.RecordSets.%d.Type", [set_index]) + records_path := sprintf("Properties.RecordSets.%d.ResourceRecords", [set_index]) + some type_scenario in resolve_scenarios(name, type_path) + type_scenario.value == "CNAME" + _scenario_conditions_compatible(name, record_set_scenario.conditions, type_scenario.conditions) + record_set_and_type := object.union(record_set_scenario.conditions, type_scenario.conditions) + some source_path in list_member_pair_source_paths(name, records_path, record_set_and_type) + scenario := { + "record_set_index": set_index, + "source_path": source_path, + } +} # E3023: Route53 RecordSet - A record must have valid IPv4 violation contains make_diag_at_source("E3023", "ERROR", name, @@ -29,13 +85,10 @@ violation contains make_diag_at_source("E3023", "ERROR", name, sprintf("'%s' is not a valid IPv4 address for record type 'A'", [rec])) if { cfn_rule_active("E3023") some name in resources_of_type("AWS::Route53::RecordSet") - some scenario in _route53_record_set_scenarios(name) - properties := scenario.properties - rtype := object.get(properties, "Type", null) - rtype == "A" - records := object.get(properties, "ResourceRecords", null) - is_array(records) - some i, rec in records + some scenario in _route53_typed_record_scenarios(name) + scenario.record_type == "A" + rec := scenario.record + i := scenario.record_index property_path := sprintf("Properties.ResourceRecords.%d", [i]) source_path := scenario_source_path(name, property_path, scenario.conditions) is_string(rec) @@ -51,13 +104,10 @@ violation contains make_diag_at_source("E3023", "ERROR", name, sprintf("'%s' is not a valid IPv6 address for record type 'AAAA'", [rec])) if { cfn_rule_active("E3023") some name in resources_of_type("AWS::Route53::RecordSet") - some scenario in _route53_record_set_scenarios(name) - properties := scenario.properties - rtype := object.get(properties, "Type", null) - rtype == "AAAA" - records := object.get(properties, "ResourceRecords", null) - is_array(records) - some i, rec in records + some scenario in _route53_typed_record_scenarios(name) + scenario.record_type == "AAAA" + rec := scenario.record + i := scenario.record_index property_path := sprintf("Properties.ResourceRecords.%d", [i]) source_path := scenario_source_path(name, property_path, scenario.conditions) is_string(rec) @@ -147,7 +197,7 @@ violation contains make_diag_at_source("E3023", "ERROR", name, sprintf("CNAME record Name '%s' must not match HostedZoneName '%s' exactly", [rec_name, hz_name])) if { cfn_rule_active("E3023") some name in resources_of_type("AWS::Route53::RecordSet") - some scenario in _route53_record_set_scenarios(name) + some scenario in _route53_record_identity_scenarios(name) properties := scenario.properties rtype := object.get(properties, "Type", null) rtype == "CNAME" @@ -166,15 +216,7 @@ violation contains make_diag_at_source("E3023", "ERROR", name, "CNAME records must have at most 1 ResourceRecord") if { cfn_rule_active("E3023") some name in resources_of_type("AWS::Route53::RecordSet") - some scenario in _route53_record_set_scenarios(name) - properties := scenario.properties - rtype := object.get(properties, "Type", null) - rtype == "CNAME" - records := object.get(properties, "ResourceRecords", null) - is_array(records) - _route53_effective_record_count(records) > 1 - source_path := scenario_source_path( - name, "Properties.ResourceRecords", scenario.conditions) + some source_path in _route53_cname_multiple_record_source_paths(name) } # E3023: TXT record values must be double-quoted strings @@ -184,13 +226,10 @@ violation contains make_diag_at_source("E3023", "ERROR", name, sprintf("TXT record value '%s' must be enclosed in double quotes", [rec])) if { cfn_rule_active("E3023") some name in resources_of_type("AWS::Route53::RecordSet") - some scenario in _route53_record_set_scenarios(name) - properties := scenario.properties - rtype := object.get(properties, "Type", null) - rtype == "TXT" - records := object.get(properties, "ResourceRecords", null) - is_array(records) - some i, rec in records + some scenario in _route53_typed_record_scenarios(name) + scenario.record_type == "TXT" + rec := scenario.record + i := scenario.record_index property_path := sprintf("Properties.ResourceRecords.%d", [i]) source_path := scenario_source_path(name, property_path, scenario.conditions) is_string(rec) @@ -204,13 +243,10 @@ violation contains make_diag_at_source("E3023", "ERROR", name, sprintf("CAA record value '%s' must match format: flag tag 'value'", [rec])) if { cfn_rule_active("E3023") some name in resources_of_type("AWS::Route53::RecordSet") - some scenario in _route53_record_set_scenarios(name) - properties := scenario.properties - rtype := object.get(properties, "Type", null) - rtype == "CAA" - records := object.get(properties, "ResourceRecords", null) - is_array(records) - some i, rec in records + some scenario in _route53_typed_record_scenarios(name) + scenario.record_type == "CAA" + rec := scenario.record + i := scenario.record_index property_path := sprintf("Properties.ResourceRecords.%d", [i]) source_path := scenario_source_path(name, property_path, scenario.conditions) is_string(rec) @@ -224,13 +260,10 @@ violation contains make_diag_at_source("E3023", "ERROR", name, sprintf("MX record value '%s' must match format: priority domain", [rec])) if { cfn_rule_active("E3023") some name in resources_of_type("AWS::Route53::RecordSet") - some scenario in _route53_record_set_scenarios(name) - properties := scenario.properties - rtype := object.get(properties, "Type", null) - rtype == "MX" - records := object.get(properties, "ResourceRecords", null) - is_array(records) - some i, rec in records + some scenario in _route53_typed_record_scenarios(name) + scenario.record_type == "MX" + rec := scenario.record + i := scenario.record_index property_path := sprintf("Properties.ResourceRecords.%d", [i]) source_path := scenario_source_path(name, property_path, scenario.conditions) is_string(rec) @@ -245,15 +278,11 @@ violation contains make_diag_at_source("E3023", "ERROR", name, sprintf("'%s' is not a valid IPv4 address for record type 'A'", [rec])) if { cfn_rule_active("E3023") some name in resources_of_type("AWS::Route53::RecordSetGroup") - some scenario in properties_scenarios(name, ["RecordSets"]) - _route53_scenario_reachable(name, scenario.conditions) - rsets := object.get(scenario.properties, "RecordSets", null) - is_array(rsets) - some si, rset in rsets - is_object(rset) - rset.Type == "A" - is_array(rset.ResourceRecords) - some ri, rec in rset.ResourceRecords + some scenario in _route53_group_typed_record_scenarios(name) + scenario.record_type == "A" + si := scenario.record_set_index + ri := scenario.record_index + rec := scenario.record property_path := sprintf("Properties.RecordSets.%d.ResourceRecords.%d", [si, ri]) source_path := scenario_source_path(name, property_path, scenario.conditions) is_string(rec) @@ -267,15 +296,11 @@ violation contains make_diag_at_source("E3023", "ERROR", name, sprintf("'%s' is not a valid IPv6 address for record type 'AAAA'", [rec])) if { cfn_rule_active("E3023") some name in resources_of_type("AWS::Route53::RecordSetGroup") - some scenario in properties_scenarios(name, ["RecordSets"]) - _route53_scenario_reachable(name, scenario.conditions) - rsets := object.get(scenario.properties, "RecordSets", null) - is_array(rsets) - some si, rset in rsets - is_object(rset) - rset.Type == "AAAA" - is_array(rset.ResourceRecords) - some ri, rec in rset.ResourceRecords + some scenario in _route53_group_typed_record_scenarios(name) + scenario.record_type == "AAAA" + si := scenario.record_set_index + ri := scenario.record_index + rec := scenario.record property_path := sprintf("Properties.RecordSets.%d.ResourceRecords.%d", [si, ri]) source_path := scenario_source_path(name, property_path, scenario.conditions) is_string(rec) @@ -289,15 +314,11 @@ violation contains make_diag_at_source("E3023", "ERROR", name, sprintf("TXT record value '%s' must be enclosed in double quotes", [rec])) if { cfn_rule_active("E3023") some name in resources_of_type("AWS::Route53::RecordSetGroup") - some scenario in properties_scenarios(name, ["RecordSets"]) - _route53_scenario_reachable(name, scenario.conditions) - rsets := object.get(scenario.properties, "RecordSets", null) - is_array(rsets) - some si, rset in rsets - is_object(rset) - rset.Type == "TXT" - is_array(rset.ResourceRecords) - some ri, rec in rset.ResourceRecords + some scenario in _route53_group_typed_record_scenarios(name) + scenario.record_type == "TXT" + si := scenario.record_set_index + ri := scenario.record_index + rec := scenario.record property_path := sprintf("Properties.RecordSets.%d.ResourceRecords.%d", [si, ri]) source_path := scenario_source_path(name, property_path, scenario.conditions) is_string(rec) @@ -311,15 +332,11 @@ violation contains make_diag_at_source("E3023", "ERROR", name, sprintf("CAA record value '%s' must match format: flag tag 'value'", [rec])) if { cfn_rule_active("E3023") some name in resources_of_type("AWS::Route53::RecordSetGroup") - some scenario in properties_scenarios(name, ["RecordSets"]) - _route53_scenario_reachable(name, scenario.conditions) - rsets := object.get(scenario.properties, "RecordSets", null) - is_array(rsets) - some si, rset in rsets - is_object(rset) - rset.Type == "CAA" - is_array(rset.ResourceRecords) - some ri, rec in rset.ResourceRecords + some scenario in _route53_group_typed_record_scenarios(name) + scenario.record_type == "CAA" + si := scenario.record_set_index + ri := scenario.record_index + rec := scenario.record property_path := sprintf("Properties.RecordSets.%d.ResourceRecords.%d", [si, ri]) source_path := scenario_source_path(name, property_path, scenario.conditions) is_string(rec) @@ -333,15 +350,11 @@ violation contains make_diag_at_source("E3023", "ERROR", name, sprintf("MX record value '%s' must match format: priority domain", [rec])) if { cfn_rule_active("E3023") some name in resources_of_type("AWS::Route53::RecordSetGroup") - some scenario in properties_scenarios(name, ["RecordSets"]) - _route53_scenario_reachable(name, scenario.conditions) - rsets := object.get(scenario.properties, "RecordSets", null) - is_array(rsets) - some si, rset in rsets - is_object(rset) - rset.Type == "MX" - is_array(rset.ResourceRecords) - some ri, rec in rset.ResourceRecords + some scenario in _route53_group_typed_record_scenarios(name) + scenario.record_type == "MX" + si := scenario.record_set_index + ri := scenario.record_index + rec := scenario.record property_path := sprintf("Properties.RecordSets.%d.ResourceRecords.%d", [si, ri]) source_path := scenario_source_path(name, property_path, scenario.conditions) is_string(rec) @@ -355,15 +368,8 @@ violation contains make_diag_at_source("E3023", "ERROR", name, "CNAME records must have at most 1 ResourceRecord") if { cfn_rule_active("E3023") some name in resources_of_type("AWS::Route53::RecordSetGroup") - some scenario in properties_scenarios(name, ["RecordSets"]) - _route53_scenario_reachable(name, scenario.conditions) - rsets := object.get(scenario.properties, "RecordSets", null) - is_array(rsets) - some si, rset in rsets - is_object(rset) - rset.Type == "CNAME" - is_array(rset.ResourceRecords) - _route53_effective_record_count(rset.ResourceRecords) > 1 + some scenario in _route53_group_cname_multiple_record_scenarios(name) + si := scenario.record_set_index property_path := sprintf("Properties.RecordSets.%d.ResourceRecords", [si]) - source_path := scenario_source_path(name, property_path, scenario.conditions) + source_path := scenario.source_path } diff --git a/src/rego-engine/src/builtins.rs b/src/rego-engine/src/builtins.rs index 2cefb7f2..44bb5add 100644 --- a/src/rego-engine/src/builtins.rs +++ b/src/rego-engine/src/builtins.rs @@ -24,7 +24,10 @@ use template_model::region_enums; use template_model::resolved_value::json_contains_markers; use template_model::resolver::{MapEntry, RefKind, ResolvedValue}; use template_model::{MARKER_DYNAMIC, MARKER_PARAM_TYPE, MARKER_REF}; -use template_model::{SourceSpan, UNKNOWN_SPAN, primary_identifier_conflict_message, render_value, render_value_list}; +use template_model::{ + SourceSpan, UNKNOWN_SPAN, primary_identifier_conflict_message, render_value, render_value_list, + resolved_value_to_json, +}; use validation_engine::DIAGNOSTIC_SOURCE_PATH_FIELD; pub(crate) fn serde_json_to_rego_value(v: &serde_json::Value) -> Value { @@ -81,6 +84,8 @@ pub(crate) fn register_all( register_has_unresolved_scenario(rego); register_scenario_source_path(rego); register_properties_scenarios(rego); + register_list_member_scenarios(rego); + register_list_member_pair_source_paths(rego); register_property_absence_scenarios(rego); register_dynamodb_scenario_analysis(rego); register_is_satisfiable(rego); @@ -783,6 +788,53 @@ fn register_properties_scenarios(rego: &mut regorus::Engine) { ); } +fn register_list_member_scenarios(rego: &mut regorus::Engine) { + let _ = rego.add_extension( + "list_member_scenarios".into(), + 2, + Box::new(move |params: Vec| { + let Some(model) = current_model() else { + return Ok(Value::Undefined); + }; + let resource_id = params[0].as_string()?; + let path = params[1].as_string()?; + let results: Vec = model + .resolve_list_member_scenarios_shared(resource_id.as_ref(), path.as_ref()) + .iter() + .map(|scenario| { + json_to_value(&serde_json::json!({ + "index": scenario.index, + "value": resolved_value_to_json(&scenario.value), + "conditions": &scenario.conditions, + })) + }) + .collect(); + Ok(Value::from(results)) + }), + ); +} + +fn register_list_member_pair_source_paths(rego: &mut regorus::Engine) { + let _ = rego.add_extension( + "list_member_pair_source_paths".into(), + 3, + Box::new(move |params: Vec| { + let Some(model) = current_model() else { + return Ok(Value::Undefined); + }; + let resource_id = params[0].as_string()?; + let path = params[1].as_string()?; + let base_conditions: HashMap = condition_assumptions(¶ms[2]).into_iter().collect(); + let source_paths: Vec = model + .list_member_pair_source_paths(resource_id.as_ref(), path.as_ref(), &base_conditions) + .iter() + .map(|source_path| Value::from(source_path.as_str())) + .collect(); + Ok(Value::from(source_paths)) + }), + ); +} + fn register_dynamodb_scenario_analysis(rego: &mut regorus::Engine) { let _ = rego.add_extension( "dynamodb_scenario_analysis".into(), diff --git a/src/schema-validator/src/validate.rs b/src/schema-validator/src/validate.rs index 1abb811b..266cc762 100644 --- a/src/schema-validator/src/validate.rs +++ b/src/schema-validator/src/validate.rs @@ -3162,10 +3162,8 @@ fn outer_resolved_scenarios( resource_id: &str, property_path: &str, ) -> Vec<(ResolvedValue, HashMap)> { - let Some(value) = - model.resolve_deep(resource_id, property_path).or_else(|| model.resolve(resource_id, property_path).cloned()) - else { - return model.resolve_scenarios(resource_id, property_path); + let Some(value) = model.resolve_unexpanded(resource_id, property_path) else { + return Vec::new(); }; let mut scenarios = Vec::new(); collect_outer_resolved_scenarios(&value, &HashMap::new(), &mut scenarios); diff --git a/src/schema-validator/tests/item_cardinality.rs b/src/schema-validator/tests/item_cardinality.rs index 9fe94b9b..835280e0 100644 --- a/src/schema-validator/tests/item_cardinality.rs +++ b/src/schema-validator/tests/item_cardinality.rs @@ -30,6 +30,26 @@ fn list_template(sections: Value, members: Value) -> String { template.to_string() } +fn conditional_properties_list_template( + sections: Value, + condition: &str, + if_true_members: Value, + if_false_members: Value, +) -> String { + let mut template = sections; + template["Resources"] = json!({ + "Resource": { + "Type": LIST_TYPE, + "Properties": if_condition( + condition, + json!({"Values": if_true_members}), + json!({"Values": if_false_members}), + ), + } + }); + template.to_string() +} + fn model(template: &str) -> Arc { Arc::new(SemanticModel::from_bytes(template.as_bytes()).expect("template must parse")) } @@ -157,6 +177,68 @@ fn max_items_counts_members_whose_conditions_exclude_each_other() { assert_eq!(violations[0].condition_scenario, Some(expected_witness)); } +#[test] +fn max_items_checks_members_inside_whole_properties_condition() { + const MEMBER_COUNT: usize = 13; + const PRESENT_WHEN_TRUE_COUNT: usize = 7; + let member_conditions: Vec = (0..MEMBER_COUNT).map(|index| format!("Present{index:02}")).collect(); + let condition_refs: Vec<&str> = + std::iter::once("UseConditionalProperties").chain(member_conditions.iter().map(String::as_str)).collect(); + let members: Vec = member_conditions + .iter() + .enumerate() + .map(|(index, condition)| { + let member = json!(format!("value-{index:02}")); + if index < PRESENT_WHEN_TRUE_COUNT { + if_condition(condition, member, no_value()) + } else { + if_condition(condition, no_value(), member) + } + }) + .collect(); + let template = conditional_properties_list_template( + toggles(&condition_refs), + "UseConditionalProperties", + Value::Array(members), + json!(["fallback"]), + ); + let validator = list_validator(string_list_schema("maxItems", json!(12))); + let mut expected_witness = HashMap::from([("UseConditionalProperties".to_string(), true)]); + expected_witness.extend( + member_conditions + .iter() + .enumerate() + .map(|(index, condition)| (condition.clone(), index < PRESENT_WHEN_TRUE_COUNT)), + ); + + let diagnostics = validate(&validator, &model(&template)); + + let violations = findings(&diagnostics, "F3032"); + assert_eq!(violations.len(), 1, "all thirteen members coexist only in the selected branch: {diagnostics:#?}"); + assert_eq!(violations[0].message, "expected maximum item count: 12, found: 13"); + assert_eq!(violations[0].condition_scenario, Some(expected_witness)); +} + +#[test] +fn max_items_respects_outer_condition_when_nested_member_reuses_it() { + let mut members: Vec = (0..12).map(|index| json!(format!("fixed-{index:02}"))).collect(); + members.push(if_condition("UseConditionalProperties", no_value(), json!("excluded"))); + let template = conditional_properties_list_template( + toggles(&["UseConditionalProperties"]), + "UseConditionalProperties", + Value::Array(members), + json!(["fallback"]), + ); + let validator = list_validator(string_list_schema("maxItems", json!(12))); + + let diagnostics = validate(&validator, &model(&template)); + + assert!( + findings(&diagnostics, "F3032").is_empty(), + "the thirteenth member exists only outside its enclosing branch: {diagnostics:#?}" + ); +} + #[test] fn min_items_counts_a_surviving_member_whose_value_is_unresolved() { let template = list_template( diff --git a/src/template-model/src/lib.rs b/src/template-model/src/lib.rs index e7454458..97325c26 100644 --- a/src/template-model/src/lib.rs +++ b/src/template-model/src/lib.rs @@ -52,7 +52,7 @@ pub use defect::{DefectPhase, ParseDefect}; pub use ir::*; pub use json_value::JsonValue; pub use message::{primary_identifier_conflict_message, quote, render_str_list, render_value, render_value_list}; -pub use model::{ParseConfig, ParseResult, PseudoParameterOverrides, SemanticModel}; +pub use model::{ListMemberScenario, ParseConfig, ParseResult, PseudoParameterOverrides, SemanticModel}; pub use pattern::{ CompiledPattern, anchor_allowed_pattern, compile as compile_pattern, default_matches_pattern, is_service_valid, }; diff --git a/src/template-model/src/model.rs b/src/template-model/src/model.rs index 91ad96b7..9504eb1c 100644 --- a/src/template-model/src/model.rs +++ b/src/template-model/src/model.rs @@ -33,6 +33,21 @@ pub struct PathValuePair { pub value: String, } +/// One deployment scenario for an authored member of a resolved list. +#[derive(Debug, Clone)] +pub struct ListMemberScenario { + /// Identity shared by members from the same outer list alternative. + pub container_scenario: usize, + /// Conditions selecting the outer list alternative containing this member. + pub container_conditions: HashMap, + /// Authored zero-based position of the member in that list alternative. + pub index: usize, + /// Member value after expanding only conditions that wrap this member. + pub value: ResolvedValue, + /// Conditions selecting both the outer list alternative and this member value. + pub conditions: HashMap, +} + /// A property that is dropped (resolves to AWS::NoValue) in one branch of an Fn::If condition. #[derive(Debug, Clone, Serialize, Default)] #[cfg_attr(feature = "wasm-bindings", derive(tsify::Tsify))] @@ -328,6 +343,7 @@ pub struct SemanticModel { Mutex)>>, bool)>>, properties_scenario_cache: Mutex>), Arc)>>>>, + list_member_scenario_cache: Mutex>>>, scenario_memo: Mutex)>>>>, lifecycle_policy_scenario_cache: Mutex)>>>, /// Cumulative count of scenarios materialized by `resolve_scenarios` across @@ -1136,6 +1152,7 @@ impl SemanticModel { resolve_memo: Mutex::new(HashMap::new()), raw_scenario_memo: Mutex::new(HashMap::new()), properties_scenario_cache: Mutex::new(HashMap::new()), + list_member_scenario_cache: Mutex::new(HashMap::new()), scenario_memo: Mutex::new(HashMap::new()), lifecycle_policy_scenario_cache: Mutex::new(HashMap::new()), scenario_combinations_used: AtomicU64::new(0), @@ -1518,6 +1535,278 @@ impl SemanticModel { result } + /// Returns the resolved value tree at `path` without expanding `Fn::If` or + /// parameter-enum alternatives. Unlike [`Self::resolve_deep`], this also + /// traverses a whole-`Properties` `Fn::If`; a path absent from one branch is + /// represented by the dynamic placeholder produced by + /// [`resolved_value_at_path`]. This lookup does not consume scenario budget. + #[must_use] + pub fn resolve_unexpanded(&self, resource_id: &str, path: &str) -> Option { + self.resolve_deep(resource_id, path) + .or_else(|| self.resolve(resource_id, path).cloned()) + .or_else(|| self.resolve_via_properties_if(resource_id, path)) + } + + /// Returns scenarios for each list member at `path`, expanding every member + /// independently under conditions that wrap the whole list. Conditions on + /// sibling members never multiply, and repeated callers share one cached + /// allocation. This structural query does not consume scenario budget. + #[must_use] + pub fn resolve_list_member_scenarios_shared(&self, resource_id: &str, path: &str) -> Arc> { + let cache_key = (resource_id.to_string(), path.to_string()); + let mut cache = self.list_member_scenario_cache.lock().unwrap_or_else(|poisoned| poisoned.into_inner()); + if let Some(scenarios) = cache.get(&cache_key) { + return Arc::clone(scenarios); + } + + let mut member_scenarios = Vec::new(); + if let Some(value) = self.resolve_unexpanded(resource_id, path) { + let mut next_container_scenario = 0; + self.collect_list_member_scenarios( + &value, + &HashMap::new(), + &mut next_container_scenario, + &mut member_scenarios, + ); + } + let shared = Arc::new(member_scenarios); + cache.insert(cache_key, Arc::clone(&shared)); + shared + } + + /// Returns each authored list source path that can contain two distinct, + /// non-null members in a deployment compatible with `base_conditions`. + /// Dynamic member values count as present. Members from different outer list + /// alternatives or different alternatives of one member never form a pair. + #[must_use] + pub fn list_member_pair_source_paths( + &self, + resource_id: &str, + path: &str, + base_conditions: &HashMap, + ) -> BTreeSet { + let member_scenarios = self.resolve_list_member_scenarios_shared(resource_id, path); + let container_scenarios: BTreeSet = + member_scenarios.iter().map(|scenario| scenario.container_scenario).collect(); + let mut source_paths = BTreeSet::new(); + for container_scenario in container_scenarios { + if self.conditions.satisfiability_budget_exhausted() { + break; + } + let Some(container) = + member_scenarios.iter().find(|scenario| scenario.container_scenario == container_scenario) + else { + continue; + }; + let Some(base_and_container) = + self.merge_reachable_conditions(resource_id, base_conditions, &container.container_conditions) + else { + continue; + }; + 'container_members: for (left_position, left) in member_scenarios.iter().enumerate() { + if left.container_scenario != container_scenario || is_resolved_null(&left.value) { + continue; + } + let Some(base_and_left) = + self.merge_reachable_conditions(resource_id, &base_and_container, &left.conditions) + else { + continue; + }; + for right in member_scenarios.iter().skip(left_position + 1) { + if self.conditions.satisfiability_budget_exhausted() { + return source_paths; + } + if right.container_scenario != container_scenario + || left.index == right.index + || is_resolved_null(&right.value) + { + continue; + } + if let Some(conditions) = + self.merge_reachable_conditions(resource_id, &base_and_left, &right.conditions) + { + source_paths.insert( + self.scenario_source_path(resource_id, path, &conditions) + .unwrap_or_else(|| path.to_string()), + ); + break 'container_members; + } + } + } + } + source_paths + } + + fn merge_reachable_conditions( + &self, + resource_id: &str, + left: &HashMap, + right: &HashMap, + ) -> Option> { + let mut merged = left.clone(); + for (condition, value) in right { + if merged.get(condition).is_some_and(|existing| existing != value) { + return None; + } + merged.insert(condition.clone(), *value); + } + if let Some(resource_condition) = + self.resources.get(resource_id).and_then(|resource| resource.condition.as_ref()) + { + if merged.get(resource_condition) == Some(&false) { + return None; + } + merged.insert(resource_condition.clone(), true); + } + let assumptions: Vec<(String, bool)> = + merged.iter().map(|(condition, value)| (condition.clone(), *value)).collect(); + (self.conditions.satisfiability(&assumptions) == Satisfiability::Satisfiable).then_some(merged) + } + + fn collect_list_member_scenarios( + &self, + value: &ResolvedValue, + assumptions: &HashMap, + next_container_scenario: &mut usize, + member_scenarios: &mut Vec, + ) { + match value { + ResolvedValue::Conditional { condition, if_true, if_false } => match assumptions.get(condition) { + Some(true) => { + self.collect_list_member_scenarios(if_true, assumptions, next_container_scenario, member_scenarios) + } + Some(false) => { + self.collect_list_member_scenarios(if_false, assumptions, next_container_scenario, member_scenarios) + } + None => { + let mut true_assumptions = assumptions.clone(); + true_assumptions.insert(condition.clone(), true); + self.collect_list_member_scenarios( + if_true, + &true_assumptions, + next_container_scenario, + member_scenarios, + ); + let mut false_assumptions = assumptions.clone(); + false_assumptions.insert(condition.clone(), false); + self.collect_list_member_scenarios( + if_false, + &false_assumptions, + next_container_scenario, + member_scenarios, + ); + } + }, + ResolvedValue::Enum { variants } => { + for variant in variants { + self.collect_list_member_scenarios(variant, assumptions, next_container_scenario, member_scenarios); + } + } + ResolvedValue::List { items } => { + let container_scenario = *next_container_scenario; + *next_container_scenario = (*next_container_scenario).saturating_add(1); + for (index, item) in items.iter().enumerate() { + Self::collect_member_scenarios( + item, + assumptions, + container_scenario, + index, + assumptions, + member_scenarios, + ); + } + } + ResolvedValue::Concrete { value } => { + if let Some(items) = value.as_array() { + let container_scenario = *next_container_scenario; + *next_container_scenario = (*next_container_scenario).saturating_add(1); + member_scenarios.extend(items.iter().enumerate().map(|(index, item)| ListMemberScenario { + container_scenario, + container_conditions: assumptions.clone(), + index, + value: ResolvedValue::Concrete { value: item.clone().into() }, + conditions: assumptions.clone(), + })); + } + } + ResolvedValue::Map { .. } + | ResolvedValue::Reference { .. } + | ResolvedValue::Dynamic { .. } + | ResolvedValue::TypedDynamic { .. } => {} + } + } + + fn collect_member_scenarios( + value: &ResolvedValue, + assumptions: &HashMap, + container_scenario: usize, + index: usize, + container_conditions: &HashMap, + member_scenarios: &mut Vec, + ) { + match value { + ResolvedValue::Conditional { condition, if_true, if_false } => match assumptions.get(condition) { + Some(true) => Self::collect_member_scenarios( + if_true, + assumptions, + container_scenario, + index, + container_conditions, + member_scenarios, + ), + Some(false) => Self::collect_member_scenarios( + if_false, + assumptions, + container_scenario, + index, + container_conditions, + member_scenarios, + ), + None => { + let mut true_assumptions = assumptions.clone(); + true_assumptions.insert(condition.clone(), true); + Self::collect_member_scenarios( + if_true, + &true_assumptions, + container_scenario, + index, + container_conditions, + member_scenarios, + ); + let mut false_assumptions = assumptions.clone(); + false_assumptions.insert(condition.clone(), false); + Self::collect_member_scenarios( + if_false, + &false_assumptions, + container_scenario, + index, + container_conditions, + member_scenarios, + ); + } + }, + ResolvedValue::Enum { variants } => { + for variant in variants { + Self::collect_member_scenarios( + variant, + assumptions, + container_scenario, + index, + container_conditions, + member_scenarios, + ); + } + } + _ => member_scenarios.push(ListMemberScenario { + container_scenario, + container_conditions: container_conditions.clone(), + index, + value: value.clone(), + conditions: assumptions.clone(), + }), + } + } + /// Whether the resource authors a value at `path`, whatever that value is. /// /// Presence is a different question from resolvability: a `Ref` to a @@ -1975,15 +2264,8 @@ impl SemanticModel { path: &str, per_value_limit: usize, ) -> (Vec<(ResolvedValue, HashMap)>, bool) { - let value = match self.resolve_deep(resource_id, path) { - Some(value) => value, - None => match self.resolve(resource_id, path) { - Some(value) => value.clone(), - None => match self.resolve_via_properties_if(resource_id, path) { - Some(value) => value, - None => return (Vec::new(), false), - }, - }, + let Some(value) = self.resolve_unexpanded(resource_id, path) else { + return (Vec::new(), false); }; self.collect_scenarios_with_budget_status(&value, per_value_limit, MAX_TOTAL_SCENARIO_COMBINATIONS) } @@ -3021,6 +3303,7 @@ fn resolve_output(arena: &Arena, node_ref: NodeRef, resolver: &mut Resolver) -> #[cfg(test)] mod tests { use super::*; + use crate::serialization::resolved_value_to_json; #[test] fn invalid_overrides_reports_nothing_when_unset_or_valid() { @@ -3391,6 +3674,144 @@ Resources: } } + #[test] + fn resolve_unexpanded_preserves_whole_properties_and_nested_conditions_without_spending_budget() { + let input = br#"{ + "Parameters": {"Mode": {"Type": "String"}}, + "Conditions": { + "ChooseProperties": {"Fn::Equals": [{"Ref": "Mode"}, "properties"]}, + "ChooseValue": {"Fn::Equals": [{"Ref": "Mode"}, "value"]} + }, + "Resources": { + "Direct": {"Type": "T", "Properties": {"Values": ["direct"]}}, + "Conditional": {"Type": "T", "Properties": { + "Fn::If": [ + "ChooseProperties", + {"Values": [{"Fn::If": ["ChooseValue", "first", "second"]}]}, + {"Values": ["fallback"]} + ] + }} + } + }"#; + let model = SemanticModel::from_bytes(input).unwrap(); + let direct = model.resolve_unexpanded("Direct", "Properties.Values").expect("direct value"); + let direct_deep = model.resolve_deep("Direct", "Properties.Values").expect("direct deep value"); + assert_eq!(resolved_value_to_json(&direct), serde_json::json!(["direct"])); + assert_eq!(resolved_value_to_json(&direct_deep), serde_json::json!(["direct"])); + + let conditional = model + .resolve_unexpanded("Conditional", "Properties.Values") + .expect("value inside whole-Properties condition"); + let ResolvedValue::Conditional { condition, if_true, if_false } = conditional else { + panic!("expected the whole-Properties condition"); + }; + assert_eq!(condition, "ChooseProperties"); + let ResolvedValue::List { items: true_items } = *if_true else { + panic!("expected true-branch list"); + }; + assert!( + matches!(true_items.as_slice(), [ResolvedValue::Conditional { condition, .. }] if condition == "ChooseValue") + ); + assert_eq!(resolved_value_to_json(if_false.as_ref()), serde_json::json!(["fallback"])); + assert_eq!(model.scenario_combinations_used(), 0, "an unexpanded lookup must not materialize scenarios"); + } + + #[test] + fn list_member_scenarios_expand_members_independently_and_reuse_cache() { + const MEMBER_COUNT: usize = 13; + let mut parameters = serde_json::Map::new(); + let mut conditions = serde_json::Map::new(); + let mut members = Vec::new(); + for index in 0..MEMBER_COUNT { + let parameter = format!("Toggle{index:02}"); + let condition = format!("Enabled{index:02}"); + parameters.insert(parameter.clone(), serde_json::json!({"Type": "String"})); + conditions.insert(condition.clone(), serde_json::json!({"Fn::Equals": [{"Ref": parameter}, "true"]})); + members.push(serde_json::json!({ + "Fn::If": [condition, format!("value-{index:02}"), {"Ref": "AWS::NoValue"}] + })); + } + let template = serde_json::json!({ + "Parameters": parameters, + "Conditions": conditions, + "Resources": {"R": {"Type": "T", "Properties": {"Values": members}}} + }) + .to_string(); + let model = SemanticModel::from_bytes(template.as_bytes()).unwrap(); + + let first = model.resolve_list_member_scenarios_shared("R", "Properties.Values"); + let combinations_after_first = model.scenario_combinations_used(); + let second = model.resolve_list_member_scenarios_shared("R", "Properties.Values"); + + assert_eq!(first.len(), MEMBER_COUNT * 2, "each member contributes only its own two branches"); + for index in 0..MEMBER_COUNT { + let member_scenarios: Vec<&ListMemberScenario> = + first.iter().filter(|scenario| scenario.index == index).collect(); + assert_eq!(member_scenarios.len(), 2, "member {index} must retain both branches"); + assert!(member_scenarios.iter().all(|scenario| scenario.container_scenario == 0)); + assert!(member_scenarios.iter().all(|scenario| scenario.container_conditions.is_empty())); + assert!(member_scenarios.iter().all(|scenario| scenario.conditions.len() == 1)); + } + assert_eq!(combinations_after_first, 0, "member extraction must not materialize joint scenarios"); + assert!(Arc::ptr_eq(&first, &second), "repeated member queries must share their cached allocation"); + assert_eq!(model.scenario_combinations_used(), combinations_after_first); + } + + #[test] + fn list_member_scenarios_keep_outer_enum_alternatives_separate() { + let model = SemanticModel::from_bytes(br#"{"Resources":{"R":{"Type":"T"}}}"#).unwrap(); + let value = ResolvedValue::Enum { + variants: vec![ + ResolvedValue::Concrete { value: serde_json::json!(["left", null]).into() }, + ResolvedValue::Concrete { value: serde_json::json!([null, "right"]).into() }, + ], + }; + let mut next_container_scenario = 0; + let mut member_scenarios = Vec::new(); + + model.collect_list_member_scenarios( + &value, + &HashMap::new(), + &mut next_container_scenario, + &mut member_scenarios, + ); + + assert_eq!(next_container_scenario, 2); + assert_eq!(member_scenarios.len(), 4); + for container_scenario in 0..2 { + let members: Vec<&ListMemberScenario> = + member_scenarios.iter().filter(|scenario| scenario.container_scenario == container_scenario).collect(); + assert_eq!(members.len(), 2); + assert_eq!(members.iter().filter(|scenario| !is_resolved_null(&scenario.value)).count(), 1); + } + } + + #[test] + fn list_member_pair_source_paths_preserve_outer_branches() { + let input = br#"{ + "Parameters": {"Mode": {"Type": "String"}}, + "Conditions": {"ChooseFirst": {"Fn::Equals": [{"Ref": "Mode"}, "first"]}}, + "Resources": { + "Invalid": {"Type": "T", "Properties": { + "Values": {"Fn::If": ["ChooseFirst", ["a", "b"], ["c", "d"]]} + }}, + "Valid": {"Type": "T", "Properties": { + "Values": {"Fn::If": ["ChooseFirst", ["a"], ["b"]]} + }} + } + }"#; + let model = SemanticModel::from_bytes(input).unwrap(); + + assert_eq!( + model.list_member_pair_source_paths("Invalid", "Properties.Values", &HashMap::new()), + BTreeSet::from(["Properties.Values.Fn::If.1".to_string(), "Properties.Values.Fn::If.2".to_string(),]) + ); + assert!( + model.list_member_pair_source_paths("Valid", "Properties.Values", &HashMap::new()).is_empty(), + "members from mutually exclusive one-item branches must not form a pair" + ); + } + #[test] fn model_findinmap_refs_tracked() { let input = br#"{"Resources":{"R":{"Type":"T","Properties":{"V":{"Fn::FindInMap":["MyMap","k1","k2"]}}}}}"#; From 6cf6a56904257238e568b899eefe39a96f685533 Mon Sep 17 00:00:00 2001 From: Satyaki Ghosh Date: Tue, 13 Oct 2026 11:52:01 -0400 Subject: [PATCH 7/8] revert snapshots --- .../expected/validation_reports1.json | 15180 ++-- .../expected/validation_reports2.json | 41723 +++++----- .../expected/validation_reports3.json | 21950 +++--- .../expected/validation_reports4.json | 65818 ++++++++-------- .../expected/validation_reports5.json | 29116 ++++--- .../expected/validation_reports6.json | 14784 ++-- .../expected/validation_reports7.json | 35736 ++++----- .../expected/validation_reports8.json | 7834 +- 8 files changed, 116616 insertions(+), 115525 deletions(-) diff --git a/src/resources/expected/validation_reports1.json b/src/resources/expected/validation_reports1.json index f51d566d..cf5374d6 100644 --- a/src/resources/expected/validation_reports1.json +++ b/src/resources/expected/validation_reports1.json @@ -331,12 +331,12 @@ "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SnapStart.ApplyOn", + "propertyPath": "Properties.SnapStart", "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", - "startLine": 40, - "startColumn": 9, - "endLine": 40, + "startLine": 39, + "startColumn": 7, + "endLine": 39, "endColumn": 16, "ruleDescription": "Validate that SnapStart is properly configured", "phase": "LINT" @@ -351,12 +351,12 @@ "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SnapStart.ApplyOn", + "propertyPath": "Properties.SnapStart", "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", - "startLine": 51, - "startColumn": 9, - "endLine": 51, + "startLine": 50, + "startColumn": 7, + "endLine": 50, "endColumn": 16, "ruleDescription": "Validate that SnapStart is properly configured", "phase": "LINT" @@ -6741,16 +6741,16 @@ } ] }, - "bad/I9001_conditional_create_only.yaml": { - "filePath": "bad/I9001_conditional_create_only.yaml", + "bad/I4010_cdk_synthesized_missing_context.json": { + "filePath": "bad/I4010_cdk_synthesized_missing_context.json", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 4, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 3, + "warnings": 1, + "informational": 6, "debug": 0 }, "suppressed": 0, @@ -6759,141 +6759,89 @@ }, "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "ruleId": "W4011", + "severity": "WARN", + "message": "Metadata.com.aws.cloudformation.Context has no 'why' and no trust declaration with conf 'low'.", "source": "ENGINE", "entity": { - "logicalId": "VpcWithConditionalCreateOnly", + "logicalId": "OrderTopic", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Metadata.com.aws.cloudformation.Context", + "suggestedFix": "Add 'why' stating the resource's purpose and notable design choices without restating its type or property values, or set trust to {src: infer, conf: low, note: \"rationale not documented\"} when the rationale is unknown.", "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 31, + "startColumn": 9, + "endLine": 31, + "endColumn": 40, + "ruleDescription": "Metadata Context block has no 'why' rationale and no low-confidence trust declaration", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "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": "VpcWithConditionalCreateOnly", + "logicalId": "OrderQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 16, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "VpcControl", + "logicalId": "OrderQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, + "startLine": 5, + "startColumn": 5, + "endLine": 5, "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - } - ] - }, - "bad/W1019_sub_unused_key.yaml": { - "filePath": "bad/W1019_sub_unused_key.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 2, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W1019", - "severity": "WARN", - "message": "Parameter 'UnusedKey' not used in Fn::Sub template string", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyBucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "suggestedFix": "Remove the unused key from the Fn::Sub variable map or reference it in the template string", - "category": "Intrinsic Function", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 17, - "ruleDescription": "Parameter in Fn::Sub variable map is not used in the template string", + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "MyBucket", + "logicalId": "OrderQueue", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 16, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'OrderQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyBucket", + "logicalId": "OrderQueue", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SQS::Queue" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -6901,84 +6849,62 @@ "startLine": 5, "startColumn": 5, "endLine": 5, - "endColumn": 15, + "endColumn": 16, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/W1028_allowedvalues_excludes_literal.yaml": { - "filePath": "bad/W1028_allowedvalues_excludes_literal.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Resource 'OrderHandler' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "OrderHandler", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 27, + "startLine": 13, "startColumn": 7, - "endLine": 27, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" - } + "endLine": 13, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'OrderTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "OrderTopic", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 26, + "startLine": 27, "startColumn": 5, - "endLine": 26, - "endColumn": 15, + "endLine": 27, + "endColumn": 16, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/W1051_secretsmanager_at_arn.yaml": { - "filePath": "bad/W1051_secretsmanager_at_arn.yaml", + "bad/I4010_context_missing.json": { + "filePath": "bad/I4010_context_missing.json", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 4, "counts": { "fatal": 0, "errors": 0, - "warnings": 1, - "informational": 1, + "warnings": 0, + "informational": 12, "debug": 0 }, "suppressed": 0, @@ -6987,259 +6913,246 @@ }, "diagnostics": [ { - "ruleId": "W1051", - "severity": "WARN", - "message": "Dynamic reference resolves the secret value but this property expects the secret ARN", + "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": "MyConnection", + "logicalId": "OrderQueue", "entityType": "Resource", - "resourceType": "AWS::DMS::Endpoint" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.MySqlSettings.SecretsManagerSecretId", - "suggestedFix": "Use the secret ARN directly or retrieve it from Fn::GetAtt instead of using a resolve reference", - "category": "Intrinsic Function", - "startLine": 9, - "startColumn": 9, - "endLine": 9, - "endColumn": 31, - "ruleDescription": "Dynamic reference resolves secret value but property expects the secret ARN", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 16, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'MyConnection' of type 'AWS::DMS::Endpoint' supports Tags but none are configured", - "source": "ENGINE", + "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": "MyConnection", + "logicalId": "OrderQueue", "entityType": "Resource", - "resourceType": "AWS::DMS::Endpoint" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 5, "startColumn": 5, "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endColumn": 16, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "bad/W1053_dynref_spaces.yaml": { - "filePath": "bad/W1053_dynref_spaces.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 2, - "debug": 0 }, - "suppressed": 1, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W1053", - "severity": "WARN", - "message": "'{{ resolve:ssm:/my/param }}' has spaces and will not be resolved as a dynamic reference. Remove spaces from '{{resolve:...}}'", + "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": "MyBucket", + "logicalId": "OrdersTable", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.BucketName", - "suggestedFix": "Remove spaces from the dynamic reference", "category": "Best Practice", "startLine": 8, - "startColumn": 7, + "startColumn": 5, "endLine": 8, "endColumn": 17, - "ruleDescription": "Dynamic references should not contain spaces", + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "MyBucket", + "logicalId": "OrdersTable", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.BucketName", "category": "Best Practice", "startLine": 8, - "startColumn": 7, + "startColumn": 5, "endLine": 8, "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'MyBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "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": "MyBucket", + "logicalId": "ServiceLogGroup", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 26, "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endLine": 26, + "endColumn": 21, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "bad/W1054_raw_pseudo_param.yaml": { - "filePath": "bad/W1054_raw_pseudo_param.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 2, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'Role' is a required property", - "source": "SCHEMA", + "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": "MyFunction", + "logicalId": "ServiceLogGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Logs::LogGroup" + }, + "category": "Best Practice", + "startLine": 26, + "startColumn": 5, + "endLine": 26, + "endColumn": 21, + "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", - "suggestedFix": "Add the required property 'Role'", - "category": "Schema", + "category": "Best Practice", "startLine": 5, "startColumn": 5, "endLine": 5, - "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "endColumn": 16, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "W1054", - "severity": "WARN", - "message": "Found a string 'AWS::Region' that appears to be a pseudo parameter reference; use 'Ref: AWS::Region' instead", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyFunction", + "logicalId": "OrdersTable", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Environment.Variables.REGION", - "suggestedFix": "Use Ref to reference pseudo parameters instead of embedding them as literal strings", - "category": "Intrinsic Function", - "startLine": 15, - "startColumn": 11, - "endLine": 15, - "endColumn": 17, - "ruleDescription": "String value matches a pseudo parameter; use Ref instead", + "propertyPath": "Properties.KeySchema", + "category": "Best Practice", + "startLine": 11, + "startColumn": 9, + "endLine": 11, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "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": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 16, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W1054", - "severity": "WARN", - "message": "Found a string 'AWS::AccountId' that appears to be a pseudo parameter reference; use 'Ref: AWS::AccountId' instead", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'OrdersTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyFunction", + "logicalId": "OrdersTable", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Environment.Variables.ACCOUNT", - "suggestedFix": "Use Ref to reference pseudo parameters instead of embedding them as literal strings", - "category": "Intrinsic Function", - "startLine": 16, - "startColumn": 11, - "endLine": 16, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 10, + "startColumn": 7, + "endLine": 10, "endColumn": 18, - "ruleDescription": "String value matches a pseudo parameter; use Ref instead", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'ServiceLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyFunction", + "logicalId": "ServiceLogGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, + "startLine": 28, "startColumn": 7, - "endLine": 6, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 28, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyFunction", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, + "startLine": 34, + "startColumn": 7, + "endLine": 34, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/W2501_nested_password_W1011_exact_path.yaml": { - "filePath": "bad/W2501_nested_password_W1011_exact_path.yaml", + "bad/I4010_context_missing.yaml": { + "filePath": "bad/I4010_context_missing.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 4, "counts": { "fatal": 0, "errors": 0, - "warnings": 2, - "informational": 2, + "warnings": 0, + "informational": 12, "debug": 0 }, "suppressed": 0, @@ -7248,300 +7161,190 @@ }, "diagnostics": [ { - "ruleId": "W1011", - "severity": "WARN", - "message": "Use dynamic references (e.g., SSM SecureString) instead of parameter 'SecretParameter' for secrets", + "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": "User", + "logicalId": "OrderQueue", "entityType": "Resource", - "resourceType": "AWS::IAM::User" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.LoginProfile.Password", - "category": "Security", - "startLine": 20, - "startColumn": 9, - "endLine": 20, - "endColumn": 17, - "ruleDescription": "Instead of REFing a parameter for a secret use a dynamic reference", + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 13, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W2501", - "severity": "WARN", - "message": "Property 'AccountPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", + "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": "Directory", + "logicalId": "OrderQueue", "entityType": "Resource", - "resourceType": "AWS::AppStream::DirectoryConfig" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.ServiceAccountCredentials.AccountPassword", - "category": "Security", - "startLine": 15, - "startColumn": 9, - "endLine": 15, - "endColumn": 24, - "ruleDescription": "Check if Password Properties are correctly configured", + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 13, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'DirectoryName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "Directory", + "logicalId": "OrdersTable", "entityType": "Resource", - "resourceType": "AWS::AppStream::DirectoryConfig" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.DirectoryName", "category": "Best Practice", "startLine": 10, - "startColumn": 7, + "startColumn": 3, "endLine": 10, - "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'User' of type 'AWS::IAM::User' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "User", - "entityType": "Resource", - "resourceType": "AWS::IAM::User" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 18, - "startColumn": 5, - "endLine": 18, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "bad/W2530_snapstart_conditional_apply_on.yaml": { - "filePath": "bad/W2530_snapstart_conditional_apply_on.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 8, - "informational": 7, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W2530", - "severity": "WARN", - "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", + "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": "PropertiesTrueBranch", + "logicalId": "OrdersTable", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.SnapStart.ApplyOn", - "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", - "startLine": 17, - "startColumn": 11, - "endLine": 17, - "endColumn": 18, - "ruleDescription": "Validate that SnapStart is properly configured", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W2530", - "severity": "WARN", - "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", + "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": "PropertiesFalseBranch", + "logicalId": "ServiceLogGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.SnapStart.ApplyOn", - "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", - "startLine": 41, - "startColumn": 11, - "endLine": 41, + "startLine": 20, + "startColumn": 3, + "endLine": 20, "endColumn": 18, - "ruleDescription": "Validate that SnapStart is properly configured", - "phase": "LINT" - }, - { - "ruleId": "W2530", - "severity": "WARN", - "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", - "source": "CFN_LINT", - "entity": { - "logicalId": "ApplyOnTrueBranch", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.SnapStart.ApplyOn", - "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", - "category": "Best Practice", - "startLine": 52, - "startColumn": 34, - "endLine": 52, - "endColumn": 35, - "ruleDescription": "Validate that SnapStart is properly configured", - "phase": "LINT" - }, - { - "ruleId": "W2530", - "severity": "WARN", - "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", - "source": "CFN_LINT", - "entity": { - "logicalId": "ApplyOnFalseBranch", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.SnapStart.ApplyOn", - "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", - "category": "Best Practice", - "startLine": 63, - "startColumn": 40, - "endLine": 63, - "endColumn": 41, - "ruleDescription": "Validate that SnapStart is properly configured", - "phase": "LINT" - }, - { - "ruleId": "W2530", - "severity": "WARN", - "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", - "source": "CFN_LINT", - "entity": { - "logicalId": "ApplyOnBesideNoValue", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.SnapStart.ApplyOn", - "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", - "category": "Best Practice", - "startLine": 74, - "startColumn": 53, - "endLine": 74, - "endColumn": 54, - "ruleDescription": "Validate that SnapStart is properly configured", + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W2530", - "severity": "WARN", - "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", + "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": "SnapStartBesideNoValue", + "logicalId": "ServiceLogGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.SnapStart.ApplyOn", - "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", - "startLine": 87, - "startColumn": 11, - "endLine": 87, + "startLine": 20, + "startColumn": 3, + "endLine": 20, "endColumn": 18, - "ruleDescription": "Validate that SnapStart is properly configured", + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W2530", - "severity": "WARN", - "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", + "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": "EveryBranchEnables", + "logicalId": "OrderQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.SnapStart.ApplyOn", - "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 99, - "startColumn": 11, - "endLine": 99, - "endColumn": 18, - "ruleDescription": "Validate that SnapStart is properly configured", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 13, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "W2530", - "severity": "WARN", - "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "EveryBranchEnables", + "logicalId": "OrdersTable", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.SnapStart.ApplyOn", - "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 100, - "startColumn": 11, - "endLine": 100, - "endColumn": 18, - "ruleDescription": "Validate that SnapStart is properly configured", - "phase": "LINT" + "startLine": 13, + "startColumn": 7, + "endLine": 13, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'PropertiesTrueBranch' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'OrderQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "PropertiesTrueBranch", + "logicalId": "OrderQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SQS::Queue" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 8, - "startColumn": 5, + "startColumn": 3, "endLine": 8, - "endColumn": 15, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'PropertiesFalseBranch' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'OrdersTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "PropertiesFalseBranch", + "logicalId": "OrdersTable", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 26, + "startLine": 12, "startColumn": 5, - "endLine": 26, + "endLine": 12, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -7549,79 +7352,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ApplyOnTrueBranch' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'ServiceLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApplyOnTrueBranch", + "logicalId": "ServiceLogGroup", "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": 5, - "endLine": 44, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ApplyOnFalseBranch' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ApplyOnFalseBranch", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 55, - "startColumn": 5, - "endLine": 55, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ApplyOnBesideNoValue' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ApplyOnBesideNoValue", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 66, - "startColumn": 5, - "endLine": 66, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SnapStartBesideNoValue' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SnapStartBesideNoValue", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Logs::LogGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 77, + "startLine": 22, "startColumn": 5, - "endLine": 77, + "endLine": 22, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -7629,35 +7372,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EveryBranchEnables' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EveryBranchEnables", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 90, + "startLine": 26, "startColumn": 5, - "endLine": 90, + "endLine": 26, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/W2530_snapstart_version_not_coexisting.yaml": { - "filePath": "bad/W2530_snapstart_version_not_coexisting.yaml", + "bad/I9001_conditional_create_only.yaml": { + "filePath": "bad/I9001_conditional_create_only.yaml", "status": "OK", "metadata": { - "resourcesScanned": 9, + "resourcesScanned": 2, "counts": { "fatal": 0, "errors": 0, - "warnings": 4, - "informational": 10, + "warnings": 0, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -7665,468 +7408,609 @@ "severityLevel": "DEBUG" }, "diagnostics": [ - { - "ruleId": "W2530", - "severity": "WARN", - "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", - "source": "CFN_LINT", - "entity": { - "logicalId": "VersionOnlyDependsOnFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.SnapStart.ApplyOn", - "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", - "category": "Best Practice", - "startLine": 32, - "startColumn": 9, - "endLine": 32, - "endColumn": 16, - "ruleDescription": "Validate that SnapStart is properly configured", - "phase": "LINT" - }, - { - "ruleId": "W2530", - "severity": "WARN", - "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", - "source": "CFN_LINT", - "entity": { - "logicalId": "VersionOnlyDescribesFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.SnapStart.ApplyOn", - "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", - "category": "Best Practice", - "startLine": 48, - "startColumn": 9, - "endLine": 48, - "endColumn": 16, - "ruleDescription": "Validate that SnapStart is properly configured", - "phase": "LINT" - }, - { - "ruleId": "W2530", - "severity": "WARN", - "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", - "source": "CFN_LINT", - "entity": { - "logicalId": "VersionInOtherEnvironment", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.SnapStart.ApplyOn", - "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", - "category": "Best Practice", - "startLine": 65, - "startColumn": 11, - "endLine": 65, - "endColumn": 18, - "ruleDescription": "Validate that SnapStart is properly configured", - "phase": "LINT" - }, - { - "ruleId": "W2530", - "severity": "WARN", - "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", - "source": "CFN_LINT", - "entity": { - "logicalId": "VersionNamesOtherFunctionWhenEnabled", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.SnapStart.ApplyOn", - "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", - "category": "Best Practice", - "startLine": 82, - "startColumn": 34, - "endLine": 82, - "endColumn": 35, - "ruleDescription": "Validate that SnapStart is properly configured", - "phase": "LINT" - }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OrderedVersion", + "logicalId": "VpcWithConditionalCreateOnly", "entityType": "Resource", - "resourceType": "AWS::Lambda::Version" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 37, + "startLine": 8, "startColumn": 7, - "endLine": 37, - "endColumn": 19, + "endLine": 8, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'PublishedFunction'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DescribedVersion", + "logicalId": "VpcWithConditionalCreateOnly", "entityType": "Resource", - "resourceType": "AWS::Lambda::Version" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 52, + "startLine": 9, "startColumn": 7, - "endLine": 52, - "endColumn": 19, + "endLine": 9, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'PublishedFunction'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DescribedVersion", + "logicalId": "VpcControl", "entityType": "Resource", - "resourceType": "AWS::Lambda::Version" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Description", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 53, + "startLine": 17, "startColumn": 7, - "endLine": 53, - "endColumn": 18, + "endLine": 17, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VersionOnlyDescribesFunction'" + "lifecycle": "create-only" } + } + ] + }, + "bad/W1019_sub_unused_key.yaml": { + "filePath": "bad/W1019_sub_unused_key.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1019", + "severity": "WARN", + "message": "Parameter 'UnusedKey' not used in Fn::Sub template string", + "source": "CFN_LINT", "entity": { - "logicalId": "DevOnlyVersion", + "logicalId": "MyBucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Version" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 71, + "propertyPath": "Properties.BucketName", + "suggestedFix": "Remove the unused key from the Fn::Sub variable map or reference it in the template string", + "category": "Intrinsic Function", + "startLine": 6, "startColumn": 7, - "endLine": 71, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VersionInOtherEnvironment'" - } + "endLine": 6, + "endColumn": 17, + "ruleDescription": "Parameter in Fn::Sub variable map is not used in the template string", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SwitchedVersion", + "logicalId": "MyBucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Version" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 86, + "startLine": 6, "startColumn": 7, - "endLine": 86, - "endColumn": 19, + "endLine": 6, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsUsEast1'" + "lifecycle": "create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'PublishedFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'MyBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "PublishedFunction", + "logicalId": "MyBucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 15, + "startLine": 5, "startColumn": 5, - "endLine": 15, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'VersionOnlyDependsOnFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "VersionOnlyDependsOnFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 24, - "startColumn": 5, - "endLine": 24, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/W1028_allowedvalues_excludes_literal.yaml": { + "filePath": "bad/W1028_allowedvalues_excludes_literal.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'VersionOnlyDescribesFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VersionOnlyDescribesFunction", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 40, - "startColumn": 5, - "endLine": 40, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 27, + "startColumn": 7, + "endLine": 27, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'VersionInOtherEnvironment' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VersionInOtherEnvironment", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 56, + "startLine": 26, "startColumn": 5, - "endLine": 56, + "endLine": 26, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/W1051_secretsmanager_at_arn.yaml": { + "filePath": "bad/W1051_secretsmanager_at_arn.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W1051", + "severity": "WARN", + "message": "Dynamic reference resolves the secret value but this property expects the secret ARN", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyConnection", + "entityType": "Resource", + "resourceType": "AWS::DMS::Endpoint" + }, + "propertyPath": "Properties.MySqlSettings.SecretsManagerSecretId", + "suggestedFix": "Use the secret ARN directly or retrieve it from Fn::GetAtt instead of using a resolve reference", + "category": "Intrinsic Function", + "startLine": 9, + "startColumn": 9, + "endLine": 9, + "endColumn": 31, + "ruleDescription": "Dynamic reference resolves secret value but property expects the secret ARN", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'VersionNamesOtherFunctionWhenEnabled' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'MyConnection' of type 'AWS::DMS::Endpoint' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VersionNamesOtherFunctionWhenEnabled", + "logicalId": "MyConnection", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DMS::Endpoint" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 74, + "startLine": 5, "startColumn": 5, - "endLine": 74, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/W3010_full_coverage.yaml": { - "filePath": "bad/W3010_full_coverage.yaml", + "bad/W1053_dynref_spaces.yaml": { + "filePath": "bad/W1053_dynref_spaces.yaml", "status": "OK", "metadata": { - "resourcesScanned": 9, + "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, - "warnings": 12, - "informational": 29, + "warnings": 1, + "informational": 2, "debug": 0 }, - "suppressed": 0, + "suppressed": 1, "strict": false, "severityLevel": "DEBUG" }, "diagnostics": [ { - "ruleId": "W3010", + "ruleId": "W1053", "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1a'", + "message": "'{{ resolve:ssm:/my/param }}' has spaces and will not be resolved as a dynamic reference. Remove spaces from '{{resolve:...}}'", "source": "CFN_LINT", "entity": { - "logicalId": "Asg", + "logicalId": "MyBucket", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.AvailabilityZones.0", + "propertyPath": "Properties.BucketName", + "suggestedFix": "Remove spaces from the dynamic reference", "category": "Best Practice", - "startLine": 9, - "startColumn": 11, - "endLine": 9, - "endColumn": 12, - "ruleDescription": "Availability zone properties should not be hardcoded", + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 17, + "ruleDescription": "Dynamic references should not contain spaces", "phase": "LINT" }, { - "ruleId": "W3010", - "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1b'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Asg", + "logicalId": "MyBucket", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.AvailabilityZones.1", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 10, - "startColumn": 11, - "endLine": 10, - "endColumn": 12, - "ruleDescription": "Availability zone properties should not be hardcoded", - "phase": "LINT" + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3010", - "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1a'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Host", + "logicalId": "MyBucket", "entityType": "Resource", - "resourceType": "AWS::EC2::Host" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 23, - "ruleDescription": "Availability zone properties should not be hardcoded", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/W1054_raw_pseudo_param.yaml": { + "filePath": "bad/W1054_raw_pseudo_param.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 2, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W3010", - "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1a'", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'Role' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Instance", + "logicalId": "MyFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 22, - "startColumn": 7, - "endLine": 22, - "endColumn": 23, - "ruleDescription": "Availability zone properties should not be hardcoded", - "phase": "LINT" + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'Role'", + "category": "Schema", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "W3010", + "ruleId": "W1054", "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1a'", + "message": "Found a string 'AWS::Region' that appears to be a pseudo parameter reference; use 'Ref: AWS::Region' instead", "source": "CFN_LINT", "entity": { - "logicalId": "Lt", + "logicalId": "MyFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::LaunchTemplate" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.LaunchTemplateData.Placement.AvailabilityZone", - "category": "Best Practice", - "startLine": 30, - "startColumn": 11, - "endLine": 30, - "endColumn": 27, - "ruleDescription": "Availability zone properties should not be hardcoded", + "propertyPath": "Properties.Environment.Variables.REGION", + "suggestedFix": "Use Ref to reference pseudo parameters instead of embedding them as literal strings", + "category": "Intrinsic Function", + "startLine": 15, + "startColumn": 11, + "endLine": 15, + "endColumn": 17, + "ruleDescription": "String value matches a pseudo parameter; use Ref instead", "phase": "LINT" }, { - "ruleId": "W3010", + "ruleId": "W1054", "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1a'", + "message": "Found a string 'AWS::AccountId' that appears to be a pseudo parameter reference; use 'Ref: AWS::AccountId' instead", "source": "CFN_LINT", "entity": { - "logicalId": "Subnet", + "logicalId": "MyFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Environment.Variables.ACCOUNT", + "suggestedFix": "Use Ref to reference pseudo parameters instead of embedding them as literal strings", + "category": "Intrinsic Function", + "startLine": 16, + "startColumn": 11, + "endLine": 16, + "endColumn": 18, + "ruleDescription": "String value matches a pseudo parameter; use Ref instead", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 36, + "startLine": 6, "startColumn": 7, - "endLine": 36, - "endColumn": 23, - "ruleDescription": "Availability zone properties should not be hardcoded", + "endLine": 6, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "MyFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/W2501_nested_password_W1011_exact_path.yaml": { + "filePath": "bad/W2501_nested_password_W1011_exact_path.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W3010", + "ruleId": "W1011", "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1a'", + "message": "Use dynamic references (e.g., SSM SecureString) instead of parameter 'SecretParameter' for secrets", "source": "CFN_LINT", "entity": { - "logicalId": "Volume", + "logicalId": "User", "entityType": "Resource", - "resourceType": "AWS::EC2::Volume" + "resourceType": "AWS::IAM::User" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.LoginProfile.Password", + "category": "Security", + "startLine": 20, + "startColumn": 9, + "endLine": 20, + "endColumn": 17, + "ruleDescription": "Instead of REFing a parameter for a secret use a dynamic reference", + "phase": "LINT" + }, + { + "ruleId": "W2501", + "severity": "WARN", + "message": "Property 'AccountPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", + "source": "CFN_LINT", + "entity": { + "logicalId": "Directory", + "entityType": "Resource", + "resourceType": "AWS::AppStream::DirectoryConfig" + }, + "propertyPath": "Properties.ServiceAccountCredentials.AccountPassword", + "category": "Security", + "startLine": 15, + "startColumn": 9, + "endLine": 15, + "endColumn": 24, + "ruleDescription": "Check if Password Properties are correctly configured", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DirectoryName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Directory", + "entityType": "Resource", + "resourceType": "AWS::AppStream::DirectoryConfig" + }, + "propertyPath": "Properties.DirectoryName", "category": "Best Practice", - "startLine": 40, + "startLine": 10, "startColumn": 7, - "endLine": 40, - "endColumn": 23, - "ruleDescription": "Availability zone properties should not be hardcoded", + "endLine": 10, + "endColumn": 20, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'User' of type 'AWS::IAM::User' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "User", + "entityType": "Resource", + "resourceType": "AWS::IAM::User" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 18, + "startColumn": 5, + "endLine": 18, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/W3010_full_coverage.yaml": { + "filePath": "bad/W3010_full_coverage.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 9, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 12, + "informational": 29, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "W3010", "severity": "WARN", "message": "Avoid hardcoding availability zones 'us-east-1a'", "source": "CFN_LINT", "entity": { - "logicalId": "Elb", + "logicalId": "Asg", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, "propertyPath": "Properties.AvailabilityZones.0", "category": "Best Practice", - "startLine": 46, + "startLine": 9, "startColumn": 11, - "endLine": 46, + "endLine": 9, "endColumn": 12, "ruleDescription": "Availability zone properties should not be hardcoded", "phase": "LINT" @@ -8134,19 +8018,19 @@ { "ruleId": "W3010", "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1a'", + "message": "Avoid hardcoding availability zones 'us-east-1b'", "source": "CFN_LINT", "entity": { - "logicalId": "Tg", + "logicalId": "Asg", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.Targets.0.AvailabilityZone", + "propertyPath": "Properties.AvailabilityZones.1", "category": "Best Practice", - "startLine": 59, + "startLine": 10, "startColumn": 11, - "endLine": 59, - "endColumn": 27, + "endLine": 10, + "endColumn": 12, "ruleDescription": "Availability zone properties should not be hardcoded", "phase": "LINT" }, @@ -8156,52 +8040,185 @@ "message": "Avoid hardcoding availability zones 'us-east-1a'", "source": "CFN_LINT", "entity": { - "logicalId": "Rds", + "logicalId": "Host", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Host" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 63, + "startLine": 17, "startColumn": 7, - "endLine": 63, + "endLine": 17, "endColumn": 23, "ruleDescription": "Availability zone properties should not be hardcoded", "phase": "LINT" }, { - "ruleId": "W9008", + "ruleId": "W3010", "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", + "message": "Avoid hardcoding availability zones 'us-east-1a'", + "source": "CFN_LINT", "entity": { - "logicalId": "Rds", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 62, - "startColumn": 5, - "endLine": 62, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 22, + "startColumn": 7, + "endLine": 22, + "endColumn": 23, + "ruleDescription": "Availability zone properties should not be hardcoded", "phase": "LINT" }, { - "ruleId": "W9010", + "ruleId": "W3010", "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", - "source": "ENGINE", + "message": "Avoid hardcoding availability zones 'us-east-1a'", + "source": "CFN_LINT", "entity": { - "logicalId": "Instance", + "logicalId": "Lt", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::LaunchTemplate" }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 23, + "propertyPath": "Properties.LaunchTemplateData.Placement.AvailabilityZone", + "category": "Best Practice", + "startLine": 30, + "startColumn": 11, + "endLine": 30, + "endColumn": 27, + "ruleDescription": "Availability zone properties should not be hardcoded", + "phase": "LINT" + }, + { + "ruleId": "W3010", + "severity": "WARN", + "message": "Avoid hardcoding availability zones 'us-east-1a'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Subnet", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 36, + "startColumn": 7, + "endLine": 36, + "endColumn": 23, + "ruleDescription": "Availability zone properties should not be hardcoded", + "phase": "LINT" + }, + { + "ruleId": "W3010", + "severity": "WARN", + "message": "Avoid hardcoding availability zones 'us-east-1a'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Volume", + "entityType": "Resource", + "resourceType": "AWS::EC2::Volume" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 40, + "startColumn": 7, + "endLine": 40, + "endColumn": 23, + "ruleDescription": "Availability zone properties should not be hardcoded", + "phase": "LINT" + }, + { + "ruleId": "W3010", + "severity": "WARN", + "message": "Avoid hardcoding availability zones 'us-east-1a'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Elb", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.AvailabilityZones.0", + "category": "Best Practice", + "startLine": 46, + "startColumn": 11, + "endLine": 46, + "endColumn": 12, + "ruleDescription": "Availability zone properties should not be hardcoded", + "phase": "LINT" + }, + { + "ruleId": "W3010", + "severity": "WARN", + "message": "Avoid hardcoding availability zones 'us-east-1a'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Tg", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + }, + "propertyPath": "Properties.Targets.0.AvailabilityZone", + "category": "Best Practice", + "startLine": 59, + "startColumn": 11, + "endLine": 59, + "endColumn": 27, + "ruleDescription": "Availability zone properties should not be hardcoded", + "phase": "LINT" + }, + { + "ruleId": "W3010", + "severity": "WARN", + "message": "Avoid hardcoding availability zones 'us-east-1a'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Rds", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 63, + "startColumn": 7, + "endLine": 63, + "endColumn": 23, + "ruleDescription": "Availability zone properties should not be hardcoded", + "phase": "LINT" + }, + { + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", + "entity": { + "logicalId": "Rds", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 62, + "startColumn": 5, + "endLine": 62, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" + }, + { + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", + "entity": { + "logicalId": "Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 23, "startColumn": 7, "endLine": 23, "endColumn": 14, @@ -10236,16 +10253,16 @@ } ] }, - "bad/W9006_every_allowed_value_too_long.json": { - "filePath": "bad/W9006_every_allowed_value_too_long.json", + "bad/W4011_context_missing_why.yaml": { + "filePath": "bad/W4011_context_missing_why.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 4, "counts": { "fatal": 0, "errors": 0, - "warnings": 1, - "informational": 2, + "warnings": 3, + "informational": 12, "debug": 0 }, "suppressed": 0, @@ -10254,291 +10271,306 @@ }, "diagnostics": [ { - "ruleId": "W9006", + "ruleId": "W4011", "severity": "WARN", - "message": "String length 78 exceeds maximum 63 for property 'BucketName'", + "message": "Metadata.com.aws.cloudformation.Context has no 'why' and no trust declaration with conf 'low'.", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "OrderQueue", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Metadata.com.aws.cloudformation.Context", + "suggestedFix": "Add 'why' stating the resource's purpose and notable design choices without restating its type or property values, or set trust to {src: infer, conf: low, note: \"rationale not documented\"} when the rationale is unknown.", "category": "Best Practice", "startLine": 14, - "startColumn": 23, + "startColumn": 7, "endLine": 14, - "endColumn": 34, - "ruleDescription": "String length estimation through Fn::Sub", - "phase": "LINT", - "context": { - "actualValue": "this-allowed-value-is-deliberately-longer-than-the-sixty-three-character-limit", - "extra": { - "actual_length": 78 - } - } + "endColumn": 37, + "ruleDescription": "Metadata Context block has no 'why' rationale and no low-confidence trust declaration", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "ruleId": "W4011", + "severity": "WARN", + "message": "Metadata.com.aws.cloudformation.Context has no 'why' and no trust declaration with conf 'low'.", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "Notifier", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Metadata.com.aws.cloudformation.Context", + "suggestedFix": "Add 'why' stating the resource's purpose and notable design choices without restating its type or property values, or set trust to {src: infer, conf: low, note: \"rationale not documented\"} when the rationale is unknown.", "category": "Best Practice", - "startLine": 14, - "startColumn": 23, - "endLine": 14, - "endColumn": 34, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" - } + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 37, + "ruleDescription": "Metadata Context block has no 'why' rationale and no low-confidence trust declaration", + "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "ruleId": "W4011", + "severity": "WARN", + "message": "Metadata.com.aws.cloudformation.Context has no 'why' and no trust declaration with conf 'low'.", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "ServiceLogGroup", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Metadata.com.aws.cloudformation.Context", + "suggestedFix": "Add 'why' stating the resource's purpose and notable design choices without restating its type or property values, or set trust to {src: infer, conf: low, note: \"rationale not documented\"} when the rationale is unknown.", "category": "Best Practice", - "startLine": 14, + "startLine": 48, "startColumn": 7, - "endLine": 14, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", + "endLine": 48, + "endColumn": 37, + "ruleDescription": "Metadata Context block has no 'why' rationale and no low-confidence trust declaration", "phase": "LINT" - } - ] - }, - "bad/W9007_duplicate_objects_different_key_order.yaml": { - "filePath": "bad/W9007_duplicate_objects_different_key_order.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 1, - "informational": 3, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3037", - "severity": "FATAL", - "message": "Array items are not unique", - "source": "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": "Task", + "logicalId": "OrderQueue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.PlacementConstraints", - "category": "Schema", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Array items not unique", - "phase": "SCHEMA", - "context": { - "actualValue": [ - { - "Type": "memberOf", - "Expression": "attribute:ecs.instance-type =~ t3.*" - }, - { - "Expression": "attribute:ecs.instance-type =~ t3.*", - "Type": "memberOf" - } - ] - } - }, - { - "ruleId": "W9007", - "severity": "WARN", - "message": "Array property 'PlacementConstraints' contains duplicate values", - "source": "ENGINE", + "category": "Best Practice", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "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": "Task", + "logicalId": "OrderQueue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.PlacementConstraints", "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 27, - "ruleDescription": "Array items must be unique when required", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 13, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "Task", + "logicalId": "LegacyTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 27, + "startColumn": 3, + "endLine": 27, + "endColumn": 14, + "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": "LegacyTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 27, + "startColumn": 3, + "endLine": 27, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "ServiceLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "category": "Best Practice", + "startLine": 43, + "startColumn": 3, + "endLine": 43, + "endColumn": 18, + "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": "ServiceLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "category": "Best Practice", + "startLine": 43, + "startColumn": 3, + "endLine": 43, + "endColumn": 18, + "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": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 13, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PlacementConstraints' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Task", + "logicalId": "LegacyTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.PlacementConstraints", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 10, + "startLine": 30, "startColumn": 7, - "endLine": 10, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 30, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Task' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'OrderQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Task", + "logicalId": "OrderQueue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::SQS::Queue" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/W9053_equivalent_conditions.yaml": { - "filePath": "bad/W9053_equivalent_conditions.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'IsProd' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Notifier' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "IsProd", - "entityType": "Condition" + "logicalId": "Notifier", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Conditions/IsProd", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 8, + "startLine": 18, "startColumn": 3, - "endLine": 8, - "endColumn": 9, - "ruleDescription": "Check if Conditions are Used", + "endLine": 18, + "endColumn": 11, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W9053", - "severity": "WARN", - "message": "Condition 'IsProduction' is equivalent to condition 'IsProd' - consider consolidating", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LegacyTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", + "entity": { + "logicalId": "LegacyTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, - "startColumn": 3, - "endLine": 6, + "startLine": 29, + "startColumn": 5, + "endLine": 29, "endColumn": 15, - "ruleDescription": "Conditions are semantically equivalent and can be consolidated", - "phase": "PARSE" + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'ServiceLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "ServiceLogGroup", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Logs::LogGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 11, - "startColumn": 3, - "endLine": 11, - "endColumn": 9, + "startLine": 45, + "startColumn": 5, + "endLine": 45, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/aurora_with_allocated_storage.yaml": { - "filePath": "bad/aurora_with_allocated_storage.yaml", + "bad/W4012_context_schema_violation.yaml": { + "filePath": "bad/W4012_context_schema_violation.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 2, "counts": { "fatal": 0, "errors": 0, - "warnings": 1, - "informational": 6, + "warnings": 16, + "informational": 5, "debug": 0 }, "suppressed": 0, @@ -10547,475 +10579,412 @@ }, "diagnostics": [ { - "ruleId": "W9003", + "ruleId": "W4011", "severity": "WARN", - "message": "100 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "message": "Metadata.com.aws.cloudformation.Context has no 'why' and no trust declaration with conf 'low'.", + "source": "ENGINE", "entity": { - "logicalId": "AuroraDB", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.AllocatedStorage", + "propertyPath": "Metadata.com.aws.cloudformation.Context", + "suggestedFix": "Add 'why' stating the resource's purpose and notable design choices without restating its type or property values, or set trust to {src: infer, conf: low, note: \"rationale not documented\"} when the rationale is unknown.", "category": "Best Practice", - "startLine": 9, + "startLine": 25, "startColumn": 7, - "endLine": 9, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 25, + "endColumn": 37, + "ruleDescription": "Metadata Context block has no 'why' rationale and no low-confidence trust declaration", + "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", + "ruleId": "W4012", + "severity": "WARN", + "message": "'arch' is an array; it must be a string.", + "source": "ENGINE", "entity": { - "logicalId": "AuroraDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" }, + "propertyPath": "Metadata/com.aws.cloudformation.Context/arch", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 9, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", "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", + "ruleId": "W4012", + "severity": "WARN", + "message": "'why' belongs at resource level, not template level. Template-level fields: arch, must, owner, ref; resource-level fields: deps, must, mutability, mutable, trust, why.", + "source": "ENGINE", "entity": { - "logicalId": "AuroraDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" }, + "propertyPath": "Metadata/com.aws.cloudformation.Context/why", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 11, + "startColumn": 5, + "endLine": 11, + "endColumn": 8, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "ruleId": "W4012", + "severity": "WARN", + "message": "'ref.0' is missing required field 'at'; 'ref' must be an array whose entries are each a string or an object with required 'at'.", "source": "ENGINE", "entity": { - "logicalId": "AuroraDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Metadata/com.aws.cloudformation.Context/ref/0", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, + "startLine": 13, + "startColumn": 12, + "endLine": 13, "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", + "ruleId": "W4012", + "severity": "WARN", + "message": "'ref.1' does not match any supported shape; 'ref' must be an array whose entries are each a string or an object with required 'at'.", "source": "ENGINE", "entity": { - "logicalId": "AuroraDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" }, - "propertyPath": "Properties.DBClusterIdentifier", + "propertyPath": "Metadata/com.aws.cloudformation.Context/ref/1", "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 14, + "startColumn": 9, + "endLine": 14, + "endColumn": 10, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", + "phase": "LINT" }, { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "ruleId": "W4012", + "severity": "WARN", + "message": "'gaps' is not a recognized template-level Context field; allowed fields: arch, must, owner, ref.", "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context/gaps", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 9, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'AuroraDB' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "ruleId": "W4012", + "severity": "WARN", + "message": "Metadata.com.aws.cloudformation.Context must be a mapping of Context fields; found a string.", "source": "ENGINE", "entity": { - "logicalId": "AuroraDB", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Metadata.com.aws.cloudformation.Context", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 37, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", "phase": "LINT" - } - ] - }, - "bad/cloudfront_bad_alias.yaml": { - "filePath": "bad/cloudfront_bad_alias.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3013", - "severity": "ERROR", - "message": "CloudFront alias 'not a valid domain' is not a valid domain name", - "source": "CFN_LINT", + "ruleId": "W4012", + "severity": "WARN", + "message": "'why' is a number; it must be a string.", + "source": "ENGINE", "entity": { - "logicalId": "Dist", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.DistributionConfig.Aliases.0", - "category": "Resource", - "startLine": 8, - "startColumn": 13, - "endLine": 8, - "endColumn": 14, - "ruleDescription": "CloudFront Aliases", + "propertyPath": "Metadata.com.aws.cloudformation.Context.why", + "category": "Best Practice", + "startLine": 26, + "startColumn": 9, + "endLine": 26, + "endColumn": 12, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Dist' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", + "ruleId": "W4012", + "severity": "WARN", + "message": "'must' is a string; it must be an array of strings.", "source": "ENGINE", "entity": { - "logicalId": "Dist", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Metadata.com.aws.cloudformation.Context.must", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 27, + "startColumn": 9, + "endLine": 27, + "endColumn": 13, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", "phase": "LINT" - } - ] - }, - "bad/cloudfront_bad_origin.yaml": { - "filePath": "bad/cloudfront_bad_origin.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3057", - "severity": "ERROR", - "message": "TargetOriginId 'NonExistentOrigin' does not match any Origin Id in the distribution", - "source": "CFN_LINT", + "ruleId": "W4012", + "severity": "WARN", + "message": "'mutable' value 'sometimes' is not recognized; allowed values: must-never-change, change-with-constraints, review-required, free-to-tune.", + "source": "ENGINE", "entity": { - "logicalId": "Distribution", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.DistributionConfig.DefaultCacheBehavior.TargetOriginId", - "suggestedFix": "Set TargetOriginId to match one of the Origin Ids defined in Origins", - "category": "Resource", - "startLine": 13, - "startColumn": 11, - "endLine": 13, - "endColumn": 25, - "ruleDescription": "Validate that CloudFront TargetOriginId is a specified Origin", + "propertyPath": "Metadata.com.aws.cloudformation.Context.mutable", + "category": "Best Practice", + "startLine": 28, + "startColumn": 9, + "endLine": 28, + "endColumn": 16, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Distribution' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", + "ruleId": "W4012", + "severity": "WARN", + "message": "'mutability.QueueName' value 'never-ish' is not recognized; allowed values: must-never-change, change-with-constraints, review-required, free-to-tune.", "source": "ENGINE", "entity": { - "logicalId": "Distribution", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Metadata.com.aws.cloudformation.Context.mutability.QueueName", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 30, + "startColumn": 11, + "endLine": 30, + "endColumn": 20, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", "phase": "LINT" - } - ] - }, - "bad/codepipeline_bad_artifact_counts.yaml": { - "filePath": "bad/codepipeline_bad_artifact_counts.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 1, - "warnings": 1, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3014", - "severity": "FATAL", - "message": "Exactly one of ['ArtifactStore', 'ArtifactStores'] must be specified", - "source": "SCHEMA", + "ruleId": "W4012", + "severity": "WARN", + "message": "'trust' is missing required field 'src'; 'trust' must be an object with required 'src' and 'conf'.", + "source": "ENGINE", "entity": { - "logicalId": "Pipeline", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties", - "category": "Schema", - "startLine": 5, - "startColumn": 5, - "endLine": 5, + "propertyPath": "Metadata.com.aws.cloudformation.Context.trust", + "category": "Best Practice", + "startLine": 31, + "startColumn": 9, + "endLine": 31, + "endColumn": 14, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", + "phase": "LINT" + }, + { + "ruleId": "W4012", + "severity": "WARN", + "message": "'trust.conf' value 'certain' is not recognized; allowed values: high, medium, low.", + "source": "ENGINE", + "entity": { + "logicalId": "Queue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Metadata.com.aws.cloudformation.Context.trust.conf", + "category": "Best Practice", + "startLine": 32, + "startColumn": 11, + "endLine": 32, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", - "ruleDescription": "Exactly one of properties required (requiredXor)", - "phase": "SCHEMA" + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", + "phase": "LINT" }, { - "ruleId": "E3702", - "severity": "ERROR", - "message": "Action 'BuildAction' (AWS/Build/CodeBuild) has 0 input artifacts, expected at least 1", - "source": "CFN_LINT", + "ruleId": "W4012", + "severity": "WARN", + "message": "'trust.extra' is not a recognized field of 'trust'; allowed fields: cite, conf, note, src.", + "source": "ENGINE", "entity": { - "logicalId": "Pipeline", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::SQS::Queue" }, - "category": "Resource", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Validate the number of input and output artifacts in a CodePipeline", + "propertyPath": "Metadata.com.aws.cloudformation.Context.trust.extra", + "category": "Best Practice", + "startLine": 33, + "startColumn": 11, + "endLine": 33, + "endColumn": 16, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", "phase": "LINT" }, { - "ruleId": "W9002", + "ruleId": "W4012", "severity": "WARN", - "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "message": "'ref' belongs at template level, not resource level. Template-level fields: arch, must, owner, ref; resource-level fields: deps, must, mutability, mutable, trust, why.", "source": "ENGINE", "entity": { - "logicalId": "Pipeline", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.RoleArn", + "propertyPath": "Metadata.com.aws.cloudformation.Context.ref", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 14, - "ruleDescription": "Hardcoded ARN property", + "startLine": 34, + "startColumn": 9, + "endLine": 34, + "endColumn": 12, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Pipeline' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured", + "ruleId": "W4012", + "severity": "WARN", + "message": "'unknown' is not a recognized resource-level Context field; allowed fields: deps, must, mutability, mutable, trust, why.", "source": "ENGINE", "entity": { - "logicalId": "Pipeline", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Metadata.com.aws.cloudformation.Context.unknown", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 35, + "startColumn": 9, + "endLine": 35, + "endColumn": 16, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", "phase": "LINT" - } - ] - }, - "bad/codepipeline_bad_artifacts.yaml": { - "filePath": "bad/codepipeline_bad_artifacts.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 1, - "warnings": 2, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3014", - "severity": "FATAL", - "message": "Exactly one of ['ArtifactStore', 'ArtifactStores'] must be specified", - "source": "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": "Pipeline", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties", - "category": "Schema", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", - "ruleDescription": "Exactly one of properties required (requiredXor)", - "phase": "SCHEMA" + "category": "Best Practice", + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 8, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "E3701", - "severity": "ERROR", - "message": "InputArtifact 'NonExistentArtifact' in stage 'Build' action 'BuildAction' does not reference a previously defined OutputArtifact", + "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": "Pipeline", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::SQS::Queue" }, - "category": "Resource", - "startLine": 3, + "category": "Best Practice", + "startLine": 22, "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Validate input and output artifact names are used properly", + "endLine": 22, + "endColumn": 8, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", - "source": "ENGINE", + "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": "Pipeline", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.RoleArn", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 14, - "ruleDescription": "Hardcoded ARN property", + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 8, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Pipeline", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::S3::Bucket" }, - "category": "Security", - "startLine": 3, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 18, "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Hardcoded account ID in ARN", + "endLine": 18, + "endColumn": 9, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Pipeline' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured", + "message": "Resource 'Queue' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Pipeline", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::SQS::Queue" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 8, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/conditions.yaml": { - "filePath": "bad/conditions.yaml", + "bad/W4012_resource_context_intrinsics.yaml": { + "filePath": "bad/W4012_resource_context_intrinsics.yaml", "status": "OK", "metadata": { "resourcesScanned": 4, "counts": { - "fatal": 5, - "errors": 7, - "warnings": 10, - "informational": 8, + "fatal": 0, + "errors": 0, + "warnings": 5, + "informational": 16, "debug": 0 }, "suppressed": 0, @@ -11024,997 +10993,835 @@ }, "diagnostics": [ { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('BadKey' was unexpected)", - "source": "SCHEMA", + "ruleId": "W4012", + "severity": "WARN", + "message": "Metadata.com.aws.cloudformation.Context uses intrinsic function 'Fn::If'; it must match the Context schema directly.", + "source": "ENGINE", "entity": { - "logicalId": "EC2Instance", + "logicalId": "ConditionalContextQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Tags.1.BadKey", - "category": "Schema", - "startLine": 60, - "startColumn": 17, - "endLine": 60, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Additional properties are not allowed", - "phase": "SCHEMA", - "context": { - "property": "BadKey", - "extra": { - "allowed_properties": [ - "AdditionalInfo", - "Affinity", - "AvailabilityZone", - "BlockDeviceMappings", - "CpuOptions", - "CreditSpecification", - "DisableApiTermination", - "EbsOptimized", - "ElasticGpuSpecifications", - "ElasticInferenceAccelerators", - "EnclaveOptions", - "HibernationOptions", - "HostId", - "HostResourceGroupArn", - "IamInstanceProfile", - "ImageId", - "InstanceId", - "InstanceInitiatedShutdownBehavior", - "InstanceType", - "Ipv6AddressCount", - "Ipv6Addresses", - "KernelId", - "KeyName", - "LaunchTemplate", - "LicenseSpecifications", - "MetadataOptions", - "Monitoring", - "NetworkInterfaces", - "PlacementGroupName", - "PrivateDnsName", - "PrivateDnsNameOptions", - "PrivateIp", - "PrivateIpAddress", - "PropagateTagsToVolumeOnCreation", - "PublicDnsName", - "PublicIp", - "RamdiskId", - "SecurityGroupIds", - "SecurityGroups", - "SourceDestCheck", - "SsmAssociations", - "State", - "SubnetId", - "Tags", - "Tenancy", - "UserData", - "Volumes", - "VpcId" - ] - } - } + "propertyPath": "Metadata.com.aws.cloudformation.Context", + "category": "Best Practice", + "startLine": 18, + "startColumn": 7, + "endLine": 18, + "endColumn": 37, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", + "phase": "LINT" }, { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('BadValue' was unexpected)", - "source": "SCHEMA", + "ruleId": "W4012", + "severity": "WARN", + "message": "'why' uses intrinsic function 'Fn::Sub'; 'why' must be a string.", + "source": "ENGINE", "entity": { - "logicalId": "EC2Instance", + "logicalId": "IntrinsicFieldQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Tags.1.BadValue", - "category": "Schema", - "startLine": 60, - "startColumn": 17, - "endLine": 60, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Additional properties are not allowed", - "phase": "SCHEMA", - "context": { - "property": "BadValue", - "extra": { - "allowed_properties": [ - "AdditionalInfo", - "Affinity", - "AvailabilityZone", - "BlockDeviceMappings", - "CpuOptions", - "CreditSpecification", - "DisableApiTermination", - "EbsOptimized", - "ElasticGpuSpecifications", - "ElasticInferenceAccelerators", - "EnclaveOptions", - "HibernationOptions", - "HostId", - "HostResourceGroupArn", - "IamInstanceProfile", - "ImageId", - "InstanceId", - "InstanceInitiatedShutdownBehavior", - "InstanceType", - "Ipv6AddressCount", - "Ipv6Addresses", - "KernelId", - "KeyName", - "LaunchTemplate", - "LicenseSpecifications", - "MetadataOptions", - "Monitoring", - "NetworkInterfaces", - "PlacementGroupName", - "PrivateDnsName", - "PrivateDnsNameOptions", - "PrivateIp", - "PrivateIpAddress", - "PropagateTagsToVolumeOnCreation", - "PublicDnsName", - "PublicIp", - "RamdiskId", - "SecurityGroupIds", - "SecurityGroups", - "SourceDestCheck", - "SsmAssociations", - "State", - "SubnetId", - "Tags", - "Tenancy", - "UserData", - "Volumes", - "VpcId" - ] - } - } + "propertyPath": "Metadata.com.aws.cloudformation.Context.why", + "category": "Best Practice", + "startLine": 26, + "startColumn": 9, + "endLine": 26, + "endColumn": 12, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", + "phase": "LINT" }, { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('BadLocations' was unexpected)", - "source": "SCHEMA", + "ruleId": "W4012", + "severity": "WARN", + "message": "'must.0' uses intrinsic function 'Fn::Sub'; 'must' must be an array of strings.", + "source": "ENGINE", "entity": { - "logicalId": "CloudFrontDistribution", + "logicalId": "IntrinsicFieldQueue", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.DistributionConfig.Restrictions.GeoRestriction.BadLocations", - "category": "Schema", - "startLine": 89, - "startColumn": 11, - "endLine": 89, - "endColumn": 25, - "ruleDescription": "Additional properties are not allowed", - "phase": "SCHEMA", - "context": { - "property": "BadLocations", - "extra": { - "allowed_properties": [ - "DistributionConfig", - "DomainName", - "Id", - "Tags" - ] - } - } + "propertyPath": "Metadata.com.aws.cloudformation.Context.must.0", + "category": "Best Practice", + "startLine": 28, + "startColumn": 18, + "endLine": 28, + "endColumn": 19, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'DefaultCacheBehavior' is a required property", - "source": "SCHEMA", + "ruleId": "W4012", + "severity": "WARN", + "message": "'mutability' uses intrinsic function 'Fn::Sub'; 'mutability' must be a mapping of property name to one of: must-never-change, change-with-constraints, review-required, free-to-tune.", + "source": "ENGINE", "entity": { - "logicalId": "CloudFrontDistribution", + "logicalId": "SubMutabilityQueue", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.DistributionConfig", - "suggestedFix": "Add the required property 'DefaultCacheBehavior'", - "category": "Schema", - "startLine": 86, - "startColumn": 7, - "endLine": 86, - "endColumn": 25, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Metadata.com.aws.cloudformation.Context.mutability", + "category": "Best Practice", + "startLine": 37, + "startColumn": 9, + "endLine": 37, + "endColumn": 19, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", + "phase": "LINT" }, { - "ruleId": "F3012", - "severity": "FATAL", - "message": "['whitelist'] is not of type 'string'", - "source": "SCHEMA", + "ruleId": "W4012", + "severity": "WARN", + "message": "'mutability' uses intrinsic function 'Fn::If'; 'mutability' must be a mapping of property name to one of: must-never-change, change-with-constraints, review-required, free-to-tune.", + "source": "ENGINE", "entity": { - "logicalId": "CloudFrontDistribution", + "logicalId": "ConditionalMutabilityQueue", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" - }, - "propertyPath": "Properties.DistributionConfig.Restrictions.GeoRestriction.RestrictionType", - "category": "Schema", - "startLine": 89, - "startColumn": 11, - "endLine": 89, - "endColumn": 25, - "conditionScenario": { - "EnableGeoBlocking": true + "resourceType": "AWS::SQS::Queue" }, - "ruleDescription": "Property type mismatch", - "phase": "SCHEMA", - "context": { - "actualValue": [ - "whitelist" - ], - "expectedConstraint": "string" - } + "propertyPath": "Metadata.com.aws.cloudformation.Context.mutability", + "category": "Best Practice", + "startLine": 43, + "startColumn": 9, + "endLine": 43, + "endColumn": 19, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", + "phase": "LINT" }, { - "ruleId": "E1028", - "severity": "ERROR", - "message": "Fn::If condition 'isProd' does not exist in Conditions section", - "source": "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": "EC2Instance", + "logicalId": "ConditionalContextQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Tags.1.Fn::If.0", - "category": "Intrinsic Function", - "startLine": 61, - "startColumn": 15, - "endLine": 61, - "endColumn": 16, - "ruleDescription": "Fn::If condition must exist in Conditions section", - "phase": "PARSE" + "category": "Best Practice", + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 26, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "E1028", - "severity": "ERROR", - "message": "Fn::If condition 'isDev' does not exist in Conditions section", - "source": "SCHEMA", + "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": "EC2Instance", + "logicalId": "ConditionalContextQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Tags.1.Fn::If.2.Fn::If.0", - "category": "Intrinsic Function", - "startLine": 65, - "startColumn": 19, - "endLine": 65, - "endColumn": 20, - "ruleDescription": "Fn::If condition must exist in Conditions section", - "phase": "PARSE" + "category": "Best Practice", + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 26, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "E3001", - "severity": "ERROR", - "message": "Resource 'CloudFrontDistribution' property 'Condition' must be a string", + "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": "CloudFrontDistribution", + "logicalId": "IntrinsicFieldQueue", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" - }, - "category": "Resource", - "startLine": 84, - "startColumn": 5, - "endLine": 84, - "endColumn": 14, - "ruleDescription": "Basic CloudFormation Resource Check", - "phase": "PARSE" - }, - { - "ruleId": "E8001", - "severity": "ERROR", - "message": "Condition 'BadCondition' must be one of ['Fn::And', 'Fn::Equals', 'Fn::Not', 'Fn::Or'], got a string", - "source": "SCHEMA", - "entity": { - "logicalId": "BadCondition", - "entityType": "Condition" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Conditions/BadCondition", - "category": "Structure", - "startLine": 41, + "category": "Best Practice", + "startLine": 22, "startColumn": 3, - "endLine": 41, - "endColumn": 15, - "ruleDescription": "Conditions section must have valid structure", - "phase": "PARSE" + "endLine": 22, + "endColumn": 22, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "E8001", - "severity": "ERROR", - "message": "Condition 'TooManyConditions' must be a single condition function, but declares 2: ['Fn::Equals', 'Fn::Not']", - "source": "SCHEMA", + "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": "TooManyConditions", - "entityType": "Condition" + "logicalId": "IntrinsicFieldQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Conditions/TooManyConditions", - "category": "Structure", - "startLine": 43, + "category": "Best Practice", + "startLine": 22, "startColumn": 3, - "endLine": 43, - "endColumn": 20, - "ruleDescription": "Conditions section must have valid structure", - "phase": "PARSE" + "endLine": 22, + "endColumn": 22, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "E8001", - "severity": "ERROR", - "message": "Condition 'HasParam' must be one of ['Fn::And', 'Fn::Equals', 'Fn::Not', 'Fn::Or'], got 'Fn::Of'", - "source": "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": "HasParam", - "entityType": "Condition" + "logicalId": "SubMutabilityQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Conditions/HasParam", - "category": "Structure", - "startLine": 47, + "category": "Best Practice", + "startLine": 32, "startColumn": 3, - "endLine": 47, - "endColumn": 11, - "ruleDescription": "Conditions section must have valid structure", - "phase": "PARSE" + "endLine": 32, + "endColumn": 21, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "E8001", - "severity": "ERROR", - "message": "Condition 'NullCondition' must be one of ['Fn::And', 'Fn::Equals', 'Fn::Not', 'Fn::Or'], got null", - "source": "SCHEMA", + "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": "NullCondition", - "entityType": "Condition" + "logicalId": "SubMutabilityQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Conditions/NullCondition", - "category": "Structure", - "startLine": 51, + "category": "Best Practice", + "startLine": 32, "startColumn": 3, - "endLine": 51, - "endColumn": 16, - "ruleDescription": "Conditions section must have valid structure", - "phase": "PARSE" + "endLine": 32, + "endColumn": 21, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'EnableGeoBlocking' to False from current status True", + "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": "CloudFrontDistribution", + "logicalId": "ConditionalMutabilityQueue", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.DistributionConfig.Restrictions.GeoRestriction.Fn::If.1.RestrictionType.Fn::If.2", "category": "Best Practice", - "startLine": 94, - "startColumn": 19, - "endLine": 94, - "endColumn": 20, - "ruleDescription": "Check Fn::If has a path that cannot be reached", + "startLine": 38, + "startColumn": 3, + "endLine": 38, + "endColumn": 29, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W1103", - "severity": "WARN", - "message": "'Fn::Of' is not a supported function - did you mean 'Fn::If'?", - "source": "ENGINE", - "entity": { - "logicalId": "HasParam", - "entityType": "Condition" - }, - "propertyPath": "Conditions/HasParam/Fn::Of", - "category": "Intrinsic Function", - "startLine": 48, - "startColumn": 5, - "endLine": 48, - "endColumn": 11, - "ruleDescription": "Unknown intrinsic function name", - "phase": "PARSE" - }, - { - "ruleId": "W3030", - "severity": "WARN", - "message": "['whitelist'] is not one of ['blacklist', 'none', 'whitelist']", + "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": "CloudFrontDistribution", + "logicalId": "ConditionalMutabilityQueue", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" - }, - "propertyPath": "Properties.DistributionConfig.Restrictions.GeoRestriction.RestrictionType", - "category": "Schema", - "startLine": 89, - "startColumn": 11, - "endLine": 89, - "endColumn": 25, - "conditionScenario": { - "EnableGeoBlocking": true + "resourceType": "AWS::SQS::Queue" }, - "ruleDescription": "Value not in allowed enum", - "phase": "SCHEMA", - "context": { - "actualValue": [ - "whitelist" - ], - "extra": { - "allowed_values": [ - "blacklist", - "none", - "whitelist" - ] - } - } + "category": "Best Practice", + "startLine": 38, + "startColumn": 3, + "endLine": 38, + "endColumn": 29, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'BadCondition' is not used by any resource or Fn::If", + "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": "BadCondition", - "entityType": "Condition" + "logicalId": "ConditionalContextQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Conditions/BadCondition", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 41, + "startLine": 15, "startColumn": 3, - "endLine": 41, - "endColumn": 15, - "ruleDescription": "Check if Conditions are Used", + "endLine": 15, + "endColumn": 26, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'UnusedCondition' is not used by any resource or Fn::If", + "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": "UnusedCondition", - "entityType": "Condition" + "logicalId": "IntrinsicFieldQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Conditions/UnusedCondition", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 42, + "startLine": 22, "startColumn": 3, - "endLine": 42, - "endColumn": 18, - "ruleDescription": "Check if Conditions are Used", + "endLine": 22, + "endColumn": 22, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'TooManyConditions' is not used by any resource or Fn::If", + "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": "TooManyConditions", - "entityType": "Condition" + "logicalId": "SubMutabilityQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Conditions/TooManyConditions", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 43, + "startLine": 32, "startColumn": 3, - "endLine": 43, - "endColumn": 20, - "ruleDescription": "Check if Conditions are Used", + "endLine": 32, + "endColumn": 21, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'HasParam' is not used by any resource or Fn::If", + "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": "HasParam", - "entityType": "Condition" + "logicalId": "ConditionalMutabilityQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Conditions/HasParam", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 47, + "startLine": 38, "startColumn": 3, - "endLine": 47, - "endColumn": 11, - "ruleDescription": "Check if Conditions are Used", + "endLine": 38, + "endColumn": 29, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'NullCondition' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ConditionalContextQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "NullCondition", - "entityType": "Condition" + "logicalId": "ConditionalContextQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Conditions/NullCondition", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 51, + "startLine": 15, "startColumn": 3, - "endLine": 51, - "endColumn": 16, - "ruleDescription": "Check if Conditions are Used", + "endLine": 15, + "endColumn": 26, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'IntrinsicFieldQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EC2Instance", + "logicalId": "IntrinsicFieldQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 56, - "startColumn": 7, - "endLine": 56, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", - "phase": "LINT" - }, - { - "ruleId": "W9053", - "severity": "WARN", - "message": "Condition 'UnusedCondition' is equivalent to condition 'CreateProdResources' - consider consolidating", - "source": "ENGINE", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 42, + "startLine": 22, "startColumn": 3, - "endLine": 42, - "endColumn": 18, - "ruleDescription": "Conditions are semantically equivalent and can be consolidated", - "phase": "PARSE" + "endLine": 22, + "endColumn": 22, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'SubMutabilityQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "NewVolume", + "logicalId": "SubMutabilityQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::Volume" + "resourceType": "AWS::SQS::Queue" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 76, + "startLine": 32, "startColumn": 3, - "endLine": 76, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 32, + "endColumn": 21, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'ConditionalMutabilityQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "NewVolume", + "logicalId": "ConditionalMutabilityQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::Volume" + "resourceType": "AWS::SQS::Queue" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 76, + "startLine": 38, "startColumn": 3, - "endLine": 76, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 38, + "endColumn": 29, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/W4012_template_context_intrinsic.yaml": { + "filePath": "bad/W4012_template_context_intrinsic.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 4, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'Environment' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "EC2Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "Environment", + "entityType": "Parameter" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Parameters/Environment", "category": "Best Practice", - "startLine": 56, - "startColumn": 7, - "endLine": 56, + "startLine": 4, + "startColumn": 3, + "endLine": 4, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceId' is create-only; updating it will cause resource replacement", + "ruleId": "W4012", + "severity": "WARN", + "message": "'arch' uses intrinsic function 'Fn::Sub'; 'arch' must be a string.", "source": "ENGINE", "entity": { - "logicalId": "MountPoint", - "entityType": "Resource", - "resourceType": "AWS::EC2::VolumeAttachment" + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" }, - "propertyPath": "Properties.InstanceId", + "propertyPath": "Metadata/com.aws.cloudformation.Context/arch", "category": "Best Practice", - "startLine": 73, - "startColumn": 7, - "endLine": 73, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'EC2Instance'" - } + "startLine": 11, + "startColumn": 5, + "endLine": 11, + "endColumn": 9, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'VolumeId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "MountPoint", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::EC2::VolumeAttachment" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.VolumeId", "category": "Best Practice", - "startLine": 74, - "startColumn": 7, - "endLine": 74, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'NewVolume'" - } + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 8, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Device' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "MountPoint", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::EC2::VolumeAttachment" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Device", "category": "Best Practice", - "startLine": 75, - "startColumn": 7, - "endLine": 75, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 8, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'NewVolume' of type 'AWS::EC2::Volume' supports Tags but none are configured", - "source": "ENGINE", + "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": "NewVolume", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::EC2::Volume" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 79, - "startColumn": 5, - "endLine": 79, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "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", - "message": "Resource 'CloudFrontDistribution' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", + "message": "Resource 'Queue' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CloudFrontDistribution", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::SQS::Queue" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 85, - "startColumn": 5, - "endLine": 85, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 8, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } ] }, - "bad/conditions/and.yaml": { - "filePath": "bad/conditions/and.yaml", + "bad/W9006_every_allowed_value_too_long.json": { + "filePath": "bad/W9006_every_allowed_value_too_long.json", "status": "OK", "metadata": { - "resourcesScanned": 0, + "resourcesScanned": 1, "counts": { - "fatal": 1, - "errors": 9, - "warnings": 4, - "informational": 0, + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 2, "debug": 0 }, - "suppressed": 10, + "suppressed": 0, "strict": false, "severityLevel": "DEBUG" }, "diagnostics": [ { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "startLine": 23, - "startColumn": 1, - "endLine": 23, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" - }, - { - "ruleId": "E8004", - "severity": "ERROR", - "message": "Fn::And: 'And' is not of type 'array'", - "source": "SCHEMA", + "ruleId": "W9006", + "severity": "WARN", + "message": "String length 78 exceeds maximum 63 for property 'BucketName'", + "source": "ENGINE", "entity": { - "logicalId": "TestAndString", - "entityType": "Condition" + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Conditions/TestAndString/Fn::And", - "category": "Intrinsic Function", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 10, - "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", - "phase": "PARSE" + "propertyPath": "Properties.BucketName", + "category": "Best Practice", + "startLine": 14, + "startColumn": 23, + "endLine": 14, + "endColumn": 34, + "ruleDescription": "String length estimation through Fn::Sub", + "phase": "LINT", + "context": { + "actualValue": "this-allowed-value-is-deliberately-longer-than-the-sixty-three-character-limit", + "extra": { + "actual_length": 78 + } + } }, { - "ruleId": "E8004", - "severity": "ERROR", - "message": "Fn::And: expected minimum item count: 2, found: 1", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "TestAndToLittle", - "entityType": "Condition" + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Conditions/TestAndToLittle/Fn::And", - "category": "Intrinsic Function", - "startLine": 5, - "startColumn": 3, - "endLine": 5, - "endColumn": 10, - "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", - "phase": "PARSE" + "propertyPath": "Properties.BucketName", + "category": "Best Practice", + "startLine": 14, + "startColumn": 23, + "endLine": 14, + "endColumn": 34, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" + } }, { - "ruleId": "E8004", - "severity": "ERROR", - "message": "Fn::And: expected maximum item count: 10, found: 11", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "TestAndToMany", - "entityType": "Condition" + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Conditions/TestAndToMany/Fn::And", - "category": "Intrinsic Function", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 12, - "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", - "phase": "PARSE" + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/W9007_duplicate_objects_different_key_order.yaml": { + "filePath": "bad/W9007_duplicate_objects_different_key_order.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 1, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "E8004", - "severity": "ERROR", - "message": "Fn::And: element 0: {'Condition': 'TestAndToMany', 'Extra': 'ThisIsBad'} is not of type 'boolean'", + "ruleId": "F3037", + "severity": "FATAL", + "message": "Array items are not unique", "source": "SCHEMA", "entity": { - "logicalId": "TestAndBadCondition", - "entityType": "Condition" + "logicalId": "Task", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Conditions/TestAndBadCondition/Fn::And", - "category": "Intrinsic Function", - "startLine": 19, - "startColumn": 3, - "endLine": 19, - "endColumn": 10, - "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", - "phase": "PARSE" + "propertyPath": "Properties.PlacementConstraints", + "category": "Schema", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Array items not unique", + "phase": "SCHEMA", + "context": { + "actualValue": [ + { + "Type": "memberOf", + "Expression": "attribute:ecs.instance-type =~ t3.*" + }, + { + "Expression": "attribute:ecs.instance-type =~ t3.*", + "Type": "memberOf" + } + ] + } }, { - "ruleId": "E8004", - "severity": "ERROR", - "message": "Fn::And: element 1: {'Bad': 'TestAndToMany'} is not of type 'boolean'", - "source": "SCHEMA", + "ruleId": "W9007", + "severity": "WARN", + "message": "Array property 'PlacementConstraints' contains duplicate values", + "source": "ENGINE", "entity": { - "logicalId": "TestAndBadCondition", - "entityType": "Condition" + "logicalId": "Task", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Conditions/TestAndBadCondition/Fn::And", - "category": "Intrinsic Function", - "startLine": 19, - "startColumn": 3, - "endLine": 19, - "endColumn": 10, - "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", - "phase": "PARSE" + "propertyPath": "Properties.PlacementConstraints", + "category": "Best Practice", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 27, + "ruleDescription": "Array items must be unique when required", + "phase": "LINT" }, { - "ruleId": "E8004", - "severity": "ERROR", - "message": "Fn::And: element 0: 'Test' is not of type 'boolean'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "TestAndBadArray", - "entityType": "Condition" + "logicalId": "Task", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Conditions/TestAndBadArray/Fn::And", - "category": "Intrinsic Function", - "startLine": 20, - "startColumn": 3, - "endLine": 20, - "endColumn": 10, - "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", - "phase": "PARSE" + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E8004", - "severity": "ERROR", - "message": "Fn::And: element 1: 'Test2' is not of type 'boolean'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'PlacementConstraints' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "TestAndBadArray", - "entityType": "Condition" + "logicalId": "Task", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Conditions/TestAndBadArray/Fn::And", - "category": "Intrinsic Function", - "startLine": 20, - "startColumn": 3, - "endLine": 20, - "endColumn": 10, - "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", - "phase": "PARSE" + "propertyPath": "Properties.PlacementConstraints", + "category": "Best Practice", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E8004", - "severity": "ERROR", - "message": "Fn::And: null is not of type 'array'", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Task' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "TestAndNull", - "entityType": "Condition" + "logicalId": "Task", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Conditions/TestAndNull/Fn::And", - "category": "Intrinsic Function", - "startLine": 22, - "startColumn": 5, - "endLine": 22, - "endColumn": 12, - "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", - "phase": "PARSE" - }, - { - "ruleId": "E9106", - "severity": "ERROR", - "message": "Circular dependency in conditions: TestAndToLittle -> TestAndToMany", - "source": "SCHEMA", - "category": "Structure", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", "startLine": 5, - "startColumn": 3, + "startColumn": 5, "endLine": 5, - "endColumn": 18, - "ruleDescription": "Circular dependency in condition definitions", - "phase": "PARSE" - }, - { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'TestAndString' is not used by any resource or Fn::If", - "source": "CFN_LINT", - "entity": { - "logicalId": "TestAndString", - "entityType": "Condition" - }, - "propertyPath": "Conditions/TestAndString", - "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 16, - "ruleDescription": "Check if Conditions are Used", + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/W9053_equivalent_conditions.yaml": { + "filePath": "bad/W9053_equivalent_conditions.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "W8001", "severity": "WARN", - "message": "Condition 'TestAndBadCondition' is not used by any resource or Fn::If", + "message": "Condition 'IsProd' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "TestAndBadCondition", + "logicalId": "IsProd", "entityType": "Condition" }, - "propertyPath": "Conditions/TestAndBadCondition", + "propertyPath": "Conditions/IsProd", "category": "Best Practice", - "startLine": 19, + "startLine": 8, "startColumn": 3, - "endLine": 19, - "endColumn": 22, + "endLine": 8, + "endColumn": 9, "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, { - "ruleId": "W8001", + "ruleId": "W9053", "severity": "WARN", - "message": "Condition 'TestAndBadArray' is not used by any resource or Fn::If", - "source": "CFN_LINT", - "entity": { - "logicalId": "TestAndBadArray", - "entityType": "Condition" - }, - "propertyPath": "Conditions/TestAndBadArray", + "message": "Condition 'IsProduction' is equivalent to condition 'IsProd' - consider consolidating", + "source": "ENGINE", "category": "Best Practice", - "startLine": 20, + "startLine": 6, "startColumn": 3, - "endLine": 20, - "endColumn": 18, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Conditions are semantically equivalent and can be consolidated", + "phase": "PARSE" }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'TestAndNull' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "TestAndNull", - "entityType": "Condition" + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Conditions/TestAndNull", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 21, + "startLine": 11, "startColumn": 3, - "endLine": 21, - "endColumn": 14, - "ruleDescription": "Check if Conditions are Used", + "endLine": 11, + "endColumn": 9, + "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/conditions/condition_functions.json": { - "filePath": "bad/conditions/condition_functions.json", + "bad/aurora_with_allocated_storage.yaml": { + "filePath": "bad/aurora_with_allocated_storage.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 2, - "errors": 15, - "warnings": 14, - "informational": 1, + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 6, "debug": 0 }, "suppressed": 0, @@ -12023,918 +11830,1216 @@ }, "diagnostics": [ { - "ruleId": "F0013", - "severity": "FATAL", - "message": "Fn::If: 'string' is not of type 'array'", - "source": "SCHEMA", + "ruleId": "W9003", + "severity": "WARN", + "message": "100 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "TestIfNotArray", - "entityType": "Condition" + "logicalId": "AuroraDB", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Conditions/TestIfNotArray/Fn::If", - "category": "Intrinsic Function", - "startLine": 31, - "startColumn": 28, - "endLine": 31, - "endColumn": 35, - "ruleDescription": "Fn::If must have exactly 3 elements", - "phase": "PARSE" + "propertyPath": "Properties.AllocatedStorage", + "category": "Best Practice", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "F0013", - "severity": "FATAL", - "message": "Fn::If: must have exactly 3 elements, got 2", - "source": "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": "TestIfWrongCount", - "entityType": "Condition" + "logicalId": "AuroraDB", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Conditions/TestIfWrongCount/Fn::If", - "category": "Intrinsic Function", - "startLine": 32, - "startColumn": 30, - "endLine": 32, - "endColumn": 37, - "ruleDescription": "Fn::If must have exactly 3 elements", - "phase": "PARSE" + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "E8003", - "severity": "ERROR", - "message": "Fn::Equals: 'Value' is not of type 'array'", - "source": "SCHEMA", + "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": "TestEqualNotArray", - "entityType": "Condition" + "logicalId": "AuroraDB", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Conditions/TestEqualNotArray/Fn::Equals", - "category": "Intrinsic Function", - "startLine": 19, - "startColumn": 31, - "endLine": 19, - "endColumn": 42, - "ruleDescription": "Fn::Equals must take exactly two scalar operands", - "phase": "PARSE" - }, - { - "ruleId": "E8003", - "severity": "ERROR", - "message": "Fn::Equals: expected minimum item count: 2, found: 1", - "source": "SCHEMA", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "TestEqualTooShort", - "entityType": "Condition" + "logicalId": "AuroraDB", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Conditions/TestEqualTooShort/Fn::Equals", - "category": "Intrinsic Function", - "startLine": 20, - "startColumn": 31, - "endLine": 20, - "endColumn": 42, - "ruleDescription": "Fn::Equals must take exactly two scalar operands", - "phase": "PARSE" + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "E8003", - "severity": "ERROR", - "message": "Fn::Equals: expected maximum item count: 2, found: 3", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "TestEqualTooLong", - "entityType": "Condition" + "logicalId": "AuroraDB", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Conditions/TestEqualTooLong/Fn::Equals", - "category": "Intrinsic Function", - "startLine": 21, - "startColumn": 30, - "endLine": 21, - "endColumn": 41, - "ruleDescription": "Fn::Equals must take exactly two scalar operands", - "phase": "PARSE" + "propertyPath": "Properties.DBClusterIdentifier", + "category": "Best Practice", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E8003", - "severity": "ERROR", - "message": "Fn::Equals: argument 0: [{'Ref': 'AWS::Region'}] is not of type 'string'", - "source": "SCHEMA", + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'AuroraDB' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "TestEqualBadArgs", - "entityType": "Condition" + "logicalId": "AuroraDB", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Conditions/TestEqualBadArgs/Fn::Equals", - "category": "Intrinsic Function", - "startLine": 23, - "startColumn": 13, - "endLine": 23, - "endColumn": 24, - "ruleDescription": "Fn::Equals must take exactly two scalar operands", - "phase": "PARSE" + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/cloudfront_bad_alias.yaml": { + "filePath": "bad/cloudfront_bad_alias.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "E8003", + "ruleId": "E3013", "severity": "ERROR", - "message": "Fn::Equals: argument 1: {'Bad': 'Value'} is not of type 'string'", - "source": "SCHEMA", + "message": "CloudFront alias 'not a valid domain' is not a valid domain name", + "source": "CFN_LINT", "entity": { - "logicalId": "TestEqualBadArgs", - "entityType": "Condition" + "logicalId": "Dist", + "entityType": "Resource", + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Conditions/TestEqualBadArgs/Fn::Equals", - "category": "Intrinsic Function", - "startLine": 23, + "propertyPath": "Properties.DistributionConfig.Aliases.0", + "category": "Resource", + "startLine": 8, "startColumn": 13, - "endLine": 23, - "endColumn": 24, - "ruleDescription": "Fn::Equals must take exactly two scalar operands", - "phase": "PARSE" + "endLine": 8, + "endColumn": 14, + "ruleDescription": "CloudFront Aliases", + "phase": "LINT" }, { - "ruleId": "E8003", - "severity": "ERROR", - "message": "Fn::Equals: null is not of type 'array'", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Dist' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "TestEqualNull", - "entityType": "Condition" + "logicalId": "Dist", + "entityType": "Resource", + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Conditions/TestEqualNull/Fn::Equals", - "category": "Intrinsic Function", - "startLine": 28, - "startColumn": 27, - "endLine": 28, - "endColumn": 38, - "ruleDescription": "Fn::Equals must take exactly two scalar operands", - "phase": "PARSE" + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/cloudfront_bad_origin.yaml": { + "filePath": "bad/cloudfront_bad_origin.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "E8004", + "ruleId": "E3057", "severity": "ERROR", - "message": "Fn::And: 'And' is not of type 'array'", - "source": "SCHEMA", + "message": "TargetOriginId 'NonExistentOrigin' does not match any Origin Id in the distribution", + "source": "CFN_LINT", "entity": { - "logicalId": "TestAndString", - "entityType": "Condition" + "logicalId": "Distribution", + "entityType": "Resource", + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Conditions/TestAndString/Fn::And", - "category": "Intrinsic Function", - "startLine": 9, - "startColumn": 27, - "endLine": 9, - "endColumn": 35, - "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", - "phase": "PARSE" + "propertyPath": "Properties.DistributionConfig.DefaultCacheBehavior.TargetOriginId", + "suggestedFix": "Set TargetOriginId to match one of the Origin Ids defined in Origins", + "category": "Resource", + "startLine": 13, + "startColumn": 11, + "endLine": 13, + "endColumn": 25, + "ruleDescription": "Validate that CloudFront TargetOriginId is a specified Origin", + "phase": "LINT" }, { - "ruleId": "E8004", - "severity": "ERROR", - "message": "Fn::And: expected minimum item count: 2, found: 1", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Distribution' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "TestAndToLittle", - "entityType": "Condition" + "logicalId": "Distribution", + "entityType": "Resource", + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Conditions/TestAndToLittle/Fn::And", - "category": "Intrinsic Function", - "startLine": 10, - "startColumn": 29, - "endLine": 10, - "endColumn": 37, - "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", - "phase": "PARSE" - }, - { - "ruleId": "E8004", - "severity": "ERROR", - "message": "Fn::And: element 0: 'Test' is not of type 'boolean'", - "source": "SCHEMA", - "entity": { - "logicalId": "TestAndBadArray", - "entityType": "Condition" - }, - "propertyPath": "Conditions/TestAndBadArray/Fn::And", - "category": "Intrinsic Function", - "startLine": 11, - "startColumn": 29, - "endLine": 11, - "endColumn": 37, - "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", - "phase": "PARSE" + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/codepipeline_bad_artifact_counts.yaml": { + "filePath": "bad/codepipeline_bad_artifact_counts.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 1, + "warnings": 1, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "E8004", - "severity": "ERROR", - "message": "Fn::And: element 1: 'Test2' is not of type 'boolean'", + "ruleId": "F3014", + "severity": "FATAL", + "message": "Exactly one of ['ArtifactStore', 'ArtifactStores'] must be specified", "source": "SCHEMA", "entity": { - "logicalId": "TestAndBadArray", - "entityType": "Condition" + "logicalId": "Pipeline", + "entityType": "Resource", + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Conditions/TestAndBadArray/Fn::And", - "category": "Intrinsic Function", - "startLine": 11, - "startColumn": 29, - "endLine": 11, - "endColumn": 37, - "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", - "phase": "PARSE" + "propertyPath": "Properties", + "category": "Schema", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", + "ruleDescription": "Exactly one of properties required (requiredXor)", + "phase": "SCHEMA" }, { - "ruleId": "E8004", + "ruleId": "E3702", "severity": "ERROR", - "message": "Fn::And: element 0: {'Condition': 'TestAndString', 'Extra': 'ThisIsBad'} is not of type 'boolean'", - "source": "SCHEMA", + "message": "Action 'BuildAction' (AWS/Build/CodeBuild) has 0 input artifacts, expected at least 1", + "source": "CFN_LINT", "entity": { - "logicalId": "TestAndBadCondition", - "entityType": "Condition" + "logicalId": "Pipeline", + "entityType": "Resource", + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Conditions/TestAndBadCondition/Fn::And", - "category": "Intrinsic Function", - "startLine": 13, - "startColumn": 13, - "endLine": 13, - "endColumn": 21, - "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", - "phase": "PARSE" + "category": "Resource", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Validate the number of input and output artifacts in a CodePipeline", + "phase": "LINT" }, { - "ruleId": "E8004", - "severity": "ERROR", - "message": "Fn::And: element 1: {'Bad': 'TestAndString'} is not of type 'boolean'", - "source": "SCHEMA", + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", "entity": { - "logicalId": "TestAndBadCondition", - "entityType": "Condition" + "logicalId": "Pipeline", + "entityType": "Resource", + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Conditions/TestAndBadCondition/Fn::And", - "category": "Intrinsic Function", - "startLine": 13, - "startColumn": 13, - "endLine": 13, - "endColumn": 21, - "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", - "phase": "PARSE" + "propertyPath": "Properties.RoleArn", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 14, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" }, { - "ruleId": "E8004", - "severity": "ERROR", - "message": "Fn::And: null is not of type 'array'", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Pipeline' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "TestAndNull", - "entityType": "Condition" + "logicalId": "Pipeline", + "entityType": "Resource", + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Conditions/TestAndNull/Fn::And", - "category": "Intrinsic Function", - "startLine": 18, - "startColumn": 25, - "endLine": 18, - "endColumn": 33, - "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", - "phase": "PARSE" + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/codepipeline_bad_artifacts.yaml": { + "filePath": "bad/codepipeline_bad_artifacts.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 1, + "warnings": 2, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "E8005", - "severity": "ERROR", - "message": "Fn::Not: must have exactly 1 element, got 0", + "ruleId": "F3014", + "severity": "FATAL", + "message": "Exactly one of ['ArtifactStore', 'ArtifactStores'] must be specified", "source": "SCHEMA", "entity": { - "logicalId": "TestNotEmpty", - "entityType": "Condition" + "logicalId": "Pipeline", + "entityType": "Resource", + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Conditions/TestNotEmpty/Fn::Not", - "category": "Intrinsic Function", - "startLine": 29, - "startColumn": 26, - "endLine": 29, - "endColumn": 34, - "ruleDescription": "Fn::Not must take exactly one boolean condition", - "phase": "PARSE" + "propertyPath": "Properties", + "category": "Schema", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", + "ruleDescription": "Exactly one of properties required (requiredXor)", + "phase": "SCHEMA" }, { - "ruleId": "E8005", + "ruleId": "E3701", "severity": "ERROR", - "message": "Fn::Not: null is not of type 'array'", - "source": "SCHEMA", + "message": "InputArtifact 'NonExistentArtifact' in stage 'Build' action 'BuildAction' does not reference a previously defined OutputArtifact", + "source": "CFN_LINT", "entity": { - "logicalId": "TestNotNull", - "entityType": "Condition" + "logicalId": "Pipeline", + "entityType": "Resource", + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Conditions/TestNotNull/Fn::Not", - "category": "Intrinsic Function", - "startLine": 30, - "startColumn": 25, - "endLine": 30, - "endColumn": 33, - "ruleDescription": "Fn::Not must take exactly one boolean condition", - "phase": "PARSE" + "category": "Resource", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Validate input and output artifact names are used properly", + "phase": "LINT" }, { - "ruleId": "W2001", + "ruleId": "W9002", "severity": "WARN", - "message": "Parameter 'Environment' is not referenced anywhere in the template", - "source": "CFN_LINT", + "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", "entity": { - "logicalId": "Environment", - "entityType": "Parameter" + "logicalId": "Pipeline", + "entityType": "Resource", + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Parameters/Environment", + "propertyPath": "Properties.RoleArn", "category": "Best Practice", - "startLine": 4, - "startColumn": 9, - "endLine": 4, - "endColumn": 21, - "ruleDescription": "Check if Parameters are Used", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 14, + "ruleDescription": "Hardcoded ARN property", "phase": "LINT" }, { - "ruleId": "W8001", + "ruleId": "W9013", "severity": "WARN", - "message": "Condition 'TestAndToLittle' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", "entity": { - "logicalId": "TestAndToLittle", - "entityType": "Condition" + "logicalId": "Pipeline", + "entityType": "Resource", + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Conditions/TestAndToLittle", - "category": "Best Practice", - "startLine": 10, - "startColumn": 9, - "endLine": 10, - "endColumn": 25, - "ruleDescription": "Check if Conditions are Used", + "category": "Security", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'TestAndBadArray' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Pipeline' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "TestAndBadArray", - "entityType": "Condition" + "logicalId": "Pipeline", + "entityType": "Resource", + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Conditions/TestAndBadArray", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 11, - "startColumn": 9, - "endLine": 11, - "endColumn": 25, - "ruleDescription": "Check if Conditions are Used", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/conditions.yaml": { + "filePath": "bad/conditions.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 5, + "errors": 7, + "warnings": 10, + "informational": 8, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'TestAndBadCondition' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "F3002", + "severity": "FATAL", + "message": "Additional properties are not allowed ('BadKey' was unexpected)", + "source": "SCHEMA", "entity": { - "logicalId": "TestAndBadCondition", - "entityType": "Condition" + "logicalId": "EC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Conditions/TestAndBadCondition", - "category": "Best Practice", - "startLine": 12, - "startColumn": 9, - "endLine": 12, - "endColumn": 29, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" + "propertyPath": "Properties.Tags.1.BadKey", + "category": "Schema", + "startLine": 60, + "startColumn": 17, + "endLine": 60, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Additional properties are not allowed", + "phase": "SCHEMA", + "context": { + "property": "BadKey", + "extra": { + "allowed_properties": [ + "AdditionalInfo", + "Affinity", + "AvailabilityZone", + "BlockDeviceMappings", + "CpuOptions", + "CreditSpecification", + "DisableApiTermination", + "EbsOptimized", + "ElasticGpuSpecifications", + "ElasticInferenceAccelerators", + "EnclaveOptions", + "HibernationOptions", + "HostId", + "HostResourceGroupArn", + "IamInstanceProfile", + "ImageId", + "InstanceId", + "InstanceInitiatedShutdownBehavior", + "InstanceType", + "Ipv6AddressCount", + "Ipv6Addresses", + "KernelId", + "KeyName", + "LaunchTemplate", + "LicenseSpecifications", + "MetadataOptions", + "Monitoring", + "NetworkInterfaces", + "PlacementGroupName", + "PrivateDnsName", + "PrivateDnsNameOptions", + "PrivateIp", + "PrivateIpAddress", + "PropagateTagsToVolumeOnCreation", + "PublicDnsName", + "PublicIp", + "RamdiskId", + "SecurityGroupIds", + "SecurityGroups", + "SourceDestCheck", + "SsmAssociations", + "State", + "SubnetId", + "Tags", + "Tenancy", + "UserData", + "Volumes", + "VpcId" + ] + } + } }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'TestAndNull' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "F3002", + "severity": "FATAL", + "message": "Additional properties are not allowed ('BadValue' was unexpected)", + "source": "SCHEMA", "entity": { - "logicalId": "TestAndNull", - "entityType": "Condition" + "logicalId": "EC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Conditions/TestAndNull", - "category": "Best Practice", - "startLine": 18, - "startColumn": 9, - "endLine": 18, - "endColumn": 21, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" + "propertyPath": "Properties.Tags.1.BadValue", + "category": "Schema", + "startLine": 60, + "startColumn": 17, + "endLine": 60, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Additional properties are not allowed", + "phase": "SCHEMA", + "context": { + "property": "BadValue", + "extra": { + "allowed_properties": [ + "AdditionalInfo", + "Affinity", + "AvailabilityZone", + "BlockDeviceMappings", + "CpuOptions", + "CreditSpecification", + "DisableApiTermination", + "EbsOptimized", + "ElasticGpuSpecifications", + "ElasticInferenceAccelerators", + "EnclaveOptions", + "HibernationOptions", + "HostId", + "HostResourceGroupArn", + "IamInstanceProfile", + "ImageId", + "InstanceId", + "InstanceInitiatedShutdownBehavior", + "InstanceType", + "Ipv6AddressCount", + "Ipv6Addresses", + "KernelId", + "KeyName", + "LaunchTemplate", + "LicenseSpecifications", + "MetadataOptions", + "Monitoring", + "NetworkInterfaces", + "PlacementGroupName", + "PrivateDnsName", + "PrivateDnsNameOptions", + "PrivateIp", + "PrivateIpAddress", + "PropagateTagsToVolumeOnCreation", + "PublicDnsName", + "PublicIp", + "RamdiskId", + "SecurityGroupIds", + "SecurityGroups", + "SourceDestCheck", + "SsmAssociations", + "State", + "SubnetId", + "Tags", + "Tenancy", + "UserData", + "Volumes", + "VpcId" + ] + } + } }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'TestEqualNotArray' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "F3002", + "severity": "FATAL", + "message": "Additional properties are not allowed ('BadLocations' was unexpected)", + "source": "SCHEMA", "entity": { - "logicalId": "TestEqualNotArray", - "entityType": "Condition" + "logicalId": "CloudFrontDistribution", + "entityType": "Resource", + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Conditions/TestEqualNotArray", - "category": "Best Practice", - "startLine": 19, - "startColumn": 9, - "endLine": 19, - "endColumn": 27, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" + "propertyPath": "Properties.DistributionConfig.Restrictions.GeoRestriction.BadLocations", + "category": "Schema", + "startLine": 89, + "startColumn": 11, + "endLine": 89, + "endColumn": 25, + "ruleDescription": "Additional properties are not allowed", + "phase": "SCHEMA", + "context": { + "property": "BadLocations", + "extra": { + "allowed_properties": [ + "DistributionConfig", + "DomainName", + "Id", + "Tags" + ] + } + } }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'TestEqualTooShort' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'DefaultCacheBehavior' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "TestEqualTooShort", - "entityType": "Condition" + "logicalId": "CloudFrontDistribution", + "entityType": "Resource", + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Conditions/TestEqualTooShort", - "category": "Best Practice", - "startLine": 20, - "startColumn": 9, - "endLine": 20, - "endColumn": 27, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" + "propertyPath": "Properties.DistributionConfig", + "suggestedFix": "Add the required property 'DefaultCacheBehavior'", + "category": "Schema", + "startLine": 86, + "startColumn": 7, + "endLine": 86, + "endColumn": 25, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'TestEqualTooLong' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "F3012", + "severity": "FATAL", + "message": "['whitelist'] is not of type 'string'", + "source": "SCHEMA", "entity": { - "logicalId": "TestEqualTooLong", - "entityType": "Condition" + "logicalId": "CloudFrontDistribution", + "entityType": "Resource", + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Conditions/TestEqualTooLong", - "category": "Best Practice", - "startLine": 21, - "startColumn": 9, - "endLine": 21, - "endColumn": 26, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" + "propertyPath": "Properties.DistributionConfig.Restrictions.GeoRestriction.RestrictionType", + "category": "Schema", + "startLine": 89, + "startColumn": 11, + "endLine": 89, + "endColumn": 25, + "conditionScenario": { + "EnableGeoBlocking": true + }, + "ruleDescription": "Property type mismatch", + "phase": "SCHEMA", + "context": { + "actualValue": [ + "whitelist" + ], + "expectedConstraint": "string" + } }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'TestEqualBadArgs' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "E1028", + "severity": "ERROR", + "message": "Fn::If condition 'isProd' does not exist in Conditions section", + "source": "SCHEMA", "entity": { - "logicalId": "TestEqualBadArgs", - "entityType": "Condition" + "logicalId": "EC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Conditions/TestEqualBadArgs", - "category": "Best Practice", - "startLine": 22, - "startColumn": 9, - "endLine": 22, - "endColumn": 26, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" + "propertyPath": "Properties.Tags.1.Fn::If.0", + "category": "Intrinsic Function", + "startLine": 61, + "startColumn": 15, + "endLine": 61, + "endColumn": 16, + "ruleDescription": "Fn::If condition must exist in Conditions section", + "phase": "PARSE" }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'TestEqualNull' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "E1028", + "severity": "ERROR", + "message": "Fn::If condition 'isDev' does not exist in Conditions section", + "source": "SCHEMA", "entity": { - "logicalId": "TestEqualNull", - "entityType": "Condition" + "logicalId": "EC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Conditions/TestEqualNull", - "category": "Best Practice", - "startLine": 28, - "startColumn": 9, - "endLine": 28, - "endColumn": 23, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" + "propertyPath": "Properties.Tags.1.Fn::If.2.Fn::If.0", + "category": "Intrinsic Function", + "startLine": 65, + "startColumn": 19, + "endLine": 65, + "endColumn": 20, + "ruleDescription": "Fn::If condition must exist in Conditions section", + "phase": "PARSE" }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'TestNotEmpty' is not used by any resource or Fn::If", + "ruleId": "E3001", + "severity": "ERROR", + "message": "Resource 'CloudFrontDistribution' property 'Condition' must be a string", "source": "CFN_LINT", "entity": { - "logicalId": "TestNotEmpty", - "entityType": "Condition" + "logicalId": "CloudFrontDistribution", + "entityType": "Resource", + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Conditions/TestNotEmpty", - "category": "Best Practice", - "startLine": 29, - "startColumn": 9, - "endLine": 29, - "endColumn": 22, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" + "category": "Resource", + "startLine": 84, + "startColumn": 5, + "endLine": 84, + "endColumn": 14, + "ruleDescription": "Basic CloudFormation Resource Check", + "phase": "PARSE" }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'TestNotNull' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "E8001", + "severity": "ERROR", + "message": "Condition 'BadCondition' must be one of ['Fn::And', 'Fn::Equals', 'Fn::Not', 'Fn::Or'], got a string", + "source": "SCHEMA", "entity": { - "logicalId": "TestNotNull", + "logicalId": "BadCondition", "entityType": "Condition" }, - "propertyPath": "Conditions/TestNotNull", - "category": "Best Practice", - "startLine": 30, - "startColumn": 9, - "endLine": 30, - "endColumn": 21, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" + "propertyPath": "Conditions/BadCondition", + "category": "Structure", + "startLine": 41, + "startColumn": 3, + "endLine": 41, + "endColumn": 15, + "ruleDescription": "Conditions section must have valid structure", + "phase": "PARSE" }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'TestIfNotArray' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "E8001", + "severity": "ERROR", + "message": "Condition 'TooManyConditions' must be a single condition function, but declares 2: ['Fn::Equals', 'Fn::Not']", + "source": "SCHEMA", "entity": { - "logicalId": "TestIfNotArray", + "logicalId": "TooManyConditions", "entityType": "Condition" }, - "propertyPath": "Conditions/TestIfNotArray", - "category": "Best Practice", - "startLine": 31, - "startColumn": 9, - "endLine": 31, - "endColumn": 24, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" + "propertyPath": "Conditions/TooManyConditions", + "category": "Structure", + "startLine": 43, + "startColumn": 3, + "endLine": 43, + "endColumn": 20, + "ruleDescription": "Conditions section must have valid structure", + "phase": "PARSE" }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'TestIfWrongCount' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "E8001", + "severity": "ERROR", + "message": "Condition 'HasParam' must be one of ['Fn::And', 'Fn::Equals', 'Fn::Not', 'Fn::Or'], got 'Fn::Of'", + "source": "SCHEMA", "entity": { - "logicalId": "TestIfWrongCount", + "logicalId": "HasParam", "entityType": "Condition" }, - "propertyPath": "Conditions/TestIfWrongCount", - "category": "Best Practice", - "startLine": 32, - "startColumn": 9, - "endLine": 32, - "endColumn": 26, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" + "propertyPath": "Conditions/HasParam", + "category": "Structure", + "startLine": 47, + "startColumn": 3, + "endLine": 47, + "endColumn": 11, + "ruleDescription": "Conditions section must have valid structure", + "phase": "PARSE" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DummyBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "DummyBucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 35, - "startColumn": 9, - "endLine": 35, - "endColumn": 21, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/conditions/equals.yaml": { - "filePath": "bad/conditions/equals.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 8, - "warnings": 8, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "startLine": 24, - "startColumn": 1, - "endLine": 24, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" - }, - { - "ruleId": "E8003", + "ruleId": "E8001", "severity": "ERROR", - "message": "Fn::Equals: 'Value' is not of type 'array'", + "message": "Condition 'NullCondition' must be one of ['Fn::And', 'Fn::Equals', 'Fn::Not', 'Fn::Or'], got null", "source": "SCHEMA", "entity": { - "logicalId": "TestEqual", + "logicalId": "NullCondition", "entityType": "Condition" }, - "propertyPath": "Conditions/TestEqual/Fn::Equals", - "category": "Intrinsic Function", - "startLine": 8, + "propertyPath": "Conditions/NullCondition", + "category": "Structure", + "startLine": 51, "startColumn": 3, - "endLine": 8, - "endColumn": 13, - "ruleDescription": "Fn::Equals must take exactly two scalar operands", + "endLine": 51, + "endColumn": 16, + "ruleDescription": "Conditions section must have valid structure", "phase": "PARSE" }, { - "ruleId": "E8003", - "severity": "ERROR", - "message": "Fn::Equals: expected minimum item count: 2, found: 1", - "source": "SCHEMA", + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'EnableGeoBlocking' to False from current status True", + "source": "CFN_LINT", "entity": { - "logicalId": "TestEqualToShort", - "entityType": "Condition" + "logicalId": "CloudFrontDistribution", + "entityType": "Resource", + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Conditions/TestEqualToShort/Fn::Equals", - "category": "Intrinsic Function", - "startLine": 9, - "startColumn": 3, - "endLine": 9, - "endColumn": 13, - "ruleDescription": "Fn::Equals must take exactly two scalar operands", - "phase": "PARSE" + "propertyPath": "Properties.DistributionConfig.Restrictions.GeoRestriction.Fn::If.1.RestrictionType.Fn::If.2", + "category": "Best Practice", + "startLine": 94, + "startColumn": 19, + "endLine": 94, + "endColumn": 20, + "ruleDescription": "Check Fn::If has a path that cannot be reached", + "phase": "LINT" }, { - "ruleId": "E8003", - "severity": "ERROR", - "message": "Fn::Equals: expected maximum item count: 2, found: 3", - "source": "SCHEMA", + "ruleId": "W1103", + "severity": "WARN", + "message": "'Fn::Of' is not a supported function - did you mean 'Fn::If'?", + "source": "ENGINE", "entity": { - "logicalId": "TestEqualToLong", + "logicalId": "HasParam", "entityType": "Condition" }, - "propertyPath": "Conditions/TestEqualToLong/Fn::Equals", + "propertyPath": "Conditions/HasParam/Fn::Of", "category": "Intrinsic Function", - "startLine": 10, - "startColumn": 3, - "endLine": 10, - "endColumn": 13, - "ruleDescription": "Fn::Equals must take exactly two scalar operands", + "startLine": 48, + "startColumn": 5, + "endLine": 48, + "endColumn": 11, + "ruleDescription": "Unknown intrinsic function name", "phase": "PARSE" }, { - "ruleId": "E8003", - "severity": "ERROR", - "message": "Fn::Equals: argument 0: [{'Ref': 'AWS::Region'}] is not of type 'string'", - "source": "SCHEMA", + "ruleId": "W3030", + "severity": "WARN", + "message": "['whitelist'] is not one of ['blacklist', 'none', 'whitelist']", + "source": "CFN_LINT", "entity": { - "logicalId": "Test", - "entityType": "Condition" + "logicalId": "CloudFrontDistribution", + "entityType": "Resource", + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Conditions/Test/Fn::Equals", - "category": "Intrinsic Function", - "startLine": 11, - "startColumn": 3, - "endLine": 11, - "endColumn": 13, - "ruleDescription": "Fn::Equals must take exactly two scalar operands", - "phase": "PARSE" - }, - { - "ruleId": "E8003", - "severity": "ERROR", - "message": "Fn::Equals: argument 1: {'Bad': 'Value'} is not of type 'string'", - "source": "SCHEMA", - "entity": { - "logicalId": "Test", - "entityType": "Condition" + "propertyPath": "Properties.DistributionConfig.Restrictions.GeoRestriction.RestrictionType", + "category": "Schema", + "startLine": 89, + "startColumn": 11, + "endLine": 89, + "endColumn": 25, + "conditionScenario": { + "EnableGeoBlocking": true }, - "propertyPath": "Conditions/Test/Fn::Equals", - "category": "Intrinsic Function", - "startLine": 11, - "startColumn": 3, - "endLine": 11, - "endColumn": 13, - "ruleDescription": "Fn::Equals must take exactly two scalar operands", - "phase": "PARSE" + "ruleDescription": "Value not in allowed enum", + "phase": "SCHEMA", + "context": { + "actualValue": [ + "whitelist" + ], + "extra": { + "allowed_values": [ + "blacklist", + "none", + "whitelist" + ] + } + } }, { - "ruleId": "E8003", - "severity": "ERROR", - "message": "Fn::Equals: argument 1: ['Not a List'] is not of type 'string'", - "source": "SCHEMA", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'BadCondition' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "TestWrongType", + "logicalId": "BadCondition", "entityType": "Condition" }, - "propertyPath": "Conditions/TestWrongType/Fn::Equals", - "category": "Intrinsic Function", - "startLine": 12, + "propertyPath": "Conditions/BadCondition", + "category": "Best Practice", + "startLine": 41, "startColumn": 3, - "endLine": 12, - "endColumn": 13, - "ruleDescription": "Fn::Equals must take exactly two scalar operands", - "phase": "PARSE" - }, - { - "ruleId": "E8003", - "severity": "ERROR", - "message": "Fn::Equals: argument 0: {'Ref': 'AWS::Region', 'Fn::Select': ['Environments', 0]} is not of type 'string'", - "source": "SCHEMA", - "entity": { - "logicalId": "ToManyFunctions", - "entityType": "Condition" - }, - "propertyPath": "Conditions/ToManyFunctions/Fn::Equals", - "category": "Intrinsic Function", - "startLine": 18, - "startColumn": 5, - "endLine": 18, - "endColumn": 15, - "ruleDescription": "Fn::Equals must take exactly two scalar operands", - "phase": "PARSE" - }, - { - "ruleId": "E8003", - "severity": "ERROR", - "message": "Fn::Equals: null is not of type 'array'", - "source": "SCHEMA", - "entity": { - "logicalId": "NullEquals", - "entityType": "Condition" - }, - "propertyPath": "Conditions/NullEquals/Fn::Equals", - "category": "Intrinsic Function", - "startLine": 23, - "startColumn": 5, - "endLine": 23, + "endLine": 41, "endColumn": 15, - "ruleDescription": "Fn::Equals must take exactly two scalar operands", - "phase": "PARSE" + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { "ruleId": "W8001", "severity": "WARN", - "message": "Condition 'TestEqual' is not used by any resource or Fn::If", + "message": "Condition 'UnusedCondition' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "TestEqual", + "logicalId": "UnusedCondition", "entityType": "Condition" }, - "propertyPath": "Conditions/TestEqual", + "propertyPath": "Conditions/UnusedCondition", "category": "Best Practice", - "startLine": 8, + "startLine": 42, "startColumn": 3, - "endLine": 8, - "endColumn": 12, + "endLine": 42, + "endColumn": 18, "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, { "ruleId": "W8001", "severity": "WARN", - "message": "Condition 'TestEqualToShort' is not used by any resource or Fn::If", + "message": "Condition 'TooManyConditions' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "TestEqualToShort", + "logicalId": "TooManyConditions", "entityType": "Condition" }, - "propertyPath": "Conditions/TestEqualToShort", + "propertyPath": "Conditions/TooManyConditions", "category": "Best Practice", - "startLine": 9, + "startLine": 43, "startColumn": 3, - "endLine": 9, - "endColumn": 19, + "endLine": 43, + "endColumn": 20, "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, { "ruleId": "W8001", "severity": "WARN", - "message": "Condition 'TestEqualToLong' is not used by any resource or Fn::If", + "message": "Condition 'HasParam' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "TestEqualToLong", + "logicalId": "HasParam", "entityType": "Condition" }, - "propertyPath": "Conditions/TestEqualToLong", + "propertyPath": "Conditions/HasParam", "category": "Best Practice", - "startLine": 10, + "startLine": 47, "startColumn": 3, - "endLine": 10, - "endColumn": 18, + "endLine": 47, + "endColumn": 11, "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, { "ruleId": "W8001", "severity": "WARN", - "message": "Condition 'Test' is not used by any resource or Fn::If", + "message": "Condition 'NullCondition' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "Test", + "logicalId": "NullCondition", "entityType": "Condition" }, - "propertyPath": "Conditions/Test", + "propertyPath": "Conditions/NullCondition", "category": "Best Practice", - "startLine": 11, + "startLine": 51, "startColumn": 3, - "endLine": 11, - "endColumn": 7, + "endLine": 51, + "endColumn": 16, "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, { - "ruleId": "W8001", + "ruleId": "W9010", "severity": "WARN", - "message": "Condition 'TestWrongType' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", "entity": { - "logicalId": "TestWrongType", - "entityType": "Condition" + "logicalId": "EC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Conditions/TestWrongType", - "category": "Best Practice", - "startLine": 12, - "startColumn": 3, - "endLine": 12, - "endColumn": 16, - "ruleDescription": "Check if Conditions are Used", + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 56, + "startColumn": 7, + "endLine": 56, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, { - "ruleId": "W8001", + "ruleId": "W9053", "severity": "WARN", - "message": "Condition 'TagEnvironments' is not used by any resource or Fn::If", + "message": "Condition 'UnusedCondition' is equivalent to condition 'CreateProdResources' - consider consolidating", + "source": "ENGINE", + "category": "Best Practice", + "startLine": 42, + "startColumn": 3, + "endLine": 42, + "endColumn": 18, + "ruleDescription": "Conditions are semantically equivalent and can be consolidated", + "phase": "PARSE" + }, + { + "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": "TagEnvironments", - "entityType": "Condition" + "logicalId": "NewVolume", + "entityType": "Resource", + "resourceType": "AWS::EC2::Volume" }, - "propertyPath": "Conditions/TagEnvironments", "category": "Best Practice", - "startLine": 13, + "startLine": 76, "startColumn": 3, - "endLine": 13, - "endColumn": 18, - "ruleDescription": "Check if Conditions are Used", + "endLine": 76, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'ToManyFunctions' is not used by any resource or Fn::If", + "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": "ToManyFunctions", - "entityType": "Condition" + "logicalId": "NewVolume", + "entityType": "Resource", + "resourceType": "AWS::EC2::Volume" }, - "propertyPath": "Conditions/ToManyFunctions", "category": "Best Practice", - "startLine": 17, + "startLine": 76, "startColumn": 3, - "endLine": 17, - "endColumn": 18, - "ruleDescription": "Check if Conditions are Used", + "endLine": 76, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'NullEquals' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "NullEquals", - "entityType": "Condition" + "logicalId": "EC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Conditions/NullEquals", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 22, - "startColumn": 3, - "endLine": 22, + "startLine": 56, + "startColumn": 7, + "endLine": 56, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MountPoint", + "entityType": "Resource", + "resourceType": "AWS::EC2::VolumeAttachment" + }, + "propertyPath": "Properties.InstanceId", + "category": "Best Practice", + "startLine": 73, + "startColumn": 7, + "endLine": 73, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'EC2Instance'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VolumeId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MountPoint", + "entityType": "Resource", + "resourceType": "AWS::EC2::VolumeAttachment" + }, + "propertyPath": "Properties.VolumeId", + "category": "Best Practice", + "startLine": 74, + "startColumn": 7, + "endLine": 74, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'NewVolume'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Device' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MountPoint", + "entityType": "Resource", + "resourceType": "AWS::EC2::VolumeAttachment" + }, + "propertyPath": "Properties.Device", + "category": "Best Practice", + "startLine": 75, + "startColumn": 7, + "endLine": 75, "endColumn": 13, - "ruleDescription": "Check if Conditions are Used", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'NewVolume' of type 'AWS::EC2::Volume' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "NewVolume", + "entityType": "Resource", + "resourceType": "AWS::EC2::Volume" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 79, + "startColumn": 5, + "endLine": 79, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CloudFrontDistribution' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "CloudFrontDistribution", + "entityType": "Resource", + "resourceType": "AWS::CloudFront::Distribution" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 85, + "startColumn": 5, + "endLine": 85, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/conditions/equals_not_useful.yaml": { - "filePath": "bad/conditions/equals_not_useful.yaml", + "bad/conditions/and.yaml": { + "filePath": "bad/conditions/and.yaml", "status": "OK", "metadata": { "resourcesScanned": 0, "counts": { "fatal": 1, - "errors": 0, - "warnings": 6, + "errors": 9, + "warnings": 4, "informational": 0, "debug": 0 }, - "suppressed": 0, + "suppressed": 10, "strict": false, "severityLevel": "DEBUG" }, @@ -12945,132 +13050,253 @@ "message": "Resources section must exist and be non-empty", "source": "SCHEMA", "category": "Structure", - "startLine": 11, + "startLine": 23, "startColumn": 1, - "endLine": 11, + "endLine": 23, "endColumn": 10, "ruleDescription": "Resources section must exist and be non-empty", "phase": "SCHEMA" }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'IsTrue' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "E8004", + "severity": "ERROR", + "message": "Fn::And: 'And' is not of type 'array'", + "source": "SCHEMA", "entity": { - "logicalId": "IsTrue", + "logicalId": "TestAndString", "entityType": "Condition" }, - "propertyPath": "Conditions/IsTrue", - "category": "Best Practice", - "startLine": 8, + "propertyPath": "Conditions/TestAndString/Fn::And", + "category": "Intrinsic Function", + "startLine": 4, "startColumn": 3, - "endLine": 8, - "endColumn": 9, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", + "phase": "PARSE" }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'IsFalse' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "E8004", + "severity": "ERROR", + "message": "Fn::And: expected minimum item count: 2, found: 1", + "source": "SCHEMA", "entity": { - "logicalId": "IsFalse", + "logicalId": "TestAndToLittle", "entityType": "Condition" }, - "propertyPath": "Conditions/IsFalse", - "category": "Best Practice", - "startLine": 9, + "propertyPath": "Conditions/TestAndToLittle/Fn::And", + "category": "Intrinsic Function", + "startLine": 5, "startColumn": 3, - "endLine": 9, + "endLine": 5, "endColumn": 10, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" + "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", + "phase": "PARSE" + }, + { + "ruleId": "E8004", + "severity": "ERROR", + "message": "Fn::And: expected maximum item count: 10, found: 11", + "source": "SCHEMA", + "entity": { + "logicalId": "TestAndToMany", + "entityType": "Condition" + }, + "propertyPath": "Conditions/TestAndToMany/Fn::And", + "category": "Intrinsic Function", + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 12, + "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", + "phase": "PARSE" + }, + { + "ruleId": "E8004", + "severity": "ERROR", + "message": "Fn::And: element 0: {'Condition': 'TestAndToMany', 'Extra': 'ThisIsBad'} is not of type 'boolean'", + "source": "SCHEMA", + "entity": { + "logicalId": "TestAndBadCondition", + "entityType": "Condition" + }, + "propertyPath": "Conditions/TestAndBadCondition/Fn::And", + "category": "Intrinsic Function", + "startLine": 19, + "startColumn": 3, + "endLine": 19, + "endColumn": 10, + "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", + "phase": "PARSE" + }, + { + "ruleId": "E8004", + "severity": "ERROR", + "message": "Fn::And: element 1: {'Bad': 'TestAndToMany'} is not of type 'boolean'", + "source": "SCHEMA", + "entity": { + "logicalId": "TestAndBadCondition", + "entityType": "Condition" + }, + "propertyPath": "Conditions/TestAndBadCondition/Fn::And", + "category": "Intrinsic Function", + "startLine": 19, + "startColumn": 3, + "endLine": 19, + "endColumn": 10, + "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", + "phase": "PARSE" + }, + { + "ruleId": "E8004", + "severity": "ERROR", + "message": "Fn::And: element 0: 'Test' is not of type 'boolean'", + "source": "SCHEMA", + "entity": { + "logicalId": "TestAndBadArray", + "entityType": "Condition" + }, + "propertyPath": "Conditions/TestAndBadArray/Fn::And", + "category": "Intrinsic Function", + "startLine": 20, + "startColumn": 3, + "endLine": 20, + "endColumn": 10, + "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", + "phase": "PARSE" + }, + { + "ruleId": "E8004", + "severity": "ERROR", + "message": "Fn::And: element 1: 'Test2' is not of type 'boolean'", + "source": "SCHEMA", + "entity": { + "logicalId": "TestAndBadArray", + "entityType": "Condition" + }, + "propertyPath": "Conditions/TestAndBadArray/Fn::And", + "category": "Intrinsic Function", + "startLine": 20, + "startColumn": 3, + "endLine": 20, + "endColumn": 10, + "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", + "phase": "PARSE" + }, + { + "ruleId": "E8004", + "severity": "ERROR", + "message": "Fn::And: null is not of type 'array'", + "source": "SCHEMA", + "entity": { + "logicalId": "TestAndNull", + "entityType": "Condition" + }, + "propertyPath": "Conditions/TestAndNull/Fn::And", + "category": "Intrinsic Function", + "startLine": 22, + "startColumn": 5, + "endLine": 22, + "endColumn": 12, + "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", + "phase": "PARSE" + }, + { + "ruleId": "E9106", + "severity": "ERROR", + "message": "Circular dependency in conditions: TestAndToLittle -> TestAndToMany", + "source": "SCHEMA", + "category": "Structure", + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Circular dependency in condition definitions", + "phase": "PARSE" }, { "ruleId": "W8001", "severity": "WARN", - "message": "Condition 'IsDevEnvironment' is not used by any resource or Fn::If", + "message": "Condition 'TestAndString' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "IsDevEnvironment", + "logicalId": "TestAndString", "entityType": "Condition" }, - "propertyPath": "Conditions/IsDevEnvironment", + "propertyPath": "Conditions/TestAndString", "category": "Best Practice", - "startLine": 10, + "startLine": 4, "startColumn": 3, - "endLine": 10, - "endColumn": 19, + "endLine": 4, + "endColumn": 16, "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, { - "ruleId": "W8003", + "ruleId": "W8001", "severity": "WARN", - "message": "Fn::Equals in condition 'IsTrue' will always return True", + "message": "Condition 'TestAndBadCondition' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "IsTrue", + "logicalId": "TestAndBadCondition", "entityType": "Condition" }, - "propertyPath": "Conditions/IsTrue", + "propertyPath": "Conditions/TestAndBadCondition", "category": "Best Practice", - "startLine": 8, + "startLine": 19, "startColumn": 3, - "endLine": 8, - "endColumn": 9, - "ruleDescription": "Fn::Equals will always return true or false", - "phase": "PARSE" + "endLine": 19, + "endColumn": 22, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { - "ruleId": "W8003", + "ruleId": "W8001", "severity": "WARN", - "message": "Fn::Equals in condition 'IsFalse' will always return False", + "message": "Condition 'TestAndBadArray' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "IsFalse", + "logicalId": "TestAndBadArray", "entityType": "Condition" }, - "propertyPath": "Conditions/IsFalse", + "propertyPath": "Conditions/TestAndBadArray", "category": "Best Practice", - "startLine": 9, + "startLine": 20, "startColumn": 3, - "endLine": 9, - "endColumn": 10, - "ruleDescription": "Fn::Equals will always return true or false", - "phase": "PARSE" + "endLine": 20, + "endColumn": 18, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { - "ruleId": "W8003", + "ruleId": "W8001", "severity": "WARN", - "message": "Fn::Equals in condition 'IsDevEnvironment' will always return True", + "message": "Condition 'TestAndNull' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "IsDevEnvironment", + "logicalId": "TestAndNull", "entityType": "Condition" }, - "propertyPath": "Conditions/IsDevEnvironment", + "propertyPath": "Conditions/TestAndNull", "category": "Best Practice", - "startLine": 10, + "startLine": 21, "startColumn": 3, - "endLine": 10, - "endColumn": 19, - "ruleDescription": "Fn::Equals will always return true or false", - "phase": "PARSE" + "endLine": 21, + "endColumn": 14, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" } ] }, - "bad/conditions/properties_fn_if.json": { - "filePath": "bad/conditions/properties_fn_if.json", + "bad/conditions/condition_functions.json": { + "filePath": "bad/conditions/condition_functions.json", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 0, - "errors": 3, - "warnings": 0, + "fatal": 2, + "errors": 15, + "warnings": 14, "informational": 1, "debug": 0 }, @@ -13080,864 +13306,877 @@ }, "diagnostics": [ { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-1234567' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "F0013", + "severity": "FATAL", + "message": "Fn::If: 'string' is not of type 'array'", + "source": "SCHEMA", "entity": { - "logicalId": "myInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "TestIfNotArray", + "entityType": "Condition" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Conditions/TestIfNotArray/Fn::If", "category": "Intrinsic Function", - "startLine": 15, - "startColumn": 13, - "endLine": 15, - "endColumn": 24, - "conditionScenario": { - "IsProduction": true + "startLine": 31, + "startColumn": 28, + "endLine": 31, + "endColumn": 35, + "ruleDescription": "Fn::If must have exactly 3 elements", + "phase": "PARSE" + }, + { + "ruleId": "F0013", + "severity": "FATAL", + "message": "Fn::If: must have exactly 3 elements, got 2", + "source": "SCHEMA", + "entity": { + "logicalId": "TestIfWrongCount", + "entityType": "Condition" }, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-1234567" - } + "propertyPath": "Conditions/TestIfWrongCount/Fn::If", + "category": "Intrinsic Function", + "startLine": 32, + "startColumn": 30, + "endLine": 32, + "endColumn": 37, + "ruleDescription": "Fn::If must have exactly 3 elements", + "phase": "PARSE" }, { - "ruleId": "E1152", + "ruleId": "E8003", "severity": "ERROR", - "message": "'ami-123abcd' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "message": "Fn::Equals: 'Value' is not of type 'array'", + "source": "SCHEMA", "entity": { - "logicalId": "myInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "TestEqualNotArray", + "entityType": "Condition" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Conditions/TestEqualNotArray/Fn::Equals", "category": "Intrinsic Function", - "startLine": 15, - "startColumn": 13, - "endLine": 15, - "endColumn": 24, - "conditionScenario": { - "IsDev": false, - "IsProduction": false + "startLine": 19, + "startColumn": 31, + "endLine": 19, + "endColumn": 42, + "ruleDescription": "Fn::Equals must take exactly two scalar operands", + "phase": "PARSE" + }, + { + "ruleId": "E8003", + "severity": "ERROR", + "message": "Fn::Equals: expected minimum item count: 2, found: 1", + "source": "SCHEMA", + "entity": { + "logicalId": "TestEqualTooShort", + "entityType": "Condition" }, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-1234567" - } + "propertyPath": "Conditions/TestEqualTooShort/Fn::Equals", + "category": "Intrinsic Function", + "startLine": 20, + "startColumn": 31, + "endLine": 20, + "endColumn": 42, + "ruleDescription": "Fn::Equals must take exactly two scalar operands", + "phase": "PARSE" }, { - "ruleId": "E1152", + "ruleId": "E8003", "severity": "ERROR", - "message": "'ami-abcdefg' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "message": "Fn::Equals: expected maximum item count: 2, found: 3", + "source": "SCHEMA", "entity": { - "logicalId": "myInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "TestEqualTooLong", + "entityType": "Condition" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Conditions/TestEqualTooLong/Fn::Equals", "category": "Intrinsic Function", - "startLine": 15, + "startLine": 21, + "startColumn": 30, + "endLine": 21, + "endColumn": 41, + "ruleDescription": "Fn::Equals must take exactly two scalar operands", + "phase": "PARSE" + }, + { + "ruleId": "E8003", + "severity": "ERROR", + "message": "Fn::Equals: argument 0: [{'Ref': 'AWS::Region'}] is not of type 'string'", + "source": "SCHEMA", + "entity": { + "logicalId": "TestEqualBadArgs", + "entityType": "Condition" + }, + "propertyPath": "Conditions/TestEqualBadArgs/Fn::Equals", + "category": "Intrinsic Function", + "startLine": 23, "startColumn": 13, - "endLine": 15, + "endLine": 23, "endColumn": 24, - "conditionScenario": { - "IsDev": true, - "IsProduction": false - }, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-1234567" - } + "ruleDescription": "Fn::Equals must take exactly two scalar operands", + "phase": "PARSE" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E8003", + "severity": "ERROR", + "message": "Fn::Equals: argument 1: {'Bad': 'Value'} is not of type 'string'", + "source": "SCHEMA", "entity": { - "logicalId": "myInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "TestEqualBadArgs", + "entityType": "Condition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 15, + "propertyPath": "Conditions/TestEqualBadArgs/Fn::Equals", + "category": "Intrinsic Function", + "startLine": 23, "startColumn": 13, - "endLine": 15, + "endLine": 23, "endColumn": 24, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/core/E3001_resource_shape.yaml": { - "filePath": "bad/core/E3001_resource_shape.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 0, - "errors": 9, - "warnings": 0, - "informational": 8, - "debug": 0 + "ruleDescription": "Fn::Equals must take exactly two scalar operands", + "phase": "PARSE" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3001", + "ruleId": "E8003", "severity": "ERROR", - "message": "Resource 'MissingType' is missing required property 'Type'", - "source": "CFN_LINT", + "message": "Fn::Equals: null is not of type 'array'", + "source": "SCHEMA", "entity": { - "logicalId": "MissingType", - "entityType": "Resource", - "resourceType": "" + "logicalId": "TestEqualNull", + "entityType": "Condition" }, - "category": "Resource", - "startLine": 5, - "startColumn": 3, - "endLine": 5, - "endColumn": 14, - "ruleDescription": "Basic CloudFormation Resource Check", + "propertyPath": "Conditions/TestEqualNull/Fn::Equals", + "category": "Intrinsic Function", + "startLine": 28, + "startColumn": 27, + "endLine": 28, + "endColumn": 38, + "ruleDescription": "Fn::Equals must take exactly two scalar operands", "phase": "PARSE" }, { - "ruleId": "E3001", + "ruleId": "E8004", "severity": "ERROR", - "message": "Resource 'NonObjectBody' body must be an object, got a string", - "source": "CFN_LINT", + "message": "Fn::And: 'And' is not of type 'array'", + "source": "SCHEMA", "entity": { - "logicalId": "NonObjectBody", - "entityType": "Resource", - "resourceType": "" + "logicalId": "TestAndString", + "entityType": "Condition" }, - "category": "Resource", - "startLine": 8, - "startColumn": 3, - "endLine": 8, - "endColumn": 16, - "ruleDescription": "Basic CloudFormation Resource Check", + "propertyPath": "Conditions/TestAndString/Fn::And", + "category": "Intrinsic Function", + "startLine": 9, + "startColumn": 27, + "endLine": 9, + "endColumn": 35, + "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", "phase": "PARSE" }, { - "ruleId": "E3001", + "ruleId": "E8004", "severity": "ERROR", - "message": "Resource 'NumericType' property 'Type' must be a string", - "source": "CFN_LINT", + "message": "Fn::And: expected minimum item count: 2, found: 1", + "source": "SCHEMA", "entity": { - "logicalId": "NumericType", - "entityType": "Resource", - "resourceType": "" + "logicalId": "TestAndToLittle", + "entityType": "Condition" }, - "category": "Resource", + "propertyPath": "Conditions/TestAndToLittle/Fn::And", + "category": "Intrinsic Function", "startLine": 10, - "startColumn": 5, + "startColumn": 29, "endLine": 10, - "endColumn": 9, - "ruleDescription": "Basic CloudFormation Resource Check", + "endColumn": 37, + "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", "phase": "PARSE" }, { - "ruleId": "E3001", + "ruleId": "E8004", "severity": "ERROR", - "message": "Resource 'UnknownAttribute' has invalid property 'Bogus'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", - "source": "CFN_LINT", + "message": "Fn::And: element 0: 'Test' is not of type 'boolean'", + "source": "SCHEMA", "entity": { - "logicalId": "UnknownAttribute", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "logicalId": "TestAndBadArray", + "entityType": "Condition" }, - "category": "Resource", - "startLine": 15, - "startColumn": 5, - "endLine": 15, - "endColumn": 10, - "ruleDescription": "Basic CloudFormation Resource Check", + "propertyPath": "Conditions/TestAndBadArray/Fn::And", + "category": "Intrinsic Function", + "startLine": 11, + "startColumn": 29, + "endLine": 11, + "endColumn": 37, + "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", "phase": "PARSE" }, { - "ruleId": "E3001", + "ruleId": "E8004", "severity": "ERROR", - "message": "Resource 'BadConditionType' property 'Condition' must be a string", - "source": "CFN_LINT", + "message": "Fn::And: element 1: 'Test2' is not of type 'boolean'", + "source": "SCHEMA", "entity": { - "logicalId": "BadConditionType", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "logicalId": "TestAndBadArray", + "entityType": "Condition" }, - "category": "Resource", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 14, - "ruleDescription": "Basic CloudFormation Resource Check", + "propertyPath": "Conditions/TestAndBadArray/Fn::And", + "category": "Intrinsic Function", + "startLine": 11, + "startColumn": 29, + "endLine": 11, + "endColumn": 37, + "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", "phase": "PARSE" }, { - "ruleId": "E3001", + "ruleId": "E8004", "severity": "ERROR", - "message": "Resource 'BadDependsOnType' property 'DependsOn' must be a string or list of strings", - "source": "CFN_LINT", + "message": "Fn::And: element 0: {'Condition': 'TestAndString', 'Extra': 'ThisIsBad'} is not of type 'boolean'", + "source": "SCHEMA", "entity": { - "logicalId": "BadDependsOnType", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "logicalId": "TestAndBadCondition", + "entityType": "Condition" }, - "category": "Resource", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 14, - "ruleDescription": "Basic CloudFormation Resource Check", + "propertyPath": "Conditions/TestAndBadCondition/Fn::And", + "category": "Intrinsic Function", + "startLine": 13, + "startColumn": 13, + "endLine": 13, + "endColumn": 21, + "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", "phase": "PARSE" }, { - "ruleId": "E3019", + "ruleId": "E8004", "severity": "ERROR", - "message": "Primary identifiers {'BucketName': 'my-bucket'} should have unique values across the resources {'BadDependsOnType', 'UnknownAttribute'}", - "source": "CFN_LINT", + "message": "Fn::And: element 1: {'Bad': 'TestAndString'} is not of type 'boolean'", + "source": "SCHEMA", "entity": { - "logicalId": "UnknownAttribute", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "logicalId": "TestAndBadCondition", + "entityType": "Condition" }, - "propertyPath": "Properties.BucketName", - "category": "Resource", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 17, - "ruleDescription": "Validate that all resources have unique primary identifiers", - "phase": "LINT" + "propertyPath": "Conditions/TestAndBadCondition/Fn::And", + "category": "Intrinsic Function", + "startLine": 13, + "startColumn": 13, + "endLine": 13, + "endColumn": 21, + "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", + "phase": "PARSE" }, { - "ruleId": "E3019", + "ruleId": "E8004", "severity": "ERROR", - "message": "Primary identifiers {'BucketName': 'my-bucket'} should have unique values across the resources {'BadDependsOnType', 'UnknownAttribute'}", - "source": "CFN_LINT", + "message": "Fn::And: null is not of type 'array'", + "source": "SCHEMA", "entity": { - "logicalId": "BadDependsOnType", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "logicalId": "TestAndNull", + "entityType": "Condition" }, - "propertyPath": "Properties.BucketName", - "category": "Resource", - "startLine": 27, - "startColumn": 7, - "endLine": 27, - "endColumn": 17, - "ruleDescription": "Validate that all resources have unique primary identifiers", - "phase": "LINT" + "propertyPath": "Conditions/TestAndNull/Fn::And", + "category": "Intrinsic Function", + "startLine": 18, + "startColumn": 25, + "endLine": 18, + "endColumn": 33, + "ruleDescription": "Fn::And must take between 2 and 10 boolean conditions", + "phase": "PARSE" }, { - "ruleId": "E8002", + "ruleId": "E8005", "severity": "ERROR", - "message": "Condition 'SomeCondition' referenced by resource 'ValidResource' is not defined", + "message": "Fn::Not: must have exactly 1 element, got 0", "source": "SCHEMA", "entity": { - "logicalId": "ValidResource", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "logicalId": "TestNotEmpty", + "entityType": "Condition" }, - "category": "Structure", - "startLine": 28, - "startColumn": 3, - "endLine": 28, - "endColumn": 16, - "ruleDescription": "Condition referenced by resource is not defined", + "propertyPath": "Conditions/TestNotEmpty/Fn::Not", + "category": "Intrinsic Function", + "startLine": 29, + "startColumn": 26, + "endLine": 29, + "endColumn": 34, + "ruleDescription": "Fn::Not must take exactly one boolean condition", "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E8005", + "severity": "ERROR", + "message": "Fn::Not: null is not of type 'array'", + "source": "SCHEMA", "entity": { - "logicalId": "UnknownAttribute", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "logicalId": "TestNotNull", + "entityType": "Condition" }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Conditions/TestNotNull/Fn::Not", + "category": "Intrinsic Function", + "startLine": 30, + "startColumn": 25, + "endLine": 30, + "endColumn": 33, + "ruleDescription": "Fn::Not must take exactly one boolean condition", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'Environment' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "BadConditionType", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "logicalId": "Environment", + "entityType": "Parameter" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Parameters/Environment", "category": "Best Practice", - "startLine": 22, - "startColumn": 7, - "endLine": 22, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 4, + "startColumn": 9, + "endLine": 4, + "endColumn": 21, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'TestAndToLittle' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "BadDependsOnType", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "logicalId": "TestAndToLittle", + "entityType": "Condition" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Conditions/TestAndToLittle", "category": "Best Practice", - "startLine": 27, - "startColumn": 7, - "endLine": 27, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 10, + "startColumn": 9, + "endLine": 10, + "endColumn": 25, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'TestAndBadArray' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "ValidResource", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "logicalId": "TestAndBadArray", + "entityType": "Condition" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Conditions/TestAndBadArray", "category": "Best Practice", - "startLine": 34, - "startColumn": 7, - "endLine": 34, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'UnknownAttribute' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "startLine": 11, + "startColumn": 9, + "endLine": 11, + "endColumn": 25, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" + }, + { + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'TestAndBadCondition' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "UnknownAttribute", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "logicalId": "TestAndBadCondition", + "entityType": "Condition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Conditions/TestAndBadCondition", "category": "Best Practice", - "startLine": 16, - "startColumn": 5, - "endLine": 16, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 12, + "startColumn": 9, + "endLine": 12, + "endColumn": 29, + "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BadConditionType' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'TestAndNull' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "BadConditionType", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "logicalId": "TestAndNull", + "entityType": "Condition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Conditions/TestAndNull", + "category": "Best Practice", + "startLine": 18, + "startColumn": 9, + "endLine": 18, + "endColumn": 21, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" + }, + { + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'TestEqualNotArray' is not used by any resource or Fn::If", + "source": "CFN_LINT", + "entity": { + "logicalId": "TestEqualNotArray", + "entityType": "Condition" + }, + "propertyPath": "Conditions/TestEqualNotArray", + "category": "Best Practice", + "startLine": 19, + "startColumn": 9, + "endLine": 19, + "endColumn": 27, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" + }, + { + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'TestEqualTooShort' is not used by any resource or Fn::If", + "source": "CFN_LINT", + "entity": { + "logicalId": "TestEqualTooShort", + "entityType": "Condition" + }, + "propertyPath": "Conditions/TestEqualTooShort", + "category": "Best Practice", + "startLine": 20, + "startColumn": 9, + "endLine": 20, + "endColumn": 27, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" + }, + { + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'TestEqualTooLong' is not used by any resource or Fn::If", + "source": "CFN_LINT", + "entity": { + "logicalId": "TestEqualTooLong", + "entityType": "Condition" + }, + "propertyPath": "Conditions/TestEqualTooLong", "category": "Best Practice", "startLine": 21, - "startColumn": 5, + "startColumn": 9, "endLine": 21, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endColumn": 26, + "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BadDependsOnType' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'TestEqualBadArgs' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "BadDependsOnType", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "logicalId": "TestEqualBadArgs", + "entityType": "Condition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Conditions/TestEqualBadArgs", "category": "Best Practice", - "startLine": 26, - "startColumn": 5, - "endLine": 26, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 22, + "startColumn": 9, + "endLine": 22, + "endColumn": 26, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" + }, + { + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'TestEqualNull' is not used by any resource or Fn::If", + "source": "CFN_LINT", + "entity": { + "logicalId": "TestEqualNull", + "entityType": "Condition" + }, + "propertyPath": "Conditions/TestEqualNull", + "category": "Best Practice", + "startLine": 28, + "startColumn": 9, + "endLine": 28, + "endColumn": 23, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" + }, + { + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'TestNotEmpty' is not used by any resource or Fn::If", + "source": "CFN_LINT", + "entity": { + "logicalId": "TestNotEmpty", + "entityType": "Condition" + }, + "propertyPath": "Conditions/TestNotEmpty", + "category": "Best Practice", + "startLine": 29, + "startColumn": 9, + "endLine": 29, + "endColumn": 22, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" + }, + { + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'TestNotNull' is not used by any resource or Fn::If", + "source": "CFN_LINT", + "entity": { + "logicalId": "TestNotNull", + "entityType": "Condition" + }, + "propertyPath": "Conditions/TestNotNull", + "category": "Best Practice", + "startLine": 30, + "startColumn": 9, + "endLine": 30, + "endColumn": 21, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" + }, + { + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'TestIfNotArray' is not used by any resource or Fn::If", + "source": "CFN_LINT", + "entity": { + "logicalId": "TestIfNotArray", + "entityType": "Condition" + }, + "propertyPath": "Conditions/TestIfNotArray", + "category": "Best Practice", + "startLine": 31, + "startColumn": 9, + "endLine": 31, + "endColumn": 24, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" + }, + { + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'TestIfWrongCount' is not used by any resource or Fn::If", + "source": "CFN_LINT", + "entity": { + "logicalId": "TestIfWrongCount", + "entityType": "Condition" + }, + "propertyPath": "Conditions/TestIfWrongCount", + "category": "Best Practice", + "startLine": 32, + "startColumn": 9, + "endLine": 32, + "endColumn": 26, + "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ValidResource' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'DummyBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ValidResource", + "logicalId": "DummyBucket", "entityType": "Resource", "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 33, - "startColumn": 5, - "endLine": 33, - "endColumn": 15, + "startLine": 35, + "startColumn": 9, + "endLine": 35, + "endColumn": 21, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/core/conditions.yaml": { - "filePath": "bad/core/conditions.yaml", + "bad/conditions/equals.yaml": { + "filePath": "bad/conditions/equals.yaml", "status": "OK", "metadata": { - "resourcesScanned": 8, + "resourcesScanned": 0, "counts": { - "fatal": 4, - "errors": 11, - "warnings": 3, - "informational": 17, + "fatal": 1, + "errors": 8, + "warnings": 8, + "informational": 0, "debug": 0 }, - "suppressed": 2, + "suppressed": 0, "strict": false, "severityLevel": "DEBUG" }, "diagnostics": [ { - "ruleId": "F0013", + "ruleId": "F0001", "severity": "FATAL", - "message": "Fn::If: {'Fn::If': ['isPrimary', 't3.2xlarge', 't3.xlarge']} is not of type 'array'", + "message": "Resources section must exist and be non-empty", "source": "SCHEMA", - "entity": { - "logicalId": "myInstance4", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.InstanceType.Fn::If", - "category": "Intrinsic Function", - "startLine": 67, - "startColumn": 9, - "endLine": 67, - "endColumn": 15, - "ruleDescription": "Fn::If must have exactly 3 elements", - "phase": "PARSE" + "category": "Structure", + "startLine": 24, + "startColumn": 1, + "endLine": 24, + "endColumn": 10, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" }, { - "ruleId": "F0013", - "severity": "FATAL", - "message": "Fn::If: must have exactly 3 elements, got 2", + "ruleId": "E8003", + "severity": "ERROR", + "message": "Fn::Equals: 'Value' is not of type 'array'", "source": "SCHEMA", "entity": { - "logicalId": "AMIIDLookup", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "logicalId": "TestEqual", + "entityType": "Condition" }, - "propertyPath": "Properties.Role.Fn::If", + "propertyPath": "Conditions/TestEqual/Fn::Equals", "category": "Intrinsic Function", - "startLine": 100, - "startColumn": 9, - "endLine": 100, - "endColumn": 15, - "ruleDescription": "Fn::If must have exactly 3 elements", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 13, + "ruleDescription": "Fn::Equals must take exactly two scalar operands", "phase": "PARSE" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'DeviceName' is a required property", + "ruleId": "E8003", + "severity": "ERROR", + "message": "Fn::Equals: expected minimum item count: 2, found: 1", "source": "SCHEMA", "entity": { - "logicalId": "myInstance2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "TestEqualToShort", + "entityType": "Condition" }, - "propertyPath": "Properties.BlockDeviceMappings.{}", - "suggestedFix": "Add the required property 'DeviceName'", - "category": "Schema", - "startLine": 36, - "startColumn": 7, - "endLine": 36, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Required property missing", - "phase": "SCHEMA", - "context": { - "resolutionSource": "Fn::If on condition 'isPrimaryAndProduction'" - } + "propertyPath": "Conditions/TestEqualToShort/Fn::Equals", + "category": "Intrinsic Function", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 13, + "ruleDescription": "Fn::Equals must take exactly two scalar operands", + "phase": "PARSE" }, { - "ruleId": "F3014", - "severity": "FATAL", - "message": "Exactly one of ['VirtualName', 'Ebs', 'NoDevice'] must be specified", + "ruleId": "E8003", + "severity": "ERROR", + "message": "Fn::Equals: expected maximum item count: 2, found: 3", "source": "SCHEMA", "entity": { - "logicalId": "myInstance2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.BlockDeviceMappings.{}", - "category": "Schema", - "startLine": 36, - "startColumn": 7, - "endLine": 36, - "endColumn": 26, - "conditionScenario": { - "isPrimary": true, - "isPrimaryAndProduction": true + "logicalId": "TestEqualToLong", + "entityType": "Condition" }, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Exactly one of properties required (requiredXor)", - "phase": "SCHEMA", - "context": { - "resolutionSource": "Fn::If on condition 'isPrimaryAndProduction'" - } + "propertyPath": "Conditions/TestEqualToLong/Fn::Equals", + "category": "Intrinsic Function", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 13, + "ruleDescription": "Fn::Equals must take exactly two scalar operands", + "phase": "PARSE" }, { - "ruleId": "E1151", + "ruleId": "E8003", "severity": "ERROR", - "message": "'vpc-123456' does not match format 'AWS::EC2::VPC.Id'", - "source": "CFN_LINT", + "message": "Fn::Equals: argument 0: [{'Ref': 'AWS::Region'}] is not of type 'string'", + "source": "SCHEMA", "entity": { - "logicalId": "mySubnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "logicalId": "Test", + "entityType": "Condition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Conditions/Test/Fn::Equals", "category": "Intrinsic Function", - "startLine": 26, - "startColumn": 7, - "endLine": 26, - "endColumn": 12, - "ruleDescription": "Validate VPC id format", - "phase": "SCHEMA", - "context": { - "actualValue": "vpc-123456" - } + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 13, + "ruleDescription": "Fn::Equals must take exactly two scalar operands", + "phase": "PARSE" }, { - "ruleId": "E1152", + "ruleId": "E8003", "severity": "ERROR", - "message": "'ami-123456' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "message": "Fn::Equals: argument 1: {'Bad': 'Value'} is not of type 'string'", + "source": "SCHEMA", "entity": { - "logicalId": "myInstance1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "Test", + "entityType": "Condition" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Conditions/Test/Fn::Equals", "category": "Intrinsic Function", - "startLine": 31, - "startColumn": 7, - "endLine": 31, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-123456" - } + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 13, + "ruleDescription": "Fn::Equals must take exactly two scalar operands", + "phase": "PARSE" }, { - "ruleId": "E1152", + "ruleId": "E8003", "severity": "ERROR", - "message": "'ami-123456' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "message": "Fn::Equals: argument 1: ['Not a List'] is not of type 'string'", + "source": "SCHEMA", "entity": { - "logicalId": "myInstance2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "TestWrongType", + "entityType": "Condition" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Conditions/TestWrongType/Fn::Equals", "category": "Intrinsic Function", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-123456" - } + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 13, + "ruleDescription": "Fn::Equals must take exactly two scalar operands", + "phase": "PARSE" }, { - "ruleId": "E1152", + "ruleId": "E8003", "severity": "ERROR", - "message": "'ami-1234567' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "message": "Fn::Equals: argument 0: {'Ref': 'AWS::Region', 'Fn::Select': ['Environments', 0]} is not of type 'string'", + "source": "SCHEMA", "entity": { - "logicalId": "myInstance3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "ToManyFunctions", + "entityType": "Condition" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Conditions/ToManyFunctions/Fn::Equals", "category": "Intrinsic Function", - "startLine": 51, + "startLine": 18, "startColumn": 5, - "endLine": 51, + "endLine": 18, "endColumn": 15, - "conditionScenario": { - "isPrimaryAndProduction": true - }, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-1234567" - } + "ruleDescription": "Fn::Equals must take exactly two scalar operands", + "phase": "PARSE" }, { - "ruleId": "E1152", + "ruleId": "E8003", "severity": "ERROR", - "message": "'ami-123abcd' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "message": "Fn::Equals: null is not of type 'array'", + "source": "SCHEMA", "entity": { - "logicalId": "myInstance3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "NullEquals", + "entityType": "Condition" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Conditions/NullEquals/Fn::Equals", "category": "Intrinsic Function", - "startLine": 51, + "startLine": 23, "startColumn": 5, - "endLine": 51, + "endLine": 23, "endColumn": 15, - "conditionScenario": { - "isDevelopment": false, - "isPrimaryAndProduction": false - }, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-1234567" - } + "ruleDescription": "Fn::Equals must take exactly two scalar operands", + "phase": "PARSE" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-abcdefg' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "myInstance3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 51, - "startColumn": 5, - "endLine": 51, - "endColumn": 15, - "conditionScenario": { - "isDevelopment": true, - "isPrimaryAndProduction": false - }, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-1234567" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-123456' does not match format 'AWS::EC2::Image.Id'", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'TestEqual' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "myInstance4", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 65, - "startColumn": 7, - "endLine": 65, - "endColumn": 14, - "conditionScenario": { - "isProduction": true + "logicalId": "TestEqual", + "entityType": "Condition" }, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-123456", - "resolutionSource": "Fn::If on condition 'isProduction'" - } + "propertyPath": "Conditions/TestEqual", + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 12, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-abcdef' does not match format 'AWS::EC2::Image.Id'", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'TestEqualToShort' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "myInstance4", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 65, - "startColumn": 7, - "endLine": 65, - "endColumn": 14, - "conditionScenario": { - "isProduction": false + "logicalId": "TestEqualToShort", + "entityType": "Condition" }, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-123456", - "resolutionSource": "Fn::If on condition 'isProduction'" - } + "propertyPath": "Conditions/TestEqualToShort", + "category": "Best Practice", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 19, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { - "ruleId": "E1154", - "severity": "ERROR", - "message": "'abc-123456' does not match format 'AWS::EC2::Subnet.Id'", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'TestEqualToLong' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "myInstance1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.SubnetId", - "category": "Intrinsic Function", - "startLine": 30, - "startColumn": 7, - "endLine": 30, - "endColumn": 15, - "conditionScenario": { - "isDevelopment": false + "logicalId": "TestEqualToLong", + "entityType": "Condition" }, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate VPC subnet id format", - "phase": "SCHEMA", - "context": { - "actualValue": "abc-123456", - "resolutionSource": "Fn::If on condition 'isDevelopment'" - } + "propertyPath": "Conditions/TestEqualToLong", + "category": "Best Practice", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 18, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'Test' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "AMIIDLookup", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "logicalId": "Test", + "entityType": "Condition" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 106, - "startColumn": 7, - "endLine": 106, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs4.3", - "lifecycle": "end-of-life" - } + "propertyPath": "Conditions/Test", + "category": "Best Practice", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 7, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { - "ruleId": "E3715", - "severity": "ERROR", - "message": "'/dev/hda' is not a valid ephemeral device name. Expected format is 'ephemeralN' where N is 0-23", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'TestWrongType' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "myInstance2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "TestWrongType", + "entityType": "Condition" }, - "propertyPath": "Properties.BlockDeviceMappings.0.VirtualName", - "category": "Resource", - "startLine": 36, - "startColumn": 7, - "endLine": 36, - "endColumn": 26, - "ruleDescription": "VirtualName must use ephemeral device format when Ebs is absent", + "propertyPath": "Conditions/TestWrongType", + "category": "Best Practice", + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 16, + "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, { - "ruleId": "W1028", + "ruleId": "W8001", "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'isPrimary' to False. Where existing status for condition 'isPrimaryAndProduction' is True", + "message": "Condition 'TagEnvironments' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "myInstance2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "TagEnvironments", + "entityType": "Condition" }, - "propertyPath": "Properties.BlockDeviceMappings.Fn::If.1.0.VirtualName.Fn::If.2", + "propertyPath": "Conditions/TagEnvironments", "category": "Best Practice", - "startLine": 43, - "startColumn": 19, - "endLine": 43, - "endColumn": 20, - "ruleDescription": "Check Fn::If has a path that cannot be reached", + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 18, + "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, { "ruleId": "W8001", "severity": "WARN", - "message": "Condition 'isNotProduction' is not used by any resource or Fn::If", + "message": "Condition 'ToManyFunctions' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "isNotProduction", + "logicalId": "ToManyFunctions", "entityType": "Condition" }, - "propertyPath": "Conditions/isNotProduction", + "propertyPath": "Conditions/ToManyFunctions", "category": "Best Practice", "startLine": 17, "startColumn": 3, @@ -13949,223 +14188,501 @@ { "ruleId": "W8001", "severity": "WARN", - "message": "Condition 'isPrimaryAndProdOrStage' is not used by any resource or Fn::If", + "message": "Condition 'NullEquals' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "isPrimaryAndProdOrStage", + "logicalId": "NullEquals", "entityType": "Condition" }, - "propertyPath": "Conditions/isPrimaryAndProdOrStage", + "propertyPath": "Conditions/NullEquals", "category": "Best Practice", - "startLine": 19, + "startLine": 22, "startColumn": 3, - "endLine": 19, - "endColumn": 26, + "endLine": 22, + "endColumn": 13, "ruleDescription": "Check if Conditions are Used", "phase": "LINT" + } + ] + }, + "bad/conditions/equals_not_useful.yaml": { + "filePath": "bad/conditions/equals_not_useful.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 6, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "mySubnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 25, - "startColumn": 7, - "endLine": 25, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "startLine": 11, + "startColumn": 1, + "endLine": 11, + "endColumn": 10, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'IsTrue' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "mySubnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "logicalId": "IsTrue", + "entityType": "Condition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Conditions/IsTrue", "category": "Best Practice", - "startLine": 26, - "startColumn": 7, - "endLine": 26, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 9, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'IsFalse' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "myInstance1", + "logicalId": "IsFalse", + "entityType": "Condition" + }, + "propertyPath": "Conditions/IsFalse", + "category": "Best Practice", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 10, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" + }, + { + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'IsDevEnvironment' is not used by any resource or Fn::If", + "source": "CFN_LINT", + "entity": { + "logicalId": "IsDevEnvironment", + "entityType": "Condition" + }, + "propertyPath": "Conditions/IsDevEnvironment", + "category": "Best Practice", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 19, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" + }, + { + "ruleId": "W8003", + "severity": "WARN", + "message": "Fn::Equals in condition 'IsTrue' will always return True", + "source": "CFN_LINT", + "entity": { + "logicalId": "IsTrue", + "entityType": "Condition" + }, + "propertyPath": "Conditions/IsTrue", + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 9, + "ruleDescription": "Fn::Equals will always return true or false", + "phase": "PARSE" + }, + { + "ruleId": "W8003", + "severity": "WARN", + "message": "Fn::Equals in condition 'IsFalse' will always return False", + "source": "CFN_LINT", + "entity": { + "logicalId": "IsFalse", + "entityType": "Condition" + }, + "propertyPath": "Conditions/IsFalse", + "category": "Best Practice", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 10, + "ruleDescription": "Fn::Equals will always return true or false", + "phase": "PARSE" + }, + { + "ruleId": "W8003", + "severity": "WARN", + "message": "Fn::Equals in condition 'IsDevEnvironment' will always return True", + "source": "CFN_LINT", + "entity": { + "logicalId": "IsDevEnvironment", + "entityType": "Condition" + }, + "propertyPath": "Conditions/IsDevEnvironment", + "category": "Best Practice", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 19, + "ruleDescription": "Fn::Equals will always return true or false", + "phase": "PARSE" + } + ] + }, + "bad/conditions/properties_fn_if.json": { + "filePath": "bad/conditions/properties_fn_if.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 3, + "warnings": 0, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-1234567' does not match format 'AWS::EC2::Image.Id'", + "source": "CFN_LINT", + "entity": { + "logicalId": "myInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 30, - "startColumn": 7, - "endLine": 30, - "endColumn": 15, + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 15, + "startColumn": 13, + "endLine": 15, + "endColumn": 24, + "conditionScenario": { + "IsProduction": true + }, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "ruleDescription": "Validate AMI id format", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'isDevelopment'" + "actualValue": "ami-1234567" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-123abcd' does not match format 'AWS::EC2::Image.Id'", + "source": "CFN_LINT", "entity": { - "logicalId": "myInstance1", + "logicalId": "myInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 31, - "startColumn": 7, - "endLine": 31, - "endColumn": 14, + "category": "Intrinsic Function", + "startLine": 15, + "startColumn": 13, + "endLine": 15, + "endColumn": 24, + "conditionScenario": { + "IsDev": false, + "IsProduction": false + }, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "ruleDescription": "Validate AMI id format", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "ami-1234567" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-abcdefg' does not match format 'AWS::EC2::Image.Id'", + "source": "CFN_LINT", "entity": { - "logicalId": "myInstance2", + "logicalId": "myInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 14, + "category": "Intrinsic Function", + "startLine": 15, + "startColumn": 13, + "endLine": 15, + "endColumn": 24, + "conditionScenario": { + "IsDev": true, + "IsProduction": false + }, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "ruleDescription": "Validate AMI id format", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "ami-1234567" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myInstance2", + "logicalId": "myInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.BlockDeviceMappings", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 36, - "startColumn": 7, - "endLine": 36, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Fn::If on condition 'isPrimaryAndProduction'" - } + "startLine": 15, + "startColumn": 13, + "endLine": 15, + "endColumn": 24, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/core/E3001_resource_shape.yaml": { + "filePath": "bad/core/E3001_resource_shape.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 7, + "counts": { + "fatal": 0, + "errors": 9, + "warnings": 0, + "informational": 8, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3001", + "severity": "ERROR", + "message": "Resource 'MissingType' is missing required property 'Type'", + "source": "CFN_LINT", "entity": { - "logicalId": "myInstance4", + "logicalId": "MissingType", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "" }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 65, - "startColumn": 7, - "endLine": 65, + "category": "Resource", + "startLine": 5, + "startColumn": 3, + "endLine": 5, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'isProduction'" - } + "ruleDescription": "Basic CloudFormation Resource Check", + "phase": "PARSE" + }, + { + "ruleId": "E3001", + "severity": "ERROR", + "message": "Resource 'NonObjectBody' body must be an object, got a string", + "source": "CFN_LINT", + "entity": { + "logicalId": "NonObjectBody", + "entityType": "Resource", + "resourceType": "" + }, + "category": "Resource", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 16, + "ruleDescription": "Basic CloudFormation Resource Check", + "phase": "PARSE" + }, + { + "ruleId": "E3001", + "severity": "ERROR", + "message": "Resource 'NumericType' property 'Type' must be a string", + "source": "CFN_LINT", + "entity": { + "logicalId": "NumericType", + "entityType": "Resource", + "resourceType": "" + }, + "category": "Resource", + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 9, + "ruleDescription": "Basic CloudFormation Resource Check", + "phase": "PARSE" + }, + { + "ruleId": "E3001", + "severity": "ERROR", + "message": "Resource 'UnknownAttribute' has invalid property 'Bogus'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", + "source": "CFN_LINT", + "entity": { + "logicalId": "UnknownAttribute", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "category": "Resource", + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 10, + "ruleDescription": "Basic CloudFormation Resource Check", + "phase": "PARSE" + }, + { + "ruleId": "E3001", + "severity": "ERROR", + "message": "Resource 'BadConditionType' property 'Condition' must be a string", + "source": "CFN_LINT", + "entity": { + "logicalId": "BadConditionType", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "category": "Resource", + "startLine": 20, + "startColumn": 5, + "endLine": 20, + "endColumn": 14, + "ruleDescription": "Basic CloudFormation Resource Check", + "phase": "PARSE" + }, + { + "ruleId": "E3001", + "severity": "ERROR", + "message": "Resource 'BadDependsOnType' property 'DependsOn' must be a string or list of strings", + "source": "CFN_LINT", + "entity": { + "logicalId": "BadDependsOnType", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "category": "Resource", + "startLine": 25, + "startColumn": 5, + "endLine": 25, + "endColumn": 14, + "ruleDescription": "Basic CloudFormation Resource Check", + "phase": "PARSE" + }, + { + "ruleId": "E3019", + "severity": "ERROR", + "message": "Primary identifiers {'BucketName': 'my-bucket'} should have unique values across the resources {'BadDependsOnType', 'UnknownAttribute'}", + "source": "CFN_LINT", + "entity": { + "logicalId": "UnknownAttribute", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.BucketName", + "category": "Resource", + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 17, + "ruleDescription": "Validate that all resources have unique primary identifiers", + "phase": "LINT" + }, + { + "ruleId": "E3019", + "severity": "ERROR", + "message": "Primary identifiers {'BucketName': 'my-bucket'} should have unique values across the resources {'BadDependsOnType', 'UnknownAttribute'}", + "source": "CFN_LINT", + "entity": { + "logicalId": "BadDependsOnType", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.BucketName", + "category": "Resource", + "startLine": 27, + "startColumn": 7, + "endLine": 27, + "endColumn": 17, + "ruleDescription": "Validate that all resources have unique primary identifiers", + "phase": "LINT" + }, + { + "ruleId": "E8002", + "severity": "ERROR", + "message": "Condition 'SomeCondition' referenced by resource 'ValidResource' is not defined", + "source": "SCHEMA", + "entity": { + "logicalId": "ValidResource", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "category": "Structure", + "startLine": 28, + "startColumn": 3, + "endLine": 28, + "endColumn": 16, + "ruleDescription": "Condition referenced by resource is not defined", + "phase": "PARSE" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance4", + "logicalId": "UnknownAttribute", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 66, + "startLine": 17, "startColumn": 7, - "endLine": 66, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 17, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaExecutionRole", + "logicalId": "BadConditionType", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 87, + "startLine": 22, "startColumn": 7, - "endLine": 87, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 22, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -14175,19 +14692,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "InstanceProfile", + "logicalId": "BadDependsOnType", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 92, + "startLine": 27, "startColumn": 7, - "endLine": 92, - "endColumn": 11, + "endLine": 27, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -14195,81 +14712,43 @@ } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'mySubnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "mySubnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 24, - "startColumn": 5, - "endLine": 24, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myInstance1' of type 'AWS::EC2::Instance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "myInstance1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 29, - "startColumn": 5, - "endLine": 29, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myInstance2' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance2", + "logicalId": "ValidResource", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BucketName", "category": "Best Practice", "startLine": 34, - "startColumn": 5, + "startColumn": 7, "endLine": 34, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myInstance3' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'UnknownAttribute' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myInstance3", + "logicalId": "UnknownAttribute", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 51, + "startLine": 16, "startColumn": 5, - "endLine": 51, + "endLine": 16, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -14277,19 +14756,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myInstance4' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'BadConditionType' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myInstance4", + "logicalId": "BadConditionType", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 64, + "startLine": 21, "startColumn": 5, - "endLine": 64, + "endLine": 21, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -14297,19 +14776,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'BadDependsOnType' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LambdaExecutionRole", + "logicalId": "BadDependsOnType", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 75, + "startLine": 26, "startColumn": 5, - "endLine": 75, + "endLine": 26, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -14317,1096 +14796,763 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'AMIIDLookup' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'ValidResource' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AMIIDLookup", + "logicalId": "ValidResource", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 97, + "startLine": 33, "startColumn": 5, - "endLine": 97, + "endLine": 33, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/core/conditions_list.yaml": { - "filePath": "bad/core/conditions_list.yaml", + "bad/core/conditions.yaml": { + "filePath": "bad/core/conditions.yaml", "status": "OK", "metadata": { - "resourcesScanned": 0, + "resourcesScanned": 8, "counts": { - "fatal": 1, - "errors": 1, - "warnings": 0, - "informational": 0, + "fatal": 4, + "errors": 11, + "warnings": 3, + "informational": 17, "debug": 0 }, - "suppressed": 0, + "suppressed": 2, "strict": false, "severityLevel": "DEBUG" }, "diagnostics": [ { - "ruleId": "F0001", + "ruleId": "F0013", "severity": "FATAL", - "message": "Resources section must exist and be non-empty", + "message": "Fn::If: {'Fn::If': ['isPrimary', 't3.2xlarge', 't3.xlarge']} is not of type 'array'", "source": "SCHEMA", - "category": "Structure", - "startLine": 8, - "startColumn": 1, - "endLine": 8, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" + "entity": { + "logicalId": "myInstance4", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.InstanceType.Fn::If", + "category": "Intrinsic Function", + "startLine": 67, + "startColumn": 9, + "endLine": 67, + "endColumn": 15, + "ruleDescription": "Fn::If must have exactly 3 elements", + "phase": "PARSE" }, { - "ruleId": "E8001", - "severity": "ERROR", - "message": "Conditions section must be an object, got a list", + "ruleId": "F0013", + "severity": "FATAL", + "message": "Fn::If: must have exactly 3 elements, got 2", "source": "SCHEMA", - "propertyPath": "Conditions", - "category": "Structure", - "startLine": 6, - "startColumn": 1, - "endLine": 6, - "endColumn": 11, - "ruleDescription": "Conditions section must have valid structure", + "entity": { + "logicalId": "AMIIDLookup", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Role.Fn::If", + "category": "Intrinsic Function", + "startLine": 100, + "startColumn": 9, + "endLine": 100, + "endColumn": 15, + "ruleDescription": "Fn::If must have exactly 3 elements", "phase": "PARSE" - } - ] - }, - "bad/core/conditions_missing.yaml": { - "filePath": "bad/core/conditions_missing.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 1, - "warnings": 1, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F0001", + "ruleId": "F3003", "severity": "FATAL", - "message": "Resources section must exist and be non-empty", + "message": "'DeviceName' is a required property", "source": "SCHEMA", - "category": "Structure", - "startLine": 12, - "startColumn": 1, - "endLine": 12, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" + "entity": { + "logicalId": "myInstance2", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.BlockDeviceMappings.{}", + "suggestedFix": "Add the required property 'DeviceName'", + "category": "Schema", + "startLine": 36, + "startColumn": 7, + "endLine": 36, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Required property missing", + "phase": "SCHEMA", + "context": { + "resolutionSource": "Fn::If on condition 'isPrimaryAndProduction'" + } }, { - "ruleId": "E8007", - "severity": "ERROR", - "message": "Condition 'isPrimaryAndProduction' references undefined condition 'isPrimary'", + "ruleId": "F3014", + "severity": "FATAL", + "message": "Exactly one of ['VirtualName', 'Ebs', 'NoDevice'] must be specified", "source": "SCHEMA", - "category": "Intrinsic Function", - "startLine": 8, - "startColumn": 3, - "endLine": 8, - "endColumn": 25, - "ruleDescription": "Condition function value must be a string referencing a defined condition", - "phase": "PARSE" + "entity": { + "logicalId": "myInstance2", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.BlockDeviceMappings.{}", + "category": "Schema", + "startLine": 36, + "startColumn": 7, + "endLine": 36, + "endColumn": 26, + "conditionScenario": { + "isPrimary": true, + "isPrimaryAndProduction": true + }, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Exactly one of properties required (requiredXor)", + "phase": "SCHEMA", + "context": { + "resolutionSource": "Fn::If on condition 'isPrimaryAndProduction'" + } }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'isPrimaryAndProduction' is not used by any resource or Fn::If", + "ruleId": "E1151", + "severity": "ERROR", + "message": "'vpc-123456' does not match format 'AWS::EC2::VPC.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "isPrimaryAndProduction", - "entityType": "Condition" - }, - "propertyPath": "Conditions/isPrimaryAndProduction", - "category": "Best Practice", - "startLine": 8, - "startColumn": 3, - "endLine": 8, - "endColumn": 25, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" - } - ] - }, - "bad/core/config_configure_e3012.yaml": { - "filePath": "bad/core/config_configure_e3012.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 3, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'5' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "myTable", + "logicalId": "mySubnet", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ProvisionedThroughput.WriteCapacityUnits", - "category": "Best Practice", + "propertyPath": "Properties.VpcId", + "category": "Intrinsic Function", "startLine": 26, - "startColumn": 9, + "startColumn": 7, "endLine": 26, - "endColumn": 27, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endColumn": 12, + "ruleDescription": "Validate VPC id format", + "phase": "SCHEMA", + "context": { + "actualValue": "vpc-123456" + } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-123456' does not match format 'AWS::EC2::Image.Id'", + "source": "CFN_LINT", "entity": { - "logicalId": "myTable", + "logicalId": "myInstance1", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.TableName", - "category": "Best Practice", - "startLine": 17, + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 31, "startColumn": 7, - "endLine": 17, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 31, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "ami-123456" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-123456' does not match format 'AWS::EC2::Image.Id'", + "source": "CFN_LINT", "entity": { - "logicalId": "myTable", + "logicalId": "myInstance2", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.KeySchema", - "category": "Best Practice", - "startLine": 21, + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 35, "startColumn": 7, - "endLine": 21, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 35, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "actualValue": "ami-123456" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-1234567' does not match format 'AWS::EC2::Image.Id'", + "source": "CFN_LINT", "entity": { - "logicalId": "myTable", + "logicalId": "myInstance3", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 16, + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 51, "startColumn": 5, - "endLine": 16, + "endLine": 51, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/core/config_invalid_json.json": { - "filePath": "bad/core/config_invalid_json.json", - "status": "ERROR", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F1101", - "severity": "FATAL", - "message": "JSON parse error: expected `,` or `]` at line 8 column 6", - "source": "SCHEMA", - "category": "Structure", - "startLine": 8, - "startColumn": 6, - "endLine": 8, - "endColumn": 6, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" - } - ] - }, - "bad/core/config_invalid_yaml.yaml": { - "filePath": "bad/core/config_invalid_yaml.yaml", - "status": "ERROR", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 + "conditionScenario": { + "isPrimaryAndProduction": true + }, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-1234567" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F1101", - "severity": "FATAL", - "message": "YAML parse error: while parsing a block mapping, did not find expected key at byte 113 line 8 column 9", - "source": "SCHEMA", - "category": "Structure", - "startLine": 8, - "startColumn": 9, - "endLine": 8, - "endColumn": 9, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" - } - ] - }, - "bad/core/config_parameters.yaml": { - "filePath": "bad/core/config_parameters.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-123abcd' does not match format 'AWS::EC2::Image.Id'", + "source": "CFN_LINT", + "entity": { + "logicalId": "myInstance3", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 51, + "startColumn": 5, + "endLine": 51, + "endColumn": 15, + "conditionScenario": { + "isDevelopment": false, + "isPrimaryAndProduction": false + }, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-1234567" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "startLine": 7, - "startColumn": 1, - "endLine": 7, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" - } - ] - }, - "bad/core/directives.yaml": { - "filePath": "bad/core/directives.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 4, - "errors": 2, - "warnings": 2, - "informational": 4, - "debug": 0 + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-abcdefg' does not match format 'AWS::EC2::Image.Id'", + "source": "CFN_LINT", + "entity": { + "logicalId": "myInstance3", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 51, + "startColumn": 5, + "endLine": 51, + "endColumn": 15, + "conditionScenario": { + "isDevelopment": true, + "isPrimaryAndProduction": false + }, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-1234567" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('BucketName1' was unexpected. Did you mean 'BucketName'?)", - "source": "SCHEMA", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-123456' does not match format 'AWS::EC2::Image.Id'", + "source": "CFN_LINT", "entity": { - "logicalId": "myBucketPass", + "logicalId": "myInstance4", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.BucketName1", - "category": "Schema", - "startLine": 13, + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 65, "startColumn": 7, - "endLine": 13, - "endColumn": 18, - "ruleDescription": "Additional properties are not allowed", + "endLine": 65, + "endColumn": 14, + "conditionScenario": { + "isProduction": true + }, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", "phase": "SCHEMA", "context": { - "property": "BucketName1", - "extra": { - "allowed_properties": [ - "AbacStatus", - "AccelerateConfiguration", - "AccessControl", - "AnalyticsConfigurations", - "Arn", - "BucketEncryption", - "BucketName", - "BucketNamePrefix", - "BucketNamespace", - "CorsConfiguration", - "DomainName", - "DualStackDomainName", - "IntelligentTieringConfigurations", - "InventoryConfigurations", - "LifecycleConfiguration", - "LoggingConfiguration", - "MetadataConfiguration", - "MetadataTableConfiguration", - "MetricsConfigurations", - "NotificationConfiguration", - "ObjectLockConfiguration", - "ObjectLockEnabled", - "OwnershipControls", - "PublicAccessBlockConfiguration", - "RegionalDomainName", - "ReplicationConfiguration", - "Tags", - "VersioningConfiguration", - "WebsiteConfiguration", - "WebsiteURL" - ] - } + "actualValue": "ami-123456", + "resolutionSource": "Fn::If on condition 'isProduction'" } }, { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('BucketName1' was unexpected. Did you mean 'BucketName'?)", - "source": "SCHEMA", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-abcdef' does not match format 'AWS::EC2::Image.Id'", + "source": "CFN_LINT", "entity": { - "logicalId": "myBucketFail", + "logicalId": "myInstance4", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.BucketName1", - "category": "Schema", - "startLine": 17, + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 65, "startColumn": 7, - "endLine": 17, - "endColumn": 18, - "ruleDescription": "Additional properties are not allowed", - "phase": "SCHEMA", - "context": { - "property": "BucketName1", - "extra": { - "allowed_properties": [ - "AbacStatus", - "AccelerateConfiguration", - "AccessControl", - "AnalyticsConfigurations", - "Arn", - "BucketEncryption", - "BucketName", - "BucketNamePrefix", - "BucketNamespace", - "CorsConfiguration", - "DomainName", - "DualStackDomainName", - "IntelligentTieringConfigurations", - "InventoryConfigurations", - "LifecycleConfiguration", - "LoggingConfiguration", - "MetadataConfiguration", - "MetadataTableConfiguration", - "MetricsConfigurations", - "NotificationConfiguration", - "ObjectLockConfiguration", - "ObjectLockEnabled", - "OwnershipControls", - "PublicAccessBlockConfiguration", - "RegionalDomainName", - "ReplicationConfiguration", - "Tags", - "VersioningConfiguration", - "WebsiteConfiguration", - "WebsiteURL" - ] - } + "endLine": 65, + "endColumn": 14, + "conditionScenario": { + "isProduction": false + }, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-123456", + "resolutionSource": "Fn::If on condition 'isProduction'" } }, { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('BadKey' was unexpected)", - "source": "SCHEMA", + "ruleId": "E1154", + "severity": "ERROR", + "message": "'abc-123456' does not match format 'AWS::EC2::Subnet.Id'", + "source": "CFN_LINT", "entity": { - "logicalId": "myBucketFirstAndLastPass", + "logicalId": "myInstance1", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.BadKey", - "category": "Schema", - "startLine": 28, + "propertyPath": "Properties.SubnetId", + "category": "Intrinsic Function", + "startLine": 30, "startColumn": 7, - "endLine": 28, - "endColumn": 13, - "ruleDescription": "Additional properties are not allowed", + "endLine": 30, + "endColumn": 15, + "conditionScenario": { + "isDevelopment": false + }, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate VPC subnet id format", "phase": "SCHEMA", "context": { - "property": "BadKey", - "extra": { - "allowed_properties": [ - "AbacStatus", - "AccelerateConfiguration", - "AccessControl", - "AnalyticsConfigurations", - "Arn", - "BucketEncryption", - "BucketName", - "BucketNamePrefix", - "BucketNamespace", - "CorsConfiguration", - "DomainName", - "DualStackDomainName", - "IntelligentTieringConfigurations", - "InventoryConfigurations", - "LifecycleConfiguration", - "LoggingConfiguration", - "MetadataConfiguration", - "MetadataTableConfiguration", - "MetricsConfigurations", - "NotificationConfiguration", - "ObjectLockConfiguration", - "ObjectLockEnabled", - "OwnershipControls", - "PublicAccessBlockConfiguration", - "RegionalDomainName", - "ReplicationConfiguration", - "Tags", - "VersioningConfiguration", - "WebsiteConfiguration", - "WebsiteURL" - ] - } + "actualValue": "abc-123456", + "resolutionSource": "Fn::If on condition 'isDevelopment'" } }, { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('BadKey' was unexpected)", - "source": "SCHEMA", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "myBucketFirstAndLastFail", + "logicalId": "AMIIDLookup", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.BadKey", - "category": "Schema", - "startLine": 35, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 106, "startColumn": 7, - "endLine": 35, - "endColumn": 13, - "ruleDescription": "Additional properties are not allowed", + "endLine": 106, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "property": "BadKey", - "extra": { - "allowed_properties": [ - "AbacStatus", - "AccelerateConfiguration", - "AccessControl", - "AnalyticsConfigurations", - "Arn", - "BucketEncryption", - "BucketName", - "BucketNamePrefix", - "BucketNamespace", - "CorsConfiguration", - "DomainName", - "DualStackDomainName", - "IntelligentTieringConfigurations", - "InventoryConfigurations", - "LifecycleConfiguration", - "LoggingConfiguration", - "MetadataConfiguration", - "MetadataTableConfiguration", - "MetricsConfigurations", - "NotificationConfiguration", - "ObjectLockConfiguration", - "ObjectLockEnabled", - "OwnershipControls", - "PublicAccessBlockConfiguration", - "RegionalDomainName", - "ReplicationConfiguration", - "Tags", - "VersioningConfiguration", - "WebsiteConfiguration", - "WebsiteURL" - ] - } + "actualValue": "nodejs4.3", + "lifecycle": "end-of-life" } }, { - "ruleId": "E3001", + "ruleId": "E3715", "severity": "ERROR", - "message": "Resource 'myBucketFirstAndLastPass' has invalid property 'BadProperty'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", + "message": "'/dev/hda' is not a valid ephemeral device name. Expected format is 'ephemeralN' where N is 0-23", "source": "CFN_LINT", "entity": { - "logicalId": "myBucketFirstAndLastPass", + "logicalId": "myInstance2", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.BlockDeviceMappings.0.VirtualName", "category": "Resource", - "startLine": 19, - "startColumn": 5, - "endLine": 19, - "endColumn": 16, - "ruleDescription": "Basic CloudFormation Resource Check", - "phase": "PARSE" + "startLine": 36, + "startColumn": 7, + "endLine": 36, + "endColumn": 26, + "ruleDescription": "VirtualName must use ephemeral device format when Ebs is absent", + "phase": "LINT" }, { - "ruleId": "E3001", - "severity": "ERROR", - "message": "Resource 'myBucketFirstAndLastFail' has invalid property 'BadProperty'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'isPrimary' to False. Where existing status for condition 'isPrimaryAndProduction' is True", "source": "CFN_LINT", "entity": { - "logicalId": "myBucketFirstAndLastFail", + "logicalId": "myInstance2", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "category": "Resource", - "startLine": 32, - "startColumn": 5, - "endLine": 32, - "endColumn": 16, - "ruleDescription": "Basic CloudFormation Resource Check", - "phase": "PARSE" + "propertyPath": "Properties.BlockDeviceMappings.Fn::If.1.0.VirtualName.Fn::If.2", + "category": "Best Practice", + "startLine": 43, + "startColumn": 19, + "endLine": 43, + "endColumn": 20, + "ruleDescription": "Check Fn::If has a path that cannot be reached", + "phase": "LINT" }, { - "ruleId": "W3030", + "ruleId": "W8001", "severity": "WARN", - "message": "'Enabled1' is not one of ['Enabled', 'Suspended']", + "message": "Condition 'isNotProduction' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "myBucketFirstAndLastPass", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "logicalId": "isNotProduction", + "entityType": "Condition" }, - "propertyPath": "Properties.VersioningConfiguration.Status", - "category": "Schema", - "startLine": 30, - "startColumn": 9, - "endLine": 30, - "endColumn": 15, - "ruleDescription": "Value not in allowed enum", - "phase": "SCHEMA", - "context": { - "actualValue": "Enabled1", - "extra": { - "allowed_values": [ - "Enabled", - "Suspended" - ] - } - } + "propertyPath": "Conditions/isNotProduction", + "category": "Best Practice", + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 18, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { - "ruleId": "W3030", + "ruleId": "W8001", "severity": "WARN", - "message": "'Enabled1' is not one of ['Enabled', 'Suspended']", + "message": "Condition 'isPrimaryAndProdOrStage' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "myBucketFirstAndLastFail", + "logicalId": "isPrimaryAndProdOrStage", + "entityType": "Condition" + }, + "propertyPath": "Conditions/isPrimaryAndProdOrStage", + "category": "Best Practice", + "startLine": 19, + "startColumn": 3, + "endLine": 19, + "endColumn": 26, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "mySubnet", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.VersioningConfiguration.Status", - "category": "Schema", - "startLine": 37, - "startColumn": 9, - "endLine": 37, - "endColumn": 15, - "ruleDescription": "Value not in allowed enum", - "phase": "SCHEMA", - "context": { - "actualValue": "Enabled1", - "extra": { - "allowed_values": [ - "Enabled", - "Suspended" - ] - } + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myBucketPass' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myBucketPass", + "logicalId": "mySubnet", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 26, + "startColumn": 7, + "endLine": 26, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myBucketFail' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myBucketFail", + "logicalId": "myInstance1", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 16, - "startColumn": 5, - "endLine": 16, + "startLine": 30, + "startColumn": 7, + "endLine": 30, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'isDevelopment'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myBucketFirstAndLastPass' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myBucketFirstAndLastPass", + "logicalId": "myInstance1", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 27, - "startColumn": 5, - "endLine": 27, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 31, + "startColumn": 7, + "endLine": 31, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myBucketFirstAndLastFail' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myBucketFirstAndLastFail", + "logicalId": "myInstance2", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 34, - "startColumn": 5, - "endLine": 34, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/core/mandatory_checks.yaml": { - "filePath": "bad/core/mandatory_checks.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 4, - "errors": 2, - "warnings": 2, - "informational": 4, - "debug": 0 + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('BucketName1' was unexpected. Did you mean 'BucketName'?)", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "myBucketPass", + "logicalId": "myInstance2", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.BucketName1", - "category": "Schema", - "startLine": 13, + "propertyPath": "Properties.BlockDeviceMappings", + "category": "Best Practice", + "startLine": 36, "startColumn": 7, - "endLine": 13, - "endColumn": 18, - "ruleDescription": "Additional properties are not allowed", + "endLine": 36, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "BucketName1", - "extra": { - "allowed_properties": [ - "AbacStatus", - "AccelerateConfiguration", - "AccessControl", - "AnalyticsConfigurations", - "Arn", - "BucketEncryption", - "BucketName", - "BucketNamePrefix", - "BucketNamespace", - "CorsConfiguration", - "DomainName", - "DualStackDomainName", - "IntelligentTieringConfigurations", - "InventoryConfigurations", - "LifecycleConfiguration", - "LoggingConfiguration", - "MetadataConfiguration", - "MetadataTableConfiguration", - "MetricsConfigurations", - "NotificationConfiguration", - "ObjectLockConfiguration", - "ObjectLockEnabled", - "OwnershipControls", - "PublicAccessBlockConfiguration", - "RegionalDomainName", - "ReplicationConfiguration", - "Tags", - "VersioningConfiguration", - "WebsiteConfiguration", - "WebsiteURL" - ] - } + "lifecycle": "conditional-create-only", + "resolutionSource": "Fn::If on condition 'isPrimaryAndProduction'" } }, { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('BucketName1' was unexpected. Did you mean 'BucketName'?)", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "myBucketFail", + "logicalId": "myInstance4", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.BucketName1", - "category": "Schema", - "startLine": 17, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 65, "startColumn": 7, - "endLine": 17, - "endColumn": 18, - "ruleDescription": "Additional properties are not allowed", + "endLine": 65, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "BucketName1", - "extra": { - "allowed_properties": [ - "AbacStatus", - "AccelerateConfiguration", - "AccessControl", - "AnalyticsConfigurations", - "Arn", - "BucketEncryption", - "BucketName", - "BucketNamePrefix", - "BucketNamespace", - "CorsConfiguration", - "DomainName", - "DualStackDomainName", - "IntelligentTieringConfigurations", - "InventoryConfigurations", - "LifecycleConfiguration", - "LoggingConfiguration", - "MetadataConfiguration", - "MetadataTableConfiguration", - "MetricsConfigurations", - "NotificationConfiguration", - "ObjectLockConfiguration", - "ObjectLockEnabled", - "OwnershipControls", - "PublicAccessBlockConfiguration", - "RegionalDomainName", - "ReplicationConfiguration", - "Tags", - "VersioningConfiguration", - "WebsiteConfiguration", - "WebsiteURL" - ] - } + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'isProduction'" } }, { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('BadKey' was unexpected)", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "myBucketFirstAndLastPass", + "logicalId": "myInstance4", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.BadKey", - "category": "Schema", - "startLine": 23, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 66, "startColumn": 7, - "endLine": 23, - "endColumn": 13, - "ruleDescription": "Additional properties are not allowed", + "endLine": 66, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "BadKey", - "extra": { - "allowed_properties": [ - "AbacStatus", - "AccelerateConfiguration", - "AccessControl", - "AnalyticsConfigurations", - "Arn", - "BucketEncryption", - "BucketName", - "BucketNamePrefix", - "BucketNamespace", - "CorsConfiguration", - "DomainName", - "DualStackDomainName", - "IntelligentTieringConfigurations", - "InventoryConfigurations", - "LifecycleConfiguration", - "LoggingConfiguration", - "MetadataConfiguration", - "MetadataTableConfiguration", - "MetricsConfigurations", - "NotificationConfiguration", - "ObjectLockConfiguration", - "ObjectLockEnabled", - "OwnershipControls", - "PublicAccessBlockConfiguration", - "RegionalDomainName", - "ReplicationConfiguration", - "Tags", - "VersioningConfiguration", - "WebsiteConfiguration", - "WebsiteURL" - ] - } + "lifecycle": "conditional-create-only" } }, { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('BadKey' was unexpected)", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "myBucketFirstAndLastFail", + "logicalId": "LambdaExecutionRole", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.BadKey", - "category": "Schema", - "startLine": 30, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 87, "startColumn": 7, - "endLine": 30, - "endColumn": 13, - "ruleDescription": "Additional properties are not allowed", + "endLine": 87, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "BadKey", - "extra": { - "allowed_properties": [ - "AbacStatus", - "AccelerateConfiguration", - "AccessControl", - "AnalyticsConfigurations", - "Arn", - "BucketEncryption", - "BucketName", - "BucketNamePrefix", - "BucketNamespace", - "CorsConfiguration", - "DomainName", - "DualStackDomainName", - "IntelligentTieringConfigurations", - "InventoryConfigurations", - "LifecycleConfiguration", - "LoggingConfiguration", - "MetadataConfiguration", - "MetadataTableConfiguration", - "MetricsConfigurations", - "NotificationConfiguration", - "ObjectLockConfiguration", - "ObjectLockEnabled", - "OwnershipControls", - "PublicAccessBlockConfiguration", - "RegionalDomainName", - "ReplicationConfiguration", - "Tags", - "VersioningConfiguration", - "WebsiteConfiguration", - "WebsiteURL" - ] - } + "lifecycle": "create-only" } }, { - "ruleId": "E3001", - "severity": "ERROR", - "message": "Resource 'myBucketFirstAndLastPass' has invalid property 'BadProperty'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "myBucketFirstAndLastPass", + "logicalId": "InstanceProfile", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::IAM::InstanceProfile" }, - "category": "Resource", - "startLine": 19, - "startColumn": 5, - "endLine": 19, - "endColumn": 16, - "ruleDescription": "Basic CloudFormation Resource Check", - "phase": "PARSE" + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 92, + "startColumn": 7, + "endLine": 92, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3001", - "severity": "ERROR", - "message": "Resource 'myBucketFirstAndLastFail' has invalid property 'BadProperty'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'mySubnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "myBucketFirstAndLastFail", + "logicalId": "mySubnet", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Subnet" }, - "category": "Resource", - "startLine": 27, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 24, "startColumn": 5, - "endLine": 27, - "endColumn": 16, - "ruleDescription": "Basic CloudFormation Resource Check", - "phase": "PARSE" + "endLine": 24, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W3030", - "severity": "WARN", - "message": "'Enabled1' is not one of ['Enabled', 'Suspended']", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myInstance1' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "myBucketFirstAndLastPass", + "logicalId": "myInstance1", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.VersioningConfiguration.Status", - "category": "Schema", - "startLine": 25, - "startColumn": 9, - "endLine": 25, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 29, + "startColumn": 5, + "endLine": 29, "endColumn": 15, - "ruleDescription": "Value not in allowed enum", - "phase": "SCHEMA", - "context": { - "actualValue": "Enabled1", - "extra": { - "allowed_values": [ - "Enabled", - "Suspended" - ] - } - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W3030", - "severity": "WARN", - "message": "'Enabled1' is not one of ['Enabled', 'Suspended']", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myInstance2' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "myBucketFirstAndLastFail", + "logicalId": "myInstance2", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.VersioningConfiguration.Status", - "category": "Schema", - "startLine": 32, - "startColumn": 9, - "endLine": 32, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 34, + "startColumn": 5, + "endLine": 34, "endColumn": 15, - "ruleDescription": "Value not in allowed enum", - "phase": "SCHEMA", - "context": { - "actualValue": "Enabled1", - "extra": { - "allowed_values": [ - "Enabled", - "Suspended" - ] - } - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myBucketPass' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'myInstance3' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myBucketPass", + "logicalId": "myInstance3", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, + "startLine": 51, "startColumn": 5, - "endLine": 12, + "endLine": 51, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -15414,19 +15560,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myBucketFail' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'myInstance4' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myBucketFail", + "logicalId": "myInstance4", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 16, + "startLine": 64, "startColumn": 5, - "endLine": 16, + "endLine": 64, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -15434,19 +15580,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myBucketFirstAndLastPass' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myBucketFirstAndLastPass", + "logicalId": "LambdaExecutionRole", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 22, + "startLine": 75, "startColumn": 5, - "endLine": 22, + "endLine": 75, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -15454,33 +15600,33 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myBucketFirstAndLastFail' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'AMIIDLookup' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myBucketFirstAndLastFail", + "logicalId": "AMIIDLookup", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 29, + "startLine": 97, "startColumn": 5, - "endLine": 29, + "endLine": 97, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/core/parse_invalid_map.yaml": { - "filePath": "bad/core/parse_invalid_map.yaml", - "status": "ERROR", + "bad/core/conditions_list.yaml": { + "filePath": "bad/core/conditions_list.yaml", + "status": "OK", "metadata": { "resourcesScanned": 0, "counts": { "fatal": 1, - "errors": 0, + "errors": 1, "warnings": 0, "informational": 0, "debug": 0 @@ -15491,22 +15637,201 @@ }, "diagnostics": [ { - "ruleId": "F1101", + "ruleId": "F0001", "severity": "FATAL", - "message": "Complex key not supported (line 18)", + "message": "Resources section must exist and be non-empty", "source": "SCHEMA", "category": "Structure", - "startLine": 18, - "startColumn": 54, - "endLine": 18, - "endColumn": 54, - "ruleDescription": "Invalid YAML/JSON syntax", + "startLine": 8, + "startColumn": 1, + "endLine": 8, + "endColumn": 10, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" + }, + { + "ruleId": "E8001", + "severity": "ERROR", + "message": "Conditions section must be an object, got a list", + "source": "SCHEMA", + "propertyPath": "Conditions", + "category": "Structure", + "startLine": 6, + "startColumn": 1, + "endLine": 6, + "endColumn": 11, + "ruleDescription": "Conditions section must have valid structure", "phase": "PARSE" } ] }, - "bad/core/parse_malformed_core_tag.yaml": { - "filePath": "bad/core/parse_malformed_core_tag.yaml", + "bad/core/conditions_missing.yaml": { + "filePath": "bad/core/conditions_missing.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 1, + "warnings": 1, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "startLine": 12, + "startColumn": 1, + "endLine": 12, + "endColumn": 10, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" + }, + { + "ruleId": "E8007", + "severity": "ERROR", + "message": "Condition 'isPrimaryAndProduction' references undefined condition 'isPrimary'", + "source": "SCHEMA", + "category": "Intrinsic Function", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 25, + "ruleDescription": "Condition function value must be a string referencing a defined condition", + "phase": "PARSE" + }, + { + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'isPrimaryAndProduction' is not used by any resource or Fn::If", + "source": "CFN_LINT", + "entity": { + "logicalId": "isPrimaryAndProduction", + "entityType": "Condition" + }, + "propertyPath": "Conditions/isPrimaryAndProduction", + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 25, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" + } + ] + }, + "bad/core/config_configure_e3012.yaml": { + "filePath": "bad/core/config_configure_e3012.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 3, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'5' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "myTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.ProvisionedThroughput.WriteCapacityUnits", + "category": "Best Practice", + "startLine": 26, + "startColumn": 9, + "endLine": 26, + "endColumn": 27, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.TableName", + "category": "Best Practice", + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.KeySchema", + "category": "Best Practice", + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "myTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/core/config_invalid_json.json": { + "filePath": "bad/core/config_invalid_json.json", "status": "ERROR", "metadata": { "resourcesScanned": 0, @@ -15525,20 +15850,20 @@ { "ruleId": "F1101", "severity": "FATAL", - "message": "YAML parse error: 'not_a_number' is not a valid value for !!int", + "message": "JSON parse error: expected `,` or `]` at line 8 column 6", "source": "SCHEMA", "category": "Structure", "startLine": 8, - "startColumn": 25, + "startColumn": 6, "endLine": 8, - "endColumn": 25, + "endColumn": 6, "ruleDescription": "Invalid YAML/JSON syntax", "phase": "PARSE" } ] }, - "bad/core/parse_multiple_documents.yaml": { - "filePath": "bad/core/parse_multiple_documents.yaml", + "bad/core/config_invalid_yaml.yaml": { + "filePath": "bad/core/config_invalid_yaml.yaml", "status": "ERROR", "metadata": { "resourcesScanned": 0, @@ -15557,21 +15882,21 @@ { "ruleId": "F1101", "severity": "FATAL", - "message": "expected a single document in the stream but found another document", - "source": "SCHEMA", - "category": "Structure", - "startLine": 7, - "startColumn": 1, - "endLine": 7, - "endColumn": 1, + "message": "YAML parse error: while parsing a block mapping, did not find expected key at byte 113 line 8 column 9", + "source": "SCHEMA", + "category": "Structure", + "startLine": 8, + "startColumn": 9, + "endLine": 8, + "endColumn": 9, "ruleDescription": "Invalid YAML/JSON syntax", "phase": "PARSE" } ] }, - "bad/core/parse_null_key.yaml": { - "filePath": "bad/core/parse_null_key.yaml", - "status": "ERROR", + "bad/core/config_parameters.yaml": { + "filePath": "bad/core/config_parameters.yaml", + "status": "OK", "metadata": { "resourcesScanned": 0, "counts": { @@ -15587,29 +15912,29 @@ }, "diagnostics": [ { - "ruleId": "F1101", + "ruleId": "F0001", "severity": "FATAL", - "message": "Null key not supported (line 7)", + "message": "Resources section must exist and be non-empty", "source": "SCHEMA", "category": "Structure", "startLine": 7, - "startColumn": 7, + "startColumn": 1, "endLine": 7, - "endColumn": 7, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" + "endColumn": 10, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" } ] }, - "bad/core/resource_attributes.yaml": { - "filePath": "bad/core/resource_attributes.yaml", + "bad/core/directives.yaml": { + "filePath": "bad/core/directives.yaml", "status": "OK", "metadata": { - "resourcesScanned": 5, + "resourcesScanned": 4, "counts": { - "fatal": 6, - "errors": 10, - "warnings": 1, + "fatal": 4, + "errors": 2, + "warnings": 2, "informational": 4, "debug": 0 }, @@ -15619,418 +15944,413 @@ }, "diagnostics": [ { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'MaxSize' is a required property", - "source": "SCHEMA", - "entity": { - "logicalId": "ScalarCreationPolicy", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'MaxSize'", - "category": "Schema", - "startLine": 6, - "startColumn": 3, - "endLine": 6, - "endColumn": 23, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" - }, - { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'MinSize' is a required property", - "source": "SCHEMA", - "entity": { - "logicalId": "ScalarCreationPolicy", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'MinSize'", - "category": "Schema", - "startLine": 6, - "startColumn": 3, - "endLine": 6, - "endColumn": 23, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" - }, - { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'MaxSize' is a required property", - "source": "SCHEMA", - "entity": { - "logicalId": "ScalarUpdatePolicy", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'MaxSize'", - "category": "Schema", - "startLine": 9, - "startColumn": 3, - "endLine": 9, - "endColumn": 21, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" - }, - { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'MinSize' is a required property", - "source": "SCHEMA", - "entity": { - "logicalId": "ScalarUpdatePolicy", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'MinSize'", - "category": "Schema", - "startLine": 9, - "startColumn": 3, - "endLine": 9, - "endColumn": 21, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" - }, - { - "ruleId": "F3014", + "ruleId": "F3002", "severity": "FATAL", - "message": "Exactly one of ['InstanceId', 'LaunchConfigurationName', 'LaunchTemplate', 'MixedInstancesPolicy'] must be specified", + "message": "Additional properties are not allowed ('BucketName1' was unexpected. Did you mean 'BucketName'?)", "source": "SCHEMA", "entity": { - "logicalId": "ScalarCreationPolicy", + "logicalId": "myBucketPass", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties", + "propertyPath": "Properties.BucketName1", "category": "Schema", - "startLine": 6, - "startColumn": 3, - "endLine": 6, - "endColumn": 23, - "ruleDescription": "Exactly one of properties required (requiredXor)", - "phase": "SCHEMA" + "startLine": 13, + "startColumn": 7, + "endLine": 13, + "endColumn": 18, + "ruleDescription": "Additional properties are not allowed", + "phase": "SCHEMA", + "context": { + "property": "BucketName1", + "extra": { + "allowed_properties": [ + "AbacStatus", + "AccelerateConfiguration", + "AccessControl", + "AnalyticsConfigurations", + "Arn", + "BucketEncryption", + "BucketName", + "BucketNamePrefix", + "BucketNamespace", + "CorsConfiguration", + "DomainName", + "DualStackDomainName", + "IntelligentTieringConfigurations", + "InventoryConfigurations", + "LifecycleConfiguration", + "LoggingConfiguration", + "MetadataConfiguration", + "MetadataTableConfiguration", + "MetricsConfigurations", + "NotificationConfiguration", + "ObjectLockConfiguration", + "ObjectLockEnabled", + "OwnershipControls", + "PublicAccessBlockConfiguration", + "RegionalDomainName", + "ReplicationConfiguration", + "Tags", + "VersioningConfiguration", + "WebsiteConfiguration", + "WebsiteURL" + ] + } + } }, { - "ruleId": "F3014", + "ruleId": "F3002", "severity": "FATAL", - "message": "Exactly one of ['InstanceId', 'LaunchConfigurationName', 'LaunchTemplate', 'MixedInstancesPolicy'] must be specified", + "message": "Additional properties are not allowed ('BucketName1' was unexpected. Did you mean 'BucketName'?)", "source": "SCHEMA", "entity": { - "logicalId": "ScalarUpdatePolicy", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties", - "category": "Schema", - "startLine": 9, - "startColumn": 3, - "endLine": 9, - "endColumn": 21, - "ruleDescription": "Exactly one of properties required (requiredXor)", - "phase": "SCHEMA" - }, - { - "ruleId": "E3001", - "severity": "ERROR", - "message": "Resource 'StandardVersion' property 'Version' is only valid for custom resources", - "source": "CFN_LINT", - "entity": { - "logicalId": "StandardVersion", + "logicalId": "myBucketFail", "entityType": "Resource", "resourceType": "AWS::S3::Bucket" }, - "category": "Resource", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 12, - "ruleDescription": "Basic CloudFormation Resource Check", - "phase": "PARSE" - }, - { - "ruleId": "E3001", - "severity": "ERROR", - "message": "Resource 'ScalarCreationPolicy' property 'CreationPolicy' must be an object", - "source": "CFN_LINT", - "entity": { - "logicalId": "ScalarCreationPolicy", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "category": "Resource", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 19, - "ruleDescription": "Basic CloudFormation Resource Check", - "phase": "PARSE" - }, - { - "ruleId": "E3001", - "severity": "ERROR", - "message": "Resource 'ScalarUpdatePolicy' property 'UpdatePolicy' must be an object", - "source": "CFN_LINT", - "entity": { - "logicalId": "ScalarUpdatePolicy", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "category": "Resource", - "startLine": 11, - "startColumn": 5, - "endLine": 11, - "endColumn": 17, - "ruleDescription": "Basic CloudFormation Resource Check", - "phase": "PARSE" + "propertyPath": "Properties.BucketName1", + "category": "Schema", + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 18, + "ruleDescription": "Additional properties are not allowed", + "phase": "SCHEMA", + "context": { + "property": "BucketName1", + "extra": { + "allowed_properties": [ + "AbacStatus", + "AccelerateConfiguration", + "AccessControl", + "AnalyticsConfigurations", + "Arn", + "BucketEncryption", + "BucketName", + "BucketNamePrefix", + "BucketNamespace", + "CorsConfiguration", + "DomainName", + "DualStackDomainName", + "IntelligentTieringConfigurations", + "InventoryConfigurations", + "LifecycleConfiguration", + "LoggingConfiguration", + "MetadataConfiguration", + "MetadataTableConfiguration", + "MetricsConfigurations", + "NotificationConfiguration", + "ObjectLockConfiguration", + "ObjectLockEnabled", + "OwnershipControls", + "PublicAccessBlockConfiguration", + "RegionalDomainName", + "ReplicationConfiguration", + "Tags", + "VersioningConfiguration", + "WebsiteConfiguration", + "WebsiteURL" + ] + } + } }, { - "ruleId": "E3001", - "severity": "ERROR", - "message": "Resource 'CustomLifecyclePolicies' property 'CreationPolicy' is not valid for custom resources", - "source": "CFN_LINT", + "ruleId": "F3002", + "severity": "FATAL", + "message": "Additional properties are not allowed ('BadKey' was unexpected)", + "source": "SCHEMA", "entity": { - "logicalId": "CustomLifecyclePolicies", + "logicalId": "myBucketFirstAndLastPass", "entityType": "Resource", - "resourceType": "Custom::Thing" + "resourceType": "AWS::S3::Bucket" }, - "category": "Resource", - "startLine": 16, - "startColumn": 5, - "endLine": 16, - "endColumn": 19, - "ruleDescription": "Basic CloudFormation Resource Check", - "phase": "PARSE" + "propertyPath": "Properties.BadKey", + "category": "Schema", + "startLine": 28, + "startColumn": 7, + "endLine": 28, + "endColumn": 13, + "ruleDescription": "Additional properties are not allowed", + "phase": "SCHEMA", + "context": { + "property": "BadKey", + "extra": { + "allowed_properties": [ + "AbacStatus", + "AccelerateConfiguration", + "AccessControl", + "AnalyticsConfigurations", + "Arn", + "BucketEncryption", + "BucketName", + "BucketNamePrefix", + "BucketNamespace", + "CorsConfiguration", + "DomainName", + "DualStackDomainName", + "IntelligentTieringConfigurations", + "InventoryConfigurations", + "LifecycleConfiguration", + "LoggingConfiguration", + "MetadataConfiguration", + "MetadataTableConfiguration", + "MetricsConfigurations", + "NotificationConfiguration", + "ObjectLockConfiguration", + "ObjectLockEnabled", + "OwnershipControls", + "PublicAccessBlockConfiguration", + "RegionalDomainName", + "ReplicationConfiguration", + "Tags", + "VersioningConfiguration", + "WebsiteConfiguration", + "WebsiteURL" + ] + } + } }, { - "ruleId": "E3001", - "severity": "ERROR", - "message": "Resource 'CustomLifecyclePolicies' property 'UpdatePolicy' is not valid for custom resources", - "source": "CFN_LINT", + "ruleId": "F3002", + "severity": "FATAL", + "message": "Additional properties are not allowed ('BadKey' was unexpected)", + "source": "SCHEMA", "entity": { - "logicalId": "CustomLifecyclePolicies", + "logicalId": "myBucketFirstAndLastFail", "entityType": "Resource", - "resourceType": "Custom::Thing" + "resourceType": "AWS::S3::Bucket" }, - "category": "Resource", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 17, - "ruleDescription": "Basic CloudFormation Resource Check", - "phase": "PARSE" + "propertyPath": "Properties.BadKey", + "category": "Schema", + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 13, + "ruleDescription": "Additional properties are not allowed", + "phase": "SCHEMA", + "context": { + "property": "BadKey", + "extra": { + "allowed_properties": [ + "AbacStatus", + "AccelerateConfiguration", + "AccessControl", + "AnalyticsConfigurations", + "Arn", + "BucketEncryption", + "BucketName", + "BucketNamePrefix", + "BucketNamespace", + "CorsConfiguration", + "DomainName", + "DualStackDomainName", + "IntelligentTieringConfigurations", + "InventoryConfigurations", + "LifecycleConfiguration", + "LoggingConfiguration", + "MetadataConfiguration", + "MetadataTableConfiguration", + "MetricsConfigurations", + "NotificationConfiguration", + "ObjectLockConfiguration", + "ObjectLockEnabled", + "OwnershipControls", + "PublicAccessBlockConfiguration", + "RegionalDomainName", + "ReplicationConfiguration", + "Tags", + "VersioningConfiguration", + "WebsiteConfiguration", + "WebsiteURL" + ] + } + } }, { "ruleId": "E3001", "severity": "ERROR", - "message": "Resource 'UnsupportedAttributes' has invalid property 'Connectors'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", + "message": "Resource 'myBucketFirstAndLastPass' has invalid property 'BadProperty'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", "source": "CFN_LINT", "entity": { - "logicalId": "UnsupportedAttributes", + "logicalId": "myBucketFirstAndLastPass", "entityType": "Resource", "resourceType": "AWS::S3::Bucket" }, "category": "Resource", - "startLine": 20, + "startLine": 19, "startColumn": 5, - "endLine": 20, - "endColumn": 15, + "endLine": 19, + "endColumn": 16, "ruleDescription": "Basic CloudFormation Resource Check", "phase": "PARSE" }, { "ruleId": "E3001", "severity": "ERROR", - "message": "Resource 'UnsupportedAttributes' has invalid property 'IgnoreGlobals'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", + "message": "Resource 'myBucketFirstAndLastFail' has invalid property 'BadProperty'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", "source": "CFN_LINT", "entity": { - "logicalId": "UnsupportedAttributes", + "logicalId": "myBucketFirstAndLastFail", "entityType": "Resource", "resourceType": "AWS::S3::Bucket" }, "category": "Resource", - "startLine": 21, + "startLine": 32, "startColumn": 5, - "endLine": 21, - "endColumn": 18, + "endLine": 32, + "endColumn": 16, "ruleDescription": "Basic CloudFormation Resource Check", "phase": "PARSE" }, { - "ruleId": "E3016", - "severity": "ERROR", - "message": "7 is not of type 'object'", - "source": "CFN_LINT", - "entity": { - "logicalId": "ScalarUpdatePolicy", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "UpdatePolicy", - "category": "Resource", - "startLine": 11, - "startColumn": 5, - "endLine": 11, - "endColumn": 17, - "ruleDescription": "Check UpdatePolicy values for Resources", - "phase": "LINT" - }, - { - "ruleId": "E3016", - "severity": "ERROR", - "message": "UpdatePolicy is not supported on resource type 'Custom::Thing'", - "source": "CFN_LINT", - "entity": { - "logicalId": "CustomLifecyclePolicies", - "entityType": "Resource", - "resourceType": "Custom::Thing" - }, - "propertyPath": "UpdatePolicy", - "suggestedFix": "Remove UpdatePolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::ElastiCache::ReplicationGroup, AWS::Elasticsearch::Domain, AWS::Lambda::Alias, AWS::OpenSearchService::Domain", - "category": "Resource", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 17, - "ruleDescription": "Check UpdatePolicy values for Resources", - "phase": "LINT" - }, - { - "ruleId": "E3055", - "severity": "ERROR", - "message": "CreationPolicy is not supported on resource type 'Custom::Thing'", + "ruleId": "W3030", + "severity": "WARN", + "message": "'Enabled1' is not one of ['Enabled', 'Suspended']", "source": "CFN_LINT", "entity": { - "logicalId": "CustomLifecyclePolicies", + "logicalId": "myBucketFirstAndLastPass", "entityType": "Resource", - "resourceType": "Custom::Thing" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "CreationPolicy", - "suggestedFix": "Remove CreationPolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::CloudFormation::WaitCondition, AWS::EC2::Instance", - "category": "Resource", - "startLine": 16, - "startColumn": 5, - "endLine": 16, - "endColumn": 19, - "ruleDescription": "Check CreationPolicy values for Resources", - "phase": "LINT" + "propertyPath": "Properties.VersioningConfiguration.Status", + "category": "Schema", + "startLine": 30, + "startColumn": 9, + "endLine": 30, + "endColumn": 15, + "ruleDescription": "Value not in allowed enum", + "phase": "SCHEMA", + "context": { + "actualValue": "Enabled1", + "extra": { + "allowed_values": [ + "Enabled", + "Suspended" + ] + } + } }, { - "ruleId": "W9013", + "ruleId": "W3030", "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", + "message": "'Enabled1' is not one of ['Enabled', 'Suspended']", + "source": "CFN_LINT", "entity": { - "logicalId": "CustomLifecyclePolicies", + "logicalId": "myBucketFirstAndLastFail", "entityType": "Resource", - "resourceType": "Custom::Thing" + "resourceType": "AWS::S3::Bucket" }, - "category": "Security", - "startLine": 12, - "startColumn": 3, - "endLine": 12, - "endColumn": 26, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "propertyPath": "Properties.VersioningConfiguration.Status", + "category": "Schema", + "startLine": 37, + "startColumn": 9, + "endLine": 37, + "endColumn": 15, + "ruleDescription": "Value not in allowed enum", + "phase": "SCHEMA", + "context": { + "actualValue": "Enabled1", + "extra": { + "allowed_values": [ + "Enabled", + "Suspended" + ] + } + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'StandardVersion' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'myBucketPass' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StandardVersion", + "logicalId": "myBucketPass", "entityType": "Resource", "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 18, + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ScalarCreationPolicy' of type 'AWS::AutoScaling::AutoScalingGroup' supports Tags but none are configured", + "message": "Resource 'myBucketFail' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ScalarCreationPolicy", + "logicalId": "myBucketFail", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, - "startColumn": 3, - "endLine": 6, - "endColumn": 23, + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ScalarUpdatePolicy' of type 'AWS::AutoScaling::AutoScalingGroup' supports Tags but none are configured", + "message": "Resource 'myBucketFirstAndLastPass' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ScalarUpdatePolicy", + "logicalId": "myBucketFirstAndLastPass", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, - "startColumn": 3, - "endLine": 9, - "endColumn": 21, + "startLine": 27, + "startColumn": 5, + "endLine": 27, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'UnsupportedAttributes' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'myBucketFirstAndLastFail' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UnsupportedAttributes", + "logicalId": "myBucketFirstAndLastFail", "entityType": "Resource", "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 18, - "startColumn": 3, - "endLine": 18, - "endColumn": 24, + "startLine": 34, + "startColumn": 5, + "endLine": 34, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/core/sections_not_objects.yaml": { - "filePath": "bad/core/sections_not_objects.yaml", + "bad/core/mandatory_checks.yaml": { + "filePath": "bad/core/mandatory_checks.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 4, "counts": { - "fatal": 0, - "errors": 3, - "warnings": 0, - "informational": 0, + "fatal": 4, + "errors": 2, + "warnings": 2, + "informational": 4, "debug": 0 }, "suppressed": 0, @@ -16039,934 +16359,1220 @@ }, "diagnostics": [ { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameters section must be an object, got null", - "source": "CFN_LINT", - "propertyPath": "Parameters", - "category": "Parameter", - "startLine": 2, - "startColumn": 1, - "endLine": 2, - "endColumn": 11, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" - }, - { - "ruleId": "E6003", - "severity": "ERROR", - "message": "Outputs section must be an object, got a string", - "source": "CFN_LINT", - "propertyPath": "Outputs", - "category": "Structure", - "startLine": 5, - "startColumn": 1, - "endLine": 5, - "endColumn": 8, - "ruleDescription": "Outputs section must be an object of named output definitions", - "phase": "PARSE" + "ruleId": "F3002", + "severity": "FATAL", + "message": "Additional properties are not allowed ('BucketName1' was unexpected. Did you mean 'BucketName'?)", + "source": "SCHEMA", + "entity": { + "logicalId": "myBucketPass", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.BucketName1", + "category": "Schema", + "startLine": 13, + "startColumn": 7, + "endLine": 13, + "endColumn": 18, + "ruleDescription": "Additional properties are not allowed", + "phase": "SCHEMA", + "context": { + "property": "BucketName1", + "extra": { + "allowed_properties": [ + "AbacStatus", + "AccelerateConfiguration", + "AccessControl", + "AnalyticsConfigurations", + "Arn", + "BucketEncryption", + "BucketName", + "BucketNamePrefix", + "BucketNamespace", + "CorsConfiguration", + "DomainName", + "DualStackDomainName", + "IntelligentTieringConfigurations", + "InventoryConfigurations", + "LifecycleConfiguration", + "LoggingConfiguration", + "MetadataConfiguration", + "MetadataTableConfiguration", + "MetricsConfigurations", + "NotificationConfiguration", + "ObjectLockConfiguration", + "ObjectLockEnabled", + "OwnershipControls", + "PublicAccessBlockConfiguration", + "RegionalDomainName", + "ReplicationConfiguration", + "Tags", + "VersioningConfiguration", + "WebsiteConfiguration", + "WebsiteURL" + ] + } + } }, { - "ruleId": "E7001", - "severity": "ERROR", - "message": "Mappings section must be an object, got a list", - "source": "CFN_LINT", - "propertyPath": "Mappings", - "category": "Structure", - "startLine": 3, - "startColumn": 1, - "endLine": 3, - "endColumn": 9, - "ruleDescription": "Mappings are appropriately configured", - "phase": "PARSE" - } - ] - }, - "bad/cross_resource_task10.yaml": { - "filePath": "bad/cross_resource_task10.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 11, - "counts": { - "fatal": 1, - "errors": 6, - "warnings": 3, - "informational": 30, - "debug": 0 + "ruleId": "F3002", + "severity": "FATAL", + "message": "Additional properties are not allowed ('BucketName1' was unexpected. Did you mean 'BucketName'?)", + "source": "SCHEMA", + "entity": { + "logicalId": "myBucketFail", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.BucketName1", + "category": "Schema", + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 18, + "ruleDescription": "Additional properties are not allowed", + "phase": "SCHEMA", + "context": { + "property": "BucketName1", + "extra": { + "allowed_properties": [ + "AbacStatus", + "AccelerateConfiguration", + "AccessControl", + "AnalyticsConfigurations", + "Arn", + "BucketEncryption", + "BucketName", + "BucketNamePrefix", + "BucketNamespace", + "CorsConfiguration", + "DomainName", + "DualStackDomainName", + "IntelligentTieringConfigurations", + "InventoryConfigurations", + "LifecycleConfiguration", + "LoggingConfiguration", + "MetadataConfiguration", + "MetadataTableConfiguration", + "MetricsConfigurations", + "NotificationConfiguration", + "ObjectLockConfiguration", + "ObjectLockEnabled", + "OwnershipControls", + "PublicAccessBlockConfiguration", + "RegionalDomainName", + "ReplicationConfiguration", + "Tags", + "VersioningConfiguration", + "WebsiteConfiguration", + "WebsiteURL" + ] + } + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3003", + "ruleId": "F3002", "severity": "FATAL", - "message": "'TransitEncryptionEnabled' is a required property (from extension)", + "message": "Additional properties are not allowed ('BadKey' was unexpected)", "source": "SCHEMA", "entity": { - "logicalId": "BadValkey", + "logicalId": "myBucketFirstAndLastPass", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties", - "suggestedFix": "Add 'TransitEncryptionEnabled'", + "propertyPath": "Properties.BadKey", "category": "Schema", - "startLine": 69, - "startColumn": 5, - "endLine": 69, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", - "ruleDescription": "Required property missing", - "phase": "SCHEMA" - }, - { - "ruleId": "E3660", - "severity": "ERROR", - "message": "'Name' is required when 'Body' or 'BodyS3Location' is not provided", - "source": "CFN_LINT", - "entity": { - "logicalId": "BadRestApi", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" - }, - "propertyPath": "Properties.Name", - "category": "Resource", - "startLine": 64, - "startColumn": 5, - "endLine": 64, - "endColumn": 15, - "ruleDescription": "RestApi requires a name when not using an OpenAPI specification", - "phase": "LINT" + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 13, + "ruleDescription": "Additional properties are not allowed", + "phase": "SCHEMA", + "context": { + "property": "BadKey", + "extra": { + "allowed_properties": [ + "AbacStatus", + "AccelerateConfiguration", + "AccessControl", + "AnalyticsConfigurations", + "Arn", + "BucketEncryption", + "BucketName", + "BucketNamePrefix", + "BucketNamespace", + "CorsConfiguration", + "DomainName", + "DualStackDomainName", + "IntelligentTieringConfigurations", + "InventoryConfigurations", + "LifecycleConfiguration", + "LoggingConfiguration", + "MetadataConfiguration", + "MetadataTableConfiguration", + "MetricsConfigurations", + "NotificationConfiguration", + "ObjectLockConfiguration", + "ObjectLockEnabled", + "OwnershipControls", + "PublicAccessBlockConfiguration", + "RegionalDomainName", + "ReplicationConfiguration", + "Tags", + "VersioningConfiguration", + "WebsiteConfiguration", + "WebsiteURL" + ] + } + } }, { - "ruleId": "E3663", - "severity": "ERROR", - "message": "Environment variable 'AWS_REGION' is a Lambda reserved key", - "source": "CFN_LINT", + "ruleId": "F3002", + "severity": "FATAL", + "message": "Additional properties are not allowed ('BadKey' was unexpected)", + "source": "SCHEMA", "entity": { - "logicalId": "BadEnvLambda", + "logicalId": "myBucketFirstAndLastFail", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Environment.Variables", - "category": "Resource", - "startLine": 49, - "startColumn": 9, - "endLine": 49, - "endColumn": 18, - "ruleDescription": "Validate Lambda environment variable names aren't reserved", - "phase": "LINT" + "propertyPath": "Properties.BadKey", + "category": "Schema", + "startLine": 30, + "startColumn": 7, + "endLine": 30, + "endColumn": 13, + "ruleDescription": "Additional properties are not allowed", + "phase": "SCHEMA", + "context": { + "property": "BadKey", + "extra": { + "allowed_properties": [ + "AbacStatus", + "AccelerateConfiguration", + "AccessControl", + "AnalyticsConfigurations", + "Arn", + "BucketEncryption", + "BucketName", + "BucketNamePrefix", + "BucketNamespace", + "CorsConfiguration", + "DomainName", + "DualStackDomainName", + "IntelligentTieringConfigurations", + "InventoryConfigurations", + "LifecycleConfiguration", + "LoggingConfiguration", + "MetadataConfiguration", + "MetadataTableConfiguration", + "MetricsConfigurations", + "NotificationConfiguration", + "ObjectLockConfiguration", + "ObjectLockEnabled", + "OwnershipControls", + "PublicAccessBlockConfiguration", + "RegionalDomainName", + "ReplicationConfiguration", + "Tags", + "VersioningConfiguration", + "WebsiteConfiguration", + "WebsiteURL" + ] + } + } }, { - "ruleId": "E3676", + "ruleId": "E3001", "severity": "ERROR", - "message": "HTTPS listener requires Certificates", + "message": "Resource 'myBucketFirstAndLastPass' has invalid property 'BadProperty'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", "source": "CFN_LINT", "entity": { - "logicalId": "BadListener", + "logicalId": "myBucketFirstAndLastPass", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Certificates", "category": "Resource", "startLine": 19, "startColumn": 5, "endLine": 19, - "endColumn": 15, - "ruleDescription": "Validate ELBv2 protocols that require certificates have a certificate specified", - "phase": "LINT" - }, - { - "ruleId": "E3685", - "severity": "ERROR", - "message": "Container image functions cannot specify Handler, Runtime, or Layers properties", - "source": "CFN_LINT", - "entity": { - "logicalId": "BadImageLambda", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Handler", - "category": "Resource", - "startLine": 57, - "startColumn": 7, - "endLine": 57, - "endColumn": 14, - "ruleDescription": "Container image functions cannot use Handler, Runtime, or Layers", - "phase": "LINT" + "endColumn": 16, + "ruleDescription": "Basic CloudFormation Resource Check", + "phase": "PARSE" }, { - "ruleId": "E3704", + "ruleId": "E3001", "severity": "ERROR", - "message": "TransitEncryptionEnabled must be explicitly set when Engine is 'valkey'", + "message": "Resource 'myBucketFirstAndLastFail' has invalid property 'BadProperty'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", "source": "CFN_LINT", "entity": { - "logicalId": "BadValkey", + "logicalId": "myBucketFirstAndLastFail", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.TransitEncryptionEnabled", "category": "Resource", - "startLine": 69, + "startLine": 27, "startColumn": 5, - "endLine": 69, - "endColumn": 15, - "ruleDescription": "Validate TransitEncryptionEnabled is set when using Valkey engine", - "phase": "LINT" - }, - { - "ruleId": "E3706", - "severity": "ERROR", - "message": "5 is less than the minimum of 10", - "source": "CFN_LINT", - "entity": { - "logicalId": "BadASG", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties.MaxSize", - "category": "Resource", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 14, - "ruleDescription": "MaxSize must be greater than or equal to MinSize", - "phase": "LINT" + "endLine": 27, + "endColumn": 16, + "ruleDescription": "Basic CloudFormation Resource Check", + "phase": "PARSE" }, { - "ruleId": "W3697", + "ruleId": "W3030", "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "message": "'Enabled1' is not one of ['Enabled', 'Suspended']", "source": "CFN_LINT", "entity": { - "logicalId": "LC", + "logicalId": "myBucketFirstAndLastPass", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::S3::Bucket" }, - "category": "Deprecation", - "startLine": 11, - "startColumn": 3, - "endLine": 11, - "endColumn": 5, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" + "propertyPath": "Properties.VersioningConfiguration.Status", + "category": "Schema", + "startLine": 25, + "startColumn": 9, + "endLine": 25, + "endColumn": 15, + "ruleDescription": "Value not in allowed enum", + "phase": "SCHEMA", + "context": { + "actualValue": "Enabled1", + "extra": { + "allowed_values": [ + "Enabled", + "Suspended" + ] + } + } }, { - "ruleId": "W9003", + "ruleId": "W3030", "severity": "WARN", - "message": "10 is not of type 'string' - automatically coerced (number to string)", + "message": "'Enabled1' is not one of ['Enabled', 'Suspended']", "source": "CFN_LINT", "entity": { - "logicalId": "BadASG", + "logicalId": "myBucketFirstAndLastFail", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.MinSize", + "propertyPath": "Properties.VersioningConfiguration.Status", + "category": "Schema", + "startLine": 32, + "startColumn": 9, + "endLine": 32, + "endColumn": 15, + "ruleDescription": "Value not in allowed enum", + "phase": "SCHEMA", + "context": { + "actualValue": "Enabled1", + "extra": { + "allowed_values": [ + "Enabled", + "Suspended" + ] + } + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myBucketPass' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "myBucketPass", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 14, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "5 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myBucketFail' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "BadASG", + "logicalId": "myBucketFail", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.MaxSize", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 14, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'myBucketFirstAndLastPass' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "BadValkey", + "logicalId": "myBucketFirstAndLastPass", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::S3::Bucket" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 67, - "startColumn": 3, - "endLine": 67, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 22, + "startColumn": 5, + "endLine": 22, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'myBucketFirstAndLastFail' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "BadValkey", + "logicalId": "myBucketFirstAndLastFail", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::S3::Bucket" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 67, - "startColumn": 3, - "endLine": 67, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/core/parse_invalid_map.yaml": { + "filePath": "bad/core/parse_invalid_map.yaml", + "status": "ERROR", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F1101", + "severity": "FATAL", + "message": "Complex key not supported (line 18)", + "source": "SCHEMA", + "category": "Structure", + "startLine": 18, + "startColumn": 54, + "endLine": 18, + "endColumn": 54, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" + } + ] + }, + "bad/core/parse_malformed_core_tag.yaml": { + "filePath": "bad/core/parse_malformed_core_tag.yaml", + "status": "ERROR", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F1101", + "severity": "FATAL", + "message": "YAML parse error: 'not_a_number' is not a valid value for !!int", + "source": "SCHEMA", + "category": "Structure", + "startLine": 8, + "startColumn": 25, + "endLine": 8, + "endColumn": 25, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" + } + ] + }, + "bad/core/parse_multiple_documents.yaml": { + "filePath": "bad/core/parse_multiple_documents.yaml", + "status": "ERROR", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F1101", + "severity": "FATAL", + "message": "expected a single document in the stream but found another document", + "source": "SCHEMA", + "category": "Structure", + "startLine": 7, + "startColumn": 1, + "endLine": 7, + "endColumn": 1, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" + } + ] + }, + "bad/core/parse_null_key.yaml": { + "filePath": "bad/core/parse_null_key.yaml", + "status": "ERROR", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F1101", + "severity": "FATAL", + "message": "Null key not supported (line 7)", + "source": "SCHEMA", + "category": "Structure", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 7, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" + } + ] + }, + "bad/core/resource_attributes.yaml": { + "filePath": "bad/core/resource_attributes.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 6, + "errors": 10, + "warnings": 1, + "informational": 4, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I3042", - "severity": "INFO", - "message": "ARN in Resource BadEnvLambda contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'MaxSize' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "BadEnvLambda", + "logicalId": "ScalarCreationPolicy", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.Role.Fn::Sub", - "category": "Best Practice", - "startLine": 45, - "startColumn": 7, - "endLine": 45, - "endColumn": 14, - "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", - "phase": "LINT" + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'MaxSize'", + "category": "Schema", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 23, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I3042", - "severity": "INFO", - "message": "ARN in Resource BadImageLambda contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'MinSize' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "BadImageLambda", + "logicalId": "ScalarCreationPolicy", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.Role.Fn::Sub", - "category": "Best Practice", - "startLine": 58, - "startColumn": 7, - "endLine": 58, - "endColumn": 14, - "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", - "phase": "LINT" + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'MinSize'", + "category": "Schema", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 23, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'MaxSize' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "BadASG", + "logicalId": "ScalarUpdatePolicy", "entityType": "Resource", "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.LaunchConfigurationName", - "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 30, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'LC'" - } + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'MaxSize'", + "category": "Schema", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 21, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'MinSize' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "LC", + "logicalId": "ScalarUpdatePolicy", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'MinSize'", + "category": "Schema", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 21, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3014", + "severity": "FATAL", + "message": "Exactly one of ['InstanceId', 'LaunchConfigurationName', 'LaunchTemplate', 'MixedInstancesPolicy'] must be specified", + "source": "SCHEMA", "entity": { - "logicalId": "LC", + "logicalId": "ScalarCreationPolicy", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 15, - "startColumn": 7, - "endLine": 15, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties", + "category": "Schema", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 23, + "ruleDescription": "Exactly one of properties required (requiredXor)", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3014", + "severity": "FATAL", + "message": "Exactly one of ['InstanceId', 'LaunchConfigurationName', 'LaunchTemplate', 'MixedInstancesPolicy'] must be specified", + "source": "SCHEMA", "entity": { - "logicalId": "BadListener", + "logicalId": "ScalarUpdatePolicy", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.LoadBalancerArn", - "category": "Best Practice", - "startLine": 20, - "startColumn": 7, - "endLine": 20, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ALB'" - } + "propertyPath": "Properties", + "category": "Schema", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 21, + "ruleDescription": "Exactly one of properties required (requiredXor)", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3001", + "severity": "ERROR", + "message": "Resource 'StandardVersion' property 'Version' is only valid for custom resources", + "source": "CFN_LINT", "entity": { - "logicalId": "TG", + "logicalId": "StandardVersion", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Port", - "category": "Best Practice", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "category": "Resource", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 12, + "ruleDescription": "Basic CloudFormation Resource Check", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3001", + "severity": "ERROR", + "message": "Resource 'ScalarCreationPolicy' property 'CreationPolicy' must be an object", + "source": "CFN_LINT", "entity": { - "logicalId": "TG", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" - }, - "propertyPath": "Properties.Protocol", - "category": "Best Practice", - "startLine": 36, - "startColumn": 7, - "endLine": 36, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "logicalId": "ScalarCreationPolicy", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "category": "Resource", + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 19, + "ruleDescription": "Basic CloudFormation Resource Check", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3001", + "severity": "ERROR", + "message": "Resource 'ScalarUpdatePolicy' property 'UpdatePolicy' must be an object", + "source": "CFN_LINT", "entity": { - "logicalId": "TG", + "logicalId": "ScalarUpdatePolicy", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 37, - "startColumn": 7, - "endLine": 37, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "category": "Resource", + "startLine": 11, + "startColumn": 5, + "endLine": 11, + "endColumn": 17, + "ruleDescription": "Basic CloudFormation Resource Check", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3001", + "severity": "ERROR", + "message": "Resource 'CustomLifecyclePolicies' property 'CreationPolicy' is not valid for custom resources", + "source": "CFN_LINT", "entity": { - "logicalId": "BadEnvLambda", + "logicalId": "CustomLifecyclePolicies", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "Custom::Thing" }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 42, - "startColumn": 7, - "endLine": 42, + "category": "Resource", + "startLine": 16, + "startColumn": 5, + "endLine": 16, "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Basic CloudFormation Resource Check", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3001", + "severity": "ERROR", + "message": "Resource 'CustomLifecyclePolicies' property 'UpdatePolicy' is not valid for custom resources", + "source": "CFN_LINT", "entity": { - "logicalId": "BadImageLambda", + "logicalId": "CustomLifecyclePolicies", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "Custom::Thing" }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 55, - "startColumn": 7, - "endLine": 55, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "category": "Resource", + "startLine": 17, + "startColumn": 5, + "endLine": 17, + "endColumn": 17, + "ruleDescription": "Basic CloudFormation Resource Check", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PackageType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3001", + "severity": "ERROR", + "message": "Resource 'UnsupportedAttributes' has invalid property 'Connectors'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", + "source": "CFN_LINT", "entity": { - "logicalId": "BadImageLambda", + "logicalId": "UnsupportedAttributes", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.PackageType", - "category": "Best Practice", - "startLine": 56, - "startColumn": 7, - "endLine": 56, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "category": "Resource", + "startLine": 20, + "startColumn": 5, + "endLine": 20, + "endColumn": 15, + "ruleDescription": "Basic CloudFormation Resource Check", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "E3001", + "severity": "ERROR", + "message": "Resource 'UnsupportedAttributes' has invalid property 'IgnoreGlobals'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", + "source": "CFN_LINT", "entity": { - "logicalId": "BadFargateService", + "logicalId": "UnsupportedAttributes", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.LaunchType", - "category": "Best Practice", - "startLine": 76, - "startColumn": 7, - "endLine": 76, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "category": "Resource", + "startLine": 21, + "startColumn": 5, + "endLine": 21, + "endColumn": 18, + "ruleDescription": "Basic CloudFormation Resource Check", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3016", + "severity": "ERROR", + "message": "7 is not of type 'object'", + "source": "CFN_LINT", "entity": { - "logicalId": "TaskDef", + "logicalId": "ScalarUpdatePolicy", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 88, - "startColumn": 7, - "endLine": 88, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "UpdatePolicy", + "category": "Resource", + "startLine": 11, + "startColumn": 5, + "endLine": 11, + "endColumn": 17, + "ruleDescription": "Check UpdatePolicy values for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3016", + "severity": "ERROR", + "message": "UpdatePolicy is not supported on resource type 'Custom::Thing'", + "source": "CFN_LINT", "entity": { - "logicalId": "TaskDef", + "logicalId": "CustomLifecyclePolicies", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "Custom::Thing" }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 89, - "startColumn": 7, - "endLine": 89, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "UpdatePolicy", + "suggestedFix": "Remove UpdatePolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::ElastiCache::ReplicationGroup, AWS::Elasticsearch::Domain, AWS::Lambda::Alias, AWS::OpenSearchService::Domain", + "category": "Resource", + "startLine": 17, + "startColumn": 5, + "endLine": 17, + "endColumn": 17, + "ruleDescription": "Check UpdatePolicy values for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3055", + "severity": "ERROR", + "message": "CreationPolicy is not supported on resource type 'Custom::Thing'", + "source": "CFN_LINT", "entity": { - "logicalId": "TaskDef", + "logicalId": "CustomLifecyclePolicies", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "Custom::Thing" }, - "propertyPath": "Properties.Cpu", - "category": "Best Practice", - "startLine": 91, - "startColumn": 7, - "endLine": 91, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "CreationPolicy", + "suggestedFix": "Remove CreationPolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::CloudFormation::WaitCondition, AWS::EC2::Instance", + "category": "Resource", + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 19, + "ruleDescription": "Check CreationPolicy values for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "CustomLifecyclePolicies", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "Custom::Thing" }, - "propertyPath": "Properties.Memory", - "category": "Best Practice", - "startLine": 92, - "startColumn": 7, - "endLine": 92, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "category": "Security", + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 26, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Resource 'StandardVersion' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "StandardVersion", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 93, - "startColumn": 7, - "endLine": 93, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BadASG' of type 'AWS::AutoScaling::AutoScalingGroup' supports Tags but none are configured", + "message": "Resource 'ScalarCreationPolicy' of type 'AWS::AutoScaling::AutoScalingGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BadASG", + "logicalId": "ScalarCreationPolicy", "entityType": "Resource", "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 23, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BadListener' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", + "message": "Resource 'ScalarUpdatePolicy' of type 'AWS::AutoScaling::AutoScalingGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BadListener", + "logicalId": "ScalarUpdatePolicy", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 19, - "startColumn": 5, - "endLine": 19, - "endColumn": 15, + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 21, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ALB' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "message": "Resource 'UnsupportedAttributes' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ALB", + "logicalId": "UnsupportedAttributes", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 28, - "startColumn": 5, - "endLine": 28, - "endColumn": 15, + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 24, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/core/sections_not_objects.yaml": { + "filePath": "bad/core/sections_not_objects.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 3, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TG' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameters section must be an object, got null", + "source": "CFN_LINT", + "propertyPath": "Parameters", + "category": "Parameter", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 11, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" + }, + { + "ruleId": "E6003", + "severity": "ERROR", + "message": "Outputs section must be an object, got a string", + "source": "CFN_LINT", + "propertyPath": "Outputs", + "category": "Structure", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 8, + "ruleDescription": "Outputs section must be an object of named output definitions", + "phase": "PARSE" + }, + { + "ruleId": "E7001", + "severity": "ERROR", + "message": "Mappings section must be an object, got a list", + "source": "CFN_LINT", + "propertyPath": "Mappings", + "category": "Structure", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Mappings are appropriately configured", + "phase": "PARSE" + } + ] + }, + "bad/cross_resource_task10.yaml": { + "filePath": "bad/cross_resource_task10.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 11, + "counts": { + "fatal": 1, + "errors": 6, + "warnings": 3, + "informational": 30, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3003", + "severity": "FATAL", + "message": "'TransitEncryptionEnabled' is a required property (from extension)", + "source": "SCHEMA", "entity": { - "logicalId": "TG", + "logicalId": "BadValkey", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 34, + "propertyPath": "Properties", + "suggestedFix": "Add 'TransitEncryptionEnabled'", + "category": "Schema", + "startLine": 69, "startColumn": 5, - "endLine": 34, + "endLine": 69, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BadEnvLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3660", + "severity": "ERROR", + "message": "'Name' is required when 'Body' or 'BodyS3Location' is not provided", + "source": "CFN_LINT", "entity": { - "logicalId": "BadEnvLambda", + "logicalId": "BadRestApi", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::RestApi" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 41, + "propertyPath": "Properties.Name", + "category": "Resource", + "startLine": 64, "startColumn": 5, - "endLine": 41, + "endLine": 64, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "RestApi requires a name when not using an OpenAPI specification", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BadImageLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3663", + "severity": "ERROR", + "message": "Environment variable 'AWS_REGION' is a Lambda reserved key", + "source": "CFN_LINT", "entity": { - "logicalId": "BadImageLambda", + "logicalId": "BadEnvLambda", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 54, + "propertyPath": "Properties.Environment.Variables", + "category": "Resource", + "startLine": 49, + "startColumn": 9, + "endLine": 49, + "endColumn": 18, + "ruleDescription": "Validate Lambda environment variable names aren't reserved", + "phase": "LINT" + }, + { + "ruleId": "E3676", + "severity": "ERROR", + "message": "HTTPS listener requires Certificates", + "source": "CFN_LINT", + "entity": { + "logicalId": "BadListener", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + }, + "propertyPath": "Properties.Certificates", + "category": "Resource", + "startLine": 19, "startColumn": 5, - "endLine": 54, + "endLine": 19, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Validate ELBv2 protocols that require certificates have a certificate specified", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BadRestApi' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3685", + "severity": "ERROR", + "message": "Container image functions cannot specify Handler, Runtime, or Layers properties", + "source": "CFN_LINT", "entity": { - "logicalId": "BadRestApi", + "logicalId": "BadImageLambda", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 64, - "startColumn": 5, - "endLine": 64, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.Handler", + "category": "Resource", + "startLine": 57, + "startColumn": 7, + "endLine": 57, + "endColumn": 14, + "ruleDescription": "Container image functions cannot use Handler, Runtime, or Layers", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BadValkey' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3704", + "severity": "ERROR", + "message": "TransitEncryptionEnabled must be explicitly set when Engine is 'valkey'", + "source": "CFN_LINT", "entity": { "logicalId": "BadValkey", "entityType": "Resource", "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", + "propertyPath": "Properties.TransitEncryptionEnabled", + "category": "Resource", "startLine": 69, "startColumn": 5, "endLine": 69, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Validate TransitEncryptionEnabled is set when using Valkey engine", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BadFargateService' of type 'AWS::ECS::Service' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3706", + "severity": "ERROR", + "message": "5 is less than the minimum of 10", + "source": "CFN_LINT", "entity": { - "logicalId": "BadFargateService", + "logicalId": "BadASG", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 75, - "startColumn": 5, - "endLine": 75, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.MaxSize", + "category": "Resource", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 14, + "ruleDescription": "MaxSize must be greater than or equal to MinSize", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "source": "CFN_LINT", "entity": { - "logicalId": "TaskDef", + "logicalId": "LC", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Deprecation", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 5, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "10 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", + "entity": { + "logicalId": "BadASG", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Properties.MinSize", "category": "Best Practice", - "startLine": 87, - "startColumn": 5, - "endLine": 87, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/deprecated_type.yaml": { - "filePath": "bad/deprecated_type.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 2, - "debug": 0 + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 14, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W9009", + "ruleId": "W9003", "severity": "WARN", - "message": "Resource type 'AWS::SDB::Domain' is deprecated - consider using a newer alternative", - "source": "ENGINE", + "message": "5 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "Domain", + "logicalId": "BadASG", "entityType": "Resource", - "resourceType": "AWS::SDB::Domain" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "suggestedFix": "Replace AWS::SDB::Domain with a supported alternative", - "category": "Deprecation", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 9, - "ruleDescription": "Resource type sunset or shutdown", - "phase": "LINT", - "context": { - "lifecycle": "deprecated" - } + "propertyPath": "Properties.MaxSize", + "category": "Best Practice", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 14, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { "ruleId": "I3011", @@ -16974,15 +17580,15 @@ "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": "Domain", + "logicalId": "BadValkey", "entityType": "Resource", - "resourceType": "AWS::SDB::Domain" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, "category": "Best Practice", - "startLine": 3, + "startLine": 67, "startColumn": 3, - "endLine": 3, - "endColumn": 9, + "endLine": 67, + "endColumn": 12, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -16992,111 +17598,96 @@ "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": "Domain", + "logicalId": "BadValkey", "entityType": "Resource", - "resourceType": "AWS::SDB::Domain" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, "category": "Best Practice", - "startLine": 3, + "startLine": 67, "startColumn": 3, - "endLine": 3, - "endColumn": 9, + "endLine": 67, + "endColumn": 12, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "bad/duplicate.json": { - "filePath": "bad/duplicate.json", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 3, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F0000", - "severity": "FATAL", - "message": "Duplicate key 'MySNSTopic'", - "source": "SCHEMA", + "ruleId": "I3042", + "severity": "INFO", + "message": "ARN in Resource BadEnvLambda contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", + "source": "CFN_LINT", "entity": { - "logicalId": "MySNSTopic", + "logicalId": "BadEnvLambda", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Resources/MySNSTopic", - "category": "Structure", - "startLine": 5, - "startColumn": 3, - "endLine": 5, + "propertyPath": "Properties.Role.Fn::Sub", + "category": "Best Practice", + "startLine": 45, + "startColumn": 7, + "endLine": 45, "endColumn": 14, - "ruleDescription": "Duplicate key in template", - "phase": "PARSE" + "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", + "phase": "LINT" }, { - "ruleId": "F0000", - "severity": "FATAL", - "message": "Duplicate key 'MySNSTopic'", - "source": "SCHEMA", + "ruleId": "I3042", + "severity": "INFO", + "message": "ARN in Resource BadImageLambda contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", + "source": "CFN_LINT", "entity": { - "logicalId": "MySNSTopic", + "logicalId": "BadImageLambda", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Resources/MySNSTopic", - "category": "Structure", - "startLine": 17, - "startColumn": 3, - "endLine": 17, + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Role.Fn::Sub", + "category": "Best Practice", + "startLine": 58, + "startColumn": 7, + "endLine": 58, "endColumn": 14, - "ruleDescription": "Duplicate key in template", - "phase": "PARSE" + "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", + "phase": "LINT" }, { - "ruleId": "F0000", - "severity": "FATAL", - "message": "Duplicate key 'MySNSTopic'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MySNSTopic", + "logicalId": "BadASG", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Resources/MySNSTopic", - "category": "Structure", - "startLine": 23, - "startColumn": 3, - "endLine": 23, - "endColumn": 14, - "ruleDescription": "Duplicate key in template", - "phase": "PARSE" + "propertyPath": "Properties.LaunchConfigurationName", + "category": "Best Practice", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 30, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'LC'" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MySNSTopic", + "logicalId": "LC", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.TopicName", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 26, - "startColumn": 6, - "endLine": 26, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -17104,252 +17695,223 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyEipNat' of type 'AWS::EC2::EIP' supports Tags but none are configured", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEipNat", + "logicalId": "LC", "entityType": "Resource", - "resourceType": "AWS::EC2::EIP" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 13, - "startColumn": 4, - "endLine": 13, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 15, + "startColumn": 7, + "endLine": 15, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MySNSTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MySNSTopic", + "logicalId": "BadListener", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.LoadBalancerArn", "category": "Best Practice", - "startLine": 25, - "startColumn": 4, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/duplicate.yaml": { - "filePath": "bad/duplicate.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 3, - "errors": 1, - "warnings": 0, - "informational": 2, - "debug": 0 + "startLine": 20, + "startColumn": 7, + "endLine": 20, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ALB'" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F0000", - "severity": "FATAL", - "message": "Duplicate key 'mySnsTopic'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "mySnsTopic", + "logicalId": "TG", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Resources/mySnsTopic", - "category": "Structure", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 13, - "ruleDescription": "Duplicate key in template", - "phase": "PARSE" + "propertyPath": "Properties.Port", + "category": "Best Practice", + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F0000", - "severity": "FATAL", - "message": "Duplicate key 'mySnsTopic'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "mySnsTopic", + "logicalId": "TG", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Resources/mySnsTopic", - "category": "Structure", - "startLine": 9, - "startColumn": 3, - "endLine": 9, - "endColumn": 13, - "ruleDescription": "Duplicate key in template", - "phase": "PARSE" + "propertyPath": "Properties.Protocol", + "category": "Best Practice", + "startLine": 36, + "startColumn": 7, + "endLine": 36, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F0000", - "severity": "FATAL", - "message": "Duplicate key 'mySnsTopic'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "mySnsTopic", + "logicalId": "TG", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Resources/mySnsTopic", - "category": "Structure", - "startLine": 13, - "startColumn": 3, - "endLine": 13, - "endColumn": 13, - "ruleDescription": "Duplicate key in template", - "phase": "PARSE" + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3001", - "severity": "ERROR", - "message": "Resource 'mySnsTopic' has invalid property 'Parameters'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "mySnsTopic", + "logicalId": "BadEnvLambda", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::Lambda::Function" }, - "category": "Resource", - "startLine": 15, - "startColumn": 5, - "endLine": 15, - "endColumn": 15, - "ruleDescription": "Basic CloudFormation Resource Check", - "phase": "PARSE" + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 42, + "startColumn": 7, + "endLine": 42, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myS3Bucket", + "logicalId": "BadImageLambda", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 55, + "startColumn": 7, + "endLine": 55, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'mySnsTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'PackageType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySnsTopic", + "logicalId": "BadImageLambda", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.PackageType", "category": "Best Practice", - "startLine": 13, - "startColumn": 3, - "endLine": 13, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/duplicate_primary_id.yaml": { - "filePath": "bad/duplicate_primary_id.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 2, - "warnings": 0, - "informational": 4, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3019", - "severity": "ERROR", - "message": "Primary identifiers {'BucketName': 'my-duplicate-bucket'} should have unique values across the resources {'BucketA', 'BucketB'}", - "source": "CFN_LINT", - "entity": { - "logicalId": "BucketA", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Resource", - "startLine": 6, + "startLine": 56, "startColumn": 7, - "endLine": 6, - "endColumn": 17, - "ruleDescription": "Validate that all resources have unique primary identifiers", - "phase": "LINT" + "endLine": 56, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3019", - "severity": "ERROR", - "message": "Primary identifiers {'BucketName': 'my-duplicate-bucket'} should have unique values across the resources {'BucketA', 'BucketB'}", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BucketB", + "logicalId": "BadFargateService", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.BucketName", - "category": "Resource", - "startLine": 10, + "propertyPath": "Properties.LaunchType", + "category": "Best Practice", + "startLine": 76, "startColumn": 7, - "endLine": 10, + "endLine": 76, "endColumn": 17, - "ruleDescription": "Validate that all resources have unique primary identifiers", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BucketA", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 6, + "startLine": 88, "startColumn": 7, - "endLine": 6, - "endColumn": 17, + "endLine": 88, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -17359,19 +17921,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BucketB", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 10, + "startLine": 89, "startColumn": 7, - "endLine": 10, - "endColumn": 17, + "endLine": 89, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -17379,126 +17942,130 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BucketA' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BucketA", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 91, + "startColumn": 7, + "endLine": 91, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BucketB' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BucketB", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/duplicate_primary_id_multi.yaml": { - "filePath": "bad/duplicate_primary_id_multi.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 4, - "debug": 0 + "startLine": 92, + "startColumn": 7, + "endLine": 92, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BucketA", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 11, + "startLine": 93, "startColumn": 7, - "endLine": 11, - "endColumn": 17, + "endLine": 93, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsA'" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BadASG' of type 'AWS::AutoScaling::AutoScalingGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "BadASG", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Resource 'BadListener' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BucketB", + "logicalId": "BadListener", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 15, - "startColumn": 7, - "endLine": 15, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsA'" - } + "startLine": 19, + "startColumn": 5, + "endLine": 19, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BucketA' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'ALB' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BucketA", + "logicalId": "ALB", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, + "startLine": 28, "startColumn": 5, - "endLine": 10, + "endLine": 28, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -17506,173 +18073,155 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BucketB' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'TG' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BucketB", + "logicalId": "TG", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 14, + "startLine": 34, "startColumn": 5, - "endLine": 14, + "endLine": 34, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/dynamodb_attribute_mismatch.yaml": { - "filePath": "bad/dynamodb_attribute_mismatch.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 5, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3039", - "severity": "ERROR", - "message": "AttributeDefinitions does not match KeySchema attributes. missing definitions: [sk]", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BadEnvLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "BadTable", + "logicalId": "BadEnvLambda", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties", - "category": "Resource", - "startLine": 5, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 41, "startColumn": 5, - "endLine": 5, + "endLine": 41, "endColumn": 15, - "ruleDescription": "AttributeDefinitions / KeySchemas mismatch", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'BadImageLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "BadTable", + "logicalId": "BadImageLambda", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 54, + "startColumn": 5, + "endLine": 54, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'BadRestApi' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "BadTable", + "logicalId": "BadRestApi", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ApiGateway::RestApi" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 64, + "startColumn": 5, + "endLine": 64, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "message": "Resource 'BadValkey' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BadTable", + "logicalId": "BadValkey", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.TableName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 69, + "startColumn": 5, + "endLine": 69, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'BadFargateService' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BadTable", + "logicalId": "BadFargateService", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 75, + "startColumn": 5, + "endLine": 75, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BadTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BadTable", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 87, "startColumn": 5, - "endLine": 5, + "endLine": 87, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/dynamodb_prod_no_kms.yaml": { - "filePath": "bad/dynamodb_prod_no_kms.yaml", + "bad/deprecated_type.yaml": { + "filePath": "bad/deprecated_type.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 3, + "warnings": 1, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -17681,79 +18230,75 @@ }, "diagnostics": [ { - "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", + "ruleId": "W9009", + "severity": "WARN", + "message": "Resource type 'AWS::SDB::Domain' is deprecated - consider using a newer alternative", + "source": "ENGINE", "entity": { - "logicalId": "ProdTable", + "logicalId": "Domain", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::SDB::Domain" }, - "category": "Best Practice", + "suggestedFix": "Replace AWS::SDB::Domain with a supported alternative", + "category": "Deprecation", "startLine": 3, "startColumn": 3, "endLine": 3, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "endColumn": 9, + "ruleDescription": "Resource type sunset or shutdown", + "phase": "LINT", + "context": { + "lifecycle": "deprecated" + } }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "ProdTable", + "logicalId": "Domain", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::SDB::Domain" }, - "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "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": "ProdTable", + "logicalId": "Domain", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::SDB::Domain" }, - "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" } ] }, - "bad/dynamodb_provisioned_no_throughput.yaml": { - "filePath": "bad/dynamodb_provisioned_no_throughput.yaml", + "bad/duplicate.json": { + "filePath": "bad/duplicate.json", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 2, "counts": { - "fatal": 1, - "errors": 1, + "fatal": 3, + "errors": 0, "warnings": 0, - "informational": 5, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -17762,97 +18307,79 @@ }, "diagnostics": [ { - "ruleId": "F3003", + "ruleId": "F0000", "severity": "FATAL", - "message": "'ProvisionedThroughput' is a required property (from extension)", + "message": "Duplicate key 'MySNSTopic'", "source": "SCHEMA", "entity": { - "logicalId": "DDBTable", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties", - "suggestedFix": "Add 'ProvisionedThroughput'", - "category": "Schema", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" - }, - { - "ruleId": "E3639", - "severity": "ERROR", - "message": "ProvisionedThroughput is required when BillingMode is 'PROVISIONED'", - "source": "CFN_LINT", - "entity": { - "logicalId": "DDBTable", + "logicalId": "MySNSTopic", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ProvisionedThroughput", - "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", - "category": "Resource", + "propertyPath": "Resources/MySNSTopic", + "category": "Structure", "startLine": 5, - "startColumn": 5, + "startColumn": 3, "endLine": 5, - "endColumn": 15, - "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", - "phase": "LINT" + "endColumn": 14, + "ruleDescription": "Duplicate key in template", + "phase": "PARSE" }, { - "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", + "ruleId": "F0000", + "severity": "FATAL", + "message": "Duplicate key 'MySNSTopic'", + "source": "SCHEMA", "entity": { - "logicalId": "DDBTable", + "logicalId": "MySNSTopic", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::SNS::Topic" }, - "category": "Best Practice", - "startLine": 3, + "propertyPath": "Resources/MySNSTopic", + "category": "Structure", + "startLine": 17, "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "endLine": 17, + "endColumn": 14, + "ruleDescription": "Duplicate key in template", + "phase": "PARSE" }, { - "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", + "ruleId": "F0000", + "severity": "FATAL", + "message": "Duplicate key 'MySNSTopic'", + "source": "SCHEMA", "entity": { - "logicalId": "DDBTable", + "logicalId": "MySNSTopic", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::SNS::Topic" }, - "category": "Best Practice", - "startLine": 3, + "propertyPath": "Resources/MySNSTopic", + "category": "Structure", + "startLine": 23, "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "endLine": 23, + "endColumn": 14, + "ruleDescription": "Duplicate key in template", + "phase": "PARSE" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DDBTable", + "logicalId": "MySNSTopic", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.TableName", + "propertyPath": "Properties.TopicName", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, + "startLine": 26, + "startColumn": 6, + "endLine": 26, "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -17860,59 +18387,57 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'MyEipNat' of type 'AWS::EC2::EIP' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DDBTable", + "logicalId": "MyEipNat", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::EIP" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 13, + "startColumn": 4, + "endLine": 13, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DDBTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'MySNSTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DDBTable", + "logicalId": "MySNSTopic", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, + "startLine": 25, + "startColumn": 4, + "endLine": 25, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/ecr_policy_no_statement.yaml": { - "filePath": "bad/ecr_policy_no_statement.yaml", + "bad/duplicate.yaml": { + "filePath": "bad/duplicate.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 2, "counts": { - "fatal": 0, + "fatal": 3, "errors": 1, "warnings": 0, - "informational": 1, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -17921,162 +18446,132 @@ }, "diagnostics": [ { - "ruleId": "E3513", - "severity": "ERROR", - "message": "ECR repository policy must have a Statement property", - "source": "CFN_LINT", + "ruleId": "F0000", + "severity": "FATAL", + "message": "Duplicate key 'mySnsTopic'", + "source": "SCHEMA", "entity": { - "logicalId": "Repo", + "logicalId": "mySnsTopic", "entityType": "Resource", - "resourceType": "AWS::ECR::Repository" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.RepositoryPolicyText", - "suggestedFix": "Add a Statement array to the RepositoryPolicyText", - "category": "Resource", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 27, - "ruleDescription": "Validate ECR repository policy", - "phase": "LINT" + "propertyPath": "Resources/mySnsTopic", + "category": "Structure", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 13, + "ruleDescription": "Duplicate key in template", + "phase": "PARSE" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Repo' of type 'AWS::ECR::Repository' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F0000", + "severity": "FATAL", + "message": "Duplicate key 'mySnsTopic'", + "source": "SCHEMA", "entity": { - "logicalId": "Repo", - "entityType": "Resource", - "resourceType": "AWS::ECR::Repository" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/ecs_awsvpc_port_mismatch.yaml": { - "filePath": "bad/ecs_awsvpc_port_mismatch.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 3, - "debug": 0 + "logicalId": "mySnsTopic", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Resources/mySnsTopic", + "category": "Structure", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 13, + "ruleDescription": "Duplicate key in template", + "phase": "PARSE" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3053", - "severity": "ERROR", - "message": "HostPort 8080 must equal ContainerPort 80 when NetworkMode is awsvpc", - "source": "CFN_LINT", + "ruleId": "F0000", + "severity": "FATAL", + "message": "Duplicate key 'mySnsTopic'", + "source": "SCHEMA", "entity": { - "logicalId": "Task", + "logicalId": "mySnsTopic", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ContainerDefinitions[0].PortMappings[0].HostPort", - "suggestedFix": "Set HostPort equal to ContainerPort or remove HostPort", - "category": "Resource", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Validate ECS task definition has correct values for HostPort", - "phase": "LINT" + "propertyPath": "Resources/mySnsTopic", + "category": "Structure", + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 13, + "ruleDescription": "Duplicate key in template", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3001", + "severity": "ERROR", + "message": "Resource 'mySnsTopic' has invalid property 'Parameters'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", + "source": "CFN_LINT", "entity": { - "logicalId": "Task", + "logicalId": "mySnsTopic", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "category": "Resource", + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 15, + "ruleDescription": "Basic CloudFormation Resource Check", + "phase": "PARSE" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Resource 'myS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Task", + "logicalId": "myS3Bucket", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 7, - "startColumn": 7, + "startColumn": 3, "endLine": 7, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Task' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'mySnsTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Task", + "logicalId": "mySnsTopic", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/ecs_dynamic_port_no_traffic.yaml": { - "filePath": "bad/ecs_dynamic_port_no_traffic.yaml", + "bad/duplicate_primary_id.yaml": { + "filePath": "bad/duplicate_primary_id.yaml", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 2, "counts": { "fatal": 0, - "errors": 1, - "warnings": 1, - "informational": 7, + "errors": 2, + "warnings": 0, + "informational": 4, "debug": 0 }, "suppressed": 0, @@ -18085,122 +18580,59 @@ }, "diagnostics": [ { - "ruleId": "E1151", + "ruleId": "E3019", "severity": "ERROR", - "message": "'vpc-12345' does not match format 'AWS::EC2::VPC.Id'", + "message": "Primary identifiers {'BucketName': 'my-duplicate-bucket'} should have unique values across the resources {'BucketA', 'BucketB'}", "source": "CFN_LINT", "entity": { - "logicalId": "TargetGroup", + "logicalId": "BucketA", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.VpcId", - "category": "Intrinsic Function", - "startLine": 17, + "propertyPath": "Properties.BucketName", + "category": "Resource", + "startLine": 6, "startColumn": 7, - "endLine": 17, - "endColumn": 12, - "ruleDescription": "Validate VPC id format", - "phase": "SCHEMA", - "context": { - "actualValue": "vpc-12345" - } + "endLine": 6, + "endColumn": 17, + "ruleDescription": "Validate that all resources have unique primary identifiers", + "phase": "LINT" }, { - "ruleId": "W3049", - "severity": "WARN", - "message": "Container 'app' uses dynamic host port 0, so each task registers on an ephemeral port, but TargetGroup 'TargetGroup' health-checks the fixed port '8080'. The health check will not follow the traffic port unless '8080' is separately served on every target. Use HealthCheckPort 'traffic-port' to health-check the port each target actually receives traffic on", + "ruleId": "E3019", + "severity": "ERROR", + "message": "Primary identifiers {'BucketName': 'my-duplicate-bucket'} should have unique values across the resources {'BucketA', 'BucketB'}", "source": "CFN_LINT", "entity": { - "logicalId": "TargetGroup", + "logicalId": "BucketB", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.HealthCheckPort", - "category": "Best Practice", - "startLine": 18, + "propertyPath": "Properties.BucketName", + "category": "Resource", + "startLine": 10, "startColumn": 7, - "endLine": 18, - "endColumn": 22, - "relatedResources": [ - { - "resource": { - "id": "Service", - "resourceType": "AWS::ECS::Service" - }, - "location": { - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 20 - }, - "message": "Dynamic host port defined here" - } - ], - "ruleDescription": "ELB target group health check uses a fixed port that will not follow an ECS dynamic host port", + "endLine": 10, + "endColumn": 17, + "ruleDescription": "Validate that all resources have unique primary identifiers", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "BucketA", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.BucketName", "category": "Best Practice", "startLine": 6, "startColumn": 7, "endLine": 6, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TargetGroup", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" - }, - "propertyPath": "Properties.Port", - "category": "Best Practice", - "startLine": 15, - "startColumn": 7, - "endLine": 15, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TargetGroup", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" - }, - "propertyPath": "Properties.Protocol", - "category": "Best Practice", - "startLine": 16, - "startColumn": 7, - "endLine": 16, - "endColumn": 15, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -18210,19 +18642,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup", + "logicalId": "BucketB", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 17, + "startLine": 10, "startColumn": 7, - "endLine": 17, - "endColumn": 12, + "endLine": 10, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -18232,12 +18664,12 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'BucketA' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "BucketA", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -18252,55 +18684,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TargetGroup' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TargetGroup", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 14, - "startColumn": 5, - "endLine": 14, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Service' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Resource 'BucketB' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Service", + "logicalId": "BucketB", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 21, + "startLine": 9, "startColumn": 5, - "endLine": 21, + "endLine": 9, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/ecs_fargate_mismatch.yaml": { - "filePath": "bad/ecs_fargate_mismatch.yaml", + "bad/duplicate_primary_id_multi.yaml": { + "filePath": "bad/duplicate_primary_id_multi.yaml", "status": "OK", "metadata": { "resourcesScanned": 2, "counts": { "fatal": 0, - "errors": 1, + "errors": 0, "warnings": 0, - "informational": 8, + "informational": 4, "debug": 0 }, "suppressed": 0, @@ -18309,136 +18721,181 @@ }, "diagnostics": [ { - "ruleId": "E1154", - "severity": "ERROR", - "message": "'subnet-123' does not match format 'AWS::EC2::Subnet.Id'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Service", + "logicalId": "BucketA", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.NetworkConfiguration.AwsvpcConfiguration.Subnets.0", - "category": "Intrinsic Function", - "startLine": 22, - "startColumn": 15, - "endLine": 22, - "endColumn": 16, - "ruleDescription": "Validate VPC subnet id format", + "propertyPath": "Properties.BucketName", + "category": "Best Practice", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "subnet-123" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsA'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "BucketB", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 6, + "startLine": 15, "startColumn": 7, - "endLine": 6, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 15, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsA'" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Resource 'BucketA' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "BucketA", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Resource 'BucketB' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "BucketB", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 14, + "startColumn": 5, + "endLine": 14, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/dynamodb_attribute_mismatch.yaml": { + "filePath": "bad/dynamodb_attribute_mismatch.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 5, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3039", + "severity": "ERROR", + "message": "AttributeDefinitions does not match KeySchema attributes. missing definitions: [sk]", + "source": "CFN_LINT", + "entity": { + "logicalId": "BadTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties", + "category": "Resource", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "AttributeDefinitions / KeySchemas mismatch", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "TaskDef", + "logicalId": "BadTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "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": "BadTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "BadTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 10, + "startLine": 6, "startColumn": 7, - "endLine": 10, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 6, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -18448,19 +18905,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Service", + "logicalId": "BadTable", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.LaunchType", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 17, + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -18470,12 +18927,12 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'BadTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "BadTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -18486,39 +18943,19 @@ "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Service' of type 'AWS::ECS::Service' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Service", - "entityType": "Resource", - "resourceType": "AWS::ECS::Service" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 16, - "startColumn": 5, - "endLine": 16, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" } ] }, - "bad/ecs_role_no_boundary.yaml": { - "filePath": "bad/ecs_role_no_boundary.yaml", + "bad/dynamodb_prod_no_kms.yaml": { + "filePath": "bad/dynamodb_prod_no_kms.yaml", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 6, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -18527,224 +18964,215 @@ }, "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "TaskDef", + "logicalId": "ProdTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 26, - "startColumn": 7, - "endLine": 26, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt TaskRole.Arn" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "ProdTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ExecutionRoleArn", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 27, + "startLine": 7, "startColumn": 7, - "endLine": 27, - "endColumn": 23, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 7, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ExecRole.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "ProdTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 28, + "startLine": 11, "startColumn": 7, - "endLine": 28, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 11, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } + } + ] + }, + "bad/dynamodb_provisioned_no_throughput.yaml": { + "filePath": "bad/dynamodb_provisioned_no_throughput.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 1, + "warnings": 0, + "informational": 5, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TaskRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'ProvisionedThroughput' is a required property (from extension)", + "source": "SCHEMA", "entity": { - "logicalId": "TaskRole", + "logicalId": "DDBTable", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", + "propertyPath": "Properties", + "suggestedFix": "Add 'ProvisionedThroughput'", + "category": "Schema", "startLine": 5, "startColumn": 5, "endLine": 5, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ExecRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3639", + "severity": "ERROR", + "message": "ProvisionedThroughput is required when BillingMode is 'PROVISIONED'", + "source": "CFN_LINT", "entity": { - "logicalId": "ExecRole", + "logicalId": "DDBTable", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 15, + "propertyPath": "Properties.ProvisionedThroughput", + "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", + "category": "Resource", + "startLine": 5, "startColumn": 5, - "endLine": 15, + "endLine": 5, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", + "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": "TaskDef", + "logicalId": "DDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "bad/elb_http_443.yaml": { - "filePath": "bad/elb_http_443.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'LoadBalancerArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", - "source": "ENGINE", + "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": "Listener", + "logicalId": "DDBTable", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.LoadBalancerArn", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 22, - "ruleDescription": "Hardcoded ARN property", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Listener", + "logicalId": "DDBTable", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::DynamoDB::Table" }, - "category": "Security", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "propertyPath": "Properties.TableName", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Listener", + "logicalId": "DDBTable", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.LoadBalancerArn", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 6, + "startLine": 11, "startColumn": 7, - "endLine": 6, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", + "endLine": 11, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Listener' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", + "message": "Resource 'DDBTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Listener", + "logicalId": "DDBTable", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -18758,47 +19186,15 @@ } ] }, - "bad/empty_file.yaml": { - "filePath": "bad/empty_file.yaml", - "status": "ERROR", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F1101", - "severity": "FATAL", - "message": "Empty YAML document", - "source": "SCHEMA", - "category": "Structure", - "startLine": 1, - "startColumn": 1, - "endLine": 1, - "endColumn": 1, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" - } - ] - }, - "bad/equals_wrong_arity.yaml": { - "filePath": "bad/equals_wrong_arity.yaml", + "bad/ecr_policy_no_statement.yaml": { + "filePath": "bad/ecr_policy_no_statement.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 1, - "warnings": 1, + "warnings": 0, "informational": 1, "debug": 0 }, @@ -18808,65 +19204,49 @@ }, "diagnostics": [ { - "ruleId": "E8003", + "ruleId": "E3513", "severity": "ERROR", - "message": "Fn::Equals: expected maximum item count: 2, found: 3", - "source": "SCHEMA", - "entity": { - "logicalId": "Bad", - "entityType": "Condition" - }, - "propertyPath": "Conditions/Bad/Fn::Equals", - "category": "Intrinsic Function", - "startLine": 4, - "startColumn": 5, - "endLine": 4, - "endColumn": 15, - "ruleDescription": "Fn::Equals must take exactly two scalar operands", - "phase": "PARSE" - }, - { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'Bad' is not used by any resource or Fn::If", + "message": "ECR repository policy must have a Statement property", "source": "CFN_LINT", "entity": { - "logicalId": "Bad", - "entityType": "Condition" + "logicalId": "Repo", + "entityType": "Resource", + "resourceType": "AWS::ECR::Repository" }, - "propertyPath": "Conditions/Bad", - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 6, - "ruleDescription": "Check if Conditions are Used", + "propertyPath": "Properties.RepositoryPolicyText", + "suggestedFix": "Add a Statement array to the RepositoryPolicyText", + "category": "Resource", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 27, + "ruleDescription": "Validate ECR repository policy", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'R' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'Repo' of type 'AWS::ECR::Repository' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "R", + "logicalId": "Repo", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECR::Repository" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, - "startColumn": 3, - "endLine": 9, - "endColumn": 4, + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/fargate_bad_cpu_memory.yaml": { - "filePath": "bad/fargate_bad_cpu_memory.yaml", + "bad/ecs_awsvpc_port_mismatch.yaml": { + "filePath": "bad/ecs_awsvpc_port_mismatch.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, @@ -18874,7 +19254,7 @@ "fatal": 0, "errors": 1, "warnings": 0, - "informational": 7, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -18883,47 +19263,41 @@ }, "diagnostics": [ { - "ruleId": "E3047", + "ruleId": "E3053", "severity": "ERROR", - "message": "Cpu '256' is not compatible with Memory '8192' for Fargate", + "message": "HostPort 8080 must equal ContainerPort 80 when NetworkMode is awsvpc", "source": "CFN_LINT", "entity": { - "logicalId": "TaskDef", + "logicalId": "Task", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "propertyPath": "Properties.ContainerDefinitions[0].PortMappings[0].HostPort", + "suggestedFix": "Set HostPort equal to ContainerPort or remove HostPort", "category": "Resource", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", - "context": { - "extra": { - "cpu": "256", - "memory": "8192" - } - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Validate ECS task definition has correct values for HostPort", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "Task", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", "startLine": 6, "startColumn": 7, "endLine": 6, - "endColumn": 13, + "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -18934,19 +19308,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "Task", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", "startLine": 7, "startColumn": 7, "endLine": 7, - "endColumn": 10, + "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -18954,22 +19328,117 @@ "lifecycle": "create-only" } }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Task' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Task", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/ecs_dynamic_port_no_traffic.yaml": { + "filePath": "bad/ecs_dynamic_port_no_traffic.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 1, + "informational": 7, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E1151", + "severity": "ERROR", + "message": "'vpc-12345' does not match format 'AWS::EC2::VPC.Id'", + "source": "CFN_LINT", + "entity": { + "logicalId": "TargetGroup", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + }, + "propertyPath": "Properties.VpcId", + "category": "Intrinsic Function", + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 12, + "ruleDescription": "Validate VPC id format", + "phase": "SCHEMA", + "context": { + "actualValue": "vpc-12345" + } + }, + { + "ruleId": "W3049", + "severity": "WARN", + "message": "Container 'app' uses dynamic host port 0, so each task registers on an ephemeral port, but TargetGroup 'TargetGroup' health-checks the fixed port '8080'. The health check will not follow the traffic port unless '8080' is separately served on every target. Use HealthCheckPort 'traffic-port' to health-check the port each target actually receives traffic on", + "source": "CFN_LINT", + "entity": { + "logicalId": "TargetGroup", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + }, + "propertyPath": "Properties.HealthCheckPort", + "category": "Best Practice", + "startLine": 18, + "startColumn": 7, + "endLine": 18, + "endColumn": 22, + "relatedResources": [ + { + "resource": { + "id": "Service", + "resourceType": "AWS::ECS::Service" + }, + "location": { + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 20 + }, + "message": "Dynamic host port defined here" + } + ], + "ruleDescription": "ELB target group health check uses a fixed port that will not follow an ECS dynamic host port", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { "logicalId": "TaskDef", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 8, + "startLine": 6, "startColumn": 7, - "endLine": 8, - "endColumn": 13, + "endLine": 6, + "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -18980,20 +19449,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "TargetGroup", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 9, + "startLine": 15, "startColumn": 7, - "endLine": 9, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 15, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -19003,20 +19471,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "TargetGroup", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 10, + "startLine": 16, "startColumn": 7, - "endLine": 10, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 16, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -19026,20 +19493,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "TargetGroup", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 12, + "startLine": 17, "startColumn": 7, - "endLine": 12, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 17, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -19065,135 +19531,86 @@ "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/fargate_daemon.yaml": { - "filePath": "bad/fargate_daemon.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 2, - "warnings": 0, - "informational": 12, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3044", - "severity": "ERROR", - "message": "Fargate launch type does not support DAEMON scheduling strategy", - "source": "CFN_LINT", - "entity": { - "logicalId": "FargateDaemon", - "entityType": "Resource", - "resourceType": "AWS::ECS::Service" - }, - "propertyPath": "Properties.SchedulingStrategy", - "suggestedFix": "Use REPLICA scheduling strategy with Fargate", - "category": "Resource", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 25, - "ruleDescription": "ECS service using FARGATE or EXTERNAL cannot use DAEMON scheduling", - "phase": "LINT", - "context": { - "extra": { - "launch_type": "FARGATE", - "scheduling_strategy": "DAEMON" - } - } - }, - { - "ruleId": "E3052", - "severity": "ERROR", - "message": "NetworkConfiguration required when TaskDefinition NetworkMode is 'awsvpc'", - "source": "CFN_LINT", - "entity": { - "logicalId": "FargateDaemon", - "entityType": "Resource", - "resourceType": "AWS::ECS::Service" - }, - "category": "Resource", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 16, - "ruleDescription": "Validate ECS service requires NetworkConfiguration", - "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'TargetGroup' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateDaemon", + "logicalId": "TargetGroup", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.LaunchType", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 14, + "startColumn": 5, + "endLine": 14, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SchedulingStrategy' is create-only; updating it will cause resource replacement", + "message": "Resource 'Service' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateDaemon", + "logicalId": "Service", "entityType": "Resource", "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.SchedulingStrategy", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 25, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 21, + "startColumn": 5, + "endLine": 21, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/ecs_fargate_mismatch.yaml": { + "filePath": "bad/ecs_fargate_mismatch.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 8, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E1154", + "severity": "ERROR", + "message": "'subnet-123' does not match format 'AWS::EC2::Subnet.Id'", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateDaemon", + "logicalId": "Service", "entityType": "Resource", "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.Cluster", - "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 14, - "ruleDescription": "Create-only property updated triggers resource replacement", + "propertyPath": "Properties.NetworkConfiguration.AwsvpcConfiguration.Subnets.0", + "category": "Intrinsic Function", + "startLine": 22, + "startColumn": 15, + "endLine": 22, + "endColumn": 16, + "ruleDescription": "Validate VPC subnet id format", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Cluster'" + "actualValue": "subnet-123" } }, { @@ -19208,9 +19625,9 @@ }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 13, + "startLine": 6, "startColumn": 7, - "endLine": 13, + "endLine": 6, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -19222,42 +19639,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDef", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { "logicalId": "TaskDef", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 16, + "startLine": 7, "startColumn": 7, - "endLine": 16, - "endColumn": 10, + "endLine": 7, + "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -19268,19 +19662,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { "logicalId": "TaskDef", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 17, + "startLine": 8, "startColumn": 7, - "endLine": 17, - "endColumn": 13, + "endLine": 8, + "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -19291,19 +19685,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { "logicalId": "TaskDef", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 18, + "startLine": 9, "startColumn": 7, - "endLine": 18, - "endColumn": 18, + "endLine": 9, + "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -19323,9 +19717,9 @@ }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 19, + "startLine": 10, "startColumn": 7, - "endLine": 19, + "endLine": 10, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -19335,24 +19729,26 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateDaemon' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateDaemon", + "logicalId": "Service", "entityType": "Resource", "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9040", @@ -19367,9 +19763,9 @@ "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, + "startLine": 5, "startColumn": 5, - "endLine": 12, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19377,35 +19773,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Cluster' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Resource 'Service' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "Service", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 23, - "startColumn": 3, - "endLine": 23, - "endColumn": 10, + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/findinmap_bad.yaml": { - "filePath": "bad/findinmap_bad.yaml", + "bad/ecs_role_no_boundary.yaml": { + "filePath": "bad/ecs_role_no_boundary.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 3, "counts": { - "fatal": 1, + "fatal": 0, "errors": 0, "warnings": 0, - "informational": 1, + "informational": 6, "debug": 0 }, "suppressed": 0, @@ -19414,214 +19810,247 @@ }, "diagnostics": [ { - "ruleId": "F1012", - "severity": "FATAL", - "message": "Fn::FindInMap references non-existent mapping 'NonExistentMap'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECS::TaskDefinition" }, - "category": "Intrinsic Function", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 9, - "ruleDescription": "FindInMap map name must exist in Mappings", - "phase": "SCHEMA" + "propertyPath": "Properties.TaskRoleArn", + "category": "Best Practice", + "startLine": 26, + "startColumn": 7, + "endLine": 26, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt TaskRole.Arn" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.ExecutionRoleArn", "category": "Best Practice", - "startLine": 6, + "startLine": 27, "startColumn": 7, - "endLine": 6, - "endColumn": 17, + "endLine": 27, + "endColumn": 23, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt ExecRole.Arn" } - } - ] - }, - "bad/formatters.yaml": { - "filePath": "bad/formatters.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 5, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "myTable", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.TableName.Fn::Sub", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 9, + "startLine": 28, "startColumn": 7, - "endLine": 9, - "endColumn": 14, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "endLine": 28, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'5' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TaskRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "myTable", + "logicalId": "TaskRole", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.ProvisionedThroughput.WriteCapacityUnits", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 18, - "startColumn": 9, - "endLine": 18, - "endColumn": 27, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'ExecRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "myTable", + "logicalId": "ExecRole", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::IAM::Role" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, - "startColumn": 3, - "endLine": 6, - "endColumn": 10, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "TaskDef", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 25, + "startColumn": 5, + "endLine": 25, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/elb_http_443.yaml": { + "filePath": "bad/elb_http_443.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'LoadBalancerArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", "entity": { - "logicalId": "myTable", + "logicalId": "Listener", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, + "propertyPath": "Properties.LoadBalancerArn", "category": "Best Practice", "startLine": 6, - "startColumn": 3, + "startColumn": 7, "endLine": 6, - "endColumn": 10, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endColumn": 22, + "ruleDescription": "Hardcoded ARN property", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "myTable", + "logicalId": "Listener", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "Properties.TableName", - "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "category": "Security", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myTable", + "logicalId": "Listener", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.LoadBalancerArn", "category": "Best Practice", - "startLine": 13, + "startLine": 6, "startColumn": 7, - "endLine": 13, - "endColumn": 16, + "endLine": 6, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'Listener' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myTable", + "logicalId": "Listener", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 8, + "startLine": 5, "startColumn": 5, - "endLine": 8, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/functions/findinmap_default_value_no_transform.yaml": { - "filePath": "bad/functions/findinmap_default_value_no_transform.yaml", - "status": "OK", + "bad/empty_file.yaml": { + "filePath": "bad/empty_file.yaml", + "status": "ERROR", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 0, "counts": { "fatal": 1, "errors": 0, "warnings": 0, - "informational": 1, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -19632,54 +20061,28 @@ { "ruleId": "F1101", "severity": "FATAL", - "message": "Fn::FindInMap: the 'DefaultValue' element requires the AWS::LanguageExtensions transform; without it Fn::FindInMap accepts at most 3 elements", + "message": "Empty YAML document", "source": "SCHEMA", - "entity": { - "logicalId": "Topic", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.DisplayName", "category": "Structure", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 18, + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 1, "ruleDescription": "Invalid YAML/JSON syntax", "phase": "PARSE" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Topic' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Topic", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 13, - "startColumn": 5, - "endLine": 13, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" } ] }, - "bad/functions/foreach_no_transform.yaml": { - "filePath": "bad/functions/foreach_no_transform.yaml", + "bad/equals_wrong_arity.yaml": { + "filePath": "bad/equals_wrong_arity.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 4, - "errors": 0, - "warnings": 0, - "informational": 0, + "fatal": 0, + "errors": 1, + "warnings": 1, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -19688,89 +20091,73 @@ }, "diagnostics": [ { - "ruleId": "F0006", - "severity": "FATAL", - "message": "Logical ID 'Fn::ForEach::Buckets' must be alphanumeric (A-Za-z0-9)", - "source": "SCHEMA", - "entity": { - "logicalId": "Fn::ForEach::Buckets", - "entityType": "Resource", - "resourceType": "" - }, - "category": "Structure", - "startLine": 11, - "startColumn": 5, - "endLine": 11, - "endColumn": 25, - "ruleDescription": "Logical IDs must be alphanumeric", - "phase": "SCHEMA" - }, - { - "ruleId": "F1032", - "severity": "FATAL", - "message": "Fn::ForEach requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use 'Fn::ForEach::Buckets'", + "ruleId": "E8003", + "severity": "ERROR", + "message": "Fn::Equals: expected maximum item count: 2, found: 3", "source": "SCHEMA", "entity": { - "logicalId": "Fn::ForEach::Buckets", - "entityType": "Resource", - "resourceType": "" + "logicalId": "Bad", + "entityType": "Condition" }, + "propertyPath": "Conditions/Bad/Fn::Equals", "category": "Intrinsic Function", - "startLine": 11, + "startLine": 4, "startColumn": 5, - "endLine": 11, - "endColumn": 25, - "ruleDescription": "Fn::ForEach requires the AWS::LanguageExtensions transform", + "endLine": 4, + "endColumn": 15, + "ruleDescription": "Fn::Equals must take exactly two scalar operands", "phase": "PARSE" }, { - "ruleId": "F1032", - "severity": "FATAL", - "message": "Fn::ForEach requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use 'Fn::ForEach::BucketOutputs'", - "source": "SCHEMA", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'Bad' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "Fn::ForEach::BucketOutputs", - "entityType": "Output" + "logicalId": "Bad", + "entityType": "Condition" }, - "propertyPath": "Outputs/Fn::ForEach::BucketOutputs", - "category": "Intrinsic Function", - "startLine": 33, - "startColumn": 5, - "endLine": 33, - "endColumn": 31, - "ruleDescription": "Fn::ForEach requires the AWS::LanguageExtensions transform", - "phase": "PARSE" + "propertyPath": "Conditions/Bad", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 6, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { - "ruleId": "F1032", - "severity": "FATAL", - "message": "Fn::ForEach requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use 'Fn::ForEach::GetAttLoop'", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'R' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Fn::ForEach::BucketOutputs", - "entityType": "Output" + "logicalId": "R", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Outputs/Fn::ForEach::BucketOutputs/2/Fn::ForEach::GetAttLoop", - "category": "Intrinsic Function", - "startLine": 36, - "startColumn": 11, - "endLine": 36, - "endColumn": 34, - "ruleDescription": "Fn::ForEach requires the AWS::LanguageExtensions transform", - "phase": "PARSE" + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 4, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "bad/functions/get_stack_output.json": { - "filePath": "bad/functions/get_stack_output.json", + "bad/fargate_bad_cpu_memory.yaml": { + "filePath": "bad/fargate_bad_cpu_memory.yaml", "status": "OK", "metadata": { - "resourcesScanned": 4, + "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 4, + "errors": 1, "warnings": 0, - "informational": 4, + "informational": 7, "debug": 0 }, "suppressed": 0, @@ -19779,173 +20166,201 @@ }, "diagnostics": [ { - "ruleId": "E1033", + "ruleId": "E3047", "severity": "ERROR", - "message": "'OutputName' is a required property", - "source": "SCHEMA", + "message": "Cpu '256' is not compatible with Memory '8192' for Fargate", + "source": "CFN_LINT", "entity": { - "logicalId": "Topic1", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", - "category": "Intrinsic Function", - "startLine": 8, - "startColumn": 11, - "endLine": 8, - "endColumn": 30, - "ruleDescription": "GetStackOutput validation of parameters", - "phase": "PARSE" + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "category": "Resource", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", + "context": { + "extra": { + "cpu": "256", + "memory": "8192" + } + } }, { - "ruleId": "E1033", - "severity": "ERROR", - "message": "'StackName' is a required property", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Topic2", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", - "category": "Intrinsic Function", - "startLine": 18, - "startColumn": 11, - "endLine": 18, - "endColumn": 30, - "ruleDescription": "GetStackOutput validation of parameters", - "phase": "PARSE" + "propertyPath": "Properties.Family", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E1033", - "severity": "ERROR", - "message": "'invalid' is not of type 'object'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Topic3", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", - "category": "Intrinsic Function", - "startLine": 28, - "startColumn": 11, - "endLine": 28, - "endColumn": 30, - "ruleDescription": "GetStackOutput validation of parameters", - "phase": "PARSE" + "propertyPath": "Properties.Cpu", + "category": "Best Practice", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E1033", - "severity": "ERROR", - "message": "Additional properties are not allowed ('BadKey' was unexpected)", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Topic4", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.DisplayName.Fn::GetStackOutput.BadKey", - "category": "Intrinsic Function", - "startLine": 39, - "startColumn": 13, - "endLine": 39, - "endColumn": 20, - "ruleDescription": "GetStackOutput validation of parameters", - "phase": "PARSE" + "propertyPath": "Properties.Memory", + "category": "Best Practice", + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Topic1' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic1", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 6, + "startLine": 9, "startColumn": 7, - "endLine": 6, + "endLine": 9, "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Topic2' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic2", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 16, + "startLine": 10, "startColumn": 7, - "endLine": 16, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 10, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Topic3' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic3", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 26, + "startLine": 12, "startColumn": 7, - "endLine": 26, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 12, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Topic4' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Topic4", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 34, - "startColumn": 7, - "endLine": 34, - "endColumn": 18, + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/functions/get_stack_output.yaml": { - "filePath": "bad/functions/get_stack_output.yaml", + "bad/fargate_daemon.yaml": { + "filePath": "bad/fargate_daemon.yaml", "status": "OK", "metadata": { - "resourcesScanned": 5, + "resourcesScanned": 3, "counts": { "fatal": 0, - "errors": 4, + "errors": 2, "warnings": 0, - "informational": 8, + "informational": 12, "debug": 0 }, "suppressed": 0, @@ -19954,172 +20369,270 @@ }, "diagnostics": [ { - "ruleId": "E1033", + "ruleId": "E3044", "severity": "ERROR", - "message": "'OutputName' is a required property", - "source": "SCHEMA", + "message": "Fargate launch type does not support DAEMON scheduling strategy", + "source": "CFN_LINT", "entity": { - "logicalId": "Topic1", + "logicalId": "FargateDaemon", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", - "category": "Intrinsic Function", - "startLine": 8, - "startColumn": 9, - "endLine": 8, - "endColumn": 27, - "ruleDescription": "GetStackOutput validation of parameters", - "phase": "PARSE" + "propertyPath": "Properties.SchedulingStrategy", + "suggestedFix": "Use REPLICA scheduling strategy with Fargate", + "category": "Resource", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 25, + "ruleDescription": "ECS service using FARGATE or EXTERNAL cannot use DAEMON scheduling", + "phase": "LINT", + "context": { + "extra": { + "launch_type": "FARGATE", + "scheduling_strategy": "DAEMON" + } + } }, { - "ruleId": "E1033", + "ruleId": "E3052", "severity": "ERROR", - "message": "'StackName' is a required property", - "source": "SCHEMA", + "message": "NetworkConfiguration required when TaskDefinition NetworkMode is 'awsvpc'", + "source": "CFN_LINT", "entity": { - "logicalId": "Topic2", + "logicalId": "FargateDaemon", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", - "category": "Intrinsic Function", - "startLine": 15, - "startColumn": 9, - "endLine": 15, - "endColumn": 27, - "ruleDescription": "GetStackOutput validation of parameters", - "phase": "PARSE" + "category": "Resource", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 16, + "ruleDescription": "Validate ECS service requires NetworkConfiguration", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FargateDaemon", + "entityType": "Resource", + "resourceType": "AWS::ECS::Service" + }, + "propertyPath": "Properties.LaunchType", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SchedulingStrategy' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FargateDaemon", + "entityType": "Resource", + "resourceType": "AWS::ECS::Service" + }, + "propertyPath": "Properties.SchedulingStrategy", + "category": "Best Practice", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 25, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FargateDaemon", + "entityType": "Resource", + "resourceType": "AWS::ECS::Service" + }, + "propertyPath": "Properties.Cluster", + "category": "Best Practice", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Cluster'" + } }, { - "ruleId": "E1033", - "severity": "ERROR", - "message": "'invalid' is not of type 'object'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Topic3", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", - "category": "Intrinsic Function", - "startLine": 22, - "startColumn": 9, - "endLine": 22, - "endColumn": 27, - "ruleDescription": "GetStackOutput validation of parameters", - "phase": "PARSE" + "propertyPath": "Properties.Family", + "category": "Best Practice", + "startLine": 13, + "startColumn": 7, + "endLine": 13, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E1033", - "severity": "ERROR", - "message": "Additional properties are not allowed ('BadKey' was unexpected)", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Topic4", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.DisplayName.Fn::GetStackOutput.BadKey", - "category": "Intrinsic Function", - "startLine": 31, - "startColumn": 11, - "endLine": 31, - "endColumn": 17, - "ruleDescription": "GetStackOutput validation of parameters", - "phase": "PARSE" + "propertyPath": "Properties.RequiresCompatibilities", + "category": "Best Practice", + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Topic5", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ECS::TaskDefinition" }, + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 33, - "startColumn": 3, - "endLine": 33, - "endColumn": 9, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 16, + "startColumn": 7, + "endLine": 16, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Topic5", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ECS::TaskDefinition" }, + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 33, - "startColumn": 3, - "endLine": 33, - "endColumn": 9, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "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", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Topic5", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 35, - "startColumn": 5, - "endLine": 35, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "startLine": 18, + "startColumn": 7, + "endLine": 18, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Topic1' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic1", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 19, + "startColumn": 7, + "endLine": 19, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Topic2' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'FargateDaemon' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Topic2", + "logicalId": "FargateDaemon", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 13, + "startLine": 5, "startColumn": 5, - "endLine": 13, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20127,19 +20640,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Topic3' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Topic3", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 20, + "startLine": 12, "startColumn": 5, - "endLine": 20, + "endLine": 12, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20147,42 +20660,81 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Topic4' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Cluster' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Topic4", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::Cluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 26, - "startColumn": 5, - "endLine": 26, - "endColumn": 15, + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 10, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/findinmap_bad.yaml": { + "filePath": "bad/findinmap_bad.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "F1012", + "severity": "FATAL", + "message": "Fn::FindInMap references non-existent mapping 'NonExistentMap'", + "source": "SCHEMA", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "category": "Intrinsic Function", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "FindInMap map name must exist in Mappings", + "phase": "SCHEMA" + }, + { + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Topic5' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic5", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 35, - "startColumn": 5, - "endLine": 35, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } } ] } diff --git a/src/resources/expected/validation_reports2.json b/src/resources/expected/validation_reports2.json index 7e71fa22..7c25829a 100644 --- a/src/resources/expected/validation_reports2.json +++ b/src/resources/expected/validation_reports2.json @@ -1,14 +1,14 @@ { - "bad/functions/import_value.yaml": { - "filePath": "bad/functions/import_value.yaml", + "bad/formatters.yaml": { + "filePath": "bad/formatters.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 1, - "warnings": 1, - "informational": 3, + "errors": 0, + "warnings": 2, + "informational": 5, "debug": 0 }, "suppressed": 0, @@ -17,52 +17,90 @@ }, "diagnostics": [ { - "ruleId": "E8003", - "severity": "ERROR", - "message": "Fn::Equals: argument 1: {'Fn::ImportValue': 'PrimaryRegion'} is not of type 'string'", - "source": "SCHEMA", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "primaryRegion", - "entityType": "Condition" + "logicalId": "myTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Conditions/primaryRegion/Fn::Equals", - "category": "Intrinsic Function", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 13, - "ruleDescription": "Fn::Equals must take exactly two scalar operands", - "phase": "PARSE" + "propertyPath": "Properties.TableName.Fn::Sub", + "category": "Best Practice", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 14, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "W8001", + "ruleId": "W9003", "severity": "WARN", - "message": "Condition 'primaryRegion' is not used by any resource or Fn::If", + "message": "'5' is not of type 'integer' - automatically coerced (string to integer)", "source": "CFN_LINT", "entity": { - "logicalId": "primaryRegion", - "entityType": "Condition" + "logicalId": "myTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Conditions/primaryRegion", + "propertyPath": "Properties.ProvisionedThroughput.WriteCapacityUnits", "category": "Best Practice", - "startLine": 4, + "startLine": 18, + "startColumn": 9, + "endLine": 18, + "endColumn": 27, + "ruleDescription": "Property type coercion warning", + "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": "myTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 6, "startColumn": 3, - "endLine": 4, - "endColumn": 16, - "ruleDescription": "Check if Conditions are Used", + "endLine": 6, + "endColumn": 10, + "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": "myTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 10, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "subnet", + "logicalId": "myTable", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.TableName", "category": "Best Practice", "startLine": 9, "startColumn": 7, @@ -71,42 +109,40 @@ "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "subnet", + "logicalId": "myTable", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 12, + "startLine": 13, "startColumn": 7, - "endLine": 12, - "endColumn": 12, + "endLine": 13, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import)" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'subnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'myTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "subnet", + "logicalId": "myTable", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -120,8 +156,8 @@ } ] }, - "bad/functions/length_no_transform.yaml": { - "filePath": "bad/functions/length_no_transform.yaml", + "bad/functions/findinmap_default_value_no_transform.yaml": { + "filePath": "bad/functions/findinmap_default_value_no_transform.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, @@ -129,7 +165,7 @@ "fatal": 1, "errors": 0, "warnings": 0, - "informational": 4, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -138,111 +174,56 @@ }, "diagnostics": [ { - "ruleId": "F1030", + "ruleId": "F1101", "severity": "FATAL", - "message": "Fn::Length requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use it", + "message": "Fn::FindInMap: the 'DefaultValue' element requires the AWS::LanguageExtensions transform; without it Fn::FindInMap accepts at most 3 elements", "source": "SCHEMA", "entity": { - "logicalId": "Queue", + "logicalId": "Topic", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.DelaySeconds", - "category": "Intrinsic Function", - "startLine": 13, + "propertyPath": "Properties.DisplayName", + "category": "Structure", + "startLine": 14, "startColumn": 7, - "endLine": 13, - "endColumn": 19, - "ruleDescription": "Fn::Length requires the AWS::LanguageExtensions transform", + "endLine": 14, + "endColumn": 18, + "ruleDescription": "Invalid YAML/JSON syntax", "phase": "PARSE" }, - { - "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": 10, - "startColumn": 3, - "endLine": 10, - "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": 10, - "startColumn": 3, - "endLine": 10, - "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": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" - }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Queue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Resource 'Topic' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "Topic", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, + "startLine": 13, "startColumn": 5, - "endLine": 12, + "endLine": 13, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/functions/relationship_conditions.yaml": { - "filePath": "bad/functions/relationship_conditions.yaml", + "bad/functions/foreach_no_transform.yaml": { + "filePath": "bad/functions/foreach_no_transform.yaml", "status": "OK", "metadata": { - "resourcesScanned": 5, + "resourcesScanned": 1, "counts": { - "fatal": 0, - "errors": 1, - "warnings": 7, - "informational": 6, + "fatal": 4, + "errors": 0, + "warnings": 0, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -251,300 +232,264 @@ }, "diagnostics": [ { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "F0006", + "severity": "FATAL", + "message": "Logical ID 'Fn::ForEach::Buckets' must be alphanumeric (A-Za-z0-9)", + "source": "SCHEMA", "entity": { - "logicalId": "AMIIDLookup", + "logicalId": "Fn::ForEach::Buckets", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 44, - "startColumn": 7, - "endLine": 44, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs4.3", - "lifecycle": "end-of-life" - } + "category": "Structure", + "startLine": 11, + "startColumn": 5, + "endLine": 11, + "endColumn": 25, + "ruleDescription": "Logical IDs must be alphanumeric", + "phase": "SCHEMA" }, { - "ruleId": "W1001", - "severity": "WARN", - "message": "Reference to 'LambdaExecutionRole' which is conditional on 'isPrimary' - target may not exist", - "source": "CFN_LINT", + "ruleId": "F1032", + "severity": "FATAL", + "message": "Fn::ForEach requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use 'Fn::ForEach::Buckets'", + "source": "SCHEMA", "entity": { - "logicalId": "InstanceProfile", + "logicalId": "Fn::ForEach::Buckets", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "" }, - "propertyPath": "Properties.Roles.0", - "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", - "category": "Best Practice", - "startLine": 32, - "startColumn": 14, - "endLine": 32, - "endColumn": 15, - "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", - "phase": "LINT" + "category": "Intrinsic Function", + "startLine": 11, + "startColumn": 5, + "endLine": 11, + "endColumn": 25, + "ruleDescription": "Fn::ForEach requires the AWS::LanguageExtensions transform", + "phase": "PARSE" }, { - "ruleId": "W1001", - "severity": "WARN", - "message": "Reference to 'LambdaExecutionRole' which is conditional on 'isPrimary' - target may not exist", - "source": "CFN_LINT", + "ruleId": "F1032", + "severity": "FATAL", + "message": "Fn::ForEach requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use 'Fn::ForEach::BucketOutputs'", + "source": "SCHEMA", "entity": { - "logicalId": "AMIIDLookup", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "logicalId": "Fn::ForEach::BucketOutputs", + "entityType": "Output" }, - "propertyPath": "Properties.Role", - "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", - "category": "Best Practice", - "startLine": 37, - "startColumn": 7, - "endLine": 37, - "endColumn": 11, - "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", - "phase": "LINT" + "propertyPath": "Outputs/Fn::ForEach::BucketOutputs", + "category": "Intrinsic Function", + "startLine": 33, + "startColumn": 5, + "endLine": 33, + "endColumn": 31, + "ruleDescription": "Fn::ForEach requires the AWS::LanguageExtensions transform", + "phase": "PARSE" }, { - "ruleId": "W1001", - "severity": "WARN", - "message": "Reference to 'LambdaExecutionRole' which is conditional on 'isPrimary' - target may not exist", - "source": "CFN_LINT", + "ruleId": "F1032", + "severity": "FATAL", + "message": "Fn::ForEach requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use 'Fn::ForEach::GetAttLoop'", + "source": "SCHEMA", "entity": { - "logicalId": "SubCondRefParam", - "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "logicalId": "Fn::ForEach::BucketOutputs", + "entityType": "Output" }, - "propertyPath": "Properties.Value", - "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", - "category": "Best Practice", - "startLine": 53, - "startColumn": 7, - "endLine": 53, - "endColumn": 12, - "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", - "phase": "LINT" + "propertyPath": "Outputs/Fn::ForEach::BucketOutputs/2/Fn::ForEach::GetAttLoop", + "category": "Intrinsic Function", + "startLine": 36, + "startColumn": 11, + "endLine": 36, + "endColumn": 34, + "ruleDescription": "Fn::ForEach requires the AWS::LanguageExtensions transform", + "phase": "PARSE" + } + ] + }, + "bad/functions/get_stack_output.json": { + "filePath": "bad/functions/get_stack_output.json", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 0, + "errors": 4, + "warnings": 0, + "informational": 4, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W1001", - "severity": "WARN", - "message": "Reference to 'LambdaExecutionRole' which is conditional on 'isPrimary' - target may not exist", - "source": "CFN_LINT", + "ruleId": "E1033", + "severity": "ERROR", + "message": "'OutputName' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "SubCondGetAttParam", + "logicalId": "Topic1", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" - }, - "propertyPath": "Properties.Value", - "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", - "category": "Best Practice", - "startLine": 59, - "startColumn": 7, - "endLine": 59, - "endColumn": 12, - "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", - "phase": "LINT" - }, - { - "ruleId": "W1001", - "severity": "WARN", - "message": "Reference to 'LambdaExecutionRole' which is conditional on 'isPrimary' - target may not exist", - "source": "CFN_LINT", - "entity": { - "logicalId": "lambdaArn", - "entityType": "Output" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Outputs/lambdaArn/Value.Fn::GetAtt", - "suggestedFix": "Add a Condition to the output that implies the target's condition", - "category": "Best Practice", - "startLine": 62, - "startColumn": 3, - "endLine": 62, - "endColumn": 12, - "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", - "phase": "LINT" + "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", + "category": "Intrinsic Function", + "startLine": 8, + "startColumn": 11, + "endLine": 8, + "endColumn": 30, + "ruleDescription": "GetStackOutput validation of parameters", + "phase": "PARSE" }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'isProduction' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "E1033", + "severity": "ERROR", + "message": "'StackName' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "isProduction", - "entityType": "Condition" + "logicalId": "Topic2", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Conditions/isProduction", - "category": "Best Practice", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 15, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" + "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", + "category": "Intrinsic Function", + "startLine": 18, + "startColumn": 11, + "endLine": 18, + "endColumn": 30, + "ruleDescription": "GetStackOutput validation of parameters", + "phase": "PARSE" }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'isDevelopment' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "E1033", + "severity": "ERROR", + "message": "'invalid' is not of type 'object'", + "source": "SCHEMA", "entity": { - "logicalId": "isDevelopment", - "entityType": "Condition" + "logicalId": "Topic3", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Conditions/isDevelopment", - "category": "Best Practice", - "startLine": 8, - "startColumn": 3, - "endLine": 8, - "endColumn": 16, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" + "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", + "category": "Intrinsic Function", + "startLine": 28, + "startColumn": 11, + "endLine": 28, + "endColumn": 30, + "ruleDescription": "GetStackOutput validation of parameters", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E1033", + "severity": "ERROR", + "message": "Additional properties are not allowed ('BadKey' was unexpected)", + "source": "SCHEMA", "entity": { - "logicalId": "LambdaExecutionRole", + "logicalId": "Topic4", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.Path", - "category": "Best Practice", - "startLine": 26, - "startColumn": 7, - "endLine": 26, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.DisplayName.Fn::GetStackOutput.BadKey", + "category": "Intrinsic Function", + "startLine": 39, + "startColumn": 13, + "endLine": 39, + "endColumn": 20, + "ruleDescription": "GetStackOutput validation of parameters", + "phase": "PARSE" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Resource 'Topic1' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "InstanceProfile", + "logicalId": "Topic1", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 30, + "startLine": 6, "startColumn": 7, - "endLine": 30, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 6, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'Topic2' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LambdaExecutionRole", + "logicalId": "Topic2", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 14, - "startColumn": 5, - "endLine": 14, - "endColumn": 15, + "startLine": 16, + "startColumn": 7, + "endLine": 16, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'AMIIDLookup' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'Topic3' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AMIIDLookup", + "logicalId": "Topic3", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 35, - "startColumn": 5, - "endLine": 35, - "endColumn": 15, + "startLine": 26, + "startColumn": 7, + "endLine": 26, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SubCondRefParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", + "message": "Resource 'Topic4' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubCondRefParam", + "logicalId": "Topic4", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 51, - "startColumn": 5, - "endLine": 51, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SubCondGetAttParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SubCondGetAttParam", - "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 57, - "startColumn": 5, - "endLine": 57, - "endColumn": 15, + "startLine": 34, + "startColumn": 7, + "endLine": 34, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/functions/sub_needed.yaml": { - "filePath": "bad/functions/sub_needed.yaml", + "bad/functions/get_stack_output.yaml": { + "filePath": "bad/functions/get_stack_output.yaml", "status": "OK", "metadata": { "resourcesScanned": 5, "counts": { "fatal": 0, - "errors": 10, - "warnings": 4, - "informational": 9, + "errors": 4, + "warnings": 0, + "informational": 8, "debug": 0 }, "suppressed": 0, @@ -553,404 +498,172 @@ }, "diagnostics": [ { - "ruleId": "E1029", - "severity": "ERROR", - "message": "Found an embedded parameter '${AMIId}' outside of an 'Fn::Sub' at Properties.ImageId", - "source": "CFN_LINT", - "entity": { - "logicalId": "myInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "suggestedFix": "Wrap the string with Fn::Sub", - "category": "Intrinsic Function", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 14, - "ruleDescription": "Substitution variable ${X} requires Fn::Sub", - "phase": "LINT" - }, - { - "ruleId": "E1029", - "severity": "ERROR", - "message": "Found an embedded parameter '${AMIId}' outside of an 'Fn::Sub' at Properties.PolicyDocument.Statement.0.Resource", - "source": "CFN_LINT", - "entity": { - "logicalId": "myPolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" - }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Resource", - "suggestedFix": "Wrap the string with Fn::Sub", - "category": "Intrinsic Function", - "startLine": 25, - "startColumn": 11, - "endLine": 25, - "endColumn": 19, - "ruleDescription": "Substitution variable ${X} requires Fn::Sub", - "phase": "LINT" - }, - { - "ruleId": "E1029", - "severity": "ERROR", - "message": "Found an embedded parameter '${AWS::AccountId}' outside of an 'Fn::Sub' at Properties.PolicyDocument.Statement.0.Resource", - "source": "CFN_LINT", - "entity": { - "logicalId": "myPolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" - }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Resource", - "suggestedFix": "Wrap the string with Fn::Sub", - "category": "Intrinsic Function", - "startLine": 25, - "startColumn": 11, - "endLine": 25, - "endColumn": 19, - "ruleDescription": "Substitution variable ${X} requires Fn::Sub", - "phase": "LINT" - }, - { - "ruleId": "E1029", - "severity": "ERROR", - "message": "Found an embedded parameter '${AMIId}' outside of an 'Fn::Sub' at Properties.PolicyDocument.Statement.1.NotResource", - "source": "CFN_LINT", - "entity": { - "logicalId": "myPolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" - }, - "propertyPath": "Properties.PolicyDocument.Statement.1.NotResource", - "suggestedFix": "Wrap the string with Fn::Sub", - "category": "Intrinsic Function", - "startLine": 29, - "startColumn": 11, - "endLine": 29, - "endColumn": 22, - "ruleDescription": "Substitution variable ${X} requires Fn::Sub", - "phase": "LINT" - }, - { - "ruleId": "E1029", + "ruleId": "E1033", "severity": "ERROR", - "message": "Found an embedded parameter '${AWS::AccountId}' outside of an 'Fn::Sub' at Properties.PolicyDocument.Statement.1.NotResource", - "source": "CFN_LINT", + "message": "'OutputName' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "myPolicy", + "logicalId": "Topic1", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.PolicyDocument.Statement.1.NotResource", - "suggestedFix": "Wrap the string with Fn::Sub", + "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", "category": "Intrinsic Function", - "startLine": 29, - "startColumn": 11, - "endLine": 29, - "endColumn": 22, - "ruleDescription": "Substitution variable ${X} requires Fn::Sub", - "phase": "LINT" + "startLine": 8, + "startColumn": 9, + "endLine": 8, + "endColumn": 27, + "ruleDescription": "GetStackOutput validation of parameters", + "phase": "PARSE" }, { - "ruleId": "E1029", + "ruleId": "E1033", "severity": "ERROR", - "message": "Found an embedded parameter '${definition_substitution_1}' outside of an 'Fn::Sub' at Properties.DefinitionString.Fn::Join.1.5", - "source": "CFN_LINT", + "message": "'StackName' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "TestBadStateMachine1", + "logicalId": "Topic2", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.DefinitionString.Fn::Join.1.5", - "suggestedFix": "Wrap the string with Fn::Sub", + "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", "category": "Intrinsic Function", - "startLine": 46, - "startColumn": 13, - "endLine": 46, - "endColumn": 14, - "ruleDescription": "Substitution variable ${X} requires Fn::Sub", - "phase": "LINT" + "startLine": 15, + "startColumn": 9, + "endLine": 15, + "endColumn": 27, + "ruleDescription": "GetStackOutput validation of parameters", + "phase": "PARSE" }, { - "ruleId": "E1029", + "ruleId": "E1033", "severity": "ERROR", - "message": "Found an embedded parameter '${definition_substitution_1}' outside of an 'Fn::Sub' at Properties.DefinitionString.Fn::Join.1.5", - "source": "CFN_LINT", + "message": "'invalid' is not of type 'object'", + "source": "SCHEMA", "entity": { - "logicalId": "TestBadStateMachine2", + "logicalId": "Topic3", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.DefinitionString.Fn::Join.1.5", - "suggestedFix": "Wrap the string with Fn::Sub", + "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", "category": "Intrinsic Function", - "startLine": 67, - "startColumn": 13, - "endLine": 67, - "endColumn": 14, - "ruleDescription": "Substitution variable ${X} requires Fn::Sub", - "phase": "LINT" + "startLine": 22, + "startColumn": 9, + "endLine": 22, + "endColumn": 27, + "ruleDescription": "GetStackOutput validation of parameters", + "phase": "PARSE" }, { - "ruleId": "E1152", + "ruleId": "E1033", "severity": "ERROR", - "message": "'${AMIId}' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "message": "Additional properties are not allowed ('BadKey' was unexpected)", + "source": "SCHEMA", "entity": { - "logicalId": "myInstance", + "logicalId": "Topic4", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.DisplayName.Fn::GetStackOutput.BadKey", "category": "Intrinsic Function", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "${AMIId}" - } - }, - { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'arn:aws:iam::${AWS::AccountId}:user/${aws:username}-${AMIId}' does not match '^(arn:(aws[A-Za-z\\-]*?|[A-Za-z?*\\-]*[?*][A-Za-z?*\\-]*):[^:*?]+:[^:]*(:(?:\\d{12}|\\*|aws)?:.+|)|\\*)$'", - "source": "CFN_LINT", - "entity": { - "logicalId": "myPolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" - }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Resource", - "category": "Resource", - "startLine": 25, + "startLine": 31, "startColumn": 11, - "endLine": 25, - "endColumn": 19, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "endLine": 31, + "endColumn": 17, + "ruleDescription": "GetStackOutput validation of parameters", + "phase": "PARSE" }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'arn:aws:iam::${AWS::AccountId}:user/${aws:username}-${AMIId}' does not match '^(arn:(aws[A-Za-z\\-]*?|[A-Za-z?*\\-]*[?*][A-Za-z?*\\-]*):[^:*?]+:[^:]*(:(?:\\d{12}|\\*|aws)?:.+|)|\\*)$'", + "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": "myPolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" - }, - "propertyPath": "Properties.PolicyDocument.Statement.1.NotResource", - "category": "Resource", - "startLine": 29, - "startColumn": 11, - "endLine": 29, - "endColumn": 22, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" - }, - { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", - "source": "ENGINE", - "entity": { - "logicalId": "TestBadStateMachine1", - "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" - }, - "propertyPath": "Properties.RoleArn", - "category": "Best Practice", - "startLine": 54, - "startColumn": 7, - "endLine": 54, - "endColumn": 14, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" - }, - { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", - "source": "ENGINE", - "entity": { - "logicalId": "TestBadStateMachine2", + "logicalId": "Topic5", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.RoleArn", "category": "Best Practice", - "startLine": 73, - "startColumn": 7, - "endLine": 73, - "endColumn": 14, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" - }, - { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", - "entity": { - "logicalId": "TestBadStateMachine1", - "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" - }, - "category": "Security", - "startLine": 35, - "startColumn": 3, - "endLine": 35, - "endColumn": 23, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" - }, - { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", - "entity": { - "logicalId": "TestBadStateMachine2", - "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" - }, - "category": "Security", - "startLine": 56, + "startLine": 33, "startColumn": 3, - "endLine": 56, - "endColumn": 23, - "ruleDescription": "Hardcoded account ID in ARN", + "endLine": 33, + "endColumn": 9, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I3510", + "ruleId": "I3011", "severity": "INFO", - "message": "action 'iam:UploadSSHPublicKey' requires a resource of ['arn:${Partition}:iam::${Account}:user/.*']", + "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": "myPolicy", + "logicalId": "Topic5", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Resource", - "category": "Security", - "startLine": 25, - "startColumn": 11, - "endLine": 25, - "endColumn": 19, - "ruleDescription": "Validate statement resources match the actions", + "category": "Best Practice", + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 9, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I3510", + "ruleId": "I3013", "severity": "INFO", - "message": "action 'iam:GetLoginProfile' requires a resource of ['arn:${Partition}:iam::${Account}:user/.*']", + "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": "myPolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" - }, - "propertyPath": "Properties.PolicyDocument.Statement.1.NotResource", - "category": "Security", - "startLine": 29, - "startColumn": 11, - "endLine": 29, - "endColumn": 22, - "ruleDescription": "Validate statement resources match the actions", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "myInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AdditionalInfo' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "myInstance", + "logicalId": "Topic5", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.AdditionalInfo", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Sub:${AMIId})" - } + "startLine": 35, + "startColumn": 5, + "endLine": 35, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", + "message": "Resource 'Topic1' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySnsTopic", + "logicalId": "Topic1", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.TopicName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'Topic2' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "Topic2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, + "startLine": 13, "startColumn": 5, - "endLine": 10, + "endLine": 13, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -958,19 +671,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'mySnsTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Topic3' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySnsTopic", + "logicalId": "Topic3", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 32, + "startLine": 20, "startColumn": 5, - "endLine": 32, + "endLine": 20, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -978,19 +691,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TestBadStateMachine1' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "message": "Resource 'Topic4' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TestBadStateMachine1", + "logicalId": "Topic4", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 37, + "startLine": 26, "startColumn": 5, - "endLine": 37, + "endLine": 26, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -998,35 +711,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TestBadStateMachine2' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "message": "Resource 'Topic5' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TestBadStateMachine2", + "logicalId": "Topic5", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::SQS::Queue" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 58, + "startLine": 35, "startColumn": 5, - "endLine": 58, + "endLine": 35, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/functions/tojsonstring_no_transform.yaml": { - "filePath": "bad/functions/tojsonstring_no_transform.yaml", + "bad/functions/import_value.yaml": { + "filePath": "bad/functions/import_value.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 3, - "errors": 0, - "warnings": 0, - "informational": 1, + "fatal": 0, + "errors": 1, + "warnings": 1, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -1035,233 +748,96 @@ }, "diagnostics": [ { - "ruleId": "F1031", - "severity": "FATAL", - "message": "Fn::ToJsonString requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use it", + "ruleId": "E8003", + "severity": "ERROR", + "message": "Fn::Equals: argument 1: {'Fn::ImportValue': 'PrimaryRegion'} is not of type 'string'", "source": "SCHEMA", "entity": { - "logicalId": "Topic", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "primaryRegion", + "entityType": "Condition" }, - "propertyPath": "Properties.DisplayName", + "propertyPath": "Conditions/primaryRegion/Fn::Equals", "category": "Intrinsic Function", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 18, - "ruleDescription": "Fn::ToJsonString requires the AWS::LanguageExtensions transform", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 13, + "ruleDescription": "Fn::Equals must take exactly two scalar operands", "phase": "PARSE" }, { - "ruleId": "F1031", - "severity": "FATAL", - "message": "Fn::ToJsonString requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use it", - "source": "SCHEMA", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'primaryRegion' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "Topic", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "primaryRegion", + "entityType": "Condition" }, - "propertyPath": "Metadata.Custom", - "category": "Intrinsic Function", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 13, - "ruleDescription": "Fn::ToJsonString requires the AWS::LanguageExtensions transform", - "phase": "PARSE" - }, - { - "ruleId": "F1031", - "severity": "FATAL", - "message": "Fn::ToJsonString requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use it", - "source": "SCHEMA", - "entity": { - "logicalId": "JsonOutput", - "entityType": "Output" - }, - "propertyPath": "Outputs/JsonOutput/Value", - "category": "Intrinsic Function", - "startLine": 19, - "startColumn": 5, - "endLine": 19, - "endColumn": 10, - "ruleDescription": "Fn::ToJsonString requires the AWS::LanguageExtensions transform", - "phase": "PARSE" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Topic' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Topic", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/functions_base64.yaml": { - "filePath": "bad/functions_base64.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 2, - "errors": 2, - "warnings": 0, - "informational": 3, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F1012", - "severity": "FATAL", - "message": "Fn::FindInMap references non-existent mapping 'amimap'", - "source": "SCHEMA", - "entity": { - "logicalId": "myInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "category": "Intrinsic Function", - "startLine": 6, - "startColumn": 3, - "endLine": 6, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "FindInMap map name must exist in Mappings", - "phase": "SCHEMA" - }, - { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource myInstance. Circular dependency with [myInstance -> myInstance]", - "source": "SCHEMA", - "entity": { - "logicalId": "myInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Resources/myInstance", - "category": "Reference", - "startLine": 6, - "startColumn": 3, - "endLine": 6, - "endColumn": 13, - "ruleDescription": "Circular dependency detected", - "phase": "LINT" - }, - { - "ruleId": "E1011", - "severity": "ERROR", - "message": "'Fn::GetAtt' is not supported as an argument to 'Fn::FindInMap'", - "source": "SCHEMA", - "entity": { - "logicalId": "myInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId.Fn::FindInMap.2", - "category": "Intrinsic Function", - "startLine": 9, - "startColumn": 65, - "endLine": 9, - "endColumn": 66, - "ruleDescription": "Fn::FindInMap operands must be strings or one of Ref/Fn::FindInMap", - "phase": "PARSE" - }, - { - "ruleId": "E1021", - "severity": "ERROR", - "message": "['Random String'] is not of type 'string'", - "source": "SCHEMA", - "entity": { - "logicalId": "myInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.UserData.Fn::Base64", - "category": "Intrinsic Function", - "startLine": 11, - "startColumn": 9, - "endLine": 11, - "endColumn": 19, - "ruleDescription": "Fn::Base64 argument must be a string or a string-producing intrinsic", - "phase": "PARSE" + "propertyPath": "Conditions/primaryRegion", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 16, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "subnet", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", "startLine": 9, "startColumn": 7, "endLine": 9, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (mapping 'amimap' not found)" + "resolutionSource": "dynamic (cross-stack import)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "subnet", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 10, + "startLine": 12, "startColumn": 7, - "endLine": 10, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 12, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Base64 with non-string argument)" + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import)" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'subnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "subnet", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -1275,16 +851,16 @@ } ] }, - "bad/functions_findinmap_enhanced_invalid_key.yaml": { - "filePath": "bad/functions_findinmap_enhanced_invalid_key.yaml", + "bad/functions/length_no_transform.yaml": { + "filePath": "bad/functions/length_no_transform.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 0, - "errors": 1, + "fatal": 1, + "errors": 0, "warnings": 0, - "informational": 2, + "informational": 4, "debug": 0 }, "suppressed": 0, @@ -1293,427 +869,293 @@ }, "diagnostics": [ { - "ruleId": "E7001", - "severity": "ERROR", - "message": "Mapping 'MapName'.'TopKey1' key '{\"To\":\"Json\",\"String\":\"Function\"}' does not match format '^[a-zA-Z0-9]+$'", - "source": "CFN_LINT", + "ruleId": "F1030", + "severity": "FATAL", + "message": "Fn::Length requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use it", + "source": "SCHEMA", "entity": { - "logicalId": "MapName", - "entityType": "Mapping" + "logicalId": "Queue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Mappings/MapName/TopKey1/{\"To\":\"Json\",\"String\":\"Function\"}", - "category": "Structure", - "startLine": 6, + "propertyPath": "Properties.DelaySeconds", + "category": "Intrinsic Function", + "startLine": 13, "startColumn": 7, - "endLine": 6, - "endColumn": 40, - "ruleDescription": "Mappings are appropriately configured", + "endLine": 13, + "endColumn": 19, + "ruleDescription": "Fn::Length requires the AWS::LanguageExtensions transform", + "phase": "PARSE" + }, + { + "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": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 8, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "Cluster", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.ClusterName", "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "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": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Cluster' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Resource 'Queue' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::SQS::Queue" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, + "startLine": 12, "startColumn": 5, - "endLine": 10, + "endLine": 12, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/functions_getaz.yaml": { - "filePath": "bad/functions_getaz.yaml", + "bad/functions/relationship_conditions.yaml": { + "filePath": "bad/functions/relationship_conditions.yaml", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 5, "counts": { - "fatal": 1, - "errors": 4, - "warnings": 3, - "informational": 12, + "fatal": 0, + "errors": 1, + "warnings": 7, + "informational": 6, "debug": 0 }, - "suppressed": 1, + "suppressed": 0, "strict": false, "severityLevel": "DEBUG" }, "diagnostics": [ { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource mySubnet1. Circular dependency with [mySubnet1 -> mySubnet1]", - "source": "SCHEMA", - "entity": { - "logicalId": "mySubnet1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Resources/mySubnet1", - "category": "Reference", - "startLine": 10, - "startColumn": 3, - "endLine": 10, - "endColumn": 12, - "ruleDescription": "Circular dependency detected", - "phase": "LINT" - }, - { - "ruleId": "E1017", - "severity": "ERROR", - "message": "'us-east-1a' is not a valid region for Fn::GetAZs (use '' for the current region)", - "source": "SCHEMA", - "entity": { - "logicalId": "mySubnet2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone.Fn::Select.1.Fn::GetAZs", - "category": "Intrinsic Function", - "startLine": 27, - "startColumn": 13, - "endLine": 27, - "endColumn": 23, - "ruleDescription": "Fn::Select requires exactly two operands and a list source", - "phase": "PARSE" - }, - { - "ruleId": "E3060", + "ruleId": "E2533", "severity": "ERROR", - "message": "'10.0.0.0/24' overlaps with '10.0.0.0/24'", + "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "mySubnet2", + "logicalId": "AMIIDLookup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.CidrBlock", - "category": "Resource", - "startLine": 23, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 44, "startColumn": 7, - "endLine": 23, - "endColumn": 16, - "relatedResources": [ - { - "resource": { - "id": "mySubnet1", - "resourceType": "AWS::EC2::Subnet" - }, - "location": { - "startLine": 10, - "startColumn": 3, - "endLine": 10, - "endColumn": 12 - }, - "message": "Overlapping subnet CIDR 10.0.0.0/24" - } - ], - "ruleDescription": "Validate subnet CIDRs do not overlap with other subnets", - "phase": "LINT", + "endLine": 44, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", "context": { - "extra": { - "cidr": "10.0.0.0/24" - } + "actualValue": "nodejs4.3", + "lifecycle": "end-of-life" } }, { - "ruleId": "E3060", - "severity": "ERROR", - "message": "'10.0.0.0/24' overlaps with '10.0.0.0/24'", + "ruleId": "W1001", + "severity": "WARN", + "message": "Reference to 'LambdaExecutionRole' which is conditional on 'isPrimary' - target may not exist", "source": "CFN_LINT", "entity": { - "logicalId": "mySubnet3", + "logicalId": "InstanceProfile", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties.CidrBlock", - "category": "Resource", + "propertyPath": "Properties.Roles.0", + "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", + "category": "Best Practice", "startLine": 32, - "startColumn": 7, + "startColumn": 14, "endLine": 32, - "endColumn": 16, - "relatedResources": [ - { - "resource": { - "id": "mySubnet1", - "resourceType": "AWS::EC2::Subnet" - }, - "location": { - "startLine": 10, - "startColumn": 3, - "endLine": 10, - "endColumn": 12 - }, - "message": "Overlapping subnet CIDR 10.0.0.0/24" - } - ], - "ruleDescription": "Validate subnet CIDRs do not overlap with other subnets", - "phase": "LINT", - "context": { - "extra": { - "cidr": "10.0.0.0/24" - } - } + "endColumn": 15, + "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", + "phase": "LINT" }, { - "ruleId": "E9004", - "severity": "ERROR", - "message": "'AvailbilityZone' is not one of ['AssignIpv6AddressOnCreation', 'AvailabilityZone', 'AvailabilityZoneId', 'BlockPublicAccessStates', 'BlockPublicAccessStates.InternetGatewayBlockMode', 'CidrBlock', 'EnableDns64', 'EnableLniAtDeviceIndex', 'Ipv4IpamPoolId', 'Ipv4NetmaskLength', 'Ipv6CidrBlock', 'Ipv6CidrBlocks', 'Ipv6IpamPoolId', 'Ipv6Native', 'Ipv6NetmaskLength', 'MapPublicIpOnLaunch', 'NetworkAclAssociationId', 'OutpostArn', 'PrivateDnsNameOptionsOnLaunch.EnableResourceNameDnsAAAARecord', 'PrivateDnsNameOptionsOnLaunch.EnableResourceNameDnsARecord', 'PrivateDnsNameOptionsOnLaunch.HostnameType', 'SubnetId', 'Tags', 'VpcId']", - "source": "SCHEMA", + "ruleId": "W1001", + "severity": "WARN", + "message": "Reference to 'LambdaExecutionRole' which is conditional on 'isPrimary' - target may not exist", + "source": "CFN_LINT", "entity": { - "logicalId": "mySubnet3", + "logicalId": "AMIIDLookup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AvailabilityZone", - "suggestedFix": "Check the resource type documentation for valid GetAtt attributes", - "category": "Intrinsic Function", - "startLine": 33, + "propertyPath": "Properties.Role", + "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", + "category": "Best Practice", + "startLine": 37, "startColumn": 7, - "endLine": 33, - "endColumn": 23, - "ruleDescription": "GetAtt attribute must exist on target resource type", + "endLine": 37, + "endColumn": 11, + "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", "phase": "LINT" }, { - "ruleId": "W1030", + "ruleId": "W1001", "severity": "WARN", - "message": "{'Ref': 'VPC'} is not a 'AWS::EC2::VPC.Id' with pattern '^vpc-(([0-9A-Fa-f]{8})|([0-9A-Fa-f]{17}))$' when 'Ref' is resolved", + "message": "Reference to 'LambdaExecutionRole' which is conditional on 'isPrimary' - target may not exist", "source": "CFN_LINT", "entity": { - "logicalId": "mySubnet1", + "logicalId": "SubCondRefParam", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SSM::Parameter" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Value", + "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", "category": "Best Practice", - "startLine": 13, + "startLine": 53, "startColumn": 7, - "endLine": 13, + "endLine": 53, "endColumn": 12, - "ruleDescription": "Validate the values that come from a Ref function", + "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", "phase": "LINT" }, { - "ruleId": "W1030", + "ruleId": "W1001", "severity": "WARN", - "message": "{'Ref': 'VPC'} is not a 'AWS::EC2::VPC.Id' with pattern '^vpc-(([0-9A-Fa-f]{8})|([0-9A-Fa-f]{17}))$' when 'Ref' is resolved", + "message": "Reference to 'LambdaExecutionRole' which is conditional on 'isPrimary' - target may not exist", "source": "CFN_LINT", "entity": { - "logicalId": "mySubnet2", + "logicalId": "SubCondGetAttParam", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SSM::Parameter" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Value", + "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", "category": "Best Practice", - "startLine": 22, + "startLine": 59, "startColumn": 7, - "endLine": 22, + "endLine": 59, "endColumn": 12, - "ruleDescription": "Validate the values that come from a Ref function", + "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", "phase": "LINT" }, { - "ruleId": "W1030", + "ruleId": "W1001", "severity": "WARN", - "message": "{'Ref': 'VPC'} is not a 'AWS::EC2::VPC.Id' with pattern '^vpc-(([0-9A-Fa-f]{8})|([0-9A-Fa-f]{17}))$' when 'Ref' is resolved", + "message": "Reference to 'LambdaExecutionRole' which is conditional on 'isPrimary' - target may not exist", "source": "CFN_LINT", "entity": { - "logicalId": "mySubnet3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "logicalId": "lambdaArn", + "entityType": "Output" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Outputs/lambdaArn/Value.Fn::GetAtt", + "suggestedFix": "Add a Condition to the output that implies the target's condition", "category": "Best Practice", - "startLine": 31, - "startColumn": 7, - "endLine": 31, + "startLine": 62, + "startColumn": 3, + "endLine": 62, "endColumn": 12, - "ruleDescription": "Validate the values that come from a Ref function", + "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'isProduction' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "mySubnet1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "logicalId": "isProduction", + "entityType": "Condition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Conditions/isProduction", "category": "Best Practice", - "startLine": 13, - "startColumn": 7, - "endLine": 13, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "mySubnet1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "mySubnet1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 15, - "startColumn": 7, - "endLine": 15, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Select with unresolvable arguments)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "mySubnet2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 22, - "startColumn": 7, - "endLine": 22, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 15, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'isDevelopment' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "mySubnet2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "logicalId": "isDevelopment", + "entityType": "Condition" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Conditions/isDevelopment", "category": "Best Practice", - "startLine": 23, - "startColumn": 7, - "endLine": 23, + "startLine": 8, + "startColumn": 3, + "endLine": 8, "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "mySubnet2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 24, - "startColumn": 7, - "endLine": 24, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Select with unresolvable arguments)" - } + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySubnet3", + "logicalId": "LambdaExecutionRole", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 31, + "startLine": 26, "startColumn": 7, - "endLine": 31, - "endColumn": 12, + "endLine": 26, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -1723,19 +1165,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySubnet3", + "logicalId": "InstanceProfile", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 32, + "startLine": 30, "startColumn": 7, - "endLine": 32, - "endColumn": 16, + "endLine": 30, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -1743,44 +1185,41 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySubnet3", + "logicalId": "LambdaExecutionRole", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Select with unresolvable arguments)" - } + "startLine": 14, + "startColumn": 5, + "endLine": 14, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'mySubnet1' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'AMIIDLookup' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySubnet1", + "logicalId": "AMIIDLookup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, + "startLine": 35, "startColumn": 5, - "endLine": 12, + "endLine": 35, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -1788,19 +1227,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'mySubnet2' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'SubCondRefParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySubnet2", + "logicalId": "SubCondRefParam", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SSM::Parameter" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 21, + "startLine": 51, "startColumn": 5, - "endLine": 21, + "endLine": 51, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -1808,35 +1247,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'mySubnet3' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'SubCondGetAttParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySubnet3", + "logicalId": "SubCondGetAttParam", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SSM::Parameter" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 30, + "startLine": 57, "startColumn": 5, - "endLine": 30, + "endLine": 57, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/functions_join.yaml": { - "filePath": "bad/functions_join.yaml", + "bad/functions/sub_needed.yaml": { + "filePath": "bad/functions/sub_needed.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 5, "counts": { "fatal": 0, - "errors": 2, - "warnings": 0, - "informational": 6, + "errors": 10, + "warnings": 4, + "informational": 9, "debug": 0 }, "suppressed": 0, @@ -1845,9 +1284,9 @@ }, "diagnostics": [ { - "ruleId": "E1152", + "ruleId": "E1029", "severity": "ERROR", - "message": "'ami-1234' does not match format 'AWS::EC2::Image.Id'", + "message": "Found an embedded parameter '${AMIId}' outside of an 'Fn::Sub' at Properties.ImageId", "source": "CFN_LINT", "entity": { "logicalId": "myInstance", @@ -1855,551 +1294,325 @@ "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", + "suggestedFix": "Wrap the string with Fn::Sub", "category": "Intrinsic Function", - "startLine": 9, + "startLine": 11, "startColumn": 7, - "endLine": 9, + "endLine": 11, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-1234" - } + "ruleDescription": "Substitution variable ${X} requires Fn::Sub", + "phase": "LINT" }, { - "ruleId": "E1152", + "ruleId": "E1029", "severity": "ERROR", - "message": "'ami-1234' does not match format 'AWS::EC2::Image.Id'", + "message": "Found an embedded parameter '${AMIId}' outside of an 'Fn::Sub' at Properties.PolicyDocument.Statement.0.Resource", "source": "CFN_LINT", "entity": { - "logicalId": "myInstance2", + "logicalId": "myPolicy", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.PolicyDocument.Statement.0.Resource", + "suggestedFix": "Wrap the string with Fn::Sub", "category": "Intrinsic Function", - "startLine": 19, - "startColumn": 7, - "endLine": 19, + "startLine": 25, + "startColumn": 11, + "endLine": 25, + "endColumn": 19, + "ruleDescription": "Substitution variable ${X} requires Fn::Sub", + "phase": "LINT" + }, + { + "ruleId": "E1029", + "severity": "ERROR", + "message": "Found an embedded parameter '${AWS::AccountId}' outside of an 'Fn::Sub' at Properties.PolicyDocument.Statement.0.Resource", + "source": "CFN_LINT", + "entity": { + "logicalId": "myPolicy", + "entityType": "Resource", + "resourceType": "AWS::IAM::Policy" + }, + "propertyPath": "Properties.PolicyDocument.Statement.0.Resource", + "suggestedFix": "Wrap the string with Fn::Sub", + "category": "Intrinsic Function", + "startLine": 25, + "startColumn": 11, + "endLine": 25, + "endColumn": 19, + "ruleDescription": "Substitution variable ${X} requires Fn::Sub", + "phase": "LINT" + }, + { + "ruleId": "E1029", + "severity": "ERROR", + "message": "Found an embedded parameter '${AMIId}' outside of an 'Fn::Sub' at Properties.PolicyDocument.Statement.1.NotResource", + "source": "CFN_LINT", + "entity": { + "logicalId": "myPolicy", + "entityType": "Resource", + "resourceType": "AWS::IAM::Policy" + }, + "propertyPath": "Properties.PolicyDocument.Statement.1.NotResource", + "suggestedFix": "Wrap the string with Fn::Sub", + "category": "Intrinsic Function", + "startLine": 29, + "startColumn": 11, + "endLine": 29, + "endColumn": 22, + "ruleDescription": "Substitution variable ${X} requires Fn::Sub", + "phase": "LINT" + }, + { + "ruleId": "E1029", + "severity": "ERROR", + "message": "Found an embedded parameter '${AWS::AccountId}' outside of an 'Fn::Sub' at Properties.PolicyDocument.Statement.1.NotResource", + "source": "CFN_LINT", + "entity": { + "logicalId": "myPolicy", + "entityType": "Resource", + "resourceType": "AWS::IAM::Policy" + }, + "propertyPath": "Properties.PolicyDocument.Statement.1.NotResource", + "suggestedFix": "Wrap the string with Fn::Sub", + "category": "Intrinsic Function", + "startLine": 29, + "startColumn": 11, + "endLine": 29, + "endColumn": 22, + "ruleDescription": "Substitution variable ${X} requires Fn::Sub", + "phase": "LINT" + }, + { + "ruleId": "E1029", + "severity": "ERROR", + "message": "Found an embedded parameter '${definition_substitution_1}' outside of an 'Fn::Sub' at Properties.DefinitionString.Fn::Join.1.5", + "source": "CFN_LINT", + "entity": { + "logicalId": "TestBadStateMachine1", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "Properties.DefinitionString.Fn::Join.1.5", + "suggestedFix": "Wrap the string with Fn::Sub", + "category": "Intrinsic Function", + "startLine": 46, + "startColumn": 13, + "endLine": 46, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-1234" - } + "ruleDescription": "Substitution variable ${X} requires Fn::Sub", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E1029", + "severity": "ERROR", + "message": "Found an embedded parameter '${definition_substitution_1}' outside of an 'Fn::Sub' at Properties.DefinitionString.Fn::Join.1.5", + "source": "CFN_LINT", + "entity": { + "logicalId": "TestBadStateMachine2", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "Properties.DefinitionString.Fn::Join.1.5", + "suggestedFix": "Wrap the string with Fn::Sub", + "category": "Intrinsic Function", + "startLine": 67, + "startColumn": 13, + "endLine": 67, + "endColumn": 14, + "ruleDescription": "Substitution variable ${X} requires Fn::Sub", + "phase": "LINT" + }, + { + "ruleId": "E1152", + "severity": "ERROR", + "message": "'${AMIId}' does not match format 'AWS::EC2::Image.Id'", + "source": "CFN_LINT", "entity": { "logicalId": "myInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 9, + "category": "Intrinsic Function", + "startLine": 11, "startColumn": 7, - "endLine": 9, + "endLine": 11, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "ruleDescription": "Validate AMI id format", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "${AMIId}" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "E3510", + "severity": "ERROR", + "message": "'arn:aws:iam::${AWS::AccountId}:user/${aws:username}-${AMIId}' does not match '^(arn:(aws[A-Za-z\\-]*?|[A-Za-z?*\\-]*[?*][A-Za-z?*\\-]*):[^:*?]+:[^:]*(:(?:\\d{12}|\\*|aws)?:.+|)|\\*)$'", + "source": "CFN_LINT", "entity": { - "logicalId": "myInstance", + "logicalId": "myPolicy", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.UserData", - "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Base64 with non-string argument)" - } + "propertyPath": "Properties.PolicyDocument.Statement.0.Resource", + "category": "Resource", + "startLine": 25, + "startColumn": 11, + "endLine": 25, + "endColumn": 19, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3510", + "severity": "ERROR", + "message": "'arn:aws:iam::${AWS::AccountId}:user/${aws:username}-${AMIId}' does not match '^(arn:(aws[A-Za-z\\-]*?|[A-Za-z?*\\-]*[?*][A-Za-z?*\\-]*):[^:*?]+:[^:]*(:(?:\\d{12}|\\*|aws)?:.+|)|\\*)$'", + "source": "CFN_LINT", "entity": { - "logicalId": "myInstance2", + "logicalId": "myPolicy", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 19, - "startColumn": 7, - "endLine": 19, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.PolicyDocument.Statement.1.NotResource", + "category": "Resource", + "startLine": 29, + "startColumn": 11, + "endLine": 29, + "endColumn": 22, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", "source": "ENGINE", "entity": { - "logicalId": "myInstance2", + "logicalId": "TestBadStateMachine1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.RoleArn", "category": "Best Practice", - "startLine": 20, + "startLine": 54, "startColumn": 7, - "endLine": 20, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Base64 with unresolvable argument)" - } + "endLine": 54, + "endColumn": 14, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "TestBadStateMachine2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RoleArn", "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 73, + "startColumn": 7, + "endLine": 73, + "endColumn": 14, + "ruleDescription": "Hardcoded ARN property", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myInstance2' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "myInstance2", + "logicalId": "TestBadStateMachine1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 18, - "startColumn": 5, - "endLine": 18, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/functions_ref.yaml": { - "filePath": "bad/functions_ref.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 6, - "errors": 4, - "warnings": 5, - "informational": 23, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F1018", - "severity": "FATAL", - "message": "Fn::Sub variable '${Package}' does not reference a valid resource, parameter, or pseudo-parameter", - "source": "SCHEMA", - "entity": { - "logicalId": "MyEC2Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.UserData", - "category": "Intrinsic Function", - "startLine": 46, - "startColumn": 7, - "endLine": 46, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Sub variables must resolve", - "phase": "SCHEMA", - "context": { - "resolutionSource": "dynamic (Sub:yum install ${Package}\n)" - } - }, - { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'pIops' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'AnotherInstance', 'MyEC2Instance', 'mySecurityGroupVpc1', 'mySecurityGroupVpc2', 'myVpcId']", - "source": "SCHEMA", - "entity": { - "logicalId": "MyEC2Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 40, - "startColumn": 13, - "endLine": 40, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" - }, - { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'pIops' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'AnotherInstance', 'MyEC2Instance', 'mySecurityGroupVpc1', 'mySecurityGroupVpc2', 'myVpcId']", - "source": "SCHEMA", - "entity": { - "logicalId": "AnotherInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 59, - "startColumn": 13, - "endLine": 59, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" - }, - { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'httpdPackage' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'AnotherInstance', 'MyEC2Instance', 'mySecurityGroupVpc1', 'mySecurityGroupVpc2', 'myVpcId']", - "source": "SCHEMA", - "entity": { - "logicalId": "AnotherInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.UserData", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 65, - "startColumn": 7, - "endLine": 65, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA", - "context": { - "resolutionSource": "dynamic (Sub:yum install ${myPackage} ${Package})" - } - }, - { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource mySecurityGroupVpc1. Circular dependency with [mySecurityGroupVpc1 -> mySecurityGroupVpc2 -> mySecurityGroupVpc1]", - "source": "SCHEMA", - "entity": { - "logicalId": "mySecurityGroupVpc1", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Resources/mySecurityGroupVpc1", - "category": "Reference", - "startLine": 8, - "startColumn": 3, - "endLine": 8, - "endColumn": 22, - "ruleDescription": "Circular dependency detected", - "phase": "LINT" - }, - { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource mySecurityGroupVpc2. Circular dependency with [mySecurityGroupVpc2 -> mySecurityGroupVpc1 -> mySecurityGroupVpc2]", - "source": "SCHEMA", - "entity": { - "logicalId": "mySecurityGroupVpc2", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Resources/mySecurityGroupVpc2", - "category": "Reference", - "startLine": 20, - "startColumn": 3, - "endLine": 20, - "endColumn": 22, - "ruleDescription": "Circular dependency detected", - "phase": "LINT" - }, - { - "ruleId": "E1150", - "severity": "ERROR", - "message": "'sg-1234567' does not match format 'AWS::EC2::SecurityGroup.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "mySecurityGroupVpc1", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.0.SourceSecurityGroupId", - "category": "Intrinsic Function", - "startLine": 16, - "startColumn": 9, - "endLine": 16, - "endColumn": 30, - "ruleDescription": "Validate security group format", - "phase": "SCHEMA", - "context": { - "actualValue": "sg-1234567" - } - }, - { - "ruleId": "E3687", - "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", - "source": "CFN_LINT", - "entity": { - "logicalId": "mySecurityGroupVpc1", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.0", - "category": "Resource", - "startLine": 15, - "startColumn": 19, - "endLine": 15, - "endColumn": 20, - "ruleDescription": "Validate to and from ports based on the protocol", - "phase": "LINT" - }, - { - "ruleId": "E3687", - "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", - "source": "CFN_LINT", - "entity": { - "logicalId": "mySecurityGroupVpc1", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.1", - "category": "Resource", - "startLine": 18, - "startColumn": 19, - "endLine": 18, - "endColumn": 20, - "ruleDescription": "Validate to and from ports based on the protocol", - "phase": "LINT" - }, - { - "ruleId": "E3687", - "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", - "source": "CFN_LINT", - "entity": { - "logicalId": "mySecurityGroupVpc2", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.0", - "category": "Resource", - "startLine": 27, - "startColumn": 19, - "endLine": 27, - "endColumn": 20, - "ruleDescription": "Validate to and from ports based on the protocol", - "phase": "LINT" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", - "entity": { - "logicalId": "mySecurityGroupVpc1", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.0.IpProtocol", - "category": "Best Practice", - "startLine": 15, - "startColumn": 9, - "endLine": 15, - "endColumn": 19, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", - "entity": { - "logicalId": "mySecurityGroupVpc1", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.1.IpProtocol", - "category": "Best Practice", - "startLine": 18, - "startColumn": 9, - "endLine": 18, - "endColumn": 19, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", - "entity": { - "logicalId": "mySecurityGroupVpc2", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.0.IpProtocol", - "category": "Best Practice", - "startLine": 27, - "startColumn": 9, - "endLine": 27, - "endColumn": 19, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", - "source": "ENGINE", - "entity": { - "logicalId": "MyEC2Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", "category": "Security", - "startLine": 32, - "startColumn": 7, - "endLine": 32, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", + "startLine": 35, + "startColumn": 3, + "endLine": 35, + "endColumn": 23, + "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, { - "ruleId": "W9010", + "ruleId": "W9013", "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "TestBadStateMachine2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.ImageId", "category": "Security", - "startLine": 51, - "startColumn": 7, - "endLine": 51, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", + "startLine": 56, + "startColumn": 3, + "endLine": 56, + "endColumn": 23, + "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, { - "ruleId": "I3100", + "ruleId": "I3510", "severity": "INFO", - "message": "Previous generation instance type 't1.micro' - consider upgrading", + "message": "action 'iam:UploadSSHPublicKey' requires a resource of ['arn:${Partition}:iam::${Account}:user/.*']", "source": "CFN_LINT", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "myPolicy", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.InstanceType", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 33, - "startColumn": 7, - "endLine": 33, + "propertyPath": "Properties.PolicyDocument.Statement.0.Resource", + "category": "Security", + "startLine": 25, + "startColumn": 11, + "endLine": 25, "endColumn": 19, - "ruleDescription": "Checks for legacy instance type generations", + "ruleDescription": "Validate statement resources match the actions", "phase": "LINT" }, { - "ruleId": "I3100", + "ruleId": "I3510", "severity": "INFO", - "message": "Previous generation instance type 't1.micro' - consider upgrading", + "message": "action 'iam:GetLoginProfile' requires a resource of ['arn:${Partition}:iam::${Account}:user/.*']", "source": "CFN_LINT", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "myPolicy", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.InstanceType", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 52, - "startColumn": 7, - "endLine": 52, - "endColumn": 19, - "ruleDescription": "Checks for legacy instance type generations", + "propertyPath": "Properties.PolicyDocument.Statement.1.NotResource", + "category": "Security", + "startLine": 29, + "startColumn": 11, + "endLine": 29, + "endColumn": 22, + "ruleDescription": "Validate statement resources match the actions", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc1", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.ImageId", "category": "Best Practice", "startLine": 11, "startColumn": 7, "endLine": 11, - "endColumn": 23, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2409,42 +1622,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'AdditionalInfo' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc1", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.AdditionalInfo", "category": "Best Practice", "startLine": 12, "startColumn": 7, "endLine": 12, - "endColumn": 12, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'myVpcId' (type AWS::EC2::VPC::Id)" + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Sub:${AMIId})" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc2", + "logicalId": "mySnsTopic", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.TopicName", "category": "Best Practice", - "startLine": 23, + "startLine": 33, "startColumn": 7, - "endLine": 23, - "endColumn": 23, + "endLine": 33, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2452,280 +1667,297 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc2", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 24, - "startColumn": 7, - "endLine": 24, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'myVpcId' (type AWS::EC2::VPC::Id)" - } + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Resource 'mySnsTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "mySnsTopic", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 32, - "startColumn": 7, + "startColumn": 5, "endLine": 32, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'TestBadStateMachine1' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "TestBadStateMachine1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 37, + "startColumn": 5, + "endLine": 37, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "message": "Resource 'TestBadStateMachine2' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "TestBadStateMachine2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.KeyName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 34, - "startColumn": 7, - "endLine": 34, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 58, + "startColumn": 5, + "endLine": 58, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/functions/tojsonstring_no_transform.yaml": { + "filePath": "bad/functions/tojsonstring_no_transform.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 3, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "F1031", + "severity": "FATAL", + "message": "Fn::ToJsonString requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use it", + "source": "SCHEMA", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "Topic", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.BlockDeviceMappings", - "category": "Best Practice", - "startLine": 35, + "propertyPath": "Properties.DisplayName", + "category": "Intrinsic Function", + "startLine": 10, "startColumn": 7, - "endLine": 35, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 10, + "endColumn": 18, + "ruleDescription": "Fn::ToJsonString requires the AWS::LanguageExtensions transform", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F1031", + "severity": "FATAL", + "message": "Fn::ToJsonString requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use it", + "source": "SCHEMA", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "Topic", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.NetworkInterfaces", - "category": "Best Practice", - "startLine": 43, + "propertyPath": "Metadata.Custom", + "category": "Intrinsic Function", + "startLine": 14, "startColumn": 7, - "endLine": 43, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 14, + "endColumn": 13, + "ruleDescription": "Fn::ToJsonString requires the AWS::LanguageExtensions transform", + "phase": "PARSE" }, { - "ruleId": "I9001", + "ruleId": "F1031", + "severity": "FATAL", + "message": "Fn::ToJsonString requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use it", + "source": "SCHEMA", + "entity": { + "logicalId": "JsonOutput", + "entityType": "Output" + }, + "propertyPath": "Outputs/JsonOutput/Value", + "category": "Intrinsic Function", + "startLine": 19, + "startColumn": 5, + "endLine": 19, + "endColumn": 10, + "ruleDescription": "Fn::ToJsonString requires the AWS::LanguageExtensions transform", + "phase": "PARSE" + }, + { + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'Topic' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "Topic", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 46, - "startColumn": 7, - "endLine": 46, + "startLine": 9, + "startColumn": 5, + "endLine": 9, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Sub:yum install ${Package}\n)" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/functions_base64.yaml": { + "filePath": "bad/functions_base64.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 2, + "errors": 2, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F1012", + "severity": "FATAL", + "message": "Fn::FindInMap references non-existent mapping 'amimap'", + "source": "SCHEMA", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "myInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 51, - "startColumn": 7, - "endLine": 51, - "endColumn": 14, + "category": "Intrinsic Function", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 13, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "FindInMap map name must exist in Mappings", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource myInstance. Circular dependency with [myInstance -> myInstance]", + "source": "SCHEMA", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "myInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 52, - "startColumn": 7, - "endLine": 52, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "propertyPath": "Resources/myInstance", + "category": "Reference", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 13, + "ruleDescription": "Circular dependency detected", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E1011", + "severity": "ERROR", + "message": "'Fn::GetAtt' is not supported as an argument to 'Fn::FindInMap'", + "source": "SCHEMA", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "myInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.KeyName", - "category": "Best Practice", - "startLine": 53, - "startColumn": 7, - "endLine": 53, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.ImageId.Fn::FindInMap.2", + "category": "Intrinsic Function", + "startLine": 9, + "startColumn": 65, + "endLine": 9, + "endColumn": 66, + "ruleDescription": "Fn::FindInMap operands must be strings or one of Ref/Fn::FindInMap", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "E1021", + "severity": "ERROR", + "message": "['Random String'] is not of type 'string'", + "source": "SCHEMA", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "myInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.BlockDeviceMappings", - "category": "Best Practice", - "startLine": 54, - "startColumn": 7, - "endLine": 54, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "propertyPath": "Properties.UserData.Fn::Base64", + "category": "Intrinsic Function", + "startLine": 11, + "startColumn": 9, + "endLine": 11, + "endColumn": 19, + "ruleDescription": "Fn::Base64 argument must be a string or a string-producing intrinsic", + "phase": "PARSE" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "myInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.NetworkInterfaces", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 62, + "startLine": 9, "startColumn": 7, - "endLine": 62, - "endColumn": 24, + "endLine": 9, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (mapping 'amimap' not found)" } }, { @@ -2734,317 +1966,351 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "myInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 65, + "startLine": 10, "startColumn": 7, - "endLine": 65, + "endLine": 10, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Sub:yum install ${myPackage} ${Package})" + "resolutionSource": "dynamic (Base64 with non-string argument)" } }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'mySecurityGroupVpc1' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc1", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, + "startLine": 8, "startColumn": 5, - "endLine": 10, + "endLine": 8, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/functions_findinmap_enhanced_invalid_key.yaml": { + "filePath": "bad/functions_findinmap_enhanced_invalid_key.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'mySecurityGroupVpc2' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E7001", + "severity": "ERROR", + "message": "Mapping 'MapName'.'TopKey1' key '{\"To\":\"Json\",\"String\":\"Function\"}' does not match format '^[a-zA-Z0-9]+$'", + "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupVpc2", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "logicalId": "MapName", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 22, - "startColumn": 5, - "endLine": 22, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Mappings/MapName/TopKey1/{\"To\":\"Json\",\"String\":\"Function\"}", + "category": "Structure", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 40, + "ruleDescription": "Mappings are appropriately configured", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyEC2Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::Cluster" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ClusterName", "category": "Best Practice", - "startLine": 31, - "startColumn": 5, - "endLine": 31, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'AnotherInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'Cluster' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::Cluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 50, + "startLine": 10, "startColumn": 5, - "endLine": 50, + "endLine": 10, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/functions_select.yaml": { - "filePath": "bad/functions_select.yaml", + "bad/functions_getaz.yaml": { + "filePath": "bad/functions_getaz.yaml", "status": "OK", "metadata": { - "resourcesScanned": 4, + "resourcesScanned": 3, "counts": { - "fatal": 0, - "errors": 8, - "warnings": 0, + "fatal": 1, + "errors": 4, + "warnings": 3, "informational": 12, "debug": 0 }, - "suppressed": 0, + "suppressed": 1, "strict": false, "severityLevel": "DEBUG" }, "diagnostics": [ { - "ruleId": "E1017", - "severity": "ERROR", - "message": "'a' is not of type 'integer'", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource mySubnet1. Circular dependency with [mySubnet1 -> mySubnet1]", "source": "SCHEMA", "entity": { - "logicalId": "myInstance", + "logicalId": "mySubnet1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.AvailabilityZone.Fn::Select.0", - "category": "Intrinsic Function", - "startLine": 11, - "startColumn": 9, - "endLine": 11, - "endColumn": 10, - "ruleDescription": "Fn::Select requires exactly two operands and a list source", - "phase": "PARSE" + "propertyPath": "Resources/mySubnet1", + "category": "Reference", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 12, + "ruleDescription": "Circular dependency detected", + "phase": "LINT" }, { "ruleId": "E1017", "severity": "ERROR", - "message": "expected maximum item count: 2, found: 3", + "message": "'us-east-1a' is not a valid region for Fn::GetAZs (use '' for the current region)", "source": "SCHEMA", "entity": { - "logicalId": "myInstance1", + "logicalId": "mySubnet2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.AvailabilityZone.Fn::Select", + "propertyPath": "Properties.AvailabilityZone.Fn::Select.1.Fn::GetAZs", "category": "Intrinsic Function", - "startLine": 19, - "startColumn": 9, - "endLine": 19, - "endColumn": 19, + "startLine": 27, + "startColumn": 13, + "endLine": 27, + "endColumn": 23, "ruleDescription": "Fn::Select requires exactly two operands and a list source", "phase": "PARSE" }, { - "ruleId": "E1017", + "ruleId": "E3060", "severity": "ERROR", - "message": "'Fn::Join' is not supported as an argument to 'Fn::Select'", - "source": "SCHEMA", + "message": "'10.0.0.0/24' overlaps with '10.0.0.0/24'", + "source": "CFN_LINT", "entity": { - "logicalId": "myInstance2", + "logicalId": "mySubnet2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.AvailabilityZone.Fn::Select.1", - "category": "Intrinsic Function", - "startLine": 30, - "startColumn": 17, - "endLine": 30, - "endColumn": 18, - "ruleDescription": "Fn::Select requires exactly two operands and a list source", - "phase": "PARSE" + "propertyPath": "Properties.CidrBlock", + "category": "Resource", + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "mySubnet1", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 12 + }, + "message": "Overlapping subnet CIDR 10.0.0.0/24" + } + ], + "ruleDescription": "Validate subnet CIDRs do not overlap with other subnets", + "phase": "LINT", + "context": { + "extra": { + "cidr": "10.0.0.0/24" + } + } }, { - "ruleId": "E1017", + "ruleId": "E3060", "severity": "ERROR", - "message": "'foo' is not of type 'array'", - "source": "SCHEMA", + "message": "'10.0.0.0/24' overlaps with '10.0.0.0/24'", + "source": "CFN_LINT", "entity": { - "logicalId": "myInstance3", + "logicalId": "mySubnet3", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.AvailabilityZone.Fn::Select", - "category": "Intrinsic Function", - "startLine": 36, - "startColumn": 9, - "endLine": 36, - "endColumn": 19, - "ruleDescription": "Fn::Select requires exactly two operands and a list source", - "phase": "PARSE" + "propertyPath": "Properties.CidrBlock", + "category": "Resource", + "startLine": 32, + "startColumn": 7, + "endLine": 32, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "mySubnet1", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 12 + }, + "message": "Overlapping subnet CIDR 10.0.0.0/24" + } + ], + "ruleDescription": "Validate subnet CIDRs do not overlap with other subnets", + "phase": "LINT", + "context": { + "extra": { + "cidr": "10.0.0.0/24" + } + } }, { - "ruleId": "E1152", + "ruleId": "E9004", "severity": "ERROR", - "message": "'String' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "message": "'AvailbilityZone' is not one of ['AssignIpv6AddressOnCreation', 'AvailabilityZone', 'AvailabilityZoneId', 'BlockPublicAccessStates', 'BlockPublicAccessStates.InternetGatewayBlockMode', 'CidrBlock', 'EnableDns64', 'EnableLniAtDeviceIndex', 'Ipv4IpamPoolId', 'Ipv4NetmaskLength', 'Ipv6CidrBlock', 'Ipv6CidrBlocks', 'Ipv6IpamPoolId', 'Ipv6Native', 'Ipv6NetmaskLength', 'MapPublicIpOnLaunch', 'NetworkAclAssociationId', 'OutpostArn', 'PrivateDnsNameOptionsOnLaunch.EnableResourceNameDnsAAAARecord', 'PrivateDnsNameOptionsOnLaunch.EnableResourceNameDnsARecord', 'PrivateDnsNameOptionsOnLaunch.HostnameType', 'SubnetId', 'Tags', 'VpcId']", + "source": "SCHEMA", "entity": { - "logicalId": "myInstance", + "logicalId": "mySubnet3", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.AvailabilityZone", + "suggestedFix": "Check the resource type documentation for valid GetAtt attributes", "category": "Intrinsic Function", - "startLine": 9, + "startLine": 33, "startColumn": 7, - "endLine": 9, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "String" - } + "endLine": 33, + "endColumn": 23, + "ruleDescription": "GetAtt attribute must exist on target resource type", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'String' does not match format 'AWS::EC2::Image.Id'", + "ruleId": "W1030", + "severity": "WARN", + "message": "{'Ref': 'VPC'} is not a 'AWS::EC2::VPC.Id' with pattern '^vpc-(([0-9A-Fa-f]{8})|([0-9A-Fa-f]{17}))$' when 'Ref' is resolved", "source": "CFN_LINT", "entity": { - "logicalId": "myInstance1", + "logicalId": "mySubnet1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 17, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 13, "startColumn": 7, - "endLine": 17, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "String" - } + "endLine": 13, + "endColumn": 12, + "ruleDescription": "Validate the values that come from a Ref function", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'String' does not match format 'AWS::EC2::Image.Id'", + "ruleId": "W1030", + "severity": "WARN", + "message": "{'Ref': 'VPC'} is not a 'AWS::EC2::VPC.Id' with pattern '^vpc-(([0-9A-Fa-f]{8})|([0-9A-Fa-f]{17}))$' when 'Ref' is resolved", "source": "CFN_LINT", "entity": { - "logicalId": "myInstance2", + "logicalId": "mySubnet2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 26, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 22, "startColumn": 7, - "endLine": 26, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "String" - } + "endLine": 22, + "endColumn": 12, + "ruleDescription": "Validate the values that come from a Ref function", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'String' does not match format 'AWS::EC2::Image.Id'", + "ruleId": "W1030", + "severity": "WARN", + "message": "{'Ref': 'VPC'} is not a 'AWS::EC2::VPC.Id' with pattern '^vpc-(([0-9A-Fa-f]{8})|([0-9A-Fa-f]{17}))$' when 'Ref' is resolved", "source": "CFN_LINT", "entity": { - "logicalId": "myInstance3", + "logicalId": "mySubnet3", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 34, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 31, "startColumn": 7, - "endLine": 34, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "String" - } + "endLine": 31, + "endColumn": 12, + "ruleDescription": "Validate the values that come from a Ref function", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "mySubnet1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 9, + "startLine": 13, "startColumn": 7, - "endLine": 9, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 13, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3054,67 +2320,64 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "mySubnet1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 10, + "startLine": 14, "startColumn": 7, - "endLine": 10, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 14, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Select on non-list value)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance1", + "logicalId": "mySubnet1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 17, + "startLine": 15, "startColumn": 7, - "endLine": 17, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 15, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Select with unresolvable arguments)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance1", + "logicalId": "mySubnet2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 18, + "startLine": 22, "startColumn": 7, - "endLine": 18, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 22, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3124,20 +2387,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance2", + "logicalId": "mySubnet2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 26, + "startLine": 23, "startColumn": 7, - "endLine": 26, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 23, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3150,41 +2412,39 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance2", + "logicalId": "mySubnet2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 27, + "startLine": 24, "startColumn": 7, - "endLine": 27, + "endLine": 24, "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Select on non-list value)" + "resolutionSource": "dynamic (Select with unresolvable arguments)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance3", + "logicalId": "mySubnet3", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 34, + "startLine": 31, "startColumn": 7, - "endLine": 34, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 31, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3194,20 +2454,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance3", + "logicalId": "mySubnet3", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 35, + "startLine": 32, "startColumn": 7, - "endLine": 35, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 32, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3215,41 +2474,44 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "mySubnet3", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Select with unresolvable arguments)" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myInstance1' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'mySubnet1' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myInstance1", + "logicalId": "mySubnet1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 16, + "startLine": 12, "startColumn": 5, - "endLine": 16, + "endLine": 12, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -3257,19 +2519,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myInstance2' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'mySubnet2' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myInstance2", + "logicalId": "mySubnet2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 25, + "startLine": 21, "startColumn": 5, - "endLine": 25, + "endLine": 21, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -3277,35 +2539,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myInstance3' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'mySubnet3' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myInstance3", + "logicalId": "mySubnet3", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 33, + "startLine": 30, "startColumn": 5, - "endLine": 33, + "endLine": 30, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/generic.yaml": { - "filePath": "bad/generic.yaml", + "bad/functions_join.yaml": { + "filePath": "bad/functions_join.yaml", "status": "OK", "metadata": { - "resourcesScanned": 19, + "resourcesScanned": 2, "counts": { - "fatal": 23, - "errors": 1, - "warnings": 11, - "informational": 37, + "fatal": 0, + "errors": 2, + "warnings": 0, + "informational": 6, "debug": 0 }, "suppressed": 0, @@ -3314,147 +2576,1616 @@ }, "diagnostics": [ { - "ruleId": "F0005", - "severity": "FATAL", - "message": "'Errors' is not a valid top-level template section", - "source": "SCHEMA", - "propertyPath": "Errors", - "category": "Structure", - "startLine": 4, - "startColumn": 1, - "endLine": 4, - "endColumn": 7, - "ruleDescription": "Top-level keys must be valid section names", - "phase": "SCHEMA" - }, - { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'pIops' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'ElasticLoadBalancer', 'MyEC2Instance', 'MyEC2Instance1', 'MyEC2Instance3', 'MyEc2BlockDevice', 'PermitAllInbound', 'RolePolicies', 'RootInstanceProfile', 'RootRole', 'SecurityGroup', 'conditionLoadBalancer', 'lambdaMap1', 'lambdaMap2', 'myAcl', 'myEc2Instance4', 'myIamProfile', 'myIamProfile2', 'myIamProfile3', 'myLambdaTwo', 'myParam']", - "source": "SCHEMA", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-1234' does not match format 'AWS::EC2::Image.Id'", + "source": "CFN_LINT", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "myInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 52, - "startColumn": 13, - "endLine": 52, - "endColumn": 17, + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-1234" + } }, { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'WebServerPort' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'ElasticLoadBalancer', 'MyEC2Instance', 'MyEC2Instance1', 'MyEC2Instance3', 'MyEc2BlockDevice', 'PermitAllInbound', 'RolePolicies', 'RootInstanceProfile', 'RootRole', 'SecurityGroup', 'conditionLoadBalancer', 'lambdaMap1', 'lambdaMap2', 'myAcl', 'myEc2Instance4', 'myIamProfile', 'myIamProfile2', 'myIamProfile3', 'myLambdaTwo', 'myParam']", - "source": "SCHEMA", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-1234' does not match format 'AWS::EC2::Image.Id'", + "source": "CFN_LINT", "entity": { - "logicalId": "ElasticLoadBalancer", + "logicalId": "myInstance2", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Listeners.0.InstancePort", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 119, - "startColumn": 11, - "endLine": 119, - "endColumn": 23, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" + "startLine": 19, + "startColumn": 7, + "endLine": 19, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-1234" + } }, { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'WebServerPort' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'ElasticLoadBalancer', 'MyEC2Instance', 'MyEC2Instance1', 'MyEC2Instance3', 'MyEc2BlockDevice', 'PermitAllInbound', 'RolePolicies', 'RootInstanceProfile', 'RootRole', 'SecurityGroup', 'conditionLoadBalancer', 'lambdaMap1', 'lambdaMap2', 'myAcl', 'myEc2Instance4', 'myIamProfile', 'myIamProfile2', 'myIamProfile3', 'myLambdaTwo', 'myParam']", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ElasticLoadBalancer", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.HealthCheck.Target.Fn::Join.1.1", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 128, - "startColumn": 20, - "endLine": 128, - "endColumn": 21, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('Fn::If' was unexpected)", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "myIamProfile3", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Fn::If", - "category": "Schema", - "startLine": 34, + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 10, "startColumn": 7, - "endLine": 34, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Additional properties are not allowed", + "endLine": 10, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "Fn::If", - "extra": { - "allowed_properties": [ - "Arn", - "AssumeRolePolicyDocument", - "Description", - "ManagedPolicyArns", - "MaxSessionDuration", - "Path", - "PermissionsBoundary", - "Policies", - "RoleId", - "RoleName", - "Tags" - ] - } + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Base64 with non-string argument)" } }, { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('FakeKey' was unexpected)", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "myInstance2", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.FakeKey", - "category": "Schema", - "startLine": 46, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 19, "startColumn": 7, - "endLine": 46, + "endLine": 19, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Additional properties are not allowed", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "FakeKey", - "extra": { - "allowed_properties": [ - "AdditionalInfo", - "Affinity", - "AvailabilityZone", - "BlockDeviceMappings", + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance2", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 20, + "startColumn": 7, + "endLine": 20, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Base64 with unresolvable argument)" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myInstance2' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance2", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 18, + "startColumn": 5, + "endLine": 18, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/functions_ref.yaml": { + "filePath": "bad/functions_ref.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 6, + "errors": 4, + "warnings": 5, + "informational": 23, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F1018", + "severity": "FATAL", + "message": "Fn::Sub variable '${Package}' does not reference a valid resource, parameter, or pseudo-parameter", + "source": "SCHEMA", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.UserData", + "category": "Intrinsic Function", + "startLine": 46, + "startColumn": 7, + "endLine": 46, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Sub variables must resolve", + "phase": "SCHEMA", + "context": { + "resolutionSource": "dynamic (Sub:yum install ${Package}\n)" + } + }, + { + "ruleId": "F1020", + "severity": "FATAL", + "message": "'pIops' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'AnotherInstance', 'MyEC2Instance', 'mySecurityGroupVpc1', 'mySecurityGroupVpc2', 'myVpcId']", + "source": "SCHEMA", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 40, + "startColumn": 13, + "endLine": 40, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" + }, + { + "ruleId": "F1020", + "severity": "FATAL", + "message": "'pIops' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'AnotherInstance', 'MyEC2Instance', 'mySecurityGroupVpc1', 'mySecurityGroupVpc2', 'myVpcId']", + "source": "SCHEMA", + "entity": { + "logicalId": "AnotherInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 59, + "startColumn": 13, + "endLine": 59, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" + }, + { + "ruleId": "F1020", + "severity": "FATAL", + "message": "'httpdPackage' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'AnotherInstance', 'MyEC2Instance', 'mySecurityGroupVpc1', 'mySecurityGroupVpc2', 'myVpcId']", + "source": "SCHEMA", + "entity": { + "logicalId": "AnotherInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.UserData", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 65, + "startColumn": 7, + "endLine": 65, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA", + "context": { + "resolutionSource": "dynamic (Sub:yum install ${myPackage} ${Package})" + } + }, + { + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource mySecurityGroupVpc1. Circular dependency with [mySecurityGroupVpc1 -> mySecurityGroupVpc2 -> mySecurityGroupVpc1]", + "source": "SCHEMA", + "entity": { + "logicalId": "mySecurityGroupVpc1", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Resources/mySecurityGroupVpc1", + "category": "Reference", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 22, + "ruleDescription": "Circular dependency detected", + "phase": "LINT" + }, + { + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource mySecurityGroupVpc2. Circular dependency with [mySecurityGroupVpc2 -> mySecurityGroupVpc1 -> mySecurityGroupVpc2]", + "source": "SCHEMA", + "entity": { + "logicalId": "mySecurityGroupVpc2", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Resources/mySecurityGroupVpc2", + "category": "Reference", + "startLine": 20, + "startColumn": 3, + "endLine": 20, + "endColumn": 22, + "ruleDescription": "Circular dependency detected", + "phase": "LINT" + }, + { + "ruleId": "E1150", + "severity": "ERROR", + "message": "'sg-1234567' does not match format 'AWS::EC2::SecurityGroup.Id'", + "source": "CFN_LINT", + "entity": { + "logicalId": "mySecurityGroupVpc1", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0.SourceSecurityGroupId", + "category": "Intrinsic Function", + "startLine": 16, + "startColumn": 9, + "endLine": 16, + "endColumn": 30, + "ruleDescription": "Validate security group format", + "phase": "SCHEMA", + "context": { + "actualValue": "sg-1234567" + } + }, + { + "ruleId": "E3687", + "severity": "ERROR", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "source": "CFN_LINT", + "entity": { + "logicalId": "mySecurityGroupVpc1", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0", + "category": "Resource", + "startLine": 15, + "startColumn": 19, + "endLine": 15, + "endColumn": 20, + "ruleDescription": "Validate to and from ports based on the protocol", + "phase": "LINT" + }, + { + "ruleId": "E3687", + "severity": "ERROR", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "source": "CFN_LINT", + "entity": { + "logicalId": "mySecurityGroupVpc1", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.1", + "category": "Resource", + "startLine": 18, + "startColumn": 19, + "endLine": 18, + "endColumn": 20, + "ruleDescription": "Validate to and from ports based on the protocol", + "phase": "LINT" + }, + { + "ruleId": "E3687", + "severity": "ERROR", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "source": "CFN_LINT", + "entity": { + "logicalId": "mySecurityGroupVpc2", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0", + "category": "Resource", + "startLine": 27, + "startColumn": 19, + "endLine": 27, + "endColumn": 20, + "ruleDescription": "Validate to and from ports based on the protocol", + "phase": "LINT" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", + "entity": { + "logicalId": "mySecurityGroupVpc1", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0.IpProtocol", + "category": "Best Practice", + "startLine": 15, + "startColumn": 9, + "endLine": 15, + "endColumn": 19, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", + "entity": { + "logicalId": "mySecurityGroupVpc1", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.1.IpProtocol", + "category": "Best Practice", + "startLine": 18, + "startColumn": 9, + "endLine": 18, + "endColumn": 19, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", + "entity": { + "logicalId": "mySecurityGroupVpc2", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0.IpProtocol", + "category": "Best Practice", + "startLine": 27, + "startColumn": 9, + "endLine": 27, + "endColumn": 19, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 32, + "startColumn": 7, + "endLine": 32, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", + "phase": "LINT" + }, + { + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", + "entity": { + "logicalId": "AnotherInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 51, + "startColumn": 7, + "endLine": 51, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", + "phase": "LINT" + }, + { + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 't1.micro' - consider upgrading", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.InstanceType", + "suggestedFix": "Upgrade to a current generation instance type", + "category": "Best Practice", + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 19, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" + }, + { + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 't1.micro' - consider upgrading", + "source": "CFN_LINT", + "entity": { + "logicalId": "AnotherInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.InstanceType", + "suggestedFix": "Upgrade to a current generation instance type", + "category": "Best Practice", + "startLine": 52, + "startColumn": 7, + "endLine": 52, + "endColumn": 19, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "mySecurityGroupVpc1", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "mySecurityGroupVpc1", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'myVpcId' (type AWS::EC2::VPC::Id)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "mySecurityGroupVpc2", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "mySecurityGroupVpc2", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 24, + "startColumn": 7, + "endLine": 24, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'myVpcId' (type AWS::EC2::VPC::Id)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 32, + "startColumn": 7, + "endLine": 32, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.KeyName", + "category": "Best Practice", + "startLine": 34, + "startColumn": 7, + "endLine": 34, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.BlockDeviceMappings", + "category": "Best Practice", + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.NetworkInterfaces", + "category": "Best Practice", + "startLine": 43, + "startColumn": 7, + "endLine": 43, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 46, + "startColumn": 7, + "endLine": 46, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Sub:yum install ${Package}\n)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AnotherInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 51, + "startColumn": 7, + "endLine": 51, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AnotherInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 52, + "startColumn": 7, + "endLine": 52, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AnotherInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.KeyName", + "category": "Best Practice", + "startLine": 53, + "startColumn": 7, + "endLine": 53, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AnotherInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.BlockDeviceMappings", + "category": "Best Practice", + "startLine": 54, + "startColumn": 7, + "endLine": 54, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AnotherInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.NetworkInterfaces", + "category": "Best Practice", + "startLine": 62, + "startColumn": 7, + "endLine": 62, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AnotherInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 65, + "startColumn": 7, + "endLine": 65, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Sub:yum install ${myPackage} ${Package})" + } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'mySecurityGroupVpc1' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "mySecurityGroupVpc1", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'mySecurityGroupVpc2' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "mySecurityGroupVpc2", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 22, + "startColumn": 5, + "endLine": 22, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyEC2Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 31, + "startColumn": 5, + "endLine": 31, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'AnotherInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "AnotherInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 50, + "startColumn": 5, + "endLine": 50, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/functions_select.yaml": { + "filePath": "bad/functions_select.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 0, + "errors": 8, + "warnings": 0, + "informational": 12, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E1017", + "severity": "ERROR", + "message": "'a' is not of type 'integer'", + "source": "SCHEMA", + "entity": { + "logicalId": "myInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.AvailabilityZone.Fn::Select.0", + "category": "Intrinsic Function", + "startLine": 11, + "startColumn": 9, + "endLine": 11, + "endColumn": 10, + "ruleDescription": "Fn::Select requires exactly two operands and a list source", + "phase": "PARSE" + }, + { + "ruleId": "E1017", + "severity": "ERROR", + "message": "expected maximum item count: 2, found: 3", + "source": "SCHEMA", + "entity": { + "logicalId": "myInstance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.AvailabilityZone.Fn::Select", + "category": "Intrinsic Function", + "startLine": 19, + "startColumn": 9, + "endLine": 19, + "endColumn": 19, + "ruleDescription": "Fn::Select requires exactly two operands and a list source", + "phase": "PARSE" + }, + { + "ruleId": "E1017", + "severity": "ERROR", + "message": "'Fn::Join' is not supported as an argument to 'Fn::Select'", + "source": "SCHEMA", + "entity": { + "logicalId": "myInstance2", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.AvailabilityZone.Fn::Select.1", + "category": "Intrinsic Function", + "startLine": 30, + "startColumn": 17, + "endLine": 30, + "endColumn": 18, + "ruleDescription": "Fn::Select requires exactly two operands and a list source", + "phase": "PARSE" + }, + { + "ruleId": "E1017", + "severity": "ERROR", + "message": "'foo' is not of type 'array'", + "source": "SCHEMA", + "entity": { + "logicalId": "myInstance3", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.AvailabilityZone.Fn::Select", + "category": "Intrinsic Function", + "startLine": 36, + "startColumn": 9, + "endLine": 36, + "endColumn": 19, + "ruleDescription": "Fn::Select requires exactly two operands and a list source", + "phase": "PARSE" + }, + { + "ruleId": "E1152", + "severity": "ERROR", + "message": "'String' does not match format 'AWS::EC2::Image.Id'", + "source": "CFN_LINT", + "entity": { + "logicalId": "myInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "String" + } + }, + { + "ruleId": "E1152", + "severity": "ERROR", + "message": "'String' does not match format 'AWS::EC2::Image.Id'", + "source": "CFN_LINT", + "entity": { + "logicalId": "myInstance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "String" + } + }, + { + "ruleId": "E1152", + "severity": "ERROR", + "message": "'String' does not match format 'AWS::EC2::Image.Id'", + "source": "CFN_LINT", + "entity": { + "logicalId": "myInstance2", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 26, + "startColumn": 7, + "endLine": 26, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "String" + } + }, + { + "ruleId": "E1152", + "severity": "ERROR", + "message": "'String' does not match format 'AWS::EC2::Image.Id'", + "source": "CFN_LINT", + "entity": { + "logicalId": "myInstance3", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 34, + "startColumn": 7, + "endLine": 34, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "String" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Select on non-list value)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 18, + "startColumn": 7, + "endLine": 18, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance2", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 26, + "startColumn": 7, + "endLine": 26, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance2", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 27, + "startColumn": 7, + "endLine": 27, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Select on non-list value)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance3", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 34, + "startColumn": 7, + "endLine": 34, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance3", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myInstance1' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myInstance2' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance2", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 25, + "startColumn": 5, + "endLine": 25, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myInstance3' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance3", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 33, + "startColumn": 5, + "endLine": 33, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/generic.yaml": { + "filePath": "bad/generic.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 19, + "counts": { + "fatal": 23, + "errors": 1, + "warnings": 11, + "informational": 37, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F0005", + "severity": "FATAL", + "message": "'Errors' is not a valid top-level template section", + "source": "SCHEMA", + "propertyPath": "Errors", + "category": "Structure", + "startLine": 4, + "startColumn": 1, + "endLine": 4, + "endColumn": 7, + "ruleDescription": "Top-level keys must be valid section names", + "phase": "SCHEMA" + }, + { + "ruleId": "F1020", + "severity": "FATAL", + "message": "'pIops' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'ElasticLoadBalancer', 'MyEC2Instance', 'MyEC2Instance1', 'MyEC2Instance3', 'MyEc2BlockDevice', 'PermitAllInbound', 'RolePolicies', 'RootInstanceProfile', 'RootRole', 'SecurityGroup', 'conditionLoadBalancer', 'lambdaMap1', 'lambdaMap2', 'myAcl', 'myEc2Instance4', 'myIamProfile', 'myIamProfile2', 'myIamProfile3', 'myLambdaTwo', 'myParam']", + "source": "SCHEMA", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 52, + "startColumn": 13, + "endLine": 52, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" + }, + { + "ruleId": "F1020", + "severity": "FATAL", + "message": "'WebServerPort' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'ElasticLoadBalancer', 'MyEC2Instance', 'MyEC2Instance1', 'MyEC2Instance3', 'MyEc2BlockDevice', 'PermitAllInbound', 'RolePolicies', 'RootInstanceProfile', 'RootRole', 'SecurityGroup', 'conditionLoadBalancer', 'lambdaMap1', 'lambdaMap2', 'myAcl', 'myEc2Instance4', 'myIamProfile', 'myIamProfile2', 'myIamProfile3', 'myLambdaTwo', 'myParam']", + "source": "SCHEMA", + "entity": { + "logicalId": "ElasticLoadBalancer", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.Listeners.0.InstancePort", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 119, + "startColumn": 11, + "endLine": 119, + "endColumn": 23, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" + }, + { + "ruleId": "F1020", + "severity": "FATAL", + "message": "'WebServerPort' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'ElasticLoadBalancer', 'MyEC2Instance', 'MyEC2Instance1', 'MyEC2Instance3', 'MyEc2BlockDevice', 'PermitAllInbound', 'RolePolicies', 'RootInstanceProfile', 'RootRole', 'SecurityGroup', 'conditionLoadBalancer', 'lambdaMap1', 'lambdaMap2', 'myAcl', 'myEc2Instance4', 'myIamProfile', 'myIamProfile2', 'myIamProfile3', 'myLambdaTwo', 'myParam']", + "source": "SCHEMA", + "entity": { + "logicalId": "ElasticLoadBalancer", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.HealthCheck.Target.Fn::Join.1.1", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 128, + "startColumn": 20, + "endLine": 128, + "endColumn": 21, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" + }, + { + "ruleId": "F3002", + "severity": "FATAL", + "message": "Additional properties are not allowed ('Fn::If' was unexpected)", + "source": "SCHEMA", + "entity": { + "logicalId": "myIamProfile3", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Fn::If", + "category": "Schema", + "startLine": 34, + "startColumn": 7, + "endLine": 34, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Additional properties are not allowed", + "phase": "SCHEMA", + "context": { + "property": "Fn::If", + "extra": { + "allowed_properties": [ + "Arn", + "AssumeRolePolicyDocument", + "Description", + "ManagedPolicyArns", + "MaxSessionDuration", + "Path", + "PermissionsBoundary", + "Policies", + "RoleId", + "RoleName", + "Tags" + ] + } + } + }, + { + "ruleId": "F3002", + "severity": "FATAL", + "message": "Additional properties are not allowed ('FakeKey' was unexpected)", + "source": "SCHEMA", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.FakeKey", + "category": "Schema", + "startLine": 46, + "startColumn": 7, + "endLine": 46, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Additional properties are not allowed", + "phase": "SCHEMA", + "context": { + "property": "FakeKey", + "extra": { + "allowed_properties": [ + "AdditionalInfo", + "Affinity", + "AvailabilityZone", + "BlockDeviceMappings", "CpuOptions", "CreditSpecification", "DisableApiTermination", @@ -6485,12 +7216,12 @@ "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SnapStart.ApplyOn", + "propertyPath": "Properties.SnapStart", "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", - "startLine": 14, - "startColumn": 9, - "endLine": 14, + "startLine": 13, + "startColumn": 7, + "endLine": 13, "endColumn": 16, "ruleDescription": "Validate that SnapStart is properly configured", "phase": "LINT" @@ -6584,12 +7315,12 @@ "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SnapStart.ApplyOn", + "propertyPath": "Properties.SnapStart", "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", - "startLine": 13, - "startColumn": 9, - "endLine": 13, + "startLine": 12, + "startColumn": 7, + "endLine": 12, "endColumn": 16, "ruleDescription": "Validate that SnapStart is properly configured", "phase": "LINT" @@ -30464,513 +31195,7 @@ "category": "Intrinsic Function", "startLine": 22859, "startColumn": 7, - "endLine": 22859, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource232", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 22958, - "startColumn": 7, - "endLine": 22958, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource233", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 23057, - "startColumn": 7, - "endLine": 23057, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource234", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 23156, - "startColumn": 7, - "endLine": 23156, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource235", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 23255, - "startColumn": 7, - "endLine": 23255, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource236", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 23354, - "startColumn": 7, - "endLine": 23354, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource237", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 23453, - "startColumn": 7, - "endLine": 23453, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource238", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 23552, - "startColumn": 7, - "endLine": 23552, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource239", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 23651, - "startColumn": 7, - "endLine": 23651, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource240", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 23750, - "startColumn": 7, - "endLine": 23750, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource241", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 23849, - "startColumn": 7, - "endLine": 23849, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource242", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 23948, - "startColumn": 7, - "endLine": 23948, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource243", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 24047, - "startColumn": 7, - "endLine": 24047, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource244", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 24146, - "startColumn": 7, - "endLine": 24146, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource245", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 24245, - "startColumn": 7, - "endLine": 24245, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource246", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 24344, - "startColumn": 7, - "endLine": 24344, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource247", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 24443, - "startColumn": 7, - "endLine": 24443, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource248", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 24542, - "startColumn": 7, - "endLine": 24542, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource249", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 24641, - "startColumn": 7, - "endLine": 24641, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource250", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 24740, - "startColumn": 7, - "endLine": 24740, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource251", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 24839, - "startColumn": 7, - "endLine": 24839, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource252", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 24938, - "startColumn": 7, - "endLine": 24938, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource253", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 25037, - "startColumn": 7, - "endLine": 25037, + "endLine": 22859, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30985,15 +31210,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource254", + "logicalId": "Resource232", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 25136, + "startLine": 22958, "startColumn": 7, - "endLine": 25136, + "endLine": 22958, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31008,15 +31233,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource255", + "logicalId": "Resource233", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 25235, + "startLine": 23057, "startColumn": 7, - "endLine": 25235, + "endLine": 23057, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31031,15 +31256,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource256", + "logicalId": "Resource234", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 25334, + "startLine": 23156, "startColumn": 7, - "endLine": 25334, + "endLine": 23156, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31054,15 +31279,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource257", + "logicalId": "Resource235", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 25433, + "startLine": 23255, "startColumn": 7, - "endLine": 25433, + "endLine": 23255, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31077,15 +31302,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource258", + "logicalId": "Resource236", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 25532, + "startLine": 23354, "startColumn": 7, - "endLine": 25532, + "endLine": 23354, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31100,15 +31325,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource259", + "logicalId": "Resource237", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 25631, + "startLine": 23453, "startColumn": 7, - "endLine": 25631, + "endLine": 23453, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31123,15 +31348,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource260", + "logicalId": "Resource238", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 25730, + "startLine": 23552, "startColumn": 7, - "endLine": 25730, + "endLine": 23552, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31146,15 +31371,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource261", + "logicalId": "Resource239", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 25829, + "startLine": 23651, "startColumn": 7, - "endLine": 25829, + "endLine": 23651, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31169,15 +31394,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource262", + "logicalId": "Resource240", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 25928, + "startLine": 23750, "startColumn": 7, - "endLine": 25928, + "endLine": 23750, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31192,15 +31417,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource263", + "logicalId": "Resource241", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 26027, + "startLine": 23849, "startColumn": 7, - "endLine": 26027, + "endLine": 23849, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31215,15 +31440,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource264", + "logicalId": "Resource242", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 26126, + "startLine": 23948, "startColumn": 7, - "endLine": 26126, + "endLine": 23948, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31238,15 +31463,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource265", + "logicalId": "Resource243", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 26225, + "startLine": 24047, "startColumn": 7, - "endLine": 26225, + "endLine": 24047, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31261,15 +31486,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource266", + "logicalId": "Resource244", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 26324, + "startLine": 24146, "startColumn": 7, - "endLine": 26324, + "endLine": 24146, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31284,15 +31509,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource267", + "logicalId": "Resource245", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 26423, + "startLine": 24245, "startColumn": 7, - "endLine": 26423, + "endLine": 24245, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31307,15 +31532,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource268", + "logicalId": "Resource246", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 26522, + "startLine": 24344, "startColumn": 7, - "endLine": 26522, + "endLine": 24344, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31330,15 +31555,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource269", + "logicalId": "Resource247", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 26621, + "startLine": 24443, "startColumn": 7, - "endLine": 26621, + "endLine": 24443, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31353,15 +31578,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource270", + "logicalId": "Resource248", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 26720, + "startLine": 24542, "startColumn": 7, - "endLine": 26720, + "endLine": 24542, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31376,15 +31601,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource271", + "logicalId": "Resource249", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 26819, + "startLine": 24641, "startColumn": 7, - "endLine": 26819, + "endLine": 24641, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31399,15 +31624,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource272", + "logicalId": "Resource250", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 26918, + "startLine": 24740, "startColumn": 7, - "endLine": 26918, + "endLine": 24740, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31422,15 +31647,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource273", + "logicalId": "Resource251", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 27017, + "startLine": 24839, "startColumn": 7, - "endLine": 27017, + "endLine": 24839, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31445,15 +31670,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource274", + "logicalId": "Resource252", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 27116, + "startLine": 24938, "startColumn": 7, - "endLine": 27116, + "endLine": 24938, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31468,15 +31693,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource275", + "logicalId": "Resource253", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 27215, + "startLine": 25037, "startColumn": 7, - "endLine": 27215, + "endLine": 25037, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31491,15 +31716,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource276", + "logicalId": "Resource254", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 27314, + "startLine": 25136, "startColumn": 7, - "endLine": 27314, + "endLine": 25136, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31514,15 +31739,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource277", + "logicalId": "Resource255", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 27413, + "startLine": 25235, "startColumn": 7, - "endLine": 27413, + "endLine": 25235, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31537,15 +31762,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource278", + "logicalId": "Resource256", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 27512, + "startLine": 25334, "startColumn": 7, - "endLine": 27512, + "endLine": 25334, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31560,15 +31785,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource279", + "logicalId": "Resource257", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 27611, + "startLine": 25433, "startColumn": 7, - "endLine": 27611, + "endLine": 25433, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31583,15 +31808,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource280", + "logicalId": "Resource258", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 27710, + "startLine": 25532, "startColumn": 7, - "endLine": 27710, + "endLine": 25532, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31606,15 +31831,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource281", + "logicalId": "Resource259", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 27809, + "startLine": 25631, "startColumn": 7, - "endLine": 27809, + "endLine": 25631, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31629,15 +31854,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource282", + "logicalId": "Resource260", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 27908, + "startLine": 25730, "startColumn": 7, - "endLine": 27908, + "endLine": 25730, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31652,15 +31877,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource283", + "logicalId": "Resource261", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 28007, + "startLine": 25829, "startColumn": 7, - "endLine": 28007, + "endLine": 25829, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31675,15 +31900,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource284", + "logicalId": "Resource262", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 28106, + "startLine": 25928, "startColumn": 7, - "endLine": 28106, + "endLine": 25928, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31698,15 +31923,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource285", + "logicalId": "Resource263", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 28205, + "startLine": 26027, "startColumn": 7, - "endLine": 28205, + "endLine": 26027, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31721,15 +31946,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource286", + "logicalId": "Resource264", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 28304, + "startLine": 26126, "startColumn": 7, - "endLine": 28304, + "endLine": 26126, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31744,15 +31969,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource287", + "logicalId": "Resource265", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 28403, + "startLine": 26225, "startColumn": 7, - "endLine": 28403, + "endLine": 26225, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31767,15 +31992,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource288", + "logicalId": "Resource266", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 28502, + "startLine": 26324, "startColumn": 7, - "endLine": 28502, + "endLine": 26324, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31790,15 +32015,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource289", + "logicalId": "Resource267", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 28601, + "startLine": 26423, "startColumn": 7, - "endLine": 28601, + "endLine": 26423, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31813,15 +32038,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource290", + "logicalId": "Resource268", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 28700, + "startLine": 26522, "startColumn": 7, - "endLine": 28700, + "endLine": 26522, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31836,15 +32061,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource291", + "logicalId": "Resource269", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 28799, + "startLine": 26621, "startColumn": 7, - "endLine": 28799, + "endLine": 26621, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31859,15 +32084,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource292", + "logicalId": "Resource270", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 28898, + "startLine": 26720, "startColumn": 7, - "endLine": 28898, + "endLine": 26720, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31882,15 +32107,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource293", + "logicalId": "Resource271", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 28997, + "startLine": 26819, "startColumn": 7, - "endLine": 28997, + "endLine": 26819, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31905,15 +32130,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource294", + "logicalId": "Resource272", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 29096, + "startLine": 26918, "startColumn": 7, - "endLine": 29096, + "endLine": 26918, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31928,15 +32153,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource295", + "logicalId": "Resource273", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 29195, + "startLine": 27017, "startColumn": 7, - "endLine": 29195, + "endLine": 27017, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31951,15 +32176,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource296", + "logicalId": "Resource274", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 29294, + "startLine": 27116, "startColumn": 7, - "endLine": 29294, + "endLine": 27116, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31974,15 +32199,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource297", + "logicalId": "Resource275", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 29393, + "startLine": 27215, "startColumn": 7, - "endLine": 29393, + "endLine": 27215, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31997,15 +32222,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource298", + "logicalId": "Resource276", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 29492, + "startLine": 27314, "startColumn": 7, - "endLine": 29492, + "endLine": 27314, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32020,15 +32245,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource299", + "logicalId": "Resource277", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 29591, + "startLine": 27413, "startColumn": 7, - "endLine": 29591, + "endLine": 27413, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32038,631 +32263,510 @@ } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 20, - "startColumn": 15, - "endLine": 20, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 55, - "startColumn": 15, - "endLine": 55, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 61, - "startColumn": 15, - "endLine": 61, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 119, - "startColumn": 15, - "endLine": 119, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 154, - "startColumn": 15, - "endLine": 154, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 160, - "startColumn": 15, - "endLine": 160, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 218, - "startColumn": 15, - "endLine": 218, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 253, - "startColumn": 15, - "endLine": 253, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 259, - "startColumn": 15, - "endLine": 259, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource4", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 317, - "startColumn": 15, - "endLine": 317, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource4", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 352, - "startColumn": 15, - "endLine": 352, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource4", + "logicalId": "Resource278", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 358, - "startColumn": 15, - "endLine": 358, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 27512, + "startColumn": 7, + "endLine": 27512, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource5", + "logicalId": "Resource279", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 416, - "startColumn": 15, - "endLine": 416, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 27611, + "startColumn": 7, + "endLine": 27611, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource5", + "logicalId": "Resource280", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 451, - "startColumn": 15, - "endLine": 451, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 27710, + "startColumn": 7, + "endLine": 27710, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource5", + "logicalId": "Resource281", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 457, - "startColumn": 15, - "endLine": 457, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 27809, + "startColumn": 7, + "endLine": 27809, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource6", + "logicalId": "Resource282", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 515, - "startColumn": 15, - "endLine": 515, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 27908, + "startColumn": 7, + "endLine": 27908, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource6", + "logicalId": "Resource283", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 550, - "startColumn": 15, - "endLine": 550, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 28007, + "startColumn": 7, + "endLine": 28007, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource6", + "logicalId": "Resource284", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 556, - "startColumn": 15, - "endLine": 556, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 28106, + "startColumn": 7, + "endLine": 28106, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource7", + "logicalId": "Resource285", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 614, - "startColumn": 15, - "endLine": 614, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 28205, + "startColumn": 7, + "endLine": 28205, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource7", + "logicalId": "Resource286", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 649, - "startColumn": 15, - "endLine": 649, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 28304, + "startColumn": 7, + "endLine": 28304, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource7", + "logicalId": "Resource287", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 655, - "startColumn": 15, - "endLine": 655, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 28403, + "startColumn": 7, + "endLine": 28403, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource8", + "logicalId": "Resource288", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 713, - "startColumn": 15, - "endLine": 713, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 28502, + "startColumn": 7, + "endLine": 28502, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource8", + "logicalId": "Resource289", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 748, - "startColumn": 15, - "endLine": 748, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 28601, + "startColumn": 7, + "endLine": 28601, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource8", + "logicalId": "Resource290", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 754, - "startColumn": 15, - "endLine": 754, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 28700, + "startColumn": 7, + "endLine": 28700, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource9", + "logicalId": "Resource291", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 812, - "startColumn": 15, - "endLine": 812, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 28799, + "startColumn": 7, + "endLine": 28799, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource9", + "logicalId": "Resource292", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 847, - "startColumn": 15, - "endLine": 847, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 28898, + "startColumn": 7, + "endLine": 28898, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource9", + "logicalId": "Resource293", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 853, - "startColumn": 15, - "endLine": 853, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 28997, + "startColumn": 7, + "endLine": 28997, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource10", + "logicalId": "Resource294", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 911, - "startColumn": 15, - "endLine": 911, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 29096, + "startColumn": 7, + "endLine": 29096, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource10", + "logicalId": "Resource295", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 946, - "startColumn": 15, - "endLine": 946, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 29195, + "startColumn": 7, + "endLine": 29195, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource10", + "logicalId": "Resource296", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 952, - "startColumn": 15, - "endLine": 952, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 29294, + "startColumn": 7, + "endLine": 29294, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource11", + "logicalId": "Resource297", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 1010, - "startColumn": 15, - "endLine": 1010, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 29393, + "startColumn": 7, + "endLine": 29393, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource11", + "logicalId": "Resource298", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 1045, - "startColumn": 15, - "endLine": 1045, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 29492, + "startColumn": 7, + "endLine": 29492, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource11", + "logicalId": "Resource299", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 1051, - "startColumn": 15, - "endLine": 1051, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 29591, + "startColumn": 7, + "endLine": 29591, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { "ruleId": "W1020", @@ -32670,15 +32774,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource12", + "logicalId": "Resource1", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 1109, + "startLine": 20, "startColumn": 15, - "endLine": 1109, + "endLine": 20, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -32689,15 +32793,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource12", + "logicalId": "Resource1", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1144, + "startLine": 55, "startColumn": 15, - "endLine": 1144, + "endLine": 55, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -32708,15 +32812,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource12", + "logicalId": "Resource1", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1150, + "startLine": 61, "startColumn": 15, - "endLine": 1150, + "endLine": 61, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -32727,15 +32831,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource13", + "logicalId": "Resource2", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 1208, + "startLine": 119, "startColumn": 15, - "endLine": 1208, + "endLine": 119, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -32746,15 +32850,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource13", + "logicalId": "Resource2", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1243, + "startLine": 154, "startColumn": 15, - "endLine": 1243, + "endLine": 154, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -32765,15 +32869,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource13", + "logicalId": "Resource2", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1249, + "startLine": 160, "startColumn": 15, - "endLine": 1249, + "endLine": 160, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -32784,15 +32888,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource14", + "logicalId": "Resource3", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 1307, + "startLine": 218, "startColumn": 15, - "endLine": 1307, + "endLine": 218, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -32803,15 +32907,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource14", + "logicalId": "Resource3", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1342, + "startLine": 253, "startColumn": 15, - "endLine": 1342, + "endLine": 253, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -32822,15 +32926,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource14", + "logicalId": "Resource3", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1348, + "startLine": 259, "startColumn": 15, - "endLine": 1348, + "endLine": 259, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -32841,15 +32945,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource15", + "logicalId": "Resource4", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 1406, + "startLine": 317, "startColumn": 15, - "endLine": 1406, + "endLine": 317, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -32860,15 +32964,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource15", + "logicalId": "Resource4", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1441, + "startLine": 352, "startColumn": 15, - "endLine": 1441, + "endLine": 352, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -32879,15 +32983,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource15", + "logicalId": "Resource4", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1447, + "startLine": 358, "startColumn": 15, - "endLine": 1447, + "endLine": 358, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -32898,15 +33002,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource16", + "logicalId": "Resource5", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 1505, + "startLine": 416, "startColumn": 15, - "endLine": 1505, + "endLine": 416, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -32917,15 +33021,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource16", + "logicalId": "Resource5", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1540, + "startLine": 451, "startColumn": 15, - "endLine": 1540, + "endLine": 451, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -32936,15 +33040,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource16", + "logicalId": "Resource5", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1546, + "startLine": 457, "startColumn": 15, - "endLine": 1546, + "endLine": 457, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -32955,15 +33059,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource17", + "logicalId": "Resource6", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 1604, + "startLine": 515, "startColumn": 15, - "endLine": 1604, + "endLine": 515, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -32974,15 +33078,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource17", + "logicalId": "Resource6", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1639, + "startLine": 550, "startColumn": 15, - "endLine": 1639, + "endLine": 550, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -32993,15 +33097,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource17", + "logicalId": "Resource6", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1645, + "startLine": 556, "startColumn": 15, - "endLine": 1645, + "endLine": 556, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33012,15 +33116,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource18", + "logicalId": "Resource7", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 1703, + "startLine": 614, "startColumn": 15, - "endLine": 1703, + "endLine": 614, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33031,15 +33135,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource18", + "logicalId": "Resource7", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1738, + "startLine": 649, "startColumn": 15, - "endLine": 1738, + "endLine": 649, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33050,15 +33154,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource18", + "logicalId": "Resource7", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1744, + "startLine": 655, "startColumn": 15, - "endLine": 1744, + "endLine": 655, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33069,15 +33173,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource19", + "logicalId": "Resource8", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 1802, + "startLine": 713, "startColumn": 15, - "endLine": 1802, + "endLine": 713, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33088,15 +33192,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource19", + "logicalId": "Resource8", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1837, + "startLine": 748, "startColumn": 15, - "endLine": 1837, + "endLine": 748, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33107,15 +33211,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource19", + "logicalId": "Resource8", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1843, + "startLine": 754, "startColumn": 15, - "endLine": 1843, + "endLine": 754, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33126,15 +33230,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource20", + "logicalId": "Resource9", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 1901, + "startLine": 812, "startColumn": 15, - "endLine": 1901, + "endLine": 812, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33145,15 +33249,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource20", + "logicalId": "Resource9", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1936, + "startLine": 847, "startColumn": 15, - "endLine": 1936, + "endLine": 847, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33164,15 +33268,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource20", + "logicalId": "Resource9", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1942, + "startLine": 853, "startColumn": 15, - "endLine": 1942, + "endLine": 853, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33183,15 +33287,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource21", + "logicalId": "Resource10", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 2000, + "startLine": 911, "startColumn": 15, - "endLine": 2000, + "endLine": 911, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33202,15 +33306,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource21", + "logicalId": "Resource10", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2035, + "startLine": 946, "startColumn": 15, - "endLine": 2035, + "endLine": 946, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33221,15 +33325,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource21", + "logicalId": "Resource10", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2041, + "startLine": 952, "startColumn": 15, - "endLine": 2041, + "endLine": 952, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33240,15 +33344,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource22", + "logicalId": "Resource11", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 2099, + "startLine": 1010, "startColumn": 15, - "endLine": 2099, + "endLine": 1010, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33259,15 +33363,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource22", + "logicalId": "Resource11", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2134, + "startLine": 1045, "startColumn": 15, - "endLine": 2134, + "endLine": 1045, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33278,15 +33382,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource22", + "logicalId": "Resource11", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2140, + "startLine": 1051, "startColumn": 15, - "endLine": 2140, + "endLine": 1051, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33297,15 +33401,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource23", + "logicalId": "Resource12", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 2198, + "startLine": 1109, "startColumn": 15, - "endLine": 2198, + "endLine": 1109, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33316,15 +33420,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource23", + "logicalId": "Resource12", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2233, + "startLine": 1144, "startColumn": 15, - "endLine": 2233, + "endLine": 1144, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33335,15 +33439,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource23", + "logicalId": "Resource12", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2239, + "startLine": 1150, "startColumn": 15, - "endLine": 2239, + "endLine": 1150, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33354,15 +33458,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource24", + "logicalId": "Resource13", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 2297, + "startLine": 1208, "startColumn": 15, - "endLine": 2297, + "endLine": 1208, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33373,15 +33477,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource24", + "logicalId": "Resource13", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2332, + "startLine": 1243, "startColumn": 15, - "endLine": 2332, + "endLine": 1243, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33392,15 +33496,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource24", + "logicalId": "Resource13", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2338, + "startLine": 1249, "startColumn": 15, - "endLine": 2338, + "endLine": 1249, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33411,15 +33515,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource25", + "logicalId": "Resource14", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 2396, + "startLine": 1307, "startColumn": 15, - "endLine": 2396, + "endLine": 1307, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33430,15 +33534,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource25", + "logicalId": "Resource14", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2431, + "startLine": 1342, "startColumn": 15, - "endLine": 2431, + "endLine": 1342, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33449,15 +33553,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource25", + "logicalId": "Resource14", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2437, + "startLine": 1348, "startColumn": 15, - "endLine": 2437, + "endLine": 1348, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33468,15 +33572,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource26", + "logicalId": "Resource15", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 2495, + "startLine": 1406, "startColumn": 15, - "endLine": 2495, + "endLine": 1406, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33487,15 +33591,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource26", + "logicalId": "Resource15", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2530, + "startLine": 1441, "startColumn": 15, - "endLine": 2530, + "endLine": 1441, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33506,15 +33610,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource26", + "logicalId": "Resource15", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2536, + "startLine": 1447, "startColumn": 15, - "endLine": 2536, + "endLine": 1447, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33525,15 +33629,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource27", + "logicalId": "Resource16", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 2594, + "startLine": 1505, "startColumn": 15, - "endLine": 2594, + "endLine": 1505, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33544,15 +33648,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource27", + "logicalId": "Resource16", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2629, + "startLine": 1540, "startColumn": 15, - "endLine": 2629, + "endLine": 1540, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33563,15 +33667,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource27", + "logicalId": "Resource16", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2635, + "startLine": 1546, "startColumn": 15, - "endLine": 2635, + "endLine": 1546, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33582,15 +33686,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource28", + "logicalId": "Resource17", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 2693, + "startLine": 1604, "startColumn": 15, - "endLine": 2693, + "endLine": 1604, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33601,15 +33705,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource28", + "logicalId": "Resource17", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2728, + "startLine": 1639, "startColumn": 15, - "endLine": 2728, + "endLine": 1639, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33620,15 +33724,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource28", + "logicalId": "Resource17", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2734, + "startLine": 1645, "startColumn": 15, - "endLine": 2734, + "endLine": 1645, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33639,15 +33743,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource29", + "logicalId": "Resource18", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 2792, + "startLine": 1703, "startColumn": 15, - "endLine": 2792, + "endLine": 1703, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33658,15 +33762,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource29", + "logicalId": "Resource18", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2827, + "startLine": 1738, "startColumn": 15, - "endLine": 2827, + "endLine": 1738, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33677,15 +33781,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource29", + "logicalId": "Resource18", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2833, + "startLine": 1744, "startColumn": 15, - "endLine": 2833, + "endLine": 1744, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33696,15 +33800,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource30", + "logicalId": "Resource19", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 2891, + "startLine": 1802, "startColumn": 15, - "endLine": 2891, + "endLine": 1802, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33715,15 +33819,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource30", + "logicalId": "Resource19", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2926, + "startLine": 1837, "startColumn": 15, - "endLine": 2926, + "endLine": 1837, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33734,15 +33838,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource30", + "logicalId": "Resource19", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2932, + "startLine": 1843, "startColumn": 15, - "endLine": 2932, + "endLine": 1843, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33753,15 +33857,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource31", + "logicalId": "Resource20", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 2990, + "startLine": 1901, "startColumn": 15, - "endLine": 2990, + "endLine": 1901, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33772,15 +33876,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource31", + "logicalId": "Resource20", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3025, + "startLine": 1936, "startColumn": 15, - "endLine": 3025, + "endLine": 1936, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33791,15 +33895,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource31", + "logicalId": "Resource20", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3031, + "startLine": 1942, "startColumn": 15, - "endLine": 3031, + "endLine": 1942, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33810,15 +33914,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource32", + "logicalId": "Resource21", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 3089, + "startLine": 2000, "startColumn": 15, - "endLine": 3089, + "endLine": 2000, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33829,15 +33933,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource32", + "logicalId": "Resource21", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3124, + "startLine": 2035, "startColumn": 15, - "endLine": 3124, + "endLine": 2035, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33848,15 +33952,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource32", + "logicalId": "Resource21", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3130, + "startLine": 2041, "startColumn": 15, - "endLine": 3130, + "endLine": 2041, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33867,15 +33971,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource33", + "logicalId": "Resource22", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 3188, + "startLine": 2099, "startColumn": 15, - "endLine": 3188, + "endLine": 2099, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33886,15 +33990,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource33", + "logicalId": "Resource22", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3223, + "startLine": 2134, "startColumn": 15, - "endLine": 3223, + "endLine": 2134, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33905,15 +34009,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource33", + "logicalId": "Resource22", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3229, + "startLine": 2140, "startColumn": 15, - "endLine": 3229, + "endLine": 2140, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33924,15 +34028,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource34", + "logicalId": "Resource23", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 3287, + "startLine": 2198, "startColumn": 15, - "endLine": 3287, + "endLine": 2198, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33943,15 +34047,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource34", + "logicalId": "Resource23", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3322, + "startLine": 2233, "startColumn": 15, - "endLine": 3322, + "endLine": 2233, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33962,15 +34066,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource34", + "logicalId": "Resource23", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3328, + "startLine": 2239, "startColumn": 15, - "endLine": 3328, + "endLine": 2239, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -33981,15 +34085,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource35", + "logicalId": "Resource24", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 3386, + "startLine": 2297, "startColumn": 15, - "endLine": 3386, + "endLine": 2297, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34000,15 +34104,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource35", + "logicalId": "Resource24", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3421, + "startLine": 2332, "startColumn": 15, - "endLine": 3421, + "endLine": 2332, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34019,15 +34123,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource35", + "logicalId": "Resource24", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3427, + "startLine": 2338, "startColumn": 15, - "endLine": 3427, + "endLine": 2338, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34038,15 +34142,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource36", + "logicalId": "Resource25", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 3485, + "startLine": 2396, "startColumn": 15, - "endLine": 3485, + "endLine": 2396, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34057,15 +34161,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource36", + "logicalId": "Resource25", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3520, + "startLine": 2431, "startColumn": 15, - "endLine": 3520, + "endLine": 2431, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34076,15 +34180,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource36", + "logicalId": "Resource25", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3526, + "startLine": 2437, "startColumn": 15, - "endLine": 3526, + "endLine": 2437, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34095,15 +34199,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource37", + "logicalId": "Resource26", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 3584, + "startLine": 2495, "startColumn": 15, - "endLine": 3584, + "endLine": 2495, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34114,15 +34218,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource37", + "logicalId": "Resource26", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3619, + "startLine": 2530, "startColumn": 15, - "endLine": 3619, + "endLine": 2530, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34133,15 +34237,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource37", + "logicalId": "Resource26", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3625, + "startLine": 2536, "startColumn": 15, - "endLine": 3625, + "endLine": 2536, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34152,15 +34256,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource38", + "logicalId": "Resource27", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 3683, + "startLine": 2594, "startColumn": 15, - "endLine": 3683, + "endLine": 2594, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34171,15 +34275,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource38", + "logicalId": "Resource27", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3718, + "startLine": 2629, "startColumn": 15, - "endLine": 3718, + "endLine": 2629, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34190,15 +34294,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource38", + "logicalId": "Resource27", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3724, + "startLine": 2635, "startColumn": 15, - "endLine": 3724, + "endLine": 2635, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34209,15 +34313,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource39", + "logicalId": "Resource28", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 3782, + "startLine": 2693, "startColumn": 15, - "endLine": 3782, + "endLine": 2693, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34228,15 +34332,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource39", + "logicalId": "Resource28", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3817, + "startLine": 2728, "startColumn": 15, - "endLine": 3817, + "endLine": 2728, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34247,15 +34351,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource39", + "logicalId": "Resource28", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3823, + "startLine": 2734, "startColumn": 15, - "endLine": 3823, + "endLine": 2734, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34266,15 +34370,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource40", + "logicalId": "Resource29", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 3881, + "startLine": 2792, "startColumn": 15, - "endLine": 3881, + "endLine": 2792, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34285,15 +34389,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource40", + "logicalId": "Resource29", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3916, + "startLine": 2827, "startColumn": 15, - "endLine": 3916, + "endLine": 2827, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34304,15 +34408,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource40", + "logicalId": "Resource29", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3922, + "startLine": 2833, "startColumn": 15, - "endLine": 3922, + "endLine": 2833, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34323,15 +34427,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource41", + "logicalId": "Resource30", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 3980, + "startLine": 2891, "startColumn": 15, - "endLine": 3980, + "endLine": 2891, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34342,15 +34446,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource41", + "logicalId": "Resource30", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4015, + "startLine": 2926, "startColumn": 15, - "endLine": 4015, + "endLine": 2926, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34361,15 +34465,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource41", + "logicalId": "Resource30", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4021, + "startLine": 2932, "startColumn": 15, - "endLine": 4021, + "endLine": 2932, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34380,15 +34484,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource42", + "logicalId": "Resource31", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 4079, + "startLine": 2990, "startColumn": 15, - "endLine": 4079, + "endLine": 2990, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34399,15 +34503,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource42", + "logicalId": "Resource31", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4114, + "startLine": 3025, "startColumn": 15, - "endLine": 4114, + "endLine": 3025, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34418,15 +34522,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource42", + "logicalId": "Resource31", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4120, + "startLine": 3031, "startColumn": 15, - "endLine": 4120, + "endLine": 3031, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34437,15 +34541,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource43", + "logicalId": "Resource32", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 4178, + "startLine": 3089, "startColumn": 15, - "endLine": 4178, + "endLine": 3089, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34456,15 +34560,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource43", + "logicalId": "Resource32", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4213, + "startLine": 3124, "startColumn": 15, - "endLine": 4213, + "endLine": 3124, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34475,15 +34579,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource43", + "logicalId": "Resource32", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4219, + "startLine": 3130, "startColumn": 15, - "endLine": 4219, + "endLine": 3130, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34494,15 +34598,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource44", + "logicalId": "Resource33", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 4277, + "startLine": 3188, "startColumn": 15, - "endLine": 4277, + "endLine": 3188, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34513,15 +34617,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource44", + "logicalId": "Resource33", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4312, + "startLine": 3223, "startColumn": 15, - "endLine": 4312, + "endLine": 3223, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34532,15 +34636,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource44", + "logicalId": "Resource33", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4318, + "startLine": 3229, "startColumn": 15, - "endLine": 4318, + "endLine": 3229, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34551,15 +34655,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource45", + "logicalId": "Resource34", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 4376, + "startLine": 3287, "startColumn": 15, - "endLine": 4376, + "endLine": 3287, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34570,15 +34674,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource45", + "logicalId": "Resource34", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4411, + "startLine": 3322, "startColumn": 15, - "endLine": 4411, + "endLine": 3322, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34589,15 +34693,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource45", + "logicalId": "Resource34", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4417, + "startLine": 3328, "startColumn": 15, - "endLine": 4417, + "endLine": 3328, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34608,15 +34712,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource46", + "logicalId": "Resource35", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 4475, + "startLine": 3386, "startColumn": 15, - "endLine": 4475, + "endLine": 3386, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34627,15 +34731,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource46", + "logicalId": "Resource35", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4510, + "startLine": 3421, "startColumn": 15, - "endLine": 4510, + "endLine": 3421, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34646,15 +34750,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource46", + "logicalId": "Resource35", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4516, + "startLine": 3427, "startColumn": 15, - "endLine": 4516, + "endLine": 3427, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34665,15 +34769,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource47", + "logicalId": "Resource36", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 4574, + "startLine": 3485, "startColumn": 15, - "endLine": 4574, + "endLine": 3485, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34684,15 +34788,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource47", + "logicalId": "Resource36", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4609, + "startLine": 3520, "startColumn": 15, - "endLine": 4609, + "endLine": 3520, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34703,15 +34807,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource47", + "logicalId": "Resource36", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4615, + "startLine": 3526, "startColumn": 15, - "endLine": 4615, + "endLine": 3526, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34722,15 +34826,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource48", + "logicalId": "Resource37", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 4673, + "startLine": 3584, "startColumn": 15, - "endLine": 4673, + "endLine": 3584, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34741,15 +34845,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource48", + "logicalId": "Resource37", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4708, + "startLine": 3619, "startColumn": 15, - "endLine": 4708, + "endLine": 3619, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34760,15 +34864,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource48", + "logicalId": "Resource37", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4714, + "startLine": 3625, "startColumn": 15, - "endLine": 4714, + "endLine": 3625, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34779,15 +34883,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource49", + "logicalId": "Resource38", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 4772, + "startLine": 3683, "startColumn": 15, - "endLine": 4772, + "endLine": 3683, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34798,15 +34902,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource49", + "logicalId": "Resource38", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4807, + "startLine": 3718, "startColumn": 15, - "endLine": 4807, + "endLine": 3718, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34817,15 +34921,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource49", + "logicalId": "Resource38", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4813, + "startLine": 3724, "startColumn": 15, - "endLine": 4813, + "endLine": 3724, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34836,15 +34940,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource50", + "logicalId": "Resource39", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 4871, + "startLine": 3782, "startColumn": 15, - "endLine": 4871, + "endLine": 3782, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34855,15 +34959,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource50", + "logicalId": "Resource39", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4906, + "startLine": 3817, "startColumn": 15, - "endLine": 4906, + "endLine": 3817, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34874,15 +34978,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource50", + "logicalId": "Resource39", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4912, + "startLine": 3823, "startColumn": 15, - "endLine": 4912, + "endLine": 3823, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34893,15 +34997,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource51", + "logicalId": "Resource40", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 4970, + "startLine": 3881, "startColumn": 15, - "endLine": 4970, + "endLine": 3881, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34912,15 +35016,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource51", + "logicalId": "Resource40", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5005, + "startLine": 3916, "startColumn": 15, - "endLine": 5005, + "endLine": 3916, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34931,15 +35035,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource51", + "logicalId": "Resource40", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5011, + "startLine": 3922, "startColumn": 15, - "endLine": 5011, + "endLine": 3922, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34950,15 +35054,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource52", + "logicalId": "Resource41", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 5069, + "startLine": 3980, "startColumn": 15, - "endLine": 5069, + "endLine": 3980, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34969,15 +35073,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource52", + "logicalId": "Resource41", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5104, + "startLine": 4015, "startColumn": 15, - "endLine": 5104, + "endLine": 4015, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34988,15 +35092,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource52", + "logicalId": "Resource41", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5110, + "startLine": 4021, "startColumn": 15, - "endLine": 5110, + "endLine": 4021, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35007,15 +35111,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource53", + "logicalId": "Resource42", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 5168, + "startLine": 4079, "startColumn": 15, - "endLine": 5168, + "endLine": 4079, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35026,15 +35130,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource53", + "logicalId": "Resource42", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5203, + "startLine": 4114, "startColumn": 15, - "endLine": 5203, + "endLine": 4114, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35045,15 +35149,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource53", + "logicalId": "Resource42", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5209, + "startLine": 4120, "startColumn": 15, - "endLine": 5209, + "endLine": 4120, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35064,15 +35168,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource54", + "logicalId": "Resource43", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 5267, + "startLine": 4178, "startColumn": 15, - "endLine": 5267, + "endLine": 4178, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35083,15 +35187,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource54", + "logicalId": "Resource43", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5302, + "startLine": 4213, "startColumn": 15, - "endLine": 5302, + "endLine": 4213, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35102,15 +35206,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource54", + "logicalId": "Resource43", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5308, + "startLine": 4219, "startColumn": 15, - "endLine": 5308, + "endLine": 4219, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35121,15 +35225,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource55", + "logicalId": "Resource44", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 5366, + "startLine": 4277, "startColumn": 15, - "endLine": 5366, + "endLine": 4277, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35140,15 +35244,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource55", + "logicalId": "Resource44", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5401, + "startLine": 4312, "startColumn": 15, - "endLine": 5401, + "endLine": 4312, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35159,15 +35263,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource55", + "logicalId": "Resource44", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5407, + "startLine": 4318, "startColumn": 15, - "endLine": 5407, + "endLine": 4318, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35178,15 +35282,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource56", + "logicalId": "Resource45", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 5465, + "startLine": 4376, "startColumn": 15, - "endLine": 5465, + "endLine": 4376, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35197,15 +35301,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource56", + "logicalId": "Resource45", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5500, + "startLine": 4411, "startColumn": 15, - "endLine": 5500, + "endLine": 4411, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35216,15 +35320,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource56", + "logicalId": "Resource45", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5506, + "startLine": 4417, "startColumn": 15, - "endLine": 5506, + "endLine": 4417, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35235,15 +35339,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource57", + "logicalId": "Resource46", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 5564, + "startLine": 4475, "startColumn": 15, - "endLine": 5564, + "endLine": 4475, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35254,15 +35358,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource57", + "logicalId": "Resource46", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5599, + "startLine": 4510, "startColumn": 15, - "endLine": 5599, + "endLine": 4510, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35273,15 +35377,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource57", + "logicalId": "Resource46", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5605, + "startLine": 4516, "startColumn": 15, - "endLine": 5605, + "endLine": 4516, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35292,15 +35396,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource58", + "logicalId": "Resource47", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 5663, + "startLine": 4574, "startColumn": 15, - "endLine": 5663, + "endLine": 4574, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35311,15 +35415,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource58", + "logicalId": "Resource47", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5698, + "startLine": 4609, "startColumn": 15, - "endLine": 5698, + "endLine": 4609, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35330,15 +35434,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource58", + "logicalId": "Resource47", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5704, + "startLine": 4615, "startColumn": 15, - "endLine": 5704, + "endLine": 4615, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35349,15 +35453,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource59", + "logicalId": "Resource48", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 5762, + "startLine": 4673, "startColumn": 15, - "endLine": 5762, + "endLine": 4673, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35368,15 +35472,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource59", + "logicalId": "Resource48", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5797, + "startLine": 4708, "startColumn": 15, - "endLine": 5797, + "endLine": 4708, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35387,15 +35491,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource59", + "logicalId": "Resource48", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5803, + "startLine": 4714, "startColumn": 15, - "endLine": 5803, + "endLine": 4714, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35406,15 +35510,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource60", + "logicalId": "Resource49", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 5861, + "startLine": 4772, "startColumn": 15, - "endLine": 5861, + "endLine": 4772, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35425,15 +35529,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource60", + "logicalId": "Resource49", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5896, + "startLine": 4807, "startColumn": 15, - "endLine": 5896, + "endLine": 4807, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35444,15 +35548,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource60", + "logicalId": "Resource49", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5902, + "startLine": 4813, "startColumn": 15, - "endLine": 5902, + "endLine": 4813, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35463,15 +35567,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource61", + "logicalId": "Resource50", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 5960, + "startLine": 4871, "startColumn": 15, - "endLine": 5960, + "endLine": 4871, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35482,15 +35586,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource61", + "logicalId": "Resource50", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5995, + "startLine": 4906, "startColumn": 15, - "endLine": 5995, + "endLine": 4906, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35501,15 +35605,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource61", + "logicalId": "Resource50", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6001, + "startLine": 4912, "startColumn": 15, - "endLine": 6001, + "endLine": 4912, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35520,15 +35624,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource62", + "logicalId": "Resource51", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 6059, + "startLine": 4970, "startColumn": 15, - "endLine": 6059, + "endLine": 4970, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35539,15 +35643,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource62", + "logicalId": "Resource51", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6094, + "startLine": 5005, "startColumn": 15, - "endLine": 6094, + "endLine": 5005, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35558,15 +35662,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource62", + "logicalId": "Resource51", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6100, + "startLine": 5011, "startColumn": 15, - "endLine": 6100, + "endLine": 5011, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35577,15 +35681,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource63", + "logicalId": "Resource52", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 6158, + "startLine": 5069, "startColumn": 15, - "endLine": 6158, + "endLine": 5069, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35596,15 +35700,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource63", + "logicalId": "Resource52", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6193, + "startLine": 5104, "startColumn": 15, - "endLine": 6193, + "endLine": 5104, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35615,15 +35719,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource63", + "logicalId": "Resource52", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6199, + "startLine": 5110, "startColumn": 15, - "endLine": 6199, + "endLine": 5110, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35634,15 +35738,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource64", + "logicalId": "Resource53", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 6257, + "startLine": 5168, "startColumn": 15, - "endLine": 6257, + "endLine": 5168, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35653,15 +35757,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource64", + "logicalId": "Resource53", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6292, + "startLine": 5203, "startColumn": 15, - "endLine": 6292, + "endLine": 5203, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35672,15 +35776,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource64", + "logicalId": "Resource53", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6298, + "startLine": 5209, "startColumn": 15, - "endLine": 6298, + "endLine": 5209, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35691,15 +35795,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource65", + "logicalId": "Resource54", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 6356, + "startLine": 5267, "startColumn": 15, - "endLine": 6356, + "endLine": 5267, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35710,15 +35814,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource65", + "logicalId": "Resource54", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6391, + "startLine": 5302, "startColumn": 15, - "endLine": 6391, + "endLine": 5302, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35729,15 +35833,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource65", + "logicalId": "Resource54", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6397, + "startLine": 5308, "startColumn": 15, - "endLine": 6397, + "endLine": 5308, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35748,15 +35852,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource66", + "logicalId": "Resource55", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 6455, + "startLine": 5366, "startColumn": 15, - "endLine": 6455, + "endLine": 5366, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35767,15 +35871,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource66", + "logicalId": "Resource55", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6490, + "startLine": 5401, "startColumn": 15, - "endLine": 6490, + "endLine": 5401, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35786,15 +35890,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource66", + "logicalId": "Resource55", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6496, + "startLine": 5407, "startColumn": 15, - "endLine": 6496, + "endLine": 5407, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35805,15 +35909,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource67", + "logicalId": "Resource56", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 6554, + "startLine": 5465, "startColumn": 15, - "endLine": 6554, + "endLine": 5465, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35824,15 +35928,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource67", + "logicalId": "Resource56", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6589, + "startLine": 5500, "startColumn": 15, - "endLine": 6589, + "endLine": 5500, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35843,15 +35947,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource67", + "logicalId": "Resource56", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6595, + "startLine": 5506, "startColumn": 15, - "endLine": 6595, + "endLine": 5506, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35862,15 +35966,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource68", + "logicalId": "Resource57", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 6653, + "startLine": 5564, "startColumn": 15, - "endLine": 6653, + "endLine": 5564, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35881,15 +35985,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource68", + "logicalId": "Resource57", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6688, + "startLine": 5599, "startColumn": 15, - "endLine": 6688, + "endLine": 5599, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35900,15 +36004,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource68", + "logicalId": "Resource57", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6694, + "startLine": 5605, "startColumn": 15, - "endLine": 6694, + "endLine": 5605, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35919,15 +36023,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource69", + "logicalId": "Resource58", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 6752, + "startLine": 5663, "startColumn": 15, - "endLine": 6752, + "endLine": 5663, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35938,15 +36042,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource69", + "logicalId": "Resource58", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6787, + "startLine": 5698, "startColumn": 15, - "endLine": 6787, + "endLine": 5698, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35957,15 +36061,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource69", + "logicalId": "Resource58", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6793, + "startLine": 5704, "startColumn": 15, - "endLine": 6793, + "endLine": 5704, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35976,15 +36080,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource70", + "logicalId": "Resource59", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 6851, + "startLine": 5762, "startColumn": 15, - "endLine": 6851, + "endLine": 5762, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35995,15 +36099,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource70", + "logicalId": "Resource59", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6886, + "startLine": 5797, "startColumn": 15, - "endLine": 6886, + "endLine": 5797, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36014,15 +36118,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource70", + "logicalId": "Resource59", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6892, + "startLine": 5803, "startColumn": 15, - "endLine": 6892, + "endLine": 5803, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36033,15 +36137,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource71", + "logicalId": "Resource60", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 6950, + "startLine": 5861, "startColumn": 15, - "endLine": 6950, + "endLine": 5861, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36052,15 +36156,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource71", + "logicalId": "Resource60", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6985, + "startLine": 5896, "startColumn": 15, - "endLine": 6985, + "endLine": 5896, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36071,15 +36175,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource71", + "logicalId": "Resource60", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6991, + "startLine": 5902, "startColumn": 15, - "endLine": 6991, + "endLine": 5902, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36090,15 +36194,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource72", + "logicalId": "Resource61", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 7049, + "startLine": 5960, "startColumn": 15, - "endLine": 7049, + "endLine": 5960, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36109,15 +36213,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource72", + "logicalId": "Resource61", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7084, + "startLine": 5995, "startColumn": 15, - "endLine": 7084, + "endLine": 5995, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36128,15 +36232,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource72", + "logicalId": "Resource61", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7090, + "startLine": 6001, "startColumn": 15, - "endLine": 7090, + "endLine": 6001, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36147,15 +36251,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource73", + "logicalId": "Resource62", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 7148, + "startLine": 6059, "startColumn": 15, - "endLine": 7148, + "endLine": 6059, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36166,15 +36270,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource73", + "logicalId": "Resource62", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7183, + "startLine": 6094, "startColumn": 15, - "endLine": 7183, + "endLine": 6094, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36185,15 +36289,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource73", + "logicalId": "Resource62", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7189, + "startLine": 6100, "startColumn": 15, - "endLine": 7189, + "endLine": 6100, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36204,15 +36308,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource74", + "logicalId": "Resource63", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 7247, + "startLine": 6158, "startColumn": 15, - "endLine": 7247, + "endLine": 6158, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36223,15 +36327,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource74", + "logicalId": "Resource63", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7282, + "startLine": 6193, "startColumn": 15, - "endLine": 7282, + "endLine": 6193, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36242,15 +36346,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource74", + "logicalId": "Resource63", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7288, + "startLine": 6199, "startColumn": 15, - "endLine": 7288, + "endLine": 6199, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36261,15 +36365,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource75", + "logicalId": "Resource64", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 7346, + "startLine": 6257, "startColumn": 15, - "endLine": 7346, + "endLine": 6257, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36280,15 +36384,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource75", + "logicalId": "Resource64", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7381, + "startLine": 6292, "startColumn": 15, - "endLine": 7381, + "endLine": 6292, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36299,15 +36403,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource75", + "logicalId": "Resource64", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7387, + "startLine": 6298, "startColumn": 15, - "endLine": 7387, + "endLine": 6298, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36318,15 +36422,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource76", + "logicalId": "Resource65", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 7445, + "startLine": 6356, "startColumn": 15, - "endLine": 7445, + "endLine": 6356, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36337,15 +36441,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource76", + "logicalId": "Resource65", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7480, + "startLine": 6391, "startColumn": 15, - "endLine": 7480, + "endLine": 6391, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36356,15 +36460,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource76", + "logicalId": "Resource65", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7486, + "startLine": 6397, "startColumn": 15, - "endLine": 7486, + "endLine": 6397, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36375,15 +36479,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource77", + "logicalId": "Resource66", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 7544, + "startLine": 6455, "startColumn": 15, - "endLine": 7544, + "endLine": 6455, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36394,15 +36498,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource77", + "logicalId": "Resource66", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7579, + "startLine": 6490, "startColumn": 15, - "endLine": 7579, + "endLine": 6490, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36413,15 +36517,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource77", + "logicalId": "Resource66", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7585, + "startLine": 6496, "startColumn": 15, - "endLine": 7585, + "endLine": 6496, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36432,15 +36536,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource78", + "logicalId": "Resource67", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 7643, + "startLine": 6554, "startColumn": 15, - "endLine": 7643, + "endLine": 6554, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36451,15 +36555,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource78", + "logicalId": "Resource67", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7678, + "startLine": 6589, "startColumn": 15, - "endLine": 7678, + "endLine": 6589, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36470,15 +36574,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource78", + "logicalId": "Resource67", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7684, + "startLine": 6595, "startColumn": 15, - "endLine": 7684, + "endLine": 6595, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36489,15 +36593,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource79", + "logicalId": "Resource68", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 7742, + "startLine": 6653, "startColumn": 15, - "endLine": 7742, + "endLine": 6653, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36508,15 +36612,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource79", + "logicalId": "Resource68", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7777, + "startLine": 6688, "startColumn": 15, - "endLine": 7777, + "endLine": 6688, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36527,15 +36631,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource79", + "logicalId": "Resource68", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7783, + "startLine": 6694, "startColumn": 15, - "endLine": 7783, + "endLine": 6694, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36546,15 +36650,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource80", + "logicalId": "Resource69", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 7841, + "startLine": 6752, "startColumn": 15, - "endLine": 7841, + "endLine": 6752, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36565,15 +36669,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource80", + "logicalId": "Resource69", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7876, + "startLine": 6787, "startColumn": 15, - "endLine": 7876, + "endLine": 6787, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36584,15 +36688,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource80", + "logicalId": "Resource69", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7882, + "startLine": 6793, "startColumn": 15, - "endLine": 7882, + "endLine": 6793, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36603,15 +36707,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource81", + "logicalId": "Resource70", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 7940, + "startLine": 6851, "startColumn": 15, - "endLine": 7940, + "endLine": 6851, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36622,15 +36726,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource81", + "logicalId": "Resource70", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7975, + "startLine": 6886, "startColumn": 15, - "endLine": 7975, + "endLine": 6886, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36641,15 +36745,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource81", + "logicalId": "Resource70", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7981, + "startLine": 6892, "startColumn": 15, - "endLine": 7981, + "endLine": 6892, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36660,15 +36764,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource82", + "logicalId": "Resource71", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 8039, + "startLine": 6950, "startColumn": 15, - "endLine": 8039, + "endLine": 6950, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36679,15 +36783,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource82", + "logicalId": "Resource71", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8074, + "startLine": 6985, "startColumn": 15, - "endLine": 8074, + "endLine": 6985, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36698,15 +36802,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource82", + "logicalId": "Resource71", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8080, + "startLine": 6991, "startColumn": 15, - "endLine": 8080, + "endLine": 6991, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36717,15 +36821,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource83", + "logicalId": "Resource72", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 8138, + "startLine": 7049, "startColumn": 15, - "endLine": 8138, + "endLine": 7049, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36736,15 +36840,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource83", + "logicalId": "Resource72", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8173, + "startLine": 7084, "startColumn": 15, - "endLine": 8173, + "endLine": 7084, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36755,15 +36859,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource83", + "logicalId": "Resource72", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8179, + "startLine": 7090, "startColumn": 15, - "endLine": 8179, + "endLine": 7090, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36774,15 +36878,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource84", + "logicalId": "Resource73", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 8237, + "startLine": 7148, "startColumn": 15, - "endLine": 8237, + "endLine": 7148, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36793,15 +36897,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource84", + "logicalId": "Resource73", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8272, + "startLine": 7183, "startColumn": 15, - "endLine": 8272, + "endLine": 7183, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36812,15 +36916,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource84", + "logicalId": "Resource73", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8278, + "startLine": 7189, "startColumn": 15, - "endLine": 8278, + "endLine": 7189, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36831,15 +36935,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource85", + "logicalId": "Resource74", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 8336, + "startLine": 7247, "startColumn": 15, - "endLine": 8336, + "endLine": 7247, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36850,15 +36954,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource85", + "logicalId": "Resource74", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8371, + "startLine": 7282, "startColumn": 15, - "endLine": 8371, + "endLine": 7282, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36869,15 +36973,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource85", + "logicalId": "Resource74", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8377, + "startLine": 7288, "startColumn": 15, - "endLine": 8377, + "endLine": 7288, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36888,15 +36992,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource86", + "logicalId": "Resource75", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 8435, + "startLine": 7346, "startColumn": 15, - "endLine": 8435, + "endLine": 7346, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36907,15 +37011,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource86", + "logicalId": "Resource75", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8470, + "startLine": 7381, "startColumn": 15, - "endLine": 8470, + "endLine": 7381, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36926,15 +37030,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource86", + "logicalId": "Resource75", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8476, + "startLine": 7387, "startColumn": 15, - "endLine": 8476, + "endLine": 7387, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36945,15 +37049,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource87", + "logicalId": "Resource76", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 8534, + "startLine": 7445, "startColumn": 15, - "endLine": 8534, + "endLine": 7445, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36964,15 +37068,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource87", + "logicalId": "Resource76", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8569, + "startLine": 7480, "startColumn": 15, - "endLine": 8569, + "endLine": 7480, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36983,15 +37087,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource87", + "logicalId": "Resource76", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8575, + "startLine": 7486, "startColumn": 15, - "endLine": 8575, + "endLine": 7486, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37002,15 +37106,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource88", + "logicalId": "Resource77", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 8633, + "startLine": 7544, "startColumn": 15, - "endLine": 8633, + "endLine": 7544, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37021,15 +37125,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource88", + "logicalId": "Resource77", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8668, + "startLine": 7579, "startColumn": 15, - "endLine": 8668, + "endLine": 7579, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37040,15 +37144,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource88", + "logicalId": "Resource77", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8674, + "startLine": 7585, "startColumn": 15, - "endLine": 8674, + "endLine": 7585, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37059,15 +37163,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource89", + "logicalId": "Resource78", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 8732, + "startLine": 7643, "startColumn": 15, - "endLine": 8732, + "endLine": 7643, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37078,15 +37182,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource89", + "logicalId": "Resource78", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8767, + "startLine": 7678, "startColumn": 15, - "endLine": 8767, + "endLine": 7678, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37097,15 +37201,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource89", + "logicalId": "Resource78", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8773, + "startLine": 7684, "startColumn": 15, - "endLine": 8773, + "endLine": 7684, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37116,15 +37220,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource90", + "logicalId": "Resource79", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 8831, + "startLine": 7742, "startColumn": 15, - "endLine": 8831, + "endLine": 7742, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37135,15 +37239,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource90", + "logicalId": "Resource79", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8866, + "startLine": 7777, "startColumn": 15, - "endLine": 8866, + "endLine": 7777, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37154,15 +37258,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource90", + "logicalId": "Resource79", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8872, + "startLine": 7783, "startColumn": 15, - "endLine": 8872, + "endLine": 7783, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37173,15 +37277,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource91", + "logicalId": "Resource80", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 8930, + "startLine": 7841, "startColumn": 15, - "endLine": 8930, + "endLine": 7841, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37192,15 +37296,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource91", + "logicalId": "Resource80", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8965, + "startLine": 7876, "startColumn": 15, - "endLine": 8965, + "endLine": 7876, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37211,15 +37315,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource91", + "logicalId": "Resource80", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8971, + "startLine": 7882, "startColumn": 15, - "endLine": 8971, + "endLine": 7882, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37230,15 +37334,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource92", + "logicalId": "Resource81", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 9029, + "startLine": 7940, "startColumn": 15, - "endLine": 9029, + "endLine": 7940, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37249,15 +37353,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource92", + "logicalId": "Resource81", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9064, + "startLine": 7975, "startColumn": 15, - "endLine": 9064, + "endLine": 7975, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37268,15 +37372,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource92", + "logicalId": "Resource81", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9070, + "startLine": 7981, "startColumn": 15, - "endLine": 9070, + "endLine": 7981, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37287,15 +37391,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource93", + "logicalId": "Resource82", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 9128, + "startLine": 8039, "startColumn": 15, - "endLine": 9128, + "endLine": 8039, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37306,15 +37410,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource93", + "logicalId": "Resource82", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9163, + "startLine": 8074, "startColumn": 15, - "endLine": 9163, + "endLine": 8074, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37325,15 +37429,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource93", + "logicalId": "Resource82", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9169, + "startLine": 8080, "startColumn": 15, - "endLine": 9169, + "endLine": 8080, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37344,15 +37448,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource94", + "logicalId": "Resource83", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 9227, + "startLine": 8138, "startColumn": 15, - "endLine": 9227, + "endLine": 8138, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37363,15 +37467,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource94", + "logicalId": "Resource83", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9262, + "startLine": 8173, "startColumn": 15, - "endLine": 9262, + "endLine": 8173, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37382,15 +37486,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource94", + "logicalId": "Resource83", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9268, + "startLine": 8179, "startColumn": 15, - "endLine": 9268, + "endLine": 8179, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37401,15 +37505,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource95", + "logicalId": "Resource84", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 9326, + "startLine": 8237, "startColumn": 15, - "endLine": 9326, + "endLine": 8237, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37420,15 +37524,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource95", + "logicalId": "Resource84", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9361, + "startLine": 8272, "startColumn": 15, - "endLine": 9361, + "endLine": 8272, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37439,15 +37543,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource95", + "logicalId": "Resource84", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9367, + "startLine": 8278, "startColumn": 15, - "endLine": 9367, + "endLine": 8278, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37458,15 +37562,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource96", + "logicalId": "Resource85", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 9425, + "startLine": 8336, "startColumn": 15, - "endLine": 9425, + "endLine": 8336, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37477,15 +37581,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource96", + "logicalId": "Resource85", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9460, + "startLine": 8371, "startColumn": 15, - "endLine": 9460, + "endLine": 8371, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37496,15 +37600,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource96", + "logicalId": "Resource85", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9466, + "startLine": 8377, "startColumn": 15, - "endLine": 9466, + "endLine": 8377, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37515,15 +37619,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource97", + "logicalId": "Resource86", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 9524, + "startLine": 8435, "startColumn": 15, - "endLine": 9524, + "endLine": 8435, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37534,15 +37638,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource97", + "logicalId": "Resource86", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9559, + "startLine": 8470, "startColumn": 15, - "endLine": 9559, + "endLine": 8470, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37553,15 +37657,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource97", + "logicalId": "Resource86", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9565, + "startLine": 8476, "startColumn": 15, - "endLine": 9565, + "endLine": 8476, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37572,15 +37676,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource98", + "logicalId": "Resource87", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 9623, + "startLine": 8534, "startColumn": 15, - "endLine": 9623, + "endLine": 8534, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37591,15 +37695,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource98", + "logicalId": "Resource87", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9658, + "startLine": 8569, "startColumn": 15, - "endLine": 9658, + "endLine": 8569, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37610,15 +37714,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource98", + "logicalId": "Resource87", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9664, + "startLine": 8575, "startColumn": 15, - "endLine": 9664, + "endLine": 8575, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37629,15 +37733,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource99", + "logicalId": "Resource88", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 9722, + "startLine": 8633, "startColumn": 15, - "endLine": 9722, + "endLine": 8633, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37648,15 +37752,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource99", + "logicalId": "Resource88", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9757, + "startLine": 8668, "startColumn": 15, - "endLine": 9757, + "endLine": 8668, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37667,15 +37771,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource99", + "logicalId": "Resource88", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9763, + "startLine": 8674, "startColumn": 15, - "endLine": 9763, + "endLine": 8674, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37686,15 +37790,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource100", + "logicalId": "Resource89", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 9821, + "startLine": 8732, "startColumn": 15, - "endLine": 9821, + "endLine": 8732, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37705,15 +37809,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource100", + "logicalId": "Resource89", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9856, + "startLine": 8767, "startColumn": 15, - "endLine": 9856, + "endLine": 8767, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37724,15 +37828,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource100", + "logicalId": "Resource89", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9862, + "startLine": 8773, "startColumn": 15, - "endLine": 9862, + "endLine": 8773, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37743,15 +37847,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource101", + "logicalId": "Resource90", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 9920, + "startLine": 8831, "startColumn": 15, - "endLine": 9920, + "endLine": 8831, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37762,15 +37866,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource101", + "logicalId": "Resource90", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9955, + "startLine": 8866, "startColumn": 15, - "endLine": 9955, + "endLine": 8866, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37781,15 +37885,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource101", + "logicalId": "Resource90", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9961, + "startLine": 8872, "startColumn": 15, - "endLine": 9961, + "endLine": 8872, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37800,15 +37904,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource102", + "logicalId": "Resource91", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 10019, + "startLine": 8930, "startColumn": 15, - "endLine": 10019, + "endLine": 8930, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37819,15 +37923,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource102", + "logicalId": "Resource91", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10054, + "startLine": 8965, "startColumn": 15, - "endLine": 10054, + "endLine": 8965, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37838,15 +37942,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource102", + "logicalId": "Resource91", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10060, + "startLine": 8971, "startColumn": 15, - "endLine": 10060, + "endLine": 8971, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37857,15 +37961,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource103", + "logicalId": "Resource92", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 10118, + "startLine": 9029, "startColumn": 15, - "endLine": 10118, + "endLine": 9029, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37876,15 +37980,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource103", + "logicalId": "Resource92", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10153, + "startLine": 9064, "startColumn": 15, - "endLine": 10153, + "endLine": 9064, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37895,15 +37999,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource103", + "logicalId": "Resource92", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10159, + "startLine": 9070, "startColumn": 15, - "endLine": 10159, + "endLine": 9070, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37914,15 +38018,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource104", + "logicalId": "Resource93", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 10217, + "startLine": 9128, "startColumn": 15, - "endLine": 10217, + "endLine": 9128, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37933,15 +38037,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource104", + "logicalId": "Resource93", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10252, + "startLine": 9163, "startColumn": 15, - "endLine": 10252, + "endLine": 9163, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37952,15 +38056,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource104", + "logicalId": "Resource93", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10258, + "startLine": 9169, "startColumn": 15, - "endLine": 10258, + "endLine": 9169, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37971,15 +38075,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource105", + "logicalId": "Resource94", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 10316, + "startLine": 9227, "startColumn": 15, - "endLine": 10316, + "endLine": 9227, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37990,15 +38094,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource105", + "logicalId": "Resource94", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10351, + "startLine": 9262, "startColumn": 15, - "endLine": 10351, + "endLine": 9262, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38009,15 +38113,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource105", + "logicalId": "Resource94", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10357, + "startLine": 9268, "startColumn": 15, - "endLine": 10357, + "endLine": 9268, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38028,15 +38132,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource106", + "logicalId": "Resource95", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 10415, + "startLine": 9326, "startColumn": 15, - "endLine": 10415, + "endLine": 9326, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38047,15 +38151,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource106", + "logicalId": "Resource95", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10450, + "startLine": 9361, "startColumn": 15, - "endLine": 10450, + "endLine": 9361, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38066,15 +38170,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource106", + "logicalId": "Resource95", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10456, + "startLine": 9367, "startColumn": 15, - "endLine": 10456, + "endLine": 9367, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38085,15 +38189,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource107", + "logicalId": "Resource96", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 10514, + "startLine": 9425, "startColumn": 15, - "endLine": 10514, + "endLine": 9425, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38104,15 +38208,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource107", + "logicalId": "Resource96", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10549, + "startLine": 9460, "startColumn": 15, - "endLine": 10549, + "endLine": 9460, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38123,15 +38227,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource107", + "logicalId": "Resource96", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10555, + "startLine": 9466, "startColumn": 15, - "endLine": 10555, + "endLine": 9466, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38142,15 +38246,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource108", + "logicalId": "Resource97", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 10613, + "startLine": 9524, "startColumn": 15, - "endLine": 10613, + "endLine": 9524, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38161,15 +38265,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource108", + "logicalId": "Resource97", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10648, + "startLine": 9559, "startColumn": 15, - "endLine": 10648, + "endLine": 9559, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38180,15 +38284,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource108", + "logicalId": "Resource97", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10654, + "startLine": 9565, "startColumn": 15, - "endLine": 10654, + "endLine": 9565, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38199,15 +38303,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource109", + "logicalId": "Resource98", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 10712, + "startLine": 9623, "startColumn": 15, - "endLine": 10712, + "endLine": 9623, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38218,15 +38322,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource109", + "logicalId": "Resource98", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10747, + "startLine": 9658, "startColumn": 15, - "endLine": 10747, + "endLine": 9658, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38237,15 +38341,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource109", + "logicalId": "Resource98", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10753, + "startLine": 9664, "startColumn": 15, - "endLine": 10753, + "endLine": 9664, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38256,15 +38360,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource110", + "logicalId": "Resource99", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 10811, + "startLine": 9722, "startColumn": 15, - "endLine": 10811, + "endLine": 9722, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38275,15 +38379,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource110", + "logicalId": "Resource99", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10846, + "startLine": 9757, "startColumn": 15, - "endLine": 10846, + "endLine": 9757, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38294,15 +38398,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource110", + "logicalId": "Resource99", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10852, + "startLine": 9763, "startColumn": 15, - "endLine": 10852, + "endLine": 9763, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38313,15 +38417,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource111", + "logicalId": "Resource100", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 10910, + "startLine": 9821, "startColumn": 15, - "endLine": 10910, + "endLine": 9821, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38332,15 +38436,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource111", + "logicalId": "Resource100", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10945, + "startLine": 9856, "startColumn": 15, - "endLine": 10945, + "endLine": 9856, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38351,15 +38455,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource111", + "logicalId": "Resource100", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10951, + "startLine": 9862, "startColumn": 15, - "endLine": 10951, + "endLine": 9862, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38370,15 +38474,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource112", + "logicalId": "Resource101", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 11009, + "startLine": 9920, "startColumn": 15, - "endLine": 11009, + "endLine": 9920, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38389,15 +38493,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource112", + "logicalId": "Resource101", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11044, + "startLine": 9955, "startColumn": 15, - "endLine": 11044, + "endLine": 9955, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38408,15 +38512,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource112", + "logicalId": "Resource101", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11050, + "startLine": 9961, "startColumn": 15, - "endLine": 11050, + "endLine": 9961, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38427,15 +38531,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource113", + "logicalId": "Resource102", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 11108, + "startLine": 10019, "startColumn": 15, - "endLine": 11108, + "endLine": 10019, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38446,15 +38550,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource113", + "logicalId": "Resource102", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11143, + "startLine": 10054, "startColumn": 15, - "endLine": 11143, + "endLine": 10054, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38465,15 +38569,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource113", + "logicalId": "Resource102", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11149, + "startLine": 10060, "startColumn": 15, - "endLine": 11149, + "endLine": 10060, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38484,15 +38588,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource114", + "logicalId": "Resource103", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 11207, + "startLine": 10118, "startColumn": 15, - "endLine": 11207, + "endLine": 10118, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38503,15 +38607,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource114", + "logicalId": "Resource103", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11242, + "startLine": 10153, "startColumn": 15, - "endLine": 11242, + "endLine": 10153, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38522,15 +38626,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource114", + "logicalId": "Resource103", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11248, + "startLine": 10159, "startColumn": 15, - "endLine": 11248, + "endLine": 10159, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38541,15 +38645,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource115", + "logicalId": "Resource104", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 11306, + "startLine": 10217, "startColumn": 15, - "endLine": 11306, + "endLine": 10217, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38560,15 +38664,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource115", + "logicalId": "Resource104", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11341, + "startLine": 10252, "startColumn": 15, - "endLine": 11341, + "endLine": 10252, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38579,15 +38683,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource115", + "logicalId": "Resource104", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11347, + "startLine": 10258, "startColumn": 15, - "endLine": 11347, + "endLine": 10258, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38598,15 +38702,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource116", + "logicalId": "Resource105", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 11405, + "startLine": 10316, "startColumn": 15, - "endLine": 11405, + "endLine": 10316, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38617,15 +38721,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource116", + "logicalId": "Resource105", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11440, + "startLine": 10351, "startColumn": 15, - "endLine": 11440, + "endLine": 10351, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38636,15 +38740,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource116", + "logicalId": "Resource105", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11446, + "startLine": 10357, "startColumn": 15, - "endLine": 11446, + "endLine": 10357, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38655,15 +38759,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource117", + "logicalId": "Resource106", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 11504, + "startLine": 10415, "startColumn": 15, - "endLine": 11504, + "endLine": 10415, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38674,15 +38778,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource117", + "logicalId": "Resource106", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11539, + "startLine": 10450, "startColumn": 15, - "endLine": 11539, + "endLine": 10450, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38693,15 +38797,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource117", + "logicalId": "Resource106", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11545, + "startLine": 10456, "startColumn": 15, - "endLine": 11545, + "endLine": 10456, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38712,15 +38816,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource118", + "logicalId": "Resource107", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 11603, + "startLine": 10514, "startColumn": 15, - "endLine": 11603, + "endLine": 10514, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38731,15 +38835,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource118", + "logicalId": "Resource107", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11638, + "startLine": 10549, "startColumn": 15, - "endLine": 11638, + "endLine": 10549, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38750,15 +38854,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource118", + "logicalId": "Resource107", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11644, + "startLine": 10555, "startColumn": 15, - "endLine": 11644, + "endLine": 10555, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38769,15 +38873,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource119", + "logicalId": "Resource108", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 11702, + "startLine": 10613, "startColumn": 15, - "endLine": 11702, + "endLine": 10613, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38788,15 +38892,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource119", + "logicalId": "Resource108", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11737, + "startLine": 10648, "startColumn": 15, - "endLine": 11737, + "endLine": 10648, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38807,15 +38911,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource119", + "logicalId": "Resource108", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11743, + "startLine": 10654, "startColumn": 15, - "endLine": 11743, + "endLine": 10654, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38826,15 +38930,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource120", + "logicalId": "Resource109", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 11801, + "startLine": 10712, "startColumn": 15, - "endLine": 11801, + "endLine": 10712, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38845,15 +38949,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource120", + "logicalId": "Resource109", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11836, + "startLine": 10747, "startColumn": 15, - "endLine": 11836, + "endLine": 10747, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38864,15 +38968,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource120", + "logicalId": "Resource109", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11842, + "startLine": 10753, "startColumn": 15, - "endLine": 11842, + "endLine": 10753, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38883,15 +38987,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource121", + "logicalId": "Resource110", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 11900, + "startLine": 10811, "startColumn": 15, - "endLine": 11900, + "endLine": 10811, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38902,15 +39006,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource121", + "logicalId": "Resource110", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11935, + "startLine": 10846, "startColumn": 15, - "endLine": 11935, + "endLine": 10846, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38921,15 +39025,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource121", + "logicalId": "Resource110", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11941, + "startLine": 10852, "startColumn": 15, - "endLine": 11941, + "endLine": 10852, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38940,15 +39044,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource122", + "logicalId": "Resource111", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 11999, + "startLine": 10910, "startColumn": 15, - "endLine": 11999, + "endLine": 10910, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38959,15 +39063,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource122", + "logicalId": "Resource111", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12034, + "startLine": 10945, "startColumn": 15, - "endLine": 12034, + "endLine": 10945, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38978,15 +39082,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource122", + "logicalId": "Resource111", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12040, + "startLine": 10951, "startColumn": 15, - "endLine": 12040, + "endLine": 10951, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38997,15 +39101,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource123", + "logicalId": "Resource112", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 12098, + "startLine": 11009, "startColumn": 15, - "endLine": 12098, + "endLine": 11009, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39016,15 +39120,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource123", + "logicalId": "Resource112", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12133, + "startLine": 11044, "startColumn": 15, - "endLine": 12133, + "endLine": 11044, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39035,15 +39139,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource123", + "logicalId": "Resource112", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12139, + "startLine": 11050, "startColumn": 15, - "endLine": 12139, + "endLine": 11050, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39054,15 +39158,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource124", + "logicalId": "Resource113", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 12197, + "startLine": 11108, "startColumn": 15, - "endLine": 12197, + "endLine": 11108, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39073,15 +39177,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource124", + "logicalId": "Resource113", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12232, + "startLine": 11143, "startColumn": 15, - "endLine": 12232, + "endLine": 11143, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39092,15 +39196,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource124", + "logicalId": "Resource113", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12238, + "startLine": 11149, "startColumn": 15, - "endLine": 12238, + "endLine": 11149, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39111,15 +39215,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource125", + "logicalId": "Resource114", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 12296, + "startLine": 11207, "startColumn": 15, - "endLine": 12296, + "endLine": 11207, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39130,15 +39234,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource125", + "logicalId": "Resource114", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12331, + "startLine": 11242, "startColumn": 15, - "endLine": 12331, + "endLine": 11242, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39149,15 +39253,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource125", + "logicalId": "Resource114", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12337, + "startLine": 11248, "startColumn": 15, - "endLine": 12337, + "endLine": 11248, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39168,15 +39272,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource126", + "logicalId": "Resource115", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 12395, + "startLine": 11306, "startColumn": 15, - "endLine": 12395, + "endLine": 11306, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39187,15 +39291,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource126", + "logicalId": "Resource115", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12430, + "startLine": 11341, "startColumn": 15, - "endLine": 12430, + "endLine": 11341, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39206,15 +39310,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource126", + "logicalId": "Resource115", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12436, + "startLine": 11347, "startColumn": 15, - "endLine": 12436, + "endLine": 11347, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39225,15 +39329,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource127", + "logicalId": "Resource116", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 12494, + "startLine": 11405, "startColumn": 15, - "endLine": 12494, + "endLine": 11405, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39244,15 +39348,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource127", + "logicalId": "Resource116", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12529, + "startLine": 11440, "startColumn": 15, - "endLine": 12529, + "endLine": 11440, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39263,15 +39367,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource127", + "logicalId": "Resource116", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12535, + "startLine": 11446, "startColumn": 15, - "endLine": 12535, + "endLine": 11446, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39282,15 +39386,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource128", + "logicalId": "Resource117", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 12593, + "startLine": 11504, "startColumn": 15, - "endLine": 12593, + "endLine": 11504, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39301,15 +39405,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource128", + "logicalId": "Resource117", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12628, + "startLine": 11539, "startColumn": 15, - "endLine": 12628, + "endLine": 11539, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39320,15 +39424,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource128", + "logicalId": "Resource117", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12634, + "startLine": 11545, "startColumn": 15, - "endLine": 12634, + "endLine": 11545, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39339,15 +39443,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource129", + "logicalId": "Resource118", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 12692, + "startLine": 11603, "startColumn": 15, - "endLine": 12692, + "endLine": 11603, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39358,15 +39462,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource129", + "logicalId": "Resource118", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12727, + "startLine": 11638, "startColumn": 15, - "endLine": 12727, + "endLine": 11638, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39377,15 +39481,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource129", + "logicalId": "Resource118", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12733, + "startLine": 11644, "startColumn": 15, - "endLine": 12733, + "endLine": 11644, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39396,15 +39500,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource130", + "logicalId": "Resource119", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 12791, + "startLine": 11702, "startColumn": 15, - "endLine": 12791, + "endLine": 11702, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39415,15 +39519,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource130", + "logicalId": "Resource119", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12826, + "startLine": 11737, "startColumn": 15, - "endLine": 12826, + "endLine": 11737, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39434,15 +39538,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource130", + "logicalId": "Resource119", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12832, + "startLine": 11743, "startColumn": 15, - "endLine": 12832, + "endLine": 11743, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39453,15 +39557,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource131", + "logicalId": "Resource120", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 12890, + "startLine": 11801, "startColumn": 15, - "endLine": 12890, + "endLine": 11801, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39472,15 +39576,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource131", + "logicalId": "Resource120", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12925, + "startLine": 11836, "startColumn": 15, - "endLine": 12925, + "endLine": 11836, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39491,15 +39595,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource131", + "logicalId": "Resource120", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12931, + "startLine": 11842, "startColumn": 15, - "endLine": 12931, + "endLine": 11842, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39510,15 +39614,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource132", + "logicalId": "Resource121", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 12989, + "startLine": 11900, "startColumn": 15, - "endLine": 12989, + "endLine": 11900, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39529,15 +39633,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource132", + "logicalId": "Resource121", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13024, + "startLine": 11935, "startColumn": 15, - "endLine": 13024, + "endLine": 11935, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39548,15 +39652,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource132", + "logicalId": "Resource121", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13030, + "startLine": 11941, "startColumn": 15, - "endLine": 13030, + "endLine": 11941, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39567,15 +39671,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource133", + "logicalId": "Resource122", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 13088, + "startLine": 11999, "startColumn": 15, - "endLine": 13088, + "endLine": 11999, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39586,15 +39690,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource133", + "logicalId": "Resource122", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13123, + "startLine": 12034, "startColumn": 15, - "endLine": 13123, + "endLine": 12034, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39605,15 +39709,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource133", + "logicalId": "Resource122", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13129, + "startLine": 12040, "startColumn": 15, - "endLine": 13129, + "endLine": 12040, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39624,15 +39728,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource134", + "logicalId": "Resource123", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 13187, + "startLine": 12098, "startColumn": 15, - "endLine": 13187, + "endLine": 12098, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39643,15 +39747,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource134", + "logicalId": "Resource123", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13222, + "startLine": 12133, "startColumn": 15, - "endLine": 13222, + "endLine": 12133, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39662,15 +39766,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource134", + "logicalId": "Resource123", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13228, + "startLine": 12139, "startColumn": 15, - "endLine": 13228, + "endLine": 12139, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39681,15 +39785,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource135", + "logicalId": "Resource124", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 13286, + "startLine": 12197, "startColumn": 15, - "endLine": 13286, + "endLine": 12197, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39700,15 +39804,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource135", + "logicalId": "Resource124", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13321, + "startLine": 12232, "startColumn": 15, - "endLine": 13321, + "endLine": 12232, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39719,15 +39823,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource135", + "logicalId": "Resource124", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13327, + "startLine": 12238, "startColumn": 15, - "endLine": 13327, + "endLine": 12238, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39738,15 +39842,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource136", + "logicalId": "Resource125", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 13385, + "startLine": 12296, "startColumn": 15, - "endLine": 13385, + "endLine": 12296, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39757,15 +39861,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource136", + "logicalId": "Resource125", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13420, + "startLine": 12331, "startColumn": 15, - "endLine": 13420, + "endLine": 12331, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39776,15 +39880,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource136", + "logicalId": "Resource125", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13426, + "startLine": 12337, "startColumn": 15, - "endLine": 13426, + "endLine": 12337, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39795,15 +39899,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource137", + "logicalId": "Resource126", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 13484, + "startLine": 12395, "startColumn": 15, - "endLine": 13484, + "endLine": 12395, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39814,15 +39918,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource137", + "logicalId": "Resource126", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13519, + "startLine": 12430, "startColumn": 15, - "endLine": 13519, + "endLine": 12430, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39833,15 +39937,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource137", + "logicalId": "Resource126", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13525, + "startLine": 12436, "startColumn": 15, - "endLine": 13525, + "endLine": 12436, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39852,15 +39956,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource138", + "logicalId": "Resource127", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 13583, + "startLine": 12494, "startColumn": 15, - "endLine": 13583, + "endLine": 12494, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39871,15 +39975,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource138", + "logicalId": "Resource127", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13618, + "startLine": 12529, "startColumn": 15, - "endLine": 13618, + "endLine": 12529, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39890,15 +39994,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource138", + "logicalId": "Resource127", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13624, + "startLine": 12535, "startColumn": 15, - "endLine": 13624, + "endLine": 12535, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39909,15 +40013,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource139", + "logicalId": "Resource128", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 13682, + "startLine": 12593, "startColumn": 15, - "endLine": 13682, + "endLine": 12593, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39928,15 +40032,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource139", + "logicalId": "Resource128", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13717, + "startLine": 12628, "startColumn": 15, - "endLine": 13717, + "endLine": 12628, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39947,15 +40051,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource139", + "logicalId": "Resource128", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13723, + "startLine": 12634, "startColumn": 15, - "endLine": 13723, + "endLine": 12634, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39966,15 +40070,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource140", + "logicalId": "Resource129", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 13781, + "startLine": 12692, "startColumn": 15, - "endLine": 13781, + "endLine": 12692, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39985,15 +40089,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource140", + "logicalId": "Resource129", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13816, + "startLine": 12727, "startColumn": 15, - "endLine": 13816, + "endLine": 12727, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40004,15 +40108,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource140", + "logicalId": "Resource129", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13822, + "startLine": 12733, "startColumn": 15, - "endLine": 13822, + "endLine": 12733, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40023,15 +40127,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource141", + "logicalId": "Resource130", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 13880, + "startLine": 12791, "startColumn": 15, - "endLine": 13880, + "endLine": 12791, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40042,15 +40146,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource141", + "logicalId": "Resource130", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13915, + "startLine": 12826, "startColumn": 15, - "endLine": 13915, + "endLine": 12826, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40061,15 +40165,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource141", + "logicalId": "Resource130", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13921, + "startLine": 12832, "startColumn": 15, - "endLine": 13921, + "endLine": 12832, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40080,15 +40184,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource142", + "logicalId": "Resource131", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 13979, + "startLine": 12890, "startColumn": 15, - "endLine": 13979, + "endLine": 12890, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40099,15 +40203,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource142", + "logicalId": "Resource131", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14014, + "startLine": 12925, "startColumn": 15, - "endLine": 14014, + "endLine": 12925, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40118,15 +40222,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource142", + "logicalId": "Resource131", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14020, + "startLine": 12931, "startColumn": 15, - "endLine": 14020, + "endLine": 12931, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40137,15 +40241,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource143", + "logicalId": "Resource132", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 14078, + "startLine": 12989, "startColumn": 15, - "endLine": 14078, + "endLine": 12989, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40156,15 +40260,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource143", + "logicalId": "Resource132", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14113, + "startLine": 13024, "startColumn": 15, - "endLine": 14113, + "endLine": 13024, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40175,15 +40279,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource143", + "logicalId": "Resource132", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14119, + "startLine": 13030, "startColumn": 15, - "endLine": 14119, + "endLine": 13030, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40194,15 +40298,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource144", + "logicalId": "Resource133", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 14177, + "startLine": 13088, "startColumn": 15, - "endLine": 14177, + "endLine": 13088, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40213,15 +40317,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource144", + "logicalId": "Resource133", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14212, + "startLine": 13123, "startColumn": 15, - "endLine": 14212, + "endLine": 13123, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40232,15 +40336,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource144", + "logicalId": "Resource133", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14218, + "startLine": 13129, "startColumn": 15, - "endLine": 14218, + "endLine": 13129, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40251,15 +40355,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource145", + "logicalId": "Resource134", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 14276, + "startLine": 13187, "startColumn": 15, - "endLine": 14276, + "endLine": 13187, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40270,15 +40374,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource145", + "logicalId": "Resource134", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14311, + "startLine": 13222, "startColumn": 15, - "endLine": 14311, + "endLine": 13222, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40289,15 +40393,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource145", + "logicalId": "Resource134", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14317, + "startLine": 13228, "startColumn": 15, - "endLine": 14317, + "endLine": 13228, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40308,15 +40412,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource146", + "logicalId": "Resource135", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 14375, + "startLine": 13286, "startColumn": 15, - "endLine": 14375, + "endLine": 13286, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40327,15 +40431,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource146", + "logicalId": "Resource135", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14410, + "startLine": 13321, "startColumn": 15, - "endLine": 14410, + "endLine": 13321, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40346,15 +40450,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource146", + "logicalId": "Resource135", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14416, + "startLine": 13327, "startColumn": 15, - "endLine": 14416, + "endLine": 13327, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40365,15 +40469,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource147", + "logicalId": "Resource136", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 14474, + "startLine": 13385, "startColumn": 15, - "endLine": 14474, + "endLine": 13385, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40384,15 +40488,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource147", + "logicalId": "Resource136", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14509, + "startLine": 13420, "startColumn": 15, - "endLine": 14509, + "endLine": 13420, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40403,15 +40507,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource147", + "logicalId": "Resource136", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14515, + "startLine": 13426, "startColumn": 15, - "endLine": 14515, + "endLine": 13426, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40422,15 +40526,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource148", + "logicalId": "Resource137", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 14573, + "startLine": 13484, "startColumn": 15, - "endLine": 14573, + "endLine": 13484, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40441,15 +40545,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource148", + "logicalId": "Resource137", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14608, + "startLine": 13519, "startColumn": 15, - "endLine": 14608, + "endLine": 13519, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40460,15 +40564,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource148", + "logicalId": "Resource137", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14614, + "startLine": 13525, "startColumn": 15, - "endLine": 14614, + "endLine": 13525, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40479,15 +40583,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource149", + "logicalId": "Resource138", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 14672, + "startLine": 13583, "startColumn": 15, - "endLine": 14672, + "endLine": 13583, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40498,15 +40602,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource149", + "logicalId": "Resource138", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14707, + "startLine": 13618, "startColumn": 15, - "endLine": 14707, + "endLine": 13618, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40517,15 +40621,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource149", + "logicalId": "Resource138", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14713, + "startLine": 13624, "startColumn": 15, - "endLine": 14713, + "endLine": 13624, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40536,15 +40640,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource150", + "logicalId": "Resource139", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 14771, + "startLine": 13682, "startColumn": 15, - "endLine": 14771, + "endLine": 13682, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40555,15 +40659,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource150", + "logicalId": "Resource139", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14806, + "startLine": 13717, "startColumn": 15, - "endLine": 14806, + "endLine": 13717, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40574,15 +40678,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource150", + "logicalId": "Resource139", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14812, + "startLine": 13723, "startColumn": 15, - "endLine": 14812, + "endLine": 13723, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40593,15 +40697,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource151", + "logicalId": "Resource140", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 14870, + "startLine": 13781, "startColumn": 15, - "endLine": 14870, + "endLine": 13781, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40612,15 +40716,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource151", + "logicalId": "Resource140", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14905, + "startLine": 13816, "startColumn": 15, - "endLine": 14905, + "endLine": 13816, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40631,15 +40735,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource151", + "logicalId": "Resource140", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14911, + "startLine": 13822, "startColumn": 15, - "endLine": 14911, + "endLine": 13822, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40650,15 +40754,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource152", + "logicalId": "Resource141", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 14969, + "startLine": 13880, "startColumn": 15, - "endLine": 14969, + "endLine": 13880, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40669,15 +40773,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource152", + "logicalId": "Resource141", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15004, + "startLine": 13915, "startColumn": 15, - "endLine": 15004, + "endLine": 13915, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40688,15 +40792,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource152", + "logicalId": "Resource141", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15010, + "startLine": 13921, "startColumn": 15, - "endLine": 15010, + "endLine": 13921, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40707,15 +40811,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource153", + "logicalId": "Resource142", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 15068, + "startLine": 13979, "startColumn": 15, - "endLine": 15068, + "endLine": 13979, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40726,15 +40830,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource153", + "logicalId": "Resource142", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15103, + "startLine": 14014, "startColumn": 15, - "endLine": 15103, + "endLine": 14014, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40745,15 +40849,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource153", + "logicalId": "Resource142", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15109, + "startLine": 14020, "startColumn": 15, - "endLine": 15109, + "endLine": 14020, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40764,15 +40868,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource154", + "logicalId": "Resource143", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 15167, + "startLine": 14078, "startColumn": 15, - "endLine": 15167, + "endLine": 14078, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40783,15 +40887,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource154", + "logicalId": "Resource143", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15202, + "startLine": 14113, "startColumn": 15, - "endLine": 15202, + "endLine": 14113, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40802,15 +40906,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource154", + "logicalId": "Resource143", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15208, + "startLine": 14119, "startColumn": 15, - "endLine": 15208, + "endLine": 14119, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40821,15 +40925,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource155", + "logicalId": "Resource144", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 15266, + "startLine": 14177, "startColumn": 15, - "endLine": 15266, + "endLine": 14177, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40840,15 +40944,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource155", + "logicalId": "Resource144", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15301, + "startLine": 14212, "startColumn": 15, - "endLine": 15301, + "endLine": 14212, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40859,15 +40963,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource155", + "logicalId": "Resource144", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15307, + "startLine": 14218, "startColumn": 15, - "endLine": 15307, + "endLine": 14218, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40878,15 +40982,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource156", + "logicalId": "Resource145", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 15365, + "startLine": 14276, "startColumn": 15, - "endLine": 15365, + "endLine": 14276, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40897,15 +41001,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource156", + "logicalId": "Resource145", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15400, + "startLine": 14311, "startColumn": 15, - "endLine": 15400, + "endLine": 14311, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40916,15 +41020,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource156", + "logicalId": "Resource145", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15406, + "startLine": 14317, "startColumn": 15, - "endLine": 15406, + "endLine": 14317, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40935,15 +41039,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource157", + "logicalId": "Resource146", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 15464, + "startLine": 14375, "startColumn": 15, - "endLine": 15464, + "endLine": 14375, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40954,15 +41058,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource157", + "logicalId": "Resource146", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15499, + "startLine": 14410, "startColumn": 15, - "endLine": 15499, + "endLine": 14410, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40973,15 +41077,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource157", + "logicalId": "Resource146", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15505, + "startLine": 14416, "startColumn": 15, - "endLine": 15505, + "endLine": 14416, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40992,15 +41096,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource158", + "logicalId": "Resource147", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 15563, + "startLine": 14474, "startColumn": 15, - "endLine": 15563, + "endLine": 14474, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41011,15 +41115,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource158", + "logicalId": "Resource147", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15598, + "startLine": 14509, "startColumn": 15, - "endLine": 15598, + "endLine": 14509, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41030,15 +41134,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource158", + "logicalId": "Resource147", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15604, + "startLine": 14515, "startColumn": 15, - "endLine": 15604, + "endLine": 14515, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41049,15 +41153,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource159", + "logicalId": "Resource148", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 15662, + "startLine": 14573, "startColumn": 15, - "endLine": 15662, + "endLine": 14573, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41068,15 +41172,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource159", + "logicalId": "Resource148", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15697, + "startLine": 14608, "startColumn": 15, - "endLine": 15697, + "endLine": 14608, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41087,15 +41191,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource159", + "logicalId": "Resource148", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15703, + "startLine": 14614, "startColumn": 15, - "endLine": 15703, + "endLine": 14614, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41106,15 +41210,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource160", + "logicalId": "Resource149", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 15761, + "startLine": 14672, "startColumn": 15, - "endLine": 15761, + "endLine": 14672, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41125,15 +41229,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource160", + "logicalId": "Resource149", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15796, + "startLine": 14707, "startColumn": 15, - "endLine": 15796, + "endLine": 14707, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41144,15 +41248,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource160", + "logicalId": "Resource149", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15802, + "startLine": 14713, "startColumn": 15, - "endLine": 15802, + "endLine": 14713, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41163,15 +41267,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource161", + "logicalId": "Resource150", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 15860, + "startLine": 14771, "startColumn": 15, - "endLine": 15860, + "endLine": 14771, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41182,15 +41286,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource161", + "logicalId": "Resource150", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15895, + "startLine": 14806, "startColumn": 15, - "endLine": 15895, + "endLine": 14806, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41201,15 +41305,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource161", + "logicalId": "Resource150", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15901, + "startLine": 14812, "startColumn": 15, - "endLine": 15901, + "endLine": 14812, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41220,15 +41324,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource162", + "logicalId": "Resource151", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 15959, + "startLine": 14870, "startColumn": 15, - "endLine": 15959, + "endLine": 14870, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41239,15 +41343,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource162", + "logicalId": "Resource151", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15994, + "startLine": 14905, "startColumn": 15, - "endLine": 15994, + "endLine": 14905, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41258,15 +41362,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource162", + "logicalId": "Resource151", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16000, + "startLine": 14911, "startColumn": 15, - "endLine": 16000, + "endLine": 14911, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41277,15 +41381,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource163", + "logicalId": "Resource152", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 16058, + "startLine": 14969, "startColumn": 15, - "endLine": 16058, + "endLine": 14969, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41296,15 +41400,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource163", + "logicalId": "Resource152", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16093, + "startLine": 15004, "startColumn": 15, - "endLine": 16093, + "endLine": 15004, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41315,15 +41419,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource163", + "logicalId": "Resource152", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16099, + "startLine": 15010, "startColumn": 15, - "endLine": 16099, + "endLine": 15010, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41334,15 +41438,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource164", + "logicalId": "Resource153", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 16157, + "startLine": 15068, "startColumn": 15, - "endLine": 16157, + "endLine": 15068, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41353,15 +41457,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource164", + "logicalId": "Resource153", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16192, + "startLine": 15103, "startColumn": 15, - "endLine": 16192, + "endLine": 15103, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41372,15 +41476,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource164", + "logicalId": "Resource153", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16198, + "startLine": 15109, "startColumn": 15, - "endLine": 16198, + "endLine": 15109, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41391,15 +41495,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource165", + "logicalId": "Resource154", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 16256, + "startLine": 15167, "startColumn": 15, - "endLine": 16256, + "endLine": 15167, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41410,15 +41514,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource165", + "logicalId": "Resource154", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16291, + "startLine": 15202, "startColumn": 15, - "endLine": 16291, + "endLine": 15202, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41429,15 +41533,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource165", + "logicalId": "Resource154", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16297, + "startLine": 15208, "startColumn": 15, - "endLine": 16297, + "endLine": 15208, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41448,15 +41552,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource166", + "logicalId": "Resource155", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 16355, + "startLine": 15266, "startColumn": 15, - "endLine": 16355, + "endLine": 15266, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41467,15 +41571,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource166", + "logicalId": "Resource155", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16390, + "startLine": 15301, "startColumn": 15, - "endLine": 16390, + "endLine": 15301, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41486,15 +41590,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource166", + "logicalId": "Resource155", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16396, + "startLine": 15307, "startColumn": 15, - "endLine": 16396, + "endLine": 15307, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41505,15 +41609,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource167", + "logicalId": "Resource156", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 16454, + "startLine": 15365, "startColumn": 15, - "endLine": 16454, + "endLine": 15365, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41524,15 +41628,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource167", + "logicalId": "Resource156", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16489, + "startLine": 15400, "startColumn": 15, - "endLine": 16489, + "endLine": 15400, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41543,15 +41647,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource167", + "logicalId": "Resource156", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16495, + "startLine": 15406, "startColumn": 15, - "endLine": 16495, + "endLine": 15406, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41562,15 +41666,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource168", + "logicalId": "Resource157", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 16553, + "startLine": 15464, "startColumn": 15, - "endLine": 16553, + "endLine": 15464, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41581,15 +41685,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource168", + "logicalId": "Resource157", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16588, + "startLine": 15499, "startColumn": 15, - "endLine": 16588, + "endLine": 15499, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41600,15 +41704,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource168", + "logicalId": "Resource157", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16594, + "startLine": 15505, "startColumn": 15, - "endLine": 16594, + "endLine": 15505, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41619,15 +41723,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource169", + "logicalId": "Resource158", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 16652, + "startLine": 15563, "startColumn": 15, - "endLine": 16652, + "endLine": 15563, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41638,15 +41742,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource169", + "logicalId": "Resource158", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16687, + "startLine": 15598, "startColumn": 15, - "endLine": 16687, + "endLine": 15598, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41657,15 +41761,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource169", + "logicalId": "Resource158", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16693, + "startLine": 15604, "startColumn": 15, - "endLine": 16693, + "endLine": 15604, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41676,15 +41780,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource170", + "logicalId": "Resource159", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 16751, + "startLine": 15662, "startColumn": 15, - "endLine": 16751, + "endLine": 15662, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41695,15 +41799,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource170", + "logicalId": "Resource159", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16786, + "startLine": 15697, "startColumn": 15, - "endLine": 16786, + "endLine": 15697, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41714,15 +41818,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource170", + "logicalId": "Resource159", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16792, + "startLine": 15703, "startColumn": 15, - "endLine": 16792, + "endLine": 15703, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41733,15 +41837,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource171", + "logicalId": "Resource160", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 16850, + "startLine": 15761, "startColumn": 15, - "endLine": 16850, + "endLine": 15761, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41752,15 +41856,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource171", + "logicalId": "Resource160", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16885, + "startLine": 15796, "startColumn": 15, - "endLine": 16885, + "endLine": 15796, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41771,15 +41875,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource171", + "logicalId": "Resource160", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16891, + "startLine": 15802, "startColumn": 15, - "endLine": 16891, + "endLine": 15802, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41790,15 +41894,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource172", + "logicalId": "Resource161", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 16949, + "startLine": 15860, "startColumn": 15, - "endLine": 16949, + "endLine": 15860, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41809,15 +41913,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource172", + "logicalId": "Resource161", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16984, + "startLine": 15895, "startColumn": 15, - "endLine": 16984, + "endLine": 15895, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41828,15 +41932,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource172", + "logicalId": "Resource161", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16990, + "startLine": 15901, "startColumn": 15, - "endLine": 16990, + "endLine": 15901, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41847,15 +41951,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource173", + "logicalId": "Resource162", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 17048, + "startLine": 15959, "startColumn": 15, - "endLine": 17048, + "endLine": 15959, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41866,15 +41970,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource173", + "logicalId": "Resource162", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17083, + "startLine": 15994, "startColumn": 15, - "endLine": 17083, + "endLine": 15994, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41885,15 +41989,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource173", + "logicalId": "Resource162", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17089, + "startLine": 16000, "startColumn": 15, - "endLine": 17089, + "endLine": 16000, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41904,15 +42008,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource174", + "logicalId": "Resource163", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 17147, + "startLine": 16058, "startColumn": 15, - "endLine": 17147, + "endLine": 16058, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41923,15 +42027,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource174", + "logicalId": "Resource163", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17182, + "startLine": 16093, "startColumn": 15, - "endLine": 17182, + "endLine": 16093, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41942,15 +42046,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource174", + "logicalId": "Resource163", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17188, + "startLine": 16099, "startColumn": 15, - "endLine": 17188, + "endLine": 16099, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41961,15 +42065,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource175", + "logicalId": "Resource164", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 17246, + "startLine": 16157, "startColumn": 15, - "endLine": 17246, + "endLine": 16157, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41980,15 +42084,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource175", + "logicalId": "Resource164", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17281, + "startLine": 16192, "startColumn": 15, - "endLine": 17281, + "endLine": 16192, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41999,15 +42103,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource175", + "logicalId": "Resource164", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17287, + "startLine": 16198, "startColumn": 15, - "endLine": 17287, + "endLine": 16198, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42018,15 +42122,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource176", + "logicalId": "Resource165", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 17345, + "startLine": 16256, "startColumn": 15, - "endLine": 17345, + "endLine": 16256, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42037,15 +42141,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource176", + "logicalId": "Resource165", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17380, + "startLine": 16291, "startColumn": 15, - "endLine": 17380, + "endLine": 16291, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42056,15 +42160,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource176", + "logicalId": "Resource165", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17386, + "startLine": 16297, "startColumn": 15, - "endLine": 17386, + "endLine": 16297, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42075,15 +42179,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource177", + "logicalId": "Resource166", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 17444, + "startLine": 16355, "startColumn": 15, - "endLine": 17444, + "endLine": 16355, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42094,15 +42198,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource177", + "logicalId": "Resource166", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17479, + "startLine": 16390, "startColumn": 15, - "endLine": 17479, + "endLine": 16390, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42113,15 +42217,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource177", + "logicalId": "Resource166", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17485, + "startLine": 16396, "startColumn": 15, - "endLine": 17485, + "endLine": 16396, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42132,15 +42236,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource178", + "logicalId": "Resource167", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 17543, + "startLine": 16454, "startColumn": 15, - "endLine": 17543, + "endLine": 16454, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42151,15 +42255,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource178", + "logicalId": "Resource167", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17578, + "startLine": 16489, "startColumn": 15, - "endLine": 17578, + "endLine": 16489, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42170,15 +42274,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource178", + "logicalId": "Resource167", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17584, + "startLine": 16495, "startColumn": 15, - "endLine": 17584, + "endLine": 16495, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42189,15 +42293,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource179", + "logicalId": "Resource168", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 17642, + "startLine": 16553, "startColumn": 15, - "endLine": 17642, + "endLine": 16553, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42208,15 +42312,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource179", + "logicalId": "Resource168", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17677, + "startLine": 16588, "startColumn": 15, - "endLine": 17677, + "endLine": 16588, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42227,15 +42331,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource179", + "logicalId": "Resource168", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17683, + "startLine": 16594, "startColumn": 15, - "endLine": 17683, + "endLine": 16594, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42246,15 +42350,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource180", + "logicalId": "Resource169", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 17741, + "startLine": 16652, "startColumn": 15, - "endLine": 17741, + "endLine": 16652, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42265,15 +42369,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource180", + "logicalId": "Resource169", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17776, + "startLine": 16687, "startColumn": 15, - "endLine": 17776, + "endLine": 16687, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42284,15 +42388,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource180", + "logicalId": "Resource169", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17782, + "startLine": 16693, "startColumn": 15, - "endLine": 17782, + "endLine": 16693, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42303,15 +42407,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource181", + "logicalId": "Resource170", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 17840, + "startLine": 16751, "startColumn": 15, - "endLine": 17840, + "endLine": 16751, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42322,15 +42426,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource181", + "logicalId": "Resource170", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17875, + "startLine": 16786, "startColumn": 15, - "endLine": 17875, + "endLine": 16786, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42341,15 +42445,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource181", + "logicalId": "Resource170", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17881, + "startLine": 16792, "startColumn": 15, - "endLine": 17881, + "endLine": 16792, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42360,15 +42464,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource182", + "logicalId": "Resource171", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 17939, + "startLine": 16850, "startColumn": 15, - "endLine": 17939, + "endLine": 16850, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42379,15 +42483,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource182", + "logicalId": "Resource171", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17974, + "startLine": 16885, "startColumn": 15, - "endLine": 17974, + "endLine": 16885, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42398,15 +42502,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource182", + "logicalId": "Resource171", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17980, + "startLine": 16891, "startColumn": 15, - "endLine": 17980, + "endLine": 16891, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42417,15 +42521,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource183", + "logicalId": "Resource172", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 18038, + "startLine": 16949, "startColumn": 15, - "endLine": 18038, + "endLine": 16949, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42436,15 +42540,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource183", + "logicalId": "Resource172", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18073, + "startLine": 16984, "startColumn": 15, - "endLine": 18073, + "endLine": 16984, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42455,15 +42559,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource183", + "logicalId": "Resource172", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18079, + "startLine": 16990, "startColumn": 15, - "endLine": 18079, + "endLine": 16990, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42474,15 +42578,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource184", + "logicalId": "Resource173", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 18137, + "startLine": 17048, "startColumn": 15, - "endLine": 18137, + "endLine": 17048, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42493,15 +42597,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource184", + "logicalId": "Resource173", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18172, + "startLine": 17083, "startColumn": 15, - "endLine": 18172, + "endLine": 17083, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42512,15 +42616,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource184", + "logicalId": "Resource173", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18178, + "startLine": 17089, "startColumn": 15, - "endLine": 18178, + "endLine": 17089, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42531,15 +42635,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource185", + "logicalId": "Resource174", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 18236, + "startLine": 17147, "startColumn": 15, - "endLine": 18236, + "endLine": 17147, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42550,15 +42654,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource185", + "logicalId": "Resource174", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18271, + "startLine": 17182, "startColumn": 15, - "endLine": 18271, + "endLine": 17182, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42569,15 +42673,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource185", + "logicalId": "Resource174", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18277, + "startLine": 17188, "startColumn": 15, - "endLine": 18277, + "endLine": 17188, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42588,15 +42692,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource186", + "logicalId": "Resource175", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 18335, + "startLine": 17246, "startColumn": 15, - "endLine": 18335, + "endLine": 17246, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42607,15 +42711,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource186", + "logicalId": "Resource175", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18370, + "startLine": 17281, "startColumn": 15, - "endLine": 18370, + "endLine": 17281, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42626,15 +42730,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource186", + "logicalId": "Resource175", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18376, + "startLine": 17287, "startColumn": 15, - "endLine": 18376, + "endLine": 17287, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42645,15 +42749,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource187", + "logicalId": "Resource176", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 18434, + "startLine": 17345, "startColumn": 15, - "endLine": 18434, + "endLine": 17345, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42664,15 +42768,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource187", + "logicalId": "Resource176", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18469, + "startLine": 17380, "startColumn": 15, - "endLine": 18469, + "endLine": 17380, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42683,15 +42787,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource187", + "logicalId": "Resource176", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18475, + "startLine": 17386, "startColumn": 15, - "endLine": 18475, + "endLine": 17386, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42702,15 +42806,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource188", + "logicalId": "Resource177", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 18533, + "startLine": 17444, "startColumn": 15, - "endLine": 18533, + "endLine": 17444, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42721,15 +42825,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource188", + "logicalId": "Resource177", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18568, + "startLine": 17479, "startColumn": 15, - "endLine": 18568, + "endLine": 17479, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42740,15 +42844,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource188", + "logicalId": "Resource177", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18574, + "startLine": 17485, "startColumn": 15, - "endLine": 18574, + "endLine": 17485, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42759,15 +42863,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource189", + "logicalId": "Resource178", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 18632, + "startLine": 17543, "startColumn": 15, - "endLine": 18632, + "endLine": 17543, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42778,15 +42882,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource189", + "logicalId": "Resource178", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18667, + "startLine": 17578, "startColumn": 15, - "endLine": 18667, + "endLine": 17578, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42797,15 +42901,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource189", + "logicalId": "Resource178", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18673, + "startLine": 17584, "startColumn": 15, - "endLine": 18673, + "endLine": 17584, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42816,15 +42920,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource190", + "logicalId": "Resource179", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 18731, + "startLine": 17642, "startColumn": 15, - "endLine": 18731, + "endLine": 17642, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42835,15 +42939,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource190", + "logicalId": "Resource179", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18766, + "startLine": 17677, "startColumn": 15, - "endLine": 18766, + "endLine": 17677, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42854,15 +42958,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource190", + "logicalId": "Resource179", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18772, + "startLine": 17683, "startColumn": 15, - "endLine": 18772, + "endLine": 17683, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42873,15 +42977,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource191", + "logicalId": "Resource180", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 18830, + "startLine": 17741, "startColumn": 15, - "endLine": 18830, + "endLine": 17741, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42892,15 +42996,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource191", + "logicalId": "Resource180", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18865, + "startLine": 17776, "startColumn": 15, - "endLine": 18865, + "endLine": 17776, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42911,15 +43015,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource191", + "logicalId": "Resource180", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18871, + "startLine": 17782, "startColumn": 15, - "endLine": 18871, + "endLine": 17782, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42930,15 +43034,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource192", + "logicalId": "Resource181", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 18929, + "startLine": 17840, "startColumn": 15, - "endLine": 18929, + "endLine": 17840, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42949,15 +43053,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource192", + "logicalId": "Resource181", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18964, + "startLine": 17875, "startColumn": 15, - "endLine": 18964, + "endLine": 17875, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42968,15 +43072,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource192", + "logicalId": "Resource181", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18970, + "startLine": 17881, "startColumn": 15, - "endLine": 18970, + "endLine": 17881, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42987,15 +43091,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource193", + "logicalId": "Resource182", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 19028, + "startLine": 17939, "startColumn": 15, - "endLine": 19028, + "endLine": 17939, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43006,15 +43110,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource193", + "logicalId": "Resource182", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19063, + "startLine": 17974, "startColumn": 15, - "endLine": 19063, + "endLine": 17974, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43025,15 +43129,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource193", + "logicalId": "Resource182", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19069, + "startLine": 17980, "startColumn": 15, - "endLine": 19069, + "endLine": 17980, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43044,15 +43148,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource194", + "logicalId": "Resource183", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 19127, + "startLine": 18038, "startColumn": 15, - "endLine": 19127, + "endLine": 18038, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43063,15 +43167,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource194", + "logicalId": "Resource183", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19162, + "startLine": 18073, "startColumn": 15, - "endLine": 19162, + "endLine": 18073, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43082,15 +43186,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource194", + "logicalId": "Resource183", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19168, + "startLine": 18079, "startColumn": 15, - "endLine": 19168, + "endLine": 18079, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43101,15 +43205,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource195", + "logicalId": "Resource184", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 19226, + "startLine": 18137, "startColumn": 15, - "endLine": 19226, + "endLine": 18137, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43120,15 +43224,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource195", + "logicalId": "Resource184", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19261, + "startLine": 18172, "startColumn": 15, - "endLine": 19261, + "endLine": 18172, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43139,15 +43243,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource195", + "logicalId": "Resource184", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19267, + "startLine": 18178, "startColumn": 15, - "endLine": 19267, + "endLine": 18178, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43158,15 +43262,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource196", + "logicalId": "Resource185", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 19325, + "startLine": 18236, "startColumn": 15, - "endLine": 19325, + "endLine": 18236, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43177,15 +43281,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource196", + "logicalId": "Resource185", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19360, + "startLine": 18271, "startColumn": 15, - "endLine": 19360, + "endLine": 18271, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43196,15 +43300,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource196", + "logicalId": "Resource185", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19366, + "startLine": 18277, "startColumn": 15, - "endLine": 19366, + "endLine": 18277, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43215,15 +43319,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource197", + "logicalId": "Resource186", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 19424, + "startLine": 18335, "startColumn": 15, - "endLine": 19424, + "endLine": 18335, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43234,15 +43338,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource197", + "logicalId": "Resource186", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19459, + "startLine": 18370, "startColumn": 15, - "endLine": 19459, + "endLine": 18370, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43253,15 +43357,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource197", + "logicalId": "Resource186", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19465, + "startLine": 18376, "startColumn": 15, - "endLine": 19465, + "endLine": 18376, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43272,15 +43376,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource198", + "logicalId": "Resource187", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 19523, + "startLine": 18434, "startColumn": 15, - "endLine": 19523, + "endLine": 18434, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43291,15 +43395,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource198", + "logicalId": "Resource187", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19558, + "startLine": 18469, "startColumn": 15, - "endLine": 19558, + "endLine": 18469, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43310,15 +43414,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource198", + "logicalId": "Resource187", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19564, + "startLine": 18475, "startColumn": 15, - "endLine": 19564, + "endLine": 18475, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43329,15 +43433,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource199", + "logicalId": "Resource188", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 19622, + "startLine": 18533, "startColumn": 15, - "endLine": 19622, + "endLine": 18533, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43348,15 +43452,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource199", + "logicalId": "Resource188", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19657, + "startLine": 18568, "startColumn": 15, - "endLine": 19657, + "endLine": 18568, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43367,15 +43471,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource199", + "logicalId": "Resource188", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19663, + "startLine": 18574, "startColumn": 15, - "endLine": 19663, + "endLine": 18574, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43386,15 +43490,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource200", + "logicalId": "Resource189", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 19721, + "startLine": 18632, "startColumn": 15, - "endLine": 19721, + "endLine": 18632, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43405,15 +43509,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource200", + "logicalId": "Resource189", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19756, + "startLine": 18667, "startColumn": 15, - "endLine": 19756, + "endLine": 18667, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43424,15 +43528,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource200", + "logicalId": "Resource189", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19762, + "startLine": 18673, "startColumn": 15, - "endLine": 19762, + "endLine": 18673, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43443,15 +43547,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource201", + "logicalId": "Resource190", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 19820, + "startLine": 18731, "startColumn": 15, - "endLine": 19820, + "endLine": 18731, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43462,15 +43566,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource201", + "logicalId": "Resource190", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19855, + "startLine": 18766, "startColumn": 15, - "endLine": 19855, + "endLine": 18766, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43481,15 +43585,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource201", + "logicalId": "Resource190", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19861, + "startLine": 18772, "startColumn": 15, - "endLine": 19861, + "endLine": 18772, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43500,15 +43604,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource202", + "logicalId": "Resource191", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 19919, + "startLine": 18830, "startColumn": 15, - "endLine": 19919, + "endLine": 18830, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43519,15 +43623,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource202", + "logicalId": "Resource191", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19954, + "startLine": 18865, "startColumn": 15, - "endLine": 19954, + "endLine": 18865, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43538,15 +43642,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource202", + "logicalId": "Resource191", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19960, + "startLine": 18871, "startColumn": 15, - "endLine": 19960, + "endLine": 18871, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43557,15 +43661,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource203", + "logicalId": "Resource192", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 20018, + "startLine": 18929, "startColumn": 15, - "endLine": 20018, + "endLine": 18929, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43576,15 +43680,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource203", + "logicalId": "Resource192", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20053, + "startLine": 18964, "startColumn": 15, - "endLine": 20053, + "endLine": 18964, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43595,15 +43699,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource203", + "logicalId": "Resource192", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20059, + "startLine": 18970, "startColumn": 15, - "endLine": 20059, + "endLine": 18970, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43614,15 +43718,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource204", + "logicalId": "Resource193", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 20117, + "startLine": 19028, "startColumn": 15, - "endLine": 20117, + "endLine": 19028, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43633,15 +43737,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource204", + "logicalId": "Resource193", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20152, + "startLine": 19063, "startColumn": 15, - "endLine": 20152, + "endLine": 19063, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43652,15 +43756,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource204", + "logicalId": "Resource193", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20158, + "startLine": 19069, "startColumn": 15, - "endLine": 20158, + "endLine": 19069, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43671,15 +43775,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource205", + "logicalId": "Resource194", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 20216, + "startLine": 19127, "startColumn": 15, - "endLine": 20216, + "endLine": 19127, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43690,15 +43794,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource205", + "logicalId": "Resource194", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20251, + "startLine": 19162, "startColumn": 15, - "endLine": 20251, + "endLine": 19162, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43709,15 +43813,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource205", + "logicalId": "Resource194", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20257, + "startLine": 19168, "startColumn": 15, - "endLine": 20257, + "endLine": 19168, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43728,15 +43832,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource206", + "logicalId": "Resource195", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 20315, + "startLine": 19226, "startColumn": 15, - "endLine": 20315, + "endLine": 19226, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43747,15 +43851,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource206", + "logicalId": "Resource195", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20350, + "startLine": 19261, "startColumn": 15, - "endLine": 20350, + "endLine": 19261, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43766,15 +43870,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource206", + "logicalId": "Resource195", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20356, + "startLine": 19267, "startColumn": 15, - "endLine": 20356, + "endLine": 19267, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43785,15 +43889,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource207", + "logicalId": "Resource196", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 20414, + "startLine": 19325, "startColumn": 15, - "endLine": 20414, + "endLine": 19325, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43804,15 +43908,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource207", + "logicalId": "Resource196", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20449, + "startLine": 19360, "startColumn": 15, - "endLine": 20449, + "endLine": 19360, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43823,15 +43927,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource207", + "logicalId": "Resource196", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20455, + "startLine": 19366, "startColumn": 15, - "endLine": 20455, + "endLine": 19366, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43842,15 +43946,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource208", + "logicalId": "Resource197", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 20513, + "startLine": 19424, "startColumn": 15, - "endLine": 20513, + "endLine": 19424, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43861,15 +43965,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource208", + "logicalId": "Resource197", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20548, + "startLine": 19459, "startColumn": 15, - "endLine": 20548, + "endLine": 19459, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43880,15 +43984,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource208", + "logicalId": "Resource197", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20554, + "startLine": 19465, "startColumn": 15, - "endLine": 20554, + "endLine": 19465, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43899,15 +44003,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource209", + "logicalId": "Resource198", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 20612, + "startLine": 19523, "startColumn": 15, - "endLine": 20612, + "endLine": 19523, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43918,15 +44022,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource209", + "logicalId": "Resource198", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20647, + "startLine": 19558, "startColumn": 15, - "endLine": 20647, + "endLine": 19558, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43937,15 +44041,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource209", + "logicalId": "Resource198", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20653, + "startLine": 19564, "startColumn": 15, - "endLine": 20653, + "endLine": 19564, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43956,15 +44060,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource210", + "logicalId": "Resource199", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 20711, + "startLine": 19622, "startColumn": 15, - "endLine": 20711, + "endLine": 19622, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43975,15 +44079,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource210", + "logicalId": "Resource199", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20746, + "startLine": 19657, "startColumn": 15, - "endLine": 20746, + "endLine": 19657, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43994,15 +44098,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource210", + "logicalId": "Resource199", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20752, + "startLine": 19663, "startColumn": 15, - "endLine": 20752, + "endLine": 19663, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44013,15 +44117,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource211", + "logicalId": "Resource200", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 20810, + "startLine": 19721, "startColumn": 15, - "endLine": 20810, + "endLine": 19721, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44032,15 +44136,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource211", + "logicalId": "Resource200", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20845, + "startLine": 19756, "startColumn": 15, - "endLine": 20845, + "endLine": 19756, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44051,15 +44155,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource211", + "logicalId": "Resource200", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20851, + "startLine": 19762, "startColumn": 15, - "endLine": 20851, + "endLine": 19762, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44070,15 +44174,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource212", + "logicalId": "Resource201", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 20909, + "startLine": 19820, "startColumn": 15, - "endLine": 20909, + "endLine": 19820, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44089,15 +44193,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource212", + "logicalId": "Resource201", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20944, + "startLine": 19855, "startColumn": 15, - "endLine": 20944, + "endLine": 19855, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44108,15 +44212,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource212", + "logicalId": "Resource201", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20950, + "startLine": 19861, "startColumn": 15, - "endLine": 20950, + "endLine": 19861, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44127,15 +44231,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource213", + "logicalId": "Resource202", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 21008, + "startLine": 19919, "startColumn": 15, - "endLine": 21008, + "endLine": 19919, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44146,15 +44250,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource213", + "logicalId": "Resource202", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21043, + "startLine": 19954, "startColumn": 15, - "endLine": 21043, + "endLine": 19954, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44165,15 +44269,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource213", + "logicalId": "Resource202", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21049, + "startLine": 19960, "startColumn": 15, - "endLine": 21049, + "endLine": 19960, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44184,15 +44288,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource214", + "logicalId": "Resource203", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 21107, + "startLine": 20018, "startColumn": 15, - "endLine": 21107, + "endLine": 20018, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44203,15 +44307,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource214", + "logicalId": "Resource203", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21142, + "startLine": 20053, "startColumn": 15, - "endLine": 21142, + "endLine": 20053, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44222,15 +44326,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource214", + "logicalId": "Resource203", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21148, + "startLine": 20059, "startColumn": 15, - "endLine": 21148, + "endLine": 20059, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44241,15 +44345,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource215", + "logicalId": "Resource204", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 21206, + "startLine": 20117, "startColumn": 15, - "endLine": 21206, + "endLine": 20117, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44260,15 +44364,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource215", + "logicalId": "Resource204", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21241, + "startLine": 20152, "startColumn": 15, - "endLine": 21241, + "endLine": 20152, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44279,15 +44383,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource215", + "logicalId": "Resource204", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21247, + "startLine": 20158, "startColumn": 15, - "endLine": 21247, + "endLine": 20158, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44298,15 +44402,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource216", + "logicalId": "Resource205", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 21305, + "startLine": 20216, "startColumn": 15, - "endLine": 21305, + "endLine": 20216, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44317,15 +44421,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource216", + "logicalId": "Resource205", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21340, + "startLine": 20251, "startColumn": 15, - "endLine": 21340, + "endLine": 20251, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44336,15 +44440,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource216", + "logicalId": "Resource205", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21346, + "startLine": 20257, "startColumn": 15, - "endLine": 21346, + "endLine": 20257, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44355,15 +44459,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource217", + "logicalId": "Resource206", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 21404, + "startLine": 20315, "startColumn": 15, - "endLine": 21404, + "endLine": 20315, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44374,15 +44478,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource217", + "logicalId": "Resource206", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21439, + "startLine": 20350, "startColumn": 15, - "endLine": 21439, + "endLine": 20350, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44393,15 +44497,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource217", + "logicalId": "Resource206", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21445, + "startLine": 20356, "startColumn": 15, - "endLine": 21445, + "endLine": 20356, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44412,15 +44516,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource218", + "logicalId": "Resource207", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 21503, + "startLine": 20414, "startColumn": 15, - "endLine": 21503, + "endLine": 20414, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44431,15 +44535,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource218", + "logicalId": "Resource207", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21538, + "startLine": 20449, "startColumn": 15, - "endLine": 21538, + "endLine": 20449, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44450,15 +44554,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource218", + "logicalId": "Resource207", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21544, + "startLine": 20455, "startColumn": 15, - "endLine": 21544, + "endLine": 20455, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44469,15 +44573,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource219", + "logicalId": "Resource208", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 21602, + "startLine": 20513, "startColumn": 15, - "endLine": 21602, + "endLine": 20513, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44488,15 +44592,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource219", + "logicalId": "Resource208", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21637, + "startLine": 20548, "startColumn": 15, - "endLine": 21637, + "endLine": 20548, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44507,15 +44611,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource219", + "logicalId": "Resource208", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21643, + "startLine": 20554, "startColumn": 15, - "endLine": 21643, + "endLine": 20554, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44526,15 +44630,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource220", + "logicalId": "Resource209", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 21701, + "startLine": 20612, "startColumn": 15, - "endLine": 21701, + "endLine": 20612, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44545,15 +44649,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource220", + "logicalId": "Resource209", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21736, + "startLine": 20647, "startColumn": 15, - "endLine": 21736, + "endLine": 20647, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44564,15 +44668,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource220", + "logicalId": "Resource209", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21742, + "startLine": 20653, "startColumn": 15, - "endLine": 21742, + "endLine": 20653, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44583,15 +44687,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource221", + "logicalId": "Resource210", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 21800, + "startLine": 20711, "startColumn": 15, - "endLine": 21800, + "endLine": 20711, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44602,15 +44706,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource221", + "logicalId": "Resource210", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21835, + "startLine": 20746, "startColumn": 15, - "endLine": 21835, + "endLine": 20746, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44621,15 +44725,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource221", + "logicalId": "Resource210", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21841, + "startLine": 20752, "startColumn": 15, - "endLine": 21841, + "endLine": 20752, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44640,15 +44744,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource222", + "logicalId": "Resource211", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 21899, + "startLine": 20810, "startColumn": 15, - "endLine": 21899, + "endLine": 20810, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44659,15 +44763,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource222", + "logicalId": "Resource211", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21934, + "startLine": 20845, "startColumn": 15, - "endLine": 21934, + "endLine": 20845, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44678,15 +44782,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource222", + "logicalId": "Resource211", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21940, + "startLine": 20851, "startColumn": 15, - "endLine": 21940, + "endLine": 20851, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44697,15 +44801,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource223", + "logicalId": "Resource212", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 21998, + "startLine": 20909, "startColumn": 15, - "endLine": 21998, + "endLine": 20909, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44716,15 +44820,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource223", + "logicalId": "Resource212", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22033, + "startLine": 20944, "startColumn": 15, - "endLine": 22033, + "endLine": 20944, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44735,15 +44839,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource223", + "logicalId": "Resource212", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22039, + "startLine": 20950, "startColumn": 15, - "endLine": 22039, + "endLine": 20950, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44754,15 +44858,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource224", + "logicalId": "Resource213", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 22097, + "startLine": 21008, "startColumn": 15, - "endLine": 22097, + "endLine": 21008, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44773,15 +44877,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource224", + "logicalId": "Resource213", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22132, + "startLine": 21043, "startColumn": 15, - "endLine": 22132, + "endLine": 21043, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44792,15 +44896,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource224", + "logicalId": "Resource213", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22138, + "startLine": 21049, "startColumn": 15, - "endLine": 22138, + "endLine": 21049, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44811,15 +44915,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource225", + "logicalId": "Resource214", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 22196, + "startLine": 21107, "startColumn": 15, - "endLine": 22196, + "endLine": 21107, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44830,15 +44934,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource225", + "logicalId": "Resource214", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22231, + "startLine": 21142, "startColumn": 15, - "endLine": 22231, + "endLine": 21142, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44849,15 +44953,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource225", + "logicalId": "Resource214", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22237, + "startLine": 21148, "startColumn": 15, - "endLine": 22237, + "endLine": 21148, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44868,15 +44972,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource226", + "logicalId": "Resource215", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 22295, + "startLine": 21206, "startColumn": 15, - "endLine": 22295, + "endLine": 21206, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44887,15 +44991,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource226", + "logicalId": "Resource215", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22330, + "startLine": 21241, "startColumn": 15, - "endLine": 22330, + "endLine": 21241, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44906,15 +45010,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource226", + "logicalId": "Resource215", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22336, + "startLine": 21247, "startColumn": 15, - "endLine": 22336, + "endLine": 21247, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44925,15 +45029,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource227", + "logicalId": "Resource216", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 22394, + "startLine": 21305, "startColumn": 15, - "endLine": 22394, + "endLine": 21305, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44944,15 +45048,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource227", + "logicalId": "Resource216", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22429, + "startLine": 21340, "startColumn": 15, - "endLine": 22429, + "endLine": 21340, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44963,15 +45067,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource227", + "logicalId": "Resource216", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22435, + "startLine": 21346, "startColumn": 15, - "endLine": 22435, + "endLine": 21346, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44982,15 +45086,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource228", + "logicalId": "Resource217", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 22493, + "startLine": 21404, "startColumn": 15, - "endLine": 22493, + "endLine": 21404, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45001,15 +45105,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource228", + "logicalId": "Resource217", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22528, + "startLine": 21439, "startColumn": 15, - "endLine": 22528, + "endLine": 21439, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45020,15 +45124,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource228", + "logicalId": "Resource217", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22534, + "startLine": 21445, "startColumn": 15, - "endLine": 22534, + "endLine": 21445, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45039,15 +45143,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource229", + "logicalId": "Resource218", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 22592, + "startLine": 21503, "startColumn": 15, - "endLine": 22592, + "endLine": 21503, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45058,15 +45162,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource229", + "logicalId": "Resource218", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22627, + "startLine": 21538, "startColumn": 15, - "endLine": 22627, + "endLine": 21538, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45077,15 +45181,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource229", + "logicalId": "Resource218", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22633, + "startLine": 21544, "startColumn": 15, - "endLine": 22633, + "endLine": 21544, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45096,15 +45200,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource230", + "logicalId": "Resource219", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 22691, + "startLine": 21602, "startColumn": 15, - "endLine": 22691, + "endLine": 21602, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45115,15 +45219,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource230", + "logicalId": "Resource219", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22726, + "startLine": 21637, "startColumn": 15, - "endLine": 22726, + "endLine": 21637, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45134,15 +45238,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource230", + "logicalId": "Resource219", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22732, + "startLine": 21643, "startColumn": 15, - "endLine": 22732, + "endLine": 21643, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45153,15 +45257,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource231", + "logicalId": "Resource220", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 22790, + "startLine": 21701, "startColumn": 15, - "endLine": 22790, + "endLine": 21701, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45172,15 +45276,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource231", + "logicalId": "Resource220", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22825, + "startLine": 21736, "startColumn": 15, - "endLine": 22825, + "endLine": 21736, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45191,15 +45295,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource231", + "logicalId": "Resource220", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22831, + "startLine": 21742, "startColumn": 15, - "endLine": 22831, + "endLine": 21742, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45210,15 +45314,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource232", + "logicalId": "Resource221", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 22889, + "startLine": 21800, "startColumn": 15, - "endLine": 22889, + "endLine": 21800, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45229,15 +45333,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource232", + "logicalId": "Resource221", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22924, + "startLine": 21835, "startColumn": 15, - "endLine": 22924, + "endLine": 21835, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45248,15 +45352,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource232", + "logicalId": "Resource221", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22930, + "startLine": 21841, "startColumn": 15, - "endLine": 22930, + "endLine": 21841, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45267,15 +45371,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource233", + "logicalId": "Resource222", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 22988, + "startLine": 21899, "startColumn": 15, - "endLine": 22988, + "endLine": 21899, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45286,15 +45390,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource233", + "logicalId": "Resource222", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23023, + "startLine": 21934, "startColumn": 15, - "endLine": 23023, + "endLine": 21934, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45305,15 +45409,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource233", + "logicalId": "Resource222", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23029, + "startLine": 21940, "startColumn": 15, - "endLine": 23029, + "endLine": 21940, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45324,15 +45428,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource234", + "logicalId": "Resource223", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 23087, + "startLine": 21998, "startColumn": 15, - "endLine": 23087, + "endLine": 21998, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45343,15 +45447,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource234", + "logicalId": "Resource223", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23122, + "startLine": 22033, "startColumn": 15, - "endLine": 23122, + "endLine": 22033, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45362,15 +45466,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource234", + "logicalId": "Resource223", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23128, + "startLine": 22039, "startColumn": 15, - "endLine": 23128, + "endLine": 22039, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45381,15 +45485,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource235", + "logicalId": "Resource224", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 23186, + "startLine": 22097, "startColumn": 15, - "endLine": 23186, + "endLine": 22097, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45400,15 +45504,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource235", + "logicalId": "Resource224", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23221, + "startLine": 22132, "startColumn": 15, - "endLine": 23221, + "endLine": 22132, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45419,15 +45523,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource235", + "logicalId": "Resource224", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23227, + "startLine": 22138, "startColumn": 15, - "endLine": 23227, + "endLine": 22138, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45438,15 +45542,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource236", + "logicalId": "Resource225", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 23285, + "startLine": 22196, "startColumn": 15, - "endLine": 23285, + "endLine": 22196, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45457,15 +45561,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource236", + "logicalId": "Resource225", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23320, + "startLine": 22231, "startColumn": 15, - "endLine": 23320, + "endLine": 22231, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45476,15 +45580,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource236", + "logicalId": "Resource225", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23326, + "startLine": 22237, "startColumn": 15, - "endLine": 23326, + "endLine": 22237, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45495,15 +45599,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource237", + "logicalId": "Resource226", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 23384, + "startLine": 22295, "startColumn": 15, - "endLine": 23384, + "endLine": 22295, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45514,15 +45618,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource237", + "logicalId": "Resource226", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23419, + "startLine": 22330, "startColumn": 15, - "endLine": 23419, + "endLine": 22330, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45533,15 +45637,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource237", + "logicalId": "Resource226", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23425, + "startLine": 22336, "startColumn": 15, - "endLine": 23425, + "endLine": 22336, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45552,15 +45656,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource238", + "logicalId": "Resource227", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 23483, + "startLine": 22394, "startColumn": 15, - "endLine": 23483, + "endLine": 22394, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45571,15 +45675,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource238", + "logicalId": "Resource227", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23518, + "startLine": 22429, "startColumn": 15, - "endLine": 23518, + "endLine": 22429, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45590,15 +45694,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource238", + "logicalId": "Resource227", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23524, + "startLine": 22435, "startColumn": 15, - "endLine": 23524, + "endLine": 22435, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45609,15 +45713,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource239", + "logicalId": "Resource228", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 23582, + "startLine": 22493, "startColumn": 15, - "endLine": 23582, + "endLine": 22493, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45628,15 +45732,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource239", + "logicalId": "Resource228", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23617, + "startLine": 22528, "startColumn": 15, - "endLine": 23617, + "endLine": 22528, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45647,15 +45751,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource239", + "logicalId": "Resource228", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23623, + "startLine": 22534, "startColumn": 15, - "endLine": 23623, + "endLine": 22534, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45666,15 +45770,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource240", + "logicalId": "Resource229", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 23681, + "startLine": 22592, "startColumn": 15, - "endLine": 23681, + "endLine": 22592, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45685,15 +45789,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource240", + "logicalId": "Resource229", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23716, + "startLine": 22627, "startColumn": 15, - "endLine": 23716, + "endLine": 22627, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45704,15 +45808,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource240", + "logicalId": "Resource229", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23722, + "startLine": 22633, "startColumn": 15, - "endLine": 23722, + "endLine": 22633, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45723,15 +45827,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource241", + "logicalId": "Resource230", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 23780, + "startLine": 22691, "startColumn": 15, - "endLine": 23780, + "endLine": 22691, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45742,15 +45846,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource241", + "logicalId": "Resource230", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23815, + "startLine": 22726, "startColumn": 15, - "endLine": 23815, + "endLine": 22726, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45761,15 +45865,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource241", + "logicalId": "Resource230", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23821, + "startLine": 22732, "startColumn": 15, - "endLine": 23821, + "endLine": 22732, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45780,15 +45884,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource242", + "logicalId": "Resource231", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 23879, + "startLine": 22790, "startColumn": 15, - "endLine": 23879, + "endLine": 22790, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45799,15 +45903,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource242", + "logicalId": "Resource231", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23914, + "startLine": 22825, "startColumn": 15, - "endLine": 23914, + "endLine": 22825, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45818,15 +45922,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource242", + "logicalId": "Resource231", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23920, + "startLine": 22831, "startColumn": 15, - "endLine": 23920, + "endLine": 22831, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45837,15 +45941,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource243", + "logicalId": "Resource232", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 23978, + "startLine": 22889, "startColumn": 15, - "endLine": 23978, + "endLine": 22889, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45856,15 +45960,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource243", + "logicalId": "Resource232", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24013, + "startLine": 22924, "startColumn": 15, - "endLine": 24013, + "endLine": 22924, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45875,15 +45979,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource243", + "logicalId": "Resource232", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24019, + "startLine": 22930, "startColumn": 15, - "endLine": 24019, + "endLine": 22930, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45894,15 +45998,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource244", + "logicalId": "Resource233", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 24077, + "startLine": 22988, "startColumn": 15, - "endLine": 24077, + "endLine": 22988, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45913,15 +46017,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource244", + "logicalId": "Resource233", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24112, + "startLine": 23023, "startColumn": 15, - "endLine": 24112, + "endLine": 23023, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45932,15 +46036,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource244", + "logicalId": "Resource233", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24118, + "startLine": 23029, "startColumn": 15, - "endLine": 24118, + "endLine": 23029, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45951,15 +46055,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource245", + "logicalId": "Resource234", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 24176, + "startLine": 23087, "startColumn": 15, - "endLine": 24176, + "endLine": 23087, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45970,15 +46074,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource245", + "logicalId": "Resource234", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24211, + "startLine": 23122, "startColumn": 15, - "endLine": 24211, + "endLine": 23122, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45989,15 +46093,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource245", + "logicalId": "Resource234", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24217, + "startLine": 23128, "startColumn": 15, - "endLine": 24217, + "endLine": 23128, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46008,15 +46112,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource246", + "logicalId": "Resource235", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 24275, + "startLine": 23186, "startColumn": 15, - "endLine": 24275, + "endLine": 23186, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46027,15 +46131,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource246", + "logicalId": "Resource235", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24310, + "startLine": 23221, "startColumn": 15, - "endLine": 24310, + "endLine": 23221, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46046,15 +46150,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource246", + "logicalId": "Resource235", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24316, + "startLine": 23227, "startColumn": 15, - "endLine": 24316, + "endLine": 23227, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46065,15 +46169,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource247", + "logicalId": "Resource236", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 24374, + "startLine": 23285, "startColumn": 15, - "endLine": 24374, + "endLine": 23285, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46084,15 +46188,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource247", + "logicalId": "Resource236", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24409, + "startLine": 23320, "startColumn": 15, - "endLine": 24409, + "endLine": 23320, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46103,15 +46207,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource247", + "logicalId": "Resource236", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24415, + "startLine": 23326, "startColumn": 15, - "endLine": 24415, + "endLine": 23326, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46122,15 +46226,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource248", + "logicalId": "Resource237", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 24473, + "startLine": 23384, "startColumn": 15, - "endLine": 24473, + "endLine": 23384, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46141,15 +46245,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource248", + "logicalId": "Resource237", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24508, + "startLine": 23419, "startColumn": 15, - "endLine": 24508, + "endLine": 23419, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46160,15 +46264,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource248", + "logicalId": "Resource237", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24514, + "startLine": 23425, "startColumn": 15, - "endLine": 24514, + "endLine": 23425, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46179,15 +46283,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource249", + "logicalId": "Resource238", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 24572, + "startLine": 23483, "startColumn": 15, - "endLine": 24572, + "endLine": 23483, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46198,15 +46302,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource249", + "logicalId": "Resource238", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24607, + "startLine": 23518, "startColumn": 15, - "endLine": 24607, + "endLine": 23518, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46217,15 +46321,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource249", + "logicalId": "Resource238", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24613, + "startLine": 23524, "startColumn": 15, - "endLine": 24613, + "endLine": 23524, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46236,15 +46340,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource250", + "logicalId": "Resource239", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 24671, + "startLine": 23582, "startColumn": 15, - "endLine": 24671, + "endLine": 23582, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46255,15 +46359,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource250", + "logicalId": "Resource239", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24706, + "startLine": 23617, "startColumn": 15, - "endLine": 24706, + "endLine": 23617, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46274,15 +46378,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource250", + "logicalId": "Resource239", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24712, + "startLine": 23623, "startColumn": 15, - "endLine": 24712, + "endLine": 23623, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46293,15 +46397,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource251", + "logicalId": "Resource240", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 24770, + "startLine": 23681, "startColumn": 15, - "endLine": 24770, + "endLine": 23681, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46312,15 +46416,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource251", + "logicalId": "Resource240", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24805, + "startLine": 23716, "startColumn": 15, - "endLine": 24805, + "endLine": 23716, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46331,15 +46435,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource251", + "logicalId": "Resource240", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24811, + "startLine": 23722, "startColumn": 15, - "endLine": 24811, + "endLine": 23722, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46350,15 +46454,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource252", + "logicalId": "Resource241", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 24869, + "startLine": 23780, "startColumn": 15, - "endLine": 24869, + "endLine": 23780, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46369,15 +46473,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource252", + "logicalId": "Resource241", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24904, + "startLine": 23815, "startColumn": 15, - "endLine": 24904, + "endLine": 23815, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46388,15 +46492,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource252", + "logicalId": "Resource241", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24910, + "startLine": 23821, "startColumn": 15, - "endLine": 24910, + "endLine": 23821, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46407,15 +46511,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource253", + "logicalId": "Resource242", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 24968, + "startLine": 23879, "startColumn": 15, - "endLine": 24968, + "endLine": 23879, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46426,15 +46530,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource253", + "logicalId": "Resource242", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25003, + "startLine": 23914, "startColumn": 15, - "endLine": 25003, + "endLine": 23914, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46445,15 +46549,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource253", + "logicalId": "Resource242", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25009, + "startLine": 23920, "startColumn": 15, - "endLine": 25009, + "endLine": 23920, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46464,15 +46568,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource254", + "logicalId": "Resource243", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 25067, + "startLine": 23978, "startColumn": 15, - "endLine": 25067, + "endLine": 23978, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46483,15 +46587,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource254", + "logicalId": "Resource243", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25102, + "startLine": 24013, "startColumn": 15, - "endLine": 25102, + "endLine": 24013, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46502,15 +46606,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource254", + "logicalId": "Resource243", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25108, + "startLine": 24019, "startColumn": 15, - "endLine": 25108, + "endLine": 24019, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46521,15 +46625,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource255", + "logicalId": "Resource244", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 25166, + "startLine": 24077, "startColumn": 15, - "endLine": 25166, + "endLine": 24077, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46540,15 +46644,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource255", + "logicalId": "Resource244", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25201, + "startLine": 24112, "startColumn": 15, - "endLine": 25201, + "endLine": 24112, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46559,15 +46663,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource255", + "logicalId": "Resource244", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25207, + "startLine": 24118, "startColumn": 15, - "endLine": 25207, + "endLine": 24118, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46578,15 +46682,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource256", + "logicalId": "Resource245", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 25265, + "startLine": 24176, "startColumn": 15, - "endLine": 25265, + "endLine": 24176, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46597,15 +46701,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource256", + "logicalId": "Resource245", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25300, + "startLine": 24211, "startColumn": 15, - "endLine": 25300, + "endLine": 24211, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46616,15 +46720,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource256", + "logicalId": "Resource245", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25306, + "startLine": 24217, "startColumn": 15, - "endLine": 25306, + "endLine": 24217, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46635,15 +46739,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource257", + "logicalId": "Resource246", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 25364, + "startLine": 24275, "startColumn": 15, - "endLine": 25364, + "endLine": 24275, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46654,15 +46758,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource257", + "logicalId": "Resource246", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25399, + "startLine": 24310, "startColumn": 15, - "endLine": 25399, + "endLine": 24310, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46673,15 +46777,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource257", + "logicalId": "Resource246", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25405, + "startLine": 24316, "startColumn": 15, - "endLine": 25405, + "endLine": 24316, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46692,15 +46796,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource258", + "logicalId": "Resource247", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 25463, + "startLine": 24374, "startColumn": 15, - "endLine": 25463, + "endLine": 24374, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46711,15 +46815,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource258", + "logicalId": "Resource247", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25498, + "startLine": 24409, "startColumn": 15, - "endLine": 25498, + "endLine": 24409, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46730,15 +46834,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource258", + "logicalId": "Resource247", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25504, + "startLine": 24415, "startColumn": 15, - "endLine": 25504, + "endLine": 24415, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46749,15 +46853,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource259", + "logicalId": "Resource248", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 25562, + "startLine": 24473, "startColumn": 15, - "endLine": 25562, + "endLine": 24473, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46768,15 +46872,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource259", + "logicalId": "Resource248", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25597, + "startLine": 24508, "startColumn": 15, - "endLine": 25597, + "endLine": 24508, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46787,15 +46891,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource259", + "logicalId": "Resource248", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25603, + "startLine": 24514, "startColumn": 15, - "endLine": 25603, + "endLine": 24514, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46806,15 +46910,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource260", + "logicalId": "Resource249", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 25661, + "startLine": 24572, "startColumn": 15, - "endLine": 25661, + "endLine": 24572, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46825,15 +46929,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource260", + "logicalId": "Resource249", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25696, + "startLine": 24607, "startColumn": 15, - "endLine": 25696, + "endLine": 24607, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46844,15 +46948,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource260", + "logicalId": "Resource249", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25702, + "startLine": 24613, "startColumn": 15, - "endLine": 25702, + "endLine": 24613, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46863,15 +46967,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource261", + "logicalId": "Resource250", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 25760, + "startLine": 24671, "startColumn": 15, - "endLine": 25760, + "endLine": 24671, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46882,15 +46986,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource261", + "logicalId": "Resource250", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25795, + "startLine": 24706, "startColumn": 15, - "endLine": 25795, + "endLine": 24706, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46901,15 +47005,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource261", + "logicalId": "Resource250", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25801, + "startLine": 24712, "startColumn": 15, - "endLine": 25801, + "endLine": 24712, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46920,15 +47024,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource262", + "logicalId": "Resource251", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 25859, + "startLine": 24770, "startColumn": 15, - "endLine": 25859, + "endLine": 24770, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46939,15 +47043,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource262", + "logicalId": "Resource251", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25894, + "startLine": 24805, "startColumn": 15, - "endLine": 25894, + "endLine": 24805, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46958,15 +47062,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource262", + "logicalId": "Resource251", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25900, + "startLine": 24811, "startColumn": 15, - "endLine": 25900, + "endLine": 24811, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46977,15 +47081,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource263", + "logicalId": "Resource252", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 25958, + "startLine": 24869, "startColumn": 15, - "endLine": 25958, + "endLine": 24869, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46996,15 +47100,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource263", + "logicalId": "Resource252", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25993, + "startLine": 24904, "startColumn": 15, - "endLine": 25993, + "endLine": 24904, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47015,15 +47119,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource263", + "logicalId": "Resource252", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25999, + "startLine": 24910, "startColumn": 15, - "endLine": 25999, + "endLine": 24910, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47034,15 +47138,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource264", + "logicalId": "Resource253", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 26057, + "startLine": 24968, "startColumn": 15, - "endLine": 26057, + "endLine": 24968, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47053,15 +47157,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource264", + "logicalId": "Resource253", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26092, + "startLine": 25003, "startColumn": 15, - "endLine": 26092, + "endLine": 25003, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47072,15 +47176,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource264", + "logicalId": "Resource253", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26098, + "startLine": 25009, "startColumn": 15, - "endLine": 26098, + "endLine": 25009, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47091,15 +47195,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource265", + "logicalId": "Resource254", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 26156, + "startLine": 25067, "startColumn": 15, - "endLine": 26156, + "endLine": 25067, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47110,15 +47214,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource265", + "logicalId": "Resource254", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26191, + "startLine": 25102, "startColumn": 15, - "endLine": 26191, + "endLine": 25102, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47129,15 +47233,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource265", + "logicalId": "Resource254", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26197, + "startLine": 25108, "startColumn": 15, - "endLine": 26197, + "endLine": 25108, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47148,15 +47252,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource266", + "logicalId": "Resource255", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 26255, + "startLine": 25166, "startColumn": 15, - "endLine": 26255, + "endLine": 25166, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47167,15 +47271,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource266", + "logicalId": "Resource255", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26290, + "startLine": 25201, "startColumn": 15, - "endLine": 26290, + "endLine": 25201, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47186,15 +47290,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource266", + "logicalId": "Resource255", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26296, + "startLine": 25207, "startColumn": 15, - "endLine": 26296, + "endLine": 25207, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47205,15 +47309,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource267", + "logicalId": "Resource256", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 26354, + "startLine": 25265, "startColumn": 15, - "endLine": 26354, + "endLine": 25265, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47224,15 +47328,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource267", + "logicalId": "Resource256", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26389, + "startLine": 25300, "startColumn": 15, - "endLine": 26389, + "endLine": 25300, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47243,15 +47347,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource267", + "logicalId": "Resource256", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26395, + "startLine": 25306, "startColumn": 15, - "endLine": 26395, + "endLine": 25306, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47262,15 +47366,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource268", + "logicalId": "Resource257", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 26453, + "startLine": 25364, "startColumn": 15, - "endLine": 26453, + "endLine": 25364, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47281,15 +47385,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource268", + "logicalId": "Resource257", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26488, + "startLine": 25399, "startColumn": 15, - "endLine": 26488, + "endLine": 25399, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47300,15 +47404,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource268", + "logicalId": "Resource257", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26494, + "startLine": 25405, "startColumn": 15, - "endLine": 26494, + "endLine": 25405, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47319,15 +47423,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource269", + "logicalId": "Resource258", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 26552, + "startLine": 25463, "startColumn": 15, - "endLine": 26552, + "endLine": 25463, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47338,15 +47442,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource269", + "logicalId": "Resource258", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26587, + "startLine": 25498, "startColumn": 15, - "endLine": 26587, + "endLine": 25498, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47357,15 +47461,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource269", + "logicalId": "Resource258", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26593, + "startLine": 25504, "startColumn": 15, - "endLine": 26593, + "endLine": 25504, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47376,15 +47480,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource270", + "logicalId": "Resource259", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 26651, + "startLine": 25562, "startColumn": 15, - "endLine": 26651, + "endLine": 25562, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47395,15 +47499,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource270", + "logicalId": "Resource259", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26686, + "startLine": 25597, "startColumn": 15, - "endLine": 26686, + "endLine": 25597, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47414,15 +47518,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource270", + "logicalId": "Resource259", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26692, + "startLine": 25603, "startColumn": 15, - "endLine": 26692, + "endLine": 25603, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47433,15 +47537,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource271", + "logicalId": "Resource260", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 26750, + "startLine": 25661, "startColumn": 15, - "endLine": 26750, + "endLine": 25661, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47452,15 +47556,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource271", + "logicalId": "Resource260", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26785, + "startLine": 25696, "startColumn": 15, - "endLine": 26785, + "endLine": 25696, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47471,15 +47575,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource271", + "logicalId": "Resource260", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26791, + "startLine": 25702, "startColumn": 15, - "endLine": 26791, + "endLine": 25702, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47490,15 +47594,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource272", + "logicalId": "Resource261", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 26849, + "startLine": 25760, "startColumn": 15, - "endLine": 26849, + "endLine": 25760, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47509,15 +47613,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource272", + "logicalId": "Resource261", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26884, + "startLine": 25795, "startColumn": 15, - "endLine": 26884, + "endLine": 25795, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47528,15 +47632,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource272", + "logicalId": "Resource261", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26890, + "startLine": 25801, "startColumn": 15, - "endLine": 26890, + "endLine": 25801, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47547,15 +47651,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource273", + "logicalId": "Resource262", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 26948, + "startLine": 25859, "startColumn": 15, - "endLine": 26948, + "endLine": 25859, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47566,15 +47670,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource273", + "logicalId": "Resource262", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26983, + "startLine": 25894, "startColumn": 15, - "endLine": 26983, + "endLine": 25894, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47585,15 +47689,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource273", + "logicalId": "Resource262", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26989, + "startLine": 25900, "startColumn": 15, - "endLine": 26989, + "endLine": 25900, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47604,15 +47708,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource274", + "logicalId": "Resource263", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 27047, + "startLine": 25958, "startColumn": 15, - "endLine": 27047, + "endLine": 25958, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47623,15 +47727,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource274", + "logicalId": "Resource263", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27082, + "startLine": 25993, "startColumn": 15, - "endLine": 27082, + "endLine": 25993, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47642,15 +47746,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource274", + "logicalId": "Resource263", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27088, + "startLine": 25999, "startColumn": 15, - "endLine": 27088, + "endLine": 25999, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47661,15 +47765,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource275", + "logicalId": "Resource264", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 27146, + "startLine": 26057, "startColumn": 15, - "endLine": 27146, + "endLine": 26057, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47680,15 +47784,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource275", + "logicalId": "Resource264", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27181, + "startLine": 26092, "startColumn": 15, - "endLine": 27181, + "endLine": 26092, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47699,15 +47803,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource275", + "logicalId": "Resource264", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27187, + "startLine": 26098, "startColumn": 15, - "endLine": 27187, + "endLine": 26098, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47718,15 +47822,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource276", + "logicalId": "Resource265", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 27245, + "startLine": 26156, "startColumn": 15, - "endLine": 27245, + "endLine": 26156, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47737,15 +47841,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource276", + "logicalId": "Resource265", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27280, + "startLine": 26191, "startColumn": 15, - "endLine": 27280, + "endLine": 26191, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47756,15 +47860,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource276", + "logicalId": "Resource265", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27286, + "startLine": 26197, "startColumn": 15, - "endLine": 27286, + "endLine": 26197, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47775,15 +47879,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource277", + "logicalId": "Resource266", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 27344, + "startLine": 26255, "startColumn": 15, - "endLine": 27344, + "endLine": 26255, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47794,15 +47898,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource277", + "logicalId": "Resource266", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27379, + "startLine": 26290, "startColumn": 15, - "endLine": 27379, + "endLine": 26290, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47813,15 +47917,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource277", + "logicalId": "Resource266", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27385, + "startLine": 26296, "startColumn": 15, - "endLine": 27385, + "endLine": 26296, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47832,15 +47936,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource278", + "logicalId": "Resource267", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 27443, + "startLine": 26354, "startColumn": 15, - "endLine": 27443, + "endLine": 26354, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47851,15 +47955,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource278", + "logicalId": "Resource267", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27478, + "startLine": 26389, "startColumn": 15, - "endLine": 27478, + "endLine": 26389, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47870,15 +47974,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource278", + "logicalId": "Resource267", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27484, + "startLine": 26395, "startColumn": 15, - "endLine": 27484, + "endLine": 26395, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47889,15 +47993,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource279", + "logicalId": "Resource268", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 27542, + "startLine": 26453, "startColumn": 15, - "endLine": 27542, + "endLine": 26453, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47908,15 +48012,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource279", + "logicalId": "Resource268", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27577, + "startLine": 26488, "startColumn": 15, - "endLine": 27577, + "endLine": 26488, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47927,15 +48031,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource279", + "logicalId": "Resource268", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27583, + "startLine": 26494, "startColumn": 15, - "endLine": 27583, + "endLine": 26494, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47946,15 +48050,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource280", + "logicalId": "Resource269", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 27641, + "startLine": 26552, "startColumn": 15, - "endLine": 27641, + "endLine": 26552, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47965,15 +48069,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource280", + "logicalId": "Resource269", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27676, + "startLine": 26587, "startColumn": 15, - "endLine": 27676, + "endLine": 26587, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47984,15 +48088,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource280", + "logicalId": "Resource269", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27682, + "startLine": 26593, "startColumn": 15, - "endLine": 27682, + "endLine": 26593, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48003,15 +48107,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource281", + "logicalId": "Resource270", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 27740, + "startLine": 26651, "startColumn": 15, - "endLine": 27740, + "endLine": 26651, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48022,15 +48126,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource281", + "logicalId": "Resource270", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27775, + "startLine": 26686, "startColumn": 15, - "endLine": 27775, + "endLine": 26686, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48041,15 +48145,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource281", + "logicalId": "Resource270", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27781, + "startLine": 26692, "startColumn": 15, - "endLine": 27781, + "endLine": 26692, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48060,15 +48164,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource282", + "logicalId": "Resource271", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 27839, + "startLine": 26750, "startColumn": 15, - "endLine": 27839, + "endLine": 26750, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48079,15 +48183,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource282", + "logicalId": "Resource271", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27874, + "startLine": 26785, "startColumn": 15, - "endLine": 27874, + "endLine": 26785, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48098,15 +48202,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource282", + "logicalId": "Resource271", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27880, + "startLine": 26791, "startColumn": 15, - "endLine": 27880, + "endLine": 26791, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48117,15 +48221,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource283", + "logicalId": "Resource272", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 27938, + "startLine": 26849, "startColumn": 15, - "endLine": 27938, + "endLine": 26849, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48136,15 +48240,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource283", + "logicalId": "Resource272", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27973, + "startLine": 26884, "startColumn": 15, - "endLine": 27973, + "endLine": 26884, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48155,15 +48259,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource283", + "logicalId": "Resource272", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27979, + "startLine": 26890, "startColumn": 15, - "endLine": 27979, + "endLine": 26890, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48174,15 +48278,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource284", + "logicalId": "Resource273", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 28037, + "startLine": 26948, "startColumn": 15, - "endLine": 28037, + "endLine": 26948, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48193,15 +48297,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource284", + "logicalId": "Resource273", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28072, + "startLine": 26983, "startColumn": 15, - "endLine": 28072, + "endLine": 26983, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48212,15 +48316,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource284", + "logicalId": "Resource273", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28078, + "startLine": 26989, "startColumn": 15, - "endLine": 28078, + "endLine": 26989, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48231,15 +48335,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource285", + "logicalId": "Resource274", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 28136, + "startLine": 27047, "startColumn": 15, - "endLine": 28136, + "endLine": 27047, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48250,15 +48354,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource285", + "logicalId": "Resource274", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28171, + "startLine": 27082, "startColumn": 15, - "endLine": 28171, + "endLine": 27082, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48269,15 +48373,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource285", + "logicalId": "Resource274", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28177, + "startLine": 27088, "startColumn": 15, - "endLine": 28177, + "endLine": 27088, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48288,15 +48392,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource286", + "logicalId": "Resource275", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 28235, + "startLine": 27146, "startColumn": 15, - "endLine": 28235, + "endLine": 27146, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48307,15 +48411,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource286", + "logicalId": "Resource275", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28270, + "startLine": 27181, "startColumn": 15, - "endLine": 28270, + "endLine": 27181, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48326,15 +48430,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource286", + "logicalId": "Resource275", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28276, + "startLine": 27187, "startColumn": 15, - "endLine": 28276, + "endLine": 27187, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48345,15 +48449,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource287", + "logicalId": "Resource276", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 28334, + "startLine": 27245, "startColumn": 15, - "endLine": 28334, + "endLine": 27245, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48364,15 +48468,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource287", + "logicalId": "Resource276", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28369, + "startLine": 27280, "startColumn": 15, - "endLine": 28369, + "endLine": 27280, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48383,15 +48487,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource287", + "logicalId": "Resource276", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28375, + "startLine": 27286, "startColumn": 15, - "endLine": 28375, + "endLine": 27286, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48402,15 +48506,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource288", + "logicalId": "Resource277", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 28433, + "startLine": 27344, "startColumn": 15, - "endLine": 28433, + "endLine": 27344, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48421,15 +48525,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource288", + "logicalId": "Resource277", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28468, + "startLine": 27379, "startColumn": 15, - "endLine": 28468, + "endLine": 27379, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48440,15 +48544,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource288", + "logicalId": "Resource277", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28474, + "startLine": 27385, "startColumn": 15, - "endLine": 28474, + "endLine": 27385, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48459,15 +48563,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource289", + "logicalId": "Resource278", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 28532, + "startLine": 27443, "startColumn": 15, - "endLine": 28532, + "endLine": 27443, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48478,15 +48582,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource289", + "logicalId": "Resource278", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28567, + "startLine": 27478, "startColumn": 15, - "endLine": 28567, + "endLine": 27478, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48497,15 +48601,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource289", + "logicalId": "Resource278", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28573, + "startLine": 27484, "startColumn": 15, - "endLine": 28573, + "endLine": 27484, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48516,15 +48620,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource290", + "logicalId": "Resource279", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 28631, + "startLine": 27542, "startColumn": 15, - "endLine": 28631, + "endLine": 27542, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48535,15 +48639,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource290", + "logicalId": "Resource279", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28666, + "startLine": 27577, "startColumn": 15, - "endLine": 28666, + "endLine": 27577, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48554,15 +48658,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource290", + "logicalId": "Resource279", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28672, + "startLine": 27583, "startColumn": 15, - "endLine": 28672, + "endLine": 27583, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48573,15 +48677,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource291", + "logicalId": "Resource280", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 28730, + "startLine": 27641, "startColumn": 15, - "endLine": 28730, + "endLine": 27641, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48592,15 +48696,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource291", + "logicalId": "Resource280", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28765, + "startLine": 27676, "startColumn": 15, - "endLine": 28765, + "endLine": 27676, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48611,15 +48715,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource291", + "logicalId": "Resource280", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28771, + "startLine": 27682, "startColumn": 15, - "endLine": 28771, + "endLine": 27682, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48630,15 +48734,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource292", + "logicalId": "Resource281", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 28829, + "startLine": 27740, "startColumn": 15, - "endLine": 28829, + "endLine": 27740, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48649,15 +48753,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource292", + "logicalId": "Resource281", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28864, + "startLine": 27775, "startColumn": 15, - "endLine": 28864, + "endLine": 27775, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48668,15 +48772,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource292", + "logicalId": "Resource281", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28870, + "startLine": 27781, "startColumn": 15, - "endLine": 28870, + "endLine": 27781, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48687,15 +48791,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource293", + "logicalId": "Resource282", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 28928, + "startLine": 27839, "startColumn": 15, - "endLine": 28928, + "endLine": 27839, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48706,15 +48810,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource293", + "logicalId": "Resource282", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28963, + "startLine": 27874, "startColumn": 15, - "endLine": 28963, + "endLine": 27874, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48725,15 +48829,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource293", + "logicalId": "Resource282", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28969, + "startLine": 27880, "startColumn": 15, - "endLine": 28969, + "endLine": 27880, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48744,15 +48848,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource294", + "logicalId": "Resource283", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 29027, + "startLine": 27938, "startColumn": 15, - "endLine": 29027, + "endLine": 27938, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48763,15 +48867,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource294", + "logicalId": "Resource283", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 29062, + "startLine": 27973, "startColumn": 15, - "endLine": 29062, + "endLine": 27973, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48782,15 +48886,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource294", + "logicalId": "Resource283", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 29068, + "startLine": 27979, "startColumn": 15, - "endLine": 29068, + "endLine": 27979, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48801,15 +48905,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource295", + "logicalId": "Resource284", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 29126, + "startLine": 28037, "startColumn": 15, - "endLine": 29126, + "endLine": 28037, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48820,15 +48924,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource295", + "logicalId": "Resource284", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 29161, + "startLine": 28072, "startColumn": 15, - "endLine": 29161, + "endLine": 28072, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48839,15 +48943,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource295", + "logicalId": "Resource284", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 29167, + "startLine": 28078, "startColumn": 15, - "endLine": 29167, + "endLine": 28078, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48858,15 +48962,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource296", + "logicalId": "Resource285", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 29225, + "startLine": 28136, "startColumn": 15, - "endLine": 29225, + "endLine": 28136, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48877,15 +48981,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource296", + "logicalId": "Resource285", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 29260, + "startLine": 28171, "startColumn": 15, - "endLine": 29260, + "endLine": 28171, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48896,15 +49000,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource296", + "logicalId": "Resource285", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 29266, + "startLine": 28177, "startColumn": 15, - "endLine": 29266, + "endLine": 28177, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48915,15 +49019,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource297", + "logicalId": "Resource286", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 29324, + "startLine": 28235, "startColumn": 15, - "endLine": 29324, + "endLine": 28235, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48934,15 +49038,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource297", + "logicalId": "Resource286", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 29359, + "startLine": 28270, "startColumn": 15, - "endLine": 29359, + "endLine": 28270, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48953,15 +49057,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource297", + "logicalId": "Resource286", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 29365, + "startLine": 28276, "startColumn": 15, - "endLine": 29365, + "endLine": 28276, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48972,15 +49076,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource298", + "logicalId": "Resource287", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 29423, + "startLine": 28334, "startColumn": 15, - "endLine": 29423, + "endLine": 28334, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48991,15 +49095,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource298", + "logicalId": "Resource287", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 29458, + "startLine": 28369, "startColumn": 15, - "endLine": 29458, + "endLine": 28369, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49010,15 +49114,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource298", + "logicalId": "Resource287", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 29464, + "startLine": 28375, "startColumn": 15, - "endLine": 29464, + "endLine": 28375, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49029,15 +49133,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource299", + "logicalId": "Resource288", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 29522, + "startLine": 28433, "startColumn": 15, - "endLine": 29522, + "endLine": 28433, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49048,15 +49152,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource299", + "logicalId": "Resource288", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 29557, + "startLine": 28468, "startColumn": 15, - "endLine": 29557, + "endLine": 28468, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49067,1122 +49171,645 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource299", + "logicalId": "Resource288", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 29563, + "startLine": 28474, "startColumn": 15, - "endLine": 29563, + "endLine": 28474, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Resource1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 89, - "startColumn": 7, - "endLine": 89, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Resource1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 90, - "startColumn": 7, - "endLine": 90, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Resource1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.UserData", - "category": "Best Practice", - "startLine": 91, - "startColumn": 7, - "endLine": 91, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Resource2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 188, - "startColumn": 7, - "endLine": 188, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Resource2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 189, - "startColumn": 7, - "endLine": 189, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Resource2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.UserData", - "category": "Best Practice", - "startLine": 190, - "startColumn": 7, - "endLine": 190, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Resource3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 287, - "startColumn": 7, - "endLine": 287, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Resource3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 288, - "startColumn": 7, - "endLine": 288, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Resource3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.UserData", - "category": "Best Practice", - "startLine": 289, - "startColumn": 7, - "endLine": 289, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Resource4", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 386, - "startColumn": 7, - "endLine": 386, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Resource4", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 387, - "startColumn": 7, - "endLine": 387, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Resource4", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.UserData", - "category": "Best Practice", - "startLine": 388, - "startColumn": 7, - "endLine": 388, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Resource5", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 485, - "startColumn": 7, - "endLine": 485, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Resource5", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 486, - "startColumn": 7, - "endLine": 486, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Resource5", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.UserData", - "category": "Best Practice", - "startLine": 487, - "startColumn": 7, - "endLine": 487, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource6", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 584, - "startColumn": 7, - "endLine": 584, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "logicalId": "Resource289", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", + "category": "Best Practice", + "startLine": 28532, + "startColumn": 15, + "endLine": 28532, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource6", + "logicalId": "Resource289", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 585, - "startColumn": 7, - "endLine": 585, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28567, + "startColumn": 15, + "endLine": 28567, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource6", + "logicalId": "Resource289", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 586, - "startColumn": 7, - "endLine": 586, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28573, + "startColumn": 15, + "endLine": 28573, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource7", + "logicalId": "Resource290", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 683, - "startColumn": 7, - "endLine": 683, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 28631, + "startColumn": 15, + "endLine": 28631, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource7", + "logicalId": "Resource290", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 684, - "startColumn": 7, - "endLine": 684, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28666, + "startColumn": 15, + "endLine": 28666, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource7", + "logicalId": "Resource290", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 685, - "startColumn": 7, - "endLine": 685, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28672, + "startColumn": 15, + "endLine": 28672, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource8", + "logicalId": "Resource291", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 782, - "startColumn": 7, - "endLine": 782, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 28730, + "startColumn": 15, + "endLine": 28730, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource8", + "logicalId": "Resource291", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 783, - "startColumn": 7, - "endLine": 783, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28765, + "startColumn": 15, + "endLine": 28765, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource8", + "logicalId": "Resource291", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 784, - "startColumn": 7, - "endLine": 784, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28771, + "startColumn": 15, + "endLine": 28771, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource9", + "logicalId": "Resource292", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 881, - "startColumn": 7, - "endLine": 881, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 28829, + "startColumn": 15, + "endLine": 28829, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource9", + "logicalId": "Resource292", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 882, - "startColumn": 7, - "endLine": 882, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28864, + "startColumn": 15, + "endLine": 28864, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource9", + "logicalId": "Resource292", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 883, - "startColumn": 7, - "endLine": 883, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28870, + "startColumn": 15, + "endLine": 28870, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource10", + "logicalId": "Resource293", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 980, - "startColumn": 7, - "endLine": 980, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 28928, + "startColumn": 15, + "endLine": 28928, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource10", + "logicalId": "Resource293", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 981, - "startColumn": 7, - "endLine": 981, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28963, + "startColumn": 15, + "endLine": 28963, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource10", + "logicalId": "Resource293", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 982, - "startColumn": 7, - "endLine": 982, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28969, + "startColumn": 15, + "endLine": 28969, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource11", + "logicalId": "Resource294", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 1079, - "startColumn": 7, - "endLine": 1079, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 29027, + "startColumn": 15, + "endLine": 29027, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource11", + "logicalId": "Resource294", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1080, - "startColumn": 7, - "endLine": 1080, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 29062, + "startColumn": 15, + "endLine": 29062, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource11", + "logicalId": "Resource294", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1081, - "startColumn": 7, - "endLine": 1081, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 29068, + "startColumn": 15, + "endLine": 29068, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource12", + "logicalId": "Resource295", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 1178, - "startColumn": 7, - "endLine": 1178, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 29126, + "startColumn": 15, + "endLine": 29126, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource12", + "logicalId": "Resource295", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1179, - "startColumn": 7, - "endLine": 1179, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 29161, + "startColumn": 15, + "endLine": 29161, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource12", + "logicalId": "Resource295", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1180, - "startColumn": 7, - "endLine": 1180, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 29167, + "startColumn": 15, + "endLine": 29167, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource13", + "logicalId": "Resource296", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 1277, - "startColumn": 7, - "endLine": 1277, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 29225, + "startColumn": 15, + "endLine": 29225, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource13", + "logicalId": "Resource296", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1278, - "startColumn": 7, - "endLine": 1278, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 29260, + "startColumn": 15, + "endLine": 29260, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource13", + "logicalId": "Resource296", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1279, - "startColumn": 7, - "endLine": 1279, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 29266, + "startColumn": 15, + "endLine": 29266, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource14", + "logicalId": "Resource297", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 1376, - "startColumn": 7, - "endLine": 1376, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 29324, + "startColumn": 15, + "endLine": 29324, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource14", + "logicalId": "Resource297", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1377, - "startColumn": 7, - "endLine": 1377, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 29359, + "startColumn": 15, + "endLine": 29359, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource14", + "logicalId": "Resource297", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1378, - "startColumn": 7, - "endLine": 1378, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 29365, + "startColumn": 15, + "endLine": 29365, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource15", + "logicalId": "Resource298", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 1475, - "startColumn": 7, - "endLine": 1475, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 29423, + "startColumn": 15, + "endLine": 29423, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource15", + "logicalId": "Resource298", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1476, - "startColumn": 7, - "endLine": 1476, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 29458, + "startColumn": 15, + "endLine": 29458, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource15", + "logicalId": "Resource298", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1477, - "startColumn": 7, - "endLine": 1477, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 29464, + "startColumn": 15, + "endLine": 29464, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource16", + "logicalId": "Resource299", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 1574, - "startColumn": 7, - "endLine": 1574, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 29522, + "startColumn": 15, + "endLine": 29522, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource16", + "logicalId": "Resource299", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1575, - "startColumn": 7, - "endLine": 1575, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 29557, + "startColumn": 15, + "endLine": 29557, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource16", + "logicalId": "Resource299", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1576, - "startColumn": 7, - "endLine": 1576, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 29563, + "startColumn": 15, + "endLine": 29563, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { "ruleId": "I9001", @@ -50190,15 +49817,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource17", + "logicalId": "Resource1", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 1673, + "startLine": 89, "startColumn": 7, - "endLine": 1673, + "endLine": 89, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50213,15 +49840,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource17", + "logicalId": "Resource1", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 1674, + "startLine": 90, "startColumn": 7, - "endLine": 1674, + "endLine": 90, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50236,15 +49863,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource17", + "logicalId": "Resource1", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 1675, + "startLine": 91, "startColumn": 7, - "endLine": 1675, + "endLine": 91, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50259,15 +49886,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource18", + "logicalId": "Resource2", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 1772, + "startLine": 188, "startColumn": 7, - "endLine": 1772, + "endLine": 188, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50282,15 +49909,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource18", + "logicalId": "Resource2", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 1773, + "startLine": 189, "startColumn": 7, - "endLine": 1773, + "endLine": 189, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50305,15 +49932,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource18", + "logicalId": "Resource2", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 1774, + "startLine": 190, "startColumn": 7, - "endLine": 1774, + "endLine": 190, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50328,15 +49955,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource19", + "logicalId": "Resource3", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 1871, + "startLine": 287, "startColumn": 7, - "endLine": 1871, + "endLine": 287, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50351,15 +49978,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource19", + "logicalId": "Resource3", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 1872, + "startLine": 288, "startColumn": 7, - "endLine": 1872, + "endLine": 288, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50374,15 +50001,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource19", + "logicalId": "Resource3", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 1873, + "startLine": 289, "startColumn": 7, - "endLine": 1873, + "endLine": 289, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50397,15 +50024,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource20", + "logicalId": "Resource4", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 1970, + "startLine": 386, "startColumn": 7, - "endLine": 1970, + "endLine": 386, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50420,15 +50047,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource20", + "logicalId": "Resource4", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 1971, + "startLine": 387, "startColumn": 7, - "endLine": 1971, + "endLine": 387, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50443,15 +50070,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource20", + "logicalId": "Resource4", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 1972, + "startLine": 388, "startColumn": 7, - "endLine": 1972, + "endLine": 388, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50466,15 +50093,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource21", + "logicalId": "Resource5", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 2069, + "startLine": 485, "startColumn": 7, - "endLine": 2069, + "endLine": 485, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50489,15 +50116,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource21", + "logicalId": "Resource5", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 2070, + "startLine": 486, "startColumn": 7, - "endLine": 2070, + "endLine": 486, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50512,15 +50139,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource21", + "logicalId": "Resource5", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 2071, + "startLine": 487, "startColumn": 7, - "endLine": 2071, + "endLine": 487, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50535,15 +50162,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource22", + "logicalId": "Resource6", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 2168, + "startLine": 584, "startColumn": 7, - "endLine": 2168, + "endLine": 584, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50558,15 +50185,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource22", + "logicalId": "Resource6", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 2169, + "startLine": 585, "startColumn": 7, - "endLine": 2169, + "endLine": 585, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50581,15 +50208,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource22", + "logicalId": "Resource6", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 2170, + "startLine": 586, "startColumn": 7, - "endLine": 2170, + "endLine": 586, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50604,15 +50231,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource23", + "logicalId": "Resource7", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 2267, + "startLine": 683, "startColumn": 7, - "endLine": 2267, + "endLine": 683, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50627,15 +50254,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource23", + "logicalId": "Resource7", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 2268, + "startLine": 684, "startColumn": 7, - "endLine": 2268, + "endLine": 684, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50650,15 +50277,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource23", + "logicalId": "Resource7", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 2269, + "startLine": 685, "startColumn": 7, - "endLine": 2269, + "endLine": 685, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50673,15 +50300,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource24", + "logicalId": "Resource8", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 2366, + "startLine": 782, "startColumn": 7, - "endLine": 2366, + "endLine": 782, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50696,15 +50323,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource24", + "logicalId": "Resource8", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 2367, + "startLine": 783, "startColumn": 7, - "endLine": 2367, + "endLine": 783, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50719,15 +50346,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource24", + "logicalId": "Resource8", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 2368, + "startLine": 784, "startColumn": 7, - "endLine": 2368, + "endLine": 784, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50742,15 +50369,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource25", + "logicalId": "Resource9", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 2465, + "startLine": 881, "startColumn": 7, - "endLine": 2465, + "endLine": 881, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50765,15 +50392,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource25", + "logicalId": "Resource9", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 2466, + "startLine": 882, "startColumn": 7, - "endLine": 2466, + "endLine": 882, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50788,15 +50415,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource25", + "logicalId": "Resource9", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 2467, + "startLine": 883, "startColumn": 7, - "endLine": 2467, + "endLine": 883, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50811,15 +50438,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource26", + "logicalId": "Resource10", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 2564, + "startLine": 980, "startColumn": 7, - "endLine": 2564, + "endLine": 980, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50834,15 +50461,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource26", + "logicalId": "Resource10", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 2565, + "startLine": 981, "startColumn": 7, - "endLine": 2565, + "endLine": 981, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50857,15 +50484,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource26", + "logicalId": "Resource10", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 2566, + "startLine": 982, "startColumn": 7, - "endLine": 2566, + "endLine": 982, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50880,15 +50507,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource27", + "logicalId": "Resource11", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 2663, + "startLine": 1079, "startColumn": 7, - "endLine": 2663, + "endLine": 1079, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50903,15 +50530,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource27", + "logicalId": "Resource11", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 2664, + "startLine": 1080, "startColumn": 7, - "endLine": 2664, + "endLine": 1080, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50926,15 +50553,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource27", + "logicalId": "Resource11", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 2665, + "startLine": 1081, "startColumn": 7, - "endLine": 2665, + "endLine": 1081, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50949,15 +50576,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource28", + "logicalId": "Resource12", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 2762, + "startLine": 1178, "startColumn": 7, - "endLine": 2762, + "endLine": 1178, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50972,15 +50599,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource28", + "logicalId": "Resource12", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 2763, + "startLine": 1179, "startColumn": 7, - "endLine": 2763, + "endLine": 1179, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50995,15 +50622,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource28", + "logicalId": "Resource12", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 2764, + "startLine": 1180, "startColumn": 7, - "endLine": 2764, + "endLine": 1180, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51018,15 +50645,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource29", + "logicalId": "Resource13", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 2861, + "startLine": 1277, "startColumn": 7, - "endLine": 2861, + "endLine": 1277, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51041,15 +50668,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource29", + "logicalId": "Resource13", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 2862, + "startLine": 1278, "startColumn": 7, - "endLine": 2862, + "endLine": 1278, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51064,15 +50691,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource29", + "logicalId": "Resource13", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 2863, + "startLine": 1279, "startColumn": 7, - "endLine": 2863, + "endLine": 1279, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51087,15 +50714,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource30", + "logicalId": "Resource14", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 2960, + "startLine": 1376, "startColumn": 7, - "endLine": 2960, + "endLine": 1376, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51110,15 +50737,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource30", + "logicalId": "Resource14", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 2961, + "startLine": 1377, "startColumn": 7, - "endLine": 2961, + "endLine": 1377, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51133,15 +50760,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource30", + "logicalId": "Resource14", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 2962, + "startLine": 1378, "startColumn": 7, - "endLine": 2962, + "endLine": 1378, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51156,15 +50783,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource31", + "logicalId": "Resource15", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 3059, + "startLine": 1475, "startColumn": 7, - "endLine": 3059, + "endLine": 1475, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51179,15 +50806,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource31", + "logicalId": "Resource15", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 3060, + "startLine": 1476, "startColumn": 7, - "endLine": 3060, + "endLine": 1476, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51202,15 +50829,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource31", + "logicalId": "Resource15", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 3061, + "startLine": 1477, "startColumn": 7, - "endLine": 3061, + "endLine": 1477, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51225,15 +50852,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource32", + "logicalId": "Resource16", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 3158, + "startLine": 1574, "startColumn": 7, - "endLine": 3158, + "endLine": 1574, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51248,15 +50875,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource32", + "logicalId": "Resource16", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 3159, + "startLine": 1575, "startColumn": 7, - "endLine": 3159, + "endLine": 1575, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51271,15 +50898,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource32", + "logicalId": "Resource16", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 3160, + "startLine": 1576, "startColumn": 7, - "endLine": 3160, + "endLine": 1576, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51294,15 +50921,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource33", + "logicalId": "Resource17", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 3257, + "startLine": 1673, "startColumn": 7, - "endLine": 3257, + "endLine": 1673, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51317,15 +50944,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource33", + "logicalId": "Resource17", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 3258, + "startLine": 1674, "startColumn": 7, - "endLine": 3258, + "endLine": 1674, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51340,15 +50967,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource33", + "logicalId": "Resource17", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 3259, + "startLine": 1675, "startColumn": 7, - "endLine": 3259, + "endLine": 1675, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51363,15 +50990,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource34", + "logicalId": "Resource18", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 3356, + "startLine": 1772, "startColumn": 7, - "endLine": 3356, + "endLine": 1772, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51386,15 +51013,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource34", + "logicalId": "Resource18", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 3357, + "startLine": 1773, "startColumn": 7, - "endLine": 3357, + "endLine": 1773, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51409,15 +51036,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource34", + "logicalId": "Resource18", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 3358, + "startLine": 1774, "startColumn": 7, - "endLine": 3358, + "endLine": 1774, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51432,15 +51059,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource35", + "logicalId": "Resource19", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 3455, + "startLine": 1871, "startColumn": 7, - "endLine": 3455, + "endLine": 1871, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51455,15 +51082,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource35", + "logicalId": "Resource19", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 3456, + "startLine": 1872, "startColumn": 7, - "endLine": 3456, + "endLine": 1872, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51478,15 +51105,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource35", + "logicalId": "Resource19", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 3457, + "startLine": 1873, "startColumn": 7, - "endLine": 3457, + "endLine": 1873, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51501,15 +51128,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource36", + "logicalId": "Resource20", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 3554, + "startLine": 1970, "startColumn": 7, - "endLine": 3554, + "endLine": 1970, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51524,15 +51151,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource36", + "logicalId": "Resource20", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 3555, + "startLine": 1971, "startColumn": 7, - "endLine": 3555, + "endLine": 1971, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51547,15 +51174,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource36", + "logicalId": "Resource20", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 3556, + "startLine": 1972, "startColumn": 7, - "endLine": 3556, + "endLine": 1972, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51570,15 +51197,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource37", + "logicalId": "Resource21", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 3653, + "startLine": 2069, "startColumn": 7, - "endLine": 3653, + "endLine": 2069, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51593,15 +51220,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource37", + "logicalId": "Resource21", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 3654, + "startLine": 2070, "startColumn": 7, - "endLine": 3654, + "endLine": 2070, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51616,15 +51243,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource37", + "logicalId": "Resource21", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 3655, + "startLine": 2071, "startColumn": 7, - "endLine": 3655, + "endLine": 2071, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51639,15 +51266,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource38", + "logicalId": "Resource22", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 3752, + "startLine": 2168, "startColumn": 7, - "endLine": 3752, + "endLine": 2168, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51662,15 +51289,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource38", + "logicalId": "Resource22", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 3753, + "startLine": 2169, "startColumn": 7, - "endLine": 3753, + "endLine": 2169, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51685,15 +51312,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource38", + "logicalId": "Resource22", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 3754, + "startLine": 2170, "startColumn": 7, - "endLine": 3754, + "endLine": 2170, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51708,15 +51335,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource39", + "logicalId": "Resource23", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 3851, + "startLine": 2267, "startColumn": 7, - "endLine": 3851, + "endLine": 2267, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51731,15 +51358,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource39", + "logicalId": "Resource23", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 3852, + "startLine": 2268, "startColumn": 7, - "endLine": 3852, + "endLine": 2268, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51754,15 +51381,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource39", + "logicalId": "Resource23", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 3853, + "startLine": 2269, "startColumn": 7, - "endLine": 3853, + "endLine": 2269, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51777,15 +51404,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource40", + "logicalId": "Resource24", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 3950, + "startLine": 2366, "startColumn": 7, - "endLine": 3950, + "endLine": 2366, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51800,15 +51427,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource40", + "logicalId": "Resource24", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 3951, + "startLine": 2367, "startColumn": 7, - "endLine": 3951, + "endLine": 2367, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51823,15 +51450,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource40", + "logicalId": "Resource24", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 3952, + "startLine": 2368, "startColumn": 7, - "endLine": 3952, + "endLine": 2368, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51846,15 +51473,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource41", + "logicalId": "Resource25", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 4049, + "startLine": 2465, "startColumn": 7, - "endLine": 4049, + "endLine": 2465, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51869,15 +51496,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource41", + "logicalId": "Resource25", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 4050, + "startLine": 2466, "startColumn": 7, - "endLine": 4050, + "endLine": 2466, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51892,15 +51519,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource41", + "logicalId": "Resource25", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 4051, + "startLine": 2467, "startColumn": 7, - "endLine": 4051, + "endLine": 2467, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51915,15 +51542,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource42", + "logicalId": "Resource26", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 4148, + "startLine": 2564, "startColumn": 7, - "endLine": 4148, + "endLine": 2564, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51938,15 +51565,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource42", + "logicalId": "Resource26", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 4149, + "startLine": 2565, "startColumn": 7, - "endLine": 4149, + "endLine": 2565, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51961,15 +51588,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource42", + "logicalId": "Resource26", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 4150, + "startLine": 2566, "startColumn": 7, - "endLine": 4150, + "endLine": 2566, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -51984,15 +51611,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource43", + "logicalId": "Resource27", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 4247, + "startLine": 2663, "startColumn": 7, - "endLine": 4247, + "endLine": 2663, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52007,15 +51634,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource43", + "logicalId": "Resource27", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 4248, + "startLine": 2664, "startColumn": 7, - "endLine": 4248, + "endLine": 2664, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52030,15 +51657,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource43", + "logicalId": "Resource27", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 4249, + "startLine": 2665, "startColumn": 7, - "endLine": 4249, + "endLine": 2665, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52053,15 +51680,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource44", + "logicalId": "Resource28", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 4346, + "startLine": 2762, "startColumn": 7, - "endLine": 4346, + "endLine": 2762, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52076,15 +51703,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource44", + "logicalId": "Resource28", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 4347, + "startLine": 2763, "startColumn": 7, - "endLine": 4347, + "endLine": 2763, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52099,15 +51726,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource44", + "logicalId": "Resource28", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 4348, + "startLine": 2764, "startColumn": 7, - "endLine": 4348, + "endLine": 2764, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52122,15 +51749,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource45", + "logicalId": "Resource29", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 4445, + "startLine": 2861, "startColumn": 7, - "endLine": 4445, + "endLine": 2861, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52145,15 +51772,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource45", + "logicalId": "Resource29", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 4446, + "startLine": 2862, "startColumn": 7, - "endLine": 4446, + "endLine": 2862, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52168,15 +51795,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource45", + "logicalId": "Resource29", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 4447, + "startLine": 2863, "startColumn": 7, - "endLine": 4447, + "endLine": 2863, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52191,15 +51818,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource46", + "logicalId": "Resource30", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 4544, + "startLine": 2960, "startColumn": 7, - "endLine": 4544, + "endLine": 2960, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52214,15 +51841,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource46", + "logicalId": "Resource30", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 4545, + "startLine": 2961, "startColumn": 7, - "endLine": 4545, + "endLine": 2961, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52237,15 +51864,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource46", + "logicalId": "Resource30", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 4546, + "startLine": 2962, "startColumn": 7, - "endLine": 4546, + "endLine": 2962, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52260,15 +51887,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource47", + "logicalId": "Resource31", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 4643, + "startLine": 3059, "startColumn": 7, - "endLine": 4643, + "endLine": 3059, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52283,15 +51910,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource47", + "logicalId": "Resource31", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 4644, + "startLine": 3060, "startColumn": 7, - "endLine": 4644, + "endLine": 3060, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52306,15 +51933,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource47", + "logicalId": "Resource31", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 4645, + "startLine": 3061, "startColumn": 7, - "endLine": 4645, + "endLine": 3061, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52329,15 +51956,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource48", + "logicalId": "Resource32", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 4742, + "startLine": 3158, "startColumn": 7, - "endLine": 4742, + "endLine": 3158, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52352,15 +51979,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource48", + "logicalId": "Resource32", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 4743, + "startLine": 3159, "startColumn": 7, - "endLine": 4743, + "endLine": 3159, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52375,15 +52002,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource48", + "logicalId": "Resource32", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 4744, + "startLine": 3160, "startColumn": 7, - "endLine": 4744, + "endLine": 3160, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52398,15 +52025,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource49", + "logicalId": "Resource33", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 4841, + "startLine": 3257, "startColumn": 7, - "endLine": 4841, + "endLine": 3257, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52421,15 +52048,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource49", + "logicalId": "Resource33", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 4842, + "startLine": 3258, "startColumn": 7, - "endLine": 4842, + "endLine": 3258, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52444,15 +52071,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource49", + "logicalId": "Resource33", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 4843, + "startLine": 3259, "startColumn": 7, - "endLine": 4843, + "endLine": 3259, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52467,15 +52094,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource50", + "logicalId": "Resource34", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 4940, + "startLine": 3356, "startColumn": 7, - "endLine": 4940, + "endLine": 3356, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52490,15 +52117,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource50", + "logicalId": "Resource34", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 4941, + "startLine": 3357, "startColumn": 7, - "endLine": 4941, + "endLine": 3357, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52513,15 +52140,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource50", + "logicalId": "Resource34", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 4942, + "startLine": 3358, "startColumn": 7, - "endLine": 4942, + "endLine": 3358, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52536,15 +52163,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource51", + "logicalId": "Resource35", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 5039, + "startLine": 3455, "startColumn": 7, - "endLine": 5039, + "endLine": 3455, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52559,15 +52186,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource51", + "logicalId": "Resource35", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 5040, + "startLine": 3456, "startColumn": 7, - "endLine": 5040, + "endLine": 3456, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52582,15 +52209,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource51", + "logicalId": "Resource35", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 5041, + "startLine": 3457, "startColumn": 7, - "endLine": 5041, + "endLine": 3457, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52605,15 +52232,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource52", + "logicalId": "Resource36", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 5138, + "startLine": 3554, "startColumn": 7, - "endLine": 5138, + "endLine": 3554, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52628,15 +52255,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource52", + "logicalId": "Resource36", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 5139, + "startLine": 3555, "startColumn": 7, - "endLine": 5139, + "endLine": 3555, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52651,15 +52278,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource52", + "logicalId": "Resource36", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 5140, + "startLine": 3556, "startColumn": 7, - "endLine": 5140, + "endLine": 3556, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52674,15 +52301,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource53", + "logicalId": "Resource37", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 5237, + "startLine": 3653, "startColumn": 7, - "endLine": 5237, + "endLine": 3653, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52697,15 +52324,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource53", + "logicalId": "Resource37", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 5238, + "startLine": 3654, "startColumn": 7, - "endLine": 5238, + "endLine": 3654, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52720,15 +52347,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource53", + "logicalId": "Resource37", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 5239, + "startLine": 3655, "startColumn": 7, - "endLine": 5239, + "endLine": 3655, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52743,15 +52370,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource54", + "logicalId": "Resource38", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 5336, + "startLine": 3752, "startColumn": 7, - "endLine": 5336, + "endLine": 3752, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52766,15 +52393,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource54", + "logicalId": "Resource38", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 5337, + "startLine": 3753, "startColumn": 7, - "endLine": 5337, + "endLine": 3753, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52789,15 +52416,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource54", + "logicalId": "Resource38", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 5338, + "startLine": 3754, "startColumn": 7, - "endLine": 5338, + "endLine": 3754, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52812,15 +52439,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource55", + "logicalId": "Resource39", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 5435, + "startLine": 3851, "startColumn": 7, - "endLine": 5435, + "endLine": 3851, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52835,15 +52462,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource55", + "logicalId": "Resource39", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 5436, + "startLine": 3852, "startColumn": 7, - "endLine": 5436, + "endLine": 3852, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52858,15 +52485,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource55", + "logicalId": "Resource39", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 5437, + "startLine": 3853, "startColumn": 7, - "endLine": 5437, + "endLine": 3853, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52881,15 +52508,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource56", + "logicalId": "Resource40", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 5534, + "startLine": 3950, "startColumn": 7, - "endLine": 5534, + "endLine": 3950, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52904,15 +52531,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource56", + "logicalId": "Resource40", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 5535, + "startLine": 3951, "startColumn": 7, - "endLine": 5535, + "endLine": 3951, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52927,15 +52554,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource56", + "logicalId": "Resource40", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 5536, + "startLine": 3952, "startColumn": 7, - "endLine": 5536, + "endLine": 3952, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52950,15 +52577,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource57", + "logicalId": "Resource41", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 5633, + "startLine": 4049, "startColumn": 7, - "endLine": 5633, + "endLine": 4049, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52973,15 +52600,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource57", + "logicalId": "Resource41", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 5634, + "startLine": 4050, "startColumn": 7, - "endLine": 5634, + "endLine": 4050, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52996,15 +52623,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource57", + "logicalId": "Resource41", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 5635, + "startLine": 4051, "startColumn": 7, - "endLine": 5635, + "endLine": 4051, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53019,15 +52646,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource58", + "logicalId": "Resource42", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 5732, + "startLine": 4148, "startColumn": 7, - "endLine": 5732, + "endLine": 4148, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53042,15 +52669,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource58", + "logicalId": "Resource42", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 5733, + "startLine": 4149, "startColumn": 7, - "endLine": 5733, + "endLine": 4149, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53065,15 +52692,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource58", + "logicalId": "Resource42", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 5734, + "startLine": 4150, "startColumn": 7, - "endLine": 5734, + "endLine": 4150, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53088,15 +52715,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource59", + "logicalId": "Resource43", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 5831, + "startLine": 4247, "startColumn": 7, - "endLine": 5831, + "endLine": 4247, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53111,15 +52738,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource59", + "logicalId": "Resource43", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 5832, + "startLine": 4248, "startColumn": 7, - "endLine": 5832, + "endLine": 4248, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53134,15 +52761,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource59", + "logicalId": "Resource43", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 5833, + "startLine": 4249, "startColumn": 7, - "endLine": 5833, + "endLine": 4249, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53157,15 +52784,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource60", + "logicalId": "Resource44", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 5930, + "startLine": 4346, "startColumn": 7, - "endLine": 5930, + "endLine": 4346, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53180,15 +52807,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource60", + "logicalId": "Resource44", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 5931, + "startLine": 4347, "startColumn": 7, - "endLine": 5931, + "endLine": 4347, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53203,15 +52830,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource60", + "logicalId": "Resource44", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 5932, + "startLine": 4348, "startColumn": 7, - "endLine": 5932, + "endLine": 4348, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53226,15 +52853,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource61", + "logicalId": "Resource45", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 6029, + "startLine": 4445, "startColumn": 7, - "endLine": 6029, + "endLine": 4445, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53249,15 +52876,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource61", + "logicalId": "Resource45", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 6030, + "startLine": 4446, "startColumn": 7, - "endLine": 6030, + "endLine": 4446, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53272,15 +52899,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource61", + "logicalId": "Resource45", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 6031, + "startLine": 4447, "startColumn": 7, - "endLine": 6031, + "endLine": 4447, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53295,15 +52922,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource62", + "logicalId": "Resource46", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 6128, + "startLine": 4544, "startColumn": 7, - "endLine": 6128, + "endLine": 4544, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53318,15 +52945,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource62", + "logicalId": "Resource46", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 6129, + "startLine": 4545, "startColumn": 7, - "endLine": 6129, + "endLine": 4545, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53341,15 +52968,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource62", + "logicalId": "Resource46", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 6130, + "startLine": 4546, "startColumn": 7, - "endLine": 6130, + "endLine": 4546, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53364,15 +52991,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource63", + "logicalId": "Resource47", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 6227, + "startLine": 4643, "startColumn": 7, - "endLine": 6227, + "endLine": 4643, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53387,15 +53014,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource63", + "logicalId": "Resource47", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 6228, + "startLine": 4644, "startColumn": 7, - "endLine": 6228, + "endLine": 4644, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53410,15 +53037,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource63", + "logicalId": "Resource47", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 6229, + "startLine": 4645, "startColumn": 7, - "endLine": 6229, + "endLine": 4645, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53433,15 +53060,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource64", + "logicalId": "Resource48", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 6326, + "startLine": 4742, "startColumn": 7, - "endLine": 6326, + "endLine": 4742, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53456,15 +53083,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource64", + "logicalId": "Resource48", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 6327, + "startLine": 4743, "startColumn": 7, - "endLine": 6327, + "endLine": 4743, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53479,15 +53106,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource64", + "logicalId": "Resource48", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 6328, + "startLine": 4744, "startColumn": 7, - "endLine": 6328, + "endLine": 4744, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53502,15 +53129,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource65", + "logicalId": "Resource49", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 6425, + "startLine": 4841, "startColumn": 7, - "endLine": 6425, + "endLine": 4841, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53525,15 +53152,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource65", + "logicalId": "Resource49", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 6426, + "startLine": 4842, "startColumn": 7, - "endLine": 6426, + "endLine": 4842, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53548,15 +53175,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource65", + "logicalId": "Resource49", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 6427, + "startLine": 4843, "startColumn": 7, - "endLine": 6427, + "endLine": 4843, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53571,15 +53198,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource66", + "logicalId": "Resource50", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 6524, + "startLine": 4940, "startColumn": 7, - "endLine": 6524, + "endLine": 4940, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53594,15 +53221,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource66", + "logicalId": "Resource50", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 6525, + "startLine": 4941, "startColumn": 7, - "endLine": 6525, + "endLine": 4941, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53617,15 +53244,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource66", + "logicalId": "Resource50", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 6526, + "startLine": 4942, "startColumn": 7, - "endLine": 6526, + "endLine": 4942, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53640,15 +53267,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource67", + "logicalId": "Resource51", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 6623, + "startLine": 5039, "startColumn": 7, - "endLine": 6623, + "endLine": 5039, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53663,15 +53290,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource67", + "logicalId": "Resource51", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 6624, + "startLine": 5040, "startColumn": 7, - "endLine": 6624, + "endLine": 5040, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53686,15 +53313,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource67", + "logicalId": "Resource51", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 6625, + "startLine": 5041, "startColumn": 7, - "endLine": 6625, + "endLine": 5041, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53709,15 +53336,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource68", + "logicalId": "Resource52", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 6722, + "startLine": 5138, "startColumn": 7, - "endLine": 6722, + "endLine": 5138, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53732,15 +53359,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource68", + "logicalId": "Resource52", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 6723, + "startLine": 5139, "startColumn": 7, - "endLine": 6723, + "endLine": 5139, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53755,15 +53382,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource68", + "logicalId": "Resource52", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 6724, + "startLine": 5140, "startColumn": 7, - "endLine": 6724, + "endLine": 5140, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53778,15 +53405,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource69", + "logicalId": "Resource53", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 6821, + "startLine": 5237, "startColumn": 7, - "endLine": 6821, + "endLine": 5237, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53801,15 +53428,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource69", + "logicalId": "Resource53", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 6822, + "startLine": 5238, "startColumn": 7, - "endLine": 6822, + "endLine": 5238, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53824,15 +53451,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource69", + "logicalId": "Resource53", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 6823, + "startLine": 5239, "startColumn": 7, - "endLine": 6823, + "endLine": 5239, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53847,15 +53474,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource70", + "logicalId": "Resource54", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 6920, + "startLine": 5336, "startColumn": 7, - "endLine": 6920, + "endLine": 5336, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53870,15 +53497,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource70", + "logicalId": "Resource54", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 6921, + "startLine": 5337, "startColumn": 7, - "endLine": 6921, + "endLine": 5337, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53893,15 +53520,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource70", + "logicalId": "Resource54", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 6922, + "startLine": 5338, "startColumn": 7, - "endLine": 6922, + "endLine": 5338, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53916,15 +53543,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource71", + "logicalId": "Resource55", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 7019, + "startLine": 5435, "startColumn": 7, - "endLine": 7019, + "endLine": 5435, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53939,15 +53566,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource71", + "logicalId": "Resource55", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 7020, + "startLine": 5436, "startColumn": 7, - "endLine": 7020, + "endLine": 5436, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53962,15 +53589,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource71", + "logicalId": "Resource55", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 7021, + "startLine": 5437, "startColumn": 7, - "endLine": 7021, + "endLine": 5437, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53985,15 +53612,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource72", + "logicalId": "Resource56", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 7118, + "startLine": 5534, "startColumn": 7, - "endLine": 7118, + "endLine": 5534, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54008,15 +53635,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource72", + "logicalId": "Resource56", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 7119, + "startLine": 5535, "startColumn": 7, - "endLine": 7119, + "endLine": 5535, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54031,15 +53658,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource72", + "logicalId": "Resource56", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 7120, + "startLine": 5536, "startColumn": 7, - "endLine": 7120, + "endLine": 5536, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54054,15 +53681,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource73", + "logicalId": "Resource57", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 7217, + "startLine": 5633, "startColumn": 7, - "endLine": 7217, + "endLine": 5633, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54077,15 +53704,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource73", + "logicalId": "Resource57", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 7218, + "startLine": 5634, "startColumn": 7, - "endLine": 7218, + "endLine": 5634, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54100,15 +53727,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource73", + "logicalId": "Resource57", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 7219, + "startLine": 5635, "startColumn": 7, - "endLine": 7219, + "endLine": 5635, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54123,15 +53750,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource74", + "logicalId": "Resource58", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 7316, + "startLine": 5732, "startColumn": 7, - "endLine": 7316, + "endLine": 5732, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54146,15 +53773,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource74", + "logicalId": "Resource58", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 7317, + "startLine": 5733, "startColumn": 7, - "endLine": 7317, + "endLine": 5733, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54169,15 +53796,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource74", + "logicalId": "Resource58", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 7318, + "startLine": 5734, "startColumn": 7, - "endLine": 7318, + "endLine": 5734, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54192,15 +53819,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource75", + "logicalId": "Resource59", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 7415, + "startLine": 5831, "startColumn": 7, - "endLine": 7415, + "endLine": 5831, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54215,15 +53842,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource75", + "logicalId": "Resource59", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 7416, + "startLine": 5832, "startColumn": 7, - "endLine": 7416, + "endLine": 5832, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54238,15 +53865,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource75", + "logicalId": "Resource59", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 7417, + "startLine": 5833, "startColumn": 7, - "endLine": 7417, + "endLine": 5833, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54261,15 +53888,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource76", + "logicalId": "Resource60", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 7514, + "startLine": 5930, "startColumn": 7, - "endLine": 7514, + "endLine": 5930, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54284,15 +53911,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource76", + "logicalId": "Resource60", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 7515, + "startLine": 5931, "startColumn": 7, - "endLine": 7515, + "endLine": 5931, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54307,15 +53934,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource76", + "logicalId": "Resource60", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 7516, + "startLine": 5932, "startColumn": 7, - "endLine": 7516, + "endLine": 5932, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54330,15 +53957,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource77", + "logicalId": "Resource61", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 7613, + "startLine": 6029, "startColumn": 7, - "endLine": 7613, + "endLine": 6029, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54353,15 +53980,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource77", + "logicalId": "Resource61", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 7614, + "startLine": 6030, "startColumn": 7, - "endLine": 7614, + "endLine": 6030, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54376,15 +54003,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource77", + "logicalId": "Resource61", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 7615, + "startLine": 6031, "startColumn": 7, - "endLine": 7615, + "endLine": 6031, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54399,15 +54026,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource78", + "logicalId": "Resource62", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 7712, + "startLine": 6128, "startColumn": 7, - "endLine": 7712, + "endLine": 6128, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54422,15 +54049,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource78", + "logicalId": "Resource62", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 7713, + "startLine": 6129, "startColumn": 7, - "endLine": 7713, + "endLine": 6129, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54445,15 +54072,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource78", + "logicalId": "Resource62", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 7714, + "startLine": 6130, "startColumn": 7, - "endLine": 7714, + "endLine": 6130, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54468,15 +54095,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource79", + "logicalId": "Resource63", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 7811, + "startLine": 6227, "startColumn": 7, - "endLine": 7811, + "endLine": 6227, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54491,15 +54118,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource79", + "logicalId": "Resource63", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 7812, + "startLine": 6228, "startColumn": 7, - "endLine": 7812, + "endLine": 6228, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54514,15 +54141,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource79", + "logicalId": "Resource63", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 7813, + "startLine": 6229, "startColumn": 7, - "endLine": 7813, + "endLine": 6229, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54537,15 +54164,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource80", + "logicalId": "Resource64", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 7910, + "startLine": 6326, "startColumn": 7, - "endLine": 7910, + "endLine": 6326, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54560,15 +54187,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource80", + "logicalId": "Resource64", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 7911, + "startLine": 6327, "startColumn": 7, - "endLine": 7911, + "endLine": 6327, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54583,15 +54210,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource80", + "logicalId": "Resource64", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 7912, + "startLine": 6328, "startColumn": 7, - "endLine": 7912, + "endLine": 6328, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54606,15 +54233,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource81", + "logicalId": "Resource65", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 8009, + "startLine": 6425, "startColumn": 7, - "endLine": 8009, + "endLine": 6425, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54629,15 +54256,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource81", + "logicalId": "Resource65", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 8010, + "startLine": 6426, "startColumn": 7, - "endLine": 8010, + "endLine": 6426, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54652,15 +54279,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource81", + "logicalId": "Resource65", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 8011, + "startLine": 6427, "startColumn": 7, - "endLine": 8011, + "endLine": 6427, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54675,15 +54302,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource82", + "logicalId": "Resource66", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 8108, + "startLine": 6524, "startColumn": 7, - "endLine": 8108, + "endLine": 6524, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54698,15 +54325,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource82", + "logicalId": "Resource66", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 8109, + "startLine": 6525, "startColumn": 7, - "endLine": 8109, + "endLine": 6525, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54721,15 +54348,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource82", + "logicalId": "Resource66", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 8110, + "startLine": 6526, "startColumn": 7, - "endLine": 8110, + "endLine": 6526, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54744,15 +54371,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource83", + "logicalId": "Resource67", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 8207, + "startLine": 6623, "startColumn": 7, - "endLine": 8207, + "endLine": 6623, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54767,15 +54394,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource83", + "logicalId": "Resource67", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 8208, + "startLine": 6624, "startColumn": 7, - "endLine": 8208, + "endLine": 6624, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54790,15 +54417,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource83", + "logicalId": "Resource67", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 8209, + "startLine": 6625, "startColumn": 7, - "endLine": 8209, + "endLine": 6625, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54813,15 +54440,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource84", + "logicalId": "Resource68", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 8306, + "startLine": 6722, "startColumn": 7, - "endLine": 8306, + "endLine": 6722, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54836,15 +54463,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource84", + "logicalId": "Resource68", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 8307, + "startLine": 6723, "startColumn": 7, - "endLine": 8307, + "endLine": 6723, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54859,15 +54486,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource84", + "logicalId": "Resource68", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 8308, + "startLine": 6724, "startColumn": 7, - "endLine": 8308, + "endLine": 6724, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54882,15 +54509,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource85", + "logicalId": "Resource69", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 8405, + "startLine": 6821, "startColumn": 7, - "endLine": 8405, + "endLine": 6821, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54905,15 +54532,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource85", + "logicalId": "Resource69", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 8406, + "startLine": 6822, "startColumn": 7, - "endLine": 8406, + "endLine": 6822, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54928,15 +54555,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource85", + "logicalId": "Resource69", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 8407, + "startLine": 6823, "startColumn": 7, - "endLine": 8407, + "endLine": 6823, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54951,15 +54578,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource86", + "logicalId": "Resource70", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 8504, + "startLine": 6920, "startColumn": 7, - "endLine": 8504, + "endLine": 6920, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54974,15 +54601,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource86", + "logicalId": "Resource70", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 8505, + "startLine": 6921, "startColumn": 7, - "endLine": 8505, + "endLine": 6921, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54997,15 +54624,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource86", + "logicalId": "Resource70", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 8506, + "startLine": 6922, "startColumn": 7, - "endLine": 8506, + "endLine": 6922, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55020,15 +54647,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource87", + "logicalId": "Resource71", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 8603, + "startLine": 7019, "startColumn": 7, - "endLine": 8603, + "endLine": 7019, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55043,15 +54670,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource87", + "logicalId": "Resource71", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 8604, + "startLine": 7020, "startColumn": 7, - "endLine": 8604, + "endLine": 7020, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55066,15 +54693,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource87", + "logicalId": "Resource71", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 8605, + "startLine": 7021, "startColumn": 7, - "endLine": 8605, + "endLine": 7021, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55089,15 +54716,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource88", + "logicalId": "Resource72", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 8702, + "startLine": 7118, "startColumn": 7, - "endLine": 8702, + "endLine": 7118, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55112,15 +54739,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource88", + "logicalId": "Resource72", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 8703, + "startLine": 7119, "startColumn": 7, - "endLine": 8703, + "endLine": 7119, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55135,15 +54762,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource88", + "logicalId": "Resource72", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 8704, + "startLine": 7120, "startColumn": 7, - "endLine": 8704, + "endLine": 7120, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55158,15 +54785,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource89", + "logicalId": "Resource73", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 8801, + "startLine": 7217, "startColumn": 7, - "endLine": 8801, + "endLine": 7217, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55181,15 +54808,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource89", + "logicalId": "Resource73", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 8802, + "startLine": 7218, "startColumn": 7, - "endLine": 8802, + "endLine": 7218, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55204,15 +54831,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource89", + "logicalId": "Resource73", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 8803, + "startLine": 7219, "startColumn": 7, - "endLine": 8803, + "endLine": 7219, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55227,15 +54854,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource90", + "logicalId": "Resource74", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 8900, + "startLine": 7316, "startColumn": 7, - "endLine": 8900, + "endLine": 7316, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55250,15 +54877,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource90", + "logicalId": "Resource74", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 8901, + "startLine": 7317, "startColumn": 7, - "endLine": 8901, + "endLine": 7317, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55273,15 +54900,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource90", + "logicalId": "Resource74", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 8902, + "startLine": 7318, "startColumn": 7, - "endLine": 8902, + "endLine": 7318, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55296,15 +54923,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource91", + "logicalId": "Resource75", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 8999, + "startLine": 7415, "startColumn": 7, - "endLine": 8999, + "endLine": 7415, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55319,15 +54946,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource91", + "logicalId": "Resource75", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 9000, + "startLine": 7416, "startColumn": 7, - "endLine": 9000, + "endLine": 7416, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55342,15 +54969,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource91", + "logicalId": "Resource75", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 9001, + "startLine": 7417, "startColumn": 7, - "endLine": 9001, + "endLine": 7417, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55365,15 +54992,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource92", + "logicalId": "Resource76", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 9098, + "startLine": 7514, "startColumn": 7, - "endLine": 9098, + "endLine": 7514, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55388,15 +55015,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource92", + "logicalId": "Resource76", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 9099, + "startLine": 7515, "startColumn": 7, - "endLine": 9099, + "endLine": 7515, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55411,15 +55038,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource92", + "logicalId": "Resource76", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 9100, + "startLine": 7516, "startColumn": 7, - "endLine": 9100, + "endLine": 7516, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55434,15 +55061,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource93", + "logicalId": "Resource77", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 9197, + "startLine": 7613, "startColumn": 7, - "endLine": 9197, + "endLine": 7613, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55457,15 +55084,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource93", + "logicalId": "Resource77", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 9198, + "startLine": 7614, "startColumn": 7, - "endLine": 9198, + "endLine": 7614, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55480,15 +55107,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource93", + "logicalId": "Resource77", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 9199, + "startLine": 7615, "startColumn": 7, - "endLine": 9199, + "endLine": 7615, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55503,15 +55130,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource94", + "logicalId": "Resource78", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 9296, + "startLine": 7712, "startColumn": 7, - "endLine": 9296, + "endLine": 7712, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55526,15 +55153,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource94", + "logicalId": "Resource78", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 9297, + "startLine": 7713, "startColumn": 7, - "endLine": 9297, + "endLine": 7713, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55549,15 +55176,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource94", + "logicalId": "Resource78", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 9298, + "startLine": 7714, "startColumn": 7, - "endLine": 9298, + "endLine": 7714, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55572,15 +55199,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource95", + "logicalId": "Resource79", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 9395, + "startLine": 7811, "startColumn": 7, - "endLine": 9395, + "endLine": 7811, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55595,15 +55222,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource95", + "logicalId": "Resource79", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 9396, + "startLine": 7812, "startColumn": 7, - "endLine": 9396, + "endLine": 7812, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55618,15 +55245,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource95", + "logicalId": "Resource79", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 9397, + "startLine": 7813, "startColumn": 7, - "endLine": 9397, + "endLine": 7813, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55641,15 +55268,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource96", + "logicalId": "Resource80", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 9494, + "startLine": 7910, "startColumn": 7, - "endLine": 9494, + "endLine": 7910, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55664,15 +55291,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource96", + "logicalId": "Resource80", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 9495, + "startLine": 7911, "startColumn": 7, - "endLine": 9495, + "endLine": 7911, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55687,15 +55314,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource96", + "logicalId": "Resource80", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 9496, + "startLine": 7912, "startColumn": 7, - "endLine": 9496, + "endLine": 7912, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55710,15 +55337,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource97", + "logicalId": "Resource81", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 9593, + "startLine": 8009, "startColumn": 7, - "endLine": 9593, + "endLine": 8009, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55733,15 +55360,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource97", + "logicalId": "Resource81", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 9594, + "startLine": 8010, "startColumn": 7, - "endLine": 9594, + "endLine": 8010, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55756,15 +55383,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource97", + "logicalId": "Resource81", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 9595, + "startLine": 8011, "startColumn": 7, - "endLine": 9595, + "endLine": 8011, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55779,15 +55406,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource98", + "logicalId": "Resource82", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 9692, + "startLine": 8108, "startColumn": 7, - "endLine": 9692, + "endLine": 8108, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55802,15 +55429,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource98", + "logicalId": "Resource82", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 9693, + "startLine": 8109, "startColumn": 7, - "endLine": 9693, + "endLine": 8109, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55825,15 +55452,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource98", + "logicalId": "Resource82", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 9694, + "startLine": 8110, "startColumn": 7, - "endLine": 9694, + "endLine": 8110, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55848,15 +55475,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource99", + "logicalId": "Resource83", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 9791, + "startLine": 8207, "startColumn": 7, - "endLine": 9791, + "endLine": 8207, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55871,15 +55498,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource99", + "logicalId": "Resource83", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 9792, + "startLine": 8208, "startColumn": 7, - "endLine": 9792, + "endLine": 8208, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55894,15 +55521,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource99", + "logicalId": "Resource83", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 9793, + "startLine": 8209, "startColumn": 7, - "endLine": 9793, + "endLine": 8209, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55917,15 +55544,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource100", + "logicalId": "Resource84", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 9890, + "startLine": 8306, "startColumn": 7, - "endLine": 9890, + "endLine": 8306, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55940,15 +55567,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource100", + "logicalId": "Resource84", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 9891, + "startLine": 8307, "startColumn": 7, - "endLine": 9891, + "endLine": 8307, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55963,15 +55590,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource100", + "logicalId": "Resource84", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 9892, + "startLine": 8308, "startColumn": 7, - "endLine": 9892, + "endLine": 8308, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55986,15 +55613,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource101", + "logicalId": "Resource85", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 9989, + "startLine": 8405, "startColumn": 7, - "endLine": 9989, + "endLine": 8405, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56009,15 +55636,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource101", + "logicalId": "Resource85", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 9990, + "startLine": 8406, "startColumn": 7, - "endLine": 9990, + "endLine": 8406, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56032,15 +55659,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource101", + "logicalId": "Resource85", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 9991, + "startLine": 8407, "startColumn": 7, - "endLine": 9991, + "endLine": 8407, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56055,15 +55682,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource102", + "logicalId": "Resource86", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 10088, + "startLine": 8504, "startColumn": 7, - "endLine": 10088, + "endLine": 8504, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56078,15 +55705,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource102", + "logicalId": "Resource86", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 10089, + "startLine": 8505, "startColumn": 7, - "endLine": 10089, + "endLine": 8505, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56101,15 +55728,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource102", + "logicalId": "Resource86", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 10090, + "startLine": 8506, "startColumn": 7, - "endLine": 10090, + "endLine": 8506, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56124,15 +55751,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource103", + "logicalId": "Resource87", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 10187, + "startLine": 8603, "startColumn": 7, - "endLine": 10187, + "endLine": 8603, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56147,15 +55774,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource103", + "logicalId": "Resource87", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 10188, + "startLine": 8604, "startColumn": 7, - "endLine": 10188, + "endLine": 8604, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56170,15 +55797,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource103", + "logicalId": "Resource87", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 10189, + "startLine": 8605, "startColumn": 7, - "endLine": 10189, + "endLine": 8605, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56193,15 +55820,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource104", + "logicalId": "Resource88", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 10286, + "startLine": 8702, "startColumn": 7, - "endLine": 10286, + "endLine": 8702, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56216,15 +55843,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource104", + "logicalId": "Resource88", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 10287, + "startLine": 8703, "startColumn": 7, - "endLine": 10287, + "endLine": 8703, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56239,15 +55866,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource104", + "logicalId": "Resource88", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 10288, + "startLine": 8704, "startColumn": 7, - "endLine": 10288, + "endLine": 8704, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56262,15 +55889,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource105", + "logicalId": "Resource89", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 10385, + "startLine": 8801, "startColumn": 7, - "endLine": 10385, + "endLine": 8801, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56285,15 +55912,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource105", + "logicalId": "Resource89", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 10386, + "startLine": 8802, "startColumn": 7, - "endLine": 10386, + "endLine": 8802, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56308,15 +55935,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource105", + "logicalId": "Resource89", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 10387, + "startLine": 8803, "startColumn": 7, - "endLine": 10387, + "endLine": 8803, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56331,15 +55958,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource106", + "logicalId": "Resource90", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 10484, + "startLine": 8900, "startColumn": 7, - "endLine": 10484, + "endLine": 8900, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56354,15 +55981,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource106", + "logicalId": "Resource90", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 10485, + "startLine": 8901, "startColumn": 7, - "endLine": 10485, + "endLine": 8901, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56377,15 +56004,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource106", + "logicalId": "Resource90", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 10486, + "startLine": 8902, "startColumn": 7, - "endLine": 10486, + "endLine": 8902, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56400,15 +56027,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource107", + "logicalId": "Resource91", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 10583, + "startLine": 8999, "startColumn": 7, - "endLine": 10583, + "endLine": 8999, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56423,15 +56050,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource107", + "logicalId": "Resource91", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 10584, + "startLine": 9000, "startColumn": 7, - "endLine": 10584, + "endLine": 9000, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56446,15 +56073,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource107", + "logicalId": "Resource91", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 10585, + "startLine": 9001, "startColumn": 7, - "endLine": 10585, + "endLine": 9001, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56469,15 +56096,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource108", + "logicalId": "Resource92", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 10682, + "startLine": 9098, "startColumn": 7, - "endLine": 10682, + "endLine": 9098, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56492,15 +56119,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource108", + "logicalId": "Resource92", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 10683, + "startLine": 9099, "startColumn": 7, - "endLine": 10683, + "endLine": 9099, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56515,15 +56142,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource108", + "logicalId": "Resource92", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 10684, + "startLine": 9100, "startColumn": 7, - "endLine": 10684, + "endLine": 9100, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56538,15 +56165,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource109", + "logicalId": "Resource93", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 10781, + "startLine": 9197, "startColumn": 7, - "endLine": 10781, + "endLine": 9197, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56561,15 +56188,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource109", + "logicalId": "Resource93", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 10782, + "startLine": 9198, "startColumn": 7, - "endLine": 10782, + "endLine": 9198, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56584,15 +56211,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource109", + "logicalId": "Resource93", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 10783, + "startLine": 9199, "startColumn": 7, - "endLine": 10783, + "endLine": 9199, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56607,15 +56234,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource110", + "logicalId": "Resource94", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 10880, + "startLine": 9296, "startColumn": 7, - "endLine": 10880, + "endLine": 9296, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56630,15 +56257,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource110", + "logicalId": "Resource94", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 10881, + "startLine": 9297, "startColumn": 7, - "endLine": 10881, + "endLine": 9297, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56653,15 +56280,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource110", + "logicalId": "Resource94", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 10882, + "startLine": 9298, "startColumn": 7, - "endLine": 10882, + "endLine": 9298, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56676,15 +56303,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource111", + "logicalId": "Resource95", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 10979, + "startLine": 9395, "startColumn": 7, - "endLine": 10979, + "endLine": 9395, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56699,15 +56326,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource111", + "logicalId": "Resource95", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 10980, + "startLine": 9396, "startColumn": 7, - "endLine": 10980, + "endLine": 9396, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56722,15 +56349,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource111", + "logicalId": "Resource95", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 10981, + "startLine": 9397, "startColumn": 7, - "endLine": 10981, + "endLine": 9397, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56745,15 +56372,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource112", + "logicalId": "Resource96", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 11078, + "startLine": 9494, "startColumn": 7, - "endLine": 11078, + "endLine": 9494, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56768,15 +56395,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource112", + "logicalId": "Resource96", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 11079, + "startLine": 9495, "startColumn": 7, - "endLine": 11079, + "endLine": 9495, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56791,15 +56418,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource112", + "logicalId": "Resource96", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 11080, + "startLine": 9496, "startColumn": 7, - "endLine": 11080, + "endLine": 9496, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56814,15 +56441,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource113", + "logicalId": "Resource97", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 11177, + "startLine": 9593, "startColumn": 7, - "endLine": 11177, + "endLine": 9593, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56837,15 +56464,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource113", + "logicalId": "Resource97", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 11178, + "startLine": 9594, "startColumn": 7, - "endLine": 11178, + "endLine": 9594, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56860,15 +56487,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource113", + "logicalId": "Resource97", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 11179, + "startLine": 9595, "startColumn": 7, - "endLine": 11179, + "endLine": 9595, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56883,15 +56510,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource114", + "logicalId": "Resource98", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 11276, + "startLine": 9692, "startColumn": 7, - "endLine": 11276, + "endLine": 9692, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56906,15 +56533,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource114", + "logicalId": "Resource98", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 11277, + "startLine": 9693, "startColumn": 7, - "endLine": 11277, + "endLine": 9693, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56929,15 +56556,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource114", + "logicalId": "Resource98", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 11278, + "startLine": 9694, "startColumn": 7, - "endLine": 11278, + "endLine": 9694, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56952,15 +56579,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource115", + "logicalId": "Resource99", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 11375, + "startLine": 9791, "startColumn": 7, - "endLine": 11375, + "endLine": 9791, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56975,15 +56602,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource115", + "logicalId": "Resource99", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 11376, + "startLine": 9792, "startColumn": 7, - "endLine": 11376, + "endLine": 9792, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56998,15 +56625,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource115", + "logicalId": "Resource99", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 11377, + "startLine": 9793, "startColumn": 7, - "endLine": 11377, + "endLine": 9793, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57021,15 +56648,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource116", + "logicalId": "Resource100", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 11474, + "startLine": 9890, "startColumn": 7, - "endLine": 11474, + "endLine": 9890, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57044,15 +56671,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource116", + "logicalId": "Resource100", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 11475, + "startLine": 9891, "startColumn": 7, - "endLine": 11475, + "endLine": 9891, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57067,15 +56694,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource116", + "logicalId": "Resource100", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 11476, + "startLine": 9892, "startColumn": 7, - "endLine": 11476, + "endLine": 9892, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57090,15 +56717,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource117", + "logicalId": "Resource101", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 11573, + "startLine": 9989, "startColumn": 7, - "endLine": 11573, + "endLine": 9989, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57113,15 +56740,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource117", + "logicalId": "Resource101", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 11574, + "startLine": 9990, "startColumn": 7, - "endLine": 11574, + "endLine": 9990, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57136,15 +56763,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource117", + "logicalId": "Resource101", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 11575, + "startLine": 9991, "startColumn": 7, - "endLine": 11575, + "endLine": 9991, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57159,15 +56786,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource118", + "logicalId": "Resource102", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 11672, + "startLine": 10088, "startColumn": 7, - "endLine": 11672, + "endLine": 10088, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57182,15 +56809,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource118", + "logicalId": "Resource102", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 11673, + "startLine": 10089, "startColumn": 7, - "endLine": 11673, + "endLine": 10089, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57205,15 +56832,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource118", + "logicalId": "Resource102", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 11674, + "startLine": 10090, "startColumn": 7, - "endLine": 11674, + "endLine": 10090, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57228,15 +56855,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource119", + "logicalId": "Resource103", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 11771, + "startLine": 10187, "startColumn": 7, - "endLine": 11771, + "endLine": 10187, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57251,15 +56878,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource119", + "logicalId": "Resource103", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 11772, + "startLine": 10188, "startColumn": 7, - "endLine": 11772, + "endLine": 10188, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57274,15 +56901,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource119", + "logicalId": "Resource103", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 11773, + "startLine": 10189, "startColumn": 7, - "endLine": 11773, + "endLine": 10189, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57297,15 +56924,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource120", + "logicalId": "Resource104", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 11870, + "startLine": 10286, "startColumn": 7, - "endLine": 11870, + "endLine": 10286, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57320,15 +56947,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource120", + "logicalId": "Resource104", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 11871, + "startLine": 10287, "startColumn": 7, - "endLine": 11871, + "endLine": 10287, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57343,15 +56970,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource120", + "logicalId": "Resource104", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 11872, + "startLine": 10288, "startColumn": 7, - "endLine": 11872, + "endLine": 10288, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57366,15 +56993,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource121", + "logicalId": "Resource105", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 11969, + "startLine": 10385, "startColumn": 7, - "endLine": 11969, + "endLine": 10385, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57389,15 +57016,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource121", + "logicalId": "Resource105", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 11970, + "startLine": 10386, "startColumn": 7, - "endLine": 11970, + "endLine": 10386, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57412,15 +57039,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource121", + "logicalId": "Resource105", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 11971, + "startLine": 10387, "startColumn": 7, - "endLine": 11971, + "endLine": 10387, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57435,15 +57062,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource122", + "logicalId": "Resource106", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 12068, + "startLine": 10484, "startColumn": 7, - "endLine": 12068, + "endLine": 10484, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57458,15 +57085,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource122", + "logicalId": "Resource106", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 12069, + "startLine": 10485, "startColumn": 7, - "endLine": 12069, + "endLine": 10485, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57481,15 +57108,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource122", + "logicalId": "Resource106", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 12070, + "startLine": 10486, "startColumn": 7, - "endLine": 12070, + "endLine": 10486, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57504,15 +57131,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource123", + "logicalId": "Resource107", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 12167, + "startLine": 10583, "startColumn": 7, - "endLine": 12167, + "endLine": 10583, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57527,15 +57154,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource123", + "logicalId": "Resource107", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 12168, + "startLine": 10584, "startColumn": 7, - "endLine": 12168, + "endLine": 10584, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57550,15 +57177,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource123", + "logicalId": "Resource107", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 12169, + "startLine": 10585, "startColumn": 7, - "endLine": 12169, + "endLine": 10585, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57573,15 +57200,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource124", + "logicalId": "Resource108", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 12266, + "startLine": 10682, "startColumn": 7, - "endLine": 12266, + "endLine": 10682, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57596,15 +57223,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource124", + "logicalId": "Resource108", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 12267, + "startLine": 10683, "startColumn": 7, - "endLine": 12267, + "endLine": 10683, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57619,15 +57246,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource124", + "logicalId": "Resource108", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 12268, + "startLine": 10684, "startColumn": 7, - "endLine": 12268, + "endLine": 10684, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57642,15 +57269,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource125", + "logicalId": "Resource109", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 12365, + "startLine": 10781, "startColumn": 7, - "endLine": 12365, + "endLine": 10781, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57665,15 +57292,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource125", + "logicalId": "Resource109", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 12366, + "startLine": 10782, "startColumn": 7, - "endLine": 12366, + "endLine": 10782, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57688,15 +57315,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource125", + "logicalId": "Resource109", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 12367, + "startLine": 10783, "startColumn": 7, - "endLine": 12367, + "endLine": 10783, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57711,15 +57338,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource126", + "logicalId": "Resource110", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 12464, + "startLine": 10880, "startColumn": 7, - "endLine": 12464, + "endLine": 10880, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57734,15 +57361,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource126", + "logicalId": "Resource110", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 12465, + "startLine": 10881, "startColumn": 7, - "endLine": 12465, + "endLine": 10881, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57757,15 +57384,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource126", + "logicalId": "Resource110", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 12466, + "startLine": 10882, "startColumn": 7, - "endLine": 12466, + "endLine": 10882, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57780,15 +57407,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource127", + "logicalId": "Resource111", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 12563, + "startLine": 10979, "startColumn": 7, - "endLine": 12563, + "endLine": 10979, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57803,15 +57430,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource127", + "logicalId": "Resource111", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 12564, + "startLine": 10980, "startColumn": 7, - "endLine": 12564, + "endLine": 10980, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57826,15 +57453,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource127", + "logicalId": "Resource111", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 12565, + "startLine": 10981, "startColumn": 7, - "endLine": 12565, + "endLine": 10981, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57849,15 +57476,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource128", + "logicalId": "Resource112", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 12662, + "startLine": 11078, "startColumn": 7, - "endLine": 12662, + "endLine": 11078, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57872,15 +57499,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource128", + "logicalId": "Resource112", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 12663, + "startLine": 11079, "startColumn": 7, - "endLine": 12663, + "endLine": 11079, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57895,15 +57522,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource128", + "logicalId": "Resource112", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 12664, + "startLine": 11080, "startColumn": 7, - "endLine": 12664, + "endLine": 11080, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57918,15 +57545,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource129", + "logicalId": "Resource113", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 12761, + "startLine": 11177, "startColumn": 7, - "endLine": 12761, + "endLine": 11177, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57941,15 +57568,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource129", + "logicalId": "Resource113", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 12762, + "startLine": 11178, "startColumn": 7, - "endLine": 12762, + "endLine": 11178, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57964,15 +57591,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource129", + "logicalId": "Resource113", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 12763, + "startLine": 11179, "startColumn": 7, - "endLine": 12763, + "endLine": 11179, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57987,15 +57614,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource130", + "logicalId": "Resource114", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 12860, + "startLine": 11276, "startColumn": 7, - "endLine": 12860, + "endLine": 11276, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58010,15 +57637,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource130", + "logicalId": "Resource114", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 12861, + "startLine": 11277, "startColumn": 7, - "endLine": 12861, + "endLine": 11277, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58033,15 +57660,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource130", + "logicalId": "Resource114", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 12862, + "startLine": 11278, "startColumn": 7, - "endLine": 12862, + "endLine": 11278, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58056,15 +57683,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource131", + "logicalId": "Resource115", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 12959, + "startLine": 11375, "startColumn": 7, - "endLine": 12959, + "endLine": 11375, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58079,15 +57706,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource131", + "logicalId": "Resource115", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 12960, + "startLine": 11376, "startColumn": 7, - "endLine": 12960, + "endLine": 11376, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58102,15 +57729,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource131", + "logicalId": "Resource115", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 12961, + "startLine": 11377, "startColumn": 7, - "endLine": 12961, + "endLine": 11377, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58125,15 +57752,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource132", + "logicalId": "Resource116", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 13058, + "startLine": 11474, "startColumn": 7, - "endLine": 13058, + "endLine": 11474, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58148,15 +57775,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource132", + "logicalId": "Resource116", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 13059, + "startLine": 11475, "startColumn": 7, - "endLine": 13059, + "endLine": 11475, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58171,15 +57798,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource132", + "logicalId": "Resource116", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 13060, + "startLine": 11476, "startColumn": 7, - "endLine": 13060, + "endLine": 11476, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58194,15 +57821,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource133", + "logicalId": "Resource117", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 13157, + "startLine": 11573, "startColumn": 7, - "endLine": 13157, + "endLine": 11573, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58217,15 +57844,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource133", + "logicalId": "Resource117", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 13158, + "startLine": 11574, "startColumn": 7, - "endLine": 13158, + "endLine": 11574, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58240,15 +57867,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource133", + "logicalId": "Resource117", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 13159, + "startLine": 11575, "startColumn": 7, - "endLine": 13159, + "endLine": 11575, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58263,15 +57890,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource134", + "logicalId": "Resource118", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 13256, + "startLine": 11672, "startColumn": 7, - "endLine": 13256, + "endLine": 11672, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58286,15 +57913,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource134", + "logicalId": "Resource118", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 13257, + "startLine": 11673, "startColumn": 7, - "endLine": 13257, + "endLine": 11673, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58309,15 +57936,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource134", + "logicalId": "Resource118", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 13258, + "startLine": 11674, "startColumn": 7, - "endLine": 13258, + "endLine": 11674, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58332,15 +57959,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource135", + "logicalId": "Resource119", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 13355, + "startLine": 11771, "startColumn": 7, - "endLine": 13355, + "endLine": 11771, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58355,15 +57982,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource135", + "logicalId": "Resource119", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 13356, + "startLine": 11772, "startColumn": 7, - "endLine": 13356, + "endLine": 11772, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58378,15 +58005,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource135", + "logicalId": "Resource119", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 13357, + "startLine": 11773, "startColumn": 7, - "endLine": 13357, + "endLine": 11773, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58401,15 +58028,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource136", + "logicalId": "Resource120", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 13454, + "startLine": 11870, "startColumn": 7, - "endLine": 13454, + "endLine": 11870, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58424,15 +58051,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource136", + "logicalId": "Resource120", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 13455, + "startLine": 11871, "startColumn": 7, - "endLine": 13455, + "endLine": 11871, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58447,15 +58074,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource136", + "logicalId": "Resource120", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 13456, + "startLine": 11872, "startColumn": 7, - "endLine": 13456, + "endLine": 11872, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58470,15 +58097,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource137", + "logicalId": "Resource121", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 13553, + "startLine": 11969, "startColumn": 7, - "endLine": 13553, + "endLine": 11969, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58493,15 +58120,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource137", + "logicalId": "Resource121", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 13554, + "startLine": 11970, "startColumn": 7, - "endLine": 13554, + "endLine": 11970, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58516,15 +58143,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource137", + "logicalId": "Resource121", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 13555, + "startLine": 11971, "startColumn": 7, - "endLine": 13555, + "endLine": 11971, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58539,15 +58166,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource138", + "logicalId": "Resource122", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 13652, + "startLine": 12068, "startColumn": 7, - "endLine": 13652, + "endLine": 12068, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58562,15 +58189,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource138", + "logicalId": "Resource122", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 13653, + "startLine": 12069, "startColumn": 7, - "endLine": 13653, + "endLine": 12069, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58585,15 +58212,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource138", + "logicalId": "Resource122", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 13654, + "startLine": 12070, "startColumn": 7, - "endLine": 13654, + "endLine": 12070, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58608,15 +58235,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource139", + "logicalId": "Resource123", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 13751, + "startLine": 12167, "startColumn": 7, - "endLine": 13751, + "endLine": 12167, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58631,15 +58258,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource139", + "logicalId": "Resource123", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 13752, + "startLine": 12168, "startColumn": 7, - "endLine": 13752, + "endLine": 12168, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58654,15 +58281,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource139", + "logicalId": "Resource123", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 13753, + "startLine": 12169, "startColumn": 7, - "endLine": 13753, + "endLine": 12169, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58677,15 +58304,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource140", + "logicalId": "Resource124", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 13850, + "startLine": 12266, "startColumn": 7, - "endLine": 13850, + "endLine": 12266, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58700,15 +58327,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource140", + "logicalId": "Resource124", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 13851, + "startLine": 12267, "startColumn": 7, - "endLine": 13851, + "endLine": 12267, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58723,15 +58350,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource140", + "logicalId": "Resource124", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 13852, + "startLine": 12268, "startColumn": 7, - "endLine": 13852, + "endLine": 12268, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58746,15 +58373,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource141", + "logicalId": "Resource125", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 13949, + "startLine": 12365, "startColumn": 7, - "endLine": 13949, + "endLine": 12365, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58769,15 +58396,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource141", + "logicalId": "Resource125", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 13950, + "startLine": 12366, "startColumn": 7, - "endLine": 13950, + "endLine": 12366, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58792,15 +58419,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource141", + "logicalId": "Resource125", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 13951, + "startLine": 12367, "startColumn": 7, - "endLine": 13951, + "endLine": 12367, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58815,15 +58442,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource142", + "logicalId": "Resource126", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 14048, + "startLine": 12464, "startColumn": 7, - "endLine": 14048, + "endLine": 12464, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58838,15 +58465,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource142", + "logicalId": "Resource126", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 14049, + "startLine": 12465, "startColumn": 7, - "endLine": 14049, + "endLine": 12465, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58861,15 +58488,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource142", + "logicalId": "Resource126", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 14050, + "startLine": 12466, "startColumn": 7, - "endLine": 14050, + "endLine": 12466, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58884,15 +58511,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource143", + "logicalId": "Resource127", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 14147, + "startLine": 12563, "startColumn": 7, - "endLine": 14147, + "endLine": 12563, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58907,15 +58534,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource143", + "logicalId": "Resource127", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 14148, + "startLine": 12564, "startColumn": 7, - "endLine": 14148, + "endLine": 12564, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58930,15 +58557,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource143", + "logicalId": "Resource127", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 14149, + "startLine": 12565, "startColumn": 7, - "endLine": 14149, + "endLine": 12565, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58953,15 +58580,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource144", + "logicalId": "Resource128", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 14246, + "startLine": 12662, "startColumn": 7, - "endLine": 14246, + "endLine": 12662, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58976,15 +58603,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource144", + "logicalId": "Resource128", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 14247, + "startLine": 12663, "startColumn": 7, - "endLine": 14247, + "endLine": 12663, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58999,15 +58626,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource144", + "logicalId": "Resource128", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 14248, + "startLine": 12664, "startColumn": 7, - "endLine": 14248, + "endLine": 12664, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59022,15 +58649,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource145", + "logicalId": "Resource129", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 14345, + "startLine": 12761, "startColumn": 7, - "endLine": 14345, + "endLine": 12761, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59045,15 +58672,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource145", + "logicalId": "Resource129", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 14346, + "startLine": 12762, "startColumn": 7, - "endLine": 14346, + "endLine": 12762, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59068,15 +58695,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource145", + "logicalId": "Resource129", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 14347, + "startLine": 12763, "startColumn": 7, - "endLine": 14347, + "endLine": 12763, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59091,15 +58718,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource146", + "logicalId": "Resource130", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 14444, + "startLine": 12860, "startColumn": 7, - "endLine": 14444, + "endLine": 12860, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59114,15 +58741,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource146", + "logicalId": "Resource130", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 14445, + "startLine": 12861, "startColumn": 7, - "endLine": 14445, + "endLine": 12861, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59137,15 +58764,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource146", + "logicalId": "Resource130", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 14446, + "startLine": 12862, "startColumn": 7, - "endLine": 14446, + "endLine": 12862, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59160,15 +58787,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource147", + "logicalId": "Resource131", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 14543, + "startLine": 12959, "startColumn": 7, - "endLine": 14543, + "endLine": 12959, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59183,15 +58810,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource147", + "logicalId": "Resource131", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 14544, + "startLine": 12960, "startColumn": 7, - "endLine": 14544, + "endLine": 12960, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59206,15 +58833,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource147", + "logicalId": "Resource131", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 14545, + "startLine": 12961, "startColumn": 7, - "endLine": 14545, + "endLine": 12961, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59229,15 +58856,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource148", + "logicalId": "Resource132", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 14642, + "startLine": 13058, "startColumn": 7, - "endLine": 14642, + "endLine": 13058, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59252,15 +58879,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource148", + "logicalId": "Resource132", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 14643, + "startLine": 13059, "startColumn": 7, - "endLine": 14643, + "endLine": 13059, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59275,15 +58902,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource148", + "logicalId": "Resource132", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 14644, + "startLine": 13060, "startColumn": 7, - "endLine": 14644, + "endLine": 13060, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59298,15 +58925,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource149", + "logicalId": "Resource133", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 14741, + "startLine": 13157, "startColumn": 7, - "endLine": 14741, + "endLine": 13157, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59321,15 +58948,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource149", + "logicalId": "Resource133", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 14742, + "startLine": 13158, "startColumn": 7, - "endLine": 14742, + "endLine": 13158, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59344,15 +58971,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource149", + "logicalId": "Resource133", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 14743, + "startLine": 13159, "startColumn": 7, - "endLine": 14743, + "endLine": 13159, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59367,15 +58994,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource150", + "logicalId": "Resource134", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 14840, + "startLine": 13256, "startColumn": 7, - "endLine": 14840, + "endLine": 13256, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59390,15 +59017,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource150", + "logicalId": "Resource134", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 14841, + "startLine": 13257, "startColumn": 7, - "endLine": 14841, + "endLine": 13257, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59413,15 +59040,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource150", + "logicalId": "Resource134", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 14842, + "startLine": 13258, "startColumn": 7, - "endLine": 14842, + "endLine": 13258, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59436,15 +59063,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource151", + "logicalId": "Resource135", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 14939, + "startLine": 13355, "startColumn": 7, - "endLine": 14939, + "endLine": 13355, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59459,15 +59086,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource151", + "logicalId": "Resource135", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 14940, + "startLine": 13356, "startColumn": 7, - "endLine": 14940, + "endLine": 13356, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59482,15 +59109,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource151", + "logicalId": "Resource135", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 14941, + "startLine": 13357, "startColumn": 7, - "endLine": 14941, + "endLine": 13357, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59505,15 +59132,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource152", + "logicalId": "Resource136", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 15038, + "startLine": 13454, "startColumn": 7, - "endLine": 15038, + "endLine": 13454, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59528,15 +59155,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource152", + "logicalId": "Resource136", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 15039, + "startLine": 13455, "startColumn": 7, - "endLine": 15039, + "endLine": 13455, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59551,15 +59178,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource152", + "logicalId": "Resource136", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 15040, + "startLine": 13456, "startColumn": 7, - "endLine": 15040, + "endLine": 13456, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59574,15 +59201,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource153", + "logicalId": "Resource137", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 15137, + "startLine": 13553, "startColumn": 7, - "endLine": 15137, + "endLine": 13553, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59597,15 +59224,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource153", + "logicalId": "Resource137", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 15138, + "startLine": 13554, "startColumn": 7, - "endLine": 15138, + "endLine": 13554, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59620,15 +59247,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource153", + "logicalId": "Resource137", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 15139, + "startLine": 13555, "startColumn": 7, - "endLine": 15139, + "endLine": 13555, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59643,15 +59270,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource154", + "logicalId": "Resource138", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 15236, + "startLine": 13652, "startColumn": 7, - "endLine": 15236, + "endLine": 13652, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59666,15 +59293,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource154", + "logicalId": "Resource138", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 15237, + "startLine": 13653, "startColumn": 7, - "endLine": 15237, + "endLine": 13653, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59689,15 +59316,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource154", + "logicalId": "Resource138", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 15238, + "startLine": 13654, "startColumn": 7, - "endLine": 15238, + "endLine": 13654, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59712,15 +59339,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource155", + "logicalId": "Resource139", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 15335, + "startLine": 13751, "startColumn": 7, - "endLine": 15335, + "endLine": 13751, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59735,15 +59362,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource155", + "logicalId": "Resource139", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 15336, + "startLine": 13752, "startColumn": 7, - "endLine": 15336, + "endLine": 13752, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59758,15 +59385,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource155", + "logicalId": "Resource139", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 15337, + "startLine": 13753, "startColumn": 7, - "endLine": 15337, + "endLine": 13753, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59781,15 +59408,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource156", + "logicalId": "Resource140", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 15434, + "startLine": 13850, "startColumn": 7, - "endLine": 15434, + "endLine": 13850, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59804,15 +59431,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource156", + "logicalId": "Resource140", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 15435, + "startLine": 13851, "startColumn": 7, - "endLine": 15435, + "endLine": 13851, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59827,15 +59454,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource156", + "logicalId": "Resource140", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 15436, + "startLine": 13852, "startColumn": 7, - "endLine": 15436, + "endLine": 13852, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59850,15 +59477,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource157", + "logicalId": "Resource141", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 15533, + "startLine": 13949, "startColumn": 7, - "endLine": 15533, + "endLine": 13949, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59873,15 +59500,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource157", + "logicalId": "Resource141", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 15534, + "startLine": 13950, "startColumn": 7, - "endLine": 15534, + "endLine": 13950, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59896,15 +59523,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource157", + "logicalId": "Resource141", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 15535, + "startLine": 13951, "startColumn": 7, - "endLine": 15535, + "endLine": 13951, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59919,15 +59546,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource158", + "logicalId": "Resource142", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 15632, + "startLine": 14048, "startColumn": 7, - "endLine": 15632, + "endLine": 14048, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59942,15 +59569,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource158", + "logicalId": "Resource142", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 15633, + "startLine": 14049, "startColumn": 7, - "endLine": 15633, + "endLine": 14049, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59965,15 +59592,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource158", + "logicalId": "Resource142", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 15634, + "startLine": 14050, "startColumn": 7, - "endLine": 15634, + "endLine": 14050, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59988,15 +59615,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource159", + "logicalId": "Resource143", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 15731, + "startLine": 14147, "startColumn": 7, - "endLine": 15731, + "endLine": 14147, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60011,15 +59638,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource159", + "logicalId": "Resource143", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 15732, + "startLine": 14148, "startColumn": 7, - "endLine": 15732, + "endLine": 14148, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60034,15 +59661,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource159", + "logicalId": "Resource143", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 15733, + "startLine": 14149, "startColumn": 7, - "endLine": 15733, + "endLine": 14149, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60057,15 +59684,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource160", + "logicalId": "Resource144", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 15830, + "startLine": 14246, "startColumn": 7, - "endLine": 15830, + "endLine": 14246, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60080,15 +59707,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource160", + "logicalId": "Resource144", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 15831, + "startLine": 14247, "startColumn": 7, - "endLine": 15831, + "endLine": 14247, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60103,15 +59730,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource160", + "logicalId": "Resource144", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 15832, + "startLine": 14248, "startColumn": 7, - "endLine": 15832, + "endLine": 14248, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60126,15 +59753,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource161", + "logicalId": "Resource145", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 15929, + "startLine": 14345, "startColumn": 7, - "endLine": 15929, + "endLine": 14345, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60149,15 +59776,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource161", + "logicalId": "Resource145", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 15930, + "startLine": 14346, "startColumn": 7, - "endLine": 15930, + "endLine": 14346, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60172,15 +59799,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource161", + "logicalId": "Resource145", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 15931, + "startLine": 14347, "startColumn": 7, - "endLine": 15931, + "endLine": 14347, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60195,15 +59822,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource162", + "logicalId": "Resource146", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 16028, + "startLine": 14444, "startColumn": 7, - "endLine": 16028, + "endLine": 14444, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60218,15 +59845,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource162", + "logicalId": "Resource146", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 16029, + "startLine": 14445, "startColumn": 7, - "endLine": 16029, + "endLine": 14445, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60241,15 +59868,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource162", + "logicalId": "Resource146", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 16030, + "startLine": 14446, "startColumn": 7, - "endLine": 16030, + "endLine": 14446, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60264,15 +59891,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource163", + "logicalId": "Resource147", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 16127, + "startLine": 14543, "startColumn": 7, - "endLine": 16127, + "endLine": 14543, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60287,15 +59914,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource163", + "logicalId": "Resource147", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 16128, + "startLine": 14544, "startColumn": 7, - "endLine": 16128, + "endLine": 14544, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60310,15 +59937,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource163", + "logicalId": "Resource147", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 16129, + "startLine": 14545, "startColumn": 7, - "endLine": 16129, + "endLine": 14545, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60333,15 +59960,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource164", + "logicalId": "Resource148", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 16226, + "startLine": 14642, "startColumn": 7, - "endLine": 16226, + "endLine": 14642, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60356,15 +59983,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource164", + "logicalId": "Resource148", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 16227, + "startLine": 14643, "startColumn": 7, - "endLine": 16227, + "endLine": 14643, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60379,15 +60006,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource164", + "logicalId": "Resource148", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 16228, + "startLine": 14644, "startColumn": 7, - "endLine": 16228, + "endLine": 14644, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60402,15 +60029,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource165", + "logicalId": "Resource149", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 16325, + "startLine": 14741, "startColumn": 7, - "endLine": 16325, + "endLine": 14741, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60425,15 +60052,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource165", + "logicalId": "Resource149", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 16326, + "startLine": 14742, "startColumn": 7, - "endLine": 16326, + "endLine": 14742, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60448,15 +60075,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource165", + "logicalId": "Resource149", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 16327, + "startLine": 14743, "startColumn": 7, - "endLine": 16327, + "endLine": 14743, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60471,15 +60098,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource166", + "logicalId": "Resource150", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 16424, + "startLine": 14840, "startColumn": 7, - "endLine": 16424, + "endLine": 14840, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60494,15 +60121,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource166", + "logicalId": "Resource150", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 16425, + "startLine": 14841, "startColumn": 7, - "endLine": 16425, + "endLine": 14841, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60517,15 +60144,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource166", + "logicalId": "Resource150", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 16426, + "startLine": 14842, "startColumn": 7, - "endLine": 16426, + "endLine": 14842, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60540,15 +60167,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource167", + "logicalId": "Resource151", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 16523, + "startLine": 14939, "startColumn": 7, - "endLine": 16523, + "endLine": 14939, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60563,15 +60190,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource167", + "logicalId": "Resource151", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 16524, + "startLine": 14940, "startColumn": 7, - "endLine": 16524, + "endLine": 14940, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60586,15 +60213,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource167", + "logicalId": "Resource151", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 16525, + "startLine": 14941, "startColumn": 7, - "endLine": 16525, + "endLine": 14941, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60609,15 +60236,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource168", + "logicalId": "Resource152", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 16622, + "startLine": 15038, "startColumn": 7, - "endLine": 16622, + "endLine": 15038, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60632,15 +60259,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource168", + "logicalId": "Resource152", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 16623, + "startLine": 15039, "startColumn": 7, - "endLine": 16623, + "endLine": 15039, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60655,15 +60282,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource168", + "logicalId": "Resource152", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 16624, + "startLine": 15040, "startColumn": 7, - "endLine": 16624, + "endLine": 15040, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60678,15 +60305,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource169", + "logicalId": "Resource153", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 16721, + "startLine": 15137, "startColumn": 7, - "endLine": 16721, + "endLine": 15137, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60701,15 +60328,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource169", + "logicalId": "Resource153", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 16722, + "startLine": 15138, "startColumn": 7, - "endLine": 16722, + "endLine": 15138, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60724,15 +60351,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource169", + "logicalId": "Resource153", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 16723, + "startLine": 15139, "startColumn": 7, - "endLine": 16723, + "endLine": 15139, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60747,15 +60374,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource170", + "logicalId": "Resource154", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 16820, + "startLine": 15236, "startColumn": 7, - "endLine": 16820, + "endLine": 15236, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60770,15 +60397,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource170", + "logicalId": "Resource154", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 16821, + "startLine": 15237, "startColumn": 7, - "endLine": 16821, + "endLine": 15237, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60793,15 +60420,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource170", + "logicalId": "Resource154", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 16822, + "startLine": 15238, "startColumn": 7, - "endLine": 16822, + "endLine": 15238, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60816,15 +60443,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource171", + "logicalId": "Resource155", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 16919, + "startLine": 15335, "startColumn": 7, - "endLine": 16919, + "endLine": 15335, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60839,15 +60466,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource171", + "logicalId": "Resource155", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 16920, + "startLine": 15336, "startColumn": 7, - "endLine": 16920, + "endLine": 15336, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60862,15 +60489,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource171", + "logicalId": "Resource155", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 16921, + "startLine": 15337, "startColumn": 7, - "endLine": 16921, + "endLine": 15337, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60885,15 +60512,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource172", + "logicalId": "Resource156", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 17018, + "startLine": 15434, "startColumn": 7, - "endLine": 17018, + "endLine": 15434, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60908,15 +60535,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource172", + "logicalId": "Resource156", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 17019, + "startLine": 15435, "startColumn": 7, - "endLine": 17019, + "endLine": 15435, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60931,15 +60558,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource172", + "logicalId": "Resource156", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 17020, + "startLine": 15436, "startColumn": 7, - "endLine": 17020, + "endLine": 15436, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60954,15 +60581,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource173", + "logicalId": "Resource157", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 17117, + "startLine": 15533, "startColumn": 7, - "endLine": 17117, + "endLine": 15533, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60977,15 +60604,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource173", + "logicalId": "Resource157", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 17118, + "startLine": 15534, "startColumn": 7, - "endLine": 17118, + "endLine": 15534, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61000,15 +60627,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource173", + "logicalId": "Resource157", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 17119, + "startLine": 15535, "startColumn": 7, - "endLine": 17119, + "endLine": 15535, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61023,15 +60650,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource174", + "logicalId": "Resource158", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 17216, + "startLine": 15632, "startColumn": 7, - "endLine": 17216, + "endLine": 15632, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61046,15 +60673,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource174", + "logicalId": "Resource158", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 17217, + "startLine": 15633, "startColumn": 7, - "endLine": 17217, + "endLine": 15633, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61069,15 +60696,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource174", + "logicalId": "Resource158", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 17218, + "startLine": 15634, "startColumn": 7, - "endLine": 17218, + "endLine": 15634, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61092,15 +60719,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource175", + "logicalId": "Resource159", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 17315, + "startLine": 15731, "startColumn": 7, - "endLine": 17315, + "endLine": 15731, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61115,15 +60742,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource175", + "logicalId": "Resource159", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 17316, + "startLine": 15732, "startColumn": 7, - "endLine": 17316, + "endLine": 15732, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61138,15 +60765,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource175", + "logicalId": "Resource159", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 17317, + "startLine": 15733, "startColumn": 7, - "endLine": 17317, + "endLine": 15733, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61161,15 +60788,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource176", + "logicalId": "Resource160", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 17414, + "startLine": 15830, "startColumn": 7, - "endLine": 17414, + "endLine": 15830, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61184,15 +60811,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource176", + "logicalId": "Resource160", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 17415, + "startLine": 15831, "startColumn": 7, - "endLine": 17415, + "endLine": 15831, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61207,15 +60834,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource176", + "logicalId": "Resource160", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 17416, + "startLine": 15832, "startColumn": 7, - "endLine": 17416, + "endLine": 15832, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61230,15 +60857,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource177", + "logicalId": "Resource161", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 17513, + "startLine": 15929, "startColumn": 7, - "endLine": 17513, + "endLine": 15929, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61253,15 +60880,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource177", + "logicalId": "Resource161", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 17514, + "startLine": 15930, "startColumn": 7, - "endLine": 17514, + "endLine": 15930, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61276,15 +60903,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource177", + "logicalId": "Resource161", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 17515, + "startLine": 15931, "startColumn": 7, - "endLine": 17515, + "endLine": 15931, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61299,15 +60926,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource178", + "logicalId": "Resource162", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 17612, + "startLine": 16028, "startColumn": 7, - "endLine": 17612, + "endLine": 16028, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61322,15 +60949,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource178", + "logicalId": "Resource162", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 17613, + "startLine": 16029, "startColumn": 7, - "endLine": 17613, + "endLine": 16029, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61345,15 +60972,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource178", + "logicalId": "Resource162", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 17614, + "startLine": 16030, "startColumn": 7, - "endLine": 17614, + "endLine": 16030, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61368,15 +60995,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource179", + "logicalId": "Resource163", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 17711, + "startLine": 16127, "startColumn": 7, - "endLine": 17711, + "endLine": 16127, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61391,15 +61018,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource179", + "logicalId": "Resource163", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 17712, + "startLine": 16128, "startColumn": 7, - "endLine": 17712, + "endLine": 16128, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61414,15 +61041,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource179", + "logicalId": "Resource163", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 17713, + "startLine": 16129, "startColumn": 7, - "endLine": 17713, + "endLine": 16129, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61437,15 +61064,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource180", + "logicalId": "Resource164", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 17810, + "startLine": 16226, "startColumn": 7, - "endLine": 17810, + "endLine": 16226, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61460,15 +61087,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource180", + "logicalId": "Resource164", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 17811, + "startLine": 16227, "startColumn": 7, - "endLine": 17811, + "endLine": 16227, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61483,15 +61110,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource180", + "logicalId": "Resource164", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 17812, + "startLine": 16228, "startColumn": 7, - "endLine": 17812, + "endLine": 16228, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61506,15 +61133,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource181", + "logicalId": "Resource165", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 17909, + "startLine": 16325, "startColumn": 7, - "endLine": 17909, + "endLine": 16325, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61529,15 +61156,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource181", + "logicalId": "Resource165", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 17910, + "startLine": 16326, "startColumn": 7, - "endLine": 17910, + "endLine": 16326, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61552,15 +61179,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource181", + "logicalId": "Resource165", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 17911, + "startLine": 16327, "startColumn": 7, - "endLine": 17911, + "endLine": 16327, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61575,15 +61202,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource182", + "logicalId": "Resource166", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 18008, + "startLine": 16424, "startColumn": 7, - "endLine": 18008, + "endLine": 16424, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61598,15 +61225,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource182", + "logicalId": "Resource166", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 18009, + "startLine": 16425, "startColumn": 7, - "endLine": 18009, + "endLine": 16425, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61621,15 +61248,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource182", + "logicalId": "Resource166", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 18010, + "startLine": 16426, "startColumn": 7, - "endLine": 18010, + "endLine": 16426, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61644,15 +61271,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource183", + "logicalId": "Resource167", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 18107, + "startLine": 16523, "startColumn": 7, - "endLine": 18107, + "endLine": 16523, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61667,15 +61294,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource183", + "logicalId": "Resource167", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 18108, + "startLine": 16524, "startColumn": 7, - "endLine": 18108, + "endLine": 16524, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61690,15 +61317,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource183", + "logicalId": "Resource167", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 18109, + "startLine": 16525, "startColumn": 7, - "endLine": 18109, + "endLine": 16525, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61713,15 +61340,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource184", + "logicalId": "Resource168", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 18206, + "startLine": 16622, "startColumn": 7, - "endLine": 18206, + "endLine": 16622, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61736,15 +61363,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource184", + "logicalId": "Resource168", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 18207, + "startLine": 16623, "startColumn": 7, - "endLine": 18207, + "endLine": 16623, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61759,15 +61386,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource184", + "logicalId": "Resource168", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 18208, + "startLine": 16624, "startColumn": 7, - "endLine": 18208, + "endLine": 16624, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61782,15 +61409,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource185", + "logicalId": "Resource169", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 18305, + "startLine": 16721, "startColumn": 7, - "endLine": 18305, + "endLine": 16721, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61805,15 +61432,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource185", + "logicalId": "Resource169", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 18306, + "startLine": 16722, "startColumn": 7, - "endLine": 18306, + "endLine": 16722, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61828,15 +61455,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource185", + "logicalId": "Resource169", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 18307, + "startLine": 16723, "startColumn": 7, - "endLine": 18307, + "endLine": 16723, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61851,15 +61478,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource186", + "logicalId": "Resource170", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 18404, + "startLine": 16820, "startColumn": 7, - "endLine": 18404, + "endLine": 16820, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61874,15 +61501,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource186", + "logicalId": "Resource170", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 18405, + "startLine": 16821, "startColumn": 7, - "endLine": 18405, + "endLine": 16821, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61897,15 +61524,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource186", + "logicalId": "Resource170", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 18406, + "startLine": 16822, "startColumn": 7, - "endLine": 18406, + "endLine": 16822, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61920,15 +61547,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource187", + "logicalId": "Resource171", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 18503, + "startLine": 16919, "startColumn": 7, - "endLine": 18503, + "endLine": 16919, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61943,15 +61570,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource187", + "logicalId": "Resource171", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 18504, + "startLine": 16920, "startColumn": 7, - "endLine": 18504, + "endLine": 16920, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61966,15 +61593,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource187", + "logicalId": "Resource171", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 18505, + "startLine": 16921, "startColumn": 7, - "endLine": 18505, + "endLine": 16921, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61989,15 +61616,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource188", + "logicalId": "Resource172", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 18602, + "startLine": 17018, "startColumn": 7, - "endLine": 18602, + "endLine": 17018, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62012,15 +61639,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource188", + "logicalId": "Resource172", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 18603, + "startLine": 17019, "startColumn": 7, - "endLine": 18603, + "endLine": 17019, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62035,15 +61662,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource188", + "logicalId": "Resource172", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 18604, + "startLine": 17020, "startColumn": 7, - "endLine": 18604, + "endLine": 17020, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62058,15 +61685,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource189", + "logicalId": "Resource173", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 18701, + "startLine": 17117, "startColumn": 7, - "endLine": 18701, + "endLine": 17117, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62081,15 +61708,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource189", + "logicalId": "Resource173", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 18702, + "startLine": 17118, "startColumn": 7, - "endLine": 18702, + "endLine": 17118, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62104,15 +61731,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource189", + "logicalId": "Resource173", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 18703, + "startLine": 17119, "startColumn": 7, - "endLine": 18703, + "endLine": 17119, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62127,15 +61754,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource190", + "logicalId": "Resource174", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 18800, + "startLine": 17216, "startColumn": 7, - "endLine": 18800, + "endLine": 17216, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62150,15 +61777,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource190", + "logicalId": "Resource174", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 18801, + "startLine": 17217, "startColumn": 7, - "endLine": 18801, + "endLine": 17217, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62173,15 +61800,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource190", + "logicalId": "Resource174", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 18802, + "startLine": 17218, "startColumn": 7, - "endLine": 18802, + "endLine": 17218, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62196,15 +61823,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource191", + "logicalId": "Resource175", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 18899, + "startLine": 17315, "startColumn": 7, - "endLine": 18899, + "endLine": 17315, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62219,15 +61846,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource191", + "logicalId": "Resource175", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 18900, + "startLine": 17316, "startColumn": 7, - "endLine": 18900, + "endLine": 17316, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62242,15 +61869,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource191", + "logicalId": "Resource175", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 18901, + "startLine": 17317, "startColumn": 7, - "endLine": 18901, + "endLine": 17317, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62265,15 +61892,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource192", + "logicalId": "Resource176", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 18998, + "startLine": 17414, "startColumn": 7, - "endLine": 18998, + "endLine": 17414, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62288,15 +61915,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource192", + "logicalId": "Resource176", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 18999, + "startLine": 17415, "startColumn": 7, - "endLine": 18999, + "endLine": 17415, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62311,15 +61938,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource192", + "logicalId": "Resource176", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 19000, + "startLine": 17416, "startColumn": 7, - "endLine": 19000, + "endLine": 17416, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62334,15 +61961,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource193", + "logicalId": "Resource177", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 19097, + "startLine": 17513, "startColumn": 7, - "endLine": 19097, + "endLine": 17513, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62357,15 +61984,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource193", + "logicalId": "Resource177", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 19098, + "startLine": 17514, "startColumn": 7, - "endLine": 19098, + "endLine": 17514, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62380,15 +62007,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource193", + "logicalId": "Resource177", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 19099, + "startLine": 17515, "startColumn": 7, - "endLine": 19099, + "endLine": 17515, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62403,15 +62030,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource194", + "logicalId": "Resource178", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 19196, + "startLine": 17612, "startColumn": 7, - "endLine": 19196, + "endLine": 17612, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62426,15 +62053,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource194", + "logicalId": "Resource178", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 19197, + "startLine": 17613, "startColumn": 7, - "endLine": 19197, + "endLine": 17613, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62449,15 +62076,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource194", + "logicalId": "Resource178", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 19198, + "startLine": 17614, "startColumn": 7, - "endLine": 19198, + "endLine": 17614, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62472,15 +62099,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource195", + "logicalId": "Resource179", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 19295, + "startLine": 17711, "startColumn": 7, - "endLine": 19295, + "endLine": 17711, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62495,15 +62122,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource195", + "logicalId": "Resource179", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 19296, + "startLine": 17712, "startColumn": 7, - "endLine": 19296, + "endLine": 17712, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62518,15 +62145,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource195", + "logicalId": "Resource179", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 19297, + "startLine": 17713, "startColumn": 7, - "endLine": 19297, + "endLine": 17713, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62541,15 +62168,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource196", + "logicalId": "Resource180", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 19394, + "startLine": 17810, "startColumn": 7, - "endLine": 19394, + "endLine": 17810, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62564,15 +62191,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource196", + "logicalId": "Resource180", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 19395, + "startLine": 17811, "startColumn": 7, - "endLine": 19395, + "endLine": 17811, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62587,15 +62214,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource196", + "logicalId": "Resource180", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 19396, + "startLine": 17812, "startColumn": 7, - "endLine": 19396, + "endLine": 17812, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62610,15 +62237,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource197", + "logicalId": "Resource181", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 19493, + "startLine": 17909, "startColumn": 7, - "endLine": 19493, + "endLine": 17909, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62633,15 +62260,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource197", + "logicalId": "Resource181", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 19494, + "startLine": 17910, "startColumn": 7, - "endLine": 19494, + "endLine": 17910, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62656,15 +62283,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource197", + "logicalId": "Resource181", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 19495, + "startLine": 17911, "startColumn": 7, - "endLine": 19495, + "endLine": 17911, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62679,15 +62306,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource198", + "logicalId": "Resource182", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 19592, + "startLine": 18008, "startColumn": 7, - "endLine": 19592, + "endLine": 18008, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62702,15 +62329,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource198", + "logicalId": "Resource182", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 19593, + "startLine": 18009, "startColumn": 7, - "endLine": 19593, + "endLine": 18009, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62725,15 +62352,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource198", + "logicalId": "Resource182", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 19594, + "startLine": 18010, "startColumn": 7, - "endLine": 19594, + "endLine": 18010, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62748,15 +62375,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource199", + "logicalId": "Resource183", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 19691, + "startLine": 18107, "startColumn": 7, - "endLine": 19691, + "endLine": 18107, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62771,15 +62398,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource199", + "logicalId": "Resource183", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 19692, + "startLine": 18108, "startColumn": 7, - "endLine": 19692, + "endLine": 18108, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62794,15 +62421,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource199", + "logicalId": "Resource183", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 19693, + "startLine": 18109, "startColumn": 7, - "endLine": 19693, + "endLine": 18109, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62817,15 +62444,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource200", + "logicalId": "Resource184", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 19790, + "startLine": 18206, "startColumn": 7, - "endLine": 19790, + "endLine": 18206, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62840,15 +62467,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource200", + "logicalId": "Resource184", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 19791, + "startLine": 18207, "startColumn": 7, - "endLine": 19791, + "endLine": 18207, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62863,15 +62490,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource200", + "logicalId": "Resource184", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 19792, + "startLine": 18208, "startColumn": 7, - "endLine": 19792, + "endLine": 18208, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62886,15 +62513,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource201", + "logicalId": "Resource185", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 19889, + "startLine": 18305, "startColumn": 7, - "endLine": 19889, + "endLine": 18305, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62909,15 +62536,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource201", + "logicalId": "Resource185", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 19890, + "startLine": 18306, "startColumn": 7, - "endLine": 19890, + "endLine": 18306, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62932,15 +62559,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource201", + "logicalId": "Resource185", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 19891, + "startLine": 18307, "startColumn": 7, - "endLine": 19891, + "endLine": 18307, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62955,15 +62582,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource202", + "logicalId": "Resource186", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 19988, + "startLine": 18404, "startColumn": 7, - "endLine": 19988, + "endLine": 18404, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62978,15 +62605,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource202", + "logicalId": "Resource186", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 19989, + "startLine": 18405, "startColumn": 7, - "endLine": 19989, + "endLine": 18405, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63001,15 +62628,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource202", + "logicalId": "Resource186", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 19990, + "startLine": 18406, "startColumn": 7, - "endLine": 19990, + "endLine": 18406, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63024,15 +62651,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource203", + "logicalId": "Resource187", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 20087, + "startLine": 18503, "startColumn": 7, - "endLine": 20087, + "endLine": 18503, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63047,15 +62674,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource203", + "logicalId": "Resource187", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 20088, + "startLine": 18504, "startColumn": 7, - "endLine": 20088, + "endLine": 18504, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63070,15 +62697,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource203", + "logicalId": "Resource187", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 20089, + "startLine": 18505, "startColumn": 7, - "endLine": 20089, + "endLine": 18505, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63093,15 +62720,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource204", + "logicalId": "Resource188", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 20186, + "startLine": 18602, "startColumn": 7, - "endLine": 20186, + "endLine": 18602, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63116,15 +62743,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource204", + "logicalId": "Resource188", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 20187, + "startLine": 18603, "startColumn": 7, - "endLine": 20187, + "endLine": 18603, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63139,15 +62766,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource204", + "logicalId": "Resource188", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 20188, + "startLine": 18604, "startColumn": 7, - "endLine": 20188, + "endLine": 18604, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63162,15 +62789,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource205", + "logicalId": "Resource189", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 20285, + "startLine": 18701, "startColumn": 7, - "endLine": 20285, + "endLine": 18701, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63185,15 +62812,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource205", + "logicalId": "Resource189", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 20286, + "startLine": 18702, "startColumn": 7, - "endLine": 20286, + "endLine": 18702, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63208,15 +62835,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource205", + "logicalId": "Resource189", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 20287, + "startLine": 18703, "startColumn": 7, - "endLine": 20287, + "endLine": 18703, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63231,15 +62858,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource206", + "logicalId": "Resource190", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 20384, + "startLine": 18800, "startColumn": 7, - "endLine": 20384, + "endLine": 18800, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63254,15 +62881,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource206", + "logicalId": "Resource190", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 20385, + "startLine": 18801, "startColumn": 7, - "endLine": 20385, + "endLine": 18801, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63277,15 +62904,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource206", + "logicalId": "Resource190", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 20386, + "startLine": 18802, "startColumn": 7, - "endLine": 20386, + "endLine": 18802, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63300,15 +62927,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource207", + "logicalId": "Resource191", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 20483, + "startLine": 18899, "startColumn": 7, - "endLine": 20483, + "endLine": 18899, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63323,15 +62950,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource207", + "logicalId": "Resource191", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 20484, + "startLine": 18900, "startColumn": 7, - "endLine": 20484, + "endLine": 18900, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63346,15 +62973,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource207", + "logicalId": "Resource191", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 20485, + "startLine": 18901, "startColumn": 7, - "endLine": 20485, + "endLine": 18901, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63369,15 +62996,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource208", + "logicalId": "Resource192", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 20582, + "startLine": 18998, "startColumn": 7, - "endLine": 20582, + "endLine": 18998, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63392,15 +63019,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource208", + "logicalId": "Resource192", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 20583, + "startLine": 18999, "startColumn": 7, - "endLine": 20583, + "endLine": 18999, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63415,15 +63042,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource208", + "logicalId": "Resource192", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 20584, + "startLine": 19000, "startColumn": 7, - "endLine": 20584, + "endLine": 19000, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63438,15 +63065,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource209", + "logicalId": "Resource193", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 20681, + "startLine": 19097, "startColumn": 7, - "endLine": 20681, + "endLine": 19097, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63461,15 +63088,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource209", + "logicalId": "Resource193", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 20682, + "startLine": 19098, "startColumn": 7, - "endLine": 20682, + "endLine": 19098, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63484,15 +63111,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource209", + "logicalId": "Resource193", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 20683, + "startLine": 19099, "startColumn": 7, - "endLine": 20683, + "endLine": 19099, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63507,15 +63134,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource210", + "logicalId": "Resource194", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 20780, + "startLine": 19196, "startColumn": 7, - "endLine": 20780, + "endLine": 19196, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63530,15 +63157,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource210", + "logicalId": "Resource194", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 20781, + "startLine": 19197, "startColumn": 7, - "endLine": 20781, + "endLine": 19197, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63553,15 +63180,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource210", + "logicalId": "Resource194", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 20782, + "startLine": 19198, "startColumn": 7, - "endLine": 20782, + "endLine": 19198, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63576,15 +63203,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource211", + "logicalId": "Resource195", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 20879, + "startLine": 19295, "startColumn": 7, - "endLine": 20879, + "endLine": 19295, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63599,15 +63226,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource211", + "logicalId": "Resource195", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 20880, + "startLine": 19296, "startColumn": 7, - "endLine": 20880, + "endLine": 19296, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63622,15 +63249,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource211", + "logicalId": "Resource195", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 20881, + "startLine": 19297, "startColumn": 7, - "endLine": 20881, + "endLine": 19297, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63645,15 +63272,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource212", + "logicalId": "Resource196", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 20978, + "startLine": 19394, "startColumn": 7, - "endLine": 20978, + "endLine": 19394, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63668,15 +63295,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource212", + "logicalId": "Resource196", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 20979, + "startLine": 19395, "startColumn": 7, - "endLine": 20979, + "endLine": 19395, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63691,15 +63318,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource212", + "logicalId": "Resource196", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 20980, + "startLine": 19396, "startColumn": 7, - "endLine": 20980, + "endLine": 19396, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63714,15 +63341,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource213", + "logicalId": "Resource197", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 21077, + "startLine": 19493, "startColumn": 7, - "endLine": 21077, + "endLine": 19493, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63737,15 +63364,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource213", + "logicalId": "Resource197", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 21078, + "startLine": 19494, "startColumn": 7, - "endLine": 21078, + "endLine": 19494, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63760,15 +63387,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource213", + "logicalId": "Resource197", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 21079, + "startLine": 19495, "startColumn": 7, - "endLine": 21079, + "endLine": 19495, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63783,15 +63410,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource214", + "logicalId": "Resource198", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 21176, + "startLine": 19592, "startColumn": 7, - "endLine": 21176, + "endLine": 19592, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63806,15 +63433,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource214", + "logicalId": "Resource198", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 21177, + "startLine": 19593, "startColumn": 7, - "endLine": 21177, + "endLine": 19593, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63829,15 +63456,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource214", + "logicalId": "Resource198", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 21178, + "startLine": 19594, "startColumn": 7, - "endLine": 21178, + "endLine": 19594, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63852,15 +63479,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource215", + "logicalId": "Resource199", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 21275, + "startLine": 19691, "startColumn": 7, - "endLine": 21275, + "endLine": 19691, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63875,15 +63502,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource215", + "logicalId": "Resource199", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 21276, + "startLine": 19692, "startColumn": 7, - "endLine": 21276, + "endLine": 19692, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63898,15 +63525,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource215", + "logicalId": "Resource199", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 21277, + "startLine": 19693, "startColumn": 7, - "endLine": 21277, + "endLine": 19693, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63921,15 +63548,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource216", + "logicalId": "Resource200", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 21374, + "startLine": 19790, "startColumn": 7, - "endLine": 21374, + "endLine": 19790, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63944,15 +63571,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource216", + "logicalId": "Resource200", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 21375, + "startLine": 19791, "startColumn": 7, - "endLine": 21375, + "endLine": 19791, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63967,15 +63594,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource216", + "logicalId": "Resource200", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 21376, + "startLine": 19792, "startColumn": 7, - "endLine": 21376, + "endLine": 19792, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63990,15 +63617,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource217", + "logicalId": "Resource201", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 21473, + "startLine": 19889, "startColumn": 7, - "endLine": 21473, + "endLine": 19889, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64013,15 +63640,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource217", + "logicalId": "Resource201", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 21474, + "startLine": 19890, "startColumn": 7, - "endLine": 21474, + "endLine": 19890, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64036,15 +63663,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource217", + "logicalId": "Resource201", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 21475, + "startLine": 19891, "startColumn": 7, - "endLine": 21475, + "endLine": 19891, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64059,15 +63686,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource218", + "logicalId": "Resource202", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 21572, + "startLine": 19988, "startColumn": 7, - "endLine": 21572, + "endLine": 19988, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64082,15 +63709,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource218", + "logicalId": "Resource202", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 21573, + "startLine": 19989, "startColumn": 7, - "endLine": 21573, + "endLine": 19989, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64105,15 +63732,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource218", + "logicalId": "Resource202", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 21574, + "startLine": 19990, "startColumn": 7, - "endLine": 21574, + "endLine": 19990, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64128,15 +63755,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource219", + "logicalId": "Resource203", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 21671, + "startLine": 20087, "startColumn": 7, - "endLine": 21671, + "endLine": 20087, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64151,15 +63778,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource219", + "logicalId": "Resource203", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 21672, + "startLine": 20088, "startColumn": 7, - "endLine": 21672, + "endLine": 20088, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64174,15 +63801,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource219", + "logicalId": "Resource203", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 21673, + "startLine": 20089, "startColumn": 7, - "endLine": 21673, + "endLine": 20089, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64197,15 +63824,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource220", + "logicalId": "Resource204", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 21770, + "startLine": 20186, "startColumn": 7, - "endLine": 21770, + "endLine": 20186, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64220,15 +63847,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource220", + "logicalId": "Resource204", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 21771, + "startLine": 20187, "startColumn": 7, - "endLine": 21771, + "endLine": 20187, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64243,15 +63870,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource220", + "logicalId": "Resource204", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 21772, + "startLine": 20188, "startColumn": 7, - "endLine": 21772, + "endLine": 20188, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64266,15 +63893,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource221", + "logicalId": "Resource205", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 21869, + "startLine": 20285, "startColumn": 7, - "endLine": 21869, + "endLine": 20285, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64289,15 +63916,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource221", + "logicalId": "Resource205", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 21870, + "startLine": 20286, "startColumn": 7, - "endLine": 21870, + "endLine": 20286, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64312,15 +63939,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource221", + "logicalId": "Resource205", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 21871, + "startLine": 20287, "startColumn": 7, - "endLine": 21871, + "endLine": 20287, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64335,15 +63962,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource222", + "logicalId": "Resource206", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 21968, + "startLine": 20384, "startColumn": 7, - "endLine": 21968, + "endLine": 20384, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64358,15 +63985,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource222", + "logicalId": "Resource206", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 21969, + "startLine": 20385, "startColumn": 7, - "endLine": 21969, + "endLine": 20385, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64381,15 +64008,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource222", + "logicalId": "Resource206", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 21970, + "startLine": 20386, "startColumn": 7, - "endLine": 21970, + "endLine": 20386, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64404,15 +64031,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource223", + "logicalId": "Resource207", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 22067, + "startLine": 20483, "startColumn": 7, - "endLine": 22067, + "endLine": 20483, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64427,15 +64054,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource223", + "logicalId": "Resource207", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 22068, + "startLine": 20484, "startColumn": 7, - "endLine": 22068, + "endLine": 20484, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64450,15 +64077,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource223", + "logicalId": "Resource207", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 22069, + "startLine": 20485, "startColumn": 7, - "endLine": 22069, + "endLine": 20485, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64473,15 +64100,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource224", + "logicalId": "Resource208", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 22166, + "startLine": 20582, "startColumn": 7, - "endLine": 22166, + "endLine": 20582, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64496,15 +64123,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource224", + "logicalId": "Resource208", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 22167, + "startLine": 20583, "startColumn": 7, - "endLine": 22167, + "endLine": 20583, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64519,15 +64146,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource224", + "logicalId": "Resource208", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 22168, + "startLine": 20584, "startColumn": 7, - "endLine": 22168, + "endLine": 20584, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64542,15 +64169,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource225", + "logicalId": "Resource209", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 22265, + "startLine": 20681, "startColumn": 7, - "endLine": 22265, + "endLine": 20681, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64565,15 +64192,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource225", + "logicalId": "Resource209", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 22266, + "startLine": 20682, "startColumn": 7, - "endLine": 22266, + "endLine": 20682, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64588,15 +64215,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource225", + "logicalId": "Resource209", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 22267, + "startLine": 20683, "startColumn": 7, - "endLine": 22267, + "endLine": 20683, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64611,15 +64238,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource226", + "logicalId": "Resource210", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 22364, + "startLine": 20780, "startColumn": 7, - "endLine": 22364, + "endLine": 20780, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64634,15 +64261,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource226", + "logicalId": "Resource210", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 22365, + "startLine": 20781, "startColumn": 7, - "endLine": 22365, + "endLine": 20781, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64657,15 +64284,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource226", + "logicalId": "Resource210", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 22366, + "startLine": 20782, "startColumn": 7, - "endLine": 22366, + "endLine": 20782, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64680,15 +64307,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource227", + "logicalId": "Resource211", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 22463, + "startLine": 20879, "startColumn": 7, - "endLine": 22463, + "endLine": 20879, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64703,15 +64330,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource227", + "logicalId": "Resource211", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 22464, + "startLine": 20880, "startColumn": 7, - "endLine": 22464, + "endLine": 20880, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64726,15 +64353,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource227", + "logicalId": "Resource211", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 22465, + "startLine": 20881, "startColumn": 7, - "endLine": 22465, + "endLine": 20881, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64749,15 +64376,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource228", + "logicalId": "Resource212", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 22562, + "startLine": 20978, "startColumn": 7, - "endLine": 22562, + "endLine": 20978, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64772,15 +64399,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource228", + "logicalId": "Resource212", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 22563, + "startLine": 20979, "startColumn": 7, - "endLine": 22563, + "endLine": 20979, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64795,15 +64422,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource228", + "logicalId": "Resource212", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 22564, + "startLine": 20980, "startColumn": 7, - "endLine": 22564, + "endLine": 20980, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64818,15 +64445,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource229", + "logicalId": "Resource213", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 22661, + "startLine": 21077, "startColumn": 7, - "endLine": 22661, + "endLine": 21077, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64841,15 +64468,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource229", + "logicalId": "Resource213", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 22662, + "startLine": 21078, "startColumn": 7, - "endLine": 22662, + "endLine": 21078, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64864,15 +64491,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource229", + "logicalId": "Resource213", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 22663, + "startLine": 21079, "startColumn": 7, - "endLine": 22663, + "endLine": 21079, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64887,15 +64514,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource230", + "logicalId": "Resource214", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 22760, + "startLine": 21176, "startColumn": 7, - "endLine": 22760, + "endLine": 21176, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64910,15 +64537,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource230", + "logicalId": "Resource214", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 22761, + "startLine": 21177, "startColumn": 7, - "endLine": 22761, + "endLine": 21177, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64933,15 +64560,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource230", + "logicalId": "Resource214", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 22762, + "startLine": 21178, "startColumn": 7, - "endLine": 22762, + "endLine": 21178, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64956,15 +64583,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource231", + "logicalId": "Resource215", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 22859, + "startLine": 21275, "startColumn": 7, - "endLine": 22859, + "endLine": 21275, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64979,15 +64606,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource231", + "logicalId": "Resource215", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 22860, + "startLine": 21276, "startColumn": 7, - "endLine": 22860, + "endLine": 21276, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65002,15 +64629,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource231", + "logicalId": "Resource215", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 22861, + "startLine": 21277, "startColumn": 7, - "endLine": 22861, + "endLine": 21277, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65025,15 +64652,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource232", + "logicalId": "Resource216", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 22958, + "startLine": 21374, "startColumn": 7, - "endLine": 22958, + "endLine": 21374, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65048,15 +64675,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource232", + "logicalId": "Resource216", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 22959, + "startLine": 21375, "startColumn": 7, - "endLine": 22959, + "endLine": 21375, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65071,15 +64698,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource232", + "logicalId": "Resource216", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 22960, + "startLine": 21376, "startColumn": 7, - "endLine": 22960, + "endLine": 21376, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65094,15 +64721,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource233", + "logicalId": "Resource217", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 23057, + "startLine": 21473, "startColumn": 7, - "endLine": 23057, + "endLine": 21473, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65117,15 +64744,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource233", + "logicalId": "Resource217", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 23058, + "startLine": 21474, "startColumn": 7, - "endLine": 23058, + "endLine": 21474, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65140,15 +64767,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource233", + "logicalId": "Resource217", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 23059, + "startLine": 21475, "startColumn": 7, - "endLine": 23059, + "endLine": 21475, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65163,15 +64790,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource234", + "logicalId": "Resource218", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 23156, + "startLine": 21572, "startColumn": 7, - "endLine": 23156, + "endLine": 21572, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65186,15 +64813,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource234", + "logicalId": "Resource218", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 23157, + "startLine": 21573, "startColumn": 7, - "endLine": 23157, + "endLine": 21573, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65209,15 +64836,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource234", + "logicalId": "Resource218", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 23158, + "startLine": 21574, "startColumn": 7, - "endLine": 23158, + "endLine": 21574, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65232,15 +64859,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource235", + "logicalId": "Resource219", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 23255, + "startLine": 21671, "startColumn": 7, - "endLine": 23255, + "endLine": 21671, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65255,15 +64882,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource235", + "logicalId": "Resource219", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 23256, + "startLine": 21672, "startColumn": 7, - "endLine": 23256, + "endLine": 21672, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65278,15 +64905,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource235", + "logicalId": "Resource219", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 23257, + "startLine": 21673, "startColumn": 7, - "endLine": 23257, + "endLine": 21673, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65301,15 +64928,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource236", + "logicalId": "Resource220", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 23354, + "startLine": 21770, "startColumn": 7, - "endLine": 23354, + "endLine": 21770, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65324,15 +64951,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource236", + "logicalId": "Resource220", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 23355, + "startLine": 21771, "startColumn": 7, - "endLine": 23355, + "endLine": 21771, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65347,15 +64974,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource236", + "logicalId": "Resource220", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 23356, + "startLine": 21772, "startColumn": 7, - "endLine": 23356, + "endLine": 21772, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65370,15 +64997,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource237", + "logicalId": "Resource221", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 23453, + "startLine": 21869, "startColumn": 7, - "endLine": 23453, + "endLine": 21869, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65393,15 +65020,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource237", + "logicalId": "Resource221", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 23454, + "startLine": 21870, "startColumn": 7, - "endLine": 23454, + "endLine": 21870, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65416,15 +65043,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource237", + "logicalId": "Resource221", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 23455, + "startLine": 21871, "startColumn": 7, - "endLine": 23455, + "endLine": 21871, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65439,15 +65066,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource238", + "logicalId": "Resource222", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 23552, + "startLine": 21968, "startColumn": 7, - "endLine": 23552, + "endLine": 21968, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65462,15 +65089,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource238", + "logicalId": "Resource222", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 23553, + "startLine": 21969, "startColumn": 7, - "endLine": 23553, + "endLine": 21969, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65485,15 +65112,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource238", + "logicalId": "Resource222", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 23554, + "startLine": 21970, "startColumn": 7, - "endLine": 23554, + "endLine": 21970, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65508,15 +65135,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource239", + "logicalId": "Resource223", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 23651, + "startLine": 22067, "startColumn": 7, - "endLine": 23651, + "endLine": 22067, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65531,15 +65158,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource239", + "logicalId": "Resource223", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 23652, + "startLine": 22068, "startColumn": 7, - "endLine": 23652, + "endLine": 22068, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65554,15 +65181,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource239", + "logicalId": "Resource223", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 23653, + "startLine": 22069, "startColumn": 7, - "endLine": 23653, + "endLine": 22069, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65577,15 +65204,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource240", + "logicalId": "Resource224", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 23750, + "startLine": 22166, "startColumn": 7, - "endLine": 23750, + "endLine": 22166, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65600,15 +65227,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource240", + "logicalId": "Resource224", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 23751, + "startLine": 22167, "startColumn": 7, - "endLine": 23751, + "endLine": 22167, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65623,15 +65250,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource240", + "logicalId": "Resource224", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 23752, + "startLine": 22168, "startColumn": 7, - "endLine": 23752, + "endLine": 22168, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65646,15 +65273,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource241", + "logicalId": "Resource225", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 23849, + "startLine": 22265, "startColumn": 7, - "endLine": 23849, + "endLine": 22265, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65669,15 +65296,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource241", + "logicalId": "Resource225", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 23850, + "startLine": 22266, "startColumn": 7, - "endLine": 23850, + "endLine": 22266, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65692,15 +65319,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource241", + "logicalId": "Resource225", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 23851, + "startLine": 22267, "startColumn": 7, - "endLine": 23851, + "endLine": 22267, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65715,15 +65342,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource242", + "logicalId": "Resource226", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 23948, + "startLine": 22364, "startColumn": 7, - "endLine": 23948, + "endLine": 22364, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65738,15 +65365,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource242", + "logicalId": "Resource226", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 23949, + "startLine": 22365, "startColumn": 7, - "endLine": 23949, + "endLine": 22365, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65761,15 +65388,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource242", + "logicalId": "Resource226", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 23950, + "startLine": 22366, "startColumn": 7, - "endLine": 23950, + "endLine": 22366, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65784,15 +65411,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource243", + "logicalId": "Resource227", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 24047, + "startLine": 22463, "startColumn": 7, - "endLine": 24047, + "endLine": 22463, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65807,15 +65434,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource243", + "logicalId": "Resource227", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 24048, + "startLine": 22464, "startColumn": 7, - "endLine": 24048, + "endLine": 22464, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65830,15 +65457,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource243", + "logicalId": "Resource227", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 24049, + "startLine": 22465, "startColumn": 7, - "endLine": 24049, + "endLine": 22465, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65853,15 +65480,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource244", + "logicalId": "Resource228", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 24146, + "startLine": 22562, "startColumn": 7, - "endLine": 24146, + "endLine": 22562, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65876,15 +65503,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource244", + "logicalId": "Resource228", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 24147, + "startLine": 22563, "startColumn": 7, - "endLine": 24147, + "endLine": 22563, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65899,15 +65526,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource244", + "logicalId": "Resource228", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 24148, + "startLine": 22564, "startColumn": 7, - "endLine": 24148, + "endLine": 22564, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65922,15 +65549,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource245", + "logicalId": "Resource229", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 24245, + "startLine": 22661, "startColumn": 7, - "endLine": 24245, + "endLine": 22661, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65945,15 +65572,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource245", + "logicalId": "Resource229", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 24246, + "startLine": 22662, "startColumn": 7, - "endLine": 24246, + "endLine": 22662, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65968,15 +65595,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource245", + "logicalId": "Resource229", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 24247, + "startLine": 22663, "startColumn": 7, - "endLine": 24247, + "endLine": 22663, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65991,15 +65618,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource246", + "logicalId": "Resource230", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 24344, + "startLine": 22760, "startColumn": 7, - "endLine": 24344, + "endLine": 22760, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66014,15 +65641,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource246", + "logicalId": "Resource230", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 24345, + "startLine": 22761, "startColumn": 7, - "endLine": 24345, + "endLine": 22761, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66037,15 +65664,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource246", + "logicalId": "Resource230", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 24346, + "startLine": 22762, "startColumn": 7, - "endLine": 24346, + "endLine": 22762, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66060,15 +65687,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource247", + "logicalId": "Resource231", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 24443, + "startLine": 22859, "startColumn": 7, - "endLine": 24443, + "endLine": 22859, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66083,15 +65710,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource247", + "logicalId": "Resource231", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 24444, + "startLine": 22860, "startColumn": 7, - "endLine": 24444, + "endLine": 22860, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66106,15 +65733,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource247", + "logicalId": "Resource231", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 24445, + "startLine": 22861, "startColumn": 7, - "endLine": 24445, + "endLine": 22861, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66129,15 +65756,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource248", + "logicalId": "Resource232", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 24542, + "startLine": 22958, "startColumn": 7, - "endLine": 24542, + "endLine": 22958, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66152,15 +65779,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource248", + "logicalId": "Resource232", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 24543, + "startLine": 22959, "startColumn": 7, - "endLine": 24543, + "endLine": 22959, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66175,15 +65802,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource248", + "logicalId": "Resource232", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 24544, + "startLine": 22960, "startColumn": 7, - "endLine": 24544, + "endLine": 22960, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66198,15 +65825,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource249", + "logicalId": "Resource233", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 24641, + "startLine": 23057, "startColumn": 7, - "endLine": 24641, + "endLine": 23057, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66221,15 +65848,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource249", + "logicalId": "Resource233", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 24642, + "startLine": 23058, "startColumn": 7, - "endLine": 24642, + "endLine": 23058, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66244,15 +65871,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource249", + "logicalId": "Resource233", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 24643, + "startLine": 23059, "startColumn": 7, - "endLine": 24643, + "endLine": 23059, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66267,15 +65894,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource250", + "logicalId": "Resource234", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 24740, + "startLine": 23156, "startColumn": 7, - "endLine": 24740, + "endLine": 23156, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66290,15 +65917,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource250", + "logicalId": "Resource234", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 24741, + "startLine": 23157, "startColumn": 7, - "endLine": 24741, + "endLine": 23157, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66313,15 +65940,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource250", + "logicalId": "Resource234", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 24742, + "startLine": 23158, "startColumn": 7, - "endLine": 24742, + "endLine": 23158, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66336,15 +65963,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource251", + "logicalId": "Resource235", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 24839, + "startLine": 23255, "startColumn": 7, - "endLine": 24839, + "endLine": 23255, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66359,15 +65986,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource251", + "logicalId": "Resource235", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 24840, + "startLine": 23256, "startColumn": 7, - "endLine": 24840, + "endLine": 23256, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66382,15 +66009,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource251", + "logicalId": "Resource235", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 24841, + "startLine": 23257, "startColumn": 7, - "endLine": 24841, + "endLine": 23257, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66405,15 +66032,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource252", + "logicalId": "Resource236", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 24938, + "startLine": 23354, "startColumn": 7, - "endLine": 24938, + "endLine": 23354, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66428,15 +66055,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource252", + "logicalId": "Resource236", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 24939, + "startLine": 23355, "startColumn": 7, - "endLine": 24939, + "endLine": 23355, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66451,15 +66078,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource252", + "logicalId": "Resource236", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 24940, + "startLine": 23356, "startColumn": 7, - "endLine": 24940, + "endLine": 23356, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66474,15 +66101,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource253", + "logicalId": "Resource237", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 25037, + "startLine": 23453, "startColumn": 7, - "endLine": 25037, + "endLine": 23453, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66497,15 +66124,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource253", + "logicalId": "Resource237", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 25038, + "startLine": 23454, "startColumn": 7, - "endLine": 25038, + "endLine": 23454, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66520,15 +66147,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource253", + "logicalId": "Resource237", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 25039, + "startLine": 23455, "startColumn": 7, - "endLine": 25039, + "endLine": 23455, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66543,15 +66170,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource254", + "logicalId": "Resource238", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 25136, + "startLine": 23552, "startColumn": 7, - "endLine": 25136, + "endLine": 23552, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66566,15 +66193,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource254", + "logicalId": "Resource238", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 25137, + "startLine": 23553, "startColumn": 7, - "endLine": 25137, + "endLine": 23553, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66589,15 +66216,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource254", + "logicalId": "Resource238", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 25138, + "startLine": 23554, "startColumn": 7, - "endLine": 25138, + "endLine": 23554, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66612,15 +66239,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource255", + "logicalId": "Resource239", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 25235, + "startLine": 23651, "startColumn": 7, - "endLine": 25235, + "endLine": 23651, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66635,15 +66262,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource255", + "logicalId": "Resource239", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 25236, + "startLine": 23652, "startColumn": 7, - "endLine": 25236, + "endLine": 23652, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66658,15 +66285,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource255", + "logicalId": "Resource239", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 25237, + "startLine": 23653, "startColumn": 7, - "endLine": 25237, + "endLine": 23653, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66681,15 +66308,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource256", + "logicalId": "Resource240", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 25334, + "startLine": 23750, "startColumn": 7, - "endLine": 25334, + "endLine": 23750, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66704,15 +66331,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource256", + "logicalId": "Resource240", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 25335, + "startLine": 23751, "startColumn": 7, - "endLine": 25335, + "endLine": 23751, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66727,15 +66354,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource256", + "logicalId": "Resource240", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 25336, + "startLine": 23752, "startColumn": 7, - "endLine": 25336, + "endLine": 23752, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66750,15 +66377,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource257", + "logicalId": "Resource241", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 25433, + "startLine": 23849, "startColumn": 7, - "endLine": 25433, + "endLine": 23849, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66773,15 +66400,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource257", + "logicalId": "Resource241", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 25434, + "startLine": 23850, "startColumn": 7, - "endLine": 25434, + "endLine": 23850, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66796,15 +66423,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource257", + "logicalId": "Resource241", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 25435, + "startLine": 23851, "startColumn": 7, - "endLine": 25435, + "endLine": 23851, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66819,15 +66446,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource258", + "logicalId": "Resource242", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 25532, + "startLine": 23948, "startColumn": 7, - "endLine": 25532, + "endLine": 23948, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66842,15 +66469,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource258", + "logicalId": "Resource242", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 25533, + "startLine": 23949, "startColumn": 7, - "endLine": 25533, + "endLine": 23949, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66865,15 +66492,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource258", + "logicalId": "Resource242", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 25534, + "startLine": 23950, "startColumn": 7, - "endLine": 25534, + "endLine": 23950, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66888,15 +66515,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource259", + "logicalId": "Resource243", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 25631, + "startLine": 24047, "startColumn": 7, - "endLine": 25631, + "endLine": 24047, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66911,15 +66538,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource259", + "logicalId": "Resource243", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 25632, + "startLine": 24048, "startColumn": 7, - "endLine": 25632, + "endLine": 24048, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66934,15 +66561,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource259", + "logicalId": "Resource243", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 25633, + "startLine": 24049, "startColumn": 7, - "endLine": 25633, + "endLine": 24049, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66957,15 +66584,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource260", + "logicalId": "Resource244", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 25730, + "startLine": 24146, "startColumn": 7, - "endLine": 25730, + "endLine": 24146, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66980,15 +66607,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource260", + "logicalId": "Resource244", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 25731, + "startLine": 24147, "startColumn": 7, - "endLine": 25731, + "endLine": 24147, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67003,15 +66630,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource260", + "logicalId": "Resource244", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 25732, + "startLine": 24148, "startColumn": 7, - "endLine": 25732, + "endLine": 24148, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67026,15 +66653,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource261", + "logicalId": "Resource245", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 25829, + "startLine": 24245, "startColumn": 7, - "endLine": 25829, + "endLine": 24245, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67049,15 +66676,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource261", + "logicalId": "Resource245", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 25830, + "startLine": 24246, "startColumn": 7, - "endLine": 25830, + "endLine": 24246, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67072,15 +66699,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource261", + "logicalId": "Resource245", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 25831, + "startLine": 24247, "startColumn": 7, - "endLine": 25831, + "endLine": 24247, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67095,15 +66722,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource262", + "logicalId": "Resource246", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 25928, + "startLine": 24344, "startColumn": 7, - "endLine": 25928, + "endLine": 24344, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67118,15 +66745,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource262", + "logicalId": "Resource246", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 25929, + "startLine": 24345, "startColumn": 7, - "endLine": 25929, + "endLine": 24345, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67141,15 +66768,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource262", + "logicalId": "Resource246", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 25930, + "startLine": 24346, "startColumn": 7, - "endLine": 25930, + "endLine": 24346, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67164,15 +66791,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource263", + "logicalId": "Resource247", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 26027, + "startLine": 24443, "startColumn": 7, - "endLine": 26027, + "endLine": 24443, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67187,15 +66814,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource263", + "logicalId": "Resource247", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 26028, + "startLine": 24444, "startColumn": 7, - "endLine": 26028, + "endLine": 24444, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67210,15 +66837,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource263", + "logicalId": "Resource247", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 26029, + "startLine": 24445, "startColumn": 7, - "endLine": 26029, + "endLine": 24445, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67233,15 +66860,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource264", + "logicalId": "Resource248", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 26126, + "startLine": 24542, "startColumn": 7, - "endLine": 26126, + "endLine": 24542, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67256,15 +66883,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource264", + "logicalId": "Resource248", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 26127, + "startLine": 24543, "startColumn": 7, - "endLine": 26127, + "endLine": 24543, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67279,15 +66906,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource264", + "logicalId": "Resource248", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 26128, + "startLine": 24544, "startColumn": 7, - "endLine": 26128, + "endLine": 24544, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67302,15 +66929,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource265", + "logicalId": "Resource249", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 26225, + "startLine": 24641, "startColumn": 7, - "endLine": 26225, + "endLine": 24641, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67325,15 +66952,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource265", + "logicalId": "Resource249", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 26226, + "startLine": 24642, "startColumn": 7, - "endLine": 26226, + "endLine": 24642, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67348,15 +66975,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource265", + "logicalId": "Resource249", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 26227, + "startLine": 24643, "startColumn": 7, - "endLine": 26227, + "endLine": 24643, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67371,15 +66998,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource266", + "logicalId": "Resource250", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 26324, + "startLine": 24740, "startColumn": 7, - "endLine": 26324, + "endLine": 24740, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67394,15 +67021,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource266", + "logicalId": "Resource250", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 26325, + "startLine": 24741, "startColumn": 7, - "endLine": 26325, + "endLine": 24741, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67417,15 +67044,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource266", + "logicalId": "Resource250", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 26326, + "startLine": 24742, "startColumn": 7, - "endLine": 26326, + "endLine": 24742, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67440,15 +67067,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource267", + "logicalId": "Resource251", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 26423, + "startLine": 24839, "startColumn": 7, - "endLine": 26423, + "endLine": 24839, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67463,15 +67090,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource267", + "logicalId": "Resource251", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 26424, + "startLine": 24840, "startColumn": 7, - "endLine": 26424, + "endLine": 24840, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67486,15 +67113,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource267", + "logicalId": "Resource251", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 26425, + "startLine": 24841, "startColumn": 7, - "endLine": 26425, + "endLine": 24841, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67509,15 +67136,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource268", + "logicalId": "Resource252", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 26522, + "startLine": 24938, "startColumn": 7, - "endLine": 26522, + "endLine": 24938, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67532,15 +67159,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource268", + "logicalId": "Resource252", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 26523, + "startLine": 24939, "startColumn": 7, - "endLine": 26523, + "endLine": 24939, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67555,15 +67182,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource268", + "logicalId": "Resource252", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 26524, + "startLine": 24940, "startColumn": 7, - "endLine": 26524, + "endLine": 24940, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67578,15 +67205,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource269", + "logicalId": "Resource253", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 26621, + "startLine": 25037, "startColumn": 7, - "endLine": 26621, + "endLine": 25037, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67601,15 +67228,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource269", + "logicalId": "Resource253", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 26622, + "startLine": 25038, "startColumn": 7, - "endLine": 26622, + "endLine": 25038, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67624,15 +67251,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource269", + "logicalId": "Resource253", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 26623, + "startLine": 25039, "startColumn": 7, - "endLine": 26623, + "endLine": 25039, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67647,15 +67274,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource270", + "logicalId": "Resource254", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 26720, + "startLine": 25136, "startColumn": 7, - "endLine": 26720, + "endLine": 25136, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67670,15 +67297,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource270", + "logicalId": "Resource254", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 26721, + "startLine": 25137, "startColumn": 7, - "endLine": 26721, + "endLine": 25137, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67693,15 +67320,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource270", + "logicalId": "Resource254", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 26722, + "startLine": 25138, "startColumn": 7, - "endLine": 26722, + "endLine": 25138, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67716,15 +67343,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource271", + "logicalId": "Resource255", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 26819, + "startLine": 25235, "startColumn": 7, - "endLine": 26819, + "endLine": 25235, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67739,15 +67366,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource271", + "logicalId": "Resource255", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 26820, + "startLine": 25236, "startColumn": 7, - "endLine": 26820, + "endLine": 25236, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67762,15 +67389,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource271", + "logicalId": "Resource255", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 26821, + "startLine": 25237, "startColumn": 7, - "endLine": 26821, + "endLine": 25237, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67785,15 +67412,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource272", + "logicalId": "Resource256", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 26918, + "startLine": 25334, "startColumn": 7, - "endLine": 26918, + "endLine": 25334, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67808,15 +67435,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource272", + "logicalId": "Resource256", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 26919, + "startLine": 25335, "startColumn": 7, - "endLine": 26919, + "endLine": 25335, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67831,15 +67458,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource272", + "logicalId": "Resource256", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 26920, + "startLine": 25336, "startColumn": 7, - "endLine": 26920, + "endLine": 25336, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67854,15 +67481,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource273", + "logicalId": "Resource257", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 27017, + "startLine": 25433, "startColumn": 7, - "endLine": 27017, + "endLine": 25433, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67877,15 +67504,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource273", + "logicalId": "Resource257", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 27018, + "startLine": 25434, "startColumn": 7, - "endLine": 27018, + "endLine": 25434, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67900,15 +67527,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource273", + "logicalId": "Resource257", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 27019, + "startLine": 25435, "startColumn": 7, - "endLine": 27019, + "endLine": 25435, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67923,15 +67550,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource274", + "logicalId": "Resource258", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 27116, + "startLine": 25532, "startColumn": 7, - "endLine": 27116, + "endLine": 25532, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67946,15 +67573,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource274", + "logicalId": "Resource258", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 27117, + "startLine": 25533, "startColumn": 7, - "endLine": 27117, + "endLine": 25533, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67969,15 +67596,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource274", + "logicalId": "Resource258", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 27118, + "startLine": 25534, "startColumn": 7, - "endLine": 27118, + "endLine": 25534, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67992,15 +67619,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource275", + "logicalId": "Resource259", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 27215, + "startLine": 25631, "startColumn": 7, - "endLine": 27215, + "endLine": 25631, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68015,15 +67642,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource275", + "logicalId": "Resource259", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 27216, + "startLine": 25632, "startColumn": 7, - "endLine": 27216, + "endLine": 25632, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68038,15 +67665,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource275", + "logicalId": "Resource259", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 27217, + "startLine": 25633, "startColumn": 7, - "endLine": 27217, + "endLine": 25633, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68061,15 +67688,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource276", + "logicalId": "Resource260", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 27314, + "startLine": 25730, "startColumn": 7, - "endLine": 27314, + "endLine": 25730, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68084,15 +67711,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource276", + "logicalId": "Resource260", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 27315, + "startLine": 25731, "startColumn": 7, - "endLine": 27315, + "endLine": 25731, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68107,15 +67734,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource276", + "logicalId": "Resource260", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 27316, + "startLine": 25732, "startColumn": 7, - "endLine": 27316, + "endLine": 25732, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68130,15 +67757,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource277", + "logicalId": "Resource261", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 27413, + "startLine": 25829, "startColumn": 7, - "endLine": 27413, + "endLine": 25829, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68153,15 +67780,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource277", + "logicalId": "Resource261", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 27414, + "startLine": 25830, "startColumn": 7, - "endLine": 27414, + "endLine": 25830, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68176,15 +67803,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource277", + "logicalId": "Resource261", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 27415, + "startLine": 25831, "startColumn": 7, - "endLine": 27415, + "endLine": 25831, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68199,15 +67826,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource278", + "logicalId": "Resource262", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 27512, + "startLine": 25928, "startColumn": 7, - "endLine": 27512, + "endLine": 25928, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68222,15 +67849,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource278", + "logicalId": "Resource262", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 27513, + "startLine": 25929, "startColumn": 7, - "endLine": 27513, + "endLine": 25929, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68245,15 +67872,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource278", + "logicalId": "Resource262", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 27514, + "startLine": 25930, "startColumn": 7, - "endLine": 27514, + "endLine": 25930, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68268,15 +67895,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource279", + "logicalId": "Resource263", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 27611, + "startLine": 26027, "startColumn": 7, - "endLine": 27611, + "endLine": 26027, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68291,15 +67918,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource279", + "logicalId": "Resource263", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 27612, + "startLine": 26028, "startColumn": 7, - "endLine": 27612, + "endLine": 26028, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68314,15 +67941,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource279", + "logicalId": "Resource263", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 27613, + "startLine": 26029, "startColumn": 7, - "endLine": 27613, + "endLine": 26029, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68337,15 +67964,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource280", + "logicalId": "Resource264", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 27710, + "startLine": 26126, "startColumn": 7, - "endLine": 27710, + "endLine": 26126, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68360,15 +67987,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource280", + "logicalId": "Resource264", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 27711, + "startLine": 26127, "startColumn": 7, - "endLine": 27711, + "endLine": 26127, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68383,15 +68010,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource280", + "logicalId": "Resource264", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 27712, + "startLine": 26128, "startColumn": 7, - "endLine": 27712, + "endLine": 26128, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68406,15 +68033,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource281", + "logicalId": "Resource265", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 27809, + "startLine": 26225, "startColumn": 7, - "endLine": 27809, + "endLine": 26225, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68429,15 +68056,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource281", + "logicalId": "Resource265", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 27810, + "startLine": 26226, "startColumn": 7, - "endLine": 27810, + "endLine": 26226, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68452,15 +68079,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource281", + "logicalId": "Resource265", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 27811, + "startLine": 26227, "startColumn": 7, - "endLine": 27811, + "endLine": 26227, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68475,15 +68102,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource282", + "logicalId": "Resource266", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 27908, + "startLine": 26324, "startColumn": 7, - "endLine": 27908, + "endLine": 26324, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68498,15 +68125,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource282", + "logicalId": "Resource266", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 27909, + "startLine": 26325, "startColumn": 7, - "endLine": 27909, + "endLine": 26325, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68521,15 +68148,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource282", + "logicalId": "Resource266", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 27910, + "startLine": 26326, "startColumn": 7, - "endLine": 27910, + "endLine": 26326, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68544,15 +68171,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource283", + "logicalId": "Resource267", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 28007, + "startLine": 26423, "startColumn": 7, - "endLine": 28007, + "endLine": 26423, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68567,15 +68194,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource283", + "logicalId": "Resource267", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 28008, + "startLine": 26424, "startColumn": 7, - "endLine": 28008, + "endLine": 26424, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68590,15 +68217,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource283", + "logicalId": "Resource267", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 28009, + "startLine": 26425, "startColumn": 7, - "endLine": 28009, + "endLine": 26425, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68613,15 +68240,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource284", + "logicalId": "Resource268", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 28106, + "startLine": 26522, "startColumn": 7, - "endLine": 28106, + "endLine": 26522, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68636,15 +68263,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource284", + "logicalId": "Resource268", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 28107, + "startLine": 26523, "startColumn": 7, - "endLine": 28107, + "endLine": 26523, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68659,15 +68286,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource284", + "logicalId": "Resource268", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 28108, + "startLine": 26524, "startColumn": 7, - "endLine": 28108, + "endLine": 26524, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68682,15 +68309,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource285", + "logicalId": "Resource269", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 28205, + "startLine": 26621, "startColumn": 7, - "endLine": 28205, + "endLine": 26621, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68705,15 +68332,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource285", + "logicalId": "Resource269", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 28206, + "startLine": 26622, "startColumn": 7, - "endLine": 28206, + "endLine": 26622, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68728,15 +68355,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource285", + "logicalId": "Resource269", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 28207, + "startLine": 26623, "startColumn": 7, - "endLine": 28207, + "endLine": 26623, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68751,15 +68378,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource286", + "logicalId": "Resource270", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 28304, + "startLine": 26720, "startColumn": 7, - "endLine": 28304, + "endLine": 26720, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68774,15 +68401,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource286", + "logicalId": "Resource270", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 28305, + "startLine": 26721, "startColumn": 7, - "endLine": 28305, + "endLine": 26721, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68797,15 +68424,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource286", + "logicalId": "Resource270", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 28306, + "startLine": 26722, "startColumn": 7, - "endLine": 28306, + "endLine": 26722, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68820,15 +68447,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource287", + "logicalId": "Resource271", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 28403, + "startLine": 26819, "startColumn": 7, - "endLine": 28403, + "endLine": 26819, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68843,15 +68470,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource287", + "logicalId": "Resource271", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 28404, + "startLine": 26820, "startColumn": 7, - "endLine": 28404, + "endLine": 26820, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68866,15 +68493,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource287", + "logicalId": "Resource271", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 28405, + "startLine": 26821, "startColumn": 7, - "endLine": 28405, + "endLine": 26821, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68889,15 +68516,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource288", + "logicalId": "Resource272", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 28502, + "startLine": 26918, "startColumn": 7, - "endLine": 28502, + "endLine": 26918, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68912,15 +68539,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource288", + "logicalId": "Resource272", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 28503, + "startLine": 26919, "startColumn": 7, - "endLine": 28503, + "endLine": 26919, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68935,15 +68562,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource288", + "logicalId": "Resource272", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 28504, + "startLine": 26920, "startColumn": 7, - "endLine": 28504, + "endLine": 26920, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68958,15 +68585,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource289", + "logicalId": "Resource273", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 28601, + "startLine": 27017, "startColumn": 7, - "endLine": 28601, + "endLine": 27017, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68981,15 +68608,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource289", + "logicalId": "Resource273", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 28602, + "startLine": 27018, "startColumn": 7, - "endLine": 28602, + "endLine": 27018, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69004,15 +68631,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource289", + "logicalId": "Resource273", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 28603, + "startLine": 27019, "startColumn": 7, - "endLine": 28603, + "endLine": 27019, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69027,15 +68654,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource290", + "logicalId": "Resource274", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 28700, + "startLine": 27116, "startColumn": 7, - "endLine": 28700, + "endLine": 27116, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69050,15 +68677,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource290", + "logicalId": "Resource274", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 28701, + "startLine": 27117, "startColumn": 7, - "endLine": 28701, + "endLine": 27117, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69073,15 +68700,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource290", + "logicalId": "Resource274", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 28702, + "startLine": 27118, "startColumn": 7, - "endLine": 28702, + "endLine": 27118, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69096,15 +68723,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource291", + "logicalId": "Resource275", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 28799, + "startLine": 27215, "startColumn": 7, - "endLine": 28799, + "endLine": 27215, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69119,15 +68746,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource291", + "logicalId": "Resource275", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 28800, + "startLine": 27216, "startColumn": 7, - "endLine": 28800, + "endLine": 27216, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69142,15 +68769,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource291", + "logicalId": "Resource275", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 28801, + "startLine": 27217, "startColumn": 7, - "endLine": 28801, + "endLine": 27217, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69165,15 +68792,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource292", + "logicalId": "Resource276", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 28898, + "startLine": 27314, "startColumn": 7, - "endLine": 28898, + "endLine": 27314, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69188,15 +68815,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource292", + "logicalId": "Resource276", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 28899, + "startLine": 27315, "startColumn": 7, - "endLine": 28899, + "endLine": 27315, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69211,15 +68838,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource292", + "logicalId": "Resource276", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 28900, + "startLine": 27316, "startColumn": 7, - "endLine": 28900, + "endLine": 27316, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69234,15 +68861,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource293", + "logicalId": "Resource277", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 28997, + "startLine": 27413, "startColumn": 7, - "endLine": 28997, + "endLine": 27413, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69257,15 +68884,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource293", + "logicalId": "Resource277", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 28998, + "startLine": 27414, "startColumn": 7, - "endLine": 28998, + "endLine": 27414, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69280,15 +68907,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource293", + "logicalId": "Resource277", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 28999, + "startLine": 27415, "startColumn": 7, - "endLine": 28999, + "endLine": 27415, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69303,15 +68930,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource294", + "logicalId": "Resource278", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 29096, + "startLine": 27512, "startColumn": 7, - "endLine": 29096, + "endLine": 27512, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69326,15 +68953,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource294", + "logicalId": "Resource278", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 29097, + "startLine": 27513, "startColumn": 7, - "endLine": 29097, + "endLine": 27513, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69349,15 +68976,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource294", + "logicalId": "Resource278", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 29098, + "startLine": 27514, "startColumn": 7, - "endLine": 29098, + "endLine": 27514, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69372,15 +68999,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource295", + "logicalId": "Resource279", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 29195, + "startLine": 27611, "startColumn": 7, - "endLine": 29195, + "endLine": 27611, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69395,15 +69022,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource295", + "logicalId": "Resource279", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 29196, + "startLine": 27612, "startColumn": 7, - "endLine": 29196, + "endLine": 27612, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69418,15 +69045,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource295", + "logicalId": "Resource279", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 29197, + "startLine": 27613, "startColumn": 7, - "endLine": 29197, + "endLine": 27613, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69441,15 +69068,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource296", + "logicalId": "Resource280", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 29294, + "startLine": 27710, "startColumn": 7, - "endLine": 29294, + "endLine": 27710, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69464,15 +69091,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource296", + "logicalId": "Resource280", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 29295, + "startLine": 27711, "startColumn": 7, - "endLine": 29295, + "endLine": 27711, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69487,15 +69114,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource296", + "logicalId": "Resource280", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 29296, + "startLine": 27712, "startColumn": 7, - "endLine": 29296, + "endLine": 27712, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69510,15 +69137,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource297", + "logicalId": "Resource281", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 29393, + "startLine": 27809, "startColumn": 7, - "endLine": 29393, + "endLine": 27809, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69533,15 +69160,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource297", + "logicalId": "Resource281", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 29394, + "startLine": 27810, "startColumn": 7, - "endLine": 29394, + "endLine": 27810, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69556,15 +69183,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource297", + "logicalId": "Resource281", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 29395, + "startLine": 27811, "startColumn": 7, - "endLine": 29395, + "endLine": 27811, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69579,15 +69206,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource298", + "logicalId": "Resource282", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 29492, + "startLine": 27908, "startColumn": 7, - "endLine": 29492, + "endLine": 27908, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69602,15 +69229,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource298", + "logicalId": "Resource282", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 29493, + "startLine": 27909, "startColumn": 7, - "endLine": 29493, + "endLine": 27909, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69625,15 +69252,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource298", + "logicalId": "Resource282", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 29494, + "startLine": 27910, "startColumn": 7, - "endLine": 29494, + "endLine": 27910, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69648,15 +69275,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource299", + "logicalId": "Resource283", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 29591, + "startLine": 28007, "startColumn": 7, - "endLine": 29591, + "endLine": 28007, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69671,15 +69298,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource299", + "logicalId": "Resource283", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 29592, + "startLine": 28008, "startColumn": 7, - "endLine": 29592, + "endLine": 28008, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69694,15 +69321,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource299", + "logicalId": "Resource283", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 29593, + "startLine": 28009, "startColumn": 7, - "endLine": 29593, + "endLine": 28009, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69711,158 +69338,23 @@ "lifecycle": "conditional-create-only" } }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - } - ] - }, - "bad/mappings/name.yaml": { - "filePath": "bad/mappings/name.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 1, - "warnings": 1, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "startLine": 10, - "startColumn": 1, - "endLine": 10, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" - }, - { - "ruleId": "E7001", - "severity": "ERROR", - "message": "Mapping name 'Bad.Name' does not match format '^[a-zA-Z0-9]+$'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Bad.Name", - "entityType": "Mapping" - }, - "propertyPath": "Mappings/Bad.Name", - "category": "Structure", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Mappings are appropriately configured", - "phase": "LINT" - }, - { - "ruleId": "W7001", - "severity": "WARN", - "message": "Mapping 'Bad.Name' is not referenced by any Fn::FindInMap", - "source": "CFN_LINT", - "entity": { - "logicalId": "Bad.Name", - "entityType": "Mapping" - }, - "propertyPath": "Mappings/Bad.Name", - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Check if Mappings are Used", - "phase": "LINT" - } - ] - }, - "bad/mappings/used.yaml": { - "filePath": "bad/mappings/used.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 1, - "informational": 3, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E1151", - "severity": "ERROR", - "message": "'vpc-123456' does not match format 'AWS::EC2::VPC.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "mySubnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Intrinsic Function", - "startLine": 18, - "startColumn": 7, - "endLine": 18, - "endColumn": 12, - "ruleDescription": "Validate VPC id format", - "phase": "SCHEMA", - "context": { - "actualValue": "vpc-123456" - } - }, - { - "ruleId": "W7001", - "severity": "WARN", - "message": "Mapping 'Environment' is not referenced by any Fn::FindInMap", - "source": "CFN_LINT", - "entity": { - "logicalId": "Environment", - "entityType": "Mapping" - }, - "propertyPath": "Mappings/Environment", - "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 14, - "ruleDescription": "Check if Mappings are Used", - "phase": "LINT" - }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySubnet", + "logicalId": "Resource284", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 18, + "startLine": 28106, "startColumn": 7, - "endLine": 18, - "endColumn": 12, + "endLine": 28106, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -69872,1058 +69364,1013 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySubnet", + "logicalId": "Resource284", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 20, + "startLine": 28107, "startColumn": 7, - "endLine": 20, - "endColumn": 16, + "endLine": 28107, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'mySubnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySubnet", + "logicalId": "Resource284", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 17, - "startColumn": 5, - "endLine": 17, + "startLine": 28108, + "startColumn": 7, + "endLine": 28108, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/module_with_tags.yaml": { - "filePath": "bad/module_with_tags.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E5001", - "severity": "ERROR", - "message": "Tags is not permitted within Module resource 'Mod'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Mod", + "logicalId": "Resource285", "entityType": "Resource", - "resourceType": "MyCompany::Testing::MODULE" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "category": "Structure", - "startLine": 6, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 28205, "startColumn": 7, - "endLine": 6, - "endColumn": 11, - "ruleDescription": "Check that Modules resources are valid", - "phase": "LINT" - } - ] - }, - "bad/modules/bad_has_create_policy.yaml": { - "filePath": "bad/modules/bad_has_create_policy.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 2, - "warnings": 0, - "informational": 0, - "debug": 0 + "endLine": 28205, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3055", - "severity": "ERROR", - "message": "CreationPolicy is not supported on resource type 'My::Organization::Custom::MODULE'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyModule", + "logicalId": "Resource285", "entityType": "Resource", - "resourceType": "My::Organization::Custom::MODULE" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "CreationPolicy", - "suggestedFix": "Remove CreationPolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::CloudFormation::WaitCondition, AWS::EC2::Instance", - "category": "Resource", - "startLine": 6, - "startColumn": 5, - "endLine": 6, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 28206, + "startColumn": 7, + "endLine": 28206, "endColumn": 19, - "ruleDescription": "Check CreationPolicy values for Resources", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "E5001", - "severity": "ERROR", - "message": "CreationPolicy is not permitted within Module resource 'MyModule'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyModule", + "logicalId": "Resource285", "entityType": "Resource", - "resourceType": "My::Organization::Custom::MODULE" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "CreationPolicy", - "category": "Structure", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 19, - "ruleDescription": "Check that Modules resources are valid", - "phase": "LINT" - } - ] - }, - "bad/modules/bad_has_tags.yaml": { - "filePath": "bad/modules/bad_has_tags.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 28207, + "startColumn": 7, + "endLine": 28207, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E5001", - "severity": "ERROR", - "message": "Tags is not permitted within Module resource 'IamRoleModule'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "IamRoleModule", + "logicalId": "Resource286", "entityType": "Resource", - "resourceType": "Some::IAM::Role::MODULE" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "category": "Structure", - "startLine": 5, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 28304, "startColumn": 7, - "endLine": 5, - "endColumn": 11, - "ruleDescription": "Check that Modules resources are valid", - "phase": "LINT" - } - ] - }, - "bad/modules/bad_has_update_policy.yaml": { - "filePath": "bad/modules/bad_has_update_policy.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 2, - "warnings": 0, - "informational": 0, - "debug": 0 + "endLine": 28304, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3016", - "severity": "ERROR", - "message": "UpdatePolicy is not supported on resource type 'My::Organization::Custom::MODULE'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyModule", + "logicalId": "Resource286", "entityType": "Resource", - "resourceType": "My::Organization::Custom::MODULE" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "UpdatePolicy", - "suggestedFix": "Remove UpdatePolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::ElastiCache::ReplicationGroup, AWS::Elasticsearch::Domain, AWS::Lambda::Alias, AWS::OpenSearchService::Domain", - "category": "Resource", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 17, - "ruleDescription": "Check UpdatePolicy values for Resources", - "phase": "LINT" + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 28305, + "startColumn": 7, + "endLine": 28305, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "E5001", - "severity": "ERROR", - "message": "UpdatePolicy is not permitted within Module resource 'MyModule'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyModule", + "logicalId": "Resource286", "entityType": "Resource", - "resourceType": "My::Organization::Custom::MODULE" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "UpdatePolicy", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 17, - "ruleDescription": "Check that Modules resources are valid", - "phase": "LINT" - } - ] - }, - "bad/modules/bad_uses_module_metadata.yaml": { - "filePath": "bad/modules/bad_uses_module_metadata.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "bad/noecho.yaml": { - "filePath": "bad/noecho.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 2, - "debug": 0 + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 28306, + "startColumn": 7, + "endLine": 28306, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W2010", - "severity": "WARN", - "message": "Don't use 'NoEcho' parameter 'NoEchoParam' in resource metadata", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SNSTopicWithSecretNameInRef", + "logicalId": "Resource287", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.NoEchoParamInMetadata", - "suggestedFix": "Move the parameter reference out of Metadata or remove NoEcho", - "category": "Security", - "startLine": 13, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 28403, "startColumn": 7, - "endLine": 13, - "endColumn": 28, - "ruleDescription": "NoEcho parameters are not masked when used in Metadata and Outputs", - "phase": "LINT" + "endLine": 28403, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2010", - "severity": "WARN", - "message": "Don't use 'NoEcho' parameter 'NoEchoParam' in resource metadata", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SNSTopicWithSecretNameInSub", + "logicalId": "Resource287", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.NoEchoParamInMetadata", - "suggestedFix": "Move the parameter reference out of Metadata or remove NoEcho", - "category": "Security", - "startLine": 19, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 28404, "startColumn": 7, - "endLine": 19, - "endColumn": 28, - "ruleDescription": "NoEcho parameters are not masked when used in Metadata and Outputs", - "phase": "LINT" + "endLine": 28404, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SNSTopicWithSecretNameInRef' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SNSTopicWithSecretNameInRef", + "logicalId": "Resource287", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 10, - "startColumn": 5, - "endLine": 10, + "startLine": 28405, + "startColumn": 7, + "endLine": 28405, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SNSTopicWithSecretNameInSub' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SNSTopicWithSecretNameInSub", + "logicalId": "Resource288", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 16, - "startColumn": 5, - "endLine": 16, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/not_cloudformation.yaml": { - "filePath": "bad/not_cloudformation.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 2, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" - }, - { - "ruleId": "F0005", - "severity": "FATAL", - "message": "'NotEven' is not a valid top-level template section", - "source": "SCHEMA", - "propertyPath": "NotEven", - "category": "Structure", - "startLine": 2, - "startColumn": 1, - "endLine": 2, - "endColumn": 8, - "ruleDescription": "Top-level keys must be valid section names", - "phase": "SCHEMA" - } - ] - }, - "bad/opensearch_instance_type.yaml": { - "filePath": "bad/opensearch_instance_type.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 7, - "debug": 0 + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 28502, + "startColumn": 7, + "endLine": 28502, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3653", - "severity": "ERROR", - "message": "'fake.invalid.search' is not valid in any region", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BadDomain", + "logicalId": "Resource288", "entityType": "Resource", - "resourceType": "AWS::OpenSearchService::Domain" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ClusterConfig.InstanceType", - "category": "Resource", - "startLine": 8, - "startColumn": 9, - "endLine": 8, - "endColumn": 21, - "ruleDescription": "Validate OpenSearch domain cluster instance type", - "phase": "LINT" + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 28503, + "startColumn": 7, + "endLine": 28503, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BadDomain", + "logicalId": "Resource288", "entityType": "Resource", - "resourceType": "AWS::OpenSearchService::Domain" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 28504, + "startColumn": 7, + "endLine": 28504, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BadDomain", + "logicalId": "Resource289", "entityType": "Resource", - "resourceType": "AWS::OpenSearchService::Domain" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 28601, + "startColumn": 7, + "endLine": 28601, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ValidDomain", + "logicalId": "Resource289", "entityType": "Resource", - "resourceType": "AWS::OpenSearchService::Domain" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 9, - "startColumn": 3, - "endLine": 9, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 28602, + "startColumn": 7, + "endLine": 28602, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ValidDomain", + "logicalId": "Resource289", "entityType": "Resource", - "resourceType": "AWS::OpenSearchService::Domain" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 9, - "startColumn": 3, - "endLine": 9, + "startLine": 28603, + "startColumn": 7, + "endLine": 28603, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Resource290", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 28700, + "startColumn": 7, + "endLine": 28700, "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9003", + "ruleId": "I9001", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", + "entity": { + "logicalId": "Resource290", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" + "startLine": 28701, + "startColumn": 7, + "endLine": 28701, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BadDomain' of type 'AWS::OpenSearchService::Domain' supports Tags but none are configured", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BadDomain", + "logicalId": "Resource290", "entityType": "Resource", - "resourceType": "AWS::OpenSearchService::Domain" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, + "startLine": 28702, + "startColumn": 7, + "endLine": 28702, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ValidDomain' of type 'AWS::OpenSearchService::Domain' supports Tags but none are configured", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ValidDomain", + "logicalId": "Resource291", "entityType": "Resource", - "resourceType": "AWS::OpenSearchService::Domain" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 11, - "startColumn": 5, - "endLine": 11, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/output_invalid_references.yaml": { - "filePath": "bad/output_invalid_references.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 2, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 + "startLine": 28799, + "startColumn": 7, + "endLine": 28799, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F6101", - "severity": "FATAL", - "message": "'NotARealAttribute' is not one of ['Arn', 'DomainName', 'DualStackDomainName', 'MetadataConfiguration.AnnotationTableConfiguration.TableArn', 'MetadataConfiguration.AnnotationTableConfiguration.TableName', 'MetadataConfiguration.Destination', 'MetadataConfiguration.InventoryTableConfiguration.TableArn', 'MetadataConfiguration.InventoryTableConfiguration.TableName', 'MetadataConfiguration.JournalTableConfiguration.TableArn', 'MetadataConfiguration.JournalTableConfiguration.TableName', 'MetadataTableConfiguration.S3TablesDestination.TableArn', 'MetadataTableConfiguration.S3TablesDestination.TableNamespace', 'RegionalDomainName', 'WebsiteURL']", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "InvalidAttribute", - "entityType": "Output" + "logicalId": "Resource291", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/InvalidAttribute/Value.Fn::GetAtt.1", - "category": "Structure", - "startLine": 6, - "startColumn": 3, - "endLine": 6, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 28800, + "startColumn": 7, + "endLine": 28800, "endColumn": 19, - "ruleDescription": "Output value must be a string", - "phase": "SCHEMA" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Fn::Sub variable '${MissingTarget}' does not reference a valid resource, parameter, or pseudo-parameter", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "UnresolvedSubVariable", - "entityType": "Output" + "logicalId": "Resource291", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/UnresolvedSubVariable/Value.Fn::Sub", - "category": "Structure", - "startLine": 8, - "startColumn": 3, - "endLine": 8, - "endColumn": 24, - "ruleDescription": "Output value must be a string", - "phase": "SCHEMA" + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 28801, + "startColumn": 7, + "endLine": 28801, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "Resource292", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 9, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/output_invalid_targets.yaml": { - "filePath": "bad/output_invalid_targets.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 5, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 + "startLine": 28898, + "startColumn": 7, + "endLine": 28898, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Ref 'DoesNotExist' does not reference a valid resource, parameter, or pseudo-parameter", - "source": "SCHEMA", - "propertyPath": "Outputs.MissingRef.Value.Ref", - "category": "Structure", - "startLine": 5, - "startColumn": 16, - "endLine": 5, - "endColumn": 21, - "ruleDescription": "Output value must be a string", - "phase": "PARSE" + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Resource292", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 28899, + "startColumn": 7, + "endLine": 28899, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F6101", - "severity": "FATAL", - "message": "GetAtt 'DoesNotExist.Arn' references a resource that does not exist", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MissingGetAtt", - "entityType": "Output" + "logicalId": "Resource292", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/MissingGetAtt/Value.Fn::GetAtt.0", - "category": "Structure", - "startLine": 6, - "startColumn": 3, - "endLine": 6, - "endColumn": 16, - "ruleDescription": "Output value must be a string", - "phase": "SCHEMA" + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 28900, + "startColumn": 7, + "endLine": 28900, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Fn::Sub variable '${DoesNotExist}' does not reference a valid resource, parameter, or pseudo-parameter", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MissingSubRef", - "entityType": "Output" + "logicalId": "Resource293", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/MissingSubRef/Value.Fn::Sub", - "category": "Structure", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 16, - "ruleDescription": "Output value must be a string", - "phase": "SCHEMA" + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 28997, + "startColumn": 7, + "endLine": 28997, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Fn::Sub variable '${DoesNotExist.Arn}' does not reference a valid resource, parameter, or pseudo-parameter", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MissingSubGetAtt", - "entityType": "Output" + "logicalId": "Resource293", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/MissingSubGetAtt/Value.Fn::Sub", - "category": "Structure", - "startLine": 8, - "startColumn": 3, - "endLine": 8, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 28998, + "startColumn": 7, + "endLine": 28998, "endColumn": 19, - "ruleDescription": "Output value must be a string", - "phase": "SCHEMA" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F6101", - "severity": "FATAL", - "message": "'DoesNotExist' is not one of ['Arn', 'DomainName', 'DualStackDomainName', 'MetadataConfiguration.AnnotationTableConfiguration.TableArn', 'MetadataConfiguration.AnnotationTableConfiguration.TableName', 'MetadataConfiguration.Destination', 'MetadataConfiguration.InventoryTableConfiguration.TableArn', 'MetadataConfiguration.InventoryTableConfiguration.TableName', 'MetadataConfiguration.JournalTableConfiguration.TableArn', 'MetadataConfiguration.JournalTableConfiguration.TableName', 'MetadataTableConfiguration.S3TablesDestination.TableArn', 'MetadataTableConfiguration.S3TablesDestination.TableNamespace', 'RegionalDomainName', 'WebsiteURL']", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "InvalidExistingAttribute", - "entityType": "Output" + "logicalId": "Resource293", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/InvalidExistingAttribute/Value.Fn::GetAtt.1", - "category": "Structure", - "startLine": 9, - "startColumn": 3, - "endLine": 9, - "endColumn": 27, - "ruleDescription": "Output value must be a string", - "phase": "SCHEMA" + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 28999, + "startColumn": 7, + "endLine": 28999, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "Resource294", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 9, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/output_value_not_string.yaml": { - "filePath": "bad/output_value_not_string.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 7, - "errors": 0, - "warnings": 0, - "informational": 4, - "debug": 0 + "startLine": 29096, + "startColumn": 7, + "endLine": 29096, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Output 'ValueIsList' value must be a string, not a list", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ValueIsList", - "entityType": "Output" + "logicalId": "Resource294", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/ValueIsList/Value", - "category": "Structure", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 10, - "ruleDescription": "Output value must be a string", - "phase": "PARSE" + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 29097, + "startColumn": 7, + "endLine": 29097, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Output 'ValueIsObject' value must be a string, not an object", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ValueIsObject", - "entityType": "Output" + "logicalId": "Resource294", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/ValueIsObject/Value", - "category": "Structure", - "startLine": 21, - "startColumn": 5, - "endLine": 21, - "endColumn": 10, - "ruleDescription": "Output value must be a string", - "phase": "PARSE" + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 29098, + "startColumn": 7, + "endLine": 29098, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Output 'ValueIsGetAZs' value must be a string, not a list", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ValueIsGetAZs", - "entityType": "Output" + "logicalId": "Resource295", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/ValueIsGetAZs/Value", - "category": "Structure", - "startLine": 24, - "startColumn": 5, - "endLine": 24, - "endColumn": 10, - "ruleDescription": "Output value must be a string", - "phase": "PARSE" + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 29195, + "startColumn": 7, + "endLine": 29195, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Output 'ValueIsSplit' value must be a string, not a list", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ValueIsSplit", - "entityType": "Output" + "logicalId": "Resource295", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/ValueIsSplit/Value", - "category": "Structure", - "startLine": 26, - "startColumn": 5, - "endLine": 26, - "endColumn": 10, - "ruleDescription": "Output value must be a string", - "phase": "PARSE" + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 29196, + "startColumn": 7, + "endLine": 29196, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Output 'ValueIsCidr' value must be a string, not a list", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ValueIsCidr", - "entityType": "Output" + "logicalId": "Resource295", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/ValueIsCidr/Value", - "category": "Structure", - "startLine": 28, - "startColumn": 5, - "endLine": 28, - "endColumn": 10, - "ruleDescription": "Output value must be a string", - "phase": "PARSE" + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 29197, + "startColumn": 7, + "endLine": 29197, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Output 'ConditionalListBranch' value must be a string, not a list", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalListBranch", - "entityType": "Output" + "logicalId": "Resource296", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/ConditionalListBranch/Value/Fn::If/1", - "category": "Structure", - "startLine": 30, - "startColumn": 25, - "endLine": 30, - "endColumn": 26, - "ruleDescription": "Output value must be a string", - "phase": "PARSE" + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 29294, + "startColumn": 7, + "endLine": 29294, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Output 'ConditionalListBranch' value must be a string, not a list", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalListBranch", - "entityType": "Output" + "logicalId": "Resource296", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/ConditionalListBranch/Value/Fn::If/2", - "category": "Structure", - "startLine": 30, - "startColumn": 35, - "endLine": 30, - "endColumn": 36, - "ruleDescription": "Output value must be a string", - "phase": "PARSE" + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 29295, + "startColumn": 7, + "endLine": 29295, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "Resource296", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 13, - "startColumn": 3, - "endLine": 13, - "endColumn": 8, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 29296, + "startColumn": 7, + "endLine": 29296, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "Resource297", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 13, - "startColumn": 3, - "endLine": 13, - "endColumn": 8, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 29393, + "startColumn": 7, + "endLine": 29393, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "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", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "Resource297", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 13, - "startColumn": 3, - "endLine": 13, - "endColumn": 8, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "startLine": 29394, + "startColumn": 7, + "endLine": 29394, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Queue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "Resource297", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 13, - "startColumn": 3, - "endLine": 13, - "endColumn": 8, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/override/complete.yaml": { - "filePath": "bad/override/complete.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 1, - "errors": 1, - "warnings": 1, - "informational": 7, - "debug": 0 + "startLine": 29395, + "startColumn": 7, + "endLine": 29395, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'SpotFleetRequestConfigData' is a required property", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "mySpotFleet", + "logicalId": "Resource298", "entityType": "Resource", - "resourceType": "AWS::EC2::SpotFleet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'SpotFleetRequestConfigData'", - "category": "Schema", - "startLine": 20, - "startColumn": 3, - "endLine": 20, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 29492, + "startColumn": 7, + "endLine": 29492, "endColumn": 14, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-123456' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "untaggedInstance", + "logicalId": "Resource298", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 14, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 29493, "startColumn": 7, - "endLine": 14, - "endColumn": 14, + "endLine": 29493, + "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "ami-123456" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "W3045", - "severity": "WARN", - "message": "AccessControl property is deprecated. Use bucket policies instead", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "myS3Bucket", + "logicalId": "Resource298", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.AccessControl", - "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", - "category": "Deprecation", - "startLine": 10, + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 29494, "startColumn": 7, - "endLine": 10, - "endColumn": 20, - "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", - "phase": "LINT", + "endLine": 29494, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { - "actualValue": "Private" + "lifecycle": "conditional-create-only" } }, { @@ -70932,15 +70379,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "untaggedInstance", + "logicalId": "Resource299", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 14, + "startLine": 29591, "startColumn": 7, - "endLine": 14, + "endLine": 29591, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -70952,137 +70399,70 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPC", + "logicalId": "Resource299", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 18, - "startColumn": 9, - "endLine": 18, - "endColumn": 18, + "startLine": 29592, + "startColumn": 7, + "endLine": 29592, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "myS3Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'untaggedInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "untaggedInstance", + "logicalId": "Resource299", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 13, - "startColumn": 5, - "endLine": 13, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'VPC' of type 'AWS::EC2::VPC' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "VPC", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 17, + "startLine": 29593, "startColumn": 7, - "endLine": 17, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'mySpotFleet' of type 'AWS::EC2::SpotFleet' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "mySpotFleet", - "entityType": "Resource", - "resourceType": "AWS::EC2::SpotFleet" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 20, - "startColumn": 3, - "endLine": 20, - "endColumn": 14, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 29593, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9003", "severity": "INFO", - "message": "Resource 'mySnsTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", "source": "ENGINE", - "entity": { - "logicalId": "mySnsTopic", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 23, - "startColumn": 3, - "endLine": 23, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" } ] }, - "bad/override/exclude.yaml": { - "filePath": "bad/override/exclude.yaml", + "bad/mappings/name.yaml": { + "filePath": "bad/mappings/name.yaml", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 0, "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 3, + "fatal": 1, + "errors": 1, + "warnings": 1, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -71091,77 +70471,66 @@ }, "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myGameLift' of type 'AWS::GameLift::Alias' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "myGameLift", - "entityType": "Resource", - "resourceType": "AWS::GameLift::Alias" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "startLine": 10, + "startColumn": 1, + "endLine": 10, + "endColumn": 10, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E7001", + "severity": "ERROR", + "message": "Mapping name 'Bad.Name' does not match format '^[a-zA-Z0-9]+$'", + "source": "CFN_LINT", "entity": { - "logicalId": "myS3Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "logicalId": "Bad.Name", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 14, + "propertyPath": "Mappings/Bad.Name", + "category": "Structure", + "startLine": 3, "startColumn": 3, - "endLine": 14, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Mappings are appropriately configured", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'mySnsTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Bad.Name' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "mySnsTopic", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Bad.Name", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Bad.Name", "category": "Best Practice", - "startLine": 16, + "startLine": 3, "startColumn": 3, - "endLine": 16, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" } ] }, - "bad/override/include.yaml": { - "filePath": "bad/override/include.yaml", + "bad/mappings/used.yaml": { + "filePath": "bad/mappings/used.yaml", "status": "OK", "metadata": { - "resourcesScanned": 4, + "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 6, + "errors": 1, + "warnings": 1, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -71170,59 +70539,61 @@ }, "diagnostics": [ { - "ruleId": "W2511", - "severity": "WARN", - "message": "IAM Policy Version should be updated to '2012-10-17'", + "ruleId": "E1151", + "severity": "ERROR", + "message": "'vpc-123456' does not match format 'AWS::EC2::VPC.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "myS3BucketPolicy", + "logicalId": "mySubnet", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.PolicyDocument.Version", - "suggestedFix": "Update the policy document Version to '2012-10-17'", - "category": "Security", - "startLine": 20, - "startColumn": 9, - "endLine": 20, - "endColumn": 16, - "ruleDescription": "Check IAM Resource Policies syntax", - "phase": "LINT" + "propertyPath": "Properties.VpcId", + "category": "Intrinsic Function", + "startLine": 18, + "startColumn": 7, + "endLine": 18, + "endColumn": 12, + "ruleDescription": "Validate VPC id format", + "phase": "SCHEMA", + "context": { + "actualValue": "vpc-123456" + } }, { - "ruleId": "W3011", + "ruleId": "W7001", "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "message": "Mapping 'Environment' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "myS3BucketPolicy", - "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "logicalId": "Environment", + "entityType": "Mapping" }, + "propertyPath": "Mappings/Environment", "category": "Best Practice", - "startLine": 13, + "startLine": 4, "startColumn": 3, - "endLine": 13, - "endColumn": 19, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "endLine": 4, + "endColumn": 14, + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myVpc1", + "logicalId": "mySubnet", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 9, + "startLine": 18, "startColumn": 7, - "endLine": 9, - "endColumn": 16, + "endLine": 18, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -71232,120 +70603,267 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myVpc1", + "logicalId": "mySubnet", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 10, + "startLine": 20, "startColumn": 7, - "endLine": 10, - "endColumn": 22, + "endLine": 20, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Resource 'mySubnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myS3BucketPolicy", + "logicalId": "mySubnet", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 17, - "startColumn": 7, + "startColumn": 5, "endLine": 17, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'myS3Bucket'" - } + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/module_with_tags.yaml": { + "filePath": "bad/module_with_tags.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myVpc1' of type 'AWS::EC2::VPC' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E5001", + "severity": "ERROR", + "message": "Tags is not permitted within Module resource 'Mod'", + "source": "CFN_LINT", "entity": { - "logicalId": "myVpc1", + "logicalId": "Mod", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "MyCompany::Testing::MODULE" }, "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 8, + "category": "Structure", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 11, + "ruleDescription": "Check that Modules resources are valid", + "phase": "LINT" + } + ] + }, + "bad/modules/bad_has_create_policy.yaml": { + "filePath": "bad/modules/bad_has_create_policy.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3055", + "severity": "ERROR", + "message": "CreationPolicy is not supported on resource type 'My::Organization::Custom::MODULE'", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyModule", + "entityType": "Resource", + "resourceType": "My::Organization::Custom::MODULE" + }, + "propertyPath": "CreationPolicy", + "suggestedFix": "Remove CreationPolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::CloudFormation::WaitCondition, AWS::EC2::Instance", + "category": "Resource", + "startLine": 6, "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endLine": 6, + "endColumn": 19, + "ruleDescription": "Check CreationPolicy values for Resources", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E5001", + "severity": "ERROR", + "message": "CreationPolicy is not permitted within Module resource 'MyModule'", + "source": "CFN_LINT", "entity": { - "logicalId": "myS3Bucket", + "logicalId": "MyModule", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "My::Organization::Custom::MODULE" + }, + "propertyPath": "CreationPolicy", + "category": "Structure", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 19, + "ruleDescription": "Check that Modules resources are valid", + "phase": "LINT" + } + ] + }, + "bad/modules/bad_has_tags.yaml": { + "filePath": "bad/modules/bad_has_tags.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E5001", + "severity": "ERROR", + "message": "Tags is not permitted within Module resource 'IamRoleModule'", + "source": "CFN_LINT", + "entity": { + "logicalId": "IamRoleModule", + "entityType": "Resource", + "resourceType": "Some::IAM::Role::MODULE" }, "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 11, - "startColumn": 3, - "endLine": 11, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "category": "Structure", + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 11, + "ruleDescription": "Check that Modules resources are valid", + "phase": "LINT" + } + ] + }, + "bad/modules/bad_has_update_policy.yaml": { + "filePath": "bad/modules/bad_has_update_policy.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3016", + "severity": "ERROR", + "message": "UpdatePolicy is not supported on resource type 'My::Organization::Custom::MODULE'", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyModule", + "entityType": "Resource", + "resourceType": "My::Organization::Custom::MODULE" + }, + "propertyPath": "UpdatePolicy", + "suggestedFix": "Remove UpdatePolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::ElastiCache::ReplicationGroup, AWS::Elasticsearch::Domain, AWS::Lambda::Alias, AWS::OpenSearchService::Domain", + "category": "Resource", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 17, + "ruleDescription": "Check UpdatePolicy values for Resources", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'mySnsTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E5001", + "severity": "ERROR", + "message": "UpdatePolicy is not permitted within Module resource 'MyModule'", + "source": "CFN_LINT", "entity": { - "logicalId": "mySnsTopic", + "logicalId": "MyModule", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "My::Organization::Custom::MODULE" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 27, - "startColumn": 3, - "endLine": 27, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "propertyPath": "UpdatePolicy", + "category": "Structure", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 17, + "ruleDescription": "Check that Modules resources are valid", "phase": "LINT" } ] }, - "bad/override/required.yaml": { - "filePath": "bad/override/required.yaml", + "bad/modules/bad_uses_module_metadata.yaml": { + "filePath": "bad/modules/bad_uses_module_metadata.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, - "warnings": 1, - "informational": 1, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "bad/noecho.yaml": { + "filePath": "bad/noecho.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -71354,60 +70872,97 @@ }, "diagnostics": [ { - "ruleId": "W3045", + "ruleId": "W2010", "severity": "WARN", - "message": "AccessControl property is deprecated. Use bucket policies instead", + "message": "Don't use 'NoEcho' parameter 'NoEchoParam' in resource metadata", "source": "CFN_LINT", "entity": { - "logicalId": "myS3Bucket", + "logicalId": "SNSTopicWithSecretNameInRef", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.AccessControl", - "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", - "category": "Deprecation", - "startLine": 10, + "propertyPath": "Metadata.NoEchoParamInMetadata", + "suggestedFix": "Move the parameter reference out of Metadata or remove NoEcho", + "category": "Security", + "startLine": 13, + "startColumn": 7, + "endLine": 13, + "endColumn": 28, + "ruleDescription": "NoEcho parameters are not masked when used in Metadata and Outputs", + "phase": "LINT" + }, + { + "ruleId": "W2010", + "severity": "WARN", + "message": "Don't use 'NoEcho' parameter 'NoEchoParam' in resource metadata", + "source": "CFN_LINT", + "entity": { + "logicalId": "SNSTopicWithSecretNameInSub", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Metadata.NoEchoParamInMetadata", + "suggestedFix": "Move the parameter reference out of Metadata or remove NoEcho", + "category": "Security", + "startLine": 19, "startColumn": 7, + "endLine": 19, + "endColumn": 28, + "ruleDescription": "NoEcho parameters are not masked when used in Metadata and Outputs", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SNSTopicWithSecretNameInRef' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SNSTopicWithSecretNameInRef", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 10, + "startColumn": 5, "endLine": 10, - "endColumn": 20, - "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", - "phase": "LINT", - "context": { - "actualValue": "Private" - } + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'SNSTopicWithSecretNameInSub' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myS3Bucket", + "logicalId": "SNSTopicWithSecretNameInSub", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 8, + "startLine": 16, "startColumn": 5, - "endLine": 8, + "endLine": 16, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/param_constraints.yaml": { - "filePath": "bad/param_constraints.yaml", + "bad/not_cloudformation.yaml": { + "filePath": "bad/not_cloudformation.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 0, "counts": { - "fatal": 5, + "fatal": 2, "errors": 0, - "warnings": 5, - "informational": 1, + "warnings": 0, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -71416,326 +70971,199 @@ }, "diagnostics": [ { - "ruleId": "F2015", - "severity": "FATAL", - "message": "Parameter 'PatternParam' Default '123-bad' does not match AllowedPattern '^[a-z]+$'", - "source": "SCHEMA", - "entity": { - "logicalId": "PatternParam", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/PatternParam/Default", - "category": "Parameter", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 12, - "ruleDescription": "Default value is within parameter constraints", - "phase": "SCHEMA" - }, - { - "ruleId": "F2015", - "severity": "FATAL", - "message": "Parameter 'ShortParam' Default length 2 is less than MinLength 5", - "source": "SCHEMA", - "entity": { - "logicalId": "ShortParam", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/ShortParam/Default", - "category": "Parameter", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 12, - "ruleDescription": "Default value is within parameter constraints", - "phase": "SCHEMA" - }, - { - "ruleId": "F2015", + "ruleId": "F0001", "severity": "FATAL", - "message": "Parameter 'LongParam' Default length 34 exceeds MaxLength 10", + "message": "Resources section must exist and be non-empty", "source": "SCHEMA", - "entity": { - "logicalId": "LongParam", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/LongParam/Default", - "category": "Parameter", - "startLine": 13, - "startColumn": 5, - "endLine": 13, - "endColumn": 12, - "ruleDescription": "Default value is within parameter constraints", + "category": "Structure", + "ruleDescription": "Resources section must exist and be non-empty", "phase": "SCHEMA" }, { - "ruleId": "F2015", + "ruleId": "F0005", "severity": "FATAL", - "message": "Parameter 'SmallNumber' Default 3 is less than MinValue 10", + "message": "'NotEven' is not a valid top-level template section", "source": "SCHEMA", - "entity": { - "logicalId": "SmallNumber", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/SmallNumber/Default", - "category": "Parameter", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 12, - "ruleDescription": "Default value is within parameter constraints", + "propertyPath": "NotEven", + "category": "Structure", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 8, + "ruleDescription": "Top-level keys must be valid section names", "phase": "SCHEMA" + } + ] + }, + "bad/opensearch_instance_type.yaml": { + "filePath": "bad/opensearch_instance_type.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 7, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "F2015", - "severity": "FATAL", - "message": "Parameter 'BigNumber' Default 200 exceeds MaxValue 100", - "source": "SCHEMA", + "ruleId": "E3653", + "severity": "ERROR", + "message": "'fake.invalid.search' is not valid in any region", + "source": "CFN_LINT", "entity": { - "logicalId": "BigNumber", - "entityType": "Parameter" + "logicalId": "BadDomain", + "entityType": "Resource", + "resourceType": "AWS::OpenSearchService::Domain" }, - "propertyPath": "Parameters/BigNumber/Default", - "category": "Parameter", - "startLine": 21, - "startColumn": 5, - "endLine": 21, - "endColumn": 12, - "ruleDescription": "Default value is within parameter constraints", - "phase": "SCHEMA" + "propertyPath": "Properties.ClusterConfig.InstanceType", + "category": "Resource", + "startLine": 8, + "startColumn": 9, + "endLine": 8, + "endColumn": 21, + "ruleDescription": "Validate OpenSearch domain cluster instance type", + "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'PatternParam' is not referenced anywhere in the template", + "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": "PatternParam", - "entityType": "Parameter" + "logicalId": "BadDomain", + "entityType": "Resource", + "resourceType": "AWS::OpenSearchService::Domain" }, - "propertyPath": "Parameters/PatternParam", "category": "Best Practice", - "startLine": 3, + "startLine": 4, "startColumn": 3, - "endLine": 3, - "endColumn": 15, - "ruleDescription": "Check if Parameters are Used", + "endLine": 4, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'ShortParam' is not referenced anywhere in the template", + "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": "ShortParam", - "entityType": "Parameter" + "logicalId": "BadDomain", + "entityType": "Resource", + "resourceType": "AWS::OpenSearchService::Domain" }, - "propertyPath": "Parameters/ShortParam", "category": "Best Practice", - "startLine": 7, + "startLine": 4, "startColumn": 3, - "endLine": 7, - "endColumn": 13, - "ruleDescription": "Check if Parameters are Used", + "endLine": 4, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'LongParam' is not referenced anywhere in the template", + "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": "LongParam", - "entityType": "Parameter" + "logicalId": "ValidDomain", + "entityType": "Resource", + "resourceType": "AWS::OpenSearchService::Domain" }, - "propertyPath": "Parameters/LongParam", "category": "Best Practice", - "startLine": 11, + "startLine": 9, "startColumn": 3, - "endLine": 11, - "endColumn": 12, - "ruleDescription": "Check if Parameters are Used", + "endLine": 9, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'SmallNumber' is not referenced anywhere in the template", + "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": "SmallNumber", - "entityType": "Parameter" + "logicalId": "ValidDomain", + "entityType": "Resource", + "resourceType": "AWS::OpenSearchService::Domain" }, - "propertyPath": "Parameters/SmallNumber", "category": "Best Practice", - "startLine": 15, + "startLine": 9, "startColumn": 3, - "endLine": 15, + "endLine": 9, "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'BigNumber' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "BigNumber", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/BigNumber", + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", "category": "Best Practice", - "startLine": 19, - "startColumn": 3, - "endLine": 19, - "endColumn": 12, - "ruleDescription": "Check if Parameters are Used", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'BadDomain' of type 'AWS::OpenSearchService::Domain' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "BadDomain", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::OpenSearchService::Domain" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 24, - "startColumn": 3, - "endLine": 24, - "endColumn": 9, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/param_number_default.yaml": { - "filePath": "bad/param_number_default.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 4, - "errors": 0, - "warnings": 1, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F0015", - "severity": "FATAL", - "message": "Parameter 'Port' Default 'not-a-number' is not a valid number", - "source": "SCHEMA", - "entity": { - "logicalId": "Port", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/Port/Default", - "category": "Parameter", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 12, - "ruleDescription": "Default value must match parameter Type", - "phase": "SCHEMA" - }, - { - "ruleId": "F0016", - "severity": "FATAL", - "message": "Parameter 'Port' AllowedValues entry 'abc' is not a valid number", - "source": "SCHEMA", - "entity": { - "logicalId": "Port", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/Port/AllowedValues", - "category": "Parameter", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 18, - "ruleDescription": "AllowedValues entries must match parameter Type", - "phase": "SCHEMA" - }, - { - "ruleId": "F0016", - "severity": "FATAL", - "message": "Parameter 'Port' AllowedValues entry 'def' is not a valid number", - "source": "SCHEMA", - "entity": { - "logicalId": "Port", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/Port/AllowedValues", - "category": "Parameter", "startLine": 6, "startColumn": 5, "endLine": 6, - "endColumn": 18, - "ruleDescription": "AllowedValues entries must match parameter Type", - "phase": "SCHEMA" - }, - { - "ruleId": "F2012", - "severity": "FATAL", - "message": "Parameter 'Port' Default 'not-a-number' is not in AllowedValues ['abc', 'def']", - "source": "SCHEMA", - "entity": { - "logicalId": "Port", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/Port/Default", - "category": "Parameter", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 12, - "ruleDescription": "Parameter Default must be in AllowedValues", - "phase": "SCHEMA" + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Port' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ValidDomain' of type 'AWS::OpenSearchService::Domain' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Port", - "entityType": "Parameter" + "logicalId": "ValidDomain", + "entityType": "Resource", + "resourceType": "AWS::OpenSearchService::Domain" }, - "propertyPath": "Parameters/Port", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 7, - "ruleDescription": "Check if Parameters are Used", + "startLine": 11, + "startColumn": 5, + "endLine": 11, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/parameters/F2012_cdl_default_split.yaml": { - "filePath": "bad/parameters/F2012_cdl_default_split.yaml", + "bad/output_invalid_references.yaml": { + "filePath": "bad/output_invalid_references.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 8, + "fatal": 2, "errors": 0, - "warnings": 5, - "informational": 0, + "warnings": 0, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -71744,251 +71172,198 @@ }, "diagnostics": [ { - "ruleId": "F2012", + "ruleId": "F6101", "severity": "FATAL", - "message": "Parameter 'CDLSingleElementNotAllowed' Default 'three' is not in AllowedValues ['one', 'two']", + "message": "'NotARealAttribute' is not one of ['Arn', 'DomainName', 'DualStackDomainName', 'MetadataConfiguration.AnnotationTableConfiguration.TableArn', 'MetadataConfiguration.AnnotationTableConfiguration.TableName', 'MetadataConfiguration.Destination', 'MetadataConfiguration.InventoryTableConfiguration.TableArn', 'MetadataConfiguration.InventoryTableConfiguration.TableName', 'MetadataConfiguration.JournalTableConfiguration.TableArn', 'MetadataConfiguration.JournalTableConfiguration.TableName', 'MetadataTableConfiguration.S3TablesDestination.TableArn', 'MetadataTableConfiguration.S3TablesDestination.TableNamespace', 'RegionalDomainName', 'WebsiteURL']", "source": "SCHEMA", "entity": { - "logicalId": "CDLSingleElementNotAllowed", - "entityType": "Parameter" + "logicalId": "InvalidAttribute", + "entityType": "Output" }, - "propertyPath": "Parameters/CDLSingleElementNotAllowed/Default", - "category": "Parameter", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 12, - "ruleDescription": "Parameter Default must be in AllowedValues", + "propertyPath": "Outputs/InvalidAttribute/Value.Fn::GetAtt.1", + "category": "Structure", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 19, + "ruleDescription": "Output value must be a string", "phase": "SCHEMA" }, { - "ruleId": "F2012", + "ruleId": "F6101", "severity": "FATAL", - "message": "Parameter 'CDLMultipleElementsNotAllowed' Default 'four' is not in AllowedValues ['one', 'two']", + "message": "Fn::Sub variable '${MissingTarget}' does not reference a valid resource, parameter, or pseudo-parameter", "source": "SCHEMA", "entity": { - "logicalId": "CDLMultipleElementsNotAllowed", - "entityType": "Parameter" + "logicalId": "UnresolvedSubVariable", + "entityType": "Output" }, - "propertyPath": "Parameters/CDLMultipleElementsNotAllowed/Default", - "category": "Parameter", - "startLine": 13, - "startColumn": 5, - "endLine": 13, - "endColumn": 12, - "ruleDescription": "Parameter Default must be in AllowedValues", + "propertyPath": "Outputs/UnresolvedSubVariable/Value.Fn::Sub", + "category": "Structure", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 24, + "ruleDescription": "Output value must be a string", "phase": "SCHEMA" }, { - "ruleId": "F2012", - "severity": "FATAL", - "message": "Parameter 'CDLMultipleElementsNotAllowed' Default 'three' is not in AllowedValues ['one', 'two']", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "CDLMultipleElementsNotAllowed", - "entityType": "Parameter" + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/CDLMultipleElementsNotAllowed/Default", - "category": "Parameter", - "startLine": 13, - "startColumn": 5, - "endLine": 13, - "endColumn": 12, - "ruleDescription": "Parameter Default must be in AllowedValues", - "phase": "SCHEMA" + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/output_invalid_targets.yaml": { + "filePath": "bad/output_invalid_targets.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 5, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "F2012", + "ruleId": "F6101", "severity": "FATAL", - "message": "Parameter 'CDLCommaInAllowedValueDoesNotMatchSplit' Default 'four' is not in AllowedValues ['one', 'two', 'three,four']", + "message": "Ref 'DoesNotExist' does not reference a valid resource, parameter, or pseudo-parameter", "source": "SCHEMA", - "entity": { - "logicalId": "CDLCommaInAllowedValueDoesNotMatchSplit", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/CDLCommaInAllowedValueDoesNotMatchSplit/Default", - "category": "Parameter", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 12, - "ruleDescription": "Parameter Default must be in AllowedValues", - "phase": "SCHEMA" + "propertyPath": "Outputs.MissingRef.Value.Ref", + "category": "Structure", + "startLine": 5, + "startColumn": 16, + "endLine": 5, + "endColumn": 21, + "ruleDescription": "Output value must be a string", + "phase": "PARSE" }, { - "ruleId": "F2012", + "ruleId": "F6101", "severity": "FATAL", - "message": "Parameter 'CDLCommaInAllowedValueDoesNotMatchSplit' Default 'three' is not in AllowedValues ['one', 'two', 'three,four']", + "message": "GetAtt 'DoesNotExist.Arn' references a resource that does not exist", "source": "SCHEMA", "entity": { - "logicalId": "CDLCommaInAllowedValueDoesNotMatchSplit", - "entityType": "Parameter" + "logicalId": "MissingGetAtt", + "entityType": "Output" }, - "propertyPath": "Parameters/CDLCommaInAllowedValueDoesNotMatchSplit/Default", - "category": "Parameter", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 12, - "ruleDescription": "Parameter Default must be in AllowedValues", + "propertyPath": "Outputs/MissingGetAtt/Value.Fn::GetAtt.0", + "category": "Structure", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 16, + "ruleDescription": "Output value must be a string", "phase": "SCHEMA" }, { - "ruleId": "F2012", + "ruleId": "F6101", "severity": "FATAL", - "message": "Parameter 'CDLWhitespaceTrimsToInvalid' Default 'bad' is not in AllowedValues ['one', 'two']", + "message": "Fn::Sub variable '${DoesNotExist}' does not reference a valid resource, parameter, or pseudo-parameter", "source": "SCHEMA", "entity": { - "logicalId": "CDLWhitespaceTrimsToInvalid", - "entityType": "Parameter" + "logicalId": "MissingSubRef", + "entityType": "Output" }, - "propertyPath": "Parameters/CDLWhitespaceTrimsToInvalid/Default", - "category": "Parameter", - "startLine": 28, - "startColumn": 5, - "endLine": 28, - "endColumn": 12, - "ruleDescription": "Parameter Default must be in AllowedValues", + "propertyPath": "Outputs/MissingSubRef/Value.Fn::Sub", + "category": "Structure", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 16, + "ruleDescription": "Output value must be a string", "phase": "SCHEMA" }, { - "ruleId": "F2012", + "ruleId": "F6101", "severity": "FATAL", - "message": "Parameter 'CDLListStringType' Default 'bad' is not in AllowedValues ['good', 'better']", + "message": "Fn::Sub variable '${DoesNotExist.Arn}' does not reference a valid resource, parameter, or pseudo-parameter", "source": "SCHEMA", "entity": { - "logicalId": "CDLListStringType", - "entityType": "Parameter" + "logicalId": "MissingSubGetAtt", + "entityType": "Output" }, - "propertyPath": "Parameters/CDLListStringType/Default", - "category": "Parameter", - "startLine": 35, - "startColumn": 5, - "endLine": 35, - "endColumn": 12, - "ruleDescription": "Parameter Default must be in AllowedValues", + "propertyPath": "Outputs/MissingSubGetAtt/Value.Fn::Sub", + "category": "Structure", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 19, + "ruleDescription": "Output value must be a string", "phase": "SCHEMA" }, { - "ruleId": "F2012", + "ruleId": "F6101", "severity": "FATAL", - "message": "Parameter 'CDLListStringType' Default 'worse' is not in AllowedValues ['good', 'better']", + "message": "'DoesNotExist' is not one of ['Arn', 'DomainName', 'DualStackDomainName', 'MetadataConfiguration.AnnotationTableConfiguration.TableArn', 'MetadataConfiguration.AnnotationTableConfiguration.TableName', 'MetadataConfiguration.Destination', 'MetadataConfiguration.InventoryTableConfiguration.TableArn', 'MetadataConfiguration.InventoryTableConfiguration.TableName', 'MetadataConfiguration.JournalTableConfiguration.TableArn', 'MetadataConfiguration.JournalTableConfiguration.TableName', 'MetadataTableConfiguration.S3TablesDestination.TableArn', 'MetadataTableConfiguration.S3TablesDestination.TableNamespace', 'RegionalDomainName', 'WebsiteURL']", "source": "SCHEMA", "entity": { - "logicalId": "CDLListStringType", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/CDLListStringType/Default", - "category": "Parameter", - "startLine": 35, - "startColumn": 5, - "endLine": 35, - "endColumn": 12, - "ruleDescription": "Parameter Default must be in AllowedValues", - "phase": "SCHEMA" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'CDLSingleElementNotAllowed' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "CDLSingleElementNotAllowed", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/CDLSingleElementNotAllowed", - "category": "Best Practice", - "startLine": 5, - "startColumn": 3, - "endLine": 5, - "endColumn": 29, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'CDLMultipleElementsNotAllowed' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "CDLMultipleElementsNotAllowed", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/CDLMultipleElementsNotAllowed", - "category": "Best Practice", - "startLine": 11, - "startColumn": 3, - "endLine": 11, - "endColumn": 32, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'CDLCommaInAllowedValueDoesNotMatchSplit' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "CDLCommaInAllowedValueDoesNotMatchSplit", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/CDLCommaInAllowedValueDoesNotMatchSplit", - "category": "Best Practice", - "startLine": 17, - "startColumn": 3, - "endLine": 17, - "endColumn": 42, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'CDLWhitespaceTrimsToInvalid' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "CDLWhitespaceTrimsToInvalid", - "entityType": "Parameter" + "logicalId": "InvalidExistingAttribute", + "entityType": "Output" }, - "propertyPath": "Parameters/CDLWhitespaceTrimsToInvalid", - "category": "Best Practice", - "startLine": 25, + "propertyPath": "Outputs/InvalidExistingAttribute/Value.Fn::GetAtt.1", + "category": "Structure", + "startLine": 9, "startColumn": 3, - "endLine": 25, - "endColumn": 30, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "endLine": 9, + "endColumn": 27, + "ruleDescription": "Output value must be a string", + "phase": "SCHEMA" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'CDLListStringType' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "CDLListStringType", - "entityType": "Parameter" + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/CDLListStringType", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 32, + "startLine": 3, "startColumn": 3, - "endLine": 32, - "endColumn": 20, - "ruleDescription": "Check if Parameters are Used", + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/parameters/configuration.yaml": { - "filePath": "bad/parameters/configuration.yaml", + "bad/output_value_not_string.yaml": { + "filePath": "bad/output_value_not_string.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 2, - "errors": 14, - "warnings": 16, - "informational": 3, + "fatal": 7, + "errors": 0, + "warnings": 0, + "informational": 4, "debug": 0 }, "suppressed": 0, @@ -71997,649 +71372,711 @@ }, "diagnostics": [ { - "ruleId": "F2002", + "ruleId": "F6101", "severity": "FATAL", - "message": "Parameter 'myParameter' has invalid Type 'NotString'", + "message": "Output 'ValueIsList' value must be a string, not a list", "source": "SCHEMA", "entity": { - "logicalId": "myParameter", - "entityType": "Parameter" + "logicalId": "ValueIsList", + "entityType": "Output" }, - "propertyPath": "Parameters/myParameter/Type", - "category": "Parameter", - "startLine": 22, + "propertyPath": "Outputs/ValueIsList/Value", + "category": "Structure", + "startLine": 17, "startColumn": 5, - "endLine": 22, - "endColumn": 9, - "ruleDescription": "Parameter Type must be valid", - "phase": "SCHEMA" + "endLine": 17, + "endColumn": 10, + "ruleDescription": "Output value must be a string", + "phase": "PARSE" }, { - "ruleId": "F2002", + "ruleId": "F6101", "severity": "FATAL", - "message": "Parameter 'mySsmParam' has invalid Type 'AWS::SSM::Parameter::Value'", + "message": "Output 'ValueIsObject' value must be a string, not an object", "source": "SCHEMA", "entity": { - "logicalId": "mySsmParam", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/mySsmParam/Type", - "category": "Parameter", - "startLine": 30, - "startColumn": 5, - "endLine": 30, - "endColumn": 9, - "ruleDescription": "Parameter Type must be valid", - "phase": "SCHEMA" - }, - { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'allowedValuesNotAList': AllowedValues must be an array", - "source": "CFN_LINT", - "entity": { - "logicalId": "allowedValuesNotAList", - "entityType": "Parameter" + "logicalId": "ValueIsObject", + "entityType": "Output" }, - "propertyPath": "Parameters/allowedValuesNotAList/AllowedValues", - "category": "Parameter", - "startLine": 6, + "propertyPath": "Outputs/ValueIsObject/Value", + "category": "Structure", + "startLine": 21, "startColumn": 5, - "endLine": 6, - "endColumn": 18, - "ruleDescription": "Parameters have appropriate properties", + "endLine": 21, + "endColumn": 10, + "ruleDescription": "Output value must be a string", "phase": "PARSE" }, { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'minValueIsNotNumber': MinValue must be a number", - "source": "CFN_LINT", + "ruleId": "F6101", + "severity": "FATAL", + "message": "Output 'ValueIsGetAZs' value must be a string, not a list", + "source": "SCHEMA", "entity": { - "logicalId": "minValueIsNotNumber", - "entityType": "Parameter" + "logicalId": "ValueIsGetAZs", + "entityType": "Output" }, - "propertyPath": "Parameters/minValueIsNotNumber/MinValue", - "category": "Parameter", - "startLine": 13, + "propertyPath": "Outputs/ValueIsGetAZs/Value", + "category": "Structure", + "startLine": 24, "startColumn": 5, - "endLine": 13, - "endColumn": 13, - "ruleDescription": "Parameters have appropriate properties", + "endLine": 24, + "endColumn": 10, + "ruleDescription": "Output value must be a string", "phase": "PARSE" }, { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'notBooleanEcho': NoEcho must be a boolean", - "source": "CFN_LINT", + "ruleId": "F6101", + "severity": "FATAL", + "message": "Output 'ValueIsSplit' value must be a string, not a list", + "source": "SCHEMA", "entity": { - "logicalId": "notBooleanEcho", - "entityType": "Parameter" + "logicalId": "ValueIsSplit", + "entityType": "Output" }, - "propertyPath": "Parameters/notBooleanEcho/NoEcho", - "category": "Parameter", - "startLine": 19, + "propertyPath": "Outputs/ValueIsSplit/Value", + "category": "Structure", + "startLine": 26, "startColumn": 5, - "endLine": 19, - "endColumn": 11, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" - }, - { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'myInvalidParameter': 'Type' is a required property", - "source": "CFN_LINT", - "entity": { - "logicalId": "myInvalidParameter", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/myInvalidParameter", - "category": "Parameter", - "startLine": 25, - "startColumn": 3, - "endLine": 25, - "endColumn": 21, - "ruleDescription": "Parameters have appropriate properties", + "endLine": 26, + "endColumn": 10, + "ruleDescription": "Output value must be a string", "phase": "PARSE" }, { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'myInvalidParameter': 'NotType' is not one of ['AllowedPattern', 'AllowedValues', 'ConstraintDescription', 'Default', 'Description', 'MaxLength', 'MinLength', 'MaxValue', 'MinValue', 'NoEcho', 'Type']", - "source": "CFN_LINT", + "ruleId": "F6101", + "severity": "FATAL", + "message": "Output 'ValueIsCidr' value must be a string, not a list", + "source": "SCHEMA", "entity": { - "logicalId": "myInvalidParameter", - "entityType": "Parameter" + "logicalId": "ValueIsCidr", + "entityType": "Output" }, - "propertyPath": "Parameters/myInvalidParameter/NotType", - "category": "Parameter", - "startLine": 27, + "propertyPath": "Outputs/ValueIsCidr/Value", + "category": "Structure", + "startLine": 28, "startColumn": 5, - "endLine": 27, - "endColumn": 12, - "ruleDescription": "Parameters have appropriate properties", + "endLine": 28, + "endColumn": 10, + "ruleDescription": "Output value must be a string", "phase": "PARSE" }, { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'NullParameter': None is not of type 'object'", - "source": "CFN_LINT", + "ruleId": "F6101", + "severity": "FATAL", + "message": "Output 'ConditionalListBranch' value must be a string, not a list", + "source": "SCHEMA", "entity": { - "logicalId": "NullParameter", - "entityType": "Parameter" + "logicalId": "ConditionalListBranch", + "entityType": "Output" }, - "propertyPath": "Parameters/NullParameter", - "category": "Parameter", - "startLine": 34, - "startColumn": 3, - "endLine": 34, - "endColumn": 16, - "ruleDescription": "Parameters have appropriate properties", + "propertyPath": "Outputs/ConditionalListBranch/Value/Fn::If/1", + "category": "Structure", + "startLine": 30, + "startColumn": 25, + "endLine": 30, + "endColumn": 26, + "ruleDescription": "Output value must be a string", "phase": "PARSE" }, { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'NullParamType': Type must not be null", - "source": "CFN_LINT", + "ruleId": "F6101", + "severity": "FATAL", + "message": "Output 'ConditionalListBranch' value must be a string, not a list", + "source": "SCHEMA", "entity": { - "logicalId": "NullParamType", - "entityType": "Parameter" + "logicalId": "ConditionalListBranch", + "entityType": "Output" }, - "propertyPath": "Parameters/NullParamType/Type", - "category": "Parameter", - "startLine": 36, - "startColumn": 5, - "endLine": 36, - "endColumn": 9, - "ruleDescription": "Parameters have appropriate properties", + "propertyPath": "Outputs/ConditionalListBranch/Value/Fn::If/2", + "category": "Structure", + "startLine": 30, + "startColumn": 35, + "endLine": 30, + "endColumn": 36, + "ruleDescription": "Output value must be a string", "phase": "PARSE" }, { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'NullParamDefault': Default must not be null", + "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": "NullParamDefault", - "entityType": "Parameter" + "logicalId": "Queue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Parameters/NullParamDefault/Default", - "category": "Parameter", - "startLine": 39, - "startColumn": 5, - "endLine": 39, - "endColumn": 12, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" + "category": "Best Practice", + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 8, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'NullParamDescription': Description must not be null", + "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": "NullParamDescription", - "entityType": "Parameter" + "logicalId": "Queue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Parameters/NullParamDescription/Description", - "category": "Parameter", - "startLine": 42, - "startColumn": 5, - "endLine": 42, - "endColumn": 16, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" + "category": "Best Practice", + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 8, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'NullParamMaxValue': MaxValue must not be null", + "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": "NullParamMaxValue", - "entityType": "Parameter" + "logicalId": "Queue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Parameters/NullParamMaxValue/MaxValue", - "category": "Parameter", - "startLine": 45, - "startColumn": 5, - "endLine": 45, - "endColumn": 13, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" + "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": "E2001", - "severity": "ERROR", - "message": "Parameter 'NullParamMinValue': MinValue must not be null", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Queue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "NullParamMinValue", - "entityType": "Parameter" + "logicalId": "Queue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Parameters/NullParamMinValue/MinValue", - "category": "Parameter", - "startLine": 48, - "startColumn": 5, - "endLine": 48, - "endColumn": 13, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" + "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/override/complete.yaml": { + "filePath": "bad/override/complete.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 1, + "errors": 1, + "warnings": 1, + "informational": 7, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'NullParamMaxLength': MaxLength must not be null", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'SpotFleetRequestConfigData' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "NullParamMaxLength", - "entityType": "Parameter" + "logicalId": "mySpotFleet", + "entityType": "Resource", + "resourceType": "AWS::EC2::SpotFleet" }, - "propertyPath": "Parameters/NullParamMaxLength/MaxLength", - "category": "Parameter", - "startLine": 51, - "startColumn": 5, - "endLine": 51, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'SpotFleetRequestConfigData'", + "category": "Schema", + "startLine": 20, + "startColumn": 3, + "endLine": 20, "endColumn": 14, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "E2001", + "ruleId": "E1152", "severity": "ERROR", - "message": "Parameter 'NullParamMinLength': MinLength must not be null", + "message": "'ami-123456' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "NullParamMinLength", - "entityType": "Parameter" + "logicalId": "untaggedInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/NullParamMinLength/MinLength", - "category": "Parameter", - "startLine": 54, - "startColumn": 5, - "endLine": 54, + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 14, + "startColumn": 7, + "endLine": 14, "endColumn": 14, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-123456" + } }, { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'NullParamNoEcho': NoEcho must not be null", + "ruleId": "W3045", + "severity": "WARN", + "message": "AccessControl property is deprecated. Use bucket policies instead", "source": "CFN_LINT", "entity": { - "logicalId": "NullParamNoEcho", - "entityType": "Parameter" + "logicalId": "myS3Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/NullParamNoEcho/NoEcho", - "category": "Parameter", - "startLine": 57, - "startColumn": 5, - "endLine": 57, - "endColumn": 11, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" + "propertyPath": "Properties.AccessControl", + "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", + "category": "Deprecation", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 20, + "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", + "phase": "LINT", + "context": { + "actualValue": "Private" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'allowedValuesNotAList' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "allowedValuesNotAList", - "entityType": "Parameter" + "logicalId": "untaggedInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/allowedValuesNotAList", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 24, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'allowedValuesAListofBadTypes' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "allowedValuesAListofBadTypes", - "entityType": "Parameter" + "logicalId": "VPC", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Parameters/allowedValuesAListofBadTypes", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 31, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 18, + "startColumn": 9, + "endLine": 18, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'minValueIsNotNumber' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "minValueIsNotNumber", - "entityType": "Parameter" + "logicalId": "myS3Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/minValueIsNotNumber", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 11, - "startColumn": 3, - "endLine": 11, - "endColumn": 22, - "ruleDescription": "Check if Parameters are Used", + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'maxLengthIsNotString' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'untaggedInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "maxLengthIsNotString", - "entityType": "Parameter" + "logicalId": "untaggedInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/maxLengthIsNotString", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 14, - "startColumn": 3, - "endLine": 14, - "endColumn": 23, - "ruleDescription": "Check if Parameters are Used", + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'notBooleanEcho' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'VPC' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "notBooleanEcho", - "entityType": "Parameter" + "logicalId": "VPC", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Parameters/notBooleanEcho", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 17, - "startColumn": 3, + "startColumn": 7, "endLine": 17, "endColumn": 17, - "ruleDescription": "Check if Parameters are Used", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'myParameter' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'mySpotFleet' of type 'AWS::EC2::SpotFleet' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "myParameter", - "entityType": "Parameter" + "logicalId": "mySpotFleet", + "entityType": "Resource", + "resourceType": "AWS::EC2::SpotFleet" }, - "propertyPath": "Parameters/myParameter", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 20, "startColumn": 3, "endLine": 20, "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'myInvalidParameter' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "myInvalidParameter", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/myInvalidParameter", - "category": "Best Practice", - "startLine": 25, - "startColumn": 3, - "endLine": 25, - "endColumn": 21, - "ruleDescription": "Check if Parameters are Used", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'mySsmParam' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'mySnsTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "mySsmParam", - "entityType": "Parameter" + "logicalId": "mySnsTopic", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Parameters/mySsmParam", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 28, + "startLine": 23, "startColumn": 3, - "endLine": 28, + "endLine": 23, "endColumn": 13, - "ruleDescription": "Check if Parameters are Used", + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/override/exclude.yaml": { + "filePath": "bad/override/exclude.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'NullParamType' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myGameLift' of type 'AWS::GameLift::Alias' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "NullParamType", - "entityType": "Parameter" + "logicalId": "myGameLift", + "entityType": "Resource", + "resourceType": "AWS::GameLift::Alias" }, - "propertyPath": "Parameters/NullParamType", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 35, - "startColumn": 3, - "endLine": 35, - "endColumn": 16, - "ruleDescription": "Check if Parameters are Used", + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'NullParamDefault' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "NullParamDefault", - "entityType": "Parameter" + "logicalId": "myS3Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/NullParamDefault", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 37, + "startLine": 14, "startColumn": 3, - "endLine": 37, - "endColumn": 19, - "ruleDescription": "Check if Parameters are Used", + "endLine": 14, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'NullParamDescription' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'mySnsTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "NullParamDescription", - "entityType": "Parameter" + "logicalId": "mySnsTopic", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Parameters/NullParamDescription", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 40, + "startLine": 16, "startColumn": 3, - "endLine": 40, - "endColumn": 23, - "ruleDescription": "Check if Parameters are Used", + "endLine": 16, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/override/include.yaml": { + "filePath": "bad/override/include.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 6, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W2001", + "ruleId": "W2511", "severity": "WARN", - "message": "Parameter 'NullParamMaxValue' is not referenced anywhere in the template", + "message": "IAM Policy Version should be updated to '2012-10-17'", "source": "CFN_LINT", "entity": { - "logicalId": "NullParamMaxValue", - "entityType": "Parameter" + "logicalId": "myS3BucketPolicy", + "entityType": "Resource", + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Parameters/NullParamMaxValue", - "category": "Best Practice", - "startLine": 43, - "startColumn": 3, - "endLine": 43, - "endColumn": 20, - "ruleDescription": "Check if Parameters are Used", + "propertyPath": "Properties.PolicyDocument.Version", + "suggestedFix": "Update the policy document Version to '2012-10-17'", + "category": "Security", + "startLine": 20, + "startColumn": 9, + "endLine": 20, + "endColumn": 16, + "ruleDescription": "Check IAM Resource Policies syntax", "phase": "LINT" }, { - "ruleId": "W2001", + "ruleId": "W3011", "severity": "WARN", - "message": "Parameter 'NullParamMinValue' is not referenced anywhere in the template", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", "source": "CFN_LINT", "entity": { - "logicalId": "NullParamMinValue", - "entityType": "Parameter" + "logicalId": "myS3BucketPolicy", + "entityType": "Resource", + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Parameters/NullParamMinValue", "category": "Best Practice", - "startLine": 46, + "startLine": 13, "startColumn": 3, - "endLine": 46, - "endColumn": 20, - "ruleDescription": "Check if Parameters are Used", + "endLine": 13, + "endColumn": 19, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'NullParamMaxLength' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "NullParamMaxLength", - "entityType": "Parameter" + "logicalId": "myVpc1", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Parameters/NullParamMaxLength", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 49, - "startColumn": 3, - "endLine": 49, - "endColumn": 21, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'NullParamMinLength' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "NullParamMinLength", - "entityType": "Parameter" + "logicalId": "myVpc1", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Parameters/NullParamMinLength", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 52, - "startColumn": 3, - "endLine": 52, - "endColumn": 21, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'NullParamNoEcho' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "NullParamNoEcho", - "entityType": "Parameter" + "logicalId": "myS3BucketPolicy", + "entityType": "Resource", + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Parameters/NullParamNoEcho", + "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 55, - "startColumn": 3, - "endLine": 55, - "endColumn": 18, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'myS3Bucket'" + } }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'myVpc1' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "IamPipeline", + "logicalId": "myVpc1", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::EC2::VPC" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 60, - "startColumn": 3, - "endLine": 60, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'myS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "IamPipeline", + "logicalId": "myS3Bucket", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::S3::Bucket" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 60, + "startLine": 11, "startColumn": 3, - "endLine": 60, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 11, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'IamPipeline' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Resource 'mySnsTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "IamPipeline", + "logicalId": "mySnsTopic", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 62, - "startColumn": 5, - "endLine": 62, - "endColumn": 15, + "startLine": 27, + "startColumn": 3, + "endLine": 27, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/parameters/default.yaml": { - "filePath": "bad/parameters/default.yaml", + "bad/override/required.yaml": { + "filePath": "bad/override/required.yaml", "status": "OK", "metadata": { - "resourcesScanned": 0, + "resourcesScanned": 1, "counts": { - "fatal": 11, - "errors": 3, - "warnings": 9, - "informational": 0, + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -72648,140 +72085,81 @@ }, "diagnostics": [ { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "startLine": 61, - "startColumn": 1, - "endLine": 61, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" - }, - { - "ruleId": "F2012", - "severity": "FATAL", - "message": "Parameter 'myAllowedValue' Default 'us-east-1a' is not in AllowedValues ['us-east-1b', 'us-east-1c', 'us-east-1d']", - "source": "SCHEMA", - "entity": { - "logicalId": "myAllowedValue", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/myAllowedValue/Default", - "category": "Parameter", - "startLine": 18, - "startColumn": 5, - "endLine": 18, - "endColumn": 12, - "ruleDescription": "Parameter Default must be in AllowedValues", - "phase": "SCHEMA" - }, - { - "ruleId": "F2012", - "severity": "FATAL", - "message": "Parameter 'CDLAllowedValues' Default 'three' is not in AllowedValues ['one', 'two', 'three,four']", - "source": "SCHEMA", - "entity": { - "logicalId": "CDLAllowedValues", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/CDLAllowedValues/Default", - "category": "Parameter", - "startLine": 47, - "startColumn": 5, - "endLine": 47, - "endColumn": 12, - "ruleDescription": "Parameter Default must be in AllowedValues", - "phase": "SCHEMA" - }, - { - "ruleId": "F2012", - "severity": "FATAL", - "message": "Parameter 'CDLAllowedValuesWithSpaces' Default 'four' is not in AllowedValues ['one', 'two', 'three, four']", - "source": "SCHEMA", - "entity": { - "logicalId": "CDLAllowedValuesWithSpaces", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/CDLAllowedValuesWithSpaces/Default", - "category": "Parameter", - "startLine": 56, - "startColumn": 5, - "endLine": 56, - "endColumn": 12, - "ruleDescription": "Parameter Default must be in AllowedValues", - "phase": "SCHEMA" - }, - { - "ruleId": "F2012", - "severity": "FATAL", - "message": "Parameter 'CDLAllowedValuesWithSpaces' Default 'three' is not in AllowedValues ['one', 'two', 'three, four']", - "source": "SCHEMA", - "entity": { - "logicalId": "CDLAllowedValuesWithSpaces", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/CDLAllowedValuesWithSpaces/Default", - "category": "Parameter", - "startLine": 56, - "startColumn": 5, - "endLine": 56, - "endColumn": 12, - "ruleDescription": "Parameter Default must be in AllowedValues", - "phase": "SCHEMA" - }, - { - "ruleId": "F2015", - "severity": "FATAL", - "message": "Parameter 'myAllowedPattern' Default 'vpc!@#$' does not match AllowedPattern '^[a-zA-Z0-9]*$'", - "source": "SCHEMA", + "ruleId": "W3045", + "severity": "WARN", + "message": "AccessControl property is deprecated. Use bucket policies instead", + "source": "CFN_LINT", "entity": { - "logicalId": "myAllowedPattern", - "entityType": "Parameter" + "logicalId": "myS3Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/myAllowedPattern/Default", - "category": "Parameter", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 12, - "ruleDescription": "Default value is within parameter constraints", - "phase": "SCHEMA" + "propertyPath": "Properties.AccessControl", + "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", + "category": "Deprecation", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 20, + "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", + "phase": "LINT", + "context": { + "actualValue": "Private" + } }, { - "ruleId": "F2015", - "severity": "FATAL", - "message": "Parameter 'myMinValue' Default 0 is less than MinValue 1", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "myMinValue", - "entityType": "Parameter" + "logicalId": "myS3Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/myMinValue/Default", - "category": "Parameter", - "startLine": 10, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 8, "startColumn": 5, - "endLine": 10, - "endColumn": 12, - "ruleDescription": "Default value is within parameter constraints", - "phase": "SCHEMA" + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/param_constraints.yaml": { + "filePath": "bad/param_constraints.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 5, + "errors": 0, + "warnings": 5, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "F2015", "severity": "FATAL", - "message": "Parameter 'myMaxValue' Default 1 exceeds MaxValue 0", + "message": "Parameter 'PatternParam' Default '123-bad' does not match AllowedPattern '^[a-z]+$'", "source": "SCHEMA", "entity": { - "logicalId": "myMaxValue", + "logicalId": "PatternParam", "entityType": "Parameter" }, - "propertyPath": "Parameters/myMaxValue/Default", + "propertyPath": "Parameters/PatternParam/Default", "category": "Parameter", - "startLine": 14, + "startLine": 5, "startColumn": 5, - "endLine": 14, + "endLine": 5, "endColumn": 12, "ruleDescription": "Default value is within parameter constraints", "phase": "SCHEMA" @@ -72789,17 +72167,17 @@ { "ruleId": "F2015", "severity": "FATAL", - "message": "Parameter 'myMinLength' Default length 3 is less than MinLength 5", + "message": "Parameter 'ShortParam' Default length 2 is less than MinLength 5", "source": "SCHEMA", "entity": { - "logicalId": "myMinLength", + "logicalId": "ShortParam", "entityType": "Parameter" }, - "propertyPath": "Parameters/myMinLength/Default", + "propertyPath": "Parameters/ShortParam/Default", "category": "Parameter", - "startLine": 25, + "startLine": 9, "startColumn": 5, - "endLine": 25, + "endLine": 9, "endColumn": 12, "ruleDescription": "Default value is within parameter constraints", "phase": "SCHEMA" @@ -72807,17 +72185,17 @@ { "ruleId": "F2015", "severity": "FATAL", - "message": "Parameter 'myMaxLength' Default length 3 exceeds MaxLength 1", + "message": "Parameter 'LongParam' Default length 34 exceeds MaxLength 10", "source": "SCHEMA", "entity": { - "logicalId": "myMaxLength", + "logicalId": "LongParam", "entityType": "Parameter" }, - "propertyPath": "Parameters/myMaxLength/Default", + "propertyPath": "Parameters/LongParam/Default", "category": "Parameter", - "startLine": 29, + "startLine": 13, "startColumn": 5, - "endLine": 29, + "endLine": 13, "endColumn": 12, "ruleDescription": "Default value is within parameter constraints", "phase": "SCHEMA" @@ -72825,249 +72203,161 @@ { "ruleId": "F2015", "severity": "FATAL", - "message": "Parameter 'CDLAllowedPattern' Default does not match AllowedPattern '[a-z]*$'", + "message": "Parameter 'SmallNumber' Default 3 is less than MinValue 10", "source": "SCHEMA", "entity": { - "logicalId": "CDLAllowedPattern", + "logicalId": "SmallNumber", "entityType": "Parameter" }, - "propertyPath": "Parameters/CDLAllowedPattern/Default", + "propertyPath": "Parameters/SmallNumber/Default", "category": "Parameter", - "startLine": 42, + "startLine": 17, "startColumn": 5, - "endLine": 42, + "endLine": 17, "endColumn": 12, "ruleDescription": "Default value is within parameter constraints", "phase": "SCHEMA" }, - { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'MyEmptyDefault': Default must be a string", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyEmptyDefault", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/MyEmptyDefault/Default", - "category": "Parameter", - "startLine": 33, - "startColumn": 5, - "endLine": 33, - "endColumn": 12, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" - }, - { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'MyRefDefault': Type must be a string", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyRefDefault", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/MyRefDefault/Type", - "category": "Parameter", - "startLine": 35, - "startColumn": 5, - "endLine": 35, - "endColumn": 9, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" - }, - { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'MyRefDefault': Default must be a string", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyRefDefault", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/MyRefDefault/Default", - "category": "Parameter", - "startLine": 36, - "startColumn": 5, - "endLine": 36, - "endColumn": 12, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'myAllowedPattern' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "myAllowedPattern", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/myAllowedPattern", - "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 19, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'myMinValue' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "myMinValue", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/myMinValue", - "category": "Best Practice", - "startLine": 8, - "startColumn": 3, - "endLine": 8, - "endColumn": 13, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'myMaxValue' is not referenced anywhere in the template", - "source": "CFN_LINT", + { + "ruleId": "F2015", + "severity": "FATAL", + "message": "Parameter 'BigNumber' Default 200 exceeds MaxValue 100", + "source": "SCHEMA", "entity": { - "logicalId": "myMaxValue", + "logicalId": "BigNumber", "entityType": "Parameter" }, - "propertyPath": "Parameters/myMaxValue", - "category": "Best Practice", - "startLine": 12, - "startColumn": 3, - "endLine": 12, - "endColumn": 13, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "propertyPath": "Parameters/BigNumber/Default", + "category": "Parameter", + "startLine": 21, + "startColumn": 5, + "endLine": 21, + "endColumn": 12, + "ruleDescription": "Default value is within parameter constraints", + "phase": "SCHEMA" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'myAllowedValue' is not referenced anywhere in the template", + "message": "Parameter 'PatternParam' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "myAllowedValue", + "logicalId": "PatternParam", "entityType": "Parameter" }, - "propertyPath": "Parameters/myAllowedValue", + "propertyPath": "Parameters/PatternParam", "category": "Best Practice", - "startLine": 16, + "startLine": 3, "startColumn": 3, - "endLine": 16, - "endColumn": 17, + "endLine": 3, + "endColumn": 15, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'MyEmptyDefault' is not referenced anywhere in the template", + "message": "Parameter 'ShortParam' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "MyEmptyDefault", + "logicalId": "ShortParam", "entityType": "Parameter" }, - "propertyPath": "Parameters/MyEmptyDefault", + "propertyPath": "Parameters/ShortParam", "category": "Best Practice", - "startLine": 31, + "startLine": 7, "startColumn": 3, - "endLine": 31, - "endColumn": 17, + "endLine": 7, + "endColumn": 13, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'MyRefDefault' is not referenced anywhere in the template", + "message": "Parameter 'LongParam' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "MyRefDefault", + "logicalId": "LongParam", "entityType": "Parameter" }, - "propertyPath": "Parameters/MyRefDefault", + "propertyPath": "Parameters/LongParam", "category": "Best Practice", - "startLine": 34, + "startLine": 11, "startColumn": 3, - "endLine": 34, - "endColumn": 15, + "endLine": 11, + "endColumn": 12, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'CDLAllowedPattern' is not referenced anywhere in the template", + "message": "Parameter 'SmallNumber' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "CDLAllowedPattern", + "logicalId": "SmallNumber", "entityType": "Parameter" }, - "propertyPath": "Parameters/CDLAllowedPattern", + "propertyPath": "Parameters/SmallNumber", "category": "Best Practice", - "startLine": 37, + "startLine": 15, "startColumn": 3, - "endLine": 37, - "endColumn": 20, + "endLine": 15, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'CDLAllowedValues' is not referenced anywhere in the template", + "message": "Parameter 'BigNumber' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "CDLAllowedValues", + "logicalId": "BigNumber", "entityType": "Parameter" }, - "propertyPath": "Parameters/CDLAllowedValues", + "propertyPath": "Parameters/BigNumber", "category": "Best Practice", - "startLine": 43, + "startLine": 19, "startColumn": 3, - "endLine": 43, - "endColumn": 19, + "endLine": 19, + "endColumn": 12, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'CDLAllowedValuesWithSpaces' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "CDLAllowedValuesWithSpaces", - "entityType": "Parameter" + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/CDLAllowedValuesWithSpaces", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 52, + "startLine": 24, "startColumn": 3, - "endLine": 52, - "endColumn": 29, - "ruleDescription": "Check if Parameters are Used", + "endLine": 24, + "endColumn": 9, + "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/pipeline_no_source_first_stage.yaml": { - "filePath": "bad/pipeline_no_source_first_stage.yaml", + "bad/param_number_default.yaml": { + "filePath": "bad/param_number_default.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 2, - "errors": 1, - "warnings": 2, - "informational": 2, + "fatal": 4, + "errors": 0, + "warnings": 1, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -73076,163 +72366,107 @@ }, "diagnostics": [ { - "ruleId": "F3014", + "ruleId": "F0015", "severity": "FATAL", - "message": "Exactly one of ['ArtifactStore', 'ArtifactStores'] must be specified", + "message": "Parameter 'Port' Default 'not-a-number' is not a valid number", "source": "SCHEMA", "entity": { - "logicalId": "Pipeline", - "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "logicalId": "Port", + "entityType": "Parameter" }, - "propertyPath": "Properties", - "category": "Schema", + "propertyPath": "Parameters/Port/Default", + "category": "Parameter", "startLine": 5, "startColumn": 5, "endLine": 5, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", - "ruleDescription": "Exactly one of properties required (requiredXor)", + "endColumn": 12, + "ruleDescription": "Default value must match parameter Type", "phase": "SCHEMA" }, { - "ruleId": "F3032", + "ruleId": "F0016", "severity": "FATAL", - "message": "expected minimum item count: 2, found: 1", + "message": "Parameter 'Port' AllowedValues entry 'abc' is not a valid number", "source": "SCHEMA", "entity": { - "logicalId": "Pipeline", - "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "logicalId": "Port", + "entityType": "Parameter" }, - "propertyPath": "Properties.Stages", - "category": "Schema", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", - "ruleDescription": "Array item count out of bounds", - "phase": "SCHEMA", - "context": { - "extra": { - "actual_count": 1, - "min_items": 2 - } - } + "propertyPath": "Parameters/Port/AllowedValues", + "category": "Parameter", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 18, + "ruleDescription": "AllowedValues entries must match parameter Type", + "phase": "SCHEMA" }, { - "ruleId": "E3700", - "severity": "ERROR", - "message": "First stage of a pipeline must contain at least one Source action", - "source": "CFN_LINT", + "ruleId": "F0016", + "severity": "FATAL", + "message": "Parameter 'Port' AllowedValues entry 'def' is not a valid number", + "source": "SCHEMA", "entity": { - "logicalId": "Pipeline", - "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "logicalId": "Port", + "entityType": "Parameter" }, - "propertyPath": "Properties.Stages[0]", - "suggestedFix": "Add an action with ActionTypeId.Category=Source to the first stage", - "category": "Resource", - "startLine": 5, + "propertyPath": "Parameters/Port/AllowedValues", + "category": "Parameter", + "startLine": 6, "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Validate CodePipeline Source actions are only in the first stage", - "phase": "LINT" + "endLine": 6, + "endColumn": 18, + "ruleDescription": "AllowedValues entries must match parameter Type", + "phase": "SCHEMA" }, { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", - "source": "ENGINE", + "ruleId": "F2012", + "severity": "FATAL", + "message": "Parameter 'Port' Default 'not-a-number' is not in AllowedValues ['abc', 'def']", + "source": "SCHEMA", "entity": { - "logicalId": "Pipeline", - "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "logicalId": "Port", + "entityType": "Parameter" }, - "propertyPath": "Properties.RoleArn", - "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 14, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" + "propertyPath": "Parameters/Port/Default", + "category": "Parameter", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 12, + "ruleDescription": "Parameter Default must be in AllowedValues", + "phase": "SCHEMA" }, { - "ruleId": "W9013", + "ruleId": "W2001", "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", + "message": "Parameter 'Port' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "Pipeline", - "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "logicalId": "Port", + "entityType": "Parameter" }, - "category": "Security", + "propertyPath": "Parameters/Port", + "category": "Best Practice", "startLine": 3, "startColumn": 3, "endLine": 3, - "endColumn": 11, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Pipeline", - "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" - }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Pipeline' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Pipeline", - "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endColumn": 7, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" } ] }, - "bad/previous_gen_instance.yaml": { - "filePath": "bad/previous_gen_instance.yaml", + "bad/parameters/F2012_cdl_default_split.yaml": { + "filePath": "bad/parameters/F2012_cdl_default_split.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 0, + "fatal": 8, "errors": 0, - "warnings": 1, - "informational": 5, + "warnings": 5, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -73241,1174 +72475,902 @@ }, "diagnostics": [ { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", - "source": "ENGINE", - "entity": { - "logicalId": "Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", - "phase": "LINT" - }, - { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'm1.small' - consider upgrading", - "source": "CFN_LINT", - "entity": { - "logicalId": "Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.InstanceType", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 19, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F2012", + "severity": "FATAL", + "message": "Parameter 'CDLSingleElementNotAllowed' Default 'three' is not in AllowedValues ['one', 'two']", + "source": "SCHEMA", "entity": { - "logicalId": "Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "CDLSingleElementNotAllowed", + "entityType": "Parameter" }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", + "propertyPath": "Parameters/CDLSingleElementNotAllowed/Default", + "category": "Parameter", "startLine": 7, - "startColumn": 7, + "startColumn": 5, "endLine": 7, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" + "endColumn": 12, + "ruleDescription": "Parameter Default must be in AllowedValues", + "phase": "SCHEMA" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F2012", + "severity": "FATAL", + "message": "Parameter 'CDLMultipleElementsNotAllowed' Default 'four' is not in AllowedValues ['one', 'two']", + "source": "SCHEMA", "entity": { - "logicalId": "Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "CDLMultipleElementsNotAllowed", + "entityType": "Parameter" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, + "propertyPath": "Parameters/CDLMultipleElementsNotAllowed/Default", + "category": "Parameter", + "startLine": 13, "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/previous_generation_instances.yaml": { - "filePath": "bad/previous_generation_instances.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 6, - "counts": { - "fatal": 1, - "errors": 2, - "warnings": 0, - "informational": 23, - "debug": 0 + "endLine": 13, + "endColumn": 12, + "ruleDescription": "Parameter Default must be in AllowedValues", + "phase": "SCHEMA" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3003", + "ruleId": "F2012", "severity": "FATAL", - "message": "'AvailabilityZone' is a required property", + "message": "Parameter 'CDLMultipleElementsNotAllowed' Default 'three' is not in AllowedValues ['one', 'two']", "source": "SCHEMA", "entity": { - "logicalId": "Host", - "entityType": "Resource", - "resourceType": "AWS::EC2::Host" + "logicalId": "CDLMultipleElementsNotAllowed", + "entityType": "Parameter" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'AvailabilityZone'", - "category": "Schema", - "startLine": 26, + "propertyPath": "Parameters/CDLMultipleElementsNotAllowed/Default", + "category": "Parameter", + "startLine": 13, "startColumn": 5, - "endLine": 26, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Required property missing", + "endLine": 13, + "endColumn": 12, + "ruleDescription": "Parameter Default must be in AllowedValues", "phase": "SCHEMA" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-abc' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-abc" - } - }, - { - "ruleId": "E3647", - "severity": "ERROR", - "message": "'cache.r3.large' is not valid in any region", - "source": "CFN_LINT", + "ruleId": "F2012", + "severity": "FATAL", + "message": "Parameter 'CDLCommaInAllowedValueDoesNotMatchSplit' Default 'four' is not in AllowedValues ['one', 'two', 'three,four']", + "source": "SCHEMA", "entity": { - "logicalId": "CacheCluster", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::CacheCluster" - }, - "propertyPath": "Properties.CacheNodeType", - "category": "Resource", - "startLine": 16, - "startColumn": 7, - "endLine": 16, - "endColumn": 20, - "ruleDescription": "Validate ElastiCache cluster cache node type", - "phase": "LINT" + "logicalId": "CDLCommaInAllowedValueDoesNotMatchSplit", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/CDLCommaInAllowedValueDoesNotMatchSplit/Default", + "category": "Parameter", + "startLine": 20, + "startColumn": 5, + "endLine": 20, + "endColumn": 12, + "ruleDescription": "Parameter Default must be in AllowedValues", + "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", + "ruleId": "F2012", + "severity": "FATAL", + "message": "Parameter 'CDLCommaInAllowedValueDoesNotMatchSplit' Default 'three' is not in AllowedValues ['one', 'two', 'three,four']", + "source": "SCHEMA", "entity": { - "logicalId": "Domain", - "entityType": "Resource", - "resourceType": "AWS::Elasticsearch::Domain" + "logicalId": "CDLCommaInAllowedValueDoesNotMatchSplit", + "entityType": "Parameter" }, - "category": "Best Practice", - "startLine": 2, - "startColumn": 3, - "endLine": 2, - "endColumn": 9, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Parameters/CDLCommaInAllowedValueDoesNotMatchSplit/Default", + "category": "Parameter", + "startLine": 20, + "startColumn": 5, + "endLine": 20, + "endColumn": 12, + "ruleDescription": "Parameter Default must be in AllowedValues", + "phase": "SCHEMA" }, { - "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", + "ruleId": "F2012", + "severity": "FATAL", + "message": "Parameter 'CDLWhitespaceTrimsToInvalid' Default 'bad' is not in AllowedValues ['one', 'two']", + "source": "SCHEMA", "entity": { - "logicalId": "Domain", - "entityType": "Resource", - "resourceType": "AWS::Elasticsearch::Domain" + "logicalId": "CDLWhitespaceTrimsToInvalid", + "entityType": "Parameter" }, - "category": "Best Practice", - "startLine": 2, - "startColumn": 3, - "endLine": 2, - "endColumn": 9, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Parameters/CDLWhitespaceTrimsToInvalid/Default", + "category": "Parameter", + "startLine": 28, + "startColumn": 5, + "endLine": 28, + "endColumn": 12, + "ruleDescription": "Parameter Default must be in AllowedValues", + "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", + "ruleId": "F2012", + "severity": "FATAL", + "message": "Parameter 'CDLListStringType' Default 'bad' is not in AllowedValues ['good', 'better']", + "source": "SCHEMA", "entity": { - "logicalId": "DBInstance", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "CDLListStringType", + "entityType": "Parameter" }, - "category": "Best Practice", - "startLine": 9, - "startColumn": 3, - "endLine": 9, - "endColumn": 13, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Parameters/CDLListStringType/Default", + "category": "Parameter", + "startLine": 35, + "startColumn": 5, + "endLine": 35, + "endColumn": 12, + "ruleDescription": "Parameter Default must be in AllowedValues", + "phase": "SCHEMA" }, { - "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", + "ruleId": "F2012", + "severity": "FATAL", + "message": "Parameter 'CDLListStringType' Default 'worse' is not in AllowedValues ['good', 'better']", + "source": "SCHEMA", "entity": { - "logicalId": "DBInstance", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "CDLListStringType", + "entityType": "Parameter" }, - "category": "Best Practice", - "startLine": 9, - "startColumn": 3, - "endLine": 9, - "endColumn": 13, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Parameters/CDLListStringType/Default", + "category": "Parameter", + "startLine": 35, + "startColumn": 5, + "endLine": 35, + "endColumn": 12, + "ruleDescription": "Parameter Default must be in AllowedValues", + "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)", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'CDLSingleElementNotAllowed' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "CacheCluster", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::CacheCluster" + "logicalId": "CDLSingleElementNotAllowed", + "entityType": "Parameter" }, + "propertyPath": "Parameters/CDLSingleElementNotAllowed", "category": "Best Practice", - "startLine": 13, + "startLine": 5, "startColumn": 3, - "endLine": 13, - "endColumn": 15, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 5, + "endColumn": 29, + "ruleDescription": "Check if Parameters are Used", "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)", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'CDLMultipleElementsNotAllowed' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "CacheCluster", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::CacheCluster" + "logicalId": "CDLMultipleElementsNotAllowed", + "entityType": "Parameter" }, + "propertyPath": "Parameters/CDLMultipleElementsNotAllowed", "category": "Best Practice", - "startLine": 13, + "startLine": 11, "startColumn": 3, - "endLine": 13, - "endColumn": 15, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 11, + "endColumn": 32, + "ruleDescription": "Check if Parameters are Used", "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)", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'CDLCommaInAllowedValueDoesNotMatchSplit' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Domain2", - "entityType": "Resource", - "resourceType": "AWS::Elasticsearch::Domain" + "logicalId": "CDLCommaInAllowedValueDoesNotMatchSplit", + "entityType": "Parameter" }, + "propertyPath": "Parameters/CDLCommaInAllowedValueDoesNotMatchSplit", "category": "Best Practice", - "startLine": 19, + "startLine": 17, "startColumn": 3, - "endLine": 19, - "endColumn": 10, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 17, + "endColumn": 42, + "ruleDescription": "Check if Parameters are Used", "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)", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'CDLWhitespaceTrimsToInvalid' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Domain2", - "entityType": "Resource", - "resourceType": "AWS::Elasticsearch::Domain" + "logicalId": "CDLWhitespaceTrimsToInvalid", + "entityType": "Parameter" }, + "propertyPath": "Parameters/CDLWhitespaceTrimsToInvalid", "category": "Best Practice", - "startLine": 19, + "startLine": 25, "startColumn": 3, - "endLine": 19, - "endColumn": 10, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 25, + "endColumn": 30, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'm1.small' - consider upgrading", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'CDLListStringType' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "CDLListStringType", + "entityType": "Parameter" }, - "propertyPath": "Properties.InstanceType", - "suggestedFix": "Upgrade to a current generation instance type", + "propertyPath": "Parameters/CDLListStringType", "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 19, - "ruleDescription": "Checks for legacy instance type generations", + "startLine": 32, + "startColumn": 3, + "endLine": 32, + "endColumn": 20, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" + } + ] + }, + "bad/parameters/configuration.yaml": { + "filePath": "bad/parameters/configuration.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 2, + "errors": 14, + "warnings": 16, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'db.t1.micro' - consider upgrading", - "source": "CFN_LINT", + "ruleId": "F2002", + "severity": "FATAL", + "message": "Parameter 'myParameter' has invalid Type 'NotString'", + "source": "SCHEMA", "entity": { - "logicalId": "DBInstance", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "myParameter", + "entityType": "Parameter" }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" + "propertyPath": "Parameters/myParameter/Type", + "category": "Parameter", + "startLine": 22, + "startColumn": 5, + "endLine": 22, + "endColumn": 9, + "ruleDescription": "Parameter Type must be valid", + "phase": "SCHEMA" }, { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", - "source": "CFN_LINT", + "ruleId": "F2002", + "severity": "FATAL", + "message": "Parameter 'mySsmParam' has invalid Type 'AWS::SSM::Parameter::Value'", + "source": "SCHEMA", "entity": { - "logicalId": "CacheCluster", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::CacheCluster" + "logicalId": "mySsmParam", + "entityType": "Parameter" }, - "propertyPath": "Properties.CacheNodeType", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 16, - "startColumn": 7, - "endLine": 16, - "endColumn": 20, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" + "propertyPath": "Parameters/mySsmParam/Type", + "category": "Parameter", + "startLine": 30, + "startColumn": 5, + "endLine": 30, + "endColumn": 9, + "ruleDescription": "Parameter Type must be valid", + "phase": "SCHEMA" }, { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'm3.medium.elasticsearch' - consider upgrading", + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'allowedValuesNotAList': AllowedValues must be an array", "source": "CFN_LINT", "entity": { - "logicalId": "Domain2", - "entityType": "Resource", - "resourceType": "AWS::Elasticsearch::Domain" + "logicalId": "allowedValuesNotAList", + "entityType": "Parameter" }, - "propertyPath": "Properties.ElasticsearchClusterConfig.InstanceType", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 23, - "startColumn": 9, - "endLine": 23, - "endColumn": 21, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" + "propertyPath": "Parameters/allowedValuesNotAList/AllowedValues", + "category": "Parameter", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 18, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'minValueIsNotNumber': MinValue must be a number", + "source": "CFN_LINT", "entity": { - "logicalId": "Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "minValueIsNotNumber", + "entityType": "Parameter" }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "propertyPath": "Parameters/minValueIsNotNumber/MinValue", + "category": "Parameter", + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 13, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'notBooleanEcho': NoEcho must be a boolean", + "source": "CFN_LINT", "entity": { - "logicalId": "Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "notBooleanEcho", + "entityType": "Parameter" }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Parameters/notBooleanEcho/NoEcho", + "category": "Parameter", + "startLine": 19, + "startColumn": 5, + "endLine": 19, + "endColumn": 11, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'myInvalidParameter': 'Type' is a required property", + "source": "CFN_LINT", "entity": { - "logicalId": "CacheCluster", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::CacheCluster" + "logicalId": "myInvalidParameter", + "entityType": "Parameter" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Parameters/myInvalidParameter", + "category": "Parameter", + "startLine": 25, + "startColumn": 3, + "endLine": 25, + "endColumn": 21, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'myInvalidParameter': 'NotType' is not one of ['AllowedPattern', 'AllowedValues', 'ConstraintDescription', 'Default', 'Description', 'MaxLength', 'MinLength', 'MaxValue', 'MinValue', 'NoEcho', 'Type']", + "source": "CFN_LINT", "entity": { - "logicalId": "Host", - "entityType": "Resource", - "resourceType": "AWS::EC2::Host" + "logicalId": "myInvalidParameter", + "entityType": "Parameter" }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", + "propertyPath": "Parameters/myInvalidParameter/NotType", + "category": "Parameter", "startLine": 27, - "startColumn": 7, + "startColumn": 5, "endLine": 27, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Domain' of type 'AWS::Elasticsearch::Domain' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Domain", - "entityType": "Resource", - "resourceType": "AWS::Elasticsearch::Domain" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 2, - "startColumn": 3, - "endLine": 2, - "endColumn": 9, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endColumn": 12, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'NullParameter': None is not of type 'object'", + "source": "CFN_LINT", "entity": { - "logicalId": "Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "NullParameter", + "entityType": "Parameter" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Parameters/NullParameter", + "category": "Parameter", + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 16, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DBInstance' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'NullParamType': Type must not be null", + "source": "CFN_LINT", "entity": { - "logicalId": "DBInstance", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "NullParamType", + "entityType": "Parameter" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 11, + "propertyPath": "Parameters/NullParamType/Type", + "category": "Parameter", + "startLine": 36, "startColumn": 5, - "endLine": 11, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 36, + "endColumn": 9, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CacheCluster' of type 'AWS::ElastiCache::CacheCluster' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'NullParamDefault': Default must not be null", + "source": "CFN_LINT", "entity": { - "logicalId": "CacheCluster", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::CacheCluster" + "logicalId": "NullParamDefault", + "entityType": "Parameter" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 15, + "propertyPath": "Parameters/NullParamDefault/Default", + "category": "Parameter", + "startLine": 39, "startColumn": 5, - "endLine": 15, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 39, + "endColumn": 12, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Domain2' of type 'AWS::Elasticsearch::Domain' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'NullParamDescription': Description must not be null", + "source": "CFN_LINT", "entity": { - "logicalId": "Domain2", - "entityType": "Resource", - "resourceType": "AWS::Elasticsearch::Domain" + "logicalId": "NullParamDescription", + "entityType": "Parameter" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 21, + "propertyPath": "Parameters/NullParamDescription/Description", + "category": "Parameter", + "startLine": 42, "startColumn": 5, - "endLine": 21, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 42, + "endColumn": 16, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Host' of type 'AWS::EC2::Host' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'NullParamMaxValue': MaxValue must not be null", + "source": "CFN_LINT", "entity": { - "logicalId": "Host", - "entityType": "Resource", - "resourceType": "AWS::EC2::Host" + "logicalId": "NullParamMaxValue", + "entityType": "Parameter" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 26, + "propertyPath": "Parameters/NullParamMaxValue/MaxValue", + "category": "Parameter", + "startLine": 45, "startColumn": 5, - "endLine": 26, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/properties_ebs.yaml": { - "filePath": "bad/properties_ebs.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 1, - "errors": 3, - "warnings": 6, - "informational": 14, - "debug": 0 + "endLine": 45, + "endColumn": 13, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3034", - "severity": "FATAL", - "message": "10 is less than the minimum of 100", - "source": "SCHEMA", + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'NullParamMinValue': MinValue must not be null", + "source": "CFN_LINT", "entity": { - "logicalId": "MyLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "logicalId": "NullParamMinValue", + "entityType": "Parameter" }, - "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", - "category": "Schema", - "startLine": 50, - "startColumn": 13, - "endLine": 50, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Numeric value out of bounds", - "phase": "SCHEMA", - "context": { - "actualValue": 10 - } + "propertyPath": "Parameters/NullParamMinValue/MinValue", + "category": "Parameter", + "startLine": 48, + "startColumn": 5, + "endLine": 48, + "endColumn": 13, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "E3671", + "ruleId": "E2001", "severity": "ERROR", - "message": "0 is less than the minimum of 100", + "message": "Parameter 'NullParamMaxLength': MaxLength must not be null", "source": "CFN_LINT", "entity": { - "logicalId": "MyEC2Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "NullParamMaxLength", + "entityType": "Parameter" }, - "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", - "category": "Resource", - "startLine": 17, - "startColumn": 13, - "endLine": 17, - "endColumn": 17, - "ruleDescription": "Validate block device mapping configuration", - "phase": "LINT" + "propertyPath": "Parameters/NullParamMaxLength/MaxLength", + "category": "Parameter", + "startLine": 51, + "startColumn": 5, + "endLine": 51, + "endColumn": 14, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "E3671", + "ruleId": "E2001", "severity": "ERROR", - "message": "10 is less than the minimum of 100", + "message": "Parameter 'NullParamMinLength': MinLength must not be null", "source": "CFN_LINT", "entity": { - "logicalId": "MyLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "logicalId": "NullParamMinLength", + "entityType": "Parameter" }, - "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", - "category": "Resource", - "startLine": 50, - "startColumn": 13, - "endLine": 50, - "endColumn": 17, - "ruleDescription": "Validate block device mapping configuration", - "phase": "LINT" + "propertyPath": "Parameters/NullParamMinLength/MinLength", + "category": "Parameter", + "startLine": 54, + "startColumn": 5, + "endLine": 54, + "endColumn": 14, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "E3715", + "ruleId": "E2001", "severity": "ERROR", - "message": "'ephemeralA' is not a valid ephemeral device name. Expected format is 'ephemeralN' where N is 0-23", + "message": "Parameter 'NullParamNoEcho': NoEcho must not be null", "source": "CFN_LINT", "entity": { - "logicalId": "MyEC2Instance3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "NullParamNoEcho", + "entityType": "Parameter" }, - "propertyPath": "Properties.BlockDeviceMappings.0.VirtualName", - "category": "Resource", - "startLine": 36, - "startColumn": 9, - "endLine": 36, - "endColumn": 20, - "ruleDescription": "VirtualName must use ephemeral device format when Ebs is absent", - "phase": "LINT" + "propertyPath": "Parameters/NullParamNoEcho/NoEcho", + "category": "Parameter", + "startLine": 57, + "startColumn": 5, + "endLine": 57, + "endColumn": 11, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "W3030", + "ruleId": "W2001", "severity": "WARN", - "message": "'magnetic' is not one of ['gp2', 'gp3', 'io1', 'io2', 'sc1', 'st1', 'standard']", + "message": "Parameter 'allowedValuesNotAList' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "MyEC2Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "allowedValuesNotAList", + "entityType": "Parameter" }, - "propertyPath": "Properties.BlockDeviceMappings.1.Ebs.VolumeType", - "category": "Schema", - "startLine": 23, - "startColumn": 13, - "endLine": 23, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Value not in allowed enum", - "phase": "SCHEMA", - "context": { - "actualValue": "magnetic" - } + "propertyPath": "Parameters/allowedValuesNotAList", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 24, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "W3671", + "ruleId": "W2001", "severity": "WARN", - "message": "Iops is ignored when VolumeType is 'standard'", + "message": "Parameter 'allowedValuesAListofBadTypes' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "MyLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "logicalId": "allowedValuesAListofBadTypes", + "entityType": "Parameter" }, - "propertyPath": "Properties.BlockDeviceMappings.1.Ebs.Iops", + "propertyPath": "Parameters/allowedValuesAListofBadTypes", "category": "Best Practice", - "startLine": 57, - "startColumn": 13, - "endLine": 57, - "endColumn": 17, - "ruleDescription": "Iops is ignored for certain EBS volume types", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 31, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W3697", + "ruleId": "W2001", "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "message": "Parameter 'minValueIsNotNumber' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "MyLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "logicalId": "minValueIsNotNumber", + "entityType": "Parameter" }, - "category": "Deprecation", - "startLine": 40, + "propertyPath": "Parameters/minValueIsNotNumber", + "category": "Best Practice", + "startLine": 11, "startColumn": 3, - "endLine": 40, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" + "endLine": 11, + "endColumn": 22, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "W9003", + "ruleId": "W2001", "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", + "message": "Parameter 'maxLengthIsNotString' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "MyEC2Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "maxLengthIsNotString", + "entityType": "Parameter" }, - "propertyPath": "Properties.KeyName", + "propertyPath": "Parameters/maxLengthIsNotString", "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 23, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "W9010", + "ruleId": "W2001", "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", - "source": "ENGINE", + "message": "Parameter 'notBooleanEcho' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "MyEC2Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "notBooleanEcho", + "entityType": "Parameter" }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", + "propertyPath": "Parameters/notBooleanEcho", + "category": "Best Practice", + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 17, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W9010", + "ruleId": "W2001", "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", - "source": "ENGINE", + "message": "Parameter 'myParameter' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "MyEC2Instance3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "myParameter", + "entityType": "Parameter" }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 32, - "startColumn": 7, - "endLine": 32, + "propertyPath": "Parameters/myParameter", + "category": "Best Practice", + "startLine": 20, + "startColumn": 3, + "endLine": 20, "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 't1.micro' - consider upgrading", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'myInvalidParameter' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "MyEC2Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "myInvalidParameter", + "entityType": "Parameter" }, - "propertyPath": "Properties.InstanceType", - "suggestedFix": "Upgrade to a current generation instance type", + "propertyPath": "Parameters/myInvalidParameter", "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 19, - "ruleDescription": "Checks for legacy instance type generations", + "startLine": 25, + "startColumn": 3, + "endLine": 25, + "endColumn": 21, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'mySsmParam' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "MyEC2Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "mySsmParam", + "entityType": "Parameter" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Parameters/mySsmParam", "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 28, + "startColumn": 3, + "endLine": 28, + "endColumn": 13, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'NullParamType' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "MyEC2Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "NullParamType", + "entityType": "Parameter" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Parameters/NullParamType", "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 35, + "startColumn": 3, + "endLine": 35, + "endColumn": 16, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'NullParamDefault' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "MyEC2Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "NullParamDefault", + "entityType": "Parameter" }, - "propertyPath": "Properties.KeyName", + "propertyPath": "Parameters/NullParamDefault", "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 37, + "startColumn": 3, + "endLine": 37, + "endColumn": 19, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'NullParamDescription' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "MyEC2Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "NullParamDescription", + "entityType": "Parameter" }, - "propertyPath": "Properties.BlockDeviceMappings", + "propertyPath": "Parameters/NullParamDescription", "category": "Best Practice", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 40, + "startColumn": 3, + "endLine": 40, + "endColumn": 23, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'NullParamMaxValue' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "MyEC2Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "NullParamMaxValue", + "entityType": "Parameter" }, - "propertyPath": "Properties.NetworkInterfaces", + "propertyPath": "Parameters/NullParamMaxValue", "category": "Best Practice", - "startLine": 27, - "startColumn": 7, - "endLine": 27, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 43, + "startColumn": 3, + "endLine": 43, + "endColumn": 20, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'NullParamMinValue' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "MyEC2Instance3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "NullParamMinValue", + "entityType": "Parameter" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Parameters/NullParamMinValue", "category": "Best Practice", - "startLine": 32, - "startColumn": 7, - "endLine": 32, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 46, + "startColumn": 3, + "endLine": 46, + "endColumn": 20, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'NullParamMaxLength' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "MyEC2Instance3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "NullParamMaxLength", + "entityType": "Parameter" }, - "propertyPath": "Properties.BlockDeviceMappings", + "propertyPath": "Parameters/NullParamMaxLength", "category": "Best Practice", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 49, + "startColumn": 3, + "endLine": 49, + "endColumn": 21, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'NullParamMinLength' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "MyLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "logicalId": "NullParamMinLength", + "entityType": "Parameter" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Parameters/NullParamMinLength", "category": "Best Practice", - "startLine": 43, - "startColumn": 7, - "endLine": 43, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 52, + "startColumn": 3, + "endLine": 52, + "endColumn": 21, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'NullParamNoEcho' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "MyLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "logicalId": "NullParamNoEcho", + "entityType": "Parameter" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Parameters/NullParamNoEcho", "category": "Best Practice", - "startLine": 44, - "startColumn": 7, - "endLine": 44, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 55, + "startColumn": 3, + "endLine": 55, + "endColumn": 18, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'BlockDeviceMappings' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "MyLaunchConfig", + "logicalId": "IamPipeline", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.BlockDeviceMappings", "category": "Best Practice", - "startLine": 45, - "startColumn": 7, - "endLine": 45, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "startLine": 60, + "startColumn": 3, + "endLine": 60, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'MyEC2Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", - "source": "ENGINE", + "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": "MyEC2Instance", + "logicalId": "IamPipeline", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 60, + "startColumn": 3, + "endLine": 60, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyEC2Instance3' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'IamPipeline' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance3", + "logicalId": "IamPipeline", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::CloudFormation::Stack" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 31, + "startLine": 62, "startColumn": 5, - "endLine": 31, + "endLine": 62, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/properties_password.yaml": { - "filePath": "bad/properties_password.yaml", + "bad/parameters/default.yaml": { + "filePath": "bad/parameters/default.yaml", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 0, "counts": { - "fatal": 0, - "errors": 0, - "warnings": 13, - "informational": 19, + "fatal": 11, + "errors": 3, + "warnings": 9, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -74417,528 +73379,654 @@ }, "diagnostics": [ { - "ruleId": "W1011", - "severity": "WARN", - "message": "Use dynamic references (e.g., SSM SecureString) instead of parameter 'MyPassword' for secrets", - "source": "CFN_LINT", + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "startLine": 61, + "startColumn": 1, + "endLine": 61, + "endColumn": 10, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" + }, + { + "ruleId": "F2012", + "severity": "FATAL", + "message": "Parameter 'myAllowedValue' Default 'us-east-1a' is not in AllowedValues ['us-east-1b', 'us-east-1c', 'us-east-1d']", + "source": "SCHEMA", "entity": { - "logicalId": "MyDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "myAllowedValue", + "entityType": "Parameter" }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 25, - "ruleDescription": "Instead of REFing a parameter for a secret use a dynamic reference", - "phase": "LINT" + "propertyPath": "Parameters/myAllowedValue/Default", + "category": "Parameter", + "startLine": 18, + "startColumn": 5, + "endLine": 18, + "endColumn": 12, + "ruleDescription": "Parameter Default must be in AllowedValues", + "phase": "SCHEMA" }, { - "ruleId": "W1011", - "severity": "WARN", - "message": "Use dynamic references (e.g., SSM SecureString) instead of parameter 'MyNewPassword' for secrets", + "ruleId": "F2012", + "severity": "FATAL", + "message": "Parameter 'CDLAllowedValues' Default 'three' is not in AllowedValues ['one', 'two', 'three,four']", + "source": "SCHEMA", + "entity": { + "logicalId": "CDLAllowedValues", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/CDLAllowedValues/Default", + "category": "Parameter", + "startLine": 47, + "startColumn": 5, + "endLine": 47, + "endColumn": 12, + "ruleDescription": "Parameter Default must be in AllowedValues", + "phase": "SCHEMA" + }, + { + "ruleId": "F2012", + "severity": "FATAL", + "message": "Parameter 'CDLAllowedValuesWithSpaces' Default 'four' is not in AllowedValues ['one', 'two', 'three, four']", + "source": "SCHEMA", + "entity": { + "logicalId": "CDLAllowedValuesWithSpaces", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/CDLAllowedValuesWithSpaces/Default", + "category": "Parameter", + "startLine": 56, + "startColumn": 5, + "endLine": 56, + "endColumn": 12, + "ruleDescription": "Parameter Default must be in AllowedValues", + "phase": "SCHEMA" + }, + { + "ruleId": "F2012", + "severity": "FATAL", + "message": "Parameter 'CDLAllowedValuesWithSpaces' Default 'three' is not in AllowedValues ['one', 'two', 'three, four']", + "source": "SCHEMA", + "entity": { + "logicalId": "CDLAllowedValuesWithSpaces", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/CDLAllowedValuesWithSpaces/Default", + "category": "Parameter", + "startLine": 56, + "startColumn": 5, + "endLine": 56, + "endColumn": 12, + "ruleDescription": "Parameter Default must be in AllowedValues", + "phase": "SCHEMA" + }, + { + "ruleId": "F2015", + "severity": "FATAL", + "message": "Parameter 'myAllowedPattern' Default 'vpc!@#$' does not match AllowedPattern '^[a-zA-Z0-9]*$'", + "source": "SCHEMA", + "entity": { + "logicalId": "myAllowedPattern", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/myAllowedPattern/Default", + "category": "Parameter", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 12, + "ruleDescription": "Default value is within parameter constraints", + "phase": "SCHEMA" + }, + { + "ruleId": "F2015", + "severity": "FATAL", + "message": "Parameter 'myMinValue' Default 0 is less than MinValue 1", + "source": "SCHEMA", + "entity": { + "logicalId": "myMinValue", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/myMinValue/Default", + "category": "Parameter", + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 12, + "ruleDescription": "Default value is within parameter constraints", + "phase": "SCHEMA" + }, + { + "ruleId": "F2015", + "severity": "FATAL", + "message": "Parameter 'myMaxValue' Default 1 exceeds MaxValue 0", + "source": "SCHEMA", + "entity": { + "logicalId": "myMaxValue", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/myMaxValue/Default", + "category": "Parameter", + "startLine": 14, + "startColumn": 5, + "endLine": 14, + "endColumn": 12, + "ruleDescription": "Default value is within parameter constraints", + "phase": "SCHEMA" + }, + { + "ruleId": "F2015", + "severity": "FATAL", + "message": "Parameter 'myMinLength' Default length 3 is less than MinLength 5", + "source": "SCHEMA", + "entity": { + "logicalId": "myMinLength", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/myMinLength/Default", + "category": "Parameter", + "startLine": 25, + "startColumn": 5, + "endLine": 25, + "endColumn": 12, + "ruleDescription": "Default value is within parameter constraints", + "phase": "SCHEMA" + }, + { + "ruleId": "F2015", + "severity": "FATAL", + "message": "Parameter 'myMaxLength' Default length 3 exceeds MaxLength 1", + "source": "SCHEMA", + "entity": { + "logicalId": "myMaxLength", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/myMaxLength/Default", + "category": "Parameter", + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 12, + "ruleDescription": "Default value is within parameter constraints", + "phase": "SCHEMA" + }, + { + "ruleId": "F2015", + "severity": "FATAL", + "message": "Parameter 'CDLAllowedPattern' Default does not match AllowedPattern '[a-z]*$'", + "source": "SCHEMA", + "entity": { + "logicalId": "CDLAllowedPattern", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/CDLAllowedPattern/Default", + "category": "Parameter", + "startLine": 42, + "startColumn": 5, + "endLine": 42, + "endColumn": 12, + "ruleDescription": "Default value is within parameter constraints", + "phase": "SCHEMA" + }, + { + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'MyEmptyDefault': Default must be a string", "source": "CFN_LINT", "entity": { - "logicalId": "MyNewDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "MyEmptyDefault", + "entityType": "Parameter" }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 32, - "startColumn": 7, - "endLine": 32, - "endColumn": 25, - "ruleDescription": "Instead of REFing a parameter for a secret use a dynamic reference", - "phase": "LINT" + "propertyPath": "Parameters/MyEmptyDefault/Default", + "category": "Parameter", + "startLine": 33, + "startColumn": 5, + "endLine": 33, + "endColumn": 12, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "W2501", - "severity": "WARN", - "message": "Parameter MyPassword used as MasterUserPassword, therefore NoEcho should be True", + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'MyRefDefault': Type must be a string", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyRefDefault", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/MyRefDefault/Type", + "category": "Parameter", + "startLine": 35, + "startColumn": 5, + "endLine": 35, + "endColumn": 9, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" + }, + { + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'MyRefDefault': Default must be a string", "source": "CFN_LINT", "entity": { - "logicalId": "MyPassword", + "logicalId": "MyRefDefault", "entityType": "Parameter" }, - "propertyPath": "Parameters/MyPassword", - "category": "Security", - "startLine": 6, - "startColumn": 3, - "endLine": 6, - "endColumn": 13, - "ruleDescription": "Check if Password Properties are correctly configured", - "phase": "LINT" + "propertyPath": "Parameters/MyRefDefault/Default", + "category": "Parameter", + "startLine": 36, + "startColumn": 5, + "endLine": 36, + "endColumn": 12, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "W2501", + "ruleId": "W2001", "severity": "WARN", - "message": "Parameter MyNewPassword used as MasterUserPassword, therefore NoEcho should be True", + "message": "Parameter 'myAllowedPattern' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "MyNewPassword", + "logicalId": "myAllowedPattern", "entityType": "Parameter" }, - "propertyPath": "Parameters/MyNewPassword", - "category": "Security", - "startLine": 10, + "propertyPath": "Parameters/myAllowedPattern", + "category": "Best Practice", + "startLine": 4, "startColumn": 3, - "endLine": 10, - "endColumn": 16, - "ruleDescription": "Check if Password Properties are correctly configured", + "endLine": 4, + "endColumn": 19, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W2501", + "ruleId": "W2001", "severity": "WARN", - "message": "Password should use a secure dynamic reference for Resources/myThirdDb/Properties/MasterUserPassword", + "message": "Parameter 'myMinValue' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "myThirdDb", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 41, - "startColumn": 7, - "endLine": 41, - "endColumn": 25, - "ruleDescription": "Check if Password Properties are correctly configured", - "phase": "LINT" - }, - { - "ruleId": "W2509", - "severity": "WARN", - "message": "Parameter 'MyPassword' appears to be a password but does not have NoEcho set to true", - "source": "ENGINE", - "entity": { - "logicalId": "MyPassword", + "logicalId": "myMinValue", "entityType": "Parameter" }, - "propertyPath": "Parameters/MyPassword", - "category": "Security", - "startLine": 6, + "propertyPath": "Parameters/myMinValue", + "category": "Best Practice", + "startLine": 8, "startColumn": 3, - "endLine": 6, + "endLine": 8, "endColumn": 13, - "ruleDescription": "Password parameter should have NoEcho", + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W2509", + "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'MyNewPassword' appears to be a password but does not have NoEcho set to true", - "source": "ENGINE", + "message": "Parameter 'myMaxValue' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "MyNewPassword", + "logicalId": "myMaxValue", "entityType": "Parameter" }, - "propertyPath": "Parameters/MyNewPassword", - "category": "Security", - "startLine": 10, + "propertyPath": "Parameters/myMaxValue", + "category": "Best Practice", + "startLine": 12, "startColumn": 3, - "endLine": 10, - "endColumn": 16, - "ruleDescription": "Password parameter should have NoEcho", + "endLine": 12, + "endColumn": 13, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W3011", + "ruleId": "W2001", "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "message": "Parameter 'myAllowedValue' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "MyDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "myAllowedValue", + "entityType": "Parameter" }, + "propertyPath": "Parameters/myAllowedValue", "category": "Best Practice", "startLine": 16, "startColumn": 3, "endLine": 16, - "endColumn": 7, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "endColumn": 17, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W3011", + "ruleId": "W2001", "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "message": "Parameter 'MyEmptyDefault' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "MyNewDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "MyEmptyDefault", + "entityType": "Parameter" }, + "propertyPath": "Parameters/MyEmptyDefault", "category": "Best Practice", - "startLine": 25, + "startLine": 31, "startColumn": 3, - "endLine": 25, - "endColumn": 10, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "endLine": 31, + "endColumn": 17, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W3011", + "ruleId": "W2001", "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "message": "Parameter 'MyRefDefault' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "myThirdDb", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "MyRefDefault", + "entityType": "Parameter" }, + "propertyPath": "Parameters/MyRefDefault", "category": "Best Practice", "startLine": 34, "startColumn": 3, "endLine": 34, - "endColumn": 12, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", - "phase": "LINT" - }, - { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", - "entity": { - "logicalId": "MyDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 18, - "startColumn": 5, - "endLine": 18, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" - }, - { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", - "entity": { - "logicalId": "MyNewDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 27, - "startColumn": 5, - "endLine": 27, "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W9008", + "ruleId": "W2001", "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", - "entity": { - "logicalId": "myThirdDb", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 36, - "startColumn": 5, - "endLine": 36, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "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)", + "message": "Parameter 'CDLAllowedPattern' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "MyDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "CDLAllowedPattern", + "entityType": "Parameter" }, + "propertyPath": "Parameters/CDLAllowedPattern", "category": "Best Practice", - "startLine": 16, + "startLine": 37, "startColumn": 3, - "endLine": 16, - "endColumn": 7, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 37, + "endColumn": 20, + "ruleDescription": "Check if Parameters are Used", "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)", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'CDLAllowedValues' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "MyNewDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "CDLAllowedValues", + "entityType": "Parameter" }, + "propertyPath": "Parameters/CDLAllowedValues", "category": "Best Practice", - "startLine": 25, + "startLine": 43, "startColumn": 3, - "endLine": 25, - "endColumn": 10, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 43, + "endColumn": 19, + "ruleDescription": "Check if Parameters are Used", "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)", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'CDLAllowedValuesWithSpaces' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "myThirdDb", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "CDLAllowedValuesWithSpaces", + "entityType": "Parameter" }, + "propertyPath": "Parameters/CDLAllowedValuesWithSpaces", "category": "Best Practice", - "startLine": 34, + "startLine": 52, "startColumn": 3, - "endLine": 34, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 52, + "endColumn": 29, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" + } + ] + }, + "bad/pipeline_no_source_first_stage.yaml": { + "filePath": "bad/pipeline_no_source_first_stage.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 2, + "errors": 1, + "warnings": 2, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "ruleId": "F3014", + "severity": "FATAL", + "message": "Exactly one of ['ArtifactStore', 'ArtifactStores'] must be specified", + "source": "SCHEMA", "entity": { - "logicalId": "MyDB", + "logicalId": "Pipeline", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::CodePipeline::Pipeline" }, "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 18, + "category": "Schema", + "startLine": 5, "startColumn": 5, - "endLine": 18, + "endLine": 5, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", + "ruleDescription": "Exactly one of properties required (requiredXor)", + "phase": "SCHEMA" }, { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "ruleId": "F3032", + "severity": "FATAL", + "message": "expected minimum item count: 2, found: 1", + "source": "SCHEMA", "entity": { - "logicalId": "MyNewDB", + "logicalId": "Pipeline", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 27, - "startColumn": 5, - "endLine": 27, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "propertyPath": "Properties.Stages", + "category": "Schema", + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", + "ruleDescription": "Array item count out of bounds", + "phase": "SCHEMA", + "context": { + "extra": { + "actual_count": 1, + "min_items": 2 + } + } }, { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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)", + "ruleId": "E3700", + "severity": "ERROR", + "message": "First stage of a pipeline must contain at least one Source action", "source": "CFN_LINT", "entity": { - "logicalId": "myThirdDb", + "logicalId": "Pipeline", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 36, + "propertyPath": "Properties.Stages[0]", + "suggestedFix": "Add an action with ActionTypeId.Category=Source to the first stage", + "category": "Resource", + "startLine": 5, "startColumn": 5, - "endLine": 36, + "endLine": 5, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" - }, - { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 20, - "startColumn": 7, - "endLine": 20, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", + "ruleDescription": "Validate CodePipeline Source actions are only in the first stage", "phase": "LINT" }, { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", - "source": "CFN_LINT", + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", "entity": { - "logicalId": "MyNewDB", + "logicalId": "Pipeline", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", + "propertyPath": "Properties.RoleArn", "category": "Best Practice", - "startLine": 29, + "startLine": 7, "startColumn": 7, - "endLine": 29, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", + "endLine": 7, + "endColumn": 14, + "ruleDescription": "Hardcoded ARN property", "phase": "LINT" }, { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", - "source": "CFN_LINT", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", "entity": { - "logicalId": "myThirdDb", + "logicalId": "Pipeline", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 38, - "startColumn": 7, - "endLine": 38, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", + "category": "Security", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyDB", + "logicalId": "Pipeline", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 21, + "startLine": 6, "startColumn": 7, - "endLine": 21, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 6, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", + "message": "Resource 'Pipeline' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyDB", + "logicalId": "Pipeline", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 22, - "startColumn": 7, - "endLine": 22, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/previous_gen_instance.yaml": { + "filePath": "bad/previous_gen_instance.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 5, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", "source": "ENGINE", "entity": { - "logicalId": "MyNewDB", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 30, - "startColumn": 7, - "endLine": 30, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3100", "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Previous generation instance type 'm1.small' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "MyNewDB", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.InstanceType", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 31, + "startLine": 6, "startColumn": 7, - "endLine": 31, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 6, + "endColumn": 19, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myThirdDb", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 39, + "startLine": 6, "startColumn": 7, - "endLine": 39, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 6, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -74948,20 +74036,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myThirdDb", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 40, + "startLine": 7, "startColumn": 7, - "endLine": 40, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 7, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -74980,576 +74068,561 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyDB' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Resource 'Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyDB", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 18, + "startLine": 5, "startColumn": 5, - "endLine": 18, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/previous_generation_instances.yaml": { + "filePath": "bad/previous_generation_instances.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 6, + "counts": { + "fatal": 1, + "errors": 2, + "warnings": 0, + "informational": 23, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyNewDB' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'AvailabilityZone' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "MyNewDB", + "logicalId": "Host", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Host" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 27, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'AvailabilityZone'", + "category": "Schema", + "startLine": 26, "startColumn": 5, - "endLine": 27, + "endLine": 26, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-abc' does not match format 'AWS::EC2::Image.Id'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-abc" + } + }, + { + "ruleId": "E3647", + "severity": "ERROR", + "message": "'cache.r3.large' is not valid in any region", + "source": "CFN_LINT", + "entity": { + "logicalId": "CacheCluster", + "entityType": "Resource", + "resourceType": "AWS::ElastiCache::CacheCluster" + }, + "propertyPath": "Properties.CacheNodeType", + "category": "Resource", + "startLine": 16, + "startColumn": 7, + "endLine": 16, + "endColumn": 20, + "ruleDescription": "Validate ElastiCache cluster cache node type", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'myThirdDb' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "myThirdDb", + "logicalId": "Domain", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Elasticsearch::Domain" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 36, - "startColumn": 5, - "endLine": 36, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 9, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "bad/properties_rt_association.yaml": { - "filePath": "bad/properties_rt_association.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 0, - "errors": 7, - "warnings": 0, - "informational": 13, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3022", - "severity": "ERROR", - "message": "SubnetId in PublicSubnetRouteTableAssociation1 is also associated with PrivateSubnetRouteTableAssociation1", + "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": "PublicSubnetRouteTableAssociation1", + "logicalId": "Domain", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Elasticsearch::Domain" }, - "propertyPath": "Properties.SubnetId", - "suggestedFix": "Associate each subnet with exactly one route table", - "category": "Resource", - "startLine": 27, - "startColumn": 9, - "endLine": 27, - "endColumn": 17, - "ruleDescription": "Resource SubnetRouteTableAssociation Properties", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 9, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "E3022", - "severity": "ERROR", - "message": "SubnetId in PrivateSubnetRouteTableAssociation1 is also associated with PublicSubnetRouteTableAssociation1", + "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": "PrivateSubnetRouteTableAssociation1", + "logicalId": "DBInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SubnetId", - "suggestedFix": "Associate each subnet with exactly one route table", - "category": "Resource", - "startLine": 35, - "startColumn": 9, - "endLine": 35, - "endColumn": 17, - "ruleDescription": "Resource SubnetRouteTableAssociation Properties", + "category": "Best Practice", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 13, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "E3022", - "severity": "ERROR", - "message": "SubnetId in AuxiliaryPublicSubnetRouteTableAssociation1 is also associated with PublicSubnetRouteTableAssociation1, PrivateSubnetRouteTableAssociation1, ProxySubnetRouteTableAssociation", + "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": "AuxiliaryPublicSubnetRouteTableAssociation1", + "logicalId": "DBInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SubnetId", - "suggestedFix": "Associate each subnet with exactly one route table", - "category": "Resource", - "startLine": 44, - "startColumn": 9, - "endLine": 44, - "endColumn": 17, - "ruleDescription": "Resource SubnetRouteTableAssociation Properties", + "category": "Best Practice", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 13, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "E3022", - "severity": "ERROR", - "message": "SubnetId in ProxySubnetRouteTableAssociation is also associated with PublicSubnetRouteTableAssociation1, PrivateSubnetRouteTableAssociation1, AuxiliaryPublicSubnetRouteTableAssociation1", + "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": "ProxySubnetRouteTableAssociation", + "logicalId": "CacheCluster", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ElastiCache::CacheCluster" }, - "propertyPath": "Properties.SubnetId", - "suggestedFix": "Associate each subnet with exactly one route table", - "category": "Resource", - "startLine": 52, - "startColumn": 9, - "endLine": 52, - "endColumn": 17, - "ruleDescription": "Resource SubnetRouteTableAssociation Properties", + "category": "Best Practice", + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 15, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "E3022", - "severity": "ERROR", - "message": "SubnetId in AuxilliaryCustomSubnetRouteTableAssociation is also associated with CustomSubnetRouteTableAssociation", + "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": "AuxilliaryCustomSubnetRouteTableAssociation", + "logicalId": "CacheCluster", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ElastiCache::CacheCluster" }, - "propertyPath": "Properties.SubnetId", - "suggestedFix": "Associate each subnet with exactly one route table", - "category": "Resource", - "startLine": 74, - "startColumn": 9, - "endLine": 74, - "endColumn": 17, - "ruleDescription": "Resource SubnetRouteTableAssociation Properties", + "category": "Best Practice", + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 15, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "E8002", - "severity": "ERROR", - "message": "Condition 'CreateAuxiliaryNetworks' referenced by resource 'AuxiliaryPublicSubnetRouteTableAssociation1' is not defined", - "source": "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": "AuxiliaryPublicSubnetRouteTableAssociation1", + "logicalId": "Domain2", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Elasticsearch::Domain" }, - "category": "Structure", - "startLine": 38, + "category": "Best Practice", + "startLine": 19, "startColumn": 3, - "endLine": 38, - "endColumn": 46, - "ruleDescription": "Condition referenced by resource is not defined", - "phase": "PARSE" + "endLine": 19, + "endColumn": 10, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "E8002", - "severity": "ERROR", - "message": "Condition 'CreateAuxiliaryNetworks' referenced by resource 'AuxilliaryCustomSubnetRouteTableAssociation' is not defined", - "source": "SCHEMA", + "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": "AuxilliaryCustomSubnetRouteTableAssociation", + "logicalId": "Domain2", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Elasticsearch::Domain" }, - "category": "Structure", - "startLine": 68, + "category": "Best Practice", + "startLine": 19, "startColumn": 3, - "endLine": 68, - "endColumn": 46, - "ruleDescription": "Condition referenced by resource is not defined", - "phase": "PARSE" + "endLine": 19, + "endColumn": 10, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3100", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Previous generation instance type 'm1.small' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "PublicSubnetRouteTableAssociation1", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.InstanceType", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 25, - "startColumn": 9, - "endLine": 25, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'PublicRouteTable' (type String)", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 19, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3100", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Previous generation instance type 'db.t1.micro' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "PublicSubnetRouteTableAssociation1", + "logicalId": "DBInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 27, - "startColumn": 9, - "endLine": 27, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'PublicSubnet01' (type String)", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3100", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "PrivateSubnetRouteTableAssociation1", + "logicalId": "CacheCluster", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ElastiCache::CacheCluster" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.CacheNodeType", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 33, - "startColumn": 9, - "endLine": 33, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'PrivateRouteTable' (type String)", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 16, + "startColumn": 7, + "endLine": 16, + "endColumn": 20, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3100", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Previous generation instance type 'm3.medium.elasticsearch' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "PrivateSubnetRouteTableAssociation1", + "logicalId": "Domain2", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Elasticsearch::Domain" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.ElasticsearchClusterConfig.InstanceType", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 35, + "startLine": 23, "startColumn": 9, - "endLine": 35, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'PublicSubnet01' (type String)", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "endLine": 23, + "endColumn": 21, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AuxiliaryPublicSubnetRouteTableAssociation1", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 42, - "startColumn": 9, - "endLine": 42, - "endColumn": 21, + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'PublicRouteTable' (type String)", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AuxiliaryPublicSubnetRouteTableAssociation1", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 44, - "startColumn": 9, - "endLine": 44, - "endColumn": 17, + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'PublicSubnet01' (type String)", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProxySubnetRouteTableAssociation", + "logicalId": "CacheCluster", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ElastiCache::CacheCluster" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 50, - "startColumn": 9, - "endLine": 50, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'PublicRouteTable' (type String)", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProxySubnetRouteTableAssociation", + "logicalId": "Host", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::Host" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 52, - "startColumn": 9, - "endLine": 52, - "endColumn": 17, + "startLine": 27, + "startColumn": 7, + "endLine": 27, + "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'isPublic'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9003", "severity": "INFO", - "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Domain' of type 'AWS::Elasticsearch::Domain' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomResource", + "logicalId": "Domain", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::CustomResource" + "resourceType": "AWS::Elasticsearch::Domain" }, - "propertyPath": "Properties.ServiceToken", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 58, - "startColumn": 9, - "endLine": 58, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 9, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomSubnetRouteTableAssociation", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 63, - "startColumn": 9, - "endLine": 63, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'PublicRouteTable' (type String)", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'DBInstance' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomSubnetRouteTableAssociation", + "logicalId": "DBInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 65, - "startColumn": 9, - "endLine": 65, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt CustomResource.PublicSubnet", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 11, + "startColumn": 5, + "endLine": 11, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'CacheCluster' of type 'AWS::ElastiCache::CacheCluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AuxilliaryCustomSubnetRouteTableAssociation", + "logicalId": "CacheCluster", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ElastiCache::CacheCluster" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 72, - "startColumn": 9, - "endLine": 72, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'PublicRouteTable' (type String)", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Domain2' of type 'AWS::Elasticsearch::Domain' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AuxilliaryCustomSubnetRouteTableAssociation", + "logicalId": "Domain2", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Elasticsearch::Domain" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 74, - "startColumn": 9, - "endLine": 74, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt CustomResource.PublicSubnet", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 21, + "startColumn": 5, + "endLine": 21, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Host' of type 'AWS::EC2::Host' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Host", + "entityType": "Resource", + "resourceType": "AWS::EC2::Host" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 26, + "startColumn": 5, + "endLine": 26, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "bad/properties_sg_ingress.yaml": { - "filePath": "bad/properties_sg_ingress.yaml", + "bad/properties_ebs.yaml": { + "filePath": "bad/properties_ebs.yaml", "status": "OK", "metadata": { - "resourcesScanned": 9, + "resourcesScanned": 3, "counts": { - "fatal": 5, - "errors": 13, - "warnings": 7, - "informational": 21, + "fatal": 1, + "errors": 3, + "warnings": 6, + "informational": 14, "debug": 0 }, "suppressed": 0, @@ -75558,868 +74631,1022 @@ }, "diagnostics": [ { - "ruleId": "F3003", + "ruleId": "F3034", "severity": "FATAL", - "message": "'IpProtocol' is a required property", + "message": "10 is less than the minimum of 100", "source": "SCHEMA", "entity": { - "logicalId": "mySecurityGroupIngressExclusive", + "logicalId": "MyLaunchConfig", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'IpProtocol'", + "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", "category": "Schema", - "startLine": 73, - "startColumn": 5, - "endLine": 73, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "startLine": 50, + "startColumn": 13, + "endLine": 50, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Numeric value out of bounds", + "phase": "SCHEMA", + "context": { + "actualValue": 10 + } }, { - "ruleId": "F3014", - "severity": "FATAL", - "message": "Exactly one of ['CidrIp', 'CidrIpv6', 'SourcePrefixListId', 'SourceSecurityGroupId', 'SourceSecurityGroupName'] must be specified", - "source": "SCHEMA", + "ruleId": "E3671", + "severity": "ERROR", + "message": "0 is less than the minimum of 100", + "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupVpc", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.SecurityGroupIngress.1", - "category": "Schema", - "startLine": 38, - "startColumn": 19, - "endLine": 38, + "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", + "category": "Resource", + "startLine": 17, + "startColumn": 13, + "endLine": 17, + "endColumn": 17, + "ruleDescription": "Validate block device mapping configuration", + "phase": "LINT" + }, + { + "ruleId": "E3671", + "severity": "ERROR", + "message": "10 is less than the minimum of 100", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", + "category": "Resource", + "startLine": 50, + "startColumn": 13, + "endLine": 50, + "endColumn": 17, + "ruleDescription": "Validate block device mapping configuration", + "phase": "LINT" + }, + { + "ruleId": "E3715", + "severity": "ERROR", + "message": "'ephemeralA' is not a valid ephemeral device name. Expected format is 'ephemeralN' where N is 0-23", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyEC2Instance3", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.BlockDeviceMappings.0.VirtualName", + "category": "Resource", + "startLine": 36, + "startColumn": 9, + "endLine": 36, "endColumn": 20, - "ruleDescription": "Exactly one of properties required (requiredXor)", - "phase": "SCHEMA" + "ruleDescription": "VirtualName must use ephemeral device format when Ebs is absent", + "phase": "LINT" }, { - "ruleId": "F3014", - "severity": "FATAL", - "message": "Exactly one of ['CidrIp', 'CidrIpv6', 'SourcePrefixListId', 'SourceSecurityGroupId', 'SourceSecurityGroupName'] must be specified", - "source": "SCHEMA", + "ruleId": "W3030", + "severity": "WARN", + "message": "'magnetic' is not one of ['gp2', 'gp3', 'io1', 'io2', 'sc1', 'st1', 'standard']", + "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupVpc", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.SecurityGroupIngress.4", + "propertyPath": "Properties.BlockDeviceMappings.1.Ebs.VolumeType", "category": "Schema", - "startLine": 48, - "startColumn": 19, - "endLine": 48, - "endColumn": 20, - "ruleDescription": "Exactly one of properties required (requiredXor)", + "startLine": 23, + "startColumn": 13, + "endLine": 23, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Value not in allowed enum", + "phase": "SCHEMA", + "context": { + "actualValue": "magnetic" + } + }, + { + "ruleId": "W3671", + "severity": "WARN", + "message": "Iops is ignored when VolumeType is 'standard'", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.BlockDeviceMappings.1.Ebs.Iops", + "category": "Best Practice", + "startLine": 57, + "startColumn": 13, + "endLine": 57, + "endColumn": 17, + "ruleDescription": "Iops is ignored for certain EBS volume types", + "phase": "LINT" + }, + { + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "category": "Deprecation", + "startLine": 40, + "startColumn": 3, + "endLine": 40, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", "phase": "SCHEMA" }, { - "ruleId": "F3014", - "severity": "FATAL", - "message": "Exactly one of ['CidrIp', 'CidrIpv6', 'SourcePrefixListId', 'SourceSecurityGroupId', 'SourceSecurityGroupName'] must be specified", - "source": "SCHEMA", + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.KeyName", + "category": "Best Practice", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", + "phase": "LINT" + }, + { + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance3", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 32, + "startColumn": 7, + "endLine": 32, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", + "phase": "LINT" + }, + { + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 't1.micro' - consider upgrading", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.InstanceType", + "suggestedFix": "Upgrade to a current generation instance type", + "category": "Best Practice", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 19, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupIngressExclusive", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties", - "category": "Schema", - "startLine": 73, - "startColumn": 5, - "endLine": 73, - "endColumn": 15, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Exactly one of properties required (requiredXor)", - "phase": "SCHEMA" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F3031", - "severity": "FATAL", - "message": "'Special charaters like ^ and \" are not supported' does not match pattern '^([a-z,A-Z,0-9,. _\\-:/()#,@[\\]+=&;\\{\\}!$*])*$'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupNonVpc", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.GroupDescription", - "category": "Schema", - "startLine": 23, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 10, "startColumn": 7, - "endLine": 23, - "endColumn": 23, - "ruleDescription": "Value does not match pattern", + "endLine": 10, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "Special charaters like ^ and \" are not supported", - "expectedConstraint": "^([a-z,A-Z,0-9,. _\\-:/()#,@[\\]+=&;\\{\\}!$*])*$" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "E1041", - "severity": "ERROR", - "message": "{'Ref': 'mySecurityGroupNonVpc'} with formats ['AWS::EC2::SecurityGroup.Name'] does not match destination format of 'AWS::EC2::SecurityGroup.Id'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.SecurityGroupIngress.3.SourceSecurityGroupId", - "suggestedFix": "Use a Ref to a resource whose type matches the expected format", - "category": "Intrinsic Function", - "startLine": 46, - "startColumn": 9, - "endLine": 46, - "endColumn": 30, - "ruleDescription": "Check if Ref matches destination format", - "phase": "LINT" + "propertyPath": "Properties.KeyName", + "category": "Best Practice", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E1041", - "severity": "ERROR", - "message": "{'Ref': 'mySecurityGroupNonVpc'} with formats ['AWS::EC2::SecurityGroup.Name'] does not match destination format of 'AWS::EC2::SecurityGroup.Id'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupIngress", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.SourceSecurityGroupId", - "suggestedFix": "Use a Ref to a resource whose type matches the expected format", - "category": "Intrinsic Function", - "startLine": 64, + "propertyPath": "Properties.BlockDeviceMappings", + "category": "Best Practice", + "startLine": 12, "startColumn": 7, - "endLine": 64, - "endColumn": 28, - "ruleDescription": "Check if Ref matches destination format", - "phase": "LINT" + "endLine": 12, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "E1150", - "severity": "ERROR", - "message": "'sg-1234567' does not match format 'AWS::EC2::SecurityGroup.Id'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupNonVpc", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.SecurityGroupIngress.0.SourceSecurityGroupId", - "category": "Intrinsic Function", + "propertyPath": "Properties.NetworkInterfaces", + "category": "Best Practice", "startLine": 27, - "startColumn": 9, + "startColumn": 7, "endLine": 27, - "endColumn": 30, - "ruleDescription": "Validate security group format", + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "sg-1234567" + "lifecycle": "create-only" } }, { - "ruleId": "E1150", - "severity": "ERROR", - "message": "'vpc-1234567' does not match format 'AWS::EC2::SecurityGroup.Id'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc", + "logicalId": "MyEC2Instance3", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.SecurityGroupIngress.4.SourceSecurityGroupId", - "category": "Intrinsic Function", - "startLine": 49, - "startColumn": 9, - "endLine": 49, - "endColumn": 30, - "ruleDescription": "Validate security group format", + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 32, + "startColumn": 7, + "endLine": 32, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "vpc-1234567" + "lifecycle": "create-only" } }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-123456' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "MyEC2Instance3", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 79, + "propertyPath": "Properties.BlockDeviceMappings", + "category": "Best Practice", + "startLine": 33, "startColumn": 7, - "endLine": 79, - "endColumn": 14, + "endLine": 33, + "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "ami-123456" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "E3687", - "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupNonVpc", + "logicalId": "MyLaunchConfig", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.SecurityGroupIngress.0", - "category": "Resource", - "startLine": 26, - "startColumn": 19, - "endLine": 26, - "endColumn": 20, - "ruleDescription": "Validate to and from ports based on the protocol", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 43, + "startColumn": 7, + "endLine": 43, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3687", - "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc", + "logicalId": "MyLaunchConfig", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.SecurityGroupIngress.0", - "category": "Resource", - "startLine": 35, - "startColumn": 19, - "endLine": 35, - "endColumn": 20, - "ruleDescription": "Validate to and from ports based on the protocol", - "phase": "LINT" + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 44, + "startColumn": 7, + "endLine": 44, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3687", - "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BlockDeviceMappings' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc", + "logicalId": "MyLaunchConfig", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.SecurityGroupIngress.1", - "category": "Resource", - "startLine": 38, - "startColumn": 19, - "endLine": 38, - "endColumn": 20, - "ruleDescription": "Validate to and from ports based on the protocol", + "propertyPath": "Properties.BlockDeviceMappings", + "category": "Best Practice", + "startLine": 45, + "startColumn": 7, + "endLine": 45, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" }, { - "ruleId": "E3687", - "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyEC2Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.SecurityGroupIngress.2", - "category": "Resource", - "startLine": 42, - "startColumn": 19, - "endLine": 42, - "endColumn": 20, - "ruleDescription": "Validate to and from ports based on the protocol", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E3687", - "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyEC2Instance3' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc", + "logicalId": "MyEC2Instance3", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.SecurityGroupIngress.3", - "category": "Resource", - "startLine": 45, - "startColumn": 19, - "endLine": 45, - "endColumn": 20, - "ruleDescription": "Validate to and from ports based on the protocol", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 31, + "startColumn": 5, + "endLine": 31, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/properties_password.yaml": { + "filePath": "bad/properties_password.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 13, + "informational": 19, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "E3687", - "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "ruleId": "W1011", + "severity": "WARN", + "message": "Use dynamic references (e.g., SSM SecureString) instead of parameter 'MyPassword' for secrets", "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupVpc", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SecurityGroupIngress.4", - "category": "Resource", - "startLine": 48, - "startColumn": 19, - "endLine": 48, - "endColumn": 20, - "ruleDescription": "Validate to and from ports based on the protocol", + "propertyPath": "Properties.MasterUserPassword", + "category": "Security", + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 25, + "ruleDescription": "Instead of REFing a parameter for a secret use a dynamic reference", "phase": "LINT" }, { - "ruleId": "E3687", - "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "ruleId": "W1011", + "severity": "WARN", + "message": "Use dynamic references (e.g., SSM SecureString) instead of parameter 'MyNewPassword' for secrets", "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupIngress", + "logicalId": "MyNewDB", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties", - "category": "Resource", - "startLine": 61, - "startColumn": 5, - "endLine": 61, - "endColumn": 15, - "ruleDescription": "Validate to and from ports based on the protocol", + "propertyPath": "Properties.MasterUserPassword", + "category": "Security", + "startLine": 32, + "startColumn": 7, + "endLine": 32, + "endColumn": 25, + "ruleDescription": "Instead of REFing a parameter for a secret use a dynamic reference", "phase": "LINT" }, { - "ruleId": "E3687", - "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "ruleId": "W2501", + "severity": "WARN", + "message": "Parameter MyPassword used as MasterUserPassword, therefore NoEcho should be True", "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupIngress2", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "logicalId": "MyPassword", + "entityType": "Parameter" }, - "propertyPath": "Properties", - "category": "Resource", - "startLine": 67, - "startColumn": 5, - "endLine": 67, - "endColumn": 15, - "ruleDescription": "Validate to and from ports based on the protocol", + "propertyPath": "Parameters/MyPassword", + "category": "Security", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 13, + "ruleDescription": "Check if Password Properties are correctly configured", "phase": "LINT" }, { - "ruleId": "W9003", + "ruleId": "W2501", "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", + "message": "Parameter MyNewPassword used as MasterUserPassword, therefore NoEcho should be True", "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupNonVpc", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "logicalId": "MyNewPassword", + "entityType": "Parameter" }, - "propertyPath": "Properties.SecurityGroupIngress.0.IpProtocol", - "category": "Best Practice", - "startLine": 26, - "startColumn": 9, - "endLine": 26, - "endColumn": 19, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Parameters/MyNewPassword", + "category": "Security", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 16, + "ruleDescription": "Check if Password Properties are correctly configured", + "phase": "LINT" }, { - "ruleId": "W9003", + "ruleId": "W2501", "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", + "message": "Password should use a secure dynamic reference for Resources/myThirdDb/Properties/MasterUserPassword", "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupVpc", + "logicalId": "myThirdDb", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SecurityGroupIngress.0.IpProtocol", - "category": "Best Practice", - "startLine": 35, - "startColumn": 9, - "endLine": 35, - "endColumn": 19, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Properties.MasterUserPassword", + "category": "Security", + "startLine": 41, + "startColumn": 7, + "endLine": 41, + "endColumn": 25, + "ruleDescription": "Check if Password Properties are correctly configured", + "phase": "LINT" }, { - "ruleId": "W9003", + "ruleId": "W2509", "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "message": "Parameter 'MyPassword' appears to be a password but does not have NoEcho set to true", + "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "logicalId": "MyPassword", + "entityType": "Parameter" }, - "propertyPath": "Properties.SecurityGroupIngress.1.IpProtocol", - "category": "Best Practice", - "startLine": 38, - "startColumn": 9, - "endLine": 38, - "endColumn": 19, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Parameters/MyPassword", + "category": "Security", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 13, + "ruleDescription": "Password parameter should have NoEcho", + "phase": "LINT" }, { - "ruleId": "W9003", + "ruleId": "W2509", "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "message": "Parameter 'MyNewPassword' appears to be a password but does not have NoEcho set to true", + "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "logicalId": "MyNewPassword", + "entityType": "Parameter" }, - "propertyPath": "Properties.SecurityGroupIngress.3.IpProtocol", - "category": "Best Practice", - "startLine": 45, - "startColumn": 9, - "endLine": 45, - "endColumn": 19, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Parameters/MyNewPassword", + "category": "Security", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 16, + "ruleDescription": "Password parameter should have NoEcho", + "phase": "LINT" }, { - "ruleId": "W9003", + "ruleId": "W3011", "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupVpc", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SecurityGroupIngress.4.IpProtocol", "category": "Best Practice", - "startLine": 48, - "startColumn": 9, - "endLine": 48, - "endColumn": 19, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 7, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "phase": "LINT" }, { - "ruleId": "W9003", + "ruleId": "W3011", "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupIngress", + "logicalId": "MyNewDB", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 63, - "startColumn": 7, - "endLine": 63, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 25, + "startColumn": 3, + "endLine": 25, + "endColumn": 10, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "phase": "LINT" }, { - "ruleId": "W9003", + "ruleId": "W3011", "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupIngress2", + "logicalId": "myThirdDb", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 69, - "startColumn": 7, - "endLine": 69, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 12, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupNonVpc", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 18, + "startColumn": 5, + "endLine": 18, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc", + "logicalId": "MyNewDB", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 31, - "startColumn": 7, - "endLine": 31, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 27, + "startColumn": 5, + "endLine": 27, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc", + "logicalId": "myThirdDb", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 32, - "startColumn": 7, - "endLine": 32, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'myVpcId' (type AWS::EC2::VPC::Id)" - } + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 36, + "startColumn": 5, + "endLine": 36, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "SecurityGroupRuleSSM", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 54, - "startColumn": 7, - "endLine": 54, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'mySecurityGroupVpc'" - } + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 7, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "SecurityGroupRuleSSM", + "logicalId": "MyNewDB", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 55, - "startColumn": 7, - "endLine": 55, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 25, + "startColumn": 3, + "endLine": 25, + "endColumn": 10, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "SecurityGroupRuleSSM", + "logicalId": "myThirdDb", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 56, - "startColumn": 7, - "endLine": 56, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "SecurityGroupRuleSSM", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 57, - "startColumn": 7, - "endLine": 57, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 18, + "startColumn": 5, + "endLine": 18, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "SecurityGroupRuleSSM", + "logicalId": "MyNewDB", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.CidrIp", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 58, - "startColumn": 7, - "endLine": 58, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (dynamic reference: {{resolve:ssm:mysubnet}})" - } + "startLine": 27, + "startColumn": 5, + "endLine": 27, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "mySecurityGroupIngress", + "logicalId": "myThirdDb", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 62, - "startColumn": 7, - "endLine": 62, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'mySecurityGroupVpc'" - } + "startLine": 36, + "startColumn": 5, + "endLine": 36, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3100", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupIngress", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 63, + "startLine": 20, "startColumn": 7, - "endLine": 63, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 20, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3100", "severity": "INFO", - "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupIngress", + "logicalId": "MyNewDB", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SourceSecurityGroupId", + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 64, + "startLine": 29, "startColumn": 7, - "endLine": 64, - "endColumn": 28, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'mySecurityGroupNonVpc'" - } + "endLine": 29, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3100", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupIngress2", + "logicalId": "myThirdDb", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 68, + "startLine": 38, "startColumn": 7, - "endLine": 68, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'mySecurityGroupVpc'" - } + "endLine": 38, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupIngress2", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 69, + "startLine": 21, "startColumn": 7, - "endLine": 69, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 21, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupIngress2", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SourceSecurityGroupId", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 70, + "startLine": 22, "startColumn": 7, - "endLine": 70, - "endColumn": 28, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 22, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'mySecurity3Group' (type String)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupIngressExclusive", + "logicalId": "MyNewDB", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 74, + "startLine": 30, "startColumn": 7, - "endLine": 74, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 30, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'mySecurityGroupVpc'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupIngressExclusive", + "logicalId": "MyNewDB", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.GroupName", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 75, + "startLine": 31, "startColumn": 7, - "endLine": 75, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 31, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -76429,65 +75656,74 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "myThirdDb", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 79, + "startLine": 39, "startColumn": 7, - "endLine": 79, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 39, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "myThirdDb", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SecurityGroupIds", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 80, + "startLine": 40, "startColumn": 7, - "endLine": 80, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 40, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'mySecurityGroupNonVpc' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'MyDB' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupNonVpc", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 22, + "startLine": 18, "startColumn": 5, - "endLine": 22, + "endLine": 18, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -76495,19 +75731,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'mySecurityGroupVpc' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'MyNewDB' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc", + "logicalId": "MyNewDB", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 30, + "startLine": 27, "startColumn": 5, - "endLine": 30, + "endLine": 27, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -76515,35 +75751,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'myThirdDb' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "myThirdDb", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 78, + "startLine": 36, "startColumn": 5, - "endLine": 78, + "endLine": 36, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/rds_dbclusterinstanceclass_invalid.yaml": { - "filePath": "bad/rds_dbclusterinstanceclass_invalid.yaml", + "bad/properties_rt_association.yaml": { + "filePath": "bad/properties_rt_association.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 7, "counts": { - "fatal": 3, - "errors": 1, - "warnings": 1, - "informational": 7, + "fatal": 0, + "errors": 7, + "warnings": 0, + "informational": 13, "debug": 0 }, "suppressed": 0, @@ -76552,248 +75788,499 @@ }, "diagnostics": [ { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'AllocatedStorage' is a required property (from extension)", - "source": "SCHEMA", + "ruleId": "E3022", + "severity": "ERROR", + "message": "SubnetId in PublicSubnetRouteTableAssociation1 is also associated with PrivateSubnetRouteTableAssociation1", + "source": "CFN_LINT", "entity": { - "logicalId": "Cluster", + "logicalId": "PublicSubnetRouteTableAssociation1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties", - "suggestedFix": "Add 'AllocatedStorage'", - "category": "Schema", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.SubnetId", + "suggestedFix": "Associate each subnet with exactly one route table", + "category": "Resource", + "startLine": 27, + "startColumn": 9, + "endLine": 27, + "endColumn": 17, + "ruleDescription": "Resource SubnetRouteTableAssociation Properties", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'Iops' is a required property (from extension)", - "source": "SCHEMA", + "ruleId": "E3022", + "severity": "ERROR", + "message": "SubnetId in PrivateSubnetRouteTableAssociation1 is also associated with PublicSubnetRouteTableAssociation1", + "source": "CFN_LINT", "entity": { - "logicalId": "Cluster", + "logicalId": "PrivateSubnetRouteTableAssociation1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties", - "suggestedFix": "Add 'Iops'", - "category": "Schema", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.SubnetId", + "suggestedFix": "Associate each subnet with exactly one route table", + "category": "Resource", + "startLine": 35, + "startColumn": 9, + "endLine": 35, + "endColumn": 17, + "ruleDescription": "Resource SubnetRouteTableAssociation Properties", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'StorageType' is a required property (from extension)", - "source": "SCHEMA", + "ruleId": "E3022", + "severity": "ERROR", + "message": "SubnetId in AuxiliaryPublicSubnetRouteTableAssociation1 is also associated with PublicSubnetRouteTableAssociation1, PrivateSubnetRouteTableAssociation1, ProxySubnetRouteTableAssociation", + "source": "CFN_LINT", "entity": { - "logicalId": "Cluster", + "logicalId": "AuxiliaryPublicSubnetRouteTableAssociation1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties", - "suggestedFix": "Add 'StorageType'", - "category": "Schema", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.SubnetId", + "suggestedFix": "Associate each subnet with exactly one route table", + "category": "Resource", + "startLine": 44, + "startColumn": 9, + "endLine": 44, + "endColumn": 17, + "ruleDescription": "Resource SubnetRouteTableAssociation Properties", + "phase": "LINT" }, { - "ruleId": "E3694", + "ruleId": "E3022", "severity": "ERROR", - "message": "'db.bogus.class' is not one of ['db.c6gd.12xlarge', 'db.c6gd.16xlarge', 'db.c6gd.2xlarge', 'db.c6gd.4xlarge', 'db.c6gd.8xlarge', 'db.c6gd.large', 'db.c6gd.medium', 'db.c6gd.xlarge', 'db.m5d.12xlarge', 'db.m5d.16xlarge', 'db.m5d.24xlarge', 'db.m5d.2xlarge', 'db.m5d.4xlarge', 'db.m5d.8xlarge', 'db.m5d.large', 'db.m5d.xlarge', 'db.m6gd.12xlarge', 'db.m6gd.16xlarge', 'db.m6gd.2xlarge', 'db.m6gd.4xlarge', 'db.m6gd.8xlarge', 'db.m6gd.large', 'db.m6gd.xlarge', 'db.m6id.12xlarge', 'db.m6id.16xlarge', 'db.m6id.24xlarge', 'db.m6id.2xlarge', 'db.m6id.32xlarge', 'db.m6id.4xlarge', 'db.m6id.8xlarge', 'db.m6id.large', 'db.m6id.xlarge', 'db.m6idn.12xlarge', 'db.m6idn.16xlarge', 'db.m6idn.24xlarge', 'db.m6idn.2xlarge', 'db.m6idn.32xlarge', 'db.m6idn.4xlarge', 'db.m6idn.8xlarge', 'db.m6idn.large', 'db.m6idn.xlarge', 'db.m8gd.12xlarge', 'db.m8gd.16xlarge', 'db.m8gd.24xlarge', 'db.m8gd.2xlarge', 'db.m8gd.48xlarge', 'db.m8gd.4xlarge', 'db.m8gd.8xlarge', 'db.m8gd.large', 'db.m8gd.xlarge', 'db.r5d.12xlarge', 'db.r5d.16xlarge', 'db.r5d.24xlarge', 'db.r5d.2xlarge', 'db.r5d.4xlarge', 'db.r5d.8xlarge', 'db.r5d.large', 'db.r5d.xlarge', 'db.r6gd.12xlarge', 'db.r6gd.16xlarge', 'db.r6gd.2xlarge', 'db.r6gd.4xlarge', 'db.r6gd.8xlarge', 'db.r6gd.large', 'db.r6gd.xlarge', 'db.r6id.12xlarge', 'db.r6id.16xlarge', 'db.r6id.24xlarge', 'db.r6id.2xlarge', 'db.r6id.32xlarge', 'db.r6id.4xlarge', 'db.r6id.8xlarge', 'db.r6id.large', 'db.r6id.xlarge', 'db.r6idn.12xlarge', 'db.r6idn.16xlarge', 'db.r6idn.24xlarge', 'db.r6idn.2xlarge', 'db.r6idn.32xlarge', 'db.r6idn.4xlarge', 'db.r6idn.8xlarge', 'db.r6idn.large', 'db.r6idn.xlarge', 'db.r8gd.12xlarge', 'db.r8gd.16xlarge', 'db.r8gd.24xlarge', 'db.r8gd.2xlarge', 'db.r8gd.48xlarge', 'db.r8gd.4xlarge', 'db.r8gd.8xlarge', 'db.r8gd.large', 'db.r8gd.xlarge', 'db.x2idn.16xlarge', 'db.x2idn.24xlarge', 'db.x2idn.32xlarge', 'db.x2iedn.16xlarge', 'db.x2iedn.24xlarge', 'db.x2iedn.2xlarge', 'db.x2iedn.32xlarge', 'db.x2iedn.4xlarge', 'db.x2iedn.8xlarge', 'db.x2iedn.xlarge'] when Engine is 'mysql' in any region", + "message": "SubnetId in ProxySubnetRouteTableAssociation is also associated with PublicSubnetRouteTableAssociation1, PrivateSubnetRouteTableAssociation1, AuxiliaryPublicSubnetRouteTableAssociation1", "source": "CFN_LINT", "entity": { - "logicalId": "Cluster", + "logicalId": "ProxySubnetRouteTableAssociation", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.DBClusterInstanceClass", + "propertyPath": "Properties.SubnetId", + "suggestedFix": "Associate each subnet with exactly one route table", "category": "Resource", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 29, - "ruleDescription": "Validates RDS DB Cluster instance class", + "startLine": 52, + "startColumn": 9, + "endLine": 52, + "endColumn": 17, + "ruleDescription": "Resource SubnetRouteTableAssociation Properties", "phase": "LINT" }, { - "ruleId": "W2501", - "severity": "WARN", - "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", + "ruleId": "E3022", + "severity": "ERROR", + "message": "SubnetId in AuxilliaryCustomSubnetRouteTableAssociation is also associated with CustomSubnetRouteTableAssociation", "source": "CFN_LINT", "entity": { - "logicalId": "Cluster", + "logicalId": "AuxilliaryCustomSubnetRouteTableAssociation", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 25, - "ruleDescription": "Check if Password Properties are correctly configured", + "propertyPath": "Properties.SubnetId", + "suggestedFix": "Associate each subnet with exactly one route table", + "category": "Resource", + "startLine": 74, + "startColumn": 9, + "endLine": 74, + "endColumn": 17, + "ruleDescription": "Resource SubnetRouteTableAssociation Properties", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "E8002", + "severity": "ERROR", + "message": "Condition 'CreateAuxiliaryNetworks' referenced by resource 'AuxiliaryPublicSubnetRouteTableAssociation1' is not defined", + "source": "SCHEMA", + "entity": { + "logicalId": "AuxiliaryPublicSubnetRouteTableAssociation1", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "category": "Structure", + "startLine": 38, + "startColumn": 3, + "endLine": 38, + "endColumn": 46, + "ruleDescription": "Condition referenced by resource is not defined", + "phase": "PARSE" + }, + { + "ruleId": "E8002", + "severity": "ERROR", + "message": "Condition 'CreateAuxiliaryNetworks' referenced by resource 'AuxilliaryCustomSubnetRouteTableAssociation' is not defined", + "source": "SCHEMA", + "entity": { + "logicalId": "AuxilliaryCustomSubnetRouteTableAssociation", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "category": "Structure", + "startLine": 68, + "startColumn": 3, + "endLine": 68, + "endColumn": 46, + "ruleDescription": "Condition referenced by resource is not defined", + "phase": "PARSE" + }, + { + "ruleId": "I9001", "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", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "PublicSubnetRouteTableAssociation1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 5, - "startColumn": 3, - "endLine": 5, - "endColumn": 10, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 25, + "startColumn": 9, + "endLine": 25, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'PublicRouteTable' (type String)", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "PublicSubnetRouteTableAssociation1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 5, - "startColumn": 3, - "endLine": 5, - "endColumn": 10, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 27, + "startColumn": 9, + "endLine": 27, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'PublicSubnet01' (type String)", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "PrivateSubnetRouteTableAssociation1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "startLine": 33, + "startColumn": 9, + "endLine": 33, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'PrivateRouteTable' (type String)", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PrivateSubnetRouteTableAssociation1", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 35, + "startColumn": 9, + "endLine": 35, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'PublicSubnet01' (type String)", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AuxiliaryPublicSubnetRouteTableAssociation1", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 42, + "startColumn": 9, + "endLine": 42, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'PublicRouteTable' (type String)", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AuxiliaryPublicSubnetRouteTableAssociation1", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 44, + "startColumn": 9, + "endLine": 44, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'PublicSubnet01' (type String)", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ProxySubnetRouteTableAssociation", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 50, + "startColumn": 9, + "endLine": 50, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'PublicRouteTable' (type String)", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ProxySubnetRouteTableAssociation", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 52, + "startColumn": 9, + "endLine": 52, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'isPublic'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CustomResource", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::CustomResource" + }, + "propertyPath": "Properties.ServiceToken", + "category": "Best Practice", + "startLine": 58, + "startColumn": 9, + "endLine": 58, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "CustomSubnetRouteTableAssociation", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "startLine": 63, + "startColumn": 9, + "endLine": 63, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter 'PublicRouteTable' (type String)", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "CustomSubnetRouteTableAssociation", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "startLine": 65, + "startColumn": 9, + "endLine": 65, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt CustomResource.PublicSubnet", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { - "ruleId": "I9003", + "ruleId": "I9001", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", + "entity": { + "logicalId": "AuxilliaryCustomSubnetRouteTableAssociation", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" + "startLine": 72, + "startColumn": 9, + "endLine": 72, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'PublicRouteTable' (type String)", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Cluster' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "AuxilliaryCustomSubnetRouteTableAssociation", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 74, + "startColumn": 9, + "endLine": 74, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt CustomResource.PublicSubnet", + "extra": { + "replacement_strategy": "delete_then_create" + } + } } ] }, - "bad/rds_dbinstanceclass_mixed_case_engine.yaml": { - "filePath": "bad/rds_dbinstanceclass_mixed_case_engine.yaml", + "bad/properties_sg_ingress.yaml": { + "filePath": "bad/properties_sg_ingress.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 9, "counts": { - "fatal": 0, - "errors": 1, - "warnings": 1, - "informational": 6, + "fatal": 5, + "errors": 13, + "warnings": 7, + "informational": 21, "debug": 0 }, "suppressed": 0, @@ -76802,970 +76289,867 @@ }, "diagnostics": [ { - "ruleId": "E3025", - "severity": "ERROR", - "message": "'totally.bogus.class' is not one of ['db.m1.large', 'db.m1.medium', 'db.m1.small', 'db.m1.xlarge', 'db.m2.2xlarge', 'db.m2.4xlarge', 'db.m2.xlarge', 'db.m3.2xlarge', 'db.m3.large', 'db.m3.medium', 'db.m3.xlarge', 'db.m4.10xlarge', 'db.m4.16xlarge', 'db.m4.2xlarge', 'db.m4.4xlarge', 'db.m4.large', 'db.m4.xlarge', 'db.m5.12xlarge', 'db.m5.16xlarge', 'db.m5.24xlarge', 'db.m5.2xlarge', 'db.m5.4xlarge', 'db.m5.8xlarge', 'db.m5.large', 'db.m5.xlarge', 'db.m5d.12xlarge', 'db.m5d.16xlarge', 'db.m5d.24xlarge', 'db.m5d.2xlarge', 'db.m5d.4xlarge', 'db.m5d.8xlarge', 'db.m5d.large', 'db.m5d.xlarge', 'db.m6g.12xlarge', 'db.m6g.16xlarge', 'db.m6g.2xlarge', 'db.m6g.4xlarge', 'db.m6g.8xlarge', 'db.m6g.large', 'db.m6g.xlarge', 'db.m6gd.12xlarge', 'db.m6gd.16xlarge', 'db.m6gd.2xlarge', 'db.m6gd.4xlarge', 'db.m6gd.8xlarge', 'db.m6gd.large', 'db.m6gd.xlarge', 'db.m6i.12xlarge', 'db.m6i.16xlarge', 'db.m6i.24xlarge', 'db.m6i.2xlarge', 'db.m6i.32xlarge', 'db.m6i.4xlarge', 'db.m6i.8xlarge', 'db.m6i.large', 'db.m6i.xlarge', 'db.m6id.12xlarge', 'db.m6id.16xlarge', 'db.m6id.24xlarge', 'db.m6id.2xlarge', 'db.m6id.32xlarge', 'db.m6id.4xlarge', 'db.m6id.8xlarge', 'db.m6id.large', 'db.m6id.xlarge', 'db.m6idn.12xlarge', 'db.m6idn.16xlarge', 'db.m6idn.24xlarge', 'db.m6idn.2xlarge', 'db.m6idn.32xlarge', 'db.m6idn.4xlarge', 'db.m6idn.8xlarge', 'db.m6idn.large', 'db.m6idn.xlarge', 'db.m6in.12xlarge', 'db.m6in.16xlarge', 'db.m6in.24xlarge', 'db.m6in.2xlarge', 'db.m6in.32xlarge', 'db.m6in.4xlarge', 'db.m6in.8xlarge', 'db.m6in.large', 'db.m6in.xlarge', 'db.m7g.12xlarge', 'db.m7g.16xlarge', 'db.m7g.2xlarge', 'db.m7g.4xlarge', 'db.m7g.8xlarge', 'db.m7g.large', 'db.m7g.xlarge', 'db.m7i.12xlarge', 'db.m7i.16xlarge', 'db.m7i.24xlarge', 'db.m7i.2xlarge', 'db.m7i.48xlarge', 'db.m7i.4xlarge', 'db.m7i.8xlarge', 'db.m7i.large', 'db.m7i.xlarge', 'db.m8g.12xlarge', 'db.m8g.16xlarge', 'db.m8g.24xlarge', 'db.m8g.2xlarge', 'db.m8g.48xlarge', 'db.m8g.4xlarge', 'db.m8g.8xlarge', 'db.m8g.large', 'db.m8g.xlarge', 'db.m8gd.12xlarge', 'db.m8gd.16xlarge', 'db.m8gd.24xlarge', 'db.m8gd.2xlarge', 'db.m8gd.48xlarge', 'db.m8gd.4xlarge', 'db.m8gd.8xlarge', 'db.m8gd.large', 'db.m8gd.xlarge', 'db.m9g.12xlarge', 'db.m9g.16xlarge', 'db.m9g.24xlarge', 'db.m9g.2xlarge', 'db.m9g.48xlarge', 'db.m9g.4xlarge', 'db.m9g.8xlarge', 'db.m9g.large', 'db.m9g.xlarge', 'db.r3.2xlarge', 'db.r3.4xlarge', 'db.r3.8xlarge', 'db.r3.large', 'db.r3.xlarge', 'db.r4.16xlarge', 'db.r4.2xlarge', 'db.r4.4xlarge', 'db.r4.8xlarge', 'db.r4.large', 'db.r4.xlarge', 'db.r5.12xlarge', 'db.r5.16xlarge', 'db.r5.24xlarge', 'db.r5.2xlarge', 'db.r5.4xlarge', 'db.r5.8xlarge', 'db.r5.large', 'db.r5.xlarge', 'db.r5b.12xlarge', 'db.r5b.16xlarge', 'db.r5b.24xlarge', 'db.r5b.2xlarge', 'db.r5b.4xlarge', 'db.r5b.8xlarge', 'db.r5b.large', 'db.r5b.xlarge', 'db.r5d.12xlarge', 'db.r5d.16xlarge', 'db.r5d.24xlarge', 'db.r5d.2xlarge', 'db.r5d.4xlarge', 'db.r5d.8xlarge', 'db.r5d.large', 'db.r5d.xlarge', 'db.r6g.12xlarge', 'db.r6g.16xlarge', 'db.r6g.2xlarge', 'db.r6g.4xlarge', 'db.r6g.8xlarge', 'db.r6g.large', 'db.r6g.xlarge', 'db.r6gd.12xlarge', 'db.r6gd.16xlarge', 'db.r6gd.2xlarge', 'db.r6gd.4xlarge', 'db.r6gd.8xlarge', 'db.r6gd.large', 'db.r6gd.xlarge', 'db.r6i.12xlarge', 'db.r6i.16xlarge', 'db.r6i.24xlarge', 'db.r6i.2xlarge', 'db.r6i.32xlarge', 'db.r6i.4xlarge', 'db.r6i.8xlarge', 'db.r6i.large', 'db.r6i.xlarge', 'db.r6id.12xlarge', 'db.r6id.16xlarge', 'db.r6id.24xlarge', 'db.r6id.2xlarge', 'db.r6id.32xlarge', 'db.r6id.4xlarge', 'db.r6id.8xlarge', 'db.r6id.large', 'db.r6id.xlarge', 'db.r6idn.12xlarge', 'db.r6idn.16xlarge', 'db.r6idn.24xlarge', 'db.r6idn.2xlarge', 'db.r6idn.32xlarge', 'db.r6idn.4xlarge', 'db.r6idn.8xlarge', 'db.r6idn.large', 'db.r6idn.xlarge', 'db.r6in.12xlarge', 'db.r6in.16xlarge', 'db.r6in.24xlarge', 'db.r6in.2xlarge', 'db.r6in.32xlarge', 'db.r6in.4xlarge', 'db.r6in.8xlarge', 'db.r6in.large', 'db.r6in.xlarge', 'db.r7g.12xlarge', 'db.r7g.16xlarge', 'db.r7g.2xlarge', 'db.r7g.4xlarge', 'db.r7g.8xlarge', 'db.r7g.large', 'db.r7g.xlarge', 'db.r7i.12xlarge', 'db.r7i.16xlarge', 'db.r7i.24xlarge', 'db.r7i.2xlarge', 'db.r7i.48xlarge', 'db.r7i.4xlarge', 'db.r7i.8xlarge', 'db.r7i.large', 'db.r7i.xlarge', 'db.r8g.12xlarge', 'db.r8g.16xlarge', 'db.r8g.24xlarge', 'db.r8g.2xlarge', 'db.r8g.48xlarge', 'db.r8g.4xlarge', 'db.r8g.8xlarge', 'db.r8g.large', 'db.r8g.xlarge', 'db.r8gd.12xlarge', 'db.r8gd.16xlarge', 'db.r8gd.24xlarge', 'db.r8gd.2xlarge', 'db.r8gd.48xlarge', 'db.r8gd.4xlarge', 'db.r8gd.8xlarge', 'db.r8gd.large', 'db.r8gd.xlarge', 'db.t1.micro', 'db.t2.2xlarge', 'db.t2.large', 'db.t2.medium', 'db.t2.micro', 'db.t2.small', 'db.t2.xlarge', 'db.t3.2xlarge', 'db.t3.large', 'db.t3.medium', 'db.t3.micro', 'db.t3.small', 'db.t3.xlarge', 'db.t4g.2xlarge', 'db.t4g.large', 'db.t4g.medium', 'db.t4g.micro', 'db.t4g.small', 'db.t4g.xlarge', 'db.x2g.12xlarge', 'db.x2g.16xlarge', 'db.x2g.2xlarge', 'db.x2g.4xlarge', 'db.x2g.8xlarge', 'db.x2g.large', 'db.x2g.xlarge', 'db.x2iedn.16xlarge', 'db.x2iedn.24xlarge', 'db.x2iedn.2xlarge', 'db.x2iedn.32xlarge', 'db.x2iedn.4xlarge', 'db.x2iedn.8xlarge', 'db.x2iedn.xlarge'] when Engine is 'mysql' in any region", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'IpProtocol' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Db", + "logicalId": "mySecurityGroupIngressExclusive", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.DBInstanceClass", - "category": "Resource", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 22, - "ruleDescription": "Validates RDS DB Instance Class", - "phase": "LINT" + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'IpProtocol'", + "category": "Schema", + "startLine": 73, + "startColumn": 5, + "endLine": 73, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", + "ruleId": "F3014", + "severity": "FATAL", + "message": "Exactly one of ['CidrIp', 'CidrIpv6', 'SourcePrefixListId', 'SourceSecurityGroupId', 'SourceSecurityGroupName'] must be specified", + "source": "SCHEMA", "entity": { - "logicalId": "Db", + "logicalId": "mySecurityGroupVpc", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 7, + "propertyPath": "Properties.SecurityGroupIngress.1", + "category": "Schema", + "startLine": 38, + "startColumn": 19, + "endLine": 38, + "endColumn": 20, + "ruleDescription": "Exactly one of properties required (requiredXor)", + "phase": "SCHEMA" + }, + { + "ruleId": "F3014", + "severity": "FATAL", + "message": "Exactly one of ['CidrIp', 'CidrIpv6', 'SourcePrefixListId', 'SourceSecurityGroupId', 'SourceSecurityGroupName'] must be specified", + "source": "SCHEMA", + "entity": { + "logicalId": "mySecurityGroupVpc", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.4", + "category": "Schema", + "startLine": 48, + "startColumn": 19, + "endLine": 48, + "endColumn": 20, + "ruleDescription": "Exactly one of properties required (requiredXor)", + "phase": "SCHEMA" + }, + { + "ruleId": "F3014", + "severity": "FATAL", + "message": "Exactly one of ['CidrIp', 'CidrIpv6', 'SourcePrefixListId', 'SourceSecurityGroupId', 'SourceSecurityGroupName'] must be specified", + "source": "SCHEMA", + "entity": { + "logicalId": "mySecurityGroupIngressExclusive", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupIngress" + }, + "propertyPath": "Properties", + "category": "Schema", + "startLine": 73, "startColumn": 5, - "endLine": 7, + "endLine": 73, "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Exactly one of properties required (requiredXor)", + "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)", + "ruleId": "F3031", + "severity": "FATAL", + "message": "'Special charaters like ^ and \" are not supported' does not match pattern '^([a-z,A-Z,0-9,. _\\-:/()#,@[\\]+=&;\\{\\}!$*])*$'", + "source": "SCHEMA", + "entity": { + "logicalId": "mySecurityGroupNonVpc", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Schema", + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 23, + "ruleDescription": "Value does not match pattern", + "phase": "SCHEMA", + "context": { + "actualValue": "Special charaters like ^ and \" are not supported", + "expectedConstraint": "^([a-z,A-Z,0-9,. _\\-:/()#,@[\\]+=&;\\{\\}!$*])*$" + } + }, + { + "ruleId": "E1041", + "severity": "ERROR", + "message": "{'Ref': 'mySecurityGroupNonVpc'} with formats ['AWS::EC2::SecurityGroup.Name'] does not match destination format of 'AWS::EC2::SecurityGroup.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Db", + "logicalId": "mySecurityGroupVpc", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "category": "Best Practice", - "startLine": 5, - "startColumn": 3, - "endLine": 5, - "endColumn": 5, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.SecurityGroupIngress.3.SourceSecurityGroupId", + "suggestedFix": "Use a Ref to a resource whose type matches the expected format", + "category": "Intrinsic Function", + "startLine": 46, + "startColumn": 9, + "endLine": 46, + "endColumn": 30, + "ruleDescription": "Check if Ref matches destination format", "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)", + "ruleId": "E1041", + "severity": "ERROR", + "message": "{'Ref': 'mySecurityGroupNonVpc'} with formats ['AWS::EC2::SecurityGroup.Name'] does not match destination format of 'AWS::EC2::SecurityGroup.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Db", + "logicalId": "mySecurityGroupIngress", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "category": "Best Practice", - "startLine": 5, - "startColumn": 3, - "endLine": 5, - "endColumn": 5, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.SourceSecurityGroupId", + "suggestedFix": "Use a Ref to a resource whose type matches the expected format", + "category": "Intrinsic Function", + "startLine": 64, + "startColumn": 7, + "endLine": 64, + "endColumn": 28, + "ruleDescription": "Check if Ref matches destination format", "phase": "LINT" }, { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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)", + "ruleId": "E1150", + "severity": "ERROR", + "message": "'sg-1234567' does not match format 'AWS::EC2::SecurityGroup.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Db", + "logicalId": "mySecurityGroupNonVpc", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "propertyPath": "Properties.SecurityGroupIngress.0.SourceSecurityGroupId", + "category": "Intrinsic Function", + "startLine": 27, + "startColumn": 9, + "endLine": 27, + "endColumn": 30, + "ruleDescription": "Validate security group format", + "phase": "SCHEMA", + "context": { + "actualValue": "sg-1234567" + } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "E1150", + "severity": "ERROR", + "message": "'vpc-1234567' does not match format 'AWS::EC2::SecurityGroup.Id'", + "source": "CFN_LINT", "entity": { - "logicalId": "Db", + "logicalId": "mySecurityGroupVpc", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 8, + "propertyPath": "Properties.SecurityGroupIngress.4.SourceSecurityGroupId", + "category": "Intrinsic Function", + "startLine": 49, + "startColumn": 9, + "endLine": 49, + "endColumn": 30, + "ruleDescription": "Validate security group format", + "phase": "SCHEMA", + "context": { + "actualValue": "vpc-1234567" + } + }, + { + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-123456' does not match format 'AWS::EC2::Image.Id'", + "source": "CFN_LINT", + "entity": { + "logicalId": "myInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 79, "startColumn": 7, - "endLine": 8, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 79, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "actualValue": "ami-123456" } }, { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "ruleId": "E3687", + "severity": "ERROR", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "source": "CFN_LINT", + "entity": { + "logicalId": "mySecurityGroupNonVpc", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0", + "category": "Resource", + "startLine": 26, + "startColumn": 19, + "endLine": 26, + "endColumn": 20, + "ruleDescription": "Validate to and from ports based on the protocol", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Db' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3687", + "severity": "ERROR", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "source": "CFN_LINT", "entity": { - "logicalId": "Db", + "logicalId": "mySecurityGroupVpc", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.SecurityGroupIngress.0", + "category": "Resource", + "startLine": 35, + "startColumn": 19, + "endLine": 35, + "endColumn": 20, + "ruleDescription": "Validate to and from ports based on the protocol", "phase": "LINT" - } - ] - }, - "bad/rds_public.yaml": { - "filePath": "bad/rds_public.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 8, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W2501", - "severity": "WARN", - "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", + "ruleId": "E3687", + "severity": "ERROR", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", "source": "CFN_LINT", "entity": { - "logicalId": "Database", + "logicalId": "mySecurityGroupVpc", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 25, - "ruleDescription": "Check if Password Properties are correctly configured", + "propertyPath": "Properties.SecurityGroupIngress.1", + "category": "Resource", + "startLine": 38, + "startColumn": 19, + "endLine": 38, + "endColumn": 20, + "ruleDescription": "Validate to and from ports based on the protocol", "phase": "LINT" }, { - "ruleId": "W9011", - "severity": "WARN", - "message": "RDS instance has PubliclyAccessible set to true - consider restricting access", - "source": "ENGINE", + "ruleId": "E3687", + "severity": "ERROR", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "source": "CFN_LINT", "entity": { - "logicalId": "Database", + "logicalId": "mySecurityGroupVpc", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.PubliclyAccessible", - "suggestedFix": "Set PubliclyAccessible to false", - "category": "Security", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 25, - "ruleDescription": "RDS instance PubliclyAccessible is true", - "phase": "LINT", - "context": { - "actualValue": true - } + "propertyPath": "Properties.SecurityGroupIngress.2", + "category": "Resource", + "startLine": 42, + "startColumn": 19, + "endLine": 42, + "endColumn": 20, + "ruleDescription": "Validate to and from ports based on the protocol", + "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)", + "ruleId": "E3687", + "severity": "ERROR", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", "source": "CFN_LINT", "entity": { - "logicalId": "Database", + "logicalId": "mySecurityGroupVpc", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.SecurityGroupIngress.3", + "category": "Resource", + "startLine": 45, + "startColumn": 19, + "endLine": 45, + "endColumn": 20, + "ruleDescription": "Validate to and from ports based on the protocol", "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)", + "ruleId": "E3687", + "severity": "ERROR", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", "source": "CFN_LINT", "entity": { - "logicalId": "Database", + "logicalId": "mySecurityGroupVpc", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.SecurityGroupIngress.4", + "category": "Resource", + "startLine": 48, + "startColumn": 19, + "endLine": 48, + "endColumn": 20, + "ruleDescription": "Validate to and from ports based on the protocol", "phase": "LINT" }, { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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)", + "ruleId": "E3687", + "severity": "ERROR", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", "source": "CFN_LINT", "entity": { - "logicalId": "Database", + "logicalId": "mySecurityGroupIngress", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 5, + "category": "Resource", + "startLine": 61, "startColumn": 5, - "endLine": 5, + "endLine": 61, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Validate to and from ports based on the protocol", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "E3687", + "severity": "ERROR", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "source": "CFN_LINT", "entity": { - "logicalId": "Database", + "logicalId": "mySecurityGroupIngress2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "propertyPath": "Properties", + "category": "Resource", + "startLine": 67, + "startColumn": 5, + "endLine": 67, + "endColumn": 15, + "ruleDescription": "Validate to and from ports based on the protocol", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "Database", + "logicalId": "mySecurityGroupNonVpc", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.SecurityGroupIngress.0.IpProtocol", "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 26, + "startColumn": 9, + "endLine": 26, + "endColumn": 19, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "Database", + "logicalId": "mySecurityGroupVpc", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.StorageEncrypted", - "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", + "propertyPath": "Properties.SecurityGroupIngress.0.IpProtocol", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" + "startLine": 35, + "startColumn": 9, + "endLine": 35, + "endColumn": 19, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Database' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "Database", + "logicalId": "mySecurityGroupVpc", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SecurityGroupIngress.1.IpProtocol", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/redshift_internet_accessible.yaml": { - "filePath": "bad/redshift_internet_accessible.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 13, - "debug": 0 + "startLine": 38, + "startColumn": 9, + "endLine": 38, + "endColumn": 19, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "Subnet1", + "logicalId": "mySecurityGroupVpc", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.SecurityGroupIngress.3.IpProtocol", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" - } + "startLine": 45, + "startColumn": 9, + "endLine": 45, + "endColumn": 19, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "Subnet1", + "logicalId": "mySecurityGroupVpc", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.SecurityGroupIngress.4.IpProtocol", "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 48, + "startColumn": 9, + "endLine": 48, + "endColumn": 19, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "VPC", + "logicalId": "mySecurityGroupIngress", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 11, + "startLine": 63, "startColumn": 7, - "endLine": 11, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 63, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "RouteTable1", + "logicalId": "mySecurityGroupIngress2", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 21, + "startLine": 69, "startColumn": 7, - "endLine": 21, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" - } + "endLine": 69, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetRTAssoc", + "logicalId": "mySecurityGroupNonVpc", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 25, + "startLine": 23, "startColumn": 7, - "endLine": 25, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 23, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Subnet1'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetRTAssoc", + "logicalId": "mySecurityGroupVpc", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 26, + "startLine": 31, "startColumn": 7, - "endLine": 26, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 31, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'RouteTable1'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Route1", + "logicalId": "mySecurityGroupVpc", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 33, + "startLine": 32, "startColumn": 7, - "endLine": 33, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 32, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'RouteTable1'" + "resolutionSource": "parameter 'myVpcId' (type AWS::EC2::VPC::Id)" } }, { "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Route1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.DestinationCidrBlock", - "category": "Best Practice", - "startLine": 34, - "startColumn": 7, - "endLine": 34, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Subnet1' of type 'AWS::EC2::Subnet' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'VPC' of type 'AWS::EC2::VPC' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "VPC", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'RedshiftSubnetGroup' of type 'AWS::Redshift::ClusterSubnetGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "RedshiftSubnetGroup", - "entityType": "Resource", - "resourceType": "AWS::Redshift::ClusterSubnetGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 14, - "startColumn": 5, - "endLine": 14, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'RouteTable1' of type 'AWS::EC2::RouteTable' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "RouteTable1", - "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'IGW' of type 'AWS::EC2::InternetGateway' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "IGW", - "entityType": "Resource", - "resourceType": "AWS::EC2::InternetGateway" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 29, - "startColumn": 5, - "endLine": 29, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/refs.yaml": { - "filePath": "bad/refs.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 4, - "errors": 0, - "warnings": 2, - "informational": 17, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F1018", - "severity": "FATAL", - "message": "Fn::Sub variable '${Package}' does not reference a valid resource, parameter, or pseudo-parameter", - "source": "SCHEMA", + "severity": "INFO", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "SecurityGroupRuleSSM", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.UserData", - "category": "Intrinsic Function", - "startLine": 21, + "propertyPath": "Properties.GroupId", + "category": "Best Practice", + "startLine": 54, "startColumn": 7, - "endLine": 21, - "endColumn": 15, + "endLine": 54, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Sub variables must resolve", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "resolutionSource": "dynamic (Sub:yum install ${Package}\n)" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'mySecurityGroupVpc'" } }, { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'pIops' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'AnotherInstance', 'MyEC2Instance']", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "SecurityGroupRuleSSM", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 15, - "startColumn": 13, - "endLine": 15, + "propertyPath": "Properties.IpProtocol", + "category": "Best Practice", + "startLine": 55, + "startColumn": 7, + "endLine": 55, "endColumn": 17, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'pIops' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'AnotherInstance', 'MyEC2Instance']", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "SecurityGroupRuleSSM", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 34, - "startColumn": 13, - "endLine": 34, - "endColumn": 17, + "propertyPath": "Properties.FromPort", + "category": "Best Practice", + "startLine": 56, + "startColumn": 7, + "endLine": 56, + "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'httpdPackage' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'AnotherInstance', 'MyEC2Instance']", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "SecurityGroupRuleSSM", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.UserData", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 40, + "propertyPath": "Properties.ToPort", + "category": "Best Practice", + "startLine": 57, "startColumn": 7, - "endLine": 40, - "endColumn": 15, + "endLine": 57, + "endColumn": 13, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Ref/GetAtt target must exist", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "resolutionSource": "dynamic (Sub:yum install ${myPackage} ${Package})" + "lifecycle": "create-only" } }, { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "SecurityGroupRuleSSM", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 7, + "propertyPath": "Properties.CidrIp", + "category": "Best Practice", + "startLine": 58, "startColumn": 7, - "endLine": 7, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", - "phase": "LINT" + "endLine": 58, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (dynamic reference: {{resolve:ssm:mysubnet}})" + } }, { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "mySecurityGroupIngress", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 26, + "propertyPath": "Properties.GroupId", + "category": "Best Practice", + "startLine": 62, "startColumn": 7, - "endLine": 26, + "endLine": 62, "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'mySecurityGroupVpc'" + } }, { - "ruleId": "I3100", + "ruleId": "I9001", "severity": "INFO", - "message": "Previous generation instance type 't1.micro' - consider upgrading", - "source": "CFN_LINT", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "mySecurityGroupIngress", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.InstanceType", - "suggestedFix": "Upgrade to a current generation instance type", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 8, + "startLine": 63, "startColumn": 7, - "endLine": 8, - "endColumn": 19, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" + "endLine": 63, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3100", + "ruleId": "I9001", "severity": "INFO", - "message": "Previous generation instance type 't1.micro' - consider upgrading", - "source": "CFN_LINT", + "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "mySecurityGroupIngress", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.InstanceType", - "suggestedFix": "Upgrade to a current generation instance type", + "propertyPath": "Properties.SourceSecurityGroupId", "category": "Best Practice", - "startLine": 27, + "startLine": 64, "startColumn": 7, - "endLine": 27, - "endColumn": 19, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" + "endLine": 64, + "endColumn": 28, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'mySecurityGroupNonVpc'" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "mySecurityGroupIngress2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 7, + "startLine": 68, "startColumn": 7, - "endLine": 7, + "endLine": 68, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'mySecurityGroupVpc'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "mySecurityGroupIngress2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 8, + "startLine": 69, "startColumn": 7, - "endLine": 8, - "endColumn": 19, + "endLine": 69, + "endColumn": 17, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "mySecurityGroupIngress2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.KeyName", + "propertyPath": "Properties.SourceSecurityGroupId", "category": "Best Practice", - "startLine": 9, + "startLine": 70, "startColumn": 7, - "endLine": 9, - "endColumn": 14, + "endLine": 70, + "endColumn": 28, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter 'mySecurity3Group' (type String)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "mySecurityGroupIngressExclusive", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.BlockDeviceMappings", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 10, + "startLine": 74, "startColumn": 7, - "endLine": 10, - "endColumn": 26, + "endLine": 74, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'mySecurityGroupVpc'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "mySecurityGroupIngressExclusive", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.NetworkInterfaces", + "propertyPath": "Properties.GroupName", "category": "Best Practice", - "startLine": 18, + "startLine": 75, "startColumn": 7, - "endLine": 18, - "endColumn": 24, + "endLine": 75, + "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -77776,164 +77160,328 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "myInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 21, + "startLine": 79, "startColumn": 7, - "endLine": 21, - "endColumn": 15, + "endLine": 79, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Sub:yum install ${Package}\n)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "myInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.SecurityGroupIds", "category": "Best Practice", - "startLine": 26, + "startLine": 80, "startColumn": 7, - "endLine": 26, - "endColumn": 14, + "endLine": 80, + "endColumn": 23, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'mySecurityGroupNonVpc' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "mySecurityGroupNonVpc", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 22, + "startColumn": 5, + "endLine": 22, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'mySecurityGroupVpc' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "mySecurityGroupVpc", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 30, + "startColumn": 5, + "endLine": 30, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "myInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 78, + "startColumn": 5, + "endLine": 78, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/rds_dbclusterinstanceclass_invalid.yaml": { + "filePath": "bad/rds_dbclusterinstanceclass_invalid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 3, + "errors": 1, + "warnings": 1, + "informational": 7, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3003", + "severity": "FATAL", + "message": "'AllocatedStorage' is a required property (from extension)", + "source": "SCHEMA", + "entity": { + "logicalId": "Cluster", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBCluster" + }, + "propertyPath": "Properties", + "suggestedFix": "Add 'AllocatedStorage'", + "category": "Schema", + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "F3003", + "severity": "FATAL", + "message": "'Iops' is a required property (from extension)", + "source": "SCHEMA", + "entity": { + "logicalId": "Cluster", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBCluster" + }, + "propertyPath": "Properties", + "suggestedFix": "Add 'Iops'", + "category": "Schema", + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "F3003", + "severity": "FATAL", + "message": "'StorageType' is a required property (from extension)", + "source": "SCHEMA", + "entity": { + "logicalId": "Cluster", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBCluster" + }, + "propertyPath": "Properties", + "suggestedFix": "Add 'StorageType'", + "category": "Schema", + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "E3694", + "severity": "ERROR", + "message": "'db.bogus.class' is not one of ['db.c6gd.12xlarge', 'db.c6gd.16xlarge', 'db.c6gd.2xlarge', 'db.c6gd.4xlarge', 'db.c6gd.8xlarge', 'db.c6gd.large', 'db.c6gd.medium', 'db.c6gd.xlarge', 'db.m5d.12xlarge', 'db.m5d.16xlarge', 'db.m5d.24xlarge', 'db.m5d.2xlarge', 'db.m5d.4xlarge', 'db.m5d.8xlarge', 'db.m5d.large', 'db.m5d.xlarge', 'db.m6gd.12xlarge', 'db.m6gd.16xlarge', 'db.m6gd.2xlarge', 'db.m6gd.4xlarge', 'db.m6gd.8xlarge', 'db.m6gd.large', 'db.m6gd.xlarge', 'db.m6id.12xlarge', 'db.m6id.16xlarge', 'db.m6id.24xlarge', 'db.m6id.2xlarge', 'db.m6id.32xlarge', 'db.m6id.4xlarge', 'db.m6id.8xlarge', 'db.m6id.large', 'db.m6id.xlarge', 'db.m6idn.12xlarge', 'db.m6idn.16xlarge', 'db.m6idn.24xlarge', 'db.m6idn.2xlarge', 'db.m6idn.32xlarge', 'db.m6idn.4xlarge', 'db.m6idn.8xlarge', 'db.m6idn.large', 'db.m6idn.xlarge', 'db.m8gd.12xlarge', 'db.m8gd.16xlarge', 'db.m8gd.24xlarge', 'db.m8gd.2xlarge', 'db.m8gd.48xlarge', 'db.m8gd.4xlarge', 'db.m8gd.8xlarge', 'db.m8gd.large', 'db.m8gd.xlarge', 'db.r5d.12xlarge', 'db.r5d.16xlarge', 'db.r5d.24xlarge', 'db.r5d.2xlarge', 'db.r5d.4xlarge', 'db.r5d.8xlarge', 'db.r5d.large', 'db.r5d.xlarge', 'db.r6gd.12xlarge', 'db.r6gd.16xlarge', 'db.r6gd.2xlarge', 'db.r6gd.4xlarge', 'db.r6gd.8xlarge', 'db.r6gd.large', 'db.r6gd.xlarge', 'db.r6id.12xlarge', 'db.r6id.16xlarge', 'db.r6id.24xlarge', 'db.r6id.2xlarge', 'db.r6id.32xlarge', 'db.r6id.4xlarge', 'db.r6id.8xlarge', 'db.r6id.large', 'db.r6id.xlarge', 'db.r6idn.12xlarge', 'db.r6idn.16xlarge', 'db.r6idn.24xlarge', 'db.r6idn.2xlarge', 'db.r6idn.32xlarge', 'db.r6idn.4xlarge', 'db.r6idn.8xlarge', 'db.r6idn.large', 'db.r6idn.xlarge', 'db.r8gd.12xlarge', 'db.r8gd.16xlarge', 'db.r8gd.24xlarge', 'db.r8gd.2xlarge', 'db.r8gd.48xlarge', 'db.r8gd.4xlarge', 'db.r8gd.8xlarge', 'db.r8gd.large', 'db.r8gd.xlarge', 'db.x2idn.16xlarge', 'db.x2idn.24xlarge', 'db.x2idn.32xlarge', 'db.x2iedn.16xlarge', 'db.x2iedn.24xlarge', 'db.x2iedn.2xlarge', 'db.x2iedn.32xlarge', 'db.x2iedn.4xlarge', 'db.x2iedn.8xlarge', 'db.x2iedn.xlarge'] when Engine is 'mysql' in any region", + "source": "CFN_LINT", + "entity": { + "logicalId": "Cluster", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBCluster" + }, + "propertyPath": "Properties.DBClusterInstanceClass", + "category": "Resource", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 29, + "ruleDescription": "Validates RDS DB Cluster instance class", + "phase": "LINT" + }, + { + "ruleId": "W2501", + "severity": "WARN", + "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", + "source": "CFN_LINT", + "entity": { + "logicalId": "Cluster", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBCluster" + }, + "propertyPath": "Properties.MasterUserPassword", + "category": "Security", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 25, + "ruleDescription": "Check if Password Properties are correctly configured", + "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": "Cluster", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 27, - "startColumn": 7, - "endLine": 27, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "AnotherInstance", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.KeyName", "category": "Best Practice", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "AnotherInstance", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.BlockDeviceMappings", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 29, - "startColumn": 7, - "endLine": 29, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.NetworkInterfaces", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 37, + "startLine": 8, "startColumn": 7, - "endLine": 37, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 8, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 40, + "startLine": 10, "startColumn": 7, - "endLine": 40, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 10, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Sub:yum install ${myPackage} ${Package})" + "lifecycle": "conditional-create-only" } }, { @@ -77948,55 +77496,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyEC2Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MyEC2Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'AnotherInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'Cluster' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBCluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 25, + "startLine": 7, "startColumn": 5, - "endLine": 25, + "endLine": 7, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/resource_policy_no_statement.yaml": { - "filePath": "bad/resource_policy_no_statement.yaml", + "bad/rds_dbinstanceclass_mixed_case_engine.yaml": { + "filePath": "bad/rds_dbinstanceclass_mixed_case_engine.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 1, - "warnings": 0, - "informational": 3, + "warnings": 1, + "informational": 6, "debug": 0 }, "suppressed": 0, @@ -78005,23 +77533,42 @@ }, "diagnostics": [ { - "ruleId": "E3512", + "ruleId": "E3025", "severity": "ERROR", - "message": "Resource-based policy must have a Statement property", + "message": "'totally.bogus.class' is not one of ['db.m1.large', 'db.m1.medium', 'db.m1.small', 'db.m1.xlarge', 'db.m2.2xlarge', 'db.m2.4xlarge', 'db.m2.xlarge', 'db.m3.2xlarge', 'db.m3.large', 'db.m3.medium', 'db.m3.xlarge', 'db.m4.10xlarge', 'db.m4.16xlarge', 'db.m4.2xlarge', 'db.m4.4xlarge', 'db.m4.large', 'db.m4.xlarge', 'db.m5.12xlarge', 'db.m5.16xlarge', 'db.m5.24xlarge', 'db.m5.2xlarge', 'db.m5.4xlarge', 'db.m5.8xlarge', 'db.m5.large', 'db.m5.xlarge', 'db.m5d.12xlarge', 'db.m5d.16xlarge', 'db.m5d.24xlarge', 'db.m5d.2xlarge', 'db.m5d.4xlarge', 'db.m5d.8xlarge', 'db.m5d.large', 'db.m5d.xlarge', 'db.m6g.12xlarge', 'db.m6g.16xlarge', 'db.m6g.2xlarge', 'db.m6g.4xlarge', 'db.m6g.8xlarge', 'db.m6g.large', 'db.m6g.xlarge', 'db.m6gd.12xlarge', 'db.m6gd.16xlarge', 'db.m6gd.2xlarge', 'db.m6gd.4xlarge', 'db.m6gd.8xlarge', 'db.m6gd.large', 'db.m6gd.xlarge', 'db.m6i.12xlarge', 'db.m6i.16xlarge', 'db.m6i.24xlarge', 'db.m6i.2xlarge', 'db.m6i.32xlarge', 'db.m6i.4xlarge', 'db.m6i.8xlarge', 'db.m6i.large', 'db.m6i.xlarge', 'db.m6id.12xlarge', 'db.m6id.16xlarge', 'db.m6id.24xlarge', 'db.m6id.2xlarge', 'db.m6id.32xlarge', 'db.m6id.4xlarge', 'db.m6id.8xlarge', 'db.m6id.large', 'db.m6id.xlarge', 'db.m6idn.12xlarge', 'db.m6idn.16xlarge', 'db.m6idn.24xlarge', 'db.m6idn.2xlarge', 'db.m6idn.32xlarge', 'db.m6idn.4xlarge', 'db.m6idn.8xlarge', 'db.m6idn.large', 'db.m6idn.xlarge', 'db.m6in.12xlarge', 'db.m6in.16xlarge', 'db.m6in.24xlarge', 'db.m6in.2xlarge', 'db.m6in.32xlarge', 'db.m6in.4xlarge', 'db.m6in.8xlarge', 'db.m6in.large', 'db.m6in.xlarge', 'db.m7g.12xlarge', 'db.m7g.16xlarge', 'db.m7g.2xlarge', 'db.m7g.4xlarge', 'db.m7g.8xlarge', 'db.m7g.large', 'db.m7g.xlarge', 'db.m7i.12xlarge', 'db.m7i.16xlarge', 'db.m7i.24xlarge', 'db.m7i.2xlarge', 'db.m7i.48xlarge', 'db.m7i.4xlarge', 'db.m7i.8xlarge', 'db.m7i.large', 'db.m7i.xlarge', 'db.m8g.12xlarge', 'db.m8g.16xlarge', 'db.m8g.24xlarge', 'db.m8g.2xlarge', 'db.m8g.48xlarge', 'db.m8g.4xlarge', 'db.m8g.8xlarge', 'db.m8g.large', 'db.m8g.xlarge', 'db.m8gd.12xlarge', 'db.m8gd.16xlarge', 'db.m8gd.24xlarge', 'db.m8gd.2xlarge', 'db.m8gd.48xlarge', 'db.m8gd.4xlarge', 'db.m8gd.8xlarge', 'db.m8gd.large', 'db.m8gd.xlarge', 'db.m9g.12xlarge', 'db.m9g.16xlarge', 'db.m9g.24xlarge', 'db.m9g.2xlarge', 'db.m9g.48xlarge', 'db.m9g.4xlarge', 'db.m9g.8xlarge', 'db.m9g.large', 'db.m9g.xlarge', 'db.r3.2xlarge', 'db.r3.4xlarge', 'db.r3.8xlarge', 'db.r3.large', 'db.r3.xlarge', 'db.r4.16xlarge', 'db.r4.2xlarge', 'db.r4.4xlarge', 'db.r4.8xlarge', 'db.r4.large', 'db.r4.xlarge', 'db.r5.12xlarge', 'db.r5.16xlarge', 'db.r5.24xlarge', 'db.r5.2xlarge', 'db.r5.4xlarge', 'db.r5.8xlarge', 'db.r5.large', 'db.r5.xlarge', 'db.r5b.12xlarge', 'db.r5b.16xlarge', 'db.r5b.24xlarge', 'db.r5b.2xlarge', 'db.r5b.4xlarge', 'db.r5b.8xlarge', 'db.r5b.large', 'db.r5b.xlarge', 'db.r5d.12xlarge', 'db.r5d.16xlarge', 'db.r5d.24xlarge', 'db.r5d.2xlarge', 'db.r5d.4xlarge', 'db.r5d.8xlarge', 'db.r5d.large', 'db.r5d.xlarge', 'db.r6g.12xlarge', 'db.r6g.16xlarge', 'db.r6g.2xlarge', 'db.r6g.4xlarge', 'db.r6g.8xlarge', 'db.r6g.large', 'db.r6g.xlarge', 'db.r6gd.12xlarge', 'db.r6gd.16xlarge', 'db.r6gd.2xlarge', 'db.r6gd.4xlarge', 'db.r6gd.8xlarge', 'db.r6gd.large', 'db.r6gd.xlarge', 'db.r6i.12xlarge', 'db.r6i.16xlarge', 'db.r6i.24xlarge', 'db.r6i.2xlarge', 'db.r6i.32xlarge', 'db.r6i.4xlarge', 'db.r6i.8xlarge', 'db.r6i.large', 'db.r6i.xlarge', 'db.r6id.12xlarge', 'db.r6id.16xlarge', 'db.r6id.24xlarge', 'db.r6id.2xlarge', 'db.r6id.32xlarge', 'db.r6id.4xlarge', 'db.r6id.8xlarge', 'db.r6id.large', 'db.r6id.xlarge', 'db.r6idn.12xlarge', 'db.r6idn.16xlarge', 'db.r6idn.24xlarge', 'db.r6idn.2xlarge', 'db.r6idn.32xlarge', 'db.r6idn.4xlarge', 'db.r6idn.8xlarge', 'db.r6idn.large', 'db.r6idn.xlarge', 'db.r6in.12xlarge', 'db.r6in.16xlarge', 'db.r6in.24xlarge', 'db.r6in.2xlarge', 'db.r6in.32xlarge', 'db.r6in.4xlarge', 'db.r6in.8xlarge', 'db.r6in.large', 'db.r6in.xlarge', 'db.r7g.12xlarge', 'db.r7g.16xlarge', 'db.r7g.2xlarge', 'db.r7g.4xlarge', 'db.r7g.8xlarge', 'db.r7g.large', 'db.r7g.xlarge', 'db.r7i.12xlarge', 'db.r7i.16xlarge', 'db.r7i.24xlarge', 'db.r7i.2xlarge', 'db.r7i.48xlarge', 'db.r7i.4xlarge', 'db.r7i.8xlarge', 'db.r7i.large', 'db.r7i.xlarge', 'db.r8g.12xlarge', 'db.r8g.16xlarge', 'db.r8g.24xlarge', 'db.r8g.2xlarge', 'db.r8g.48xlarge', 'db.r8g.4xlarge', 'db.r8g.8xlarge', 'db.r8g.large', 'db.r8g.xlarge', 'db.r8gd.12xlarge', 'db.r8gd.16xlarge', 'db.r8gd.24xlarge', 'db.r8gd.2xlarge', 'db.r8gd.48xlarge', 'db.r8gd.4xlarge', 'db.r8gd.8xlarge', 'db.r8gd.large', 'db.r8gd.xlarge', 'db.t1.micro', 'db.t2.2xlarge', 'db.t2.large', 'db.t2.medium', 'db.t2.micro', 'db.t2.small', 'db.t2.xlarge', 'db.t3.2xlarge', 'db.t3.large', 'db.t3.medium', 'db.t3.micro', 'db.t3.small', 'db.t3.xlarge', 'db.t4g.2xlarge', 'db.t4g.large', 'db.t4g.medium', 'db.t4g.micro', 'db.t4g.small', 'db.t4g.xlarge', 'db.x2g.12xlarge', 'db.x2g.16xlarge', 'db.x2g.2xlarge', 'db.x2g.4xlarge', 'db.x2g.8xlarge', 'db.x2g.large', 'db.x2g.xlarge', 'db.x2iedn.16xlarge', 'db.x2iedn.24xlarge', 'db.x2iedn.2xlarge', 'db.x2iedn.32xlarge', 'db.x2iedn.4xlarge', 'db.x2iedn.8xlarge', 'db.x2iedn.xlarge'] when Engine is 'mysql' in any region", "source": "CFN_LINT", "entity": { - "logicalId": "Policy", + "logicalId": "Db", "entityType": "Resource", - "resourceType": "AWS::KMS::Key" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.KeyPolicy", - "suggestedFix": "Add a Statement array to the policy document", + "propertyPath": "Properties.DBInstanceClass", "category": "Resource", - "startLine": 6, + "startLine": 9, "startColumn": 7, - "endLine": 6, - "endColumn": 16, - "ruleDescription": "Validate resource based IAM policies", + "endLine": 9, + "endColumn": 22, + "ruleDescription": "Validates RDS DB Instance Class", + "phase": "LINT" + }, + { + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", + "entity": { + "logicalId": "Db", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, { @@ -78030,15 +77577,15 @@ "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": "Policy", + "logicalId": "Db", "entityType": "Resource", - "resourceType": "AWS::KMS::Key" + "resourceType": "AWS::RDS::DBInstance" }, "category": "Best Practice", - "startLine": 3, + "startLine": 5, "startColumn": 3, - "endLine": 3, - "endColumn": 9, + "endLine": 5, + "endColumn": 5, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -78048,136 +77595,101 @@ "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": "Policy", + "logicalId": "Db", "entityType": "Resource", - "resourceType": "AWS::KMS::Key" + "resourceType": "AWS::RDS::DBInstance" }, "category": "Best Practice", - "startLine": 3, + "startLine": 5, "startColumn": 3, - "endLine": 3, - "endColumn": 9, + "endLine": 5, + "endColumn": 5, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'Policy' of type 'AWS::KMS::Key' supports Tags but none are configured", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "Policy", + "logicalId": "Db", "entityType": "Resource", - "resourceType": "AWS::KMS::Key" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 5, + "startLine": 7, "startColumn": 5, - "endLine": 5, + "endLine": 7, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" - } - ] - }, - "bad/resources/backup/test_backup_plan_lifecycle_rule.yml": { - "filePath": "bad/resources/backup/test_backup_plan_lifecycle_rule.yml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "bad/resources/cloudformation/stack_nested.yaml": { - "filePath": "bad/resources/cloudformation/stack_nested.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 2, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "startLine": 6, - "startColumn": 1, - "endLine": 6, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'One' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "One", - "entityType": "Parameter" + "logicalId": "Db", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Parameters/One", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 2, - "startColumn": 3, - "endLine": 2, - "endColumn": 6, - "ruleDescription": "Check if Parameters are Used", + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Two' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Db' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Two", - "entityType": "Parameter" + "logicalId": "Db", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Parameters/Two", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 6, - "ruleDescription": "Check if Parameters are Used", + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/resources/cloudformation/stacks.yaml": { - "filePath": "bad/resources/cloudformation/stacks.yaml", + "bad/rds_public.yaml": { + "filePath": "bad/rds_public.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, "warnings": 2, - "informational": 6, + "informational": 8, "debug": 0 }, "suppressed": 0, @@ -78186,42 +77698,46 @@ }, "diagnostics": [ { - "ruleId": "W3002", + "ruleId": "W2501", "severity": "WARN", - "message": "This code may only work with 'package' cli command", + "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", "source": "CFN_LINT", "entity": { - "logicalId": "StackNormal", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.TemplateURL", - "category": "Best Practice", + "propertyPath": "Properties.MasterUserPassword", + "category": "Security", "startLine": 9, "startColumn": 7, "endLine": 9, - "endColumn": 18, - "ruleDescription": "Warn when properties are configured to only work with the package command", + "endColumn": 25, + "ruleDescription": "Check if Password Properties are correctly configured", "phase": "LINT" }, { - "ruleId": "W3002", + "ruleId": "W9011", "severity": "WARN", - "message": "This code may only work with 'package' cli command", - "source": "CFN_LINT", + "message": "RDS instance has PubliclyAccessible set to true - consider restricting access", + "source": "ENGINE", "entity": { - "logicalId": "Stack3", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.TemplateURL", - "category": "Best Practice", - "startLine": 17, + "propertyPath": "Properties.PubliclyAccessible", + "suggestedFix": "Set PubliclyAccessible to false", + "category": "Security", + "startLine": 11, "startColumn": 7, - "endLine": 17, - "endColumn": 18, - "ruleDescription": "Warn when properties are configured to only work with the package command", - "phase": "LINT" + "endLine": 11, + "endColumn": 25, + "ruleDescription": "RDS instance PubliclyAccessible is true", + "phase": "LINT", + "context": { + "actualValue": true + } }, { "ruleId": "I3011", @@ -78229,15 +77745,15 @@ "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": "StackNormal", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::RDS::DBInstance" }, "category": "Best Practice", - "startLine": 6, + "startLine": 3, "startColumn": 3, - "endLine": 6, - "endColumn": 14, + "endLine": 3, + "endColumn": 11, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -78247,106 +77763,147 @@ "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": "StackNormal", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::RDS::DBInstance" }, "category": "Best Practice", - "startLine": 6, + "startLine": 3, "startColumn": 3, - "endLine": 6, - "endColumn": 14, + "endLine": 3, + "endColumn": 11, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I3013", "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)", + "message": "'BackupRetentionPeriod' 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": "Stack3", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::RDS::DBInstance" }, + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 14, - "startColumn": 3, - "endLine": 14, - "endColumn": 9, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Stack3", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::RDS::DBInstance" }, + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 14, - "startColumn": 3, - "endLine": 14, - "endColumn": 9, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'StackNormal' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StackNormal", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", "startLine": 8, - "startColumn": 5, + "startColumn": 7, "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Database", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Stack3' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Resource 'Database' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Stack3", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 16, + "startLine": 5, "startColumn": 5, - "endLine": 16, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/resources/codepipeline/stages_second_stage.yaml": { - "filePath": "bad/resources/codepipeline/stages_second_stage.yaml", + "bad/redshift_internet_accessible.yaml": { + "filePath": "bad/redshift_internet_accessible.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 7, "counts": { - "fatal": 2, - "errors": 1, - "warnings": 1, - "informational": 2, + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 13, "debug": 0 }, "suppressed": 0, @@ -78355,109 +77912,191 @@ }, "diagnostics": [ { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'Github' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'TestPipeline']", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "TestPipeline", + "logicalId": "Subnet1", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Stages.1.Actions.0.Name", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 32, - "startColumn": 15, - "endLine": 32, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" + } }, { - "ruleId": "F3031", - "severity": "FATAL", - "message": "'arn:aws:iam:::role/AWSCodePipelineRole' does not match pattern 'arn:aws(-[\\w]+)*:iam::[0-9]{12}:role/.*'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "TestPipeline", + "logicalId": "Subnet1", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.RoleArn", - "category": "Schema", - "startLine": 12, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 7, "startColumn": 7, - "endLine": 12, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", - "ruleDescription": "Value does not match pattern", + "endLine": 7, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "arn:aws:iam:::role/AWSCodePipelineRole", - "expectedConstraint": "arn:aws(-[\\w]+)*:iam::[0-9]{12}:role/.*" + "lifecycle": "create-only" } }, { - "ruleId": "E1156", - "severity": "ERROR", - "message": "'arn:aws:iam:::role/AWSCodePipelineRole' does not match format 'AWS::IAM::Role.Arn'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "TestPipeline", + "logicalId": "VPC", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.RoleArn", - "category": "Intrinsic Function", - "startLine": 12, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 11, "startColumn": 7, - "endLine": 12, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", - "ruleDescription": "Validate IAM role ARN format", + "endLine": 11, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "arn:aws:iam:::role/AWSCodePipelineRole" + "lifecycle": "create-only" } }, { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TestPipeline", + "logicalId": "RouteTable1", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.RoleArn", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 12, + "startLine": 21, "startColumn": 7, - "endLine": 12, - "endColumn": 14, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" + "endLine": 21, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TestPipeline", + "logicalId": "SubnetRTAssoc", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 8, + "startLine": 25, "startColumn": 7, - "endLine": 8, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", + "endLine": 25, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Subnet1'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetRTAssoc", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 26, + "startColumn": 7, + "endLine": 26, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'RouteTable1'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Route1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'RouteTable1'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Route1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" + }, + "propertyPath": "Properties.DestinationCidrBlock", + "category": "Best Practice", + "startLine": 34, + "startColumn": 7, + "endLine": 34, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -78467,116 +78106,115 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TestPipeline' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured", + "message": "Resource 'Subnet1' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TestPipeline", + "logicalId": "Subnet1", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 7, + "startLine": 5, "startColumn": 5, - "endLine": 7, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/resources/creation_policy_unsupported_e3055.yaml": { - "filePath": "bad/resources/creation_policy_unsupported_e3055.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3055", - "severity": "ERROR", - "message": "CreationPolicy is not supported on resource type 'AWS::S3::Bucket'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'VPC' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyBucket", + "logicalId": "VPC", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "CreationPolicy", - "suggestedFix": "Remove CreationPolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::CloudFormation::WaitCondition, AWS::EC2::Instance", - "category": "Resource", - "startLine": 5, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 10, "startColumn": 5, - "endLine": 5, - "endColumn": 19, - "ruleDescription": "Check CreationPolicy values for Resources", + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Resource 'RedshiftSubnetGroup' of type 'AWS::Redshift::ClusterSubnetGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyBucket", + "logicalId": "RedshiftSubnetGroup", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Redshift::ClusterSubnetGroup" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 14, + "startColumn": 5, + "endLine": 14, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'RouteTable1' of type 'AWS::EC2::RouteTable' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyBucket", + "logicalId": "RouteTable1", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, + "startLine": 20, "startColumn": 5, - "endLine": 9, + "endLine": 20, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'IGW' of type 'AWS::EC2::InternetGateway' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "IGW", + "entityType": "Resource", + "resourceType": "AWS::EC2::InternetGateway" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 29, + "startColumn": 5, + "endLine": 29, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/resources/dynamodb/attributes_transform_e3639.yaml": { - "filePath": "bad/resources/dynamodb/attributes_transform_e3639.yaml", + "bad/refs.yaml": { + "filePath": "bad/refs.yaml", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 2, "counts": { "fatal": 4, - "errors": 3, - "warnings": 0, - "informational": 12, + "errors": 0, + "warnings": 2, + "informational": 17, "debug": 0 }, "suppressed": 0, @@ -78585,265 +78223,351 @@ }, "diagnostics": [ { - "ruleId": "F1101", + "ruleId": "F1018", "severity": "FATAL", - "message": "Fn::Transform: Fn::Transform value must be an object", + "message": "Fn::Sub variable '${Package}' does not reference a valid resource, parameter, or pseudo-parameter", "source": "SCHEMA", "entity": { - "logicalId": "DDBTableTransformAttributeDefinitions", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.AttributeDefinitions.Fn::Transform", - "category": "Structure", - "startLine": 11, - "startColumn": 9, - "endLine": 11, - "endColumn": 22, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" + "propertyPath": "Properties.UserData", + "category": "Intrinsic Function", + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Sub variables must resolve", + "phase": "SCHEMA", + "context": { + "resolutionSource": "dynamic (Sub:yum install ${Package}\n)" + } }, { - "ruleId": "F1101", + "ruleId": "F1020", "severity": "FATAL", - "message": "Fn::Transform: Fn::Transform value must be an object", + "message": "'pIops' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'AnotherInstance', 'MyEC2Instance']", "source": "SCHEMA", "entity": { - "logicalId": "DDBTableTransformKeySchema", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.KeySchema.Fn::Transform", - "category": "Structure", - "startLine": 25, - "startColumn": 9, - "endLine": 25, - "endColumn": 22, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" + "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 15, + "startColumn": 13, + "endLine": 15, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" }, { - "ruleId": "F1101", + "ruleId": "F1020", "severity": "FATAL", - "message": "Fn::Transform: Fn::Transform value must be an object", + "message": "'pIops' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'AnotherInstance', 'MyEC2Instance']", "source": "SCHEMA", "entity": { - "logicalId": "DDBTableTransformBoth", + "logicalId": "AnotherInstance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.AttributeDefinitions.Fn::Transform", - "category": "Structure", - "startLine": 33, - "startColumn": 9, - "endLine": 33, - "endColumn": 22, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" + "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 34, + "startColumn": 13, + "endLine": 34, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" }, { - "ruleId": "F1101", + "ruleId": "F1020", "severity": "FATAL", - "message": "Fn::Transform: Fn::Transform value must be an object", + "message": "'httpdPackage' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'AnotherInstance', 'MyEC2Instance']", "source": "SCHEMA", "entity": { - "logicalId": "DDBTableTransformBoth", + "logicalId": "AnotherInstance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.KeySchema.Fn::Transform", - "category": "Structure", - "startLine": 38, - "startColumn": 9, - "endLine": 38, - "endColumn": 22, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" + "propertyPath": "Properties.UserData", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 40, + "startColumn": 7, + "endLine": 40, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA", + "context": { + "resolutionSource": "dynamic (Sub:yum install ${myPackage} ${Package})" + } }, { - "ruleId": "E3639", - "severity": "ERROR", - "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", - "source": "CFN_LINT", + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformAttributeDefinitions", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ProvisionedThroughput", - "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", - "category": "Resource", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", + "phase": "LINT" + }, + { + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", + "entity": { + "logicalId": "AnotherInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 26, + "startColumn": 7, + "endLine": 26, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, { - "ruleId": "E3639", - "severity": "ERROR", - "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 't1.micro' - consider upgrading", "source": "CFN_LINT", "entity": { - "logicalId": "DDBTableTransformKeySchema", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ProvisionedThroughput", - "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", - "category": "Resource", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 15, - "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", + "propertyPath": "Properties.InstanceType", + "suggestedFix": "Upgrade to a current generation instance type", + "category": "Best Practice", + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 19, + "ruleDescription": "Checks for legacy instance type generations", "phase": "LINT" }, { - "ruleId": "E3639", - "severity": "ERROR", - "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 't1.micro' - consider upgrading", "source": "CFN_LINT", "entity": { - "logicalId": "DDBTableTransformBoth", + "logicalId": "AnotherInstance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ProvisionedThroughput", - "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", - "category": "Resource", - "startLine": 31, - "startColumn": 5, - "endLine": 31, - "endColumn": 15, - "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", + "propertyPath": "Properties.InstanceType", + "suggestedFix": "Upgrade to a current generation instance type", + "category": "Best Practice", + "startLine": 27, + "startColumn": 7, + "endLine": 27, + "endColumn": 19, + "ruleDescription": "Checks for legacy instance type generations", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformAttributeDefinitions", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.ImageId", "category": "Best Practice", "startLine": 7, - "startColumn": 3, + "startColumn": 7, "endLine": 7, - "endColumn": 40, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformAttributeDefinitions", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 40, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformKeySchema", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.KeyName", "category": "Best Practice", - "startLine": 18, - "startColumn": 3, - "endLine": 18, - "endColumn": 29, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformKeySchema", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.BlockDeviceMappings", + "category": "Best Practice", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.NetworkInterfaces", "category": "Best Practice", "startLine": 18, - "startColumn": 3, + "startColumn": 7, "endLine": 18, - "endColumn": 29, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformBoth", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 29, - "startColumn": 3, - "endLine": 29, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Sub:yum install ${Package}\n)" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformBoth", + "logicalId": "AnotherInstance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 29, - "startColumn": 3, - "endLine": 29, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 26, + "startColumn": 7, + "endLine": 26, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformAttributeDefinitions", + "logicalId": "AnotherInstance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 15, + "startLine": 27, "startColumn": 7, - "endLine": 15, - "endColumn": 16, + "endLine": 27, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -78853,19 +78577,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformKeySchema", + "logicalId": "AnotherInstance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.KeyName", "category": "Best Practice", - "startLine": 24, + "startLine": 28, "startColumn": 7, - "endLine": 24, - "endColumn": 16, + "endLine": 28, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AnotherInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.BlockDeviceMappings", + "category": "Best Practice", + "startLine": 29, + "startColumn": 7, + "endLine": 29, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -78875,41 +78623,75 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformBoth", + "logicalId": "AnotherInstance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.NetworkInterfaces", "category": "Best Practice", "startLine": 37, "startColumn": 7, "endLine": 37, - "endColumn": 16, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AnotherInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 40, + "startColumn": 7, + "endLine": 40, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Sub:yum install ${myPackage} ${Package})" } }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DDBTableTransformAttributeDefinitions' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'MyEC2Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformAttributeDefinitions", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, + "startLine": 6, "startColumn": 5, - "endLine": 9, + "endLine": 6, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -78917,55 +78699,216 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DDBTableTransformKeySchema' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'AnotherInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformKeySchema", + "logicalId": "AnotherInstance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 20, + "startLine": 25, "startColumn": 5, - "endLine": 20, + "endLine": 25, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/resource_policy_no_statement.yaml": { + "filePath": "bad/resource_policy_no_statement.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 3, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3512", + "severity": "ERROR", + "message": "Resource-based policy must have a Statement property", + "source": "CFN_LINT", + "entity": { + "logicalId": "Policy", + "entityType": "Resource", + "resourceType": "AWS::KMS::Key" + }, + "propertyPath": "Properties.KeyPolicy", + "suggestedFix": "Add a Statement array to the policy document", + "category": "Resource", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 16, + "ruleDescription": "Validate resource based IAM policies", + "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": "Policy", + "entityType": "Resource", + "resourceType": "AWS::KMS::Key" + }, + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "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": "Policy", + "entityType": "Resource", + "resourceType": "AWS::KMS::Key" + }, + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DDBTableTransformBoth' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'Policy' of type 'AWS::KMS::Key' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformBoth", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "logicalId": "Policy", + "entityType": "Resource", + "resourceType": "AWS::KMS::Key" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/resources/backup/test_backup_plan_lifecycle_rule.yml": { + "filePath": "bad/resources/backup/test_backup_plan_lifecycle_rule.yml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "bad/resources/cloudformation/stack_nested.yaml": { + "filePath": "bad/resources/cloudformation/stack_nested.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 2, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "startLine": 6, + "startColumn": 1, + "endLine": 6, + "endColumn": 10, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'One' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "One", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/One", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 6, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'Two' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "Two", + "entityType": "Parameter" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Parameters/Two", "category": "Best Practice", - "startLine": 31, - "startColumn": 5, - "endLine": 31, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 6, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" } ] }, - "bad/resources/dynamodb/conditional_scenarios.yaml": { - "filePath": "bad/resources/dynamodb/conditional_scenarios.yaml", + "bad/resources/cloudformation/stacks.yaml": { + "filePath": "bad/resources/cloudformation/stacks.yaml", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 2, "counts": { "fatal": 0, - "errors": 3, - "warnings": 0, - "informational": 11, + "errors": 0, + "warnings": 2, + "informational": 6, "debug": 0 }, "suppressed": 0, @@ -78974,97 +78917,41 @@ }, "diagnostics": [ { - "ruleId": "E3039", - "severity": "ERROR", - "message": "AttributeDefinitions does not match KeySchema attributes. unused definitions: [gsi_key]", - "source": "CFN_LINT", - "entity": { - "logicalId": "ConditionalGSI", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties", - "category": "Resource", - "startLine": 22, - "startColumn": 5, - "endLine": 22, - "endColumn": 15, - "ruleDescription": "AttributeDefinitions / KeySchemas mismatch", - "phase": "LINT" - }, - { - "ruleId": "E3039", - "severity": "ERROR", - "message": "AttributeDefinitions does not match KeySchema attributes. unused definitions: [lsi_key]", - "source": "CFN_LINT", - "entity": { - "logicalId": "ConditionalLSI", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties", - "category": "Resource", - "startLine": 37, - "startColumn": 5, - "endLine": 37, - "endColumn": 15, - "ruleDescription": "AttributeDefinitions / KeySchemas mismatch", - "phase": "LINT" - }, - { - "ruleId": "E3639", - "severity": "ERROR", - "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", - "source": "CFN_LINT", - "entity": { - "logicalId": "MissingDefaultThroughput", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.ProvisionedThroughput", - "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", - "category": "Resource", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", - "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)", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", "source": "CFN_LINT", "entity": { - "logicalId": "MissingDefaultThroughput", + "logicalId": "StackNormal", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::CloudFormation::Stack" }, + "propertyPath": "Properties.TemplateURL", "category": "Best Practice", - "startLine": 10, - "startColumn": 3, - "endLine": 10, - "endColumn": 27, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 18, + "ruleDescription": "Warn when properties are configured to only work with the package command", "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)", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", "source": "CFN_LINT", "entity": { - "logicalId": "MissingDefaultThroughput", + "logicalId": "Stack3", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::CloudFormation::Stack" }, + "propertyPath": "Properties.TemplateURL", "category": "Best Practice", - "startLine": 10, - "startColumn": 3, - "endLine": 10, - "endColumn": 27, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 18, + "ruleDescription": "Warn when properties are configured to only work with the package command", "phase": "LINT" }, { @@ -79073,15 +78960,15 @@ "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": "ConditionalGSI", + "logicalId": "StackNormal", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::CloudFormation::Stack" }, "category": "Best Practice", - "startLine": 20, + "startLine": 6, "startColumn": 3, - "endLine": 20, - "endColumn": 17, + "endLine": 6, + "endColumn": 14, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -79091,15 +78978,15 @@ "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": "ConditionalGSI", + "logicalId": "StackNormal", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::CloudFormation::Stack" }, "category": "Best Practice", - "startLine": 20, + "startLine": 6, "startColumn": 3, - "endLine": 20, - "endColumn": 17, + "endLine": 6, + "endColumn": 14, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -79109,15 +78996,15 @@ "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": "ConditionalLSI", + "logicalId": "Stack3", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::CloudFormation::Stack" }, "category": "Best Practice", - "startLine": 35, + "startLine": 14, "startColumn": 3, - "endLine": 35, - "endColumn": 17, + "endLine": 14, + "endColumn": 9, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -79127,98 +79014,34 @@ "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": "ConditionalLSI", + "logicalId": "Stack3", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::CloudFormation::Stack" }, "category": "Best Practice", - "startLine": 35, + "startLine": 14, "startColumn": 3, - "endLine": 35, - "endColumn": 17, + "endLine": 14, + "endColumn": 9, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ConditionalGSI", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.KeySchema", - "category": "Best Practice", - "startLine": 27, - "startColumn": 7, - "endLine": 27, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ConditionalLSI", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.KeySchema", - "category": "Best Practice", - "startLine": 43, - "startColumn": 7, - "endLine": 43, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MissingDefaultThroughput' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MissingDefaultThroughput", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ConditionalGSI' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'StackNormal' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConditionalGSI", + "logicalId": "StackNormal", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::CloudFormation::Stack" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 22, + "startLine": 8, "startColumn": 5, - "endLine": 22, + "endLine": 8, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -79226,35 +79049,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ConditionalLSI' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'Stack3' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConditionalLSI", + "logicalId": "Stack3", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::CloudFormation::Stack" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 37, + "startLine": 16, "startColumn": 5, - "endLine": 37, + "endLine": 16, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/resources/dynamodb/provisioned_throughput_e3639.yaml": { - "filePath": "bad/resources/dynamodb/provisioned_throughput_e3639.yaml", + "bad/resources/codepipeline/stages_second_stage.yaml": { + "filePath": "bad/resources/codepipeline/stages_second_stage.yaml", "status": "OK", "metadata": { - "resourcesScanned": 7, + "resourcesScanned": 1, "counts": { - "fatal": 1, - "errors": 7, - "warnings": 0, - "informational": 31, + "fatal": 2, + "errors": 1, + "warnings": 1, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -79263,307 +79086,369 @@ }, "diagnostics": [ { - "ruleId": "F3003", + "ruleId": "F1020", "severity": "FATAL", - "message": "'ProvisionedThroughput' is a required property (from extension)", + "message": "'Github' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'TestPipeline']", "source": "SCHEMA", "entity": { - "logicalId": "ExplicitProvisioned", + "logicalId": "TestPipeline", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties", - "suggestedFix": "Add 'ProvisionedThroughput'", - "category": "Schema", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Required property missing", + "propertyPath": "Properties.Stages.1.Actions.0.Name", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 32, + "startColumn": 15, + "endLine": 32, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", + "ruleDescription": "Ref/GetAtt target must exist", "phase": "SCHEMA" }, { - "ruleId": "E3639", - "severity": "ERROR", - "message": "ProvisionedThroughput is required when BillingMode is 'PROVISIONED'", - "source": "CFN_LINT", + "ruleId": "F3031", + "severity": "FATAL", + "message": "'arn:aws:iam:::role/AWSCodePipelineRole' does not match pattern 'arn:aws(-[\\w]+)*:iam::[0-9]{12}:role/.*'", + "source": "SCHEMA", "entity": { - "logicalId": "ExplicitProvisioned", + "logicalId": "TestPipeline", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties.ProvisionedThroughput", - "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", - "category": "Resource", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", - "phase": "LINT" + "propertyPath": "Properties.RoleArn", + "category": "Schema", + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", + "ruleDescription": "Value does not match pattern", + "phase": "SCHEMA", + "context": { + "actualValue": "arn:aws:iam:::role/AWSCodePipelineRole", + "expectedConstraint": "arn:aws(-[\\w]+)*:iam::[0-9]{12}:role/.*" + } }, { - "ruleId": "E3639", + "ruleId": "E1156", "severity": "ERROR", - "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", + "message": "'arn:aws:iam:::role/AWSCodePipelineRole' does not match format 'AWS::IAM::Role.Arn'", "source": "CFN_LINT", "entity": { - "logicalId": "DefaultProvisioned", + "logicalId": "TestPipeline", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties.ProvisionedThroughput", - "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", - "category": "Resource", - "startLine": 23, - "startColumn": 5, - "endLine": 23, - "endColumn": 15, - "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", - "phase": "LINT" + "propertyPath": "Properties.RoleArn", + "category": "Intrinsic Function", + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", + "ruleDescription": "Validate IAM role ARN format", + "phase": "SCHEMA", + "context": { + "actualValue": "arn:aws:iam:::role/AWSCodePipelineRole" + } }, { - "ruleId": "E3639", - "severity": "ERROR", - "message": "ProvisionedThroughput is required when BillingMode is 'PROVISIONED'", - "source": "CFN_LINT", + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", "entity": { - "logicalId": "NullThroughput", + "logicalId": "TestPipeline", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties.ProvisionedThroughput", - "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", - "category": "Resource", - "startLine": 44, + "propertyPath": "Properties.RoleArn", + "category": "Best Practice", + "startLine": 12, "startColumn": 7, - "endLine": 44, - "endColumn": 28, - "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", + "endLine": 12, + "endColumn": 14, + "ruleDescription": "Hardcoded ARN property", "phase": "LINT" }, { - "ruleId": "E3639", - "severity": "ERROR", - "message": "ProvisionedThroughput is required when BillingMode is 'PROVISIONED'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ExplicitValueThenRemoved", + "logicalId": "TestPipeline", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties.ProvisionedThroughput", - "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", - "category": "Resource", - "startLine": 54, + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 8, "startColumn": 7, - "endLine": 54, - "endColumn": 28, - "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", - "phase": "LINT" + "endLine": 8, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3639", - "severity": "ERROR", - "message": "ProvisionedThroughput is required when BillingMode is 'PROVISIONED'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TestPipeline' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ExplicitRemovedThenValue", + "logicalId": "TestPipeline", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties.ProvisionedThroughput", - "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", - "category": "Resource", - "startLine": 65, - "startColumn": 7, - "endLine": 65, - "endColumn": 28, - "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/resources/creation_policy_unsupported_e3055.yaml": { + "filePath": "bad/resources/creation_policy_unsupported_e3055.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "E3639", + "ruleId": "E3055", "severity": "ERROR", - "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", + "message": "CreationPolicy is not supported on resource type 'AWS::S3::Bucket'", "source": "CFN_LINT", "entity": { - "logicalId": "DefaultValueThenRemoved", + "logicalId": "MyBucket", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ProvisionedThroughput", - "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", + "propertyPath": "CreationPolicy", + "suggestedFix": "Remove CreationPolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::CloudFormation::WaitCondition, AWS::EC2::Instance", "category": "Resource", - "startLine": 75, - "startColumn": 7, - "endLine": 75, - "endColumn": 28, - "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 19, + "ruleDescription": "Check CreationPolicy values for Resources", "phase": "LINT" }, { - "ruleId": "E3639", - "severity": "ERROR", - "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DefaultRemovedThenValue", + "logicalId": "MyBucket", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ProvisionedThroughput", - "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", - "category": "Resource", - "startLine": 85, + "propertyPath": "Properties.BucketName", + "category": "Best Practice", + "startLine": 10, "startColumn": 7, - "endLine": 85, - "endColumn": 28, - "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", - "phase": "LINT" + "endLine": 10, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'MyBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ExplicitProvisioned", + "logicalId": "MyBucket", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::S3::Bucket" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 8, - "startColumn": 3, - "endLine": 8, - "endColumn": 22, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/resources/dynamodb/attributes_transform_e3639.yaml": { + "filePath": "bad/resources/dynamodb/attributes_transform_e3639.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 4, + "errors": 3, + "warnings": 0, + "informational": 12, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "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", + "ruleId": "F1101", + "severity": "FATAL", + "message": "Fn::Transform: Fn::Transform value must be an object", + "source": "SCHEMA", "entity": { - "logicalId": "ExplicitProvisioned", + "logicalId": "DDBTableTransformAttributeDefinitions", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, - "category": "Best Practice", - "startLine": 8, - "startColumn": 3, - "endLine": 8, + "propertyPath": "Properties.AttributeDefinitions.Fn::Transform", + "category": "Structure", + "startLine": 11, + "startColumn": 9, + "endLine": 11, "endColumn": 22, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" }, { - "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", + "ruleId": "F1101", + "severity": "FATAL", + "message": "Fn::Transform: Fn::Transform value must be an object", + "source": "SCHEMA", "entity": { - "logicalId": "DefaultProvisioned", + "logicalId": "DDBTableTransformKeySchema", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, - "category": "Best Practice", - "startLine": 21, - "startColumn": 3, - "endLine": 21, - "endColumn": 21, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Properties.KeySchema.Fn::Transform", + "category": "Structure", + "startLine": 25, + "startColumn": 9, + "endLine": 25, + "endColumn": 22, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" }, { - "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", + "ruleId": "F1101", + "severity": "FATAL", + "message": "Fn::Transform: Fn::Transform value must be an object", + "source": "SCHEMA", "entity": { - "logicalId": "DefaultProvisioned", + "logicalId": "DDBTableTransformBoth", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, - "category": "Best Practice", - "startLine": 21, - "startColumn": 3, - "endLine": 21, - "endColumn": 21, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Properties.AttributeDefinitions.Fn::Transform", + "category": "Structure", + "startLine": 33, + "startColumn": 9, + "endLine": 33, + "endColumn": 22, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" }, { - "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", + "ruleId": "F1101", + "severity": "FATAL", + "message": "Fn::Transform: Fn::Transform value must be an object", + "source": "SCHEMA", "entity": { - "logicalId": "NullThroughput", + "logicalId": "DDBTableTransformBoth", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, - "category": "Best Practice", - "startLine": 33, - "startColumn": 3, - "endLine": 33, - "endColumn": 17, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Properties.KeySchema.Fn::Transform", + "category": "Structure", + "startLine": 38, + "startColumn": 9, + "endLine": 38, + "endColumn": 22, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" }, { - "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)", + "ruleId": "E3639", + "severity": "ERROR", + "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", "source": "CFN_LINT", "entity": { - "logicalId": "NullThroughput", + "logicalId": "DDBTableTransformAttributeDefinitions", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, - "category": "Best Practice", - "startLine": 33, - "startColumn": 3, - "endLine": 33, - "endColumn": 17, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.ProvisionedThroughput", + "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", + "category": "Resource", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", "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)", + "ruleId": "E3639", + "severity": "ERROR", + "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", "source": "CFN_LINT", "entity": { - "logicalId": "ExplicitValueThenRemoved", + "logicalId": "DDBTableTransformKeySchema", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, - "category": "Best Practice", - "startLine": 48, - "startColumn": 3, - "endLine": 48, - "endColumn": 27, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.ProvisionedThroughput", + "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", + "category": "Resource", + "startLine": 20, + "startColumn": 5, + "endLine": 20, + "endColumn": 15, + "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", "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)", + "ruleId": "E3639", + "severity": "ERROR", + "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", "source": "CFN_LINT", "entity": { - "logicalId": "ExplicitValueThenRemoved", + "logicalId": "DDBTableTransformBoth", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, - "category": "Best Practice", - "startLine": 48, - "startColumn": 3, - "endLine": 48, - "endColumn": 27, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.ProvisionedThroughput", + "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", + "category": "Resource", + "startLine": 31, + "startColumn": 5, + "endLine": 31, + "endColumn": 15, + "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", "phase": "LINT" }, { @@ -79572,15 +79457,15 @@ "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": "ExplicitRemovedThenValue", + "logicalId": "DDBTableTransformAttributeDefinitions", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, "category": "Best Practice", - "startLine": 59, + "startLine": 7, "startColumn": 3, - "endLine": 59, - "endColumn": 27, + "endLine": 7, + "endColumn": 40, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -79590,15 +79475,15 @@ "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": "ExplicitRemovedThenValue", + "logicalId": "DDBTableTransformAttributeDefinitions", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, "category": "Best Practice", - "startLine": 59, + "startLine": 7, "startColumn": 3, - "endLine": 59, - "endColumn": 27, + "endLine": 7, + "endColumn": 40, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -79608,15 +79493,15 @@ "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": "DefaultValueThenRemoved", + "logicalId": "DDBTableTransformKeySchema", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, "category": "Best Practice", - "startLine": 70, + "startLine": 18, "startColumn": 3, - "endLine": 70, - "endColumn": 26, + "endLine": 18, + "endColumn": 29, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -79626,15 +79511,15 @@ "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": "DefaultValueThenRemoved", + "logicalId": "DDBTableTransformKeySchema", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, "category": "Best Practice", - "startLine": 70, + "startLine": 18, "startColumn": 3, - "endLine": 70, - "endColumn": 26, + "endLine": 18, + "endColumn": 29, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -79644,15 +79529,15 @@ "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": "DefaultRemovedThenValue", + "logicalId": "DDBTableTransformBoth", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, "category": "Best Practice", - "startLine": 80, + "startLine": 29, "startColumn": 3, - "endLine": 80, - "endColumn": 26, + "endLine": 29, + "endColumn": 24, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -79662,187 +79547,33 @@ "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": "DefaultRemovedThenValue", + "logicalId": "DDBTableTransformBoth", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, "category": "Best Practice", - "startLine": 80, + "startLine": 29, "startColumn": 3, - "endLine": 80, - "endColumn": 26, + "endLine": 29, + "endColumn": 24, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ExplicitProvisioned", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.TableName", - "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ExplicitProvisioned", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.KeySchema", - "category": "Best Practice", - "startLine": 13, - "startColumn": 7, - "endLine": 13, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DefaultProvisioned", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.TableName", - "category": "Best Practice", - "startLine": 24, - "startColumn": 7, - "endLine": 24, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DefaultProvisioned", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.KeySchema", - "category": "Best Practice", - "startLine": 25, - "startColumn": 7, - "endLine": 25, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "NullThroughput", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.TableName", - "category": "Best Practice", - "startLine": 36, - "startColumn": 7, - "endLine": 36, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "NullThroughput", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.KeySchema", - "category": "Best Practice", - "startLine": 38, - "startColumn": 7, - "endLine": 38, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ExplicitValueThenRemoved", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.KeySchema", - "category": "Best Practice", - "startLine": 53, - "startColumn": 7, - "endLine": 53, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ExplicitRemovedThenValue", + "logicalId": "DDBTableTransformAttributeDefinitions", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 64, + "startLine": 15, "startColumn": 7, - "endLine": 64, + "endLine": 15, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -79856,15 +79587,15 @@ "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DefaultValueThenRemoved", + "logicalId": "DDBTableTransformKeySchema", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 74, + "startLine": 24, "startColumn": 7, - "endLine": 74, + "endLine": 24, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -79878,118 +79609,38 @@ "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DefaultRemovedThenValue", + "logicalId": "DDBTableTransformBoth", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 84, + "startLine": 37, "startColumn": 7, - "endLine": 84, + "endLine": 37, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ExplicitProvisioned' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ExplicitProvisioned", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DefaultProvisioned' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "DefaultProvisioned", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 23, - "startColumn": 5, - "endLine": 23, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'NullThroughput' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "NullThroughput", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 35, - "startColumn": 5, - "endLine": 35, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ExplicitValueThenRemoved' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ExplicitValueThenRemoved", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 50, - "startColumn": 5, - "endLine": 50, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ExplicitRemovedThenValue' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'DDBTableTransformAttributeDefinitions' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ExplicitRemovedThenValue", + "logicalId": "DDBTableTransformAttributeDefinitions", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 61, + "startLine": 9, "startColumn": 5, - "endLine": 61, + "endLine": 9, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -79997,19 +79648,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DefaultValueThenRemoved' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'DDBTableTransformKeySchema' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DefaultValueThenRemoved", + "logicalId": "DDBTableTransformKeySchema", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 72, + "startLine": 20, "startColumn": 5, - "endLine": 72, + "endLine": 20, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -80017,35 +79668,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DefaultRemovedThenValue' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'DDBTableTransformBoth' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DefaultRemovedThenValue", + "logicalId": "DDBTableTransformBoth", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 82, + "startLine": 31, "startColumn": 5, - "endLine": 82, + "endLine": 31, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/resources/dynamodb/undefined_attribute_definition.yaml": { - "filePath": "bad/resources/dynamodb/undefined_attribute_definition.yaml", + "bad/resources/dynamodb/conditional_scenarios.yaml": { + "filePath": "bad/resources/dynamodb/conditional_scenarios.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 3, "counts": { "fatal": 0, - "errors": 1, + "errors": 3, "warnings": 0, - "informational": 4, + "informational": 11, "debug": 0 }, "suppressed": 0, @@ -80056,136 +79707,131 @@ { "ruleId": "E3039", "severity": "ERROR", - "message": "AttributeDefinitions does not match KeySchema attributes. missing definitions: [Artist]", + "message": "AttributeDefinitions does not match KeySchema attributes. unused definitions: [gsi_key]", "source": "CFN_LINT", "entity": { - "logicalId": "dynamoDBTable", + "logicalId": "ConditionalGSI", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties", "category": "Resource", - "startLine": 6, + "startLine": 22, "startColumn": 5, - "endLine": 6, + "endLine": 22, "endColumn": 15, "ruleDescription": "AttributeDefinitions / KeySchemas mismatch", "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)", + "ruleId": "E3039", + "severity": "ERROR", + "message": "AttributeDefinitions does not match KeySchema attributes. unused definitions: [lsi_key]", "source": "CFN_LINT", "entity": { - "logicalId": "dynamoDBTable", + "logicalId": "ConditionalLSI", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, - "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 16, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties", + "category": "Resource", + "startLine": 37, + "startColumn": 5, + "endLine": 37, + "endColumn": 15, + "ruleDescription": "AttributeDefinitions / KeySchemas mismatch", + "phase": "LINT" + }, + { + "ruleId": "E3639", + "severity": "ERROR", + "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", + "source": "CFN_LINT", + "entity": { + "logicalId": "MissingDefaultThroughput", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.ProvisionedThroughput", + "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", + "category": "Resource", + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", "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)", + "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": "dynamoDBTable", + "logicalId": "MissingDefaultThroughput", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, "category": "Best Practice", - "startLine": 4, + "startLine": 10, "startColumn": 3, - "endLine": 4, - "endColumn": 16, + "endLine": 10, + "endColumn": 27, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "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": "dynamoDBTable", + "logicalId": "MissingDefaultThroughput", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.KeySchema", "category": "Best Practice", "startLine": 10, - "startColumn": 7, + "startColumn": 3, "endLine": 10, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endColumn": 27, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'dynamoDBTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", + "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": "dynamoDBTable", + "logicalId": "ConditionalGSI", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 20, + "startColumn": 3, + "endLine": 20, + "endColumn": 17, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "bad/resources/dynamodb/unused_attribute_definition_1.yaml": { - "filePath": "bad/resources/dynamodb/unused_attribute_definition_1.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 4, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3039", - "severity": "ERROR", - "message": "AttributeDefinitions does not match KeySchema attributes. unused definitions: [Sales]", + "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": "dynamoDBTable", + "logicalId": "ConditionalGSI", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties", - "category": "Resource", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "AttributeDefinitions / KeySchemas mismatch", + "category": "Best Practice", + "startLine": 20, + "startColumn": 3, + "endLine": 20, + "endColumn": 17, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { @@ -80194,15 +79840,15 @@ "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": "dynamoDBTable", + "logicalId": "ConditionalLSI", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, "category": "Best Practice", - "startLine": 4, + "startLine": 35, "startColumn": 3, - "endLine": 4, - "endColumn": 16, + "endLine": 35, + "endColumn": 17, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -80212,15 +79858,15 @@ "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": "dynamoDBTable", + "logicalId": "ConditionalLSI", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, "category": "Best Practice", - "startLine": 4, + "startLine": 35, "startColumn": 3, - "endLine": 4, - "endColumn": 16, + "endLine": 35, + "endColumn": 17, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -80230,15 +79876,15 @@ "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "dynamoDBTable", + "logicalId": "ConditionalGSI", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 14, + "startLine": 27, "startColumn": 7, - "endLine": 14, + "endLine": 27, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -80247,153 +79893,99 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'dynamoDBTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "dynamoDBTable", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/resources/dynamodb/unused_attribute_definition_2.yaml": { - "filePath": "bad/resources/dynamodb/unused_attribute_definition_2.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 4, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3039", - "severity": "ERROR", - "message": "AttributeDefinitions does not match KeySchema attributes. unused definitions: [Sales]", - "source": "CFN_LINT", - "entity": { - "logicalId": "dynamoDBTable", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties", - "category": "Resource", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "AttributeDefinitions / KeySchemas mismatch", - "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": "dynamoDBTable", + "logicalId": "ConditionalLSI", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, + "startLine": 43, + "startColumn": 7, + "endLine": 43, "endColumn": 16, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'MissingDefaultThroughput' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "dynamoDBTable", + "logicalId": "MissingDefaultThroughput", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 16, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'ConditionalGSI' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "dynamoDBTable", + "logicalId": "ConditionalGSI", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 22, + "startColumn": 5, + "endLine": 22, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'dynamoDBTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'ConditionalLSI' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "dynamoDBTable", + "logicalId": "ConditionalLSI", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, + "startLine": 37, "startColumn": 5, - "endLine": 6, + "endLine": 37, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/resources/ecs/fargate_conditional_properties.yaml": { - "filePath": "bad/resources/ecs/fargate_conditional_properties.yaml", + "bad/resources/dynamodb/provisioned_throughput_e3639.yaml": { + "filePath": "bad/resources/dynamodb/provisioned_throughput_e3639.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 7, "counts": { - "fatal": 0, - "errors": 2, + "fatal": 1, + "errors": 7, "warnings": 0, - "informational": 2, + "informational": 31, "debug": 0 }, "suppressed": 0, @@ -80402,475 +79994,433 @@ }, "diagnostics": [ { - "ruleId": "E3048", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'ProvisionedThroughput' is a required property (from extension)", + "source": "SCHEMA", + "entity": { + "logicalId": "ExplicitProvisioned", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties", + "suggestedFix": "Add 'ProvisionedThroughput'", + "category": "Schema", + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "E3639", "severity": "ERROR", - "message": "Fargate does not support PlacementConstraints", + "message": "ProvisionedThroughput is required when BillingMode is 'PROVISIONED'", "source": "CFN_LINT", "entity": { - "logicalId": "PlacementInFargateBranch", + "logicalId": "ExplicitProvisioned", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.PlacementConstraints", - "suggestedFix": "Remove PlacementConstraints for Fargate tasks", + "propertyPath": "Properties.ProvisionedThroughput", + "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", "category": "Resource", - "startLine": 15, + "startLine": 10, "startColumn": 5, - "endLine": 15, + "endLine": 10, "endColumn": 15, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", "phase": "LINT" }, { - "ruleId": "E3048", + "ruleId": "E3639", "severity": "ERROR", - "message": "Fargate does not support log driver 'syslog'. Supported drivers: ['awslogs', 'splunk', 'awsfirelens']", + "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", "source": "CFN_LINT", "entity": { - "logicalId": "InvalidDriverInFargateBranch", + "logicalId": "DefaultProvisioned", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ContainerDefinitions.0.LogConfiguration.LogDriver", - "suggestedFix": "Use 'awslogs', 'splunk', or 'awsfirelens'", + "propertyPath": "Properties.ProvisionedThroughput", + "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", "category": "Resource", - "startLine": 36, + "startLine": 23, "startColumn": 5, - "endLine": 36, + "endLine": 23, "endColumn": 15, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'PlacementInFargateBranch' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3639", + "severity": "ERROR", + "message": "ProvisionedThroughput is required when BillingMode is 'PROVISIONED'", + "source": "CFN_LINT", "entity": { - "logicalId": "PlacementInFargateBranch", + "logicalId": "NullThroughput", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 15, - "startColumn": 5, - "endLine": 15, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.ProvisionedThroughput", + "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", + "category": "Resource", + "startLine": 44, + "startColumn": 7, + "endLine": 44, + "endColumn": 28, + "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'InvalidDriverInFargateBranch' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3639", + "severity": "ERROR", + "message": "ProvisionedThroughput is required when BillingMode is 'PROVISIONED'", + "source": "CFN_LINT", "entity": { - "logicalId": "InvalidDriverInFargateBranch", + "logicalId": "ExplicitValueThenRemoved", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 36, - "startColumn": 5, - "endLine": 36, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.ProvisionedThroughput", + "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", + "category": "Resource", + "startLine": 54, + "startColumn": 7, + "endLine": 54, + "endColumn": 28, + "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", "phase": "LINT" - } - ] - }, - "bad/resources/ecs/fargate_numeric_spellings_e3047.yaml": { - "filePath": "bad/resources/ecs/fargate_numeric_spellings_e3047.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 6, - "counts": { - "fatal": 0, - "errors": 9, - "warnings": 0, - "informational": 36, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3047", + "ruleId": "E3639", + "severity": "ERROR", + "message": "ProvisionedThroughput is required when BillingMode is 'PROVISIONED'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ExplicitRemovedThenValue", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.ProvisionedThroughput", + "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", + "category": "Resource", + "startLine": 65, + "startColumn": 7, + "endLine": 65, + "endColumn": 28, + "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", + "phase": "LINT" + }, + { + "ruleId": "E3639", + "severity": "ERROR", + "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", + "source": "CFN_LINT", + "entity": { + "logicalId": "DefaultValueThenRemoved", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.ProvisionedThroughput", + "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", + "category": "Resource", + "startLine": 75, + "startColumn": 7, + "endLine": 75, + "endColumn": 28, + "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", + "phase": "LINT" + }, + { + "ruleId": "E3639", "severity": "ERROR", - "message": "Cpu '2e0 vCPU' is not compatible with Memory '4 GB' for Fargate", + "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", "source": "CFN_LINT", "entity": { - "logicalId": "ScientificCpuNotation", + "logicalId": "DefaultRemovedThenValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "propertyPath": "Properties.ProvisionedThroughput", + "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", "category": "Resource", - "startLine": 8, + "startLine": 85, "startColumn": 7, - "endLine": 8, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", - "context": { - "extra": { - "cpu": "2e0 vCPU", - "memory": "4 GB" - } - } + "endLine": 85, + "endColumn": 28, + "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", + "phase": "LINT" }, { - "ruleId": "E3047", - "severity": "ERROR", - "message": "Cpu '2 vCPU' is not compatible with Memory '4e0 GB' for Fargate", + "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": "ScientificMemoryNotation", + "logicalId": "ExplicitProvisioned", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", - "category": "Resource", - "startLine": 20, - "startColumn": 7, - "endLine": 20, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", - "context": { - "extra": { - "cpu": "2 vCPU", - "memory": "4e0 GB" - } - } + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 22, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "E3047", - "severity": "ERROR", - "message": "Cpu ' 2 vCPU' is not compatible with Memory '4 GB' for Fargate", + "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": "LeadingCpuWhitespace", + "logicalId": "ExplicitProvisioned", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", - "category": "Resource", - "startLine": 32, - "startColumn": 7, - "endLine": 32, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", - "context": { - "extra": { - "cpu": " 2 vCPU", - "memory": "4 GB" - } - } + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 22, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "E3047", - "severity": "ERROR", - "message": "Cpu '2 vCPU ' is not compatible with Memory '4 GB' for Fargate", + "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": "TrailingCpuWhitespace", + "logicalId": "DefaultProvisioned", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", - "category": "Resource", - "startLine": 44, - "startColumn": 7, - "endLine": 44, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", - "context": { - "extra": { - "cpu": "2 vCPU ", - "memory": "4 GB" - } - } + "category": "Best Practice", + "startLine": 21, + "startColumn": 3, + "endLine": 21, + "endColumn": 21, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "E3047", - "severity": "ERROR", - "message": "Cpu '2 vCPU' is not compatible with Memory ' 4 GB' for Fargate", + "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": "LeadingMemoryWhitespace", + "logicalId": "DefaultProvisioned", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", - "category": "Resource", - "startLine": 56, - "startColumn": 7, - "endLine": 56, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", - "context": { - "extra": { - "cpu": "2 vCPU", - "memory": " 4 GB" - } - } + "category": "Best Practice", + "startLine": 21, + "startColumn": 3, + "endLine": 21, + "endColumn": 21, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "E3047", - "severity": "ERROR", - "message": "Cpu '2 vCPU' is not compatible with Memory '4 GB ' for Fargate", + "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": "TrailingMemoryWhitespace", + "logicalId": "NullThroughput", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", - "category": "Resource", - "startLine": 68, - "startColumn": 7, - "endLine": 68, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", - "context": { - "extra": { - "cpu": "2 vCPU", - "memory": "4 GB " - } - } + "category": "Best Practice", + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 17, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate Cpu value '2e0 vCPU' is not valid. Valid sizes are ['256', '512', '1024', '2048', '4096', '8192', '16384', '32768'] CPU units or ['0.25', '0.5', '1', '2', '4', '8', '16', '32'] vCPU.", + "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": "ScientificCpuNotation", + "logicalId": "NullThroughput", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate Cpu size in CPU units or vCPU", - "category": "Resource", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "category": "Best Practice", + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 17, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate Cpu value ' 2 vCPU' is not valid. Valid sizes are ['256', '512', '1024', '2048', '4096', '8192', '16384', '32768'] CPU units or ['0.25', '0.5', '1', '2', '4', '8', '16', '32'] vCPU.", + "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": "LeadingCpuWhitespace", + "logicalId": "ExplicitValueThenRemoved", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate Cpu size in CPU units or vCPU", - "category": "Resource", - "startLine": 32, - "startColumn": 7, - "endLine": 32, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "category": "Best Practice", + "startLine": 48, + "startColumn": 3, + "endLine": 48, + "endColumn": 27, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate Cpu value '2 vCPU ' is not valid. Valid sizes are ['256', '512', '1024', '2048', '4096', '8192', '16384', '32768'] CPU units or ['0.25', '0.5', '1', '2', '4', '8', '16', '32'] vCPU.", + "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": "TrailingCpuWhitespace", + "logicalId": "ExplicitValueThenRemoved", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate Cpu size in CPU units or vCPU", - "category": "Resource", - "startLine": 44, - "startColumn": 7, - "endLine": 44, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "category": "Best Practice", + "startLine": 48, + "startColumn": 3, + "endLine": 48, + "endColumn": 27, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "ScientificCpuNotation", + "logicalId": "ExplicitRemovedThenValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 59, + "startColumn": 3, + "endLine": 59, + "endColumn": 27, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "ScientificCpuNotation", + "logicalId": "ExplicitRemovedThenValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 59, + "startColumn": 3, + "endLine": 59, + "endColumn": 27, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "ScientificCpuNotation", + "logicalId": "DefaultValueThenRemoved", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 70, + "startColumn": 3, + "endLine": 70, + "endColumn": 26, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "ScientificCpuNotation", + "logicalId": "DefaultValueThenRemoved", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 70, + "startColumn": 3, + "endLine": 70, + "endColumn": 26, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "ScientificCpuNotation", + "logicalId": "DefaultRemovedThenValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 80, + "startColumn": 3, + "endLine": 80, + "endColumn": 26, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "ScientificMemoryNotation", + "logicalId": "DefaultRemovedThenValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 18, - "startColumn": 7, - "endLine": 18, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 80, + "startColumn": 3, + "endLine": 80, + "endColumn": 26, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ScientificMemoryNotation", + "logicalId": "ExplicitProvisioned", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 19, + "startLine": 11, "startColumn": 7, - "endLine": 19, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 11, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -80880,43 +80430,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ScientificMemoryNotation", + "logicalId": "ExplicitProvisioned", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 20, + "startLine": 13, "startColumn": 7, - "endLine": 20, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 13, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ScientificMemoryNotation", + "logicalId": "DefaultProvisioned", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 21, + "startLine": 24, "startColumn": 7, - "endLine": 21, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 24, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -80926,43 +80474,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ScientificMemoryNotation", + "logicalId": "DefaultProvisioned", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 22, + "startLine": 25, "startColumn": 7, - "endLine": 22, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 25, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LeadingCpuWhitespace", + "logicalId": "NullThroughput", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 30, + "startLine": 36, "startColumn": 7, - "endLine": 30, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 36, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -80972,536 +80518,676 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LeadingCpuWhitespace", + "logicalId": "NullThroughput", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 31, + "startLine": 38, "startColumn": 7, - "endLine": 31, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 38, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LeadingCpuWhitespace", + "logicalId": "ExplicitValueThenRemoved", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 32, + "startLine": 53, "startColumn": 7, - "endLine": 32, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 53, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LeadingCpuWhitespace", + "logicalId": "ExplicitRemovedThenValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 33, + "startLine": 64, "startColumn": 7, - "endLine": 33, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 64, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LeadingCpuWhitespace", + "logicalId": "DefaultValueThenRemoved", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 34, + "startLine": 74, "startColumn": 7, - "endLine": 34, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 74, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TrailingCpuWhitespace", + "logicalId": "DefaultRemovedThenValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 42, + "startLine": 84, "startColumn": 7, - "endLine": 42, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 84, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Resource 'ExplicitProvisioned' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TrailingCpuWhitespace", + "logicalId": "ExplicitProvisioned", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 43, - "startColumn": 7, - "endLine": 43, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Resource 'DefaultProvisioned' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TrailingCpuWhitespace", + "logicalId": "DefaultProvisioned", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 44, - "startColumn": 7, - "endLine": 44, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 23, + "startColumn": 5, + "endLine": 23, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Resource 'NullThroughput' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TrailingCpuWhitespace", + "logicalId": "NullThroughput", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 45, - "startColumn": 7, - "endLine": 45, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 35, + "startColumn": 5, + "endLine": 35, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Resource 'ExplicitValueThenRemoved' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TrailingCpuWhitespace", + "logicalId": "ExplicitValueThenRemoved", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 46, - "startColumn": 7, - "endLine": 46, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 50, + "startColumn": 5, + "endLine": 50, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Resource 'ExplicitRemovedThenValue' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LeadingMemoryWhitespace", + "logicalId": "ExplicitRemovedThenValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 54, - "startColumn": 7, - "endLine": 54, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 61, + "startColumn": 5, + "endLine": 61, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Resource 'DefaultValueThenRemoved' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LeadingMemoryWhitespace", + "logicalId": "DefaultValueThenRemoved", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 55, - "startColumn": 7, - "endLine": 55, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 72, + "startColumn": 5, + "endLine": 72, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Resource 'DefaultRemovedThenValue' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LeadingMemoryWhitespace", + "logicalId": "DefaultRemovedThenValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 56, - "startColumn": 7, - "endLine": 56, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 82, + "startColumn": 5, + "endLine": 82, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/resources/dynamodb/undefined_attribute_definition.yaml": { + "filePath": "bad/resources/dynamodb/undefined_attribute_definition.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 4, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3039", + "severity": "ERROR", + "message": "AttributeDefinitions does not match KeySchema attributes. missing definitions: [Artist]", + "source": "CFN_LINT", + "entity": { + "logicalId": "dynamoDBTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties", + "category": "Resource", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "AttributeDefinitions / KeySchemas mismatch", + "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": "dynamoDBTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 16, + "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": "dynamoDBTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 16, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LeadingMemoryWhitespace", + "logicalId": "dynamoDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 57, + "startLine": 10, "startColumn": 7, - "endLine": 57, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 10, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Resource 'dynamoDBTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LeadingMemoryWhitespace", + "logicalId": "dynamoDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 58, - "startColumn": 7, - "endLine": 58, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/resources/dynamodb/unused_attribute_definition_1.yaml": { + "filePath": "bad/resources/dynamodb/unused_attribute_definition_1.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 4, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3039", + "severity": "ERROR", + "message": "AttributeDefinitions does not match KeySchema attributes. unused definitions: [Sales]", + "source": "CFN_LINT", + "entity": { + "logicalId": "dynamoDBTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties", + "category": "Resource", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "AttributeDefinitions / KeySchemas mismatch", + "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": "dynamoDBTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 16, + "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": "dynamoDBTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 16, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TrailingMemoryWhitespace", + "logicalId": "dynamoDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 66, + "startLine": 14, "startColumn": 7, - "endLine": 66, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 14, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Resource 'dynamoDBTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TrailingMemoryWhitespace", + "logicalId": "dynamoDBTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/resources/dynamodb/unused_attribute_definition_2.yaml": { + "filePath": "bad/resources/dynamodb/unused_attribute_definition_2.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 4, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3039", + "severity": "ERROR", + "message": "AttributeDefinitions does not match KeySchema attributes. unused definitions: [Sales]", + "source": "CFN_LINT", + "entity": { + "logicalId": "dynamoDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 67, - "startColumn": 7, - "endLine": 67, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties", + "category": "Resource", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "AttributeDefinitions / KeySchemas mismatch", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "TrailingMemoryWhitespace", + "logicalId": "dynamoDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 68, - "startColumn": 7, - "endLine": 68, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 16, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "TrailingMemoryWhitespace", + "logicalId": "dynamoDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 69, - "startColumn": 7, - "endLine": 69, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 16, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TrailingMemoryWhitespace", + "logicalId": "dynamoDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 70, + "startLine": 14, "startColumn": 7, - "endLine": 70, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 14, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ScientificCpuNotation' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ScientificCpuNotation", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ScientificMemoryNotation' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'dynamoDBTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ScientificMemoryNotation", + "logicalId": "dynamoDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, + "startLine": 6, "startColumn": 5, - "endLine": 17, + "endLine": 6, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/resources/ecs/fargate_conditional_properties.yaml": { + "filePath": "bad/resources/ecs/fargate_conditional_properties.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LeadingCpuWhitespace' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate does not support PlacementConstraints", + "source": "CFN_LINT", "entity": { - "logicalId": "LeadingCpuWhitespace", + "logicalId": "PlacementInFargateBranch", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 29, + "propertyPath": "Properties.PlacementConstraints", + "suggestedFix": "Remove PlacementConstraints for Fargate tasks", + "category": "Resource", + "startLine": 15, "startColumn": 5, - "endLine": 29, + "endLine": 15, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TrailingCpuWhitespace' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate does not support log driver 'syslog'. Supported drivers: ['awslogs', 'splunk', 'awsfirelens']", + "source": "CFN_LINT", "entity": { - "logicalId": "TrailingCpuWhitespace", + "logicalId": "InvalidDriverInFargateBranch", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 41, + "propertyPath": "Properties.ContainerDefinitions.0.LogConfiguration.LogDriver", + "suggestedFix": "Use 'awslogs', 'splunk', or 'awsfirelens'", + "category": "Resource", + "startLine": 36, "startColumn": 5, - "endLine": 41, + "endLine": 36, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LeadingMemoryWhitespace' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'PlacementInFargateBranch' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LeadingMemoryWhitespace", + "logicalId": "PlacementInFargateBranch", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 53, + "startLine": 15, "startColumn": 5, - "endLine": 53, + "endLine": 15, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -81509,35 +81195,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TrailingMemoryWhitespace' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'InvalidDriverInFargateBranch' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TrailingMemoryWhitespace", + "logicalId": "InvalidDriverInFargateBranch", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 65, + "startLine": 36, "startColumn": 5, - "endLine": 65, + "endLine": 36, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/resources/ecs/fargate_properties_e3048.yaml": { - "filePath": "bad/resources/ecs/fargate_properties_e3048.yaml", + "bad/resources/ecs/fargate_numeric_spellings_e3047.yaml": { + "filePath": "bad/resources/ecs/fargate_numeric_spellings_e3047.yaml", "status": "OK", "metadata": { - "resourcesScanned": 14, + "resourcesScanned": 6, "counts": { "fatal": 0, - "errors": 17, + "errors": 9, "warnings": 0, - "informational": 94, + "informational": 36, "debug": 0 }, "suppressed": 0, @@ -81548,371 +81234,235 @@ { "ruleId": "E3047", "severity": "ERROR", - "message": "Cpu '128' is not compatible with Memory '512' for Fargate", + "message": "Cpu '2e0 vCPU' is not compatible with Memory '4 GB' for Fargate", "source": "CFN_LINT", "entity": { - "logicalId": "FargateInvalidCpu", + "logicalId": "ScientificCpuNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", "category": "Resource", - "startLine": 42, + "startLine": 8, "startColumn": 7, - "endLine": 42, + "endLine": 8, "endColumn": 10, "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", "phase": "LINT", "context": { "extra": { - "cpu": "128", - "memory": "512" + "cpu": "2e0 vCPU", + "memory": "4 GB" } } }, { "ruleId": "E3047", "severity": "ERROR", - "message": "Cpu '3 vCPU' is not compatible with Memory '512' for Fargate", + "message": "Cpu '2 vCPU' is not compatible with Memory '4e0 GB' for Fargate", "source": "CFN_LINT", "entity": { - "logicalId": "FargateConditionalInvalidCpu", + "logicalId": "ScientificMemoryNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", "category": "Resource", - "startLine": 165, + "startLine": 20, "startColumn": 7, - "endLine": 165, + "endLine": 20, "endColumn": 10, "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", "phase": "LINT", "context": { "extra": { - "cpu": "256", - "memory": "512" + "cpu": "2 vCPU", + "memory": "4e0 GB" } } }, { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate requires Cpu to be specified", - "source": "CFN_LINT", - "entity": { - "logicalId": "FargateMissingAll", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties", - "suggestedFix": "Set Cpu to a valid Fargate value (256, 512, 1024, 2048, 4096, 8192, 16384, or 32768)", - "category": "Resource", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", - "phase": "LINT" - }, - { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate requires Memory to be specified", - "source": "CFN_LINT", - "entity": { - "logicalId": "FargateMissingAll", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties", - "suggestedFix": "Set Memory to a valid Fargate value", - "category": "Resource", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", - "phase": "LINT" - }, - { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate requires NetworkMode to be specified as 'awsvpc'", - "source": "CFN_LINT", - "entity": { - "logicalId": "FargateMissingAll", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties", - "suggestedFix": "Set NetworkMode to 'awsvpc'", - "category": "Resource", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", - "phase": "LINT" - }, - { - "ruleId": "E3048", + "ruleId": "E3047", "severity": "ERROR", - "message": "Fargate requires NetworkMode 'awsvpc', got 'bridge'", + "message": "Cpu ' 2 vCPU' is not compatible with Memory '4 GB' for Fargate", "source": "CFN_LINT", "entity": { - "logicalId": "FargateWrongNetworkMode", + "logicalId": "LeadingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkMode", - "suggestedFix": "Set NetworkMode to 'awsvpc'", + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", "category": "Resource", - "startLine": 26, + "startLine": 32, "startColumn": 7, - "endLine": 26, - "endColumn": 18, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", - "phase": "LINT" + "endLine": 32, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", + "context": { + "extra": { + "cpu": " 2 vCPU", + "memory": "4 GB" + } + } }, { - "ruleId": "E3048", + "ruleId": "E3047", "severity": "ERROR", - "message": "Fargate Cpu value '128' is not valid. Valid sizes are ['256', '512', '1024', '2048', '4096', '8192', '16384', '32768'] CPU units or ['0.25', '0.5', '1', '2', '4', '8', '16', '32'] vCPU.", + "message": "Cpu '2 vCPU ' is not compatible with Memory '4 GB' for Fargate", "source": "CFN_LINT", "entity": { - "logicalId": "FargateInvalidCpu", + "logicalId": "TrailingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate Cpu size in CPU units or vCPU", + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", "category": "Resource", - "startLine": 42, + "startLine": 44, "startColumn": 7, - "endLine": 42, + "endLine": 44, "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", - "phase": "LINT" + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", + "context": { + "extra": { + "cpu": "2 vCPU ", + "memory": "4 GB" + } + } }, { - "ruleId": "E3048", + "ruleId": "E3047", "severity": "ERROR", - "message": "Fargate does not support PlacementConstraints", + "message": "Cpu '2 vCPU' is not compatible with Memory ' 4 GB' for Fargate", "source": "CFN_LINT", "entity": { - "logicalId": "FargatePlacementConstraints", + "logicalId": "LeadingMemoryWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PlacementConstraints", - "suggestedFix": "Remove PlacementConstraints for Fargate tasks", + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", "category": "Resource", - "startLine": 59, + "startLine": 56, "startColumn": 7, - "endLine": 59, - "endColumn": 27, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", - "phase": "LINT" - }, - { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate does not support log driver 'syslog'. Supported drivers: ['awslogs', 'splunk', 'awsfirelens']", - "source": "CFN_LINT", - "entity": { - "logicalId": "FargateUnsupportedLogDriver", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.ContainerDefinitions.0.LogConfiguration.LogDriver", - "suggestedFix": "Use 'awslogs', 'splunk', or 'awsfirelens'", - "category": "Resource", - "startLine": 82, - "startColumn": 13, - "endLine": 82, - "endColumn": 22, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", - "phase": "LINT" - }, - { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate requires Cpu to be specified", - "source": "CFN_LINT", - "entity": { - "logicalId": "FargateNullCpu", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties", - "suggestedFix": "Set Cpu to a valid Fargate value (256, 512, 1024, 2048, 4096, 8192, 16384, or 32768)", - "category": "Resource", - "startLine": 87, - "startColumn": 5, - "endLine": 87, - "endColumn": 15, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", - "phase": "LINT" - }, - { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate requires NetworkMode to be specified as 'awsvpc'", - "source": "CFN_LINT", - "entity": { - "logicalId": "FargateConditionalNetworkMode", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties", - "suggestedFix": "Set NetworkMode to 'awsvpc'", - "category": "Resource", - "startLine": 119, - "startColumn": 5, - "endLine": 119, - "endColumn": 15, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", - "phase": "LINT" - }, - { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate requires Cpu to be specified", - "source": "CFN_LINT", - "entity": { - "logicalId": "FargateConditionalCpu", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties", - "suggestedFix": "Set Cpu to a valid Fargate value (256, 512, 1024, 2048, 4096, 8192, 16384, or 32768)", - "category": "Resource", - "startLine": 133, - "startColumn": 5, - "endLine": 133, - "endColumn": 15, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", - "phase": "LINT" - }, - { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate requires Memory to be specified", - "source": "CFN_LINT", - "entity": { - "logicalId": "FargateConditionalMemory", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties", - "suggestedFix": "Set Memory to a valid Fargate value", - "category": "Resource", - "startLine": 147, - "startColumn": 5, - "endLine": 147, - "endColumn": 15, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", - "phase": "LINT" + "endLine": 56, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", + "context": { + "extra": { + "cpu": "2 vCPU", + "memory": " 4 GB" + } + } }, { - "ruleId": "E3048", + "ruleId": "E3047", "severity": "ERROR", - "message": "Fargate Cpu value '3 vCPU' is not valid. Valid sizes are ['256', '512', '1024', '2048', '4096', '8192', '16384', '32768'] CPU units or ['0.25', '0.5', '1', '2', '4', '8', '16', '32'] vCPU.", + "message": "Cpu '2 vCPU' is not compatible with Memory '4 GB ' for Fargate", "source": "CFN_LINT", "entity": { - "logicalId": "FargateConditionalInvalidCpu", + "logicalId": "TrailingMemoryWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate Cpu size in CPU units or vCPU", + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", "category": "Resource", - "startLine": 165, + "startLine": 68, "startColumn": 7, - "endLine": 165, + "endLine": 68, "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", - "phase": "LINT" + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", + "context": { + "extra": { + "cpu": "2 vCPU", + "memory": "4 GB " + } + } }, { "ruleId": "E3048", "severity": "ERROR", - "message": "Fargate does not support PlacementConstraints", + "message": "Fargate Cpu value '2e0 vCPU' is not valid. Valid sizes are ['256', '512', '1024', '2048', '4096', '8192', '16384', '32768'] CPU units or ['0.25', '0.5', '1', '2', '4', '8', '16', '32'] vCPU.", "source": "CFN_LINT", "entity": { - "logicalId": "FargateConditionalPlacementConstraints", + "logicalId": "ScientificCpuNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PlacementConstraints", - "suggestedFix": "Remove PlacementConstraints for Fargate tasks", + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate Cpu size in CPU units or vCPU", "category": "Resource", - "startLine": 181, + "startLine": 8, "startColumn": 7, - "endLine": 181, - "endColumn": 27, + "endLine": 8, + "endColumn": 10, "ruleDescription": "Validate ECS Fargate tasks have required properties and values", "phase": "LINT" }, { "ruleId": "E3048", "severity": "ERROR", - "message": "Fargate requires NetworkMode to be specified as 'awsvpc'", + "message": "Fargate Cpu value ' 2 vCPU' is not valid. Valid sizes are ['256', '512', '1024', '2048', '4096', '8192', '16384', '32768'] CPU units or ['0.25', '0.5', '1', '2', '4', '8', '16', '32'] vCPU.", "source": "CFN_LINT", "entity": { - "logicalId": "ConditionalFargateThenEc2MissingNetworkMode", + "logicalId": "LeadingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties", - "suggestedFix": "Set NetworkMode to 'awsvpc'", + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate Cpu size in CPU units or vCPU", "category": "Resource", - "startLine": 191, - "startColumn": 5, - "endLine": 191, - "endColumn": 15, + "startLine": 32, + "startColumn": 7, + "endLine": 32, + "endColumn": 10, "ruleDescription": "Validate ECS Fargate tasks have required properties and values", "phase": "LINT" }, { "ruleId": "E3048", "severity": "ERROR", - "message": "Fargate requires NetworkMode to be specified as 'awsvpc'", + "message": "Fargate Cpu value '2 vCPU ' is not valid. Valid sizes are ['256', '512', '1024', '2048', '4096', '8192', '16384', '32768'] CPU units or ['0.25', '0.5', '1', '2', '4', '8', '16', '32'] vCPU.", "source": "CFN_LINT", "entity": { - "logicalId": "ConditionalEc2ThenFargateMissingNetworkMode", + "logicalId": "TrailingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties", - "suggestedFix": "Set NetworkMode to 'awsvpc'", + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate Cpu size in CPU units or vCPU", "category": "Resource", - "startLine": 202, - "startColumn": 5, - "endLine": 202, - "endColumn": 15, + "startLine": 44, + "startColumn": 7, + "endLine": 44, + "endColumn": 10, "ruleDescription": "Validate ECS Fargate tasks have required properties and values", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateMissingAll", + "logicalId": "ScientificCpuNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 11, + "startLine": 6, "startColumn": 7, - "endLine": 11, - "endColumn": 13, + "endLine": 6, + "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -81923,19 +81473,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateMissingAll", + "logicalId": "ScientificCpuNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 12, + "startLine": 7, "startColumn": 7, - "endLine": 12, - "endColumn": 30, + "endLine": 7, + "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -81946,19 +81496,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateMissingAll", + "logicalId": "ScientificCpuNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 14, + "startLine": 8, "startColumn": 7, - "endLine": 14, - "endColumn": 27, + "endLine": 8, + "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -81969,18 +81519,18 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateWrongNetworkMode", + "logicalId": "ScientificCpuNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 23, + "startLine": 9, "startColumn": 7, - "endLine": 23, + "endLine": 9, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -81992,19 +81542,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateWrongNetworkMode", + "logicalId": "ScientificCpuNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 24, + "startLine": 10, "startColumn": 7, - "endLine": 24, - "endColumn": 30, + "endLine": 10, + "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -82015,19 +81565,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateWrongNetworkMode", + "logicalId": "ScientificMemoryNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 26, + "startLine": 18, "startColumn": 7, - "endLine": 26, - "endColumn": 18, + "endLine": 18, + "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -82038,19 +81588,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateWrongNetworkMode", + "logicalId": "ScientificMemoryNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 27, + "startLine": 19, "startColumn": 7, - "endLine": 27, - "endColumn": 10, + "endLine": 19, + "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -82061,19 +81611,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateWrongNetworkMode", + "logicalId": "ScientificMemoryNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 28, + "startLine": 20, "startColumn": 7, - "endLine": 28, - "endColumn": 13, + "endLine": 20, + "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -82084,19 +81634,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateWrongNetworkMode", + "logicalId": "ScientificMemoryNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 29, + "startLine": 21, "startColumn": 7, - "endLine": 29, - "endColumn": 27, + "endLine": 21, + "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -82107,19 +81657,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateInvalidCpu", + "logicalId": "ScientificMemoryNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 38, + "startLine": 22, "startColumn": 7, - "endLine": 38, - "endColumn": 13, + "endLine": 22, + "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -82133,15 +81683,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateInvalidCpu", + "logicalId": "LeadingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 39, + "startLine": 30, "startColumn": 7, - "endLine": 39, + "endLine": 30, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -82156,15 +81706,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateInvalidCpu", + "logicalId": "LeadingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 41, + "startLine": 31, "startColumn": 7, - "endLine": 41, + "endLine": 31, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -82179,15 +81729,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateInvalidCpu", + "logicalId": "LeadingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 42, + "startLine": 32, "startColumn": 7, - "endLine": 42, + "endLine": 32, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -82202,15 +81752,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateInvalidCpu", + "logicalId": "LeadingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 43, + "startLine": 33, "startColumn": 7, - "endLine": 43, + "endLine": 33, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -82225,15 +81775,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateInvalidCpu", + "logicalId": "LeadingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 44, + "startLine": 34, "startColumn": 7, - "endLine": 44, + "endLine": 34, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -82242,44 +81792,21 @@ "lifecycle": "create-only" } }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FargatePlacementConstraints", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Family", - "category": "Best Practice", - "startLine": 53, - "startColumn": 7, - "endLine": 53, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargatePlacementConstraints", + "logicalId": "TrailingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 54, + "startLine": 42, "startColumn": 7, - "endLine": 54, + "endLine": 42, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -82294,15 +81821,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargatePlacementConstraints", + "logicalId": "TrailingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 56, + "startLine": 43, "startColumn": 7, - "endLine": 56, + "endLine": 43, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -82317,15 +81844,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargatePlacementConstraints", + "logicalId": "TrailingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 57, + "startLine": 44, "startColumn": 7, - "endLine": 57, + "endLine": 44, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -82340,15 +81867,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargatePlacementConstraints", + "logicalId": "TrailingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 58, + "startLine": 45, "startColumn": 7, - "endLine": 58, + "endLine": 45, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -82360,18 +81887,18 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PlacementConstraints' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargatePlacementConstraints", + "logicalId": "TrailingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PlacementConstraints", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 59, + "startLine": 46, "startColumn": 7, - "endLine": 59, + "endLine": 46, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -82383,19 +81910,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargatePlacementConstraints", + "logicalId": "LeadingMemoryWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 62, + "startLine": 54, "startColumn": 7, - "endLine": 62, - "endColumn": 27, + "endLine": 54, + "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -82406,19 +81933,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateUnsupportedLogDriver", + "logicalId": "LeadingMemoryWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 71, + "startLine": 55, "startColumn": 7, - "endLine": 71, - "endColumn": 13, + "endLine": 55, + "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -82429,19 +81956,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateUnsupportedLogDriver", + "logicalId": "LeadingMemoryWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 72, + "startLine": 56, "startColumn": 7, - "endLine": 72, - "endColumn": 30, + "endLine": 56, + "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -82452,19 +81979,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateUnsupportedLogDriver", + "logicalId": "LeadingMemoryWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 74, + "startLine": 57, "startColumn": 7, - "endLine": 74, - "endColumn": 18, + "endLine": 57, + "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -82475,19 +82002,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateUnsupportedLogDriver", + "logicalId": "LeadingMemoryWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 75, + "startLine": 58, "startColumn": 7, - "endLine": 75, - "endColumn": 10, + "endLine": 58, + "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -82498,19 +82025,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateUnsupportedLogDriver", + "logicalId": "TrailingMemoryWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 76, + "startLine": 66, "startColumn": 7, - "endLine": 76, - "endColumn": 13, + "endLine": 66, + "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -82521,19 +82048,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateUnsupportedLogDriver", + "logicalId": "TrailingMemoryWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 77, + "startLine": 67, "startColumn": 7, - "endLine": 77, - "endColumn": 27, + "endLine": 67, + "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -82544,19 +82071,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateNullCpu", + "logicalId": "TrailingMemoryWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 88, + "startLine": 68, "startColumn": 7, - "endLine": 88, - "endColumn": 13, + "endLine": 68, + "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -82567,19 +82094,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateNullCpu", + "logicalId": "TrailingMemoryWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 89, + "startLine": 69, "startColumn": 7, - "endLine": 89, - "endColumn": 30, + "endLine": 69, + "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -82590,19 +82117,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateNullCpu", + "logicalId": "TrailingMemoryWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 91, + "startLine": 70, "startColumn": 7, - "endLine": 91, - "endColumn": 18, + "endLine": 70, + "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -82611,485 +82138,535 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Resource 'ScientificCpuNotation' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateNullCpu", + "logicalId": "ScientificCpuNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 92, - "startColumn": 7, - "endLine": 92, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseConstraints'" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Resource 'ScientificMemoryNotation' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateNullCpu", + "logicalId": "ScientificMemoryNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 93, - "startColumn": 7, - "endLine": 93, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 17, + "startColumn": 5, + "endLine": 17, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Resource 'LeadingCpuWhitespace' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateNullCpu", + "logicalId": "LeadingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 94, + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TrailingCpuWhitespace' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "TrailingCpuWhitespace", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 41, + "startColumn": 5, + "endLine": 41, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LeadingMemoryWhitespace' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "LeadingMemoryWhitespace", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 53, + "startColumn": 5, + "endLine": 53, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TrailingMemoryWhitespace' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "TrailingMemoryWhitespace", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 65, + "startColumn": 5, + "endLine": 65, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/resources/ecs/fargate_properties_e3048.yaml": { + "filePath": "bad/resources/ecs/fargate_properties_e3048.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 14, + "counts": { + "fatal": 0, + "errors": 17, + "warnings": 0, + "informational": 94, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3047", + "severity": "ERROR", + "message": "Cpu '128' is not compatible with Memory '512' for Fargate", + "source": "CFN_LINT", + "entity": { + "logicalId": "FargateInvalidCpu", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "category": "Resource", + "startLine": 42, "startColumn": 7, - "endLine": 94, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", + "endLine": 42, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", "context": { - "lifecycle": "create-only" + "extra": { + "cpu": "128", + "memory": "512" + } } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3047", + "severity": "ERROR", + "message": "Cpu '3 vCPU' is not compatible with Memory '512' for Fargate", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "FargateConditionalInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Family", - "category": "Best Practice", - "startLine": 103, + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "category": "Resource", + "startLine": 165, "startColumn": 7, - "endLine": 103, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", + "endLine": 165, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", "context": { - "lifecycle": "create-only" + "extra": { + "cpu": "256", + "memory": "512" + } } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate requires Cpu to be specified", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "FargateMissingAll", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 104, - "startColumn": 7, - "endLine": 104, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties", + "suggestedFix": "Set Cpu to a valid Fargate value (256, 512, 1024, 2048, 4096, 8192, 16384, or 32768)", + "category": "Resource", + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate requires Memory to be specified", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "FargateMissingAll", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 106, - "startColumn": 7, - "endLine": 106, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties", + "suggestedFix": "Set Memory to a valid Fargate value", + "category": "Resource", + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate requires NetworkMode to be specified as 'awsvpc'", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "FargateMissingAll", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", - "category": "Best Practice", - "startLine": 107, - "startColumn": 7, - "endLine": 107, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties", + "suggestedFix": "Set NetworkMode to 'awsvpc'", + "category": "Resource", + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate requires NetworkMode 'awsvpc', got 'bridge'", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "FargateWrongNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", - "category": "Best Practice", - "startLine": 108, + "propertyPath": "Properties.NetworkMode", + "suggestedFix": "Set NetworkMode to 'awsvpc'", + "category": "Resource", + "startLine": 26, "startColumn": 7, - "endLine": 108, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 26, + "endColumn": 18, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PlacementConstraints' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate Cpu value '128' is not valid. Valid sizes are ['256', '512', '1024', '2048', '4096', '8192', '16384', '32768'] CPU units or ['0.25', '0.5', '1', '2', '4', '8', '16', '32'] vCPU.", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "FargateInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PlacementConstraints", - "category": "Best Practice", - "startLine": 109, + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate Cpu size in CPU units or vCPU", + "category": "Resource", + "startLine": 42, "startColumn": 7, - "endLine": 109, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseConstraints'" - } + "endLine": 42, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate does not support PlacementConstraints", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "FargatePlacementConstraints", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 110, + "propertyPath": "Properties.PlacementConstraints", + "suggestedFix": "Remove PlacementConstraints for Fargate tasks", + "category": "Resource", + "startLine": 59, "startColumn": 7, - "endLine": 110, + "endLine": 59, "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate does not support log driver 'syslog'. Supported drivers: ['awslogs', 'splunk', 'awsfirelens']", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateConditionalNetworkMode", + "logicalId": "FargateUnsupportedLogDriver", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Family", - "category": "Best Practice", - "startLine": 120, - "startColumn": 7, - "endLine": 120, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.ContainerDefinitions.0.LogConfiguration.LogDriver", + "suggestedFix": "Use 'awslogs', 'splunk', or 'awsfirelens'", + "category": "Resource", + "startLine": 82, + "startColumn": 13, + "endLine": 82, + "endColumn": 22, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate requires Cpu to be specified", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateConditionalNetworkMode", + "logicalId": "FargateNullCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 121, - "startColumn": 7, - "endLine": 121, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties", + "suggestedFix": "Set Cpu to a valid Fargate value (256, 512, 1024, 2048, 4096, 8192, 16384, or 32768)", + "category": "Resource", + "startLine": 87, + "startColumn": 5, + "endLine": 87, + "endColumn": 15, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate requires NetworkMode to be specified as 'awsvpc'", + "source": "CFN_LINT", "entity": { "logicalId": "FargateConditionalNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 122, - "startColumn": 7, - "endLine": 122, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseConstraints'" - } + "propertyPath": "Properties", + "suggestedFix": "Set NetworkMode to 'awsvpc'", + "category": "Resource", + "startLine": 119, + "startColumn": 5, + "endLine": 119, + "endColumn": 15, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate requires Cpu to be specified", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateConditionalNetworkMode", + "logicalId": "FargateConditionalCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", - "category": "Best Practice", - "startLine": 123, - "startColumn": 7, - "endLine": 123, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties", + "suggestedFix": "Set Cpu to a valid Fargate value (256, 512, 1024, 2048, 4096, 8192, 16384, or 32768)", + "category": "Resource", + "startLine": 133, + "startColumn": 5, + "endLine": 133, + "endColumn": 15, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate requires Memory to be specified", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateConditionalNetworkMode", + "logicalId": "FargateConditionalMemory", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", - "category": "Best Practice", - "startLine": 124, - "startColumn": 7, - "endLine": 124, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties", + "suggestedFix": "Set Memory to a valid Fargate value", + "category": "Resource", + "startLine": 147, + "startColumn": 5, + "endLine": 147, + "endColumn": 15, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate Cpu value '3 vCPU' is not valid. Valid sizes are ['256', '512', '1024', '2048', '4096', '8192', '16384', '32768'] CPU units or ['0.25', '0.5', '1', '2', '4', '8', '16', '32'] vCPU.", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateConditionalNetworkMode", + "logicalId": "FargateConditionalInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 125, + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate Cpu size in CPU units or vCPU", + "category": "Resource", + "startLine": 165, "startColumn": 7, - "endLine": 125, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 165, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate does not support PlacementConstraints", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateConditionalCpu", + "logicalId": "FargateConditionalPlacementConstraints", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Family", - "category": "Best Practice", - "startLine": 134, + "propertyPath": "Properties.PlacementConstraints", + "suggestedFix": "Remove PlacementConstraints for Fargate tasks", + "category": "Resource", + "startLine": 181, "startColumn": 7, - "endLine": 134, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 181, + "endColumn": 27, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate requires NetworkMode to be specified as 'awsvpc'", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateConditionalCpu", + "logicalId": "ConditionalFargateThenEc2MissingNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 135, - "startColumn": 7, - "endLine": 135, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties", + "suggestedFix": "Set NetworkMode to 'awsvpc'", + "category": "Resource", + "startLine": 191, + "startColumn": 5, + "endLine": 191, + "endColumn": 15, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate requires NetworkMode to be specified as 'awsvpc'", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateConditionalCpu", + "logicalId": "ConditionalEc2ThenFargateMissingNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 136, - "startColumn": 7, - "endLine": 136, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties", + "suggestedFix": "Set NetworkMode to 'awsvpc'", + "category": "Resource", + "startLine": 202, + "startColumn": 5, + "endLine": 202, + "endColumn": 15, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalCpu", + "logicalId": "FargateMissingAll", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 137, + "startLine": 11, "startColumn": 7, - "endLine": 137, - "endColumn": 10, + "endLine": 11, + "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseConstraints'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalCpu", + "logicalId": "FargateMissingAll", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 138, + "startLine": 12, "startColumn": 7, - "endLine": 138, - "endColumn": 13, + "endLine": 12, + "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -83103,15 +82680,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalCpu", + "logicalId": "FargateMissingAll", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 139, + "startLine": 14, "startColumn": 7, - "endLine": 139, + "endLine": 14, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -83126,15 +82703,15 @@ "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalMemory", + "logicalId": "FargateWrongNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 148, + "startLine": 23, "startColumn": 7, - "endLine": 148, + "endLine": 23, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -83149,15 +82726,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalMemory", + "logicalId": "FargateWrongNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 149, + "startLine": 24, "startColumn": 7, - "endLine": 149, + "endLine": 24, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -83172,15 +82749,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalMemory", + "logicalId": "FargateWrongNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 150, + "startLine": 26, "startColumn": 7, - "endLine": 150, + "endLine": 26, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -83195,15 +82772,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalMemory", + "logicalId": "FargateWrongNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 151, + "startLine": 27, "startColumn": 7, - "endLine": 151, + "endLine": 27, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -83218,22 +82795,21 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalMemory", + "logicalId": "FargateWrongNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 152, + "startLine": 28, "startColumn": 7, - "endLine": 152, + "endLine": 28, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseConstraints'" + "lifecycle": "create-only" } }, { @@ -83242,15 +82818,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalMemory", + "logicalId": "FargateWrongNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 153, + "startLine": 29, "startColumn": 7, - "endLine": 153, + "endLine": 29, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -83265,15 +82841,15 @@ "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalInvalidCpu", + "logicalId": "FargateInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 162, + "startLine": 38, "startColumn": 7, - "endLine": 162, + "endLine": 38, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -83288,15 +82864,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalInvalidCpu", + "logicalId": "FargateInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 163, + "startLine": 39, "startColumn": 7, - "endLine": 163, + "endLine": 39, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -83311,15 +82887,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalInvalidCpu", + "logicalId": "FargateInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 164, + "startLine": 41, "startColumn": 7, - "endLine": 164, + "endLine": 41, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -83334,22 +82910,21 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalInvalidCpu", + "logicalId": "FargateInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 165, + "startLine": 42, "startColumn": 7, - "endLine": 165, + "endLine": 42, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseConstraints'" + "lifecycle": "create-only" } }, { @@ -83358,15 +82933,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalInvalidCpu", + "logicalId": "FargateInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 166, + "startLine": 43, "startColumn": 7, - "endLine": 166, + "endLine": 43, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -83381,15 +82956,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalInvalidCpu", + "logicalId": "FargateInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 167, + "startLine": 44, "startColumn": 7, - "endLine": 167, + "endLine": 44, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -83404,15 +82979,15 @@ "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalPlacementConstraints", + "logicalId": "FargatePlacementConstraints", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 176, + "startLine": 53, "startColumn": 7, - "endLine": 176, + "endLine": 53, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -83427,15 +83002,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalPlacementConstraints", + "logicalId": "FargatePlacementConstraints", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 177, + "startLine": 54, "startColumn": 7, - "endLine": 177, + "endLine": 54, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -83450,15 +83025,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalPlacementConstraints", + "logicalId": "FargatePlacementConstraints", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 178, + "startLine": 56, "startColumn": 7, - "endLine": 178, + "endLine": 56, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -83473,15 +83048,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalPlacementConstraints", + "logicalId": "FargatePlacementConstraints", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 179, + "startLine": 57, "startColumn": 7, - "endLine": 179, + "endLine": 57, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -83496,15 +83071,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalPlacementConstraints", + "logicalId": "FargatePlacementConstraints", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 180, + "startLine": 58, "startColumn": 7, - "endLine": 180, + "endLine": 58, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -83519,22 +83094,21 @@ "message": "Property 'PlacementConstraints' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalPlacementConstraints", + "logicalId": "FargatePlacementConstraints", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.PlacementConstraints", "category": "Best Practice", - "startLine": 181, + "startLine": 59, "startColumn": 7, - "endLine": 181, + "endLine": 59, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseConstraints'" + "lifecycle": "create-only" } }, { @@ -83543,15 +83117,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalPlacementConstraints", + "logicalId": "FargatePlacementConstraints", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 182, + "startLine": 62, "startColumn": 7, - "endLine": 182, + "endLine": 62, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -83563,43 +83137,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalFargateThenEc2MissingNetworkMode", + "logicalId": "FargateUnsupportedLogDriver", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 192, + "startLine": 71, "startColumn": 7, - "endLine": 192, - "endColumn": 30, + "endLine": 71, + "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseConstraints'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalFargateThenEc2MissingNetworkMode", + "logicalId": "FargateUnsupportedLogDriver", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 193, + "startLine": 72, "startColumn": 7, - "endLine": 193, - "endColumn": 10, + "endLine": 72, + "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -83610,19 +83183,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalFargateThenEc2MissingNetworkMode", + "logicalId": "FargateUnsupportedLogDriver", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 194, + "startLine": 74, "startColumn": 7, - "endLine": 194, - "endColumn": 13, + "endLine": 74, + "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -83633,19 +83206,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalFargateThenEc2MissingNetworkMode", + "logicalId": "FargateUnsupportedLogDriver", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 195, + "startLine": 75, "startColumn": 7, - "endLine": 195, - "endColumn": 27, + "endLine": 75, + "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -83656,43 +83229,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalEc2ThenFargateMissingNetworkMode", + "logicalId": "FargateUnsupportedLogDriver", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 203, + "startLine": 76, "startColumn": 7, - "endLine": 203, - "endColumn": 30, + "endLine": 76, + "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseConstraints'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalEc2ThenFargateMissingNetworkMode", + "logicalId": "FargateUnsupportedLogDriver", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 204, + "startLine": 77, "startColumn": 7, - "endLine": 204, - "endColumn": 10, + "endLine": 77, + "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -83703,18 +83275,18 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalEc2ThenFargateMissingNetworkMode", + "logicalId": "FargateNullCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 205, + "startLine": 88, "startColumn": 7, - "endLine": 205, + "endLine": 88, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -83726,19 +83298,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalEc2ThenFargateMissingNetworkMode", + "logicalId": "FargateNullCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 206, + "startLine": 89, "startColumn": 7, - "endLine": 206, - "endColumn": 27, + "endLine": 89, + "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -83747,657 +83319,676 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateMissingAll' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateMissingAll", + "logicalId": "FargateNullCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 91, + "startColumn": 7, + "endLine": 91, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateWrongNetworkMode' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateWrongNetworkMode", + "logicalId": "FargateNullCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 22, - "startColumn": 5, - "endLine": 22, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 92, + "startColumn": 7, + "endLine": 92, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseConstraints'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateInvalidCpu' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateInvalidCpu", + "logicalId": "FargateNullCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 37, - "startColumn": 5, - "endLine": 37, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 93, + "startColumn": 7, + "endLine": 93, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargatePlacementConstraints' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargatePlacementConstraints", + "logicalId": "FargateNullCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 52, - "startColumn": 5, - "endLine": 52, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 94, + "startColumn": 7, + "endLine": 94, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateUnsupportedLogDriver' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateUnsupportedLogDriver", + "logicalId": "FargateNullPC", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 70, - "startColumn": 5, - "endLine": 70, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 103, + "startColumn": 7, + "endLine": 103, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateNullCpu' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateNullCpu", + "logicalId": "FargateNullPC", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 87, - "startColumn": 5, - "endLine": 87, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 104, + "startColumn": 7, + "endLine": 104, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateNullPC' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { "logicalId": "FargateNullPC", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 102, - "startColumn": 5, - "endLine": 102, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 106, + "startColumn": 7, + "endLine": 106, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateConditionalNetworkMode' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalNetworkMode", + "logicalId": "FargateNullPC", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 119, - "startColumn": 5, - "endLine": 119, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 107, + "startColumn": 7, + "endLine": 107, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateConditionalCpu' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalCpu", + "logicalId": "FargateNullPC", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 133, - "startColumn": 5, - "endLine": 133, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 108, + "startColumn": 7, + "endLine": 108, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateConditionalMemory' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'PlacementConstraints' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalMemory", + "logicalId": "FargateNullPC", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.PlacementConstraints", "category": "Best Practice", - "startLine": 147, - "startColumn": 5, - "endLine": 147, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 109, + "startColumn": 7, + "endLine": 109, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseConstraints'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateConditionalInvalidCpu' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalInvalidCpu", + "logicalId": "FargateNullPC", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 161, - "startColumn": 5, - "endLine": 161, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 110, + "startColumn": 7, + "endLine": 110, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateConditionalPlacementConstraints' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalPlacementConstraints", + "logicalId": "FargateConditionalNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 175, - "startColumn": 5, - "endLine": 175, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 120, + "startColumn": 7, + "endLine": 120, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ConditionalFargateThenEc2MissingNetworkMode' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalFargateThenEc2MissingNetworkMode", + "logicalId": "FargateConditionalNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 191, - "startColumn": 5, - "endLine": 191, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 121, + "startColumn": 7, + "endLine": 121, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ConditionalEc2ThenFargateMissingNetworkMode' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalEc2ThenFargateMissingNetworkMode", + "logicalId": "FargateConditionalNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 202, - "startColumn": 5, - "endLine": 202, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/resources/ecs/fargate_task_sizes_e3047.yaml": { - "filePath": "bad/resources/ecs/fargate_task_sizes_e3047.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 9, - "counts": { - "fatal": 0, - "errors": 11, - "warnings": 4, - "informational": 63, - "debug": 0 + "startLine": 122, + "startColumn": 7, + "endLine": 122, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseConstraints'" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3047", - "severity": "ERROR", - "message": "Cpu '8 vCPU' is not compatible with Memory '17 GB' for Fargate", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "EightVcpuInvalidStep", + "logicalId": "FargateConditionalNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", - "category": "Resource", - "startLine": 11, + "category": "Best Practice", + "startLine": 123, "startColumn": 7, - "endLine": 11, + "endLine": 123, "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { - "extra": { - "cpu": "8 vCPU", - "memory": "17 GB" - } + "lifecycle": "create-only" } }, { - "ruleId": "E3047", - "severity": "ERROR", - "message": "Cpu 16384 is not compatible with Memory 36864 for Fargate", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SixteenVcpuInvalidStep", + "logicalId": "FargateConditionalNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", - "category": "Resource", - "startLine": 24, + "propertyPath": "Properties.Memory", + "category": "Best Practice", + "startLine": 124, "startColumn": 7, - "endLine": 24, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", + "endLine": 124, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { - "extra": { - "cpu": 16384, - "memory": 36864 - } + "lifecycle": "create-only" } }, { - "ruleId": "E3047", - "severity": "ERROR", - "message": "Cpu '32 vCPU' is not compatible with Memory '64 GB' for Fargate", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", + "logicalId": "FargateConditionalNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", - "category": "Resource", - "startLine": 37, + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 125, "startColumn": 7, - "endLine": 37, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", + "endLine": 125, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { - "extra": { - "cpu": "32 vCPU", - "memory": "64 GB" - } + "lifecycle": "create-only" } }, { - "ruleId": "E3047", - "severity": "ERROR", - "message": "Cpu 32768 is not compatible with Memory 245760 for Fargate", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", + "logicalId": "FargateConditionalCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", - "category": "Resource", - "startLine": 50, + "propertyPath": "Properties.Family", + "category": "Best Practice", + "startLine": 134, "startColumn": 7, - "endLine": 50, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", + "endLine": 134, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { - "extra": { - "cpu": 32768, - "memory": 245760 - } + "lifecycle": "create-only" } }, { - "ruleId": "E3047", - "severity": "ERROR", - "message": "Cpu '3 vCPU' is not compatible with Memory '4 GB' for Fargate", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MalformedCpuUnits", + "logicalId": "FargateConditionalCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", - "category": "Resource", - "startLine": 63, + "propertyPath": "Properties.RequiresCompatibilities", + "category": "Best Practice", + "startLine": 135, "startColumn": 7, - "endLine": 63, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", + "endLine": 135, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { - "extra": { - "cpu": "3 vCPU", - "memory": "4 GB" - } + "lifecycle": "create-only" } }, { - "ruleId": "E3047", - "severity": "ERROR", - "message": "Cpu '0512' is not compatible with Memory '1 GB' for Fargate", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "NonCanonicalCpuUnits", + "logicalId": "FargateConditionalCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", - "category": "Resource", - "startLine": 76, + "propertyPath": "Properties.NetworkMode", + "category": "Best Practice", + "startLine": 136, "startColumn": 7, - "endLine": 76, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", + "endLine": 136, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { - "extra": { - "cpu": "0512", - "memory": "1 GB" - } + "lifecycle": "create-only" } }, { - "ruleId": "E3047", - "severity": "ERROR", - "message": "Cpu '8192' is not compatible with Memory '9223372036854775807 GB' for Fargate", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "OverflowingMemoryUnits", + "logicalId": "FargateConditionalCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", - "category": "Resource", - "startLine": 89, + "category": "Best Practice", + "startLine": 137, "startColumn": 7, - "endLine": 89, + "endLine": 137, "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { - "extra": { - "cpu": "8192", - "memory": "9223372036854775807 GB" - } + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseConstraints'" } }, { - "ruleId": "E3047", - "severity": "ERROR", - "message": "Cpu '512' is not compatible with Memory '512' for Fargate", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CpuInvalidThenValid", + "logicalId": "FargateConditionalCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", - "category": "Resource", - "startLine": 102, + "propertyPath": "Properties.Memory", + "category": "Best Practice", + "startLine": 138, "startColumn": 7, - "endLine": 102, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", + "endLine": 138, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { - "extra": { - "cpu": "512", - "memory": "512" - } + "lifecycle": "create-only" } }, { - "ruleId": "E3047", - "severity": "ERROR", - "message": "Cpu '512' is not compatible with Memory '512' for Fargate", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CpuValidThenInvalid", + "logicalId": "FargateConditionalCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", - "category": "Resource", - "startLine": 115, + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 139, "startColumn": 7, - "endLine": 115, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", + "endLine": 139, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { - "extra": { - "cpu": "256", - "memory": "512" - } + "lifecycle": "create-only" } }, { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate Cpu value '3 vCPU' is not valid. Valid sizes are ['256', '512', '1024', '2048', '4096', '8192', '16384', '32768'] CPU units or ['0.25', '0.5', '1', '2', '4', '8', '16', '32'] vCPU.", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MalformedCpuUnits", + "logicalId": "FargateConditionalMemory", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate Cpu size in CPU units or vCPU", - "category": "Resource", - "startLine": 63, + "propertyPath": "Properties.Family", + "category": "Best Practice", + "startLine": 148, "startColumn": 7, - "endLine": 63, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", - "phase": "LINT" + "endLine": 148, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate Cpu value '0512' is not valid. Valid sizes are ['256', '512', '1024', '2048', '4096', '8192', '16384', '32768'] CPU units or ['0.25', '0.5', '1', '2', '4', '8', '16', '32'] vCPU.", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "NonCanonicalCpuUnits", + "logicalId": "FargateConditionalMemory", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate Cpu size in CPU units or vCPU", - "category": "Resource", - "startLine": 76, + "propertyPath": "Properties.RequiresCompatibilities", + "category": "Best Practice", + "startLine": 149, "startColumn": 7, - "endLine": 76, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", - "phase": "LINT" + "endLine": 149, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "16384 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SixteenVcpuInvalidStep", + "logicalId": "FargateConditionalMemory", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 24, + "startLine": 150, "startColumn": 7, - "endLine": 24, - "endColumn": 10, + "endLine": 150, + "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "36864 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SixteenVcpuInvalidStep", + "logicalId": "FargateConditionalMemory", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 25, + "startLine": 151, "startColumn": 7, - "endLine": 25, - "endColumn": 13, + "endLine": 151, + "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "32768 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", + "logicalId": "FargateConditionalMemory", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 50, + "startLine": 152, "startColumn": 7, - "endLine": 50, - "endColumn": 10, + "endLine": 152, + "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseConstraints'" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "245760 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", + "logicalId": "FargateConditionalMemory", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 51, + "startLine": 153, "startColumn": 7, - "endLine": 51, - "endColumn": 13, + "endLine": 153, + "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", @@ -84405,15 +83996,15 @@ "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EightVcpuInvalidStep", + "logicalId": "FargateConditionalInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 8, + "startLine": 162, "startColumn": 7, - "endLine": 8, + "endLine": 162, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -84428,15 +84019,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EightVcpuInvalidStep", + "logicalId": "FargateConditionalInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 9, + "startLine": 163, "startColumn": 7, - "endLine": 9, + "endLine": 163, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -84451,15 +84042,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EightVcpuInvalidStep", + "logicalId": "FargateConditionalInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 10, + "startLine": 164, "startColumn": 7, - "endLine": 10, + "endLine": 164, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -84474,21 +84065,22 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EightVcpuInvalidStep", + "logicalId": "FargateConditionalInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 11, + "startLine": 165, "startColumn": 7, - "endLine": 11, + "endLine": 165, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseConstraints'" } }, { @@ -84497,15 +84089,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EightVcpuInvalidStep", + "logicalId": "FargateConditionalInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 12, + "startLine": 166, "startColumn": 7, - "endLine": 12, + "endLine": 166, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -84520,15 +84112,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EightVcpuInvalidStep", + "logicalId": "FargateConditionalInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 13, + "startLine": 167, "startColumn": 7, - "endLine": 13, + "endLine": 167, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -84543,15 +84135,15 @@ "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SixteenVcpuInvalidStep", + "logicalId": "FargateConditionalPlacementConstraints", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 21, + "startLine": 176, "startColumn": 7, - "endLine": 21, + "endLine": 176, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -84566,15 +84158,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SixteenVcpuInvalidStep", + "logicalId": "FargateConditionalPlacementConstraints", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 22, + "startLine": 177, "startColumn": 7, - "endLine": 22, + "endLine": 177, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -84589,15 +84181,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SixteenVcpuInvalidStep", + "logicalId": "FargateConditionalPlacementConstraints", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 23, + "startLine": 178, "startColumn": 7, - "endLine": 23, + "endLine": 178, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -84612,15 +84204,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SixteenVcpuInvalidStep", + "logicalId": "FargateConditionalPlacementConstraints", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 24, + "startLine": 179, "startColumn": 7, - "endLine": 24, + "endLine": 179, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -84635,15 +84227,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SixteenVcpuInvalidStep", + "logicalId": "FargateConditionalPlacementConstraints", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 25, + "startLine": 180, "startColumn": 7, - "endLine": 25, + "endLine": 180, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -84655,42 +84247,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'PlacementConstraints' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SixteenVcpuInvalidStep", + "logicalId": "FargateConditionalPlacementConstraints", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.PlacementConstraints", "category": "Best Practice", - "startLine": 26, + "startLine": 181, "startColumn": 7, - "endLine": 26, + "endLine": 181, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseConstraints'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", + "logicalId": "FargateConditionalPlacementConstraints", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 34, + "startLine": 182, "startColumn": 7, - "endLine": 34, - "endColumn": 13, + "endLine": 182, + "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -84704,39 +84297,40 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", + "logicalId": "ConditionalFargateThenEc2MissingNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 35, + "startLine": 192, "startColumn": 7, - "endLine": 35, + "endLine": 192, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseConstraints'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", + "logicalId": "ConditionalFargateThenEc2MissingNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 36, + "startLine": 193, "startColumn": 7, - "endLine": 36, - "endColumn": 18, + "endLine": 193, + "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -84747,19 +84341,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", + "logicalId": "ConditionalFargateThenEc2MissingNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 37, + "startLine": 194, "startColumn": 7, - "endLine": 37, - "endColumn": 10, + "endLine": 194, + "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -84770,19 +84364,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", + "logicalId": "ConditionalFargateThenEc2MissingNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 38, + "startLine": 195, "startColumn": 7, - "endLine": 38, - "endColumn": 13, + "endLine": 195, + "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -84793,19 +84387,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", + "logicalId": "ConditionalEc2ThenFargateMissingNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 39, + "startLine": 203, "startColumn": 7, - "endLine": 39, - "endColumn": 27, + "endLine": 203, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseConstraints'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalEc2ThenFargateMissingNetworkMode", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Cpu", + "category": "Best Practice", + "startLine": 204, + "startColumn": 7, + "endLine": 204, + "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -84816,18 +84434,18 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", + "logicalId": "ConditionalEc2ThenFargateMissingNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 47, + "startLine": 205, "startColumn": 7, - "endLine": 47, + "endLine": 205, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -84839,19 +84457,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", + "logicalId": "ConditionalEc2ThenFargateMissingNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 48, + "startLine": 206, "startColumn": 7, - "endLine": 48, - "endColumn": 30, + "endLine": 206, + "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -84860,372 +84478,657 @@ } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FargateMissingAll' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FargateMissingAll", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FargateWrongNetworkMode' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FargateWrongNetworkMode", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 22, + "startColumn": 5, + "endLine": 22, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FargateInvalidCpu' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FargateInvalidCpu", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 37, + "startColumn": 5, + "endLine": 37, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FargatePlacementConstraints' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FargatePlacementConstraints", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 52, + "startColumn": 5, + "endLine": 52, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FargateUnsupportedLogDriver' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FargateUnsupportedLogDriver", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 70, + "startColumn": 5, + "endLine": 70, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FargateNullCpu' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FargateNullCpu", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 87, + "startColumn": 5, + "endLine": 87, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FargateNullPC' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FargateNullPC", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 102, + "startColumn": 5, + "endLine": 102, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FargateConditionalNetworkMode' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FargateConditionalNetworkMode", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 119, + "startColumn": 5, + "endLine": 119, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FargateConditionalCpu' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FargateConditionalCpu", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 133, + "startColumn": 5, + "endLine": 133, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FargateConditionalMemory' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FargateConditionalMemory", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 147, + "startColumn": 5, + "endLine": 147, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FargateConditionalInvalidCpu' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FargateConditionalInvalidCpu", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 161, + "startColumn": 5, + "endLine": 161, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FargateConditionalPlacementConstraints' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FargateConditionalPlacementConstraints", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 175, + "startColumn": 5, + "endLine": 175, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ConditionalFargateThenEc2MissingNetworkMode' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalFargateThenEc2MissingNetworkMode", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 191, + "startColumn": 5, + "endLine": 191, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ConditionalEc2ThenFargateMissingNetworkMode' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalEc2ThenFargateMissingNetworkMode", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 202, + "startColumn": 5, + "endLine": 202, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/resources/ecs/fargate_task_sizes_e3047.yaml": { + "filePath": "bad/resources/ecs/fargate_task_sizes_e3047.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 9, + "counts": { + "fatal": 0, + "errors": 11, + "warnings": 4, + "informational": 63, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3047", + "severity": "ERROR", + "message": "Cpu '8 vCPU' is not compatible with Memory '17 GB' for Fargate", + "source": "CFN_LINT", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", + "logicalId": "EightVcpuInvalidStep", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 49, + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "category": "Resource", + "startLine": 11, "startColumn": 7, - "endLine": 49, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", + "endLine": 11, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", "context": { - "lifecycle": "create-only" + "extra": { + "cpu": "8 vCPU", + "memory": "17 GB" + } } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3047", + "severity": "ERROR", + "message": "Cpu 16384 is not compatible with Memory 36864 for Fargate", + "source": "CFN_LINT", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", + "logicalId": "SixteenVcpuInvalidStep", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", - "category": "Best Practice", - "startLine": 50, + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "category": "Resource", + "startLine": 24, "startColumn": 7, - "endLine": 50, + "endLine": 24, "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", "context": { - "lifecycle": "create-only" + "extra": { + "cpu": 16384, + "memory": 36864 + } } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3047", + "severity": "ERROR", + "message": "Cpu '32 vCPU' is not compatible with Memory '64 GB' for Fargate", + "source": "CFN_LINT", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", + "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", - "category": "Best Practice", - "startLine": 51, + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "category": "Resource", + "startLine": 37, "startColumn": 7, - "endLine": 51, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", + "endLine": 37, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", "context": { - "lifecycle": "create-only" + "extra": { + "cpu": "32 vCPU", + "memory": "64 GB" + } } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3047", + "severity": "ERROR", + "message": "Cpu 32768 is not compatible with Memory 245760 for Fargate", + "source": "CFN_LINT", "entity": { "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 52, + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "category": "Resource", + "startLine": 50, "startColumn": 7, - "endLine": 52, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", + "endLine": 50, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", "context": { - "lifecycle": "create-only" + "extra": { + "cpu": 32768, + "memory": 245760 + } } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3047", + "severity": "ERROR", + "message": "Cpu '3 vCPU' is not compatible with Memory '4 GB' for Fargate", + "source": "CFN_LINT", "entity": { "logicalId": "MalformedCpuUnits", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Family", - "category": "Best Practice", - "startLine": 60, + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "category": "Resource", + "startLine": 63, "startColumn": 7, - "endLine": 60, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", + "endLine": 63, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", "context": { - "lifecycle": "create-only" + "extra": { + "cpu": "3 vCPU", + "memory": "4 GB" + } } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3047", + "severity": "ERROR", + "message": "Cpu '0512' is not compatible with Memory '1 GB' for Fargate", + "source": "CFN_LINT", "entity": { - "logicalId": "MalformedCpuUnits", + "logicalId": "NonCanonicalCpuUnits", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 61, + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "category": "Resource", + "startLine": 76, "startColumn": 7, - "endLine": 61, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", + "endLine": 76, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", "context": { - "lifecycle": "create-only" + "extra": { + "cpu": "0512", + "memory": "1 GB" + } } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3047", + "severity": "ERROR", + "message": "Cpu '8192' is not compatible with Memory '9223372036854775807 GB' for Fargate", + "source": "CFN_LINT", "entity": { - "logicalId": "MalformedCpuUnits", + "logicalId": "OverflowingMemoryUnits", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 62, + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "category": "Resource", + "startLine": 89, "startColumn": 7, - "endLine": 62, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", + "endLine": 89, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", "context": { - "lifecycle": "create-only" + "extra": { + "cpu": "8192", + "memory": "9223372036854775807 GB" + } } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3047", + "severity": "ERROR", + "message": "Cpu '512' is not compatible with Memory '512' for Fargate", + "source": "CFN_LINT", "entity": { - "logicalId": "MalformedCpuUnits", + "logicalId": "CpuInvalidThenValid", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", - "category": "Best Practice", - "startLine": 63, + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "category": "Resource", + "startLine": 102, "startColumn": 7, - "endLine": 63, + "endLine": 102, "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", "context": { - "lifecycle": "create-only" + "extra": { + "cpu": "512", + "memory": "512" + } } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3047", + "severity": "ERROR", + "message": "Cpu '512' is not compatible with Memory '512' for Fargate", + "source": "CFN_LINT", "entity": { - "logicalId": "MalformedCpuUnits", + "logicalId": "CpuValidThenInvalid", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", - "category": "Best Practice", - "startLine": 64, + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "category": "Resource", + "startLine": 115, "startColumn": 7, - "endLine": 64, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", + "endLine": 115, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", "context": { - "lifecycle": "create-only" + "extra": { + "cpu": "256", + "memory": "512" + } } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate Cpu value '3 vCPU' is not valid. Valid sizes are ['256', '512', '1024', '2048', '4096', '8192', '16384', '32768'] CPU units or ['0.25', '0.5', '1', '2', '4', '8', '16', '32'] vCPU.", + "source": "CFN_LINT", "entity": { "logicalId": "MalformedCpuUnits", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 65, + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate Cpu size in CPU units or vCPU", + "category": "Resource", + "startLine": 63, "startColumn": 7, - "endLine": 65, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 63, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate Cpu value '0512' is not valid. Valid sizes are ['256', '512', '1024', '2048', '4096', '8192', '16384', '32768'] CPU units or ['0.25', '0.5', '1', '2', '4', '8', '16', '32'] vCPU.", + "source": "CFN_LINT", "entity": { "logicalId": "NonCanonicalCpuUnits", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Family", - "category": "Best Practice", - "startLine": 73, + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate Cpu size in CPU units or vCPU", + "category": "Resource", + "startLine": 76, "startColumn": 7, - "endLine": 73, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 76, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "16384 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "NonCanonicalCpuUnits", + "logicalId": "SixteenVcpuInvalidStep", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 74, + "startLine": 24, "startColumn": 7, - "endLine": 74, - "endColumn": 30, + "endLine": 24, + "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "36864 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "NonCanonicalCpuUnits", + "logicalId": "SixteenVcpuInvalidStep", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 75, + "startLine": 25, "startColumn": 7, - "endLine": 75, - "endColumn": 18, + "endLine": 25, + "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "32768 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "NonCanonicalCpuUnits", + "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 76, + "startLine": 50, "startColumn": 7, - "endLine": 76, + "endLine": 50, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "245760 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "NonCanonicalCpuUnits", + "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 77, + "startLine": 51, "startColumn": 7, - "endLine": 77, + "endLine": 51, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "NonCanonicalCpuUnits", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 78, - "startColumn": 7, - "endLine": 78, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { "ruleId": "I9001", @@ -85233,15 +85136,15 @@ "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OverflowingMemoryUnits", + "logicalId": "EightVcpuInvalidStep", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 86, + "startLine": 8, "startColumn": 7, - "endLine": 86, + "endLine": 8, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85256,15 +85159,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OverflowingMemoryUnits", + "logicalId": "EightVcpuInvalidStep", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 87, + "startLine": 9, "startColumn": 7, - "endLine": 87, + "endLine": 9, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85279,15 +85182,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OverflowingMemoryUnits", + "logicalId": "EightVcpuInvalidStep", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 88, + "startLine": 10, "startColumn": 7, - "endLine": 88, + "endLine": 10, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85302,15 +85205,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OverflowingMemoryUnits", + "logicalId": "EightVcpuInvalidStep", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 89, + "startLine": 11, "startColumn": 7, - "endLine": 89, + "endLine": 11, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85325,15 +85228,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OverflowingMemoryUnits", + "logicalId": "EightVcpuInvalidStep", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 90, + "startLine": 12, "startColumn": 7, - "endLine": 90, + "endLine": 12, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85348,15 +85251,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OverflowingMemoryUnits", + "logicalId": "EightVcpuInvalidStep", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 91, + "startLine": 13, "startColumn": 7, - "endLine": 91, + "endLine": 13, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85371,15 +85274,15 @@ "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CpuInvalidThenValid", + "logicalId": "SixteenVcpuInvalidStep", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 99, + "startLine": 21, "startColumn": 7, - "endLine": 99, + "endLine": 21, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85394,15 +85297,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CpuInvalidThenValid", + "logicalId": "SixteenVcpuInvalidStep", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 100, + "startLine": 22, "startColumn": 7, - "endLine": 100, + "endLine": 22, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85417,15 +85320,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CpuInvalidThenValid", + "logicalId": "SixteenVcpuInvalidStep", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 101, + "startLine": 23, "startColumn": 7, - "endLine": 101, + "endLine": 23, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85440,22 +85343,21 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CpuInvalidThenValid", + "logicalId": "SixteenVcpuInvalidStep", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 102, + "startLine": 24, "startColumn": 7, - "endLine": 102, + "endLine": 24, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseFirst'" + "lifecycle": "create-only" } }, { @@ -85464,15 +85366,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CpuInvalidThenValid", + "logicalId": "SixteenVcpuInvalidStep", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 103, + "startLine": 25, "startColumn": 7, - "endLine": 103, + "endLine": 25, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85487,15 +85389,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CpuInvalidThenValid", + "logicalId": "SixteenVcpuInvalidStep", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 104, + "startLine": 26, "startColumn": 7, - "endLine": 104, + "endLine": 26, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85510,15 +85412,15 @@ "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CpuValidThenInvalid", + "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 112, + "startLine": 34, "startColumn": 7, - "endLine": 112, + "endLine": 34, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85533,15 +85435,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CpuValidThenInvalid", + "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 113, + "startLine": 35, "startColumn": 7, - "endLine": 113, + "endLine": 35, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85556,15 +85458,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CpuValidThenInvalid", + "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 114, + "startLine": 36, "startColumn": 7, - "endLine": 114, + "endLine": 36, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85579,22 +85481,21 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CpuValidThenInvalid", + "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 115, + "startLine": 37, "startColumn": 7, - "endLine": 115, + "endLine": 37, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseFirst'" + "lifecycle": "create-only" } }, { @@ -85603,15 +85504,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CpuValidThenInvalid", + "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 116, + "startLine": 38, "startColumn": 7, - "endLine": 116, + "endLine": 38, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85626,15 +85527,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CpuValidThenInvalid", + "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 117, + "startLine": 39, "startColumn": 7, - "endLine": 117, + "endLine": 39, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85644,444 +85545,114 @@ } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'EightVcpuInvalidStep' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "EightVcpuInvalidStep", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SixteenVcpuInvalidStep' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SixteenVcpuInvalidStep", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ThirtyTwoVcpuUnsupportedSixtyFourGb' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 33, - "startColumn": 5, - "endLine": 33, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ThirtyTwoVcpuUnsupportedTwoFortyGb' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 46, - "startColumn": 5, - "endLine": 46, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MalformedCpuUnits' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MalformedCpuUnits", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 59, - "startColumn": 5, - "endLine": 59, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'NonCanonicalCpuUnits' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "NonCanonicalCpuUnits", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 72, - "startColumn": 5, - "endLine": 72, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 47, + "startColumn": 7, + "endLine": 47, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'OverflowingMemoryUnits' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OverflowingMemoryUnits", + "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 85, - "startColumn": 5, - "endLine": 85, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 48, + "startColumn": 7, + "endLine": 48, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CpuInvalidThenValid' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CpuInvalidThenValid", + "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 98, - "startColumn": 5, - "endLine": 98, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 49, + "startColumn": 7, + "endLine": 49, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CpuValidThenInvalid' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CpuValidThenInvalid", + "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 111, - "startColumn": 5, - "endLine": 111, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/resources/elasticache/cache_cluster_failover.yaml": { - "filePath": "bad/resources/elasticache/cache_cluster_failover.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 30, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "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": "BasicReplicationGroup", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" - }, - "category": "Best Practice", - "startLine": 34, - "startColumn": 3, - "endLine": 34, - "endColumn": 24, - "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": "BasicReplicationGroup", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" - }, - "category": "Best Practice", - "startLine": 34, - "startColumn": 3, - "endLine": 34, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "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": "SecondReplicationGroup", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" - }, - "category": "Best Practice", - "startLine": 53, - "startColumn": 3, - "endLine": 53, - "endColumn": 25, - "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": "SecondReplicationGroup", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" - }, - "category": "Best Practice", - "startLine": 53, - "startColumn": 3, - "endLine": 53, - "endColumn": 25, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "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": "ThirdReplicationGroup", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" - }, - "category": "Best Practice", - "startLine": 72, - "startColumn": 3, - "endLine": 72, - "endColumn": 24, - "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": "ThirdReplicationGroup", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" - }, - "category": "Best Practice", - "startLine": 72, - "startColumn": 3, - "endLine": 72, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "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": "FourtReplicationGroup", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" - }, - "category": "Best Practice", - "startLine": 89, - "startColumn": 3, - "endLine": 89, - "endColumn": 24, - "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": "FourtReplicationGroup", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" - }, - "category": "Best Practice", - "startLine": 89, - "startColumn": 3, - "endLine": 89, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" - }, - { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", - "source": "CFN_LINT", - "entity": { - "logicalId": "BasicReplicationGroup", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" - }, - "propertyPath": "Properties.CacheNodeType", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 40, - "startColumn": 7, - "endLine": 40, - "endColumn": 20, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" - }, - { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", - "source": "CFN_LINT", - "entity": { - "logicalId": "SecondReplicationGroup", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" - }, - "propertyPath": "Properties.CacheNodeType", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 59, - "startColumn": 7, - "endLine": 59, - "endColumn": 20, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" - }, - { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", - "source": "CFN_LINT", - "entity": { - "logicalId": "ThirdReplicationGroup", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" - }, - "propertyPath": "Properties.CacheNodeType", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 78, - "startColumn": 7, - "endLine": 78, - "endColumn": 20, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" - }, - { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", - "source": "CFN_LINT", - "entity": { - "logicalId": "FourtReplicationGroup", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" - }, - "propertyPath": "Properties.CacheNodeType", - "suggestedFix": "Upgrade to a current generation instance type", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 95, + "startLine": 50, "startColumn": 7, - "endLine": 95, - "endColumn": 20, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" + "endLine": 50, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CacheParameterGroupFamily' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyParameterGroup", + "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ParameterGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CacheParameterGroupFamily", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 14, + "startLine": 51, "startColumn": 7, - "endLine": 14, - "endColumn": 32, + "endLine": 51, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -86091,19 +85662,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CacheParameterGroupFamily' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyClusterParameterGroup", + "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ParameterGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CacheParameterGroupFamily", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 22, + "startLine": 52, "startColumn": 7, - "endLine": 22, - "endColumn": 32, + "endLine": 52, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -86113,19 +85685,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CacheParameterGroupFamily' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyNonClusterParameterGroup", + "logicalId": "MalformedCpuUnits", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ParameterGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CacheParameterGroupFamily", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 30, + "startLine": 60, "startColumn": 7, - "endLine": 30, - "endColumn": 32, + "endLine": 60, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -86135,20 +85708,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CacheSubnetGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BasicReplicationGroup", + "logicalId": "MalformedCpuUnits", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CacheSubnetGroupName", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 41, + "startLine": 61, "startColumn": 7, - "endLine": 41, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "endLine": 61, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -86158,20 +85731,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BasicReplicationGroup", + "logicalId": "MalformedCpuUnits", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 46, + "startLine": 62, "startColumn": 7, - "endLine": 46, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "endLine": 62, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -86181,20 +85754,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CacheSubnetGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecondReplicationGroup", + "logicalId": "MalformedCpuUnits", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CacheSubnetGroupName", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 60, + "startLine": 63, "startColumn": 7, - "endLine": 60, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "endLine": 63, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -86204,20 +85777,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecondReplicationGroup", + "logicalId": "MalformedCpuUnits", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.Memory", "category": "Best Practice", "startLine": 64, "startColumn": 7, "endLine": 64, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -86227,20 +85800,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CacheSubnetGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirdReplicationGroup", + "logicalId": "MalformedCpuUnits", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CacheSubnetGroupName", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 79, + "startLine": 65, "startColumn": 7, - "endLine": 79, + "endLine": 65, "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -86250,20 +85823,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirdReplicationGroup", + "logicalId": "NonCanonicalCpuUnits", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 82, + "startLine": 73, "startColumn": 7, - "endLine": 82, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "endLine": 73, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -86273,20 +85846,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CacheSubnetGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FourtReplicationGroup", + "logicalId": "NonCanonicalCpuUnits", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CacheSubnetGroupName", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 96, + "startLine": 74, "startColumn": 7, - "endLine": 96, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "endLine": 74, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -86296,20 +85869,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FourtReplicationGroup", + "logicalId": "NonCanonicalCpuUnits", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 100, + "startLine": 75, "startColumn": 7, - "endLine": 100, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "endLine": 75, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -86317,669 +85890,484 @@ } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyParameterGroup' of type 'AWS::ElastiCache::ParameterGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MyParameterGroup", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ParameterGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyClusterParameterGroup' of type 'AWS::ElastiCache::ParameterGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MyClusterParameterGroup", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ParameterGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyNonClusterParameterGroup' of type 'AWS::ElastiCache::ParameterGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MyNonClusterParameterGroup", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ParameterGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 28, - "startColumn": 5, - "endLine": 28, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BasicReplicationGroup' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BasicReplicationGroup", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 36, - "startColumn": 5, - "endLine": 36, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SecondReplicationGroup' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SecondReplicationGroup", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 55, - "startColumn": 5, - "endLine": 55, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ThirdReplicationGroup' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirdReplicationGroup", + "logicalId": "NonCanonicalCpuUnits", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 74, - "startColumn": 5, - "endLine": 74, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 76, + "startColumn": 7, + "endLine": 76, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FourtReplicationGroup' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FourtReplicationGroup", + "logicalId": "NonCanonicalCpuUnits", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 91, - "startColumn": 5, - "endLine": 91, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/resources/iam/iam_policy.yaml": { - "filePath": "bad/resources/iam/iam_policy.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 4, - "errors": 17, - "warnings": 1, - "informational": 2, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'PolicyName' is a required property", - "source": "SCHEMA", - "entity": { - "logicalId": "rIamPolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" - }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'PolicyName'", - "category": "Schema", - "startLine": 37, - "startColumn": 5, - "endLine": 37, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Required property missing", - "phase": "SCHEMA" - }, - { - "ruleId": "F3012", - "severity": "FATAL", - "message": "[{'__conditional': 'cCondition', '__if_true': {'Statement': {}}, '__if_false': {'Statement': []}}] is not of type 'object'", - "source": "SCHEMA", - "entity": { - "logicalId": "rIamPolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" - }, - "propertyPath": "Properties.PolicyDocument", - "category": "Schema", - "startLine": 38, + "startLine": 77, "startColumn": 7, - "endLine": 38, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Property type mismatch", + "endLine": 77, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": [ - { - "Statement": {} - } - ], - "expectedConstraint": "object" + "lifecycle": "create-only" } }, { - "ruleId": "F3017", - "severity": "FATAL", - "message": "Value is not valid under any of the 3 anyOf schemas for AWS::IAM::Policy (0 branches matched; at least one is required). Required property combinations: ['Groups'] or ['Roles'] or ['Users']. Branch failures: branch 1: 'Users' is a required property; branch 2: 'Groups' is a required property; branch 3: 'Roles' is a required property.", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rIamPolicy", + "logicalId": "NonCanonicalCpuUnits", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties", - "category": "Schema", - "startLine": 37, - "startColumn": 5, - "endLine": 37, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Value not valid under anyOf", + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 78, + "startColumn": 7, + "endLine": 78, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "expectedConstraint": "at least one anyOf branch", - "extra": { - "branchCount": 3, - "branchFailures": [ - { - "branch": 1, - "reasons": [ - { - "message": "'Users' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 2, - "reasons": [ - { - "message": "'Groups' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 3, - "reasons": [ - { - "message": "'Roles' is a required property", - "propertyPath": "Properties" - } - ] - } - ], - "compositionKind": "anyOf", - "matchCount": 0, - "matchOutcome": "zeroMatches", - "validPropertyCombinations": [ - [ - "Groups" - ], - [ - "Roles" - ], - [ - "Users" - ] - ] - } + "lifecycle": "create-only" } }, { - "ruleId": "F3033", - "severity": "FATAL", - "message": "length 91 exceeds maximum 64", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rIamRole", + "logicalId": "OverflowingMemoryUnits", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RoleName", - "category": "Schema", - "startLine": 9, + "propertyPath": "Properties.Family", + "category": "Best Practice", + "startLine": 86, "startColumn": 7, - "endLine": 9, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "String length out of bounds", + "endLine": 86, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "jeAoXmadgEUYzfalKtuYjeAoXmadgEUYzfalKtuYjeAoXmadgEUYzfalKtuYjeAoXmadgEUYzfalKtuYBadRoleName", - "extra": { - "actual_length": 91, - "max_length": 64, - "min_length": 1 - } - } - }, - { - "ruleId": "E1028", - "severity": "ERROR", - "message": "Fn::If condition 'cCondition' does not exist in Conditions section", - "source": "SCHEMA", - "entity": { - "logicalId": "rIamPolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" - }, - "propertyPath": "Properties.PolicyDocument.0.Fn::If.0", - "category": "Intrinsic Function", - "startLine": 40, - "startColumn": 11, - "endLine": 40, - "endColumn": 12, - "ruleDescription": "Fn::If condition must exist in Conditions section", - "phase": "PARSE" - }, - { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'blah' is not one of ['2008-10-17', '2012-10-17']", - "source": "CFN_LINT", - "entity": { - "logicalId": "rIamRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Policies.0.PolicyDocument.Version", - "category": "Resource", - "startLine": 14, - "startColumn": 11, - "endLine": 14, - "endColumn": 18, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" - }, - { - "ruleId": "E3510", - "severity": "ERROR", - "message": "Additional properties are not allowed ('BadProperty' was unexpected)", - "source": "CFN_LINT", + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rIamRole", + "logicalId": "OverflowingMemoryUnits", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Policies.0.PolicyDocument.BadProperty", - "category": "Resource", - "startLine": 15, - "startColumn": 11, - "endLine": 15, - "endColumn": 22, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.RequiresCompatibilities", + "category": "Best Practice", + "startLine": 87, + "startColumn": 7, + "endLine": 87, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'Test' is not of type 'object', 'array'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rIamRole", + "logicalId": "OverflowingMemoryUnits", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Policies.0.PolicyDocument.Statement", - "category": "Resource", - "startLine": 16, - "startColumn": 11, - "endLine": 16, - "endColumn": 20, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.NetworkMode", + "category": "Best Practice", + "startLine": 88, + "startColumn": 7, + "endLine": 88, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'blah' is not one of ['2008-10-17', '2012-10-17']", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rIamUser", + "logicalId": "OverflowingMemoryUnits", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Version", - "category": "Resource", - "startLine": 21, - "startColumn": 9, - "endLine": 21, - "endColumn": 16, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.Cpu", + "category": "Best Practice", + "startLine": 89, + "startColumn": 7, + "endLine": 89, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "Only one of ['Action', 'NotAction'] is a required property", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rIamUser", + "logicalId": "OverflowingMemoryUnits", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Statement.0", - "category": "Resource", - "startLine": 23, - "startColumn": 19, - "endLine": 23, - "endColumn": 20, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.Memory", + "category": "Best Practice", + "startLine": 90, + "startColumn": 7, + "endLine": 90, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'NotAllow' is not one of ['Allow', 'Deny']", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rIamUser", + "logicalId": "OverflowingMemoryUnits", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Effect", - "category": "Resource", - "startLine": 24, - "startColumn": 11, - "endLine": 24, - "endColumn": 17, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 91, + "startColumn": 7, + "endLine": 91, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "Additional properties are not allowed ('Principal' was unexpected)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rIamUser", + "logicalId": "CpuInvalidThenValid", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Principal", - "category": "Resource", - "startLine": 25, - "startColumn": 11, - "endLine": 25, - "endColumn": 20, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.Family", + "category": "Best Practice", + "startLine": 99, + "startColumn": 7, + "endLine": 99, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "{\"Effect\":\"Allow\"} is not of type 'string'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rIamUser", + "logicalId": "CpuInvalidThenValid", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Statement.1.Resource.0", - "category": "Resource", - "startLine": 30, - "startColumn": 19, - "endLine": 30, - "endColumn": 20, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.RequiresCompatibilities", + "category": "Best Practice", + "startLine": 100, + "startColumn": 7, + "endLine": 100, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "{\"Effect\":\"Allow\",\"Action\":[\"cloudwatch:*\"],\"Resource\":\"*\"} is not of type 'string'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rIamUser", + "logicalId": "CpuInvalidThenValid", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Statement.1.Resource.1", - "category": "Resource", - "startLine": 31, - "startColumn": 19, - "endLine": 31, - "endColumn": 20, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.NetworkMode", + "category": "Best Practice", + "startLine": 101, + "startColumn": 7, + "endLine": 101, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "[{\"Statement\":{}}] is not of type 'object'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rIamPolicy", + "logicalId": "CpuInvalidThenValid", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument", - "category": "Resource", - "startLine": 38, + "propertyPath": "Properties.Cpu", + "category": "Best Practice", + "startLine": 102, "startColumn": 7, - "endLine": 38, - "endColumn": 21, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "endLine": 102, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseFirst'" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "Only one of ['Action', 'NotAction'] is a required property", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rIamPolicyExtraThings", + "logicalId": "CpuInvalidThenValid", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Action", - "category": "Resource", - "startLine": 54, - "startColumn": 11, - "endLine": 54, - "endColumn": 17, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.Memory", + "category": "Best Practice", + "startLine": 103, + "startColumn": 7, + "endLine": 103, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "Only one of ['Action', 'NotAction'] is a required property", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rIamPolicyExtraThings", + "logicalId": "CpuInvalidThenValid", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.NotAction", - "category": "Resource", - "startLine": 56, - "startColumn": 11, - "endLine": 56, - "endColumn": 20, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 104, + "startColumn": 7, + "endLine": 104, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "Only one of ['Resource', 'NotResource'] is a required property", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rIamPolicyExtraThings", + "logicalId": "CpuValidThenInvalid", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Resource", - "category": "Resource", - "startLine": 58, - "startColumn": 11, - "endLine": 58, - "endColumn": 19, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.Family", + "category": "Best Practice", + "startLine": 112, + "startColumn": 7, + "endLine": 112, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "Only one of ['Resource', 'NotResource'] is a required property", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rIamPolicyExtraThings", + "logicalId": "CpuValidThenInvalid", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.NotResource", - "category": "Resource", - "startLine": 60, - "startColumn": 11, - "endLine": 60, - "endColumn": 22, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.RequiresCompatibilities", + "category": "Best Practice", + "startLine": 113, + "startColumn": 7, + "endLine": 113, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'arn' does not match '^(arn:(aws[A-Za-z\\-]*?|[A-Za-z?*\\-]*[?*][A-Za-z?*\\-]*):[^:*?]+:[^:]*(:(?:\\d{12}|\\*|aws)?:.+|)|\\*)$'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rIamPolicyExtraThings", + "logicalId": "CpuValidThenInvalid", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.NotResource.0", - "category": "Resource", - "startLine": 61, - "startColumn": 13, - "endLine": 61, - "endColumn": 14, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.NetworkMode", + "category": "Best Practice", + "startLine": 114, + "startColumn": 7, + "endLine": 114, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3530", - "severity": "ERROR", - "message": "'Statement' is a required property", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rIamRole", + "logicalId": "CpuValidThenInvalid", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.AssumeRolePolicyDocument", - "suggestedFix": "Add a Statement array to the AssumeRolePolicyDocument", - "category": "Resource", - "startLine": 10, + "propertyPath": "Properties.Cpu", + "category": "Best Practice", + "startLine": 115, "startColumn": 7, - "endLine": 10, - "endColumn": 31, - "ruleDescription": "Validate IAM trust policies", - "phase": "LINT" + "endLine": 115, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseFirst'" + } }, { - "ruleId": "W2512", - "severity": "WARN", - "message": "IAM policy uses NotAction which grants all actions except those listed - consider using Action instead", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rIamPolicyExtraThings", + "logicalId": "CpuValidThenInvalid", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "category": "Security", - "startLine": 43, - "startColumn": 3, - "endLine": 43, - "endColumn": 24, - "ruleDescription": "IAM policy with NotAction", - "phase": "LINT" + "propertyPath": "Properties.Memory", + "category": "Best Practice", + "startLine": 116, + "startColumn": 7, + "endLine": 116, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rIamRole", + "logicalId": "CpuValidThenInvalid", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 9, + "startLine": 117, "startColumn": 7, - "endLine": 9, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 117, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -86989,132 +86377,119 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'rIamRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'EightVcpuInvalidStep' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rIamRole", + "logicalId": "EightVcpuInvalidStep", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 8, + "startLine": 7, "startColumn": 5, - "endLine": 8, + "endLine": 7, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/resources/iam/iam_policy_conditional_policies.yaml": { - "filePath": "bad/resources/iam/iam_policy_conditional_policies.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 2, - "warnings": 2, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'not-an-arn' does not match '^(arn:(aws[A-Za-z\\-]*?|[A-Za-z?*\\-]*[?*][A-Za-z?*\\-]*):[^:*?]+:[^:]*(:(?:\\d{12}|\\*|aws)?:.+|)|\\*)$'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SixteenVcpuInvalidStep' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "RoleConditionalPolicies", + "logicalId": "SixteenVcpuInvalidStep", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Policies.0.PolicyDocument.Statement.0.Resource", - "category": "Resource", - "startLine": 34, - "startColumn": 19, - "endLine": 34, - "endColumn": 27, - "ruleDescription": "Validate identity based IAM policies", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 20, + "startColumn": 5, + "endLine": 20, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'also-bad' does not match '^(arn:(aws[A-Za-z\\-]*?|[A-Za-z?*\\-]*[?*][A-Za-z?*\\-]*):[^:*?]+:[^:]*(:(?:\\d{12}|\\*|aws)?:.+|)|\\*)$'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ThirtyTwoVcpuUnsupportedSixtyFourGb' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "RoleConditionalPolicies", + "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Policies.0.PolicyDocument.Statement.0.Resource", - "category": "Resource", - "startLine": 48, - "startColumn": 19, - "endLine": 48, - "endColumn": 27, - "ruleDescription": "Validate identity based IAM policies", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 33, + "startColumn": 5, + "endLine": 33, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W2512", - "severity": "WARN", - "message": "IAM policy uses NotAction which grants all actions except those listed - consider using Action instead", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ThirtyTwoVcpuUnsupportedTwoFortyGb' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RoleNotActionConditional", + "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "category": "Security", - "startLine": 51, - "startColumn": 3, - "endLine": 51, - "endColumn": 27, - "ruleDescription": "IAM policy with NotAction", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 46, + "startColumn": 5, + "endLine": 46, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W2512", - "severity": "WARN", - "message": "IAM policy uses NotAction which grants all actions except those listed - consider using Action instead", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MalformedCpuUnits' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "PolicySingleStatement", + "logicalId": "MalformedCpuUnits", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "category": "Security", - "startLine": 79, - "startColumn": 3, - "endLine": 79, - "endColumn": 24, - "ruleDescription": "IAM policy with NotAction", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 59, + "startColumn": 5, + "endLine": 59, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'RoleConditionalPolicies' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'NonCanonicalCpuUnits' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RoleConditionalPolicies", + "logicalId": "NonCanonicalCpuUnits", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 18, + "startLine": 72, "startColumn": 5, - "endLine": 18, + "endLine": 72, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -87122,96 +86497,75 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'RoleNotActionConditional' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'OverflowingMemoryUnits' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RoleNotActionConditional", + "logicalId": "OverflowingMemoryUnits", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 53, + "startLine": 85, "startColumn": 5, - "endLine": 53, + "endLine": 85, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/resources/iam/identity_policy_conditional_novalue_e3510.yaml": { - "filePath": "bad/resources/iam/identity_policy_conditional_novalue_e3510.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'SomeOptionalParameter' does not match '^(arn:(aws[A-Za-z\\-]*?|[A-Za-z?*\\-]*[?*][A-Za-z?*\\-]*):[^:*?]+:[^:]*(:(?:\\d{12}|\\*|aws)?:.+|)|\\*)$'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CpuInvalidThenValid' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "SomeManagedPolicy", + "logicalId": "CpuInvalidThenValid", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Statement.1.Resource.0", - "category": "Resource", - "startLine": 29, - "startColumn": 19, - "endLine": 29, - "endColumn": 20, - "ruleDescription": "Validate identity based IAM policies", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 98, + "startColumn": 5, + "endLine": 98, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "message": "Resource 'CpuValidThenInvalid' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SomeManagedPolicy", + "logicalId": "CpuValidThenInvalid", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Description", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 111, + "startColumn": 5, + "endLine": 111, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "bad/resources/iam/identity_policy_e3510.yaml": { - "filePath": "bad/resources/iam/identity_policy_e3510.yaml", + "bad/resources/elasticache/cache_cluster_failover.yaml": { + "filePath": "bad/resources/elasticache/cache_cluster_failover.yaml", "status": "OK", "metadata": { "resourcesScanned": 7, "counts": { - "fatal": 3, - "errors": 8, - "warnings": 2, - "informational": 9, + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 30, "debug": 0 }, "suppressed": 0, @@ -87220,438 +86574,245 @@ }, "diagnostics": [ { - "ruleId": "F3017", - "severity": "FATAL", - "message": "Value is not valid under any of the 3 anyOf schemas for AWS::IAM::Policy (0 branches matched; at least one is required). Required property combinations: ['Groups'] or ['Roles'] or ['Users']. Branch failures: branch 1: 'Users' is a required property; branch 2: 'Groups' is a required property; branch 3: 'Roles' is a required property.", - "source": "SCHEMA", - "entity": { - "logicalId": "PolicyEmptyAction", - "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" - }, - "propertyPath": "Properties", - "category": "Schema", - "startLine": 15, - "startColumn": 5, - "endLine": 15, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Value not valid under anyOf", - "phase": "SCHEMA", - "context": { - "expectedConstraint": "at least one anyOf branch", - "extra": { - "branchCount": 3, - "branchFailures": [ - { - "branch": 1, - "reasons": [ - { - "message": "'Users' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 2, - "reasons": [ - { - "message": "'Groups' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 3, - "reasons": [ - { - "message": "'Roles' is a required property", - "propertyPath": "Properties" - } - ] - } - ], - "compositionKind": "anyOf", - "matchCount": 0, - "matchOutcome": "zeroMatches", - "validPropertyCombinations": [ - [ - "Groups" - ], - [ - "Roles" - ], - [ - "Users" - ] - ] - } - } - }, - { - "ruleId": "F3017", - "severity": "FATAL", - "message": "Value is not valid under any of the 3 anyOf schemas for AWS::IAM::Policy (0 branches matched; at least one is required). Required property combinations: ['Groups'] or ['Roles'] or ['Users']. Branch failures: branch 1: 'Users' is a required property; branch 2: 'Groups' is a required property; branch 3: 'Roles' is a required property.", - "source": "SCHEMA", - "entity": { - "logicalId": "PolicyWithJoinResource", - "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" - }, - "propertyPath": "Properties", - "category": "Schema", - "startLine": 59, - "startColumn": 5, - "endLine": 59, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Value not valid under anyOf", - "phase": "SCHEMA", - "context": { - "expectedConstraint": "at least one anyOf branch", - "extra": { - "branchCount": 3, - "branchFailures": [ - { - "branch": 1, - "reasons": [ - { - "message": "'Users' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 2, - "reasons": [ - { - "message": "'Groups' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 3, - "reasons": [ - { - "message": "'Roles' is a required property", - "propertyPath": "Properties" - } - ] - } - ], - "compositionKind": "anyOf", - "matchCount": 0, - "matchOutcome": "zeroMatches", - "validPropertyCombinations": [ - [ - "Groups" - ], - [ - "Roles" - ], - [ - "Users" - ] - ] - } - } - }, - { - "ruleId": "F3031", - "severity": "FATAL", - "message": "'arn:aws:sso:::instance/ssoins-12345' does not match pattern 'arn:aws(-[a-z]{1,5}){0,3}:sso:::instance/(sso)?ins-[a-zA-Z0-9-.]{16}'", - "source": "SCHEMA", - "entity": { - "logicalId": "PermissionSetBadPolicy", - "entityType": "Resource", - "resourceType": "AWS::SSO::PermissionSet" - }, - "propertyPath": "Properties.InstanceArn", - "category": "Schema", - "startLine": 89, - "startColumn": 7, - "endLine": 89, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sso/aws-sso-permissionset", - "ruleDescription": "Value does not match pattern", - "phase": "SCHEMA", - "context": { - "actualValue": "arn:aws:sso:::instance/ssoins-12345", - "expectedConstraint": "arn:aws(-[a-z]{1,5}){0,3}:sso:::instance/(sso)?ins-[a-zA-Z0-9-.]{16}" - } - }, - { - "ruleId": "E3510", - "severity": "ERROR", - "message": "[] is too short (minimum 1 item)", - "source": "CFN_LINT", - "entity": { - "logicalId": "PolicyEmptyAction", - "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" - }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Action", - "category": "Resource", - "startLine": 21, - "startColumn": 13, - "endLine": 21, - "endColumn": 19, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" - }, - { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'ReadOnly' is a duplicate of Statement.0.Sid", + "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": "PolicyDuplicateSid", + "logicalId": "BasicReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.PolicyDocument.Statement.1.Sid", - "category": "Resource", - "startLine": 35, - "startColumn": 13, - "endLine": 35, - "endColumn": 16, - "ruleDescription": "Validate identity based IAM policies", + "category": "Best Practice", + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "Additional properties are not allowed ('Id' was unexpected)", + "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": "PolicyBadIdAndCondition", + "logicalId": "BasicReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::IAM::RolePolicy" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.PolicyDocument.Id", - "category": "Resource", - "startLine": 47, - "startColumn": 9, - "endLine": 47, - "endColumn": 11, - "ruleDescription": "Validate identity based IAM policies", + "category": "Best Practice", + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'InvalidOp' is not a valid IAM condition operator", + "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": "PolicyBadIdAndCondition", + "logicalId": "SecondReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::IAM::RolePolicy" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Condition.InvalidOp", - "category": "Resource", + "category": "Best Practice", "startLine": 53, - "startColumn": 15, + "startColumn": 3, "endLine": 53, - "endColumn": 24, - "ruleDescription": "Validate identity based IAM policies", + "endColumn": 25, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'DefinitelyNotAllow' is not one of ['Allow', 'Deny']", - "source": "CFN_LINT", - "entity": { - "logicalId": "PolicyDynamicActionBadEffect", - "entityType": "Resource", - "resourceType": "AWS::IAM::GroupPolicy" - }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Effect", - "category": "Resource", - "startLine": 81, - "startColumn": 13, - "endLine": 81, - "endColumn": 19, - "ruleDescription": "Validate identity based IAM policies", + "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": "SecondReplicationGroup", + "entityType": "Resource", + "resourceType": "AWS::ElastiCache::ReplicationGroup" + }, + "category": "Best Practice", + "startLine": 53, + "startColumn": 3, + "endLine": 53, + "endColumn": 25, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "Only one of ['Action', 'NotAction'] is a required property", + "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": "PermissionSetBadPolicy", + "logicalId": "ThirdReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::SSO::PermissionSet" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.InlinePolicy.Statement.0.Action", - "category": "Resource", - "startLine": 94, - "startColumn": 13, - "endLine": 94, - "endColumn": 19, - "ruleDescription": "Validate identity based IAM policies", + "category": "Best Practice", + "startLine": 72, + "startColumn": 3, + "endLine": 72, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "Only one of ['Action', 'NotAction'] is a required property", + "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": "PermissionSetBadPolicy", + "logicalId": "ThirdReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::SSO::PermissionSet" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.InlinePolicy.Statement.0.NotAction", - "category": "Resource", - "startLine": 95, - "startColumn": 13, - "endLine": 95, - "endColumn": 22, - "ruleDescription": "Validate identity based IAM policies", + "category": "Best Practice", + "startLine": 72, + "startColumn": 3, + "endLine": 72, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'invalid-version' is not one of ['2008-10-17', '2012-10-17']", + "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": "UserInlinePolicy", + "logicalId": "FourtReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::IAM::User" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Policies.0.PolicyDocument.Version", - "category": "Resource", - "startLine": 105, - "startColumn": 13, - "endLine": 105, - "endColumn": 20, - "ruleDescription": "Validate identity based IAM policies", + "category": "Best Practice", + "startLine": 89, + "startColumn": 3, + "endLine": 89, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W2512", - "severity": "WARN", - "message": "IAM policy uses NotAction which grants all actions except those listed - consider using Action instead", - "source": "ENGINE", + "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": "PermissionSetBadPolicy", + "logicalId": "FourtReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::SSO::PermissionSet" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "category": "Security", - "startLine": 86, + "category": "Best Practice", + "startLine": 89, "startColumn": 3, - "endLine": 86, - "endColumn": 25, - "ruleDescription": "IAM policy with NotAction", + "endLine": 89, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'InstanceArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", - "source": "ENGINE", + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "PermissionSetBadPolicy", + "logicalId": "BasicReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::SSO::PermissionSet" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.InstanceArn", + "propertyPath": "Properties.CacheNodeType", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 89, + "startLine": 40, "startColumn": 7, - "endLine": 89, - "endColumn": 18, - "ruleDescription": "Hardcoded ARN property", + "endLine": 40, + "endColumn": 20, + "ruleDescription": "Checks for legacy instance type generations", "phase": "LINT" }, { - "ruleId": "I1022", + "ruleId": "I3100", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", "source": "CFN_LINT", "entity": { - "logicalId": "PolicyWithJoinResource", + "logicalId": "SecondReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Resource.Fn::Join", - "category": "Intrinsic Function", - "startLine": 67, - "startColumn": 15, - "endLine": 67, - "endColumn": 23, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.CacheNodeType", + "suggestedFix": "Upgrade to a current generation instance type", + "category": "Best Practice", + "startLine": 59, + "startColumn": 7, + "endLine": 59, + "endColumn": 20, + "ruleDescription": "Checks for legacy instance type generations", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3100", "severity": "INFO", - "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "PolicyBadIdAndCondition", + "logicalId": "ThirdReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::IAM::RolePolicy" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.PolicyName", + "propertyPath": "Properties.CacheNodeType", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 44, + "startLine": 78, "startColumn": 7, - "endLine": 44, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 78, + "endColumn": 20, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3100", "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "PolicyBadIdAndCondition", + "logicalId": "FourtReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::IAM::RolePolicy" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.CacheNodeType", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 45, + "startLine": 95, "startColumn": 7, - "endLine": 45, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 95, + "endColumn": 20, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'CacheParameterGroupFamily' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PolicyDynamicActionBadEffect", + "logicalId": "MyParameterGroup", "entityType": "Resource", - "resourceType": "AWS::IAM::GroupPolicy" + "resourceType": "AWS::ElastiCache::ParameterGroup" }, - "propertyPath": "Properties.GroupName", + "propertyPath": "Properties.CacheParameterGroupFamily", "category": "Best Practice", - "startLine": 76, + "startLine": 14, "startColumn": 7, - "endLine": 76, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 14, + "endColumn": 32, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -87661,20 +86822,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", + "message": "Property 'CacheParameterGroupFamily' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PolicyDynamicActionBadEffect", + "logicalId": "MyClusterParameterGroup", "entityType": "Resource", - "resourceType": "AWS::IAM::GroupPolicy" + "resourceType": "AWS::ElastiCache::ParameterGroup" }, - "propertyPath": "Properties.PolicyName", + "propertyPath": "Properties.CacheParameterGroupFamily", "category": "Best Practice", - "startLine": 77, + "startLine": 22, "startColumn": 7, - "endLine": 77, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 22, + "endColumn": 32, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -87684,20 +86844,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'CacheParameterGroupFamily' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionSetBadPolicy", + "logicalId": "MyNonClusterParameterGroup", "entityType": "Resource", - "resourceType": "AWS::SSO::PermissionSet" + "resourceType": "AWS::ElastiCache::ParameterGroup" }, - "propertyPath": "Properties.InstanceArn", + "propertyPath": "Properties.CacheParameterGroupFamily", "category": "Best Practice", - "startLine": 89, + "startLine": 30, "startColumn": 7, - "endLine": 89, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sso/aws-sso-permissionset", + "endLine": 30, + "endColumn": 32, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -87707,202 +86866,66 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'CacheSubnetGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionSetBadPolicy", + "logicalId": "BasicReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::SSO::PermissionSet" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.CacheSubnetGroupName", "category": "Best Practice", - "startLine": 90, + "startLine": 41, "startColumn": 7, - "endLine": 90, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sso/aws-sso-permissionset", + "endLine": 41, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'PermissionSetBadPolicy' of type 'AWS::SSO::PermissionSet' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "PermissionSetBadPolicy", - "entityType": "Resource", - "resourceType": "AWS::SSO::PermissionSet" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 88, - "startColumn": 5, - "endLine": 88, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'UserInlinePolicy' of type 'AWS::IAM::User' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "UserInlinePolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::User" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 101, - "startColumn": 5, - "endLine": 101, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/resources/iam/identity_policy_wildcard_service.yaml": { - "filePath": "bad/resources/iam/identity_policy_wildcard_service.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'arn:aws:*:::example-bucket/*' does not match '^(arn:(aws[A-Za-z\\-]*?|[A-Za-z?*\\-]*[?*][A-Za-z?*\\-]*):[^:*?]+:[^:]*(:(?:\\d{12}|\\*|aws)?:.+|)|\\*)$'", - "source": "CFN_LINT", - "entity": { - "logicalId": "WildcardServicePolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" - }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Resource", - "category": "Resource", - "startLine": 13, - "startColumn": 13, - "endLine": 13, - "endColumn": 21, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" - } - ] - }, - "bad/resources/iam/managed_policy_description.yaml": { - "filePath": "bad/resources/iam/managed_policy_description.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SomeManagedPolicy", + "logicalId": "BasicReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Description", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 7, + "startLine": 46, "startColumn": 7, - "endLine": 7, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", + "endLine": 46, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } - } - ] - }, - "bad/resources/iam/ref_with_path.yaml": { - "filePath": "bad/resources/iam/ref_with_path.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 11, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3050", - "severity": "ERROR", - "message": "Ref to IAM role 'CodeBuildRole' with Path '/test/' - use GetAtt CodeBuildRole.Arn instead", - "source": "CFN_LINT", - "entity": { - "logicalId": "CodeBuildProject", - "entityType": "Resource", - "resourceType": "AWS::CodeBuild::Project" - }, - "propertyPath": "Properties.ServiceRole", - "suggestedFix": "Switch from Ref to !GetAtt .Arn when Path is not '/'", - "category": "Resource", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 18, - "ruleDescription": "Check if REFing to a IAM resource with path set", - "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'CacheSubnetGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CodeBuildRole", + "logicalId": "SecondReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.CacheSubnetGroupName", "category": "Best Practice", - "startLine": 43, + "startLine": 60, "startColumn": 7, - "endLine": 43, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 60, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -87912,19 +86935,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CodeBuildVPC", + "logicalId": "SecondReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Port", "category": "Best Practice", "startLine": 64, "startColumn": 7, "endLine": 64, - "endColumn": 16, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -87934,42 +86958,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'CacheSubnetGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CodeBuildSubnet", + "logicalId": "ThirdReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.CacheSubnetGroupName", "category": "Best Practice", - "startLine": 73, + "startLine": 79, "startColumn": 7, - "endLine": 73, - "endColumn": 12, + "endLine": 79, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'CodeBuildVPC'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CodeBuildSubnet", + "logicalId": "ThirdReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 75, + "startLine": 82, "startColumn": 7, - "endLine": 75, - "endColumn": 16, + "endLine": 82, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -87979,19 +87004,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'CacheSubnetGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CodeBuildSecurityGroup", + "logicalId": "FourtReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.GroupName", + "propertyPath": "Properties.CacheSubnetGroupName", "category": "Best Practice", - "startLine": 79, + "startLine": 96, "startColumn": 7, - "endLine": 79, - "endColumn": 16, + "endLine": 96, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -88001,19 +87027,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CodeBuildSecurityGroup", + "logicalId": "FourtReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 80, + "startLine": 100, "startColumn": 7, - "endLine": 80, - "endColumn": 23, + "endLine": 100, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -88021,44 +87048,41 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyParameterGroup' of type 'AWS::ElastiCache::ParameterGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CodeBuildSecurityGroup", + "logicalId": "MyParameterGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ElastiCache::ParameterGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 81, - "startColumn": 7, - "endLine": 81, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'CodeBuildVPC'" - } + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CodeBuildProject' of type 'AWS::CodeBuild::Project' supports Tags but none are configured", + "message": "Resource 'MyClusterParameterGroup' of type 'AWS::ElastiCache::ParameterGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CodeBuildProject", + "logicalId": "MyClusterParameterGroup", "entityType": "Resource", - "resourceType": "AWS::CodeBuild::Project" + "resourceType": "AWS::ElastiCache::ParameterGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, + "startLine": 20, "startColumn": 5, - "endLine": 6, + "endLine": 20, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -88066,19 +87090,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CodeBuildRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'MyNonClusterParameterGroup' of type 'AWS::ElastiCache::ParameterGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CodeBuildRole", + "logicalId": "MyNonClusterParameterGroup", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElastiCache::ParameterGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 35, + "startLine": 28, "startColumn": 5, - "endLine": 35, + "endLine": 28, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -88086,19 +87110,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CodeBuildSubnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'BasicReplicationGroup' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CodeBuildSubnet", + "logicalId": "BasicReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 72, + "startLine": 36, "startColumn": 5, - "endLine": 72, + "endLine": 36, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -88106,58 +87130,39 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CodeBuildSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'SecondReplicationGroup' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CodeBuildSecurityGroup", + "logicalId": "SecondReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 78, + "startLine": 55, "startColumn": 5, - "endLine": 78, + "endLine": 55, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/resources/iam/resource_policy.yaml": { - "filePath": "bad/resources/iam/resource_policy.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ecr1' of type 'AWS::ECR::Repository' supports Tags but none are configured", + "message": "Resource 'ThirdReplicationGroup' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ecr1", + "logicalId": "ThirdReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::ECR::Repository" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, + "startLine": 74, "startColumn": 5, - "endLine": 6, + "endLine": 74, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -88165,35 +87170,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ecr2' of type 'AWS::ECR::Repository' supports Tags but none are configured", + "message": "Resource 'FourtReplicationGroup' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ecr2", + "logicalId": "FourtReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::ECR::Repository" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 19, + "startLine": 91, "startColumn": 5, - "endLine": 19, + "endLine": 91, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/resources/lambda/function_property_value_limits.yaml": { - "filePath": "bad/resources/lambda/function_property_value_limits.yaml", + "bad/resources/iam/iam_policy.yaml": { + "filePath": "bad/resources/iam/iam_policy.yaml", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 4, "counts": { - "fatal": 6, - "errors": 5, - "warnings": 0, - "informational": 6, + "fatal": 4, + "errors": 17, + "warnings": 1, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -88202,306 +87207,510 @@ }, "diagnostics": [ { - "ruleId": "F1020", - "severity": "FATAL", - "message": "Fn::GetAtt references non-existent resource 'myLambdaExecutionRole'", - "source": "SCHEMA", - "entity": { - "logicalId": "myLambdaFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "suggestedFix": "Check that the GetAtt target resource exists in the template", - "category": "Intrinsic Function", - "startLine": 6, - "startColumn": 3, - "endLine": 6, - "endColumn": 19, - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" - }, - { - "ruleId": "F1020", - "severity": "FATAL", - "message": "Fn::GetAtt references non-existent resource 'myLambdaExecutionRole'", - "source": "SCHEMA", - "entity": { - "logicalId": "myLambdaFunction2", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "suggestedFix": "Check that the GetAtt target resource exists in the template", - "category": "Intrinsic Function", - "startLine": 16, - "startColumn": 3, - "endLine": 16, - "endColumn": 20, - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" - }, - { - "ruleId": "F1020", + "ruleId": "F3003", "severity": "FATAL", - "message": "Fn::GetAtt references non-existent resource 'myLambdaExecutionRole'", + "message": "'PolicyName' is a required property", "source": "SCHEMA", "entity": { - "logicalId": "myLambdaFunction3", + "logicalId": "rIamPolicy", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Policy" }, - "suggestedFix": "Check that the GetAtt target resource exists in the template", - "category": "Intrinsic Function", - "startLine": 26, - "startColumn": 3, - "endLine": 26, - "endColumn": 20, - "ruleDescription": "Ref/GetAtt target must exist", + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'PolicyName'", + "category": "Schema", + "startLine": 37, + "startColumn": 5, + "endLine": 37, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Required property missing", "phase": "SCHEMA" }, { - "ruleId": "F3031", + "ruleId": "F3012", "severity": "FATAL", - "message": "'DXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheLambdaName' does not match pattern '^([a-zA-Z0-9_-]{1,64}|arn:[a-zA-Z0-9-]+:lambda:[a-zA-Z0-9-]+:\\d{12}:function:[a-zA-Z0-9_-]{1,64})$'", + "message": "[{'__conditional': 'cCondition', '__if_true': {'Statement': {}}, '__if_false': {'Statement': []}}] is not of type 'object'", "source": "SCHEMA", "entity": { - "logicalId": "myLambdaFunction", + "logicalId": "rIamPolicy", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.PolicyDocument", "category": "Schema", - "startLine": 9, + "startLine": 38, "startColumn": 7, - "endLine": 9, - "endColumn": 19, - "ruleDescription": "Value does not match pattern", + "endLine": 38, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Property type mismatch", "phase": "SCHEMA", "context": { - "actualValue": "DXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheLambdaName", - "expectedConstraint": "^([a-zA-Z0-9_-]{1,64}|arn:[a-zA-Z0-9-]+:lambda:[a-zA-Z0-9-]+:\\d{12}:function:[a-zA-Z0-9_-]{1,64})$" + "actualValue": [ + { + "Statement": {} + } + ], + "expectedConstraint": "object" } }, { - "ruleId": "F3033", + "ruleId": "F3017", "severity": "FATAL", - "message": "length 148 exceeds maximum 128", + "message": "Value is not valid under any of the 3 anyOf schemas for AWS::IAM::Policy (0 branches matched; at least one is required). Required property combinations: ['Groups'] or ['Roles'] or ['Users']. Branch failures: branch 1: 'Users' is a required property; branch 2: 'Groups' is a required property; branch 3: 'Roles' is a required property.", "source": "SCHEMA", "entity": { - "logicalId": "myLambdaFunction2", + "logicalId": "rIamPolicy", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.Handler", + "propertyPath": "Properties", "category": "Schema", - "startLine": 20, - "startColumn": 7, - "endLine": 20, - "endColumn": 14, - "ruleDescription": "String length out of bounds", + "startLine": 37, + "startColumn": 5, + "endLine": 37, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Value not valid under anyOf", "phase": "SCHEMA", "context": { - "actualValue": "DXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheDXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbhe.handler", + "expectedConstraint": "at least one anyOf branch", "extra": { - "actual_length": 148, - "max_length": 128, - "min_length": 0 + "branchCount": 3, + "branchFailures": [ + { + "branch": 1, + "reasons": [ + { + "message": "'Users' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 2, + "reasons": [ + { + "message": "'Groups' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 3, + "reasons": [ + { + "message": "'Roles' is a required property", + "propertyPath": "Properties" + } + ] + } + ], + "compositionKind": "anyOf", + "matchCount": 0, + "matchOutcome": "zeroMatches", + "validPropertyCombinations": [ + [ + "Groups" + ], + [ + "Roles" + ], + [ + "Users" + ] + ] } } }, { "ruleId": "F3033", "severity": "FATAL", - "message": "length 280 exceeds maximum 256", + "message": "length 91 exceeds maximum 64", "source": "SCHEMA", "entity": { - "logicalId": "myLambdaFunction3", + "logicalId": "rIamRole", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Description", + "propertyPath": "Properties.RoleName", "category": "Schema", - "startLine": 30, + "startLine": 9, "startColumn": 7, - "endLine": 30, - "endColumn": 18, + "endLine": 9, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "String length out of bounds", "phase": "SCHEMA", "context": { - "actualValue": "DXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheDXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheDXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheDXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbhe", + "actualValue": "jeAoXmadgEUYzfalKtuYjeAoXmadgEUYzfalKtuYjeAoXmadgEUYzfalKtuYjeAoXmadgEUYzfalKtuYBadRoleName", "extra": { - "actual_length": 280, - "max_length": 256, - "min_length": 0 + "actual_length": 91, + "max_length": 64, + "min_length": 1 } } }, { - "ruleId": "E2533", + "ruleId": "E1028", + "severity": "ERROR", + "message": "Fn::If condition 'cCondition' does not exist in Conditions section", + "source": "SCHEMA", + "entity": { + "logicalId": "rIamPolicy", + "entityType": "Resource", + "resourceType": "AWS::IAM::Policy" + }, + "propertyPath": "Properties.PolicyDocument.0.Fn::If.0", + "category": "Intrinsic Function", + "startLine": 40, + "startColumn": 11, + "endLine": 40, + "endColumn": 12, + "ruleDescription": "Fn::If condition must exist in Conditions section", + "phase": "PARSE" + }, + { + "ruleId": "E3510", "severity": "ERROR", - "message": "Runtime 'nodejs10.x' was deprecated on '2021-07-30'. Creation was disabled on '2021-07-30', and updates were disabled on '2022-02-14'. Please consider updating to 'nodejs24.x'", + "message": "'blah' is not one of ['2008-10-17', '2012-10-17']", "source": "CFN_LINT", "entity": { - "logicalId": "myLambdaFunction", + "logicalId": "rIamRole", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", + "propertyPath": "Properties.Policies.0.PolicyDocument.Version", + "category": "Resource", "startLine": 14, - "startColumn": 7, + "startColumn": 11, "endLine": 14, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs10.x", - "lifecycle": "end-of-life" - } + "endColumn": 18, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" }, { - "ruleId": "E2533", + "ruleId": "E3510", "severity": "ERROR", - "message": "Runtime 'nodejs10.x' was deprecated on '2021-07-30'. Creation was disabled on '2021-07-30', and updates were disabled on '2022-02-14'. Please consider updating to 'nodejs24.x'", + "message": "Additional properties are not allowed ('BadProperty' was unexpected)", "source": "CFN_LINT", "entity": { - "logicalId": "myLambdaFunction2", + "logicalId": "rIamRole", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", + "propertyPath": "Properties.Policies.0.PolicyDocument.BadProperty", + "category": "Resource", + "startLine": 15, + "startColumn": 11, + "endLine": 15, + "endColumn": 22, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" + }, + { + "ruleId": "E3510", + "severity": "ERROR", + "message": "'Test' is not of type 'object', 'array'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rIamRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Policies.0.PolicyDocument.Statement", + "category": "Resource", + "startLine": 16, + "startColumn": 11, + "endLine": 16, + "endColumn": 20, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" + }, + { + "ruleId": "E3510", + "severity": "ERROR", + "message": "'blah' is not one of ['2008-10-17', '2012-10-17']", + "source": "CFN_LINT", + "entity": { + "logicalId": "rIamUser", + "entityType": "Resource", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "propertyPath": "Properties.PolicyDocument.Version", + "category": "Resource", + "startLine": 21, + "startColumn": 9, + "endLine": 21, + "endColumn": 16, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" + }, + { + "ruleId": "E3510", + "severity": "ERROR", + "message": "Only one of ['Action', 'NotAction'] is a required property", + "source": "CFN_LINT", + "entity": { + "logicalId": "rIamUser", + "entityType": "Resource", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "propertyPath": "Properties.PolicyDocument.Statement.0", + "category": "Resource", + "startLine": 23, + "startColumn": 19, + "endLine": 23, + "endColumn": 20, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" + }, + { + "ruleId": "E3510", + "severity": "ERROR", + "message": "'NotAllow' is not one of ['Allow', 'Deny']", + "source": "CFN_LINT", + "entity": { + "logicalId": "rIamUser", + "entityType": "Resource", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "propertyPath": "Properties.PolicyDocument.Statement.0.Effect", + "category": "Resource", "startLine": 24, - "startColumn": 7, + "startColumn": 11, "endLine": 24, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs10.x", - "lifecycle": "end-of-life" - } + "endColumn": 17, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" + }, + { + "ruleId": "E3510", + "severity": "ERROR", + "message": "Additional properties are not allowed ('Principal' was unexpected)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rIamUser", + "entityType": "Resource", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "propertyPath": "Properties.PolicyDocument.Statement.0.Principal", + "category": "Resource", + "startLine": 25, + "startColumn": 11, + "endLine": 25, + "endColumn": 20, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" + }, + { + "ruleId": "E3510", + "severity": "ERROR", + "message": "{\"Effect\":\"Allow\"} is not of type 'string'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rIamUser", + "entityType": "Resource", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "propertyPath": "Properties.PolicyDocument.Statement.1.Resource.0", + "category": "Resource", + "startLine": 30, + "startColumn": 19, + "endLine": 30, + "endColumn": 20, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" + }, + { + "ruleId": "E3510", + "severity": "ERROR", + "message": "{\"Effect\":\"Allow\",\"Action\":[\"cloudwatch:*\"],\"Resource\":\"*\"} is not of type 'string'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rIamUser", + "entityType": "Resource", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "propertyPath": "Properties.PolicyDocument.Statement.1.Resource.1", + "category": "Resource", + "startLine": 31, + "startColumn": 19, + "endLine": 31, + "endColumn": 20, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" + }, + { + "ruleId": "E3510", + "severity": "ERROR", + "message": "[{\"Statement\":{}}] is not of type 'object'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rIamPolicy", + "entityType": "Resource", + "resourceType": "AWS::IAM::Policy" + }, + "propertyPath": "Properties.PolicyDocument", + "category": "Resource", + "startLine": 38, + "startColumn": 7, + "endLine": 38, + "endColumn": 21, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" + }, + { + "ruleId": "E3510", + "severity": "ERROR", + "message": "Only one of ['Action', 'NotAction'] is a required property", + "source": "CFN_LINT", + "entity": { + "logicalId": "rIamPolicyExtraThings", + "entityType": "Resource", + "resourceType": "AWS::IAM::Policy" + }, + "propertyPath": "Properties.PolicyDocument.Statement.0.Action", + "category": "Resource", + "startLine": 54, + "startColumn": 11, + "endLine": 54, + "endColumn": 17, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" + }, + { + "ruleId": "E3510", + "severity": "ERROR", + "message": "Only one of ['Action', 'NotAction'] is a required property", + "source": "CFN_LINT", + "entity": { + "logicalId": "rIamPolicyExtraThings", + "entityType": "Resource", + "resourceType": "AWS::IAM::Policy" + }, + "propertyPath": "Properties.PolicyDocument.Statement.0.NotAction", + "category": "Resource", + "startLine": 56, + "startColumn": 11, + "endLine": 56, + "endColumn": 20, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" }, { - "ruleId": "E2533", + "ruleId": "E3510", "severity": "ERROR", - "message": "Runtime 'nodejs10.x' was deprecated on '2021-07-30'. Creation was disabled on '2021-07-30', and updates were disabled on '2022-02-14'. Please consider updating to 'nodejs24.x'", + "message": "Only one of ['Resource', 'NotResource'] is a required property", "source": "CFN_LINT", "entity": { - "logicalId": "myLambdaFunction3", + "logicalId": "rIamPolicyExtraThings", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs10.x", - "lifecycle": "end-of-life" - } + "propertyPath": "Properties.PolicyDocument.Statement.0.Resource", + "category": "Resource", + "startLine": 58, + "startColumn": 11, + "endLine": 58, + "endColumn": 19, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" }, { - "ruleId": "E3019", + "ruleId": "E3510", "severity": "ERROR", - "message": "Primary identifiers {'FunctionName': 'LambdaName'} should have unique values across the resources {'myLambdaFunction2', 'myLambdaFunction3'}", + "message": "Only one of ['Resource', 'NotResource'] is a required property", "source": "CFN_LINT", "entity": { - "logicalId": "myLambdaFunction2", + "logicalId": "rIamPolicyExtraThings", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.PolicyDocument.Statement.0.NotResource", "category": "Resource", - "startLine": 19, - "startColumn": 7, - "endLine": 19, - "endColumn": 19, - "ruleDescription": "Validate that all resources have unique primary identifiers", + "startLine": 60, + "startColumn": 11, + "endLine": 60, + "endColumn": 22, + "ruleDescription": "Validate identity based IAM policies", "phase": "LINT" }, { - "ruleId": "E3019", + "ruleId": "E3510", "severity": "ERROR", - "message": "Primary identifiers {'FunctionName': 'LambdaName'} should have unique values across the resources {'myLambdaFunction2', 'myLambdaFunction3'}", + "message": "'arn' does not match '^(arn:(aws[A-Za-z\\-]*?|[A-Za-z?*\\-]*[?*][A-Za-z?*\\-]*):[^:*?]+:[^:]*(:(?:\\d{12}|\\*|aws)?:.+|)|\\*)$'", "source": "CFN_LINT", "entity": { - "logicalId": "myLambdaFunction3", + "logicalId": "rIamPolicyExtraThings", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.PolicyDocument.Statement.0.NotResource.0", "category": "Resource", - "startLine": 29, - "startColumn": 7, - "endLine": 29, - "endColumn": 19, - "ruleDescription": "Validate that all resources have unique primary identifiers", + "startLine": 61, + "startColumn": 13, + "endLine": 61, + "endColumn": 14, + "ruleDescription": "Validate identity based IAM policies", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3530", + "severity": "ERROR", + "message": "'Statement' is a required property", + "source": "CFN_LINT", "entity": { - "logicalId": "myLambdaFunction", + "logicalId": "rIamRole", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 9, + "propertyPath": "Properties.AssumeRolePolicyDocument", + "suggestedFix": "Add a Statement array to the AssumeRolePolicyDocument", + "category": "Resource", + "startLine": 10, "startColumn": 7, - "endLine": 9, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 10, + "endColumn": 31, + "ruleDescription": "Validate IAM trust policies", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "ruleId": "W2512", + "severity": "WARN", + "message": "IAM policy uses NotAction which grants all actions except those listed - consider using Action instead", "source": "ENGINE", "entity": { - "logicalId": "myLambdaFunction2", + "logicalId": "rIamPolicyExtraThings", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 19, - "startColumn": 7, - "endLine": 19, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "category": "Security", + "startLine": 43, + "startColumn": 3, + "endLine": 43, + "endColumn": 24, + "ruleDescription": "IAM policy with NotAction", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myLambdaFunction3", + "logicalId": "rIamRole", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 29, + "startLine": 9, "startColumn": 7, - "endLine": 29, - "endColumn": 19, + "endLine": 9, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -88511,12 +87720,12 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myLambdaFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'rIamRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myLambdaFunction", + "logicalId": "rIamRole", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -88527,59 +87736,19 @@ "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myLambdaFunction2' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "myLambdaFunction2", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 18, - "startColumn": 5, - "endLine": 18, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myLambdaFunction3' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "myLambdaFunction3", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 28, - "startColumn": 5, - "endLine": 28, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" } ] }, - "bad/resources/lambda/required_properties.yaml": { - "filePath": "bad/resources/lambda/required_properties.yaml", + "bad/resources/iam/iam_policy_conditional_policies.yaml": { + "filePath": "bad/resources/iam/iam_policy_conditional_policies.yaml", "status": "OK", "metadata": { "resourcesScanned": 3, "counts": { - "fatal": 1, - "errors": 0, - "warnings": 7, - "informational": 4, + "fatal": 0, + "errors": 2, + "warnings": 2, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -88588,200 +87757,95 @@ }, "diagnostics": [ { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'Runtime' is a required property (from extension)", - "source": "SCHEMA", - "entity": { - "logicalId": "Function3", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties", - "suggestedFix": "Add 'Runtime'", - "category": "Schema", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" - }, - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Function2", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 21, - "startColumn": 7, - "endLine": 21, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.9", - "lifecycle": "deprecated" - } - }, - { - "ruleId": "W2533", - "severity": "WARN", - "message": "Properties ['Handler', 'Runtime'] missing for zip file deployment at Resources/Function1/Properties", - "source": "CFN_LINT", - "entity": { - "logicalId": "Function1", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Code", - "suggestedFix": "Add the missing properties for zip file deployment", - "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 11, - "ruleDescription": "Check required properties for Lambda if the deployment package is a .zip file", - "phase": "LINT" - }, - { - "ruleId": "W2533", - "severity": "WARN", - "message": "Properties ['Handler'] missing for zip file deployment at Resources/Function2/Properties", + "ruleId": "E3510", + "severity": "ERROR", + "message": "'not-an-arn' does not match '^(arn:(aws[A-Za-z\\-]*?|[A-Za-z?*\\-]*[?*][A-Za-z?*\\-]*):[^:*?]+:[^:]*(:(?:\\d{12}|\\*|aws)?:.+|)|\\*)$'", "source": "CFN_LINT", "entity": { - "logicalId": "Function2", + "logicalId": "RoleConditionalPolicies", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Code", - "suggestedFix": "Add the missing properties for zip file deployment", - "category": "Best Practice", - "startLine": 18, - "startColumn": 7, - "endLine": 18, - "endColumn": 11, - "ruleDescription": "Check required properties for Lambda if the deployment package is a .zip file", + "propertyPath": "Properties.Policies.0.PolicyDocument.Statement.0.Resource", + "category": "Resource", + "startLine": 34, + "startColumn": 19, + "endLine": 34, + "endColumn": 27, + "ruleDescription": "Validate identity based IAM policies", "phase": "LINT" }, { - "ruleId": "W2533", - "severity": "WARN", - "message": "Properties ['Runtime'] missing for zip file deployment at Resources/Function3/Properties", + "ruleId": "E3510", + "severity": "ERROR", + "message": "'also-bad' does not match '^(arn:(aws[A-Za-z\\-]*?|[A-Za-z?*\\-]*[?*][A-Za-z?*\\-]*):[^:*?]+:[^:]*(:(?:\\d{12}|\\*|aws)?:.+|)|\\*)$'", "source": "CFN_LINT", "entity": { - "logicalId": "Function3", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Code", - "suggestedFix": "Add the missing properties for zip file deployment", - "category": "Best Practice", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 11, - "ruleDescription": "Check required properties for Lambda if the deployment package is a .zip file", - "phase": "LINT" - }, - { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", - "entity": { - "logicalId": "Function1", + "logicalId": "RoleConditionalPolicies", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, - "category": "Security", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 12, - "ruleDescription": "Hardcoded account ID in ARN", + "propertyPath": "Properties.Policies.0.PolicyDocument.Statement.0.Resource", + "category": "Resource", + "startLine": 48, + "startColumn": 19, + "endLine": 48, + "endColumn": 27, + "ruleDescription": "Validate identity based IAM policies", "phase": "LINT" }, { - "ruleId": "W9013", + "ruleId": "W2512", "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "message": "IAM policy uses NotAction which grants all actions except those listed - consider using Action instead", "source": "ENGINE", "entity": { - "logicalId": "Function2", + "logicalId": "RoleNotActionConditional", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, "category": "Security", - "startLine": 13, + "startLine": 51, "startColumn": 3, - "endLine": 13, - "endColumn": 12, - "ruleDescription": "Hardcoded account ID in ARN", + "endLine": 51, + "endColumn": 27, + "ruleDescription": "IAM policy with NotAction", "phase": "LINT" }, { - "ruleId": "W9013", + "ruleId": "W2512", "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "message": "IAM policy uses NotAction which grants all actions except those listed - consider using Action instead", "source": "ENGINE", "entity": { - "logicalId": "Function3", + "logicalId": "PolicySingleStatement", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::ManagedPolicy" }, "category": "Security", - "startLine": 23, + "startLine": 79, "startColumn": 3, - "endLine": 23, - "endColumn": 12, - "ruleDescription": "Hardcoded account ID in ARN", + "endLine": 79, + "endColumn": 24, + "ruleDescription": "IAM policy with NotAction", "phase": "LINT" }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PackageType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Function2", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.PackageType", - "category": "Best Practice", - "startLine": 22, - "startColumn": 7, - "endLine": 22, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Function1' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'RoleConditionalPolicies' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Function1", + "logicalId": "RoleConditionalPolicies", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, + "startLine": 18, "startColumn": 5, - "endLine": 6, + "endLine": 18, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -88789,55 +87853,96 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Function2' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'RoleNotActionConditional' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Function2", + "logicalId": "RoleNotActionConditional", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 15, + "startLine": 53, "startColumn": 5, - "endLine": 15, + "endLine": 53, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/resources/iam/identity_policy_conditional_novalue_e3510.yaml": { + "filePath": "bad/resources/iam/identity_policy_conditional_novalue_e3510.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3510", + "severity": "ERROR", + "message": "'SomeOptionalParameter' does not match '^(arn:(aws[A-Za-z\\-]*?|[A-Za-z?*\\-]*[?*][A-Za-z?*\\-]*):[^:*?]+:[^:]*(:(?:\\d{12}|\\*|aws)?:.+|)|\\*)$'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SomeManagedPolicy", + "entityType": "Resource", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "propertyPath": "Properties.PolicyDocument.Statement.1.Resource.0", + "category": "Resource", + "startLine": 29, + "startColumn": 19, + "endLine": 29, + "endColumn": 20, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Function3' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Function3", + "logicalId": "SomeManagedPolicy", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } } ] }, - "bad/resources/name.yaml": { - "filePath": "bad/resources/name.yaml", + "bad/resources/iam/identity_policy_e3510.yaml": { + "filePath": "bad/resources/iam/identity_policy_e3510.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 7, "counts": { - "fatal": 2, - "errors": 0, - "warnings": 0, - "informational": 2, + "fatal": 3, + "errors": 8, + "warnings": 2, + "informational": 9, "debug": 0 }, "suppressed": 0, @@ -88846,326 +87951,391 @@ }, "diagnostics": [ { - "ruleId": "F0006", + "ruleId": "F3017", "severity": "FATAL", - "message": "Logical ID 'my.Instance' must be alphanumeric (A-Za-z0-9)", + "message": "Value is not valid under any of the 3 anyOf schemas for AWS::IAM::Policy (0 branches matched; at least one is required). Required property combinations: ['Groups'] or ['Roles'] or ['Users']. Branch failures: branch 1: 'Users' is a required property; branch 2: 'Groups' is a required property; branch 3: 'Roles' is a required property.", "source": "SCHEMA", "entity": { - "logicalId": "my.Instance", + "logicalId": "PolicyEmptyAction", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Policy" }, - "category": "Structure", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Logical IDs must be alphanumeric", - "phase": "SCHEMA" + "propertyPath": "Properties", + "category": "Schema", + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Value not valid under anyOf", + "phase": "SCHEMA", + "context": { + "expectedConstraint": "at least one anyOf branch", + "extra": { + "branchCount": 3, + "branchFailures": [ + { + "branch": 1, + "reasons": [ + { + "message": "'Users' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 2, + "reasons": [ + { + "message": "'Groups' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 3, + "reasons": [ + { + "message": "'Roles' is a required property", + "propertyPath": "Properties" + } + ] + } + ], + "compositionKind": "anyOf", + "matchCount": 0, + "matchOutcome": "zeroMatches", + "validPropertyCombinations": [ + [ + "Groups" + ], + [ + "Roles" + ], + [ + "Users" + ] + ] + } + } }, { - "ruleId": "F0006", + "ruleId": "F3017", "severity": "FATAL", - "message": "Logical ID 'my_Instance' must be alphanumeric (A-Za-z0-9)", + "message": "Value is not valid under any of the 3 anyOf schemas for AWS::IAM::Policy (0 branches matched; at least one is required). Required property combinations: ['Groups'] or ['Roles'] or ['Users']. Branch failures: branch 1: 'Users' is a required property; branch 2: 'Groups' is a required property; branch 3: 'Roles' is a required property.", "source": "SCHEMA", "entity": { - "logicalId": "my_Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "category": "Structure", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Logical IDs must be alphanumeric", - "phase": "SCHEMA" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'my.Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "my.Instance", + "logicalId": "PolicyWithJoinResource", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, + "propertyPath": "Properties", + "category": "Schema", + "startLine": 59, "startColumn": 5, - "endLine": 5, + "endLine": 59, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Value not valid under anyOf", + "phase": "SCHEMA", + "context": { + "expectedConstraint": "at least one anyOf branch", + "extra": { + "branchCount": 3, + "branchFailures": [ + { + "branch": 1, + "reasons": [ + { + "message": "'Users' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 2, + "reasons": [ + { + "message": "'Groups' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 3, + "reasons": [ + { + "message": "'Roles' is a required property", + "propertyPath": "Properties" + } + ] + } + ], + "compositionKind": "anyOf", + "matchCount": 0, + "matchOutcome": "zeroMatches", + "validPropertyCombinations": [ + [ + "Groups" + ], + [ + "Roles" + ], + [ + "Users" + ] + ] + } + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'my_Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F3031", + "severity": "FATAL", + "message": "'arn:aws:sso:::instance/ssoins-12345' does not match pattern 'arn:aws(-[a-z]{1,5}){0,3}:sso:::instance/(sso)?ins-[a-zA-Z0-9-.]{16}'", + "source": "SCHEMA", "entity": { - "logicalId": "my_Instance", + "logicalId": "PermissionSetBadPolicy", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SSO::PermissionSet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/resources/primary_identifiers.yaml": { - "filePath": "bad/resources/primary_identifiers.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 13, - "counts": { - "fatal": 0, - "errors": 11, - "warnings": 0, - "informational": 25, - "debug": 0 + "propertyPath": "Properties.InstanceArn", + "category": "Schema", + "startLine": 89, + "startColumn": 7, + "endLine": 89, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sso/aws-sso-permissionset", + "ruleDescription": "Value does not match pattern", + "phase": "SCHEMA", + "context": { + "actualValue": "arn:aws:sso:::instance/ssoins-12345", + "expectedConstraint": "arn:aws(-[a-z]{1,5}){0,3}:sso:::instance/(sso)?ins-[a-zA-Z0-9-.]{16}" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3001", + "ruleId": "E3510", "severity": "ERROR", - "message": "Resource 'BadType' property 'Type' must be a string", + "message": "[] is too short (minimum 1 item)", "source": "CFN_LINT", "entity": { - "logicalId": "BadType", + "logicalId": "PolicyEmptyAction", "entityType": "Resource", - "resourceType": "" + "resourceType": "AWS::IAM::Policy" }, + "propertyPath": "Properties.PolicyDocument.Statement.0.Action", "category": "Resource", - "startLine": 156, - "startColumn": 5, - "endLine": 156, - "endColumn": 9, - "ruleDescription": "Basic CloudFormation Resource Check", - "phase": "PARSE" + "startLine": 21, + "startColumn": 13, + "endLine": 21, + "endColumn": 19, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" }, { - "ruleId": "E3019", + "ruleId": "E3510", "severity": "ERROR", - "message": "Primary identifiers {'RoleName': 'root'} should have unique values across the resources {'RootRole', 'RootRole2'}", + "message": "'ReadOnly' is a duplicate of Statement.0.Sid", "source": "CFN_LINT", "entity": { - "logicalId": "RootRole", + "logicalId": "PolicyDuplicateSid", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.PolicyDocument.Statement.1.Sid", "category": "Resource", - "startLine": 18, - "startColumn": 7, - "endLine": 18, - "endColumn": 15, - "ruleDescription": "Validate that all resources have unique primary identifiers", + "startLine": 35, + "startColumn": 13, + "endLine": 35, + "endColumn": 16, + "ruleDescription": "Validate identity based IAM policies", "phase": "LINT" }, { - "ruleId": "E3019", + "ruleId": "E3510", "severity": "ERROR", - "message": "Primary identifiers {'RoleName': 'root'} should have unique values across the resources {'RootRole', 'RootRole2'}", + "message": "Additional properties are not allowed ('Id' was unexpected)", "source": "CFN_LINT", "entity": { - "logicalId": "RootRole2", + "logicalId": "PolicyBadIdAndCondition", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::IAM::RolePolicy" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.PolicyDocument.Id", "category": "Resource", - "startLine": 40, - "startColumn": 7, - "endLine": 40, - "endColumn": 15, - "ruleDescription": "Validate that all resources have unique primary identifiers", + "startLine": 47, + "startColumn": 9, + "endLine": 47, + "endColumn": 11, + "ruleDescription": "Validate identity based IAM policies", "phase": "LINT" }, { - "ruleId": "E3019", + "ruleId": "E3510", "severity": "ERROR", - "message": "Primary identifiers {'RoleName': 'useast1'} should have unique values across the resources {'RootRole3', 'RootRole4', 'RootRole5', 'RootRole6'}", + "message": "'InvalidOp' is not a valid IAM condition operator", "source": "CFN_LINT", "entity": { - "logicalId": "RootRole3", + "logicalId": "PolicyBadIdAndCondition", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::IAM::RolePolicy" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.PolicyDocument.Statement.0.Condition.InvalidOp", "category": "Resource", - "startLine": 63, - "startColumn": 7, - "endLine": 63, - "endColumn": 15, - "ruleDescription": "Validate that all resources have unique primary identifiers", + "startLine": 53, + "startColumn": 15, + "endLine": 53, + "endColumn": 24, + "ruleDescription": "Validate identity based IAM policies", "phase": "LINT" }, { - "ruleId": "E3019", + "ruleId": "E3510", "severity": "ERROR", - "message": "Primary identifiers {'RoleName': 'useast1'} should have unique values across the resources {'RootRole3', 'RootRole4', 'RootRole5', 'RootRole6'}", + "message": "'DefinitelyNotAllow' is not one of ['Allow', 'Deny']", "source": "CFN_LINT", "entity": { - "logicalId": "RootRole4", + "logicalId": "PolicyDynamicActionBadEffect", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::IAM::GroupPolicy" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.PolicyDocument.Statement.0.Effect", "category": "Resource", - "startLine": 86, - "startColumn": 7, - "endLine": 86, - "endColumn": 15, - "ruleDescription": "Validate that all resources have unique primary identifiers", + "startLine": 81, + "startColumn": 13, + "endLine": 81, + "endColumn": 19, + "ruleDescription": "Validate identity based IAM policies", "phase": "LINT" }, { - "ruleId": "E3019", + "ruleId": "E3510", "severity": "ERROR", - "message": "Primary identifiers {'RoleName': 'useast1'} should have unique values across the resources {'RootRole3', 'RootRole4', 'RootRole5', 'RootRole6'}", + "message": "Only one of ['Action', 'NotAction'] is a required property", "source": "CFN_LINT", "entity": { - "logicalId": "RootRole5", + "logicalId": "PermissionSetBadPolicy", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::SSO::PermissionSet" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.InlinePolicy.Statement.0.Action", "category": "Resource", - "startLine": 109, - "startColumn": 7, - "endLine": 109, - "endColumn": 15, - "ruleDescription": "Validate that all resources have unique primary identifiers", + "startLine": 94, + "startColumn": 13, + "endLine": 94, + "endColumn": 19, + "ruleDescription": "Validate identity based IAM policies", "phase": "LINT" }, { - "ruleId": "E3019", + "ruleId": "E3510", "severity": "ERROR", - "message": "Primary identifiers {'RoleName': 'useast1'} should have unique values across the resources {'RootRole3', 'RootRole4', 'RootRole5', 'RootRole6'}", + "message": "Only one of ['Action', 'NotAction'] is a required property", "source": "CFN_LINT", "entity": { - "logicalId": "RootRole6", + "logicalId": "PermissionSetBadPolicy", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::SSO::PermissionSet" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.InlinePolicy.Statement.0.NotAction", "category": "Resource", - "startLine": 131, - "startColumn": 7, - "endLine": 131, - "endColumn": 15, - "ruleDescription": "Validate that all resources have unique primary identifiers", + "startLine": 95, + "startColumn": 13, + "endLine": 95, + "endColumn": 22, + "ruleDescription": "Validate identity based IAM policies", "phase": "LINT" }, { - "ruleId": "E3019", + "ruleId": "E3510", "severity": "ERROR", - "message": "Primary identifiers {'BucketName': 'us-east-1'} should have unique values across the resources {'Bucket1', 'Bucket2'}", + "message": "'invalid-version' is not one of ['2008-10-17', '2012-10-17']", "source": "CFN_LINT", "entity": { - "logicalId": "Bucket1", + "logicalId": "UserInlinePolicy", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::IAM::User" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Policies.0.PolicyDocument.Version", "category": "Resource", - "startLine": 142, - "startColumn": 5, - "endLine": 142, - "endColumn": 15, - "ruleDescription": "Validate that all resources have unique primary identifiers", + "startLine": 105, + "startColumn": 13, + "endLine": 105, + "endColumn": 20, + "ruleDescription": "Validate identity based IAM policies", "phase": "LINT" }, { - "ruleId": "E3019", - "severity": "ERROR", - "message": "Primary identifiers {'BucketName': 'us-east-1'} should have unique values across the resources {'Bucket1', 'Bucket2'}", - "source": "CFN_LINT", + "ruleId": "W2512", + "severity": "WARN", + "message": "IAM policy uses NotAction which grants all actions except those listed - consider using Action instead", + "source": "ENGINE", "entity": { - "logicalId": "Bucket2", + "logicalId": "PermissionSetBadPolicy", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SSO::PermissionSet" }, - "propertyPath": "Properties.BucketName", - "category": "Resource", - "startLine": 150, - "startColumn": 7, - "endLine": 150, - "endColumn": 17, - "ruleDescription": "Validate that all resources have unique primary identifiers", + "category": "Security", + "startLine": 86, + "startColumn": 3, + "endLine": 86, + "endColumn": 25, + "ruleDescription": "IAM policy with NotAction", "phase": "LINT" }, { - "ruleId": "E3019", - "severity": "ERROR", - "message": "Primary identifiers {'Name': 'myProjectName'} should have unique values across the resources {'Project1', 'Project2'}", - "source": "CFN_LINT", + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'InstanceArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", "entity": { - "logicalId": "Project1", + "logicalId": "PermissionSetBadPolicy", "entityType": "Resource", - "resourceType": "AWS::CodeBuild::Project" + "resourceType": "AWS::SSO::PermissionSet" }, - "propertyPath": "Properties.Name", - "category": "Resource", - "startLine": 168, + "propertyPath": "Properties.InstanceArn", + "category": "Best Practice", + "startLine": 89, "startColumn": 7, - "endLine": 168, - "endColumn": 11, - "ruleDescription": "Validate that all resources have unique primary identifiers", + "endLine": 89, + "endColumn": 18, + "ruleDescription": "Hardcoded ARN property", "phase": "LINT" }, { - "ruleId": "E3019", - "severity": "ERROR", - "message": "Primary identifiers {'Name': 'myProjectName'} should have unique values across the resources {'Project1', 'Project2'}", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "Project2", + "logicalId": "PolicyWithJoinResource", "entityType": "Resource", - "resourceType": "AWS::CodeBuild::Project" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.Name", - "category": "Resource", - "startLine": 188, - "startColumn": 7, - "endLine": 188, - "endColumn": 11, - "ruleDescription": "Validate that all resources have unique primary identifiers", + "propertyPath": "Properties.PolicyDocument.Statement.0.Resource.Fn::Join", + "category": "Intrinsic Function", + "startLine": 67, + "startColumn": 15, + "endLine": 67, + "endColumn": 23, + "ruleDescription": "Use Sub instead of Join", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RootRole", + "logicalId": "PolicyBadIdAndCondition", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::IAM::RolePolicy" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.PolicyName", "category": "Best Practice", - "startLine": 17, + "startLine": 44, "startColumn": 7, - "endLine": 17, - "endColumn": 11, + "endLine": 44, + "endColumn": 17, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -89179,15 +88349,15 @@ "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RootRole", + "logicalId": "PolicyBadIdAndCondition", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::IAM::RolePolicy" }, "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 18, + "startLine": 45, "startColumn": 7, - "endLine": 18, + "endLine": 45, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -89199,19 +88369,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RootRole2", + "logicalId": "PolicyDynamicActionBadEffect", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::IAM::GroupPolicy" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.GroupName", "category": "Best Practice", - "startLine": 39, + "startLine": 76, "startColumn": 7, - "endLine": 39, - "endColumn": 11, + "endLine": 76, + "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -89222,19 +88392,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", + "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RootRole2", + "logicalId": "PolicyDynamicActionBadEffect", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::IAM::GroupPolicy" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.PolicyName", "category": "Best Practice", - "startLine": 40, + "startLine": 77, "startColumn": 7, - "endLine": 40, - "endColumn": 15, + "endLine": 77, + "endColumn": 17, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -89245,48 +88415,207 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PermissionSetBadPolicy", + "entityType": "Resource", + "resourceType": "AWS::SSO::PermissionSet" + }, + "propertyPath": "Properties.InstanceArn", + "category": "Best Practice", + "startLine": 89, + "startColumn": 7, + "endLine": 89, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sso/aws-sso-permissionset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PermissionSetBadPolicy", + "entityType": "Resource", + "resourceType": "AWS::SSO::PermissionSet" + }, + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 90, + "startColumn": 7, + "endLine": 90, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sso/aws-sso-permissionset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'PermissionSetBadPolicy' of type 'AWS::SSO::PermissionSet' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "PermissionSetBadPolicy", + "entityType": "Resource", + "resourceType": "AWS::SSO::PermissionSet" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 88, + "startColumn": 5, + "endLine": 88, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'UserInlinePolicy' of type 'AWS::IAM::User' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "UserInlinePolicy", + "entityType": "Resource", + "resourceType": "AWS::IAM::User" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 101, + "startColumn": 5, + "endLine": 101, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/resources/iam/identity_policy_wildcard_service.yaml": { + "filePath": "bad/resources/iam/identity_policy_wildcard_service.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3510", + "severity": "ERROR", + "message": "'arn:aws:*:::example-bucket/*' does not match '^(arn:(aws[A-Za-z\\-]*?|[A-Za-z?*\\-]*[?*][A-Za-z?*\\-]*):[^:*?]+:[^:]*(:(?:\\d{12}|\\*|aws)?:.+|)|\\*)$'", + "source": "CFN_LINT", + "entity": { + "logicalId": "WildcardServicePolicy", + "entityType": "Resource", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "propertyPath": "Properties.PolicyDocument.Statement.0.Resource", + "category": "Resource", + "startLine": 13, + "startColumn": 13, + "endLine": 13, + "endColumn": 21, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" + } + ] + }, + "bad/resources/iam/managed_policy_description.yaml": { + "filePath": "bad/resources/iam/managed_policy_description.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RootRole3", + "logicalId": "SomeManagedPolicy", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 62, + "startLine": 7, "startColumn": 7, - "endLine": 62, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 7, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } + } + ] + }, + "bad/resources/iam/ref_with_path.yaml": { + "filePath": "bad/resources/iam/ref_with_path.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 11, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3050", + "severity": "ERROR", + "message": "Ref to IAM role 'CodeBuildRole' with Path '/test/' - use GetAtt CodeBuildRole.Arn instead", + "source": "CFN_LINT", "entity": { - "logicalId": "RootRole3", + "logicalId": "CodeBuildProject", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::CodeBuild::Project" }, - "propertyPath": "Properties.RoleName", - "category": "Best Practice", - "startLine": 63, + "propertyPath": "Properties.ServiceRole", + "suggestedFix": "Switch from Ref to !GetAtt .Arn when Path is not '/'", + "category": "Resource", + "startLine": 7, "startColumn": 7, - "endLine": 63, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 7, + "endColumn": 18, + "ruleDescription": "Check if REFing to a IAM resource with path set", + "phase": "LINT" }, { "ruleId": "I9001", @@ -89294,15 +88623,15 @@ "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RootRole4", + "logicalId": "CodeBuildRole", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 85, + "startLine": 43, "startColumn": 7, - "endLine": 85, + "endLine": 43, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -89314,43 +88643,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "RootRole4", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.RoleName", - "category": "Best Practice", - "startLine": 86, - "startColumn": 7, - "endLine": 86, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RootRole5", + "logicalId": "CodeBuildVPC", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 108, + "startLine": 64, "startColumn": 7, - "endLine": 108, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 64, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -89360,44 +88665,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RootRole5", + "logicalId": "CodeBuildSubnet", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 109, + "startLine": 73, "startColumn": 7, - "endLine": 109, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 73, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsUsEast1'" + "resolutionSource": "Ref to 'CodeBuildVPC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RootRole6", + "logicalId": "CodeBuildSubnet", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 130, + "startLine": 75, "startColumn": 7, - "endLine": 130, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 75, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -89407,66 +88710,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "RootRole6", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.RoleName", - "category": "Best Practice", - "startLine": 131, - "startColumn": 7, - "endLine": 131, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsUsEast1'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket2", + "logicalId": "CodeBuildSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.GroupName", "category": "Best Practice", - "startLine": 150, + "startLine": 79, "startColumn": 7, - "endLine": 150, - "endColumn": 17, + "endLine": 79, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsUsEast1'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Project1", + "logicalId": "CodeBuildSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::CodeBuild::Project" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 168, + "startLine": 80, "startColumn": 7, - "endLine": 168, - "endColumn": 11, + "endLine": 80, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -89476,121 +88754,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Project2", + "logicalId": "CodeBuildSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::CodeBuild::Project" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 188, + "startLine": 81, "startColumn": 7, - "endLine": 188, - "endColumn": 11, + "endLine": 81, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'CodeBuildVPC'" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'RootRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "RootRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'RootRole2' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "RootRole2", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 29, - "startColumn": 5, - "endLine": 29, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'RootRole3' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "RootRole3", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 52, - "startColumn": 5, - "endLine": 52, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'RootRole4' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "RootRole4", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 75, - "startColumn": 5, - "endLine": 75, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'RootRole5' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'CodeBuildProject' of type 'AWS::CodeBuild::Project' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RootRole5", + "logicalId": "CodeBuildProject", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::CodeBuild::Project" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 98, + "startLine": 6, "startColumn": 5, - "endLine": 98, + "endLine": 6, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -89598,19 +88797,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'RootRole6' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'CodeBuildRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RootRole6", + "logicalId": "CodeBuildRole", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 120, + "startLine": 35, "startColumn": 5, - "endLine": 120, + "endLine": 35, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -89618,19 +88817,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket1' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'CodeBuildSubnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket1", + "logicalId": "CodeBuildSubnet", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 142, + "startLine": 72, "startColumn": 5, - "endLine": 142, + "endLine": 72, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -89638,39 +88837,58 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket2' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'CodeBuildSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket2", + "logicalId": "CodeBuildSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 149, + "startLine": 78, "startColumn": 5, - "endLine": 149, + "endLine": 78, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/resources/iam/resource_policy.yaml": { + "filePath": "bad/resources/iam/resource_policy.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Project1' of type 'AWS::CodeBuild::Project' supports Tags but none are configured", + "message": "Resource 'ecr1' of type 'AWS::ECR::Repository' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Project1", + "logicalId": "ecr1", "entityType": "Resource", - "resourceType": "AWS::CodeBuild::Project" + "resourceType": "AWS::ECR::Repository" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 167, + "startLine": 6, "startColumn": 5, - "endLine": 167, + "endLine": 6, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -89678,202 +88896,23 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Project2' of type 'AWS::CodeBuild::Project' supports Tags but none are configured", + "message": "Resource 'ecr2' of type 'AWS::ECR::Repository' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Project2", + "logicalId": "ecr2", "entityType": "Resource", - "resourceType": "AWS::CodeBuild::Project" + "resourceType": "AWS::ECR::Repository" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 187, + "startLine": 19, "startColumn": 5, - "endLine": 187, + "endLine": 19, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] - }, - "bad/resources/properties/atleastone.yaml": { - "filePath": "bad/resources/properties/atleastone.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 2, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F3017", - "severity": "FATAL", - "message": "Value is not valid under any of the 3 anyOf schemas for AWS::IAM::Policy (0 branches matched; at least one is required). Required property combinations: ['Groups'] or ['Roles'] or ['Users']. Branch failures: branch 1: 'Users' is a required property; branch 2: 'Groups' is a required property; branch 3: 'Roles' is a required property.", - "source": "SCHEMA", - "entity": { - "logicalId": "myPolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" - }, - "propertyPath": "Properties", - "category": "Schema", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Value not valid under anyOf", - "phase": "SCHEMA", - "context": { - "expectedConstraint": "at least one anyOf branch", - "extra": { - "branchCount": 3, - "branchFailures": [ - { - "branch": 1, - "reasons": [ - { - "message": "'Users' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 2, - "reasons": [ - { - "message": "'Groups' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 3, - "reasons": [ - { - "message": "'Roles' is a required property", - "propertyPath": "Properties" - } - ] - } - ], - "compositionKind": "anyOf", - "matchCount": 0, - "matchOutcome": "zeroMatches", - "validPropertyCombinations": [ - [ - "Groups" - ], - [ - "Roles" - ], - [ - "Users" - ] - ] - } - } - }, - { - "ruleId": "F3017", - "severity": "FATAL", - "message": "Value is not valid under any of the 3 anyOf schemas for AWS::IAM::Policy (0 branches matched; at least one is required). Required property combinations: ['Groups'] or ['Roles'] or ['Users']. Branch failures: branch 1: 'Users' is a required property; branch 2: 'Groups' is a required property; branch 3: 'Roles' is a required property.", - "source": "SCHEMA", - "entity": { - "logicalId": "myPolicy2", - "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" - }, - "propertyPath": "Properties", - "category": "Schema", - "startLine": 16, - "startColumn": 5, - "endLine": 16, - "endColumn": 15, - "conditionScenario": { - "cPrimaryRegion": true - }, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Value not valid under anyOf", - "phase": "SCHEMA", - "context": { - "expectedConstraint": "at least one anyOf branch", - "extra": { - "branchCount": 3, - "branchFailures": [ - { - "branch": 1, - "reasons": [ - { - "message": "'Users' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 2, - "reasons": [ - { - "message": "'Groups' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 3, - "reasons": [ - { - "message": "'Roles' is a required property", - "propertyPath": "Properties" - } - ] - } - ], - "compositionKind": "anyOf", - "matchCount": 0, - "matchOutcome": "zeroMatches", - "validPropertyCombinations": [ - [ - "Groups" - ], - [ - "Roles" - ], - [ - "Users" - ] - ] - } - } - }, - { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'Statement' is a required property", - "source": "CFN_LINT", - "entity": { - "logicalId": "myPolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" - }, - "propertyPath": "Properties.PolicyDocument", - "category": "Resource", - "startLine": 13, - "startColumn": 7, - "endLine": 13, - "endColumn": 21, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" - } - ] } } diff --git a/src/resources/expected/validation_reports3.json b/src/resources/expected/validation_reports3.json index 213866e4..80567994 100644 --- a/src/resources/expected/validation_reports3.json +++ b/src/resources/expected/validation_reports3.json @@ -1,32 +1,14 @@ { - "bad/resources/properties/custom.yaml": { - "filePath": "bad/resources/properties/custom.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "bad/resources/properties/list_duplicates.yaml": { - "filePath": "bad/resources/properties/list_duplicates.yaml", + "bad/resources/lambda/function_property_value_limits.yaml": { + "filePath": "bad/resources/lambda/function_property_value_limits.yaml", "status": "OK", "metadata": { "resourcesScanned": 3, "counts": { - "fatal": 3, - "errors": 0, + "fatal": 6, + "errors": 5, "warnings": 0, - "informational": 0, + "informational": 6, "debug": 0 }, "suppressed": 0, @@ -35,380 +17,328 @@ }, "diagnostics": [ { - "ruleId": "F3037", + "ruleId": "F1020", "severity": "FATAL", - "message": "Array items are not unique", + "message": "Fn::GetAtt references non-existent resource 'myLambdaExecutionRole'", "source": "SCHEMA", "entity": { - "logicalId": "IamGroup", + "logicalId": "myLambdaFunction", "entityType": "Resource", - "resourceType": "AWS::IAM::Group" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ManagedPolicyArns", - "category": "Schema", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Array items not unique", + "suggestedFix": "Check that the GetAtt target resource exists in the template", + "category": "Intrinsic Function", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 19, + "ruleDescription": "Ref/GetAtt target must exist", "phase": "SCHEMA" }, { - "ruleId": "F3037", + "ruleId": "F1020", "severity": "FATAL", - "message": "Array items are not unique", + "message": "Fn::GetAtt references non-existent resource 'myLambdaExecutionRole'", "source": "SCHEMA", "entity": { - "logicalId": "IamGroupWithConditions", + "logicalId": "myLambdaFunction2", "entityType": "Resource", - "resourceType": "AWS::IAM::Group" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ManagedPolicyArns", + "suggestedFix": "Check that the GetAtt target resource exists in the template", + "category": "Intrinsic Function", + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 20, + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" + }, + { + "ruleId": "F1020", + "severity": "FATAL", + "message": "Fn::GetAtt references non-existent resource 'myLambdaExecutionRole'", + "source": "SCHEMA", + "entity": { + "logicalId": "myLambdaFunction3", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "suggestedFix": "Check that the GetAtt target resource exists in the template", + "category": "Intrinsic Function", + "startLine": 26, + "startColumn": 3, + "endLine": 26, + "endColumn": 20, + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" + }, + { + "ruleId": "F3031", + "severity": "FATAL", + "message": "'DXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheLambdaName' does not match pattern '^([a-zA-Z0-9_-]{1,64}|arn:[a-zA-Z0-9-]+:lambda:[a-zA-Z0-9-]+:\\d{12}:function:[a-zA-Z0-9_-]{1,64})$'", + "source": "SCHEMA", + "entity": { + "logicalId": "myLambdaFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.FunctionName", "category": "Schema", - "startLine": 22, + "startLine": 9, "startColumn": 7, - "endLine": 22, - "endColumn": 24, - "conditionScenario": { - "isPrimaryRegion": true - }, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Array items not unique", + "endLine": 9, + "endColumn": 19, + "ruleDescription": "Value does not match pattern", "phase": "SCHEMA", "context": { - "actualValue": null, - "resolutionSource": "Fn::If on condition 'isPrimaryRegion'" + "actualValue": "DXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheLambdaName", + "expectedConstraint": "^([a-zA-Z0-9_-]{1,64}|arn:[a-zA-Z0-9-]+:lambda:[a-zA-Z0-9-]+:\\d{12}:function:[a-zA-Z0-9_-]{1,64})$" } }, { - "ruleId": "F3037", + "ruleId": "F3033", "severity": "FATAL", - "message": "Array items are not unique", + "message": "length 148 exceeds maximum 128", "source": "SCHEMA", "entity": { - "logicalId": "IamGroupWithNestedConditions", + "logicalId": "myLambdaFunction2", "entityType": "Resource", - "resourceType": "AWS::IAM::Group" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ManagedPolicyArns", + "propertyPath": "Properties.Handler", "category": "Schema", - "startLine": 33, + "startLine": 20, "startColumn": 7, - "endLine": 33, - "endColumn": 24, - "conditionScenario": { - "isPrimaryRegion": true + "endLine": 20, + "endColumn": 14, + "ruleDescription": "String length out of bounds", + "phase": "SCHEMA", + "context": { + "actualValue": "DXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheDXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbhe.handler", + "extra": { + "actual_length": 148, + "max_length": 128, + "min_length": 0 + } + } + }, + { + "ruleId": "F3033", + "severity": "FATAL", + "message": "length 280 exceeds maximum 256", + "source": "SCHEMA", + "entity": { + "logicalId": "myLambdaFunction3", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Array items not unique", + "propertyPath": "Properties.Description", + "category": "Schema", + "startLine": 30, + "startColumn": 7, + "endLine": 30, + "endColumn": 18, + "ruleDescription": "String length out of bounds", "phase": "SCHEMA", "context": { - "actualValue": [ - "arn:aws:iam::aws:policy/AdministratorPolicy", - "arn:aws:iam::aws:policy/AdministratorPolicy" - ] + "actualValue": "DXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheDXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheDXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheDXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbhe", + "extra": { + "actual_length": 280, + "max_length": 256, + "min_length": 0 + } } - } - ] - }, - "bad/resources/properties/primitive_types_map.yaml": { - "filePath": "bad/resources/properties/primitive_types_map.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 4, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs10.x' was deprecated on '2021-07-30'. Creation was disabled on '2021-07-30', and updates were disabled on '2022-02-14'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "ExampleLambda", + "logicalId": "myLambdaFunction", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 19, + "startLine": 14, "startColumn": 7, - "endLine": 19, + "endLine": 14, "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "actualValue": "nodejs10.x", + "lifecycle": "end-of-life" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs10.x' was deprecated on '2021-07-30'. Creation was disabled on '2021-07-30', and updates were disabled on '2022-02-14'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "ExampleLambda1", + "logicalId": "myLambdaFunction2", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 39, + "startLine": 24, "startColumn": 7, - "endLine": 39, + "endLine": 24, "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "actualValue": "nodejs10.x", + "lifecycle": "end-of-life" } }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs10.x' was deprecated on '2021-07-30'. Creation was disabled on '2021-07-30', and updates were disabled on '2022-02-14'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "ExampleLambda", + "logicalId": "myLambdaFunction3", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "category": "Security", - "startLine": 5, - "startColumn": 3, - "endLine": 5, - "endColumn": 16, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs10.x", + "lifecycle": "end-of-life" + } }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", + "ruleId": "E3019", + "severity": "ERROR", + "message": "Primary identifiers {'FunctionName': 'LambdaName'} should have unique values across the resources {'myLambdaFunction2', 'myLambdaFunction3'}", + "source": "CFN_LINT", "entity": { - "logicalId": "ExampleLambda1", + "logicalId": "myLambdaFunction2", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "category": "Security", - "startLine": 22, - "startColumn": 3, - "endLine": 22, - "endColumn": 17, - "ruleDescription": "Hardcoded account ID in ARN", + "propertyPath": "Properties.FunctionName", + "category": "Resource", + "startLine": 19, + "startColumn": 7, + "endLine": 19, + "endColumn": 19, + "ruleDescription": "Validate that all resources have unique primary identifiers", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ExampleLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3019", + "severity": "ERROR", + "message": "Primary identifiers {'FunctionName': 'LambdaName'} should have unique values across the resources {'myLambdaFunction2', 'myLambdaFunction3'}", + "source": "CFN_LINT", "entity": { - "logicalId": "ExampleLambda", + "logicalId": "myLambdaFunction3", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.FunctionName", + "category": "Resource", + "startLine": 29, + "startColumn": 7, + "endLine": 29, + "endColumn": 19, + "ruleDescription": "Validate that all resources have unique primary identifiers", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ExampleLambda1' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ExampleLambda1", + "logicalId": "myLambdaFunction", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 23, - "startColumn": 5, - "endLine": 23, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/resources/properties/string_size.yaml": { - "filePath": "bad/resources/properties/string_size.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 5, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F3014", - "severity": "FATAL", - "message": "Exactly one of ['Metrics', 'MetricName', 'EvaluationCriteria'] must be specified", - "source": "SCHEMA", - "entity": { - "logicalId": "CloudWatchAlarm", - "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" - }, - "propertyPath": "Properties", - "category": "Schema", - "startLine": 14, - "startColumn": 5, - "endLine": 14, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Exactly one of properties required (requiredXor)", - "phase": "SCHEMA" - }, - { - "ruleId": "F3031", - "severity": "FATAL", - "message": "'' does not match pattern '^[a-zA-Z0-9._\\-]+(? mySecurityGroupVpc2 -> mySecurityGroupVpc1]", + "message": "'./test.zip' is not of type 'object'", "source": "SCHEMA", "entity": { - "logicalId": "mySecurityGroupVpc1", + "logicalId": "SampleLambda", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Resources/mySecurityGroupVpc1", - "category": "Reference", - "startLine": 23, - "startColumn": 3, - "endLine": 23, - "endColumn": 22, - "ruleDescription": "Circular dependency detected", - "phase": "LINT" + "propertyPath": "Properties.DeadLetterConfig", + "category": "Schema", + "startLine": 13, + "startColumn": 7, + "endLine": 13, + "endColumn": 23, + "ruleDescription": "Property type mismatch", + "phase": "SCHEMA", + "context": { + "actualValue": "./test.zip", + "expectedConstraint": "object" + } }, { - "ruleId": "F3004", + "ruleId": "F3031", "severity": "FATAL", - "message": "Circular Dependencies for resource mySecurityGroupVpc2. Circular dependency with [mySecurityGroupVpc2 -> mySecurityGroupVpc1 -> mySecurityGroupVpc2]", + "message": "'role:arn' does not match pattern '^arn:(aws[a-zA-Z-]*)?:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$'", "source": "SCHEMA", "entity": { - "logicalId": "mySecurityGroupVpc2", + "logicalId": "SampleLambda", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Resources/mySecurityGroupVpc2", - "category": "Reference", - "startLine": 33, - "startColumn": 3, - "endLine": 33, - "endColumn": 22, - "ruleDescription": "Circular dependency detected", - "phase": "LINT" - }, - { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource mySecurityGroupVpc3. Circular dependency with [mySecurityGroupVpc3 -> mySecurityGroupVpc3]", - "source": "SCHEMA", - "entity": { - "logicalId": "mySecurityGroupVpc3", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Resources/mySecurityGroupVpc3", - "category": "Reference", - "startLine": 41, - "startColumn": 3, - "endLine": 41, - "endColumn": 22, - "ruleDescription": "Circular dependency detected", - "phase": "LINT" - }, - { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource myRoleToWriteToS3. Circular dependency with [myRoleToWriteToS3 -> myKms -> myInstanceProfile -> myRoleToWriteToS3]", - "source": "SCHEMA", - "entity": { - "logicalId": "myRoleToWriteToS3", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Resources/myRoleToWriteToS3", - "category": "Reference", - "startLine": 96, - "startColumn": 3, - "endLine": 96, - "endColumn": 20, - "ruleDescription": "Circular dependency detected", - "phase": "LINT" - }, - { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource myInstanceProfile. Circular dependency with [myInstanceProfile -> myRoleToWriteToS3 -> myKms -> myInstanceProfile]", - "source": "SCHEMA", - "entity": { - "logicalId": "myInstanceProfile", - "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" - }, - "propertyPath": "Resources/myInstanceProfile", - "category": "Reference", - "startLine": 145, - "startColumn": 3, - "endLine": 145, - "endColumn": 20, - "ruleDescription": "Circular dependency detected", - "phase": "LINT" - }, - { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource myKms. Circular dependency with [myKms -> myInstanceProfile -> myRoleToWriteToS3 -> myKms]", - "source": "SCHEMA", - "entity": { - "logicalId": "myKms", - "entityType": "Resource", - "resourceType": "AWS::KMS::Key" - }, - "propertyPath": "Resources/myKms", - "category": "Reference", - "startLine": 153, - "startColumn": 3, - "endLine": 153, - "endColumn": 8, - "ruleDescription": "Circular dependency detected", - "phase": "LINT" - }, - { - "ruleId": "E1150", - "severity": "ERROR", - "message": "'sg-1234567' does not match format 'AWS::EC2::SecurityGroup.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "mySecurityGroupVpc1", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.0.SourceSecurityGroupId", - "category": "Intrinsic Function", - "startLine": 30, - "startColumn": 11, - "endLine": 30, - "endColumn": 32, - "ruleDescription": "Validate security group format", + "propertyPath": "Properties.Role", + "category": "Schema", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 11, + "ruleDescription": "Value does not match pattern", "phase": "SCHEMA", "context": { - "actualValue": "sg-1234567" + "actualValue": "role:arn", + "expectedConstraint": "^arn:(aws[a-zA-Z-]*)?:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$" } }, { - "ruleId": "E1152", + "ruleId": "E2533", "severity": "ERROR", - "message": "'String' does not match format 'AWS::EC2::Image.Id'", + "message": "Runtime 'python2.7' was deprecated on '2021-07-15'. Creation was disabled on '2021-07-15', and updates were disabled on '2022-05-30'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "myInstanceSub", + "logicalId": "SampleLambda", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 216, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 8, "startColumn": 7, - "endLine": 216, + "endLine": 8, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "actualValue": "String" + "actualValue": "python2.7", + "lifecycle": "end-of-life" } }, { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate requires Cpu to be specified", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", "source": "CFN_LINT", "entity": { - "logicalId": "taskdefinition", + "logicalId": "SampleLambda", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties", - "suggestedFix": "Set Cpu to a valid Fargate value (256, 512, 1024, 2048, 4096, 8192, 16384, or 32768)", - "category": "Resource", - "startLine": 222, - "startColumn": 5, - "endLine": 222, - "endColumn": 15, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "propertyPath": "Properties.Code", + "category": "Best Practice", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 11, + "ruleDescription": "Warn when properties are configured to only work with the package command", "phase": "LINT" }, { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate requires Memory to be specified", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SampleLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "taskdefinition", + "logicalId": "SampleLambda", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties", - "suggestedFix": "Set Memory to a valid Fargate value", - "category": "Resource", - "startLine": 222, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 6, "startColumn": 5, - "endLine": 222, + "endLine": 6, "endColumn": 15, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/resources/rds/instance_sizes.yaml": { + "filePath": "bad/resources/rds/instance_sizes.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 8, + "counts": { + "fatal": 0, + "errors": 4, + "warnings": 6, + "informational": 39, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "E3048", + "ruleId": "E3025", "severity": "ERROR", - "message": "Fargate requires NetworkMode to be specified as 'awsvpc'", + "message": "'db.m4.xlarge' is not one of ['db.r3.2xlarge', 'db.r3.4xlarge', 'db.r3.8xlarge', 'db.r3.large', 'db.r3.xlarge', 'db.r4.16xlarge', 'db.r4.2xlarge', 'db.r4.4xlarge', 'db.r4.8xlarge', 'db.r4.large', 'db.r4.xlarge', 'db.r5.12xlarge', 'db.r5.16xlarge', 'db.r5.24xlarge', 'db.r5.2xlarge', 'db.r5.4xlarge', 'db.r5.8xlarge', 'db.r5.large', 'db.r5.xlarge', 'db.r6g.12xlarge', 'db.r6g.16xlarge', 'db.r6g.2xlarge', 'db.r6g.4xlarge', 'db.r6g.8xlarge', 'db.r6g.large', 'db.r6g.xlarge', 'db.r6i.12xlarge', 'db.r6i.16xlarge', 'db.r6i.24xlarge', 'db.r6i.2xlarge', 'db.r6i.32xlarge', 'db.r6i.4xlarge', 'db.r6i.8xlarge', 'db.r6i.large', 'db.r6i.xlarge', 'db.r7g.12xlarge', 'db.r7g.16xlarge', 'db.r7g.2xlarge', 'db.r7g.4xlarge', 'db.r7g.8xlarge', 'db.r7g.large', 'db.r7g.xlarge', 'db.r7i.12xlarge', 'db.r7i.16xlarge', 'db.r7i.24xlarge', 'db.r7i.2xlarge', 'db.r7i.48xlarge', 'db.r7i.4xlarge', 'db.r7i.8xlarge', 'db.r7i.large', 'db.r7i.xlarge', 'db.r8g.12xlarge', 'db.r8g.16xlarge', 'db.r8g.24xlarge', 'db.r8g.2xlarge', 'db.r8g.48xlarge', 'db.r8g.4xlarge', 'db.r8g.8xlarge', 'db.r8g.large', 'db.r8g.xlarge', 'db.serverless', 'db.t2.medium', 'db.t2.small', 'db.t3.large', 'db.t3.medium', 'db.t3.small', 'db.t4g.large', 'db.t4g.medium', 'db.x2g.12xlarge', 'db.x2g.16xlarge', 'db.x2g.2xlarge', 'db.x2g.4xlarge', 'db.x2g.8xlarge', 'db.x2g.large', 'db.x2g.xlarge'] when Engine is 'aurora-mysql' in any region", "source": "CFN_LINT", "entity": { - "logicalId": "taskdefinition", + "logicalId": "DBInstance1", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties", - "suggestedFix": "Set NetworkMode to 'awsvpc'", + "propertyPath": "Properties.DBInstanceClass", "category": "Resource", - "startLine": 222, - "startColumn": 5, - "endLine": 222, - "endColumn": 15, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "startLine": 13, + "startColumn": 7, + "endLine": 13, + "endColumn": 22, + "ruleDescription": "Validates RDS DB Instance Class", "phase": "LINT" }, { - "ruleId": "E3687", + "ruleId": "E3025", "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "message": "'db.x2e.xlarge' is not one of ['db.m3.2xlarge', 'db.m3.large', 'db.m3.medium', 'db.m3.xlarge', 'db.m4.2xlarge', 'db.m4.4xlarge', 'db.m4.large', 'db.m4.xlarge', 'db.m5.12xlarge', 'db.m5.16xlarge', 'db.m5.2xlarge', 'db.m5.4xlarge', 'db.m5.8xlarge', 'db.m5.large', 'db.m5.xlarge', 'db.m5d.2xlarge', 'db.m5d.4xlarge', 'db.m5d.large', 'db.m5d.xlarge', 'db.m6i.2xlarge', 'db.m6i.32xlarge', 'db.m6i.4xlarge', 'db.m6i.large', 'db.m6i.metal', 'db.m6i.xlarge', 'db.m6id.2xlarge', 'db.m6id.4xlarge', 'db.m6id.large', 'db.m6id.metal', 'db.m6id.xlarge', 'db.m6in.2xlarge', 'db.m6in.4xlarge', 'db.m6in.large', 'db.m6in.xlarge', 'db.m7i.2xlarge', 'db.m7i.4xlarge', 'db.m7i.large', 'db.m7i.metal-24xl', 'db.m7i.metal-48xl', 'db.m7i.xlarge', 'db.m8i.2xlarge', 'db.m8i.4xlarge', 'db.m8i.large', 'db.m8i.metal-48xl', 'db.m8i.metal-96xl', 'db.m8i.xlarge', 'db.r3.2xlarge', 'db.r3.4xlarge', 'db.r3.large', 'db.r3.xlarge', 'db.r4.2xlarge', 'db.r4.4xlarge', 'db.r4.large', 'db.r4.xlarge', 'db.r5.2xlarge', 'db.r5.2xlarge.tpc1.mem2x', 'db.r5.2xlarge.tpc2.mem4x', 'db.r5.2xlarge.tpc2.mem8x', 'db.r5.4xlarge', 'db.r5.4xlarge.tpc2.mem2x', 'db.r5.4xlarge.tpc2.mem3x', 'db.r5.4xlarge.tpc2.mem4x', 'db.r5.8xlarge', 'db.r5.large', 'db.r5.large.tpc1.mem2x', 'db.r5.xlarge', 'db.r5.xlarge.tpc2.mem2x', 'db.r5.xlarge.tpc2.mem4x', 'db.r5b.2xlarge', 'db.r5b.2xlarge.tpc1.mem2x', 'db.r5b.2xlarge.tpc2.mem4x', 'db.r5b.2xlarge.tpc2.mem8x', 'db.r5b.4xlarge', 'db.r5b.4xlarge.tpc2.mem2x', 'db.r5b.4xlarge.tpc2.mem3x', 'db.r5b.4xlarge.tpc2.mem4x', 'db.r5b.large', 'db.r5b.large.tpc1.mem2x', 'db.r5b.xlarge', 'db.r5b.xlarge.tpc2.mem2x', 'db.r5b.xlarge.tpc2.mem4x', 'db.r5d.2xlarge', 'db.r5d.4xlarge', 'db.r5d.large', 'db.r5d.xlarge', 'db.r6i.2xlarge', 'db.r6i.2xlarge.tpc1.mem2x', 'db.r6i.2xlarge.tpc2.mem4x', 'db.r6i.2xlarge.tpc2.mem8x', 'db.r6i.32xlarge', 'db.r6i.4xlarge', 'db.r6i.4xlarge.tpc2.mem2x', 'db.r6i.4xlarge.tpc2.mem3x', 'db.r6i.4xlarge.tpc2.mem4x', 'db.r6i.large', 'db.r6i.large.tpc1.mem2x', 'db.r6i.metal', 'db.r6i.xlarge', 'db.r6i.xlarge.tpc2.mem2x', 'db.r6i.xlarge.tpc2.mem4x', 'db.r6id.2xlarge', 'db.r6id.4xlarge', 'db.r6id.large', 'db.r6id.metal', 'db.r6id.xlarge', 'db.r6in.2xlarge', 'db.r6in.4xlarge', 'db.r6in.large', 'db.r6in.xlarge', 'db.r7i.2xlarge', 'db.r7i.2xlarge.tpc2.mem4x', 'db.r7i.2xlarge.tpc2.mem8x', 'db.r7i.3xlarge.tpc2.mem4x', 'db.r7i.4xlarge', 'db.r7i.4xlarge.tpc2.mem2x', 'db.r7i.4xlarge.tpc2.mem3x', 'db.r7i.4xlarge.tpc2.mem4x', 'db.r7i.large', 'db.r7i.metal-24xl', 'db.r7i.metal-48xl', 'db.r7i.xlarge', 'db.r7i.xlarge.tpc2.mem2x', 'db.r7i.xlarge.tpc2.mem4x', 'db.r8i.2xlarge', 'db.r8i.4xlarge', 'db.r8i.large', 'db.r8i.metal-48xl', 'db.r8i.metal-96xl', 'db.r8i.xlarge', 'db.t2.2xlarge', 'db.t2.large', 'db.t2.medium', 'db.t2.micro', 'db.t2.small', 'db.t2.xlarge', 'db.t3.2xlarge', 'db.t3.large', 'db.t3.medium', 'db.t3.small', 'db.t3.xlarge', 'db.x1e.2xlarge', 'db.x1e.4xlarge', 'db.x1e.xlarge', 'db.x2idn.metal', 'db.x2iedn.2xlarge', 'db.x2iedn.4xlarge', 'db.x2iedn.metal', 'db.x2iedn.xlarge', 'db.x2iezn.2xlarge', 'db.x2iezn.4xlarge', 'db.x2iezn.metal', 'db.z1d.2xlarge', 'db.z1d.3xlarge', 'db.z1d.large', 'db.z1d.xlarge'] when Engine is 'oracle-se2' and LicenseModel is 'bring-your-own-license' in any region", "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupVpc1", + "logicalId": "DBInstance2", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SecurityGroupIngress.0", + "propertyPath": "Properties.DBInstanceClass", "category": "Resource", - "startLine": 29, - "startColumn": 21, - "endLine": 29, + "startLine": 19, + "startColumn": 7, + "endLine": 19, "endColumn": 22, - "ruleDescription": "Validate to and from ports based on the protocol", + "ruleDescription": "Validates RDS DB Instance Class", "phase": "LINT" }, { - "ruleId": "E3687", + "ruleId": "E3025", "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "message": "'db.x1e.xlarge' is not one of ['db.m3.2xlarge', 'db.m3.large', 'db.m3.medium', 'db.m3.xlarge', 'db.m4.2xlarge', 'db.m4.4xlarge', 'db.m4.large', 'db.m4.xlarge', 'db.m5.2xlarge', 'db.m5.4xlarge', 'db.m5.large', 'db.m5.xlarge', 'db.m8i.2xlarge', 'db.m8i.4xlarge', 'db.m8i.large', 'db.m8i.xlarge', 'db.r3.2xlarge', 'db.r3.4xlarge', 'db.r3.large', 'db.r3.xlarge', 'db.r4.2xlarge', 'db.r4.4xlarge', 'db.r4.large', 'db.r4.xlarge', 'db.r5.2xlarge', 'db.r5.4xlarge', 'db.r5.large', 'db.r5.xlarge', 'db.r6i.2xlarge', 'db.r6i.4xlarge', 'db.r6i.large', 'db.r6i.xlarge', 'db.r8i.2xlarge', 'db.r8i.4xlarge', 'db.r8i.large', 'db.r8i.xlarge', 'db.t2.2xlarge', 'db.t2.large', 'db.t2.medium', 'db.t2.micro', 'db.t2.small', 'db.t2.xlarge', 'db.t3.2xlarge', 'db.t3.large', 'db.t3.medium', 'db.t3.small', 'db.t3.xlarge', 'db.x2iedn.4xlarge'] when Engine is 'oracle-se2' and LicenseModel is 'license-included' in any region", "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupVpc1", + "logicalId": "DBInstance3", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SecurityGroupIngress.1", + "propertyPath": "Properties.DBInstanceClass", "category": "Resource", - "startLine": 31, - "startColumn": 21, - "endLine": 31, + "startLine": 26, + "startColumn": 7, + "endLine": 26, "endColumn": 22, - "ruleDescription": "Validate to and from ports based on the protocol", + "ruleDescription": "Validates RDS DB Instance Class", "phase": "LINT" }, { - "ruleId": "E3687", + "ruleId": "E9006", "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "message": "'bad-ee' is not one of ['aurora-mysql', 'aurora-postgresql', 'custom-oracle-ee', 'custom-oracle-ee-cdb', 'custom-sqlserver-ee', 'custom-sqlserver-se', 'custom-sqlserver-web', 'db2-ae', 'db2-se', 'mariadb', 'mysql', 'oracle-ee', 'oracle-ee-cdb', 'oracle-se2', 'oracle-se2-cdb', 'postgres', 'sqlserver-ee', 'sqlserver-ex', 'sqlserver-se', 'sqlserver-web']", "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupVpc2", + "logicalId": "DBInstance9", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SecurityGroupIngress.0", - "category": "Resource", - "startLine": 39, - "startColumn": 21, - "endLine": 39, - "endColumn": 22, - "ruleDescription": "Validate to and from ports based on the protocol", - "phase": "LINT" + "propertyPath": "Properties.Engine", + "category": "Schema", + "startLine": 60, + "startColumn": 7, + "endLine": 60, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Property value not valid for conditional extension enum", + "phase": "SCHEMA" }, { - "ruleId": "E3687", - "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", - "source": "CFN_LINT", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc3", + "logicalId": "DBInstance2", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SecurityGroupIngress.0", - "category": "Resource", - "startLine": 47, - "startColumn": 21, - "endLine": 47, - "endColumn": 22, - "ruleDescription": "Validate to and from ports based on the protocol", + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 18, + "startColumn": 5, + "endLine": 18, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, { - "ruleId": "W3005", + "ruleId": "W9008", "severity": "WARN", - "message": "'myInstanceProfile' dependency already enforced by a 'Ref' at 'Properties.IamInstanceProfile'", - "source": "CFN_LINT", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "DBInstance3", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 51, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 25, "startColumn": 5, - "endLine": 51, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 25, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, { - "ruleId": "W3005", + "ruleId": "W9008", "severity": "WARN", - "message": "'myKms' dependency already enforced by a 'Ref' at 'Properties.BucketEncryption.ServerSideEncryptionConfiguration.0.ServerSideEncryptionByDefault.KMSMasterKeyID'", - "source": "CFN_LINT", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", "entity": { - "logicalId": "myBucket", + "logicalId": "DBInstance4", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 64, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 32, "startColumn": 5, - "endLine": 64, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 32, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, { - "ruleId": "W3005", + "ruleId": "W9008", "severity": "WARN", - "message": "'myKms' dependency already enforced by a 'Ref' at 'Properties.Policies.0.PolicyDocument.Statement.0.Condition.StringEquals.s3:x-amz-server-side-encryption-aws-kms-key-id'", - "source": "CFN_LINT", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", "entity": { - "logicalId": "myRoleToWriteToS3", + "logicalId": "DBInstance7", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 98, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 44, "startColumn": 5, - "endLine": 98, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 44, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, { - "ruleId": "W3005", + "ruleId": "W9008", "severity": "WARN", - "message": "'myRoleToWriteToS3' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", - "source": "CFN_LINT", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", "entity": { - "logicalId": "myInstanceProfile", + "logicalId": "DBInstance8", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 147, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 51, "startColumn": 5, - "endLine": 147, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 51, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, { - "ruleId": "W9003", + "ruleId": "W9008", "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc1", + "logicalId": "DBInstance9", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SecurityGroupIngress.0.IpProtocol", - "category": "Best Practice", - "startLine": 29, - "startColumn": 11, - "endLine": 29, - "endColumn": 21, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 58, + "startColumn": 5, + "endLine": 58, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", + "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": "mySecurityGroupVpc1", + "logicalId": "DBInstance1", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SecurityGroupIngress.1.IpProtocol", "category": "Best Practice", - "startLine": 31, - "startColumn": 11, - "endLine": 31, - "endColumn": 21, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", + "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": "mySecurityGroupVpc2", + "logicalId": "DBInstance1", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SecurityGroupIngress.0.IpProtocol", "category": "Best Practice", - "startLine": 39, - "startColumn": 11, - "endLine": 39, - "endColumn": 21, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", + "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": "mySecurityGroupVpc3", + "logicalId": "DBInstance2", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SecurityGroupIngress.0.IpProtocol", "category": "Best Practice", - "startLine": 47, - "startColumn": 11, - "endLine": 47, - "endColumn": 21, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "0 is not of type 'string' - automatically coerced (number to string)", + "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": "myInstance", + "logicalId": "DBInstance2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.NetworkInterfaces.0.DeviceIndex", "category": "Best Practice", - "startLine": 61, - "startColumn": 11, - "endLine": 61, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I3011", @@ -2682,15 +2519,15 @@ "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": "myKms", + "logicalId": "DBInstance3", "entityType": "Resource", - "resourceType": "AWS::KMS::Key" + "resourceType": "AWS::RDS::DBInstance" }, "category": "Best Practice", - "startLine": 153, + "startLine": 23, "startColumn": 3, - "endLine": 153, - "endColumn": 8, + "endLine": 23, + "endColumn": 14, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -2700,308 +2537,329 @@ "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": "myKms", + "logicalId": "DBInstance3", "entityType": "Resource", - "resourceType": "AWS::KMS::Key" + "resourceType": "AWS::RDS::DBInstance" }, "category": "Best Practice", - "startLine": 153, + "startLine": 23, "startColumn": 3, - "endLine": 153, - "endColumn": 8, + "endLine": 23, + "endColumn": 14, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I3042", + "ruleId": "I3011", "severity": "INFO", - "message": "ARN in Resource myBucketPolicy contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", + "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": "myBucketPolicy", + "logicalId": "DBInstance4", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Resource.Fn::Sub", "category": "Best Practice", - "startLine": 84, - "startColumn": 13, - "endLine": 84, - "endColumn": 20, - "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", + "startLine": 30, + "startColumn": 3, + "endLine": 30, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I3042", + "ruleId": "I3011", "severity": "INFO", - "message": "ARN in Resource myBucketPolicy contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", + "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": "myBucketPolicy", + "logicalId": "DBInstance4", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.PolicyDocument.Statement.1.Resource.Fn::Sub", "category": "Best Practice", - "startLine": 92, - "startColumn": 13, - "endLine": 92, - "endColumn": 20, - "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", + "startLine": 30, + "startColumn": 3, + "endLine": 30, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I3042", + "ruleId": "I3011", "severity": "INFO", - "message": "ARN in Resource myKms contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", + "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": "myKms", + "logicalId": "DBInstance5", "entityType": "Resource", - "resourceType": "AWS::KMS::Key" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.KeyPolicy.Statement.0.Principal.AWS.Fn::Sub", "category": "Best Practice", - "startLine": 165, - "startColumn": 15, - "endLine": 165, - "endColumn": 22, - "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", + "startLine": 36, + "startColumn": 3, + "endLine": 36, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I3042", + "ruleId": "I3011", "severity": "INFO", - "message": "ARN in Resource myKms contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", + "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": "myKms", + "logicalId": "DBInstance5", "entityType": "Resource", - "resourceType": "AWS::KMS::Key" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.KeyPolicy.Statement.1.Principal.AWS.Fn::Sub", "category": "Best Practice", - "startLine": 171, - "startColumn": 15, - "endLine": 171, - "endColumn": 22, - "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", + "startLine": 36, + "startColumn": 3, + "endLine": 36, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I3042", + "ruleId": "I3011", "severity": "INFO", - "message": "ARN in Resource myKms contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", + "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": "myKms", + "logicalId": "DBInstance7", "entityType": "Resource", - "resourceType": "AWS::KMS::Key" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.KeyPolicy.Statement.2.Principal.AWS.0.Fn::Sub", "category": "Best Practice", - "startLine": 192, - "startColumn": 24, - "endLine": 192, - "endColumn": 31, - "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", + "startLine": 42, + "startColumn": 3, + "endLine": 42, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I3042", + "ruleId": "I3011", "severity": "INFO", - "message": "ARN in Resource myKms contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", + "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": "myKms", + "logicalId": "DBInstance7", "entityType": "Resource", - "resourceType": "AWS::KMS::Key" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.KeyPolicy.Statement.3.Principal.AWS.Fn::Sub", "category": "Best Practice", - "startLine": 204, - "startColumn": 15, - "endLine": 204, - "endColumn": 22, - "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", + "startLine": 42, + "startColumn": 3, + "endLine": 42, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "mySecurityGroupVpc1", + "logicalId": "DBInstance8", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 26, - "startColumn": 7, - "endLine": 26, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 49, + "startColumn": 3, + "endLine": 49, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "mySecurityGroupVpc1", + "logicalId": "DBInstance8", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 27, - "startColumn": 7, - "endLine": 27, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'myVpcId' (type AWS::EC2::VPC::Id)" - } + "startLine": 49, + "startColumn": 3, + "endLine": 49, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "mySecurityGroupVpc2", + "logicalId": "DBInstance9", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 36, - "startColumn": 7, - "endLine": 36, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 56, + "startColumn": 3, + "endLine": 56, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "mySecurityGroupVpc2", + "logicalId": "DBInstance9", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 37, - "startColumn": 7, - "endLine": 37, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'myVpcId' (type AWS::EC2::VPC::Id)" - } + "startLine": 56, + "startColumn": 3, + "endLine": 56, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "mySecurityGroupVpc3", + "logicalId": "DBInstance2", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 18, + "startColumn": 5, + "endLine": 18, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "DBInstance3", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 25, + "startColumn": 5, + "endLine": 25, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "DBInstance4", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 32, + "startColumn": 5, + "endLine": 32, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "DBInstance7", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", "category": "Best Practice", "startLine": 44, - "startColumn": 7, + "startColumn": 5, "endLine": 44, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "mySecurityGroupVpc3", + "logicalId": "DBInstance8", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 45, - "startColumn": 7, - "endLine": 45, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'myVpcId' (type AWS::EC2::VPC::Id)" - } + "startLine": 51, + "startColumn": 5, + "endLine": 51, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "myInstance", + "logicalId": "DBInstance9", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 54, - "startColumn": 7, - "endLine": 54, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'Ec2ImageId' (type AWS::EC2::Image::Id)" - } + "startLine": 58, + "startColumn": 5, + "endLine": 58, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "DBInstance1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 55, + "startLine": 14, "startColumn": 7, - "endLine": 55, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 14, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3011,277 +2869,165 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "DBInstance2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.NetworkInterfaces", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 56, + "startLine": 20, "startColumn": 7, - "endLine": 56, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 20, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myBucket", + "logicalId": "DBInstance3", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 71, + "startLine": 27, "startColumn": 7, - "endLine": 71, - "endColumn": 17, + "endLine": 27, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'myBucketName' (type String)" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myBucketPolicy", + "logicalId": "DBInstance4", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 75, + "startLine": 34, "startColumn": 7, - "endLine": 75, + "endLine": 34, "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'myBucket'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myRoleToWriteToS3", + "logicalId": "DBInstance5", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 100, + "startLine": 40, "startColumn": 7, - "endLine": 100, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 40, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only", + "resolutionSource": "parameter 'DatabaseEngine' (type String)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myRoleToWriteToS3", + "logicalId": "DBInstance7", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 110, + "startLine": 46, "startColumn": 7, - "endLine": 110, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 46, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceProfileName' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstanceProfile", + "logicalId": "DBInstance8", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.InstanceProfileName", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 149, + "startLine": 53, "startColumn": 7, - "endLine": 149, - "endColumn": 26, + "endLine": 53, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstanceProfile", - "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" - }, - "propertyPath": "Properties.Path", - "category": "Best Practice", - "startLine": 150, - "startColumn": 7, - "endLine": 150, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "myInstanceSub", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 216, - "startColumn": 7, - "endLine": 216, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "myInstanceSub", + "logicalId": "DBInstance9", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 217, + "startLine": 60, "startColumn": 7, - "endLine": 217, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 60, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "conditional-create-only" } }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "taskdefinition", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 223, - "startColumn": 7, - "endLine": 223, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "taskdefinition", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 226, - "startColumn": 7, - "endLine": 226, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Volumes' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "taskdefinition", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Volumes", - "category": "Best Practice", - "startLine": 258, - "startColumn": 7, - "endLine": 258, - "endColumn": 14, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, { "ruleId": "I9003", "severity": "INFO", @@ -3294,39 +3040,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'mySecurityGroupVpc1' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "mySecurityGroupVpc1", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'mySecurityGroupVpc2' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'DBInstance1' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc2", + "logicalId": "DBInstance1", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 35, + "startLine": 12, "startColumn": 5, - "endLine": 35, + "endLine": 12, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -3334,19 +3060,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'mySecurityGroupVpc3' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'DBInstance2' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc3", + "logicalId": "DBInstance2", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 43, + "startLine": 18, "startColumn": 5, - "endLine": 43, + "endLine": 18, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -3354,19 +3080,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'DBInstance3' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "DBInstance3", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 52, + "startLine": 25, "startColumn": 5, - "endLine": 52, + "endLine": 25, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -3374,19 +3100,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'DBInstance4' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myBucket", + "logicalId": "DBInstance4", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 65, + "startLine": 32, "startColumn": 5, - "endLine": 65, + "endLine": 32, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -3394,19 +3120,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myRoleToWriteToS3' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'DBInstance5' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myRoleToWriteToS3", + "logicalId": "DBInstance5", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 99, + "startLine": 38, "startColumn": 5, - "endLine": 99, + "endLine": 38, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -3414,19 +3140,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myKms' of type 'AWS::KMS::Key' supports Tags but none are configured", + "message": "Resource 'DBInstance7' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myKms", + "logicalId": "DBInstance7", "entityType": "Resource", - "resourceType": "AWS::KMS::Key" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 155, + "startLine": 44, "startColumn": 5, - "endLine": 155, + "endLine": 44, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -3434,19 +3160,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myInstanceSub' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'DBInstance8' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myInstanceSub", + "logicalId": "DBInstance8", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 215, + "startLine": 51, "startColumn": 5, - "endLine": 215, + "endLine": 51, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -3454,35 +3180,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'taskdefinition' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'DBInstance9' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "taskdefinition", + "logicalId": "DBInstance9", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 222, + "startLine": 58, "startColumn": 5, - "endLine": 222, + "endLine": 58, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/resources_circular_dependency_2.yaml": { - "filePath": "bad/resources_circular_dependency_2.yaml", + "bad/resources/rds/not_enum_master_username.yaml": { + "filePath": "bad/resources/rds/not_enum_master_username.yaml", "status": "OK", "metadata": { - "resourcesScanned": 9, + "resourcesScanned": 1, "counts": { - "fatal": 9, + "fatal": 1, "errors": 0, - "warnings": 0, - "informational": 9, + "warnings": 1, + "informational": 6, "debug": 0 }, "suppressed": 0, @@ -3491,367 +3217,280 @@ }, "diagnostics": [ { - "ruleId": "F3004", + "ruleId": "F3017", "severity": "FATAL", - "message": "Circular Dependencies for resource Resource. Circular dependency with [Resource -> Resource2 -> Resource3 -> Resource4 -> Resource5 -> Resource6 -> Resource7 -> Resource8 -> Resource9 -> Resource]", + "message": "'rdsadmin' at 'MasterUsername' does not satisfy the composition branch constraint (none of ['rdsadmin']): 'rdsadmin' must not be one of ['rdsadmin']", "source": "SCHEMA", "entity": { - "logicalId": "Resource", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Resources/Resource", - "category": "Reference", - "startLine": 2, - "startColumn": 3, - "endLine": 2, - "endColumn": 11, - "ruleDescription": "Circular dependency detected", - "phase": "LINT" - }, - { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource Resource2. Circular dependency with [Resource2 -> Resource3 -> Resource4 -> Resource5 -> Resource6 -> Resource7 -> Resource8 -> Resource9 -> Resource -> Resource2]", - "source": "SCHEMA", - "entity": { - "logicalId": "Resource2", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Resources/Resource2", - "category": "Reference", + "propertyPath": "Properties.MasterUsername", + "category": "Schema", "startLine": 7, - "startColumn": 3, + "startColumn": 7, "endLine": 7, - "endColumn": 12, - "ruleDescription": "Circular dependency detected", - "phase": "LINT" - }, - { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource Resource3. Circular dependency with [Resource3 -> Resource4 -> Resource5 -> Resource6 -> Resource7 -> Resource8 -> Resource9 -> Resource -> Resource2 -> Resource3]", - "source": "SCHEMA", - "entity": { - "logicalId": "Resource3", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Resources/Resource3", - "category": "Reference", - "startLine": 12, - "startColumn": 3, - "endLine": 12, - "endColumn": 12, - "ruleDescription": "Circular dependency detected", - "phase": "LINT" - }, - { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource Resource4. Circular dependency with [Resource4 -> Resource5 -> Resource6 -> Resource7 -> Resource8 -> Resource9 -> Resource -> Resource2 -> Resource3 -> Resource4]", - "source": "SCHEMA", - "entity": { - "logicalId": "Resource4", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Resources/Resource4", - "category": "Reference", - "startLine": 17, - "startColumn": 3, - "endLine": 17, - "endColumn": 12, - "ruleDescription": "Circular dependency detected", - "phase": "LINT" - }, - { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource Resource5. Circular dependency with [Resource5 -> Resource6 -> Resource7 -> Resource8 -> Resource9 -> Resource -> Resource2 -> Resource3 -> Resource4 -> Resource5]", - "source": "SCHEMA", - "entity": { - "logicalId": "Resource5", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Resources/Resource5", - "category": "Reference", - "startLine": 22, - "startColumn": 3, - "endLine": 22, - "endColumn": 12, - "ruleDescription": "Circular dependency detected", - "phase": "LINT" - }, - { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource Resource6. Circular dependency with [Resource6 -> Resource7 -> Resource8 -> Resource9 -> Resource -> Resource2 -> Resource3 -> Resource4 -> Resource5 -> Resource6]", - "source": "SCHEMA", - "entity": { - "logicalId": "Resource6", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Resources/Resource6", - "category": "Reference", - "startLine": 27, - "startColumn": 3, - "endLine": 27, - "endColumn": 12, - "ruleDescription": "Circular dependency detected", - "phase": "LINT" + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Value not valid under anyOf", + "phase": "SCHEMA" }, { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource Resource7. Circular dependency with [Resource7 -> Resource8 -> Resource9 -> Resource -> Resource2 -> Resource3 -> Resource4 -> Resource5 -> Resource6 -> Resource7]", - "source": "SCHEMA", + "ruleId": "W2501", + "severity": "WARN", + "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource7", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Resources/Resource7", - "category": "Reference", - "startLine": 32, - "startColumn": 3, - "endLine": 32, - "endColumn": 12, - "ruleDescription": "Circular dependency detected", + "propertyPath": "Properties.MasterUserPassword", + "category": "Security", + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 25, + "ruleDescription": "Check if Password Properties are correctly configured", "phase": "LINT" }, { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource Resource8. Circular dependency with [Resource8 -> Resource9 -> Resource -> Resource2 -> Resource3 -> Resource4 -> Resource5 -> Resource6 -> Resource7 -> Resource8]", - "source": "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": "Resource8", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Resources/Resource8", - "category": "Reference", - "startLine": 37, + "category": "Best Practice", + "startLine": 3, "startColumn": 3, - "endLine": 37, - "endColumn": 12, - "ruleDescription": "Circular dependency detected", + "endLine": 3, + "endColumn": 7, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource Resource9. Circular dependency with [Resource9 -> Resource -> Resource2 -> Resource3 -> Resource4 -> Resource5 -> Resource6 -> Resource7 -> Resource8 -> Resource9]", - "source": "SCHEMA", + "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": "Resource9", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Resources/Resource9", - "category": "Reference", - "startLine": 42, + "category": "Best Practice", + "startLine": 3, "startColumn": 3, - "endLine": 42, - "endColumn": 12, - "ruleDescription": "Circular dependency detected", + "endLine": 3, + "endColumn": 7, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'Resource' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "Resource", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 4, + "startLine": 5, "startColumn": 5, - "endLine": 4, + "endLine": 5, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Resource2' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource2", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Resource3' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource3", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 14, - "startColumn": 5, - "endLine": 14, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource4' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'MyDB' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource4", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBCluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 19, + "startLine": 5, "startColumn": 5, - "endLine": 19, - "endColumn": 15, - "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": 24, - "startColumn": 5, - "endLine": 24, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/resources/rds/not_enum_master_username_join.yaml": { + "filePath": "bad/resources/rds/not_enum_master_username_join.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource6' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F3017", + "severity": "FATAL", + "message": "'rdsadmin' at 'MasterUsername' does not satisfy the composition branch constraint (none of ['rdsadmin']): 'rdsadmin' must not be one of ['rdsadmin']", + "source": "SCHEMA", "entity": { - "logicalId": "Resource6", + "logicalId": "JoinedUsername", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 29, - "startColumn": 5, - "endLine": 29, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.MasterUsername", + "category": "Schema", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Value not valid under anyOf", + "phase": "SCHEMA" }, { - "ruleId": "I9040", + "ruleId": "I1022", "severity": "INFO", - "message": "Resource 'Resource7' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource7", + "logicalId": "JoinedUsername", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 34, - "startColumn": 5, - "endLine": 34, + "propertyPath": "Properties.MasterUsername.Fn::Join", + "category": "Intrinsic Function", + "startLine": 9, + "startColumn": 7, + "endLine": 9, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Use Sub instead of Join", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Resource8' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource8", + "logicalId": "JoinedUsername", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 39, - "startColumn": 5, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Resource9' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource9", + "logicalId": "JoinedUsername", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 42, - "startColumn": 3, - "endLine": 42, - "endColumn": 12, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } } ] }, - "bad/resources_circular_dependency_dependson.yaml": { - "filePath": "bad/resources_circular_dependency_dependson.yaml", + "bad/resources/s3/access-control-obsolete.yaml": { + "filePath": "bad/resources/s3/access-control-obsolete.yaml", "status": "OK", "metadata": { "resourcesScanned": 2, "counts": { - "fatal": 2, + "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -3861,95 +3500,103 @@ }, "diagnostics": [ { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource Resource. Circular dependency with [Resource -> Resource2 -> Resource]", - "source": "SCHEMA", + "ruleId": "W3045", + "severity": "WARN", + "message": "AccessControl property is deprecated. Use bucket policies instead", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource", + "logicalId": "Bucket1", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Resources/Resource", - "category": "Reference", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 11, - "ruleDescription": "Circular dependency detected", - "phase": "LINT" + "propertyPath": "Properties.AccessControl", + "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", + "category": "Deprecation", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 20, + "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", + "phase": "LINT", + "context": { + "actualValue": "Private" + } }, { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource Resource2. Circular dependency with [Resource2 -> Resource -> Resource2]", - "source": "SCHEMA", + "ruleId": "W3045", + "severity": "WARN", + "message": "AccessControl property is deprecated. Use bucket policies instead", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource2", + "logicalId": "Bucket2", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Resources/Resource2", - "category": "Reference", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 12, - "ruleDescription": "Circular dependency detected", - "phase": "LINT" + "propertyPath": "Properties.AccessControl", + "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", + "category": "Deprecation", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 20, + "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", + "phase": "LINT", + "context": { + "actualValue": "BucketOwnerFullControl" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Bucket1' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource", + "logicalId": "Bucket1", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "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": 11, + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, "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", + "message": "Resource 'Bucket2' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource2", + "logicalId": "Bucket2", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 12, + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/resources_cloudfront_invalid_aliases.yaml": { - "filePath": "bad/resources_cloudfront_invalid_aliases.yaml", + "bad/resources/sns/topic_name.yaml": { + "filePath": "bad/resources/sns/topic_name.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 0, - "errors": 8, + "fatal": 1, + "errors": 0, "warnings": 0, - "informational": 1, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -3958,187 +3605,161 @@ }, "diagnostics": [ { - "ruleId": "E3013", - "severity": "ERROR", - "message": "CloudFront alias 'email.*.example.com' has wildcard in invalid position", - "source": "CFN_LINT", - "entity": { - "logicalId": "CloudFrontDistribution", - "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" - }, - "propertyPath": "Properties.DistributionConfig.Aliases.13", - "category": "Resource", - "startLine": 21, - "startColumn": 13, - "endLine": 21, - "endColumn": 15, - "ruleDescription": "CloudFront Aliases", - "phase": "LINT" - }, - { - "ruleId": "E3013", - "severity": "ERROR", - "message": "CloudFront alias 'WWW.EXAMPLE.COM' is not a valid domain name", - "source": "CFN_LINT", - "entity": { - "logicalId": "CloudFrontDistribution", - "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" - }, - "propertyPath": "Properties.DistributionConfig.Aliases.14", - "category": "Resource", - "startLine": 22, - "startColumn": 13, - "endLine": 22, - "endColumn": 15, - "ruleDescription": "CloudFront Aliases", - "phase": "LINT" - }, - { - "ruleId": "E3013", - "severity": "ERROR", - "message": "CloudFront alias '-example.com' is not a valid domain name", - "source": "CFN_LINT", - "entity": { - "logicalId": "CloudFrontDistribution", - "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" - }, - "propertyPath": "Properties.DistributionConfig.Aliases.15", - "category": "Resource", - "startLine": 23, - "startColumn": 13, - "endLine": 23, - "endColumn": 15, - "ruleDescription": "CloudFront Aliases", - "phase": "LINT" - }, - { - "ruleId": "E3013", - "severity": "ERROR", - "message": "CloudFront alias 'example.c' is not a valid domain name", - "source": "CFN_LINT", + "ruleId": "F3033", + "severity": "FATAL", + "message": "length 362 exceeds maximum 256", + "source": "SCHEMA", "entity": { - "logicalId": "CloudFrontDistribution", + "logicalId": "MyTopic", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.DistributionConfig.Aliases.16", - "category": "Resource", - "startLine": 24, - "startColumn": 13, - "endLine": 24, - "endColumn": 15, - "ruleDescription": "CloudFront Aliases", - "phase": "LINT" + "propertyPath": "Properties.TopicName", + "category": "Schema", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "String length out of bounds", + "phase": "SCHEMA", + "context": { + "actualValue": "DXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheDXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheDXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheDXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheDXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheSNSTopicName", + "extra": { + "actual_length": 362, + "max_length": 256 + } + } }, { - "ruleId": "E3013", - "severity": "ERROR", - "message": "CloudFront alias 'www.example.com ' is not a valid domain name", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CloudFrontDistribution", + "logicalId": "MyTopic", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.DistributionConfig.Aliases.17", - "category": "Resource", - "startLine": 25, - "startColumn": 13, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "CloudFront Aliases", - "phase": "LINT" + "propertyPath": "Properties.TopicName", + "category": "Best Practice", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3013", - "severity": "ERROR", - "message": "CloudFront alias 'www.-example.com' is not a valid domain name", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "CloudFrontDistribution", + "logicalId": "MyTopic", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.DistributionConfig.Aliases.18", - "category": "Resource", - "startLine": 26, - "startColumn": 13, - "endLine": 26, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 6, + "startColumn": 5, + "endLine": 6, "endColumn": 15, - "ruleDescription": "CloudFront Aliases", + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/resources/uniqueNames.yaml": { + "filePath": "bad/resources/uniqueNames.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 1, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "E3013", - "severity": "ERROR", - "message": "CloudFront alias '-www.example.com' is not a valid domain name", - "source": "CFN_LINT", + "ruleId": "F3007", + "severity": "FATAL", + "message": "'Name' is used as both a parameter and resource logical ID", + "source": "SCHEMA", "entity": { - "logicalId": "CloudFrontDistribution", + "logicalId": "Name", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.DistributionConfig.Aliases.19", - "category": "Resource", - "startLine": 27, - "startColumn": 13, - "endLine": 27, - "endColumn": 15, - "ruleDescription": "CloudFront Aliases", - "phase": "LINT" + "category": "Structure", + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 7, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Logical ID used as both parameter and resource", + "phase": "SCHEMA" }, { - "ruleId": "E3013", - "severity": "ERROR", - "message": "CloudFront alias 'www.example.com-' is not a valid domain name", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'Name' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "CloudFrontDistribution", - "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "logicalId": "Name", + "entityType": "Parameter" }, - "propertyPath": "Properties.DistributionConfig.Aliases.20", - "category": "Resource", - "startLine": 28, - "startColumn": 13, - "endLine": 28, - "endColumn": 15, - "ruleDescription": "CloudFront Aliases", + "propertyPath": "Parameters/Name", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 7, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CloudFrontDistribution' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", + "message": "Resource 'Name' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CloudFrontDistribution", + "logicalId": "Name", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 5, - "startColumn": 5, + "startColumn": 3, "endLine": 5, - "endColumn": 15, + "endColumn": 7, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/resources_cognito_userpool_tag_is_list.yaml": { - "filePath": "bad/resources_cognito_userpool_tag_is_list.yaml", + "bad/resources/update_policy_unsupported_e3016.yaml": { + "filePath": "bad/resources/update_policy_unsupported_e3016.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 1, - "errors": 0, + "fatal": 0, + "errors": 1, "warnings": 0, "informational": 2, "debug": 0 @@ -4149,86 +3770,79 @@ }, "diagnostics": [ { - "ruleId": "F3012", - "severity": "FATAL", - "message": "[{'Key': 'Key1', 'Value': 'Value1'}, {'Key': 'Key2', 'Value': 'Value2'}] is not of type 'object'", - "source": "SCHEMA", + "ruleId": "E3016", + "severity": "ERROR", + "message": "UpdatePolicy is not supported on resource type 'AWS::S3::Bucket'", + "source": "CFN_LINT", "entity": { - "logicalId": "MyCognitoUserPool", + "logicalId": "MyBucket", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPool" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.UserPoolTags", - "category": "Schema", - "startLine": 16, - "startColumn": 7, - "endLine": 16, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property type mismatch", - "phase": "SCHEMA", - "context": { - "actualValue": [ - { - "Key": "Key1", - "Value": "Value1" - }, - { - "Key": "Key2", - "Value": "Value2" - } - ], - "expectedConstraint": "object" - } + "propertyPath": "UpdatePolicy", + "suggestedFix": "Remove UpdatePolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::ElastiCache::ReplicationGroup, AWS::Elasticsearch::Domain, AWS::Lambda::Alias, AWS::OpenSearchService::Domain", + "category": "Resource", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 17, + "ruleDescription": "Check UpdatePolicy values for Resources", + "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyCognitoUserPool", + "logicalId": "MyBucket", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPool" + "resourceType": "AWS::S3::Bucket" }, + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'MyBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyCognitoUserPool", + "logicalId": "MyBucket", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPool" + "resourceType": "AWS::S3::Bucket" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/resources_deletionpolicy.yaml": { - "filePath": "bad/resources_deletionpolicy.yaml", + "bad/resources_circular_dependency.yaml": { + "filePath": "bad/resources_circular_dependency.yaml", "status": "OK", "metadata": { - "resourcesScanned": 5, + "resourcesScanned": 11, "counts": { - "fatal": 5, - "errors": 0, - "warnings": 8, - "informational": 17, + "fatal": 6, + "errors": 9, + "warnings": 9, + "informational": 38, "debug": 0 }, "suppressed": 0, @@ -4237,1107 +3851,1007 @@ }, "diagnostics": [ { - "ruleId": "F3016", + "ruleId": "F3004", "severity": "FATAL", - "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, Snapshot, got a list", + "message": "Circular Dependencies for resource mySecurityGroupVpc1. Circular dependency with [mySecurityGroupVpc1 -> mySecurityGroupVpc2 -> mySecurityGroupVpc1]", "source": "SCHEMA", "entity": { - "logicalId": "PolicyList", + "logicalId": "mySecurityGroupVpc1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "DeletionPolicy", - "category": "Structure", - "startLine": 16, - "startColumn": 5, - "endLine": 16, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "DeletionPolicy must be valid", - "phase": "SCHEMA" + "propertyPath": "Resources/mySecurityGroupVpc1", + "category": "Reference", + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 22, + "ruleDescription": "Circular dependency detected", + "phase": "LINT" }, { - "ruleId": "F3016", + "ruleId": "F3004", "severity": "FATAL", - "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, Snapshot, got 'CopyRegion'", + "message": "Circular Dependencies for resource mySecurityGroupVpc2. Circular dependency with [mySecurityGroupVpc2 -> mySecurityGroupVpc1 -> mySecurityGroupVpc2]", "source": "SCHEMA", "entity": { - "logicalId": "MadeUpPolicy", + "logicalId": "mySecurityGroupVpc2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "DeletionPolicy", - "category": "Structure", - "startLine": 23, - "startColumn": 5, - "endLine": 23, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "DeletionPolicy must be valid", - "phase": "SCHEMA" + "propertyPath": "Resources/mySecurityGroupVpc2", + "category": "Reference", + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 22, + "ruleDescription": "Circular dependency detected", + "phase": "LINT" }, { - "ruleId": "F3016", + "ruleId": "F3004", "severity": "FATAL", - "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got 'Snapshot'", + "message": "Circular Dependencies for resource mySecurityGroupVpc3. Circular dependency with [mySecurityGroupVpc3 -> mySecurityGroupVpc3]", "source": "SCHEMA", "entity": { - "logicalId": "MyIAMUser", + "logicalId": "mySecurityGroupVpc3", "entityType": "Resource", - "resourceType": "AWS::IAM::User" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "DeletionPolicy", - "category": "Structure", - "startLine": 29, - "startColumn": 5, - "endLine": 29, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "DeletionPolicy must be valid", - "phase": "SCHEMA" + "propertyPath": "Resources/mySecurityGroupVpc3", + "category": "Reference", + "startLine": 41, + "startColumn": 3, + "endLine": 41, + "endColumn": 22, + "ruleDescription": "Circular dependency detected", + "phase": "LINT" }, { - "ruleId": "F3016", + "ruleId": "F3004", "severity": "FATAL", - "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got a list", + "message": "Circular Dependencies for resource myRoleToWriteToS3. Circular dependency with [myRoleToWriteToS3 -> myKms -> myInstanceProfile -> myRoleToWriteToS3]", "source": "SCHEMA", "entity": { - "logicalId": "UnsupportedIntrinsic", + "logicalId": "myRoleToWriteToS3", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::WaitConditionHandle" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "DeletionPolicy", - "category": "Structure", - "startLine": 32, - "startColumn": 5, - "endLine": 32, - "endColumn": 19, - "ruleDescription": "DeletionPolicy must be valid", - "phase": "SCHEMA" + "propertyPath": "Resources/myRoleToWriteToS3", + "category": "Reference", + "startLine": 96, + "startColumn": 3, + "endLine": 96, + "endColumn": 20, + "ruleDescription": "Circular dependency detected", + "phase": "LINT" }, { - "ruleId": "F3016", + "ruleId": "F3004", "severity": "FATAL", - "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, Snapshot, got an object", + "message": "Circular Dependencies for resource myInstanceProfile. Circular dependency with [myInstanceProfile -> myRoleToWriteToS3 -> myKms -> myInstanceProfile]", "source": "SCHEMA", "entity": { - "logicalId": "InvalidMapping", + "logicalId": "myInstanceProfile", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "DeletionPolicy", - "category": "Structure", - "startLine": 43, - "startColumn": 5, - "endLine": 43, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "DeletionPolicy must be valid", - "phase": "SCHEMA" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'DBPolicy' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "DBPolicy", - "entityType": "Parameter" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Parameters/DBPolicy", - "category": "Best Practice", - "startLine": 6, + "propertyPath": "Resources/myInstanceProfile", + "category": "Reference", + "startLine": 145, "startColumn": 3, - "endLine": 6, - "endColumn": 11, - "ruleDescription": "Check if Parameters are Used", + "endLine": 145, + "endColumn": 20, + "ruleDescription": "Circular dependency detected", "phase": "LINT" }, { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", - "source": "CFN_LINT", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource myKms. Circular dependency with [myKms -> myInstanceProfile -> myRoleToWriteToS3 -> myKms]", + "source": "SCHEMA", "entity": { - "logicalId": "PolicyList", + "logicalId": "myKms", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::KMS::Key" }, - "category": "Best Practice", - "startLine": 10, + "propertyPath": "Resources/myKms", + "category": "Reference", + "startLine": 153, "startColumn": 3, - "endLine": 10, - "endColumn": 13, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "endLine": 153, + "endColumn": 8, + "ruleDescription": "Circular dependency detected", "phase": "LINT" }, { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "ruleId": "E1150", + "severity": "ERROR", + "message": "'sg-1234567' does not match format 'AWS::EC2::SecurityGroup.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "MadeUpPolicy", + "logicalId": "mySecurityGroupVpc1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "category": "Best Practice", - "startLine": 17, - "startColumn": 3, - "endLine": 17, - "endColumn": 15, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", - "phase": "LINT" + "propertyPath": "Properties.SecurityGroupIngress.0.SourceSecurityGroupId", + "category": "Intrinsic Function", + "startLine": 30, + "startColumn": 11, + "endLine": 30, + "endColumn": 32, + "ruleDescription": "Validate security group format", + "phase": "SCHEMA", + "context": { + "actualValue": "sg-1234567" + } }, { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'String' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "MyIAMUser", + "logicalId": "myInstanceSub", "entityType": "Resource", - "resourceType": "AWS::IAM::User" + "resourceType": "AWS::EC2::Instance" }, - "category": "Best Practice", - "startLine": 24, - "startColumn": 3, - "endLine": 24, - "endColumn": 12, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 216, + "startColumn": 7, + "endLine": 216, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "String" + } }, { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate requires Cpu to be specified", "source": "CFN_LINT", "entity": { - "logicalId": "UnsupportedIntrinsic", + "logicalId": "taskdefinition", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::WaitConditionHandle" + "resourceType": "AWS::ECS::TaskDefinition" }, - "category": "Best Practice", - "startLine": 30, - "startColumn": 3, - "endLine": 30, - "endColumn": 23, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "propertyPath": "Properties", + "suggestedFix": "Set Cpu to a valid Fargate value (256, 512, 1024, 2048, 4096, 8192, 16384, or 32768)", + "category": "Resource", + "startLine": 222, + "startColumn": 5, + "endLine": 222, + "endColumn": 15, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", "phase": "LINT" }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate requires Memory to be specified", + "source": "CFN_LINT", "entity": { - "logicalId": "PolicyList", + "logicalId": "taskdefinition", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 12, + "propertyPath": "Properties", + "suggestedFix": "Set Memory to a valid Fargate value", + "category": "Resource", + "startLine": 222, "startColumn": 5, - "endLine": 12, + "endLine": 222, "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", "phase": "LINT" }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate requires NetworkMode to be specified as 'awsvpc'", + "source": "CFN_LINT", "entity": { - "logicalId": "MadeUpPolicy", + "logicalId": "taskdefinition", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 19, + "propertyPath": "Properties", + "suggestedFix": "Set NetworkMode to 'awsvpc'", + "category": "Resource", + "startLine": 222, "startColumn": 5, - "endLine": 19, + "endLine": 222, "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", "phase": "LINT" }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", + "ruleId": "E3687", + "severity": "ERROR", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "source": "CFN_LINT", "entity": { - "logicalId": "InvalidMapping", + "logicalId": "mySecurityGroupVpc1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 39, - "startColumn": 5, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", + "propertyPath": "Properties.SecurityGroupIngress.0", + "category": "Resource", + "startLine": 29, + "startColumn": 21, + "endLine": 29, + "endColumn": 22, + "ruleDescription": "Validate to and from ports based on the protocol", "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)", + "ruleId": "E3687", + "severity": "ERROR", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", "source": "CFN_LINT", "entity": { - "logicalId": "PolicyList", + "logicalId": "mySecurityGroupVpc1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "category": "Best Practice", - "startLine": 10, - "startColumn": 3, - "endLine": 10, - "endColumn": 13, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.SecurityGroupIngress.1", + "category": "Resource", + "startLine": 31, + "startColumn": 21, + "endLine": 31, + "endColumn": 22, + "ruleDescription": "Validate to and from ports based on the protocol", "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)", + "ruleId": "E3687", + "severity": "ERROR", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", "source": "CFN_LINT", "entity": { - "logicalId": "MadeUpPolicy", + "logicalId": "mySecurityGroupVpc2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "category": "Best Practice", - "startLine": 17, - "startColumn": 3, - "endLine": 17, - "endColumn": 15, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.SecurityGroupIngress.0", + "category": "Resource", + "startLine": 39, + "startColumn": 21, + "endLine": 39, + "endColumn": 22, + "ruleDescription": "Validate to and from ports based on the protocol", "phase": "LINT" }, { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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)", + "ruleId": "E3687", + "severity": "ERROR", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", "source": "CFN_LINT", "entity": { - "logicalId": "PolicyList", + "logicalId": "mySecurityGroupVpc3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "propertyPath": "Properties.SecurityGroupIngress.0", + "category": "Resource", + "startLine": 47, + "startColumn": 21, + "endLine": 47, + "endColumn": 22, + "ruleDescription": "Validate to and from ports based on the protocol", "phase": "LINT" }, { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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)", + "ruleId": "W3005", + "severity": "WARN", + "message": "'myInstanceProfile' dependency already enforced by a 'Ref' at 'Properties.IamInstanceProfile'", "source": "CFN_LINT", "entity": { - "logicalId": "MadeUpPolicy", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 19, + "startLine": 51, "startColumn": 5, - "endLine": 19, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "endLine": 51, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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)", + "ruleId": "W3005", + "severity": "WARN", + "message": "'myKms' dependency already enforced by a 'Ref' at 'Properties.BucketEncryption.ServerSideEncryptionConfiguration.0.ServerSideEncryptionByDefault.KMSMasterKeyID'", "source": "CFN_LINT", "entity": { - "logicalId": "InvalidMapping", + "logicalId": "myBucket", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 39, + "startLine": 64, "startColumn": 5, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "endLine": 64, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "ruleId": "W3005", + "severity": "WARN", + "message": "'myKms' dependency already enforced by a 'Ref' at 'Properties.Policies.0.PolicyDocument.Statement.0.Condition.StringEquals.s3:x-amz-server-side-encryption-aws-kms-key-id'", "source": "CFN_LINT", "entity": { - "logicalId": "PolicyList", + "logicalId": "myRoleToWriteToS3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", + "startLine": 98, + "startColumn": 5, + "endLine": 98, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "ruleId": "W3005", + "severity": "WARN", + "message": "'myRoleToWriteToS3' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", "source": "CFN_LINT", "entity": { - "logicalId": "MadeUpPolicy", + "logicalId": "myInstanceProfile", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 21, - "startColumn": 7, - "endLine": 21, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", + "startLine": 147, + "startColumn": 5, + "endLine": 147, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", "source": "CFN_LINT", "entity": { - "logicalId": "InvalidMapping", + "logicalId": "mySecurityGroupVpc1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", + "propertyPath": "Properties.SecurityGroupIngress.0.IpProtocol", "category": "Best Practice", - "startLine": 41, - "startColumn": 7, - "endLine": 41, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" + "startLine": 29, + "startColumn": 11, + "endLine": 29, + "endColumn": 21, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "PolicyList", + "logicalId": "mySecurityGroupVpc1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.SecurityGroupIngress.1.IpProtocol", "category": "Best Practice", - "startLine": 15, - "startColumn": 7, - "endLine": 15, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 31, + "startColumn": 11, + "endLine": 31, + "endColumn": 21, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "MadeUpPolicy", + "logicalId": "mySecurityGroupVpc2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.SecurityGroupIngress.0.IpProtocol", "category": "Best Practice", - "startLine": 22, - "startColumn": 7, - "endLine": 22, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 39, + "startColumn": 11, + "endLine": 39, + "endColumn": 21, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "MyIAMUser", + "logicalId": "mySecurityGroupVpc3", "entityType": "Resource", - "resourceType": "AWS::IAM::User" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.UserName", + "propertyPath": "Properties.SecurityGroupIngress.0.IpProtocol", "category": "Best Practice", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 47, + "startColumn": 11, + "endLine": 47, + "endColumn": 21, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "0 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "InvalidMapping", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.NetworkInterfaces.0.DeviceIndex", "category": "Best Practice", - "startLine": 42, - "startColumn": 7, - "endLine": 42, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 61, + "startColumn": 11, + "endLine": 61, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "I9003", + "ruleId": "I3011", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", + "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": "myKms", + "entityType": "Resource", + "resourceType": "AWS::KMS::Key" + }, "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "startLine": 153, + "startColumn": 3, + "endLine": 153, + "endColumn": 8, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'PolicyList' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "PolicyList", + "logicalId": "myKms", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::KMS::Key" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 153, + "startColumn": 3, + "endLine": 153, + "endColumn": 8, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3042", "severity": "INFO", - "message": "Resource 'MadeUpPolicy' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "message": "ARN in Resource myBucketPolicy contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", + "source": "CFN_LINT", "entity": { - "logicalId": "MadeUpPolicy", + "logicalId": "myBucketPolicy", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.PolicyDocument.Statement.0.Resource.Fn::Sub", "category": "Best Practice", - "startLine": 19, - "startColumn": 5, - "endLine": 19, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 84, + "startColumn": 13, + "endLine": 84, + "endColumn": 20, + "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", + "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3042", "severity": "INFO", - "message": "Resource 'MyIAMUser' of type 'AWS::IAM::User' supports Tags but none are configured", - "source": "ENGINE", + "message": "ARN in Resource myBucketPolicy contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", + "source": "CFN_LINT", "entity": { - "logicalId": "MyIAMUser", + "logicalId": "myBucketPolicy", "entityType": "Resource", - "resourceType": "AWS::IAM::User" + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.PolicyDocument.Statement.1.Resource.Fn::Sub", "category": "Best Practice", - "startLine": 26, - "startColumn": 5, - "endLine": 26, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 92, + "startColumn": 13, + "endLine": 92, + "endColumn": 20, + "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3042", "severity": "INFO", - "message": "Resource 'InvalidMapping' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "message": "ARN in Resource myKms contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", + "source": "CFN_LINT", "entity": { - "logicalId": "InvalidMapping", + "logicalId": "myKms", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::KMS::Key" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.KeyPolicy.Statement.0.Principal.AWS.Fn::Sub", "category": "Best Practice", - "startLine": 39, - "startColumn": 5, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 165, + "startColumn": 15, + "endLine": 165, + "endColumn": 22, + "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", "phase": "LINT" - } - ] - }, - "bad/resources_iam_instanceprofile_roles.yaml": { - "filePath": "bad/resources_iam_instanceprofile_roles.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3032", - "severity": "FATAL", - "message": "expected maximum item count: 1, found: 2", - "source": "SCHEMA", + "ruleId": "I3042", + "severity": "INFO", + "message": "ARN in Resource myKms contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", + "source": "CFN_LINT", "entity": { - "logicalId": "IamUser", + "logicalId": "myKms", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::KMS::Key" }, - "propertyPath": "Properties.Roles", - "category": "Schema", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 12, - "ruleDescription": "Array item count out of bounds", - "phase": "SCHEMA", - "context": { - "extra": { - "actual_count": 2, - "max_items": 1, - "min_items": 0 - } - } - } - ] - }, - "bad/resources_updatereplacepolicy.yaml": { - "filePath": "bad/resources_updatereplacepolicy.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 5, - "errors": 0, - "warnings": 9, - "informational": 18, - "debug": 0 + "propertyPath": "Properties.KeyPolicy.Statement.1.Principal.AWS.Fn::Sub", + "category": "Best Practice", + "startLine": 171, + "startColumn": 15, + "endLine": 171, + "endColumn": 22, + "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", + "phase": "LINT" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F0018", - "severity": "FATAL", - "message": "UpdateReplacePolicy must be one of Delete, Retain, Snapshot, got a list", - "source": "SCHEMA", + "ruleId": "I3042", + "severity": "INFO", + "message": "ARN in Resource myKms contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", + "source": "CFN_LINT", "entity": { - "logicalId": "PolicyList", + "logicalId": "myKms", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::KMS::Key" }, - "propertyPath": "UpdateReplacePolicy", - "category": "Structure", - "startLine": 16, - "startColumn": 5, - "endLine": 16, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "UpdateReplacePolicy must be valid", - "phase": "SCHEMA" + "propertyPath": "Properties.KeyPolicy.Statement.2.Principal.AWS.0.Fn::Sub", + "category": "Best Practice", + "startLine": 192, + "startColumn": 24, + "endLine": 192, + "endColumn": 31, + "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", + "phase": "LINT" }, { - "ruleId": "F0018", - "severity": "FATAL", - "message": "UpdateReplacePolicy must be one of Delete, Retain, Snapshot, got 'CopyRegion'", - "source": "SCHEMA", + "ruleId": "I3042", + "severity": "INFO", + "message": "ARN in Resource myKms contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", + "source": "CFN_LINT", "entity": { - "logicalId": "MadeUpPolicy", + "logicalId": "myKms", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::KMS::Key" }, - "propertyPath": "UpdateReplacePolicy", - "category": "Structure", - "startLine": 23, - "startColumn": 5, - "endLine": 23, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "UpdateReplacePolicy must be valid", - "phase": "SCHEMA" + "propertyPath": "Properties.KeyPolicy.Statement.3.Principal.AWS.Fn::Sub", + "category": "Best Practice", + "startLine": 204, + "startColumn": 15, + "endLine": 204, + "endColumn": 22, + "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", + "phase": "LINT" }, { - "ruleId": "F0018", - "severity": "FATAL", - "message": "UpdateReplacePolicy must be one of Delete, Retain, got 'Snapshot'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyIAMUser", + "logicalId": "mySecurityGroupVpc1", "entityType": "Resource", - "resourceType": "AWS::IAM::User" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "UpdateReplacePolicy", - "category": "Structure", - "startLine": 29, - "startColumn": 5, - "endLine": 29, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "UpdateReplacePolicy must be valid", - "phase": "SCHEMA" + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 26, + "startColumn": 7, + "endLine": 26, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F0018", - "severity": "FATAL", - "message": "UpdateReplacePolicy must be one of Delete, Retain, got a list", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "UnsupportedIntrinsic", + "logicalId": "mySecurityGroupVpc1", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::WaitConditionHandle" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "UpdateReplacePolicy", - "category": "Structure", - "startLine": 32, - "startColumn": 5, - "endLine": 32, - "endColumn": 24, - "ruleDescription": "UpdateReplacePolicy must be valid", - "phase": "SCHEMA" + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 27, + "startColumn": 7, + "endLine": 27, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'myVpcId' (type AWS::EC2::VPC::Id)" + } }, { - "ruleId": "F0018", - "severity": "FATAL", - "message": "UpdateReplacePolicy must be one of Delete, Retain, Snapshot, got an object", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "InvalidMapping", + "logicalId": "mySecurityGroupVpc2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "UpdateReplacePolicy", - "category": "Structure", - "startLine": 43, - "startColumn": 5, - "endLine": 43, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "UpdateReplacePolicy must be valid", - "phase": "SCHEMA" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'DBPolicy' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "DBPolicy", - "entityType": "Parameter" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Parameters/DBPolicy", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 6, - "startColumn": 3, - "endLine": 6, - "endColumn": 11, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 36, + "startColumn": 7, + "endLine": 36, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "PolicyList", + "logicalId": "mySecurityGroupVpc2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 10, - "startColumn": 3, - "endLine": 10, - "endColumn": 13, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", - "phase": "LINT" + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'myVpcId' (type AWS::EC2::VPC::Id)" + } }, { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MadeUpPolicy", + "logicalId": "mySecurityGroupVpc3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 17, - "startColumn": 3, - "endLine": 17, - "endColumn": 15, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", - "phase": "LINT" + "startLine": 44, + "startColumn": 7, + "endLine": 44, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyIAMUser", + "logicalId": "mySecurityGroupVpc3", "entityType": "Resource", - "resourceType": "AWS::IAM::User" + "resourceType": "AWS::EC2::SecurityGroup" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 24, - "startColumn": 3, - "endLine": 24, + "startLine": 45, + "startColumn": 7, + "endLine": 45, "endColumn": 12, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'myVpcId' (type AWS::EC2::VPC::Id)" + } }, { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "UnsupportedIntrinsic", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::WaitConditionHandle" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 30, - "startColumn": 3, - "endLine": 30, - "endColumn": 23, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", - "phase": "LINT" + "startLine": 54, + "startColumn": 7, + "endLine": 54, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'Ec2ImageId' (type AWS::EC2::Image::Id)" + } }, { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "InvalidMapping", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 37, - "startColumn": 3, - "endLine": 37, - "endColumn": 17, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", - "phase": "LINT" + "startLine": 55, + "startColumn": 7, + "endLine": 55, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PolicyList", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "propertyPath": "Properties.NetworkInterfaces", + "category": "Best Practice", + "startLine": 56, + "startColumn": 7, + "endLine": 56, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MadeUpPolicy", + "logicalId": "myBucket", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 19, - "startColumn": 5, - "endLine": 19, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "propertyPath": "Properties.BucketName", + "category": "Best Practice", + "startLine": 71, + "startColumn": 7, + "endLine": 71, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'myBucketName' (type String)" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "InvalidMapping", + "logicalId": "myBucketPolicy", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 39, - "startColumn": 5, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "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": "PolicyList", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::BucketPolicy" }, + "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 10, - "startColumn": 3, - "endLine": 10, + "startLine": 75, + "startColumn": 7, + "endLine": 75, "endColumn": 13, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "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": "MadeUpPolicy", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "category": "Best Practice", - "startLine": 17, - "startColumn": 3, - "endLine": 17, - "endColumn": 15, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "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": "InvalidMapping", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "category": "Best Practice", - "startLine": 37, - "startColumn": 3, - "endLine": 37, - "endColumn": 17, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" - }, - { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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": "PolicyList", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'myBucket'" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MadeUpPolicy", + "logicalId": "myRoleToWriteToS3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties", + "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 19, - "startColumn": 5, - "endLine": 19, + "startLine": 100, + "startColumn": 7, + "endLine": 100, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "InvalidMapping", + "logicalId": "myRoleToWriteToS3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 39, - "startColumn": 5, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "startLine": 110, + "startColumn": 7, + "endLine": 110, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3100", + "ruleId": "I9001", "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", - "source": "CFN_LINT", + "message": "Property 'InstanceProfileName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "PolicyList", + "logicalId": "myInstanceProfile", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", + "propertyPath": "Properties.InstanceProfileName", "category": "Best Practice", - "startLine": 14, + "startLine": 149, "startColumn": 7, - "endLine": 14, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" + "endLine": 149, + "endColumn": 26, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3100", + "ruleId": "I9001", "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", - "source": "CFN_LINT", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MadeUpPolicy", + "logicalId": "myInstanceProfile", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 21, + "startLine": 150, "startColumn": 7, - "endLine": 21, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" + "endLine": 150, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3100", + "ruleId": "I9001", "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", - "source": "CFN_LINT", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "InvalidMapping", + "logicalId": "myInstanceSub", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 41, + "startLine": 216, "startColumn": 7, - "endLine": 41, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" + "endLine": 216, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PolicyList", + "logicalId": "myInstanceSub", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 15, + "startLine": 217, "startColumn": 7, - "endLine": 15, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 217, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5347,43 +4861,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MadeUpPolicy", + "logicalId": "taskdefinition", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 22, + "startLine": 223, "startColumn": 7, - "endLine": 22, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 223, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserName' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyIAMUser", + "logicalId": "taskdefinition", "entityType": "Resource", - "resourceType": "AWS::IAM::User" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.UserName", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 28, + "startLine": 226, "startColumn": 7, - "endLine": 28, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 226, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5393,24 +4907,24 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Volumes' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "InvalidMapping", + "logicalId": "taskdefinition", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Volumes", "category": "Best Practice", - "startLine": 42, + "startLine": 258, "startColumn": 7, - "endLine": 42, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 258, + "endColumn": 14, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { @@ -5425,19 +4939,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'PolicyList' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Resource 'mySecurityGroupVpc1' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "PolicyList", + "logicalId": "mySecurityGroupVpc1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, + "startLine": 25, "startColumn": 5, - "endLine": 12, + "endLine": 25, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -5445,19 +4959,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MadeUpPolicy' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Resource 'mySecurityGroupVpc2' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MadeUpPolicy", + "logicalId": "mySecurityGroupVpc2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 19, + "startLine": 35, "startColumn": 5, - "endLine": 19, + "endLine": 35, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -5465,19 +4979,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyIAMUser' of type 'AWS::IAM::User' supports Tags but none are configured", + "message": "Resource 'mySecurityGroupVpc3' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyIAMUser", + "logicalId": "mySecurityGroupVpc3", "entityType": "Resource", - "resourceType": "AWS::IAM::User" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 26, + "startLine": 43, "startColumn": 5, - "endLine": 26, + "endLine": 43, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -5485,1208 +4999,1353 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'InvalidMapping' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "InvalidMapping", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 39, + "startLine": 52, "startColumn": 5, - "endLine": 39, + "endLine": 52, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/route53.yaml": { - "filePath": "bad/route53.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 11, - "counts": { - "fatal": 0, - "errors": 30, - "warnings": 1, - "informational": 12, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3023", - "severity": "ERROR", - "message": "TXT record value '\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"' must be enclosed in double quotes", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyTXTRecordSet", + "logicalId": "myBucket", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ResourceRecords.0", - "category": "Resource", - "startLine": 32, - "startColumn": 11, - "endLine": 32, - "endColumn": 12, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 65, + "startColumn": 5, + "endLine": 65, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "TXT record value '\"a\"\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\"' must be enclosed in double quotes", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myRoleToWriteToS3' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyTXTRecordSet", + "logicalId": "myRoleToWriteToS3", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.ResourceRecords.1", - "category": "Resource", - "startLine": 33, - "startColumn": 11, - "endLine": 33, - "endColumn": 12, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 99, + "startColumn": 5, + "endLine": 99, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "TXT record value 'test2' must be enclosed in double quotes", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myKms' of type 'AWS::KMS::Key' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyTXTRecordSet", + "logicalId": "myKms", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::KMS::Key" }, - "propertyPath": "Properties.ResourceRecords.3", - "category": "Resource", - "startLine": 35, - "startColumn": 11, - "endLine": 35, - "endColumn": 12, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 155, + "startColumn": 5, + "endLine": 155, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'127.0.0.1' is not a valid IPv6 address for record type 'AAAA'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myInstanceSub' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyAAAARecordSet", + "logicalId": "myInstanceSub", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ResourceRecords.0", - "category": "Resource", - "startLine": 55, - "startColumn": 11, - "endLine": 55, - "endColumn": 12, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 215, + "startColumn": 5, + "endLine": 215, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:1.2.3.4' is not a valid IPv6 address for record type 'AAAA'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'taskdefinition' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyAAAARecordSet", + "logicalId": "taskdefinition", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ResourceRecords.1", - "category": "Resource", - "startLine": 56, - "startColumn": 11, - "endLine": 56, - "endColumn": 12, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 222, + "startColumn": 5, + "endLine": 222, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/resources_circular_dependency_2.yaml": { + "filePath": "bad/resources_circular_dependency_2.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 9, + "counts": { + "fatal": 9, + "errors": 0, + "warnings": 0, + "informational": 9, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'2001:0db8: 85a3:0:0:8a2e:0370:7334' is not a valid IPv6 address for record type 'AAAA'", - "source": "CFN_LINT", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource Resource. Circular dependency with [Resource -> Resource2 -> Resource3 -> Resource4 -> Resource5 -> Resource6 -> Resource7 -> Resource8 -> Resource9 -> Resource]", + "source": "SCHEMA", "entity": { - "logicalId": "MyAAAARecordSet", + "logicalId": "Resource", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ResourceRecords.2", - "category": "Resource", - "startLine": 57, - "startColumn": 11, - "endLine": 57, - "endColumn": 12, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Resources/Resource", + "category": "Reference", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 11, + "ruleDescription": "Circular dependency detected", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'1111:2222:3333:4444:5555:6666:7777' is not a valid IPv6 address for record type 'AAAA'", - "source": "CFN_LINT", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource Resource2. Circular dependency with [Resource2 -> Resource3 -> Resource4 -> Resource5 -> Resource6 -> Resource7 -> Resource8 -> Resource9 -> Resource -> Resource2]", + "source": "SCHEMA", "entity": { - "logicalId": "MyAAAARecordSet", + "logicalId": "Resource2", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ResourceRecords.3", - "category": "Resource", - "startLine": 58, - "startColumn": 11, - "endLine": 58, + "propertyPath": "Resources/Resource2", + "category": "Reference", + "startLine": 7, + "startColumn": 3, + "endLine": 7, "endColumn": 12, - "ruleDescription": "Validate Route53 RecordSets", + "ruleDescription": "Circular dependency detected", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'1111:2222:3333:4444:5555:6666:7777:8888::' is not a valid IPv6 address for record type 'AAAA'", - "source": "CFN_LINT", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource Resource3. Circular dependency with [Resource3 -> Resource4 -> Resource5 -> Resource6 -> Resource7 -> Resource8 -> Resource9 -> Resource -> Resource2 -> Resource3]", + "source": "SCHEMA", "entity": { - "logicalId": "MyAAAARecordSet", + "logicalId": "Resource3", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ResourceRecords.4", - "category": "Resource", - "startLine": 59, - "startColumn": 11, - "endLine": 59, + "propertyPath": "Resources/Resource3", + "category": "Reference", + "startLine": 12, + "startColumn": 3, + "endLine": 12, "endColumn": 12, - "ruleDescription": "Validate Route53 RecordSets", + "ruleDescription": "Circular dependency detected", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "CAA record value '127.0.0.1' must match format: flag tag 'value'", - "source": "CFN_LINT", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource Resource4. Circular dependency with [Resource4 -> Resource5 -> Resource6 -> Resource7 -> Resource8 -> Resource9 -> Resource -> Resource2 -> Resource3 -> Resource4]", + "source": "SCHEMA", "entity": { - "logicalId": "MyCAARecordSet", + "logicalId": "Resource4", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ResourceRecords.0", - "category": "Resource", - "startLine": 69, - "startColumn": 11, - "endLine": 69, + "propertyPath": "Resources/Resource4", + "category": "Reference", + "startLine": 17, + "startColumn": 3, + "endLine": 17, "endColumn": 12, - "ruleDescription": "Validate Route53 RecordSets", + "ruleDescription": "Circular dependency detected", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "CAA record value '0 issue amazon.com; henk' must match format: flag tag 'value'", - "source": "CFN_LINT", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource Resource5. Circular dependency with [Resource5 -> Resource6 -> Resource7 -> Resource8 -> Resource9 -> Resource -> Resource2 -> Resource3 -> Resource4 -> Resource5]", + "source": "SCHEMA", "entity": { - "logicalId": "MyCAARecordSet", + "logicalId": "Resource5", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ResourceRecords.1", - "category": "Resource", - "startLine": 70, - "startColumn": 11, - "endLine": 70, + "propertyPath": "Resources/Resource5", + "category": "Reference", + "startLine": 22, + "startColumn": 3, + "endLine": 22, "endColumn": 12, - "ruleDescription": "Validate Route53 RecordSets", + "ruleDescription": "Circular dependency detected", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "CNAME records must have at most 1 ResourceRecord", - "source": "CFN_LINT", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource Resource6. Circular dependency with [Resource6 -> Resource7 -> Resource8 -> Resource9 -> Resource -> Resource2 -> Resource3 -> Resource4 -> Resource5 -> Resource6]", + "source": "SCHEMA", "entity": { - "logicalId": "MyCNAMERecordSet", + "logicalId": "Resource6", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ResourceRecords", - "category": "Resource", - "startLine": 79, - "startColumn": 7, - "endLine": 79, - "endColumn": 22, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Resources/Resource6", + "category": "Reference", + "startLine": 27, + "startColumn": 3, + "endLine": 27, + "endColumn": 12, + "ruleDescription": "Circular dependency detected", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "CNAME records must have at most 1 ResourceRecord", - "source": "CFN_LINT", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource Resource7. Circular dependency with [Resource7 -> Resource8 -> Resource9 -> Resource -> Resource2 -> Resource3 -> Resource4 -> Resource5 -> Resource6 -> Resource7]", + "source": "SCHEMA", "entity": { - "logicalId": "MyCNAMERecordSetConditions", + "logicalId": "Resource7", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ResourceRecords", - "category": "Resource", - "startLine": 93, - "startColumn": 11, - "endLine": 93, + "propertyPath": "Resources/Resource7", + "category": "Reference", + "startLine": 32, + "startColumn": 3, + "endLine": 32, "endColumn": 12, - "ruleDescription": "Validate Route53 RecordSets", + "ruleDescription": "Circular dependency detected", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "MX record value '127.0.0.1' must match format: priority domain", - "source": "CFN_LINT", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource Resource8. Circular dependency with [Resource8 -> Resource9 -> Resource -> Resource2 -> Resource3 -> Resource4 -> Resource5 -> Resource6 -> Resource7 -> Resource8]", + "source": "SCHEMA", "entity": { - "logicalId": "MyMXRecordSet", + "logicalId": "Resource8", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ResourceRecords.0", - "category": "Resource", - "startLine": 104, - "startColumn": 11, - "endLine": 104, + "propertyPath": "Resources/Resource8", + "category": "Reference", + "startLine": 37, + "startColumn": 3, + "endLine": 37, "endColumn": 12, - "ruleDescription": "Validate Route53 RecordSets", + "ruleDescription": "Circular dependency detected", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "MX record value '10 my domain' must match format: priority domain", - "source": "CFN_LINT", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource Resource9. Circular dependency with [Resource9 -> Resource -> Resource2 -> Resource3 -> Resource4 -> Resource5 -> Resource6 -> Resource7 -> Resource8 -> Resource9]", + "source": "SCHEMA", "entity": { - "logicalId": "MyMXRecordSet", + "logicalId": "Resource9", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ResourceRecords.1", - "category": "Resource", - "startLine": 105, - "startColumn": 11, - "endLine": 105, + "propertyPath": "Resources/Resource9", + "category": "Reference", + "startLine": 42, + "startColumn": 3, + "endLine": 42, "endColumn": 12, - "ruleDescription": "Validate Route53 RecordSets", + "ruleDescription": "Circular dependency detected", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "TXT record value 'test4' must be enclosed in double quotes", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "Resource", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.RecordSets.0.ResourceRecords.0", - "category": "Resource", - "startLine": 127, - "startColumn": 15, - "endLine": 127, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'a.example.com' is not a valid IPv4 address for record type 'A'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource2' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "Resource2", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.RecordSets.1.ResourceRecords.0", - "category": "Resource", - "startLine": 132, - "startColumn": 15, - "endLine": 132, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'1111:2222:3333:4444:55556666:7777:8888' is not a valid IPv6 address for record type 'AAAA'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource3' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "Resource3", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.RecordSets.2.ResourceRecords.0", - "category": "Resource", - "startLine": 137, - "startColumn": 15, - "endLine": 137, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 14, + "startColumn": 5, + "endLine": 14, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'1111:2222:3333:4444:5555:6666:7777:8888:' is not a valid IPv6 address for record type 'AAAA'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource4' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "Resource4", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.RecordSets.2.ResourceRecords.1", - "category": "Resource", - "startLine": 138, - "startColumn": 15, - "endLine": 138, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 19, + "startColumn": 5, + "endLine": 19, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'1111:2222:3333:::5555:6666:7777:8888' is not a valid IPv6 address for record type 'AAAA'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource5' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "Resource5", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.RecordSets.2.ResourceRecords.2", - "category": "Resource", - "startLine": 139, - "startColumn": 15, - "endLine": 139, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 24, + "startColumn": 5, + "endLine": 24, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'1111::3333:4444:5555::7777:8888' is not a valid IPv6 address for record type 'AAAA'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource6' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "Resource6", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.RecordSets.2.ResourceRecords.3", - "category": "Resource", - "startLine": 140, - "startColumn": 15, - "endLine": 140, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'::1.2.3.' is not a valid IPv6 address for record type 'AAAA'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource7' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "Resource7", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.RecordSets.2.ResourceRecords.4", - "category": "Resource", - "startLine": 141, - "startColumn": 15, - "endLine": 141, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 34, + "startColumn": 5, + "endLine": 34, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "':1111:2222:3333:4444:5555::7777:8888' is not a valid IPv6 address for record type 'AAAA'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource8' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "Resource8", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.RecordSets.2.ResourceRecords.5", - "category": "Resource", - "startLine": 142, - "startColumn": 15, - "endLine": 142, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 39, + "startColumn": 5, + "endLine": 39, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'127.0.0.1 ' is not a valid IPv4 address for record type 'A'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource9' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "Resource9", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.RecordSets.3.ResourceRecords.0", - "category": "Resource", - "startLine": 147, - "startColumn": 15, - "endLine": 147, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 42, + "startColumn": 3, + "endLine": 42, + "endColumn": 12, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/resources_circular_dependency_dependson.yaml": { + "filePath": "bad/resources_circular_dependency_dependson.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 2, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'256.10.1.256' is not a valid IPv4 address for record type 'A'", - "source": "CFN_LINT", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource Resource. Circular dependency with [Resource -> Resource2 -> Resource]", + "source": "SCHEMA", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "Resource", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.RecordSets.4.ResourceRecords.0", - "category": "Resource", - "startLine": 152, - "startColumn": 15, - "endLine": 152, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Resources/Resource", + "category": "Reference", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 11, + "ruleDescription": "Circular dependency detected", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "CAA record value '1 issue \"amazon.com; example.com\"' must match format: flag tag 'value'", - "source": "CFN_LINT", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource Resource2. Circular dependency with [Resource2 -> Resource -> Resource2]", + "source": "SCHEMA", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "Resource2", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.RecordSets.5.ResourceRecords.0", - "category": "Resource", - "startLine": 157, - "startColumn": 15, - "endLine": 157, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Resources/Resource2", + "category": "Reference", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 12, + "ruleDescription": "Circular dependency detected", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "CAA record value 'A issue \"amazon.com; example.com\"' must match format: flag tag 'value'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "Resource", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.RecordSets.5.ResourceRecords.1", - "category": "Resource", - "startLine": 158, - "startColumn": 15, - "endLine": 158, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 11, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E3023", + "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": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 12, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/resources_cloudfront_invalid_aliases.yaml": { + "filePath": "bad/resources_cloudfront_invalid_aliases.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 8, + "warnings": 0, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3013", "severity": "ERROR", - "message": "CAA record value '0 special-value \"amazon.com\"' must match format: flag tag 'value'", + "message": "CloudFront alias 'email.*.example.com' has wildcard in invalid position", "source": "CFN_LINT", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "CloudFrontDistribution", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Properties.RecordSets.5.ResourceRecords.2", + "propertyPath": "Properties.DistributionConfig.Aliases.13", "category": "Resource", - "startLine": 159, - "startColumn": 15, - "endLine": 159, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", + "startLine": 21, + "startColumn": 13, + "endLine": 21, + "endColumn": 15, + "ruleDescription": "CloudFront Aliases", "phase": "LINT" }, { - "ruleId": "E3023", + "ruleId": "E3013", "severity": "ERROR", - "message": "MX record value 'mx1.example.com' must match format: priority domain", + "message": "CloudFront alias 'WWW.EXAMPLE.COM' is not a valid domain name", "source": "CFN_LINT", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "CloudFrontDistribution", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Properties.RecordSets.7.ResourceRecords.0", + "propertyPath": "Properties.DistributionConfig.Aliases.14", "category": "Resource", - "startLine": 169, - "startColumn": 15, - "endLine": 169, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", + "startLine": 22, + "startColumn": 13, + "endLine": 22, + "endColumn": 15, + "ruleDescription": "CloudFront Aliases", "phase": "LINT" }, { - "ruleId": "E3023", + "ruleId": "E3013", "severity": "ERROR", - "message": "MX record value '65536 mx2.example.com' must match format: priority domain", + "message": "CloudFront alias '-example.com' is not a valid domain name", "source": "CFN_LINT", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "CloudFrontDistribution", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Properties.RecordSets.7.ResourceRecords.1", + "propertyPath": "Properties.DistributionConfig.Aliases.15", "category": "Resource", - "startLine": 170, - "startColumn": 15, - "endLine": 170, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", + "startLine": 23, + "startColumn": 13, + "endLine": 23, + "endColumn": 15, + "ruleDescription": "CloudFront Aliases", "phase": "LINT" }, { - "ruleId": "E3029", + "ruleId": "E3013", "severity": "ERROR", - "message": "TTL must not be set when AliasTarget is specified", + "message": "CloudFront alias 'example.c' is not a valid domain name", "source": "CFN_LINT", "entity": { - "logicalId": "MyAliasRecordSet", + "logicalId": "CloudFrontDistribution", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Properties.TTL", + "propertyPath": "Properties.DistributionConfig.Aliases.16", "category": "Resource", - "startLine": 113, - "startColumn": 7, - "endLine": 113, - "endColumn": 10, - "ruleDescription": "Validate Route53 record set aliases", + "startLine": 24, + "startColumn": 13, + "endLine": 24, + "endColumn": 15, + "ruleDescription": "CloudFront Aliases", "phase": "LINT" }, { - "ruleId": "W1054", - "severity": "WARN", - "message": "Found a string 'AWS::Region' that appears to be a pseudo parameter reference; use 'Ref: AWS::Region' instead", + "ruleId": "E3013", + "severity": "ERROR", + "message": "CloudFront alias 'www.example.com ' is not a valid domain name", "source": "CFN_LINT", "entity": { - "logicalId": "MyHostedZone", + "logicalId": "CloudFrontDistribution", "entityType": "Resource", - "resourceType": "AWS::Route53::HostedZone" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Properties.VPCs.0.VPCRegion", - "suggestedFix": "Use Ref to reference pseudo parameters instead of embedding them as literal strings", - "category": "Intrinsic Function", - "startLine": 22, - "startColumn": 11, - "endLine": 22, - "endColumn": 20, - "ruleDescription": "String value matches a pseudo parameter; use Ref instead", + "propertyPath": "Properties.DistributionConfig.Aliases.17", + "category": "Resource", + "startLine": 25, + "startColumn": 13, + "endLine": 25, + "endColumn": 15, + "ruleDescription": "CloudFront Aliases", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3013", + "severity": "ERROR", + "message": "CloudFront alias 'www.-example.com' is not a valid domain name", + "source": "CFN_LINT", "entity": { - "logicalId": "MyHostedZone", + "logicalId": "CloudFrontDistribution", "entityType": "Resource", - "resourceType": "AWS::Route53::HostedZone" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 19, - "startColumn": 7, - "endLine": 19, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.DistributionConfig.Aliases.18", + "category": "Resource", + "startLine": 26, + "startColumn": 13, + "endLine": 26, + "endColumn": 15, + "ruleDescription": "CloudFront Aliases", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3013", + "severity": "ERROR", + "message": "CloudFront alias '-www.example.com' is not a valid domain name", + "source": "CFN_LINT", "entity": { - "logicalId": "MyTXTRecordSet", + "logicalId": "CloudFrontDistribution", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Properties.HostedZoneId", - "category": "Best Practice", + "propertyPath": "Properties.DistributionConfig.Aliases.19", + "category": "Resource", "startLine": 27, - "startColumn": 7, + "startColumn": 13, "endLine": 27, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyHostedZone'" - } + "endColumn": 15, + "ruleDescription": "CloudFront Aliases", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3013", + "severity": "ERROR", + "message": "CloudFront alias 'www.example.com-' is not a valid domain name", + "source": "CFN_LINT", "entity": { - "logicalId": "MyARecordSet", + "logicalId": "CloudFrontDistribution", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Properties.HostedZoneId", - "category": "Best Practice", - "startLine": 40, - "startColumn": 7, - "endLine": 40, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyHostedZone'" - } + "propertyPath": "Properties.DistributionConfig.Aliases.20", + "category": "Resource", + "startLine": 28, + "startColumn": 13, + "endLine": 28, + "endColumn": 15, + "ruleDescription": "CloudFront Aliases", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", + "message": "Resource 'CloudFrontDistribution' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyAAAARecordSet", + "logicalId": "CloudFrontDistribution", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Properties.HostedZoneId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 50, - "startColumn": 7, - "endLine": 50, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyHostedZone'" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/resources_cognito_userpool_tag_is_list.yaml": { + "filePath": "bad/resources_cognito_userpool_tag_is_list.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3012", + "severity": "FATAL", + "message": "[{'Key': 'Key1', 'Value': 'Value1'}, {'Key': 'Key2', 'Value': 'Value2'}] is not of type 'object'", + "source": "SCHEMA", "entity": { - "logicalId": "MyCAARecordSet", + "logicalId": "MyCognitoUserPool", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::Cognito::UserPool" }, - "propertyPath": "Properties.HostedZoneId", - "category": "Best Practice", - "startLine": 64, + "propertyPath": "Properties.UserPoolTags", + "category": "Schema", + "startLine": 16, "startColumn": 7, - "endLine": 64, + "endLine": 16, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Property type mismatch", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyHostedZone'" + "actualValue": [ + { + "Key": "Key1", + "Value": "Value1" + }, + { + "Key": "Key2", + "Value": "Value2" + } + ], + "expectedConstraint": "object" } }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "MyCNAMERecordSet", + "logicalId": "MyCognitoUserPool", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::Cognito::UserPool" }, - "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "startLine": 75, - "startColumn": 7, - "endLine": 75, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyHostedZone'" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "MyCNAMERecordSetConditions", + "logicalId": "MyCognitoUserPool", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::Cognito::UserPool" }, - "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "startLine": 86, - "startColumn": 7, - "endLine": 86, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyHostedZone'" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + } + ] + }, + "bad/resources_deletionpolicy.yaml": { + "filePath": "bad/resources_deletionpolicy.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 5, + "errors": 0, + "warnings": 8, + "informational": 17, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3016", + "severity": "FATAL", + "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, Snapshot, got a list", + "source": "SCHEMA", "entity": { - "logicalId": "MyMXRecordSet", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneId", - "category": "Best Practice", - "startLine": 99, - "startColumn": 7, - "endLine": 99, + "propertyPath": "DeletionPolicy", + "category": "Structure", + "startLine": 16, + "startColumn": 5, + "endLine": 16, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyHostedZone'" - } + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "DeletionPolicy must be valid", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3016", + "severity": "FATAL", + "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, Snapshot, got 'CopyRegion'", + "source": "SCHEMA", "entity": { - "logicalId": "MyAliasRecordSet", + "logicalId": "MadeUpPolicy", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneId", - "category": "Best Practice", - "startLine": 110, - "startColumn": 7, - "endLine": 110, + "propertyPath": "DeletionPolicy", + "category": "Structure", + "startLine": 23, + "startColumn": 5, + "endLine": 23, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyHostedZone'" - } + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "DeletionPolicy must be valid", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3016", + "severity": "FATAL", + "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got 'Snapshot'", + "source": "SCHEMA", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "MyIAMUser", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::IAM::User" }, - "propertyPath": "Properties.HostedZoneId", - "category": "Best Practice", - "startLine": 121, - "startColumn": 7, - "endLine": 121, + "propertyPath": "DeletionPolicy", + "category": "Structure", + "startLine": 29, + "startColumn": 5, + "endLine": 29, "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyHostedZone'" - } + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "DeletionPolicy must be valid", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3016", + "severity": "FATAL", + "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got a list", + "source": "SCHEMA", "entity": { - "logicalId": "PoorlyConfiguredRoute53", + "logicalId": "UnsupportedIntrinsic", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::CloudFormation::WaitConditionHandle" }, - "propertyPath": "Properties.HostedZoneId", - "category": "Best Practice", - "startLine": 174, - "startColumn": 7, - "endLine": 174, + "propertyPath": "DeletionPolicy", + "category": "Structure", + "startLine": 32, + "startColumn": 5, + "endLine": 32, "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyHostedZone'" - } + "ruleDescription": "DeletionPolicy must be valid", + "phase": "SCHEMA" }, { - "ruleId": "I9002", - "severity": "INFO", - "message": "'TTL' is ignored in this configuration (from extension)", - "source": "ENGINE", + "ruleId": "F3016", + "severity": "FATAL", + "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, Snapshot, got an object", + "source": "SCHEMA", "entity": { - "logicalId": "MyAliasRecordSet", + "logicalId": "InvalidMapping", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.TTL", - "category": "Best Practice", - "startLine": 113, - "startColumn": 7, - "endLine": 113, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Property is ignored in this configuration (from extension)", + "propertyPath": "DeletionPolicy", + "category": "Structure", + "startLine": 43, + "startColumn": 5, + "endLine": 43, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "DeletionPolicy must be valid", "phase": "SCHEMA" - } - ] - }, - "bad/route53_conditional_record_arrays.yaml": { - "filePath": "bad/route53_conditional_record_arrays.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 10, - "counts": { - "fatal": 0, - "errors": 10, - "warnings": 0, - "informational": 10, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'invalid-standalone-true' is not a valid IPv4 address for record type 'A'", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'DBPolicy' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "StandaloneInvalidTrue", - "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "logicalId": "DBPolicy", + "entityType": "Parameter" }, - "propertyPath": "Properties.ResourceRecords.0", - "category": "Resource", - "startLine": 21, - "startColumn": 12, - "endLine": 21, - "endColumn": 13, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Parameters/DBPolicy", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 11, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'invalid-standalone-false' is not a valid IPv4 address for record type 'A'", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", "source": "CFN_LINT", "entity": { - "logicalId": "StandaloneInvalidFalse", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ResourceRecords.0", - "category": "Resource", - "startLine": 33, - "startColumn": 12, - "endLine": 33, + "category": "Best Practice", + "startLine": 10, + "startColumn": 3, + "endLine": 10, "endColumn": 13, - "ruleDescription": "Validate Route53 RecordSets", + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'invalid-standalone-mixed-true' is not a valid IPv4 address for record type 'A'", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", "source": "CFN_LINT", "entity": { - "logicalId": "StandaloneMixedInvalidTrue", + "logicalId": "MadeUpPolicy", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ResourceRecords.1", - "category": "Resource", - "startLine": 44, - "startColumn": 13, - "endLine": 44, - "endColumn": 14, - "ruleDescription": "Validate Route53 RecordSets", + "category": "Best Practice", + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 15, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'invalid-standalone-mixed-false' is not a valid IPv4 address for record type 'A'", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", "source": "CFN_LINT", "entity": { - "logicalId": "StandaloneMixedInvalidFalse", + "logicalId": "MyIAMUser", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::IAM::User" }, - "propertyPath": "Properties.ResourceRecords.1", - "category": "Resource", - "startLine": 57, - "startColumn": 13, - "endLine": 57, - "endColumn": 14, - "ruleDescription": "Validate Route53 RecordSets", + "category": "Best Practice", + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 12, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'invalid-group-true' is not a valid IPv4 address for record type 'A'", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", "source": "CFN_LINT", "entity": { - "logicalId": "GroupInvalidTrue", + "logicalId": "UnsupportedIntrinsic", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::CloudFormation::WaitConditionHandle" }, - "propertyPath": "Properties.RecordSets.0.ResourceRecords.0", - "category": "Resource", - "startLine": 67, - "startColumn": 31, - "endLine": 67, - "endColumn": 32, - "ruleDescription": "Validate Route53 RecordSets", + "category": "Best Practice", + "startLine": 30, + "startColumn": 3, + "endLine": 30, + "endColumn": 23, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'invalid-group-false' is not a valid IPv4 address for record type 'A'", - "source": "CFN_LINT", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", "entity": { - "logicalId": "GroupInvalidFalse", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.RecordSets.0.ResourceRecords.0", - "category": "Resource", - "startLine": 85, - "startColumn": 31, - "endLine": 85, - "endColumn": 32, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'invalid-group-mixed-true' is not a valid IPv4 address for record type 'A'", - "source": "CFN_LINT", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", "entity": { - "logicalId": "GroupMixedInvalidTrue", + "logicalId": "MadeUpPolicy", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.RecordSets.0.ResourceRecords.1", - "category": "Resource", - "startLine": 97, - "startColumn": 17, - "endLine": 97, - "endColumn": 18, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 19, + "startColumn": 5, + "endLine": 19, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'invalid-group-mixed-false' is not a valid IPv4 address for record type 'A'", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", + "entity": { + "logicalId": "InvalidMapping", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 39, + "startColumn": 5, + "endLine": 39, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "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": "GroupMixedInvalidFalse", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.RecordSets.0.ResourceRecords.1", - "category": "Resource", - "startLine": 117, - "startColumn": 17, - "endLine": 117, - "endColumn": 18, - "ruleDescription": "Validate Route53 RecordSets", + "category": "Best Practice", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 13, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "CNAME records must have at most 1 ResourceRecord", + "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": "StandaloneUnresolvedCnameCardinality", + "logicalId": "MadeUpPolicy", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ResourceRecords", - "category": "Resource", - "startLine": 125, + "category": "Best Practice", + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 15, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "PolicyList", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "MadeUpPolicy", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 19, + "startColumn": 5, + "endLine": 19, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "InvalidMapping", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 39, + "startColumn": 5, + "endLine": 39, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "source": "CFN_LINT", + "entity": { + "logicalId": "PolicyList", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", + "category": "Best Practice", + "startLine": 14, "startColumn": 7, - "endLine": 125, + "endLine": 14, "endColumn": 22, - "ruleDescription": "Validate Route53 RecordSets", + "ruleDescription": "Checks for legacy instance type generations", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "CNAME records must have at most 1 ResourceRecord", + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", "source": "CFN_LINT", "entity": { - "logicalId": "GroupUnresolvedCnameCardinality", + "logicalId": "MadeUpPolicy", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.RecordSets.0.ResourceRecords", - "category": "Resource", - "startLine": 136, - "startColumn": 11, - "endLine": 136, - "endColumn": 26, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", + "category": "Best Practice", + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3100", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "StandaloneInvalidTrue", + "logicalId": "InvalidMapping", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 15, + "startLine": 41, "startColumn": 7, - "endLine": 15, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 41, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneInvalidFalse", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 26, + "startLine": 15, "startColumn": 7, - "endLine": 26, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "endLine": 15, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneMixedInvalidTrue", + "logicalId": "MadeUpPolicy", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 37, + "startLine": 22, "startColumn": 7, - "endLine": 37, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "endLine": 22, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "message": "Property 'UserName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneMixedInvalidFalse", + "logicalId": "MyIAMUser", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::IAM::User" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Properties.UserName", "category": "Best Practice", - "startLine": 49, + "startLine": 28, "startColumn": 7, - "endLine": 49, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "endLine": 28, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6696,148 +6355,172 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GroupInvalidTrue", + "logicalId": "InvalidMapping", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 61, + "startLine": 42, "startColumn": 7, - "endLine": 61, - "endColumn": 21, + "endLine": 42, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9003", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", "source": "ENGINE", - "entity": { - "logicalId": "GroupInvalidFalse", - "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" - }, - "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 75, - "startColumn": 7, - "endLine": 75, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "message": "Resource 'PolicyList' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "GroupMixedInvalidTrue", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 89, - "startColumn": 7, - "endLine": 89, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "message": "Resource 'MadeUpPolicy' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "GroupMixedInvalidFalse", + "logicalId": "MadeUpPolicy", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 105, - "startColumn": 7, - "endLine": 105, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 19, + "startColumn": 5, + "endLine": 19, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyIAMUser' of type 'AWS::IAM::User' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StandaloneUnresolvedCnameCardinality", + "logicalId": "MyIAMUser", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::IAM::User" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 121, - "startColumn": 7, - "endLine": 121, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 26, + "startColumn": 5, + "endLine": 26, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "message": "Resource 'InvalidMapping' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "GroupUnresolvedCnameCardinality", + "logicalId": "InvalidMapping", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 131, + "startLine": 39, + "startColumn": 5, + "endLine": 39, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/resources_iam_instanceprofile_roles.yaml": { + "filePath": "bad/resources_iam_instanceprofile_roles.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3032", + "severity": "FATAL", + "message": "expected maximum item count: 1, found: 2", + "source": "SCHEMA", + "entity": { + "logicalId": "IamUser", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "Properties.Roles", + "category": "Schema", + "startLine": 7, "startColumn": 7, - "endLine": 131, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 7, + "endColumn": 12, + "ruleDescription": "Array item count out of bounds", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "extra": { + "actual_count": 2, + "max_items": 1, + "min_items": 0 + } } } ] }, - "bad/route53_conditional_scenarios.yaml": { - "filePath": "bad/route53_conditional_scenarios.yaml", + "bad/resources_updatereplacepolicy.yaml": { + "filePath": "bad/resources_updatereplacepolicy.yaml", "status": "OK", "metadata": { - "resourcesScanned": 7, + "resourcesScanned": 5, "counts": { - "fatal": 0, - "errors": 8, - "warnings": 0, - "informational": 3, + "fatal": 5, + "errors": 0, + "warnings": 9, + "informational": 18, "debug": 0 }, "suppressed": 0, @@ -6846,1198 +6529,1250 @@ }, "diagnostics": [ { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'not-an-ipv4-address' is not a valid IPv4 address for record type 'A'", - "source": "CFN_LINT", + "ruleId": "F0018", + "severity": "FATAL", + "message": "UpdateReplacePolicy must be one of Delete, Retain, Snapshot, got a list", + "source": "SCHEMA", "entity": { - "logicalId": "ConditionalRecordSetsInvalidFirst", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.RecordSets.0.ResourceRecords.0", - "category": "Resource", - "startLine": 60, - "startColumn": 31, - "endLine": 60, - "endColumn": 32, - "ruleDescription": "Validate Route53 RecordSets", - "phase": "LINT" + "propertyPath": "UpdateReplacePolicy", + "category": "Structure", + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "UpdateReplacePolicy must be valid", + "phase": "SCHEMA" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'still-not-an-ipv4-address' is not a valid IPv4 address for record type 'A'", - "source": "CFN_LINT", + "ruleId": "F0018", + "severity": "FATAL", + "message": "UpdateReplacePolicy must be one of Delete, Retain, Snapshot, got 'CopyRegion'", + "source": "SCHEMA", "entity": { - "logicalId": "ConditionalRecordSetsInvalidSecond", + "logicalId": "MadeUpPolicy", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.RecordSets.0.ResourceRecords.0", - "category": "Resource", - "startLine": 78, - "startColumn": 31, - "endLine": 78, - "endColumn": 32, - "ruleDescription": "Validate Route53 RecordSets", - "phase": "LINT" + "propertyPath": "UpdateReplacePolicy", + "category": "Structure", + "startLine": 23, + "startColumn": 5, + "endLine": 23, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "UpdateReplacePolicy must be valid", + "phase": "SCHEMA" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'invalid-first-branch' is not a valid IPv4 address for record type 'A'", - "source": "CFN_LINT", + "ruleId": "F0018", + "severity": "FATAL", + "message": "UpdateReplacePolicy must be one of Delete, Retain, got 'Snapshot'", + "source": "SCHEMA", "entity": { - "logicalId": "WholePropertiesRecordsInvalidFirst", + "logicalId": "MyIAMUser", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::IAM::User" }, - "propertyPath": "Properties.RecordSets.0.ResourceRecords.0", - "category": "Resource", - "startLine": 88, - "startColumn": 31, - "endLine": 88, - "endColumn": 32, - "ruleDescription": "Validate Route53 RecordSets", - "phase": "LINT" + "propertyPath": "UpdateReplacePolicy", + "category": "Structure", + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "UpdateReplacePolicy must be valid", + "phase": "SCHEMA" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'invalid-second-branch' is not a valid IPv4 address for record type 'A'", - "source": "CFN_LINT", + "ruleId": "F0018", + "severity": "FATAL", + "message": "UpdateReplacePolicy must be one of Delete, Retain, got a list", + "source": "SCHEMA", "entity": { - "logicalId": "WholePropertiesRecordsInvalidSecond", + "logicalId": "UnsupportedIntrinsic", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::CloudFormation::WaitConditionHandle" }, - "propertyPath": "Properties.RecordSets.0.ResourceRecords.0", - "category": "Resource", - "startLine": 110, - "startColumn": 31, - "endLine": 110, - "endColumn": 32, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "UpdateReplacePolicy", + "category": "Structure", + "startLine": 32, + "startColumn": 5, + "endLine": 32, + "endColumn": 24, + "ruleDescription": "UpdateReplacePolicy must be valid", + "phase": "SCHEMA" + }, + { + "ruleId": "F0018", + "severity": "FATAL", + "message": "UpdateReplacePolicy must be one of Delete, Retain, Snapshot, got an object", + "source": "SCHEMA", + "entity": { + "logicalId": "InvalidMapping", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "UpdateReplacePolicy", + "category": "Structure", + "startLine": 43, + "startColumn": 5, + "endLine": 43, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "UpdateReplacePolicy must be valid", + "phase": "SCHEMA" + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'DBPolicy' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "DBPolicy", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/DBPolicy", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 11, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "E3029", - "severity": "ERROR", - "message": "TTL must not be set when AliasTarget is specified", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", "source": "CFN_LINT", "entity": { - "logicalId": "AliasConflictFirst", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.TTL", - "category": "Resource", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Validate Route53 record set aliases", + "category": "Best Practice", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 13, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", "phase": "LINT" }, { - "ruleId": "E3029", - "severity": "ERROR", - "message": "TTL must not be set when AliasTarget is specified", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", "source": "CFN_LINT", "entity": { - "logicalId": "AliasConflictSecond", + "logicalId": "MadeUpPolicy", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.TTL", - "category": "Resource", - "startLine": 28, - "startColumn": 5, - "endLine": 28, + "category": "Best Practice", + "startLine": 17, + "startColumn": 3, + "endLine": 17, "endColumn": 15, - "ruleDescription": "Validate Route53 record set aliases", + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", "phase": "LINT" }, { - "ruleId": "E3029", - "severity": "ERROR", - "message": "AliasTarget cannot be used with record type 'NS'", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", "source": "CFN_LINT", "entity": { - "logicalId": "ConditionalInvalidAliasTypes", + "logicalId": "MyIAMUser", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::IAM::User" }, - "propertyPath": "Properties.AliasTarget", - "category": "Resource", - "startLine": 48, - "startColumn": 7, - "endLine": 48, - "endColumn": 18, - "ruleDescription": "Validate Route53 record set aliases", + "category": "Best Practice", + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 12, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", "phase": "LINT" }, { - "ruleId": "E3029", - "severity": "ERROR", - "message": "AliasTarget cannot be used with record type 'SOA'", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", "source": "CFN_LINT", "entity": { - "logicalId": "ConditionalInvalidAliasTypes", + "logicalId": "UnsupportedIntrinsic", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::CloudFormation::WaitConditionHandle" }, - "propertyPath": "Properties.AliasTarget", - "category": "Resource", - "startLine": 48, - "startColumn": 7, - "endLine": 48, - "endColumn": 18, - "ruleDescription": "Validate Route53 record set aliases", + "category": "Best Practice", + "startLine": 30, + "startColumn": 3, + "endLine": 30, + "endColumn": 23, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "source": "CFN_LINT", "entity": { - "logicalId": "ConditionalInvalidAliasTypes", + "logicalId": "InvalidMapping", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 45, - "startColumn": 7, - "endLine": 45, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 37, + "startColumn": 3, + "endLine": 37, + "endColumn": 17, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "ConditionalRecordSetsInvalidFirst", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneName", - "category": "Best Practice", - "startLine": 54, - "startColumn": 7, - "endLine": 54, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "ConditionalRecordSetsInvalidSecond", + "logicalId": "MadeUpPolicy", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneName", - "category": "Best Practice", - "startLine": 68, - "startColumn": 7, - "endLine": 68, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - } - ] - }, - "bad/s3_tiering_bad_days.yaml": { - "filePath": "bad/s3_tiering_bad_days.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 4, - "warnings": 0, - "informational": 1, - "debug": 0 + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 19, + "startColumn": 5, + "endLine": 19, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3061", - "severity": "ERROR", - "message": "Days 30 for ARCHIVE_ACCESS must be between 90 and 730", - "source": "CFN_LINT", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "InvalidMapping", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.IntelligentTieringConfigurations[0].Tierings[0].Days", - "suggestedFix": "Set Days between 90 and 730", - "category": "Resource", - "startLine": 5, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 39, "startColumn": 5, - "endLine": 5, + "endLine": 39, "endColumn": 15, - "ruleDescription": "Validate the days for tierings in IntelligentTieringConfigurations", + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, { - "ruleId": "E3061", - "severity": "ERROR", - "message": "Days 800 for ARCHIVE_ACCESS must be between 90 and 730", + "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": "Bucket", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.IntelligentTieringConfigurations[1].Tierings[0].Days", - "suggestedFix": "Set Days between 90 and 730", - "category": "Resource", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Validate the days for tierings in IntelligentTieringConfigurations", + "category": "Best Practice", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 13, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "E3061", - "severity": "ERROR", - "message": "Days 100 for DEEP_ARCHIVE_ACCESS must be between 180 and 730", + "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": "Bucket", + "logicalId": "MadeUpPolicy", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.IntelligentTieringConfigurations[1].Tierings[1].Days", - "suggestedFix": "Set Days between 180 and 730", - "category": "Resource", - "startLine": 5, - "startColumn": 5, - "endLine": 5, + "category": "Best Practice", + "startLine": 17, + "startColumn": 3, + "endLine": 17, "endColumn": 15, - "ruleDescription": "Validate the days for tierings in IntelligentTieringConfigurations", + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "E3061", - "severity": "ERROR", - "message": "Days 900 for DEEP_ARCHIVE_ACCESS must be between 180 and 730", + "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": "Bucket", + "logicalId": "InvalidMapping", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.IntelligentTieringConfigurations[1].Tierings[2].Days", - "suggestedFix": "Set Days between 180 and 730", - "category": "Resource", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Validate the days for tierings in IntelligentTieringConfigurations", + "category": "Best Practice", + "startLine": 37, + "startColumn": 3, + "endLine": 37, + "endColumn": 17, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "Bucket", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 5, + "startLine": 12, "startColumn": 5, - "endLine": 5, + "endLine": 12, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" - } - ] - }, - "bad/sagemaker_instance_types.yaml": { - "filePath": "bad/sagemaker_instance_types.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 36, - "errors": 5, - "warnings": 0, - "informational": 8, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'MonitoringScheduleName' is a required property", - "source": "SCHEMA", + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "MonitoringSchedule", + "logicalId": "MadeUpPolicy", "entityType": "Resource", - "resourceType": "AWS::SageMaker::MonitoringSchedule" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties", - "suggestedFix": "Add the required property 'MonitoringScheduleName'", - "category": "Schema", - "startLine": 6, + "category": "Best Practice", + "startLine": 19, "startColumn": 5, - "endLine": 6, + "endLine": 19, "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'MonitoringAppSpecification' is a required property", - "source": "SCHEMA", + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "MonitoringSchedule", + "logicalId": "InvalidMapping", "entityType": "Resource", - "resourceType": "AWS::SageMaker::MonitoringSchedule" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.MonitoringScheduleConfig.MonitoringJobDefinition", - "suggestedFix": "Add the required property 'MonitoringAppSpecification'", - "category": "Schema", - "startLine": 8, - "startColumn": 9, - "endLine": 8, - "endColumn": 32, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 39, + "startColumn": 5, + "endLine": 39, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'MonitoringInputs' is a required property", - "source": "SCHEMA", + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "MonitoringSchedule", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::SageMaker::MonitoringSchedule" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.MonitoringScheduleConfig.MonitoringJobDefinition", - "suggestedFix": "Add the required property 'MonitoringInputs'", - "category": "Schema", - "startLine": 8, - "startColumn": 9, - "endLine": 8, - "endColumn": 32, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", + "category": "Best Practice", + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'MonitoringOutputConfig' is a required property", - "source": "SCHEMA", + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "MonitoringSchedule", + "logicalId": "MadeUpPolicy", "entityType": "Resource", - "resourceType": "AWS::SageMaker::MonitoringSchedule" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.MonitoringScheduleConfig.MonitoringJobDefinition", - "suggestedFix": "Add the required property 'MonitoringOutputConfig'", - "category": "Schema", - "startLine": 8, - "startColumn": 9, - "endLine": 8, - "endColumn": 32, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", + "category": "Best Practice", + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'RoleArn' is a required property", - "source": "SCHEMA", + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "MonitoringSchedule", + "logicalId": "InvalidMapping", "entityType": "Resource", - "resourceType": "AWS::SageMaker::MonitoringSchedule" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.MonitoringScheduleConfig.MonitoringJobDefinition", - "suggestedFix": "Add the required property 'RoleArn'", - "category": "Schema", - "startLine": 8, - "startColumn": 9, - "endLine": 8, - "endColumn": 32, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", + "category": "Best Practice", + "startLine": 41, + "startColumn": 7, + "endLine": 41, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'InstanceCount' is a required property", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MonitoringSchedule", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::SageMaker::MonitoringSchedule" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.MonitoringScheduleConfig.MonitoringJobDefinition.MonitoringResources.ClusterConfig", - "suggestedFix": "Add the required property 'InstanceCount'", - "category": "Schema", - "startLine": 10, - "startColumn": 13, - "endLine": 10, - "endColumn": 26, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 15, + "startColumn": 7, + "endLine": 15, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'VolumeSizeInGB' is a required property", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MonitoringSchedule", + "logicalId": "MadeUpPolicy", "entityType": "Resource", - "resourceType": "AWS::SageMaker::MonitoringSchedule" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.MonitoringScheduleConfig.MonitoringJobDefinition.MonitoringResources.ClusterConfig", - "suggestedFix": "Add the required property 'VolumeSizeInGB'", - "category": "Schema", - "startLine": 10, - "startColumn": 13, - "endLine": 10, - "endColumn": 26, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 22, + "startColumn": 7, + "endLine": 22, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'ModelQualityAppSpecification' is a required property", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ModelQualityJobDefinition", + "logicalId": "MyIAMUser", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" + "resourceType": "AWS::IAM::User" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'ModelQualityAppSpecification'", - "category": "Schema", - "startLine": 14, - "startColumn": 5, - "endLine": 14, + "propertyPath": "Properties.UserName", + "category": "Best Practice", + "startLine": 28, + "startColumn": 7, + "endLine": 28, "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'ModelQualityJobInput' is a required property", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ModelQualityJobDefinition", + "logicalId": "InvalidMapping", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'ModelQualityJobInput'", - "category": "Schema", - "startLine": 14, - "startColumn": 5, - "endLine": 14, - "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 42, + "startColumn": 7, + "endLine": 42, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'ModelQualityJobOutputConfig' is a required property", - "source": "SCHEMA", + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'PolicyList' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ModelQualityJobDefinition", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'ModelQualityJobOutputConfig'", - "category": "Schema", - "startLine": 14, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 12, "startColumn": 5, - "endLine": 14, + "endLine": 12, "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'RoleArn' is a required property", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MadeUpPolicy' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ModelQualityJobDefinition", + "logicalId": "MadeUpPolicy", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'RoleArn'", - "category": "Schema", - "startLine": 14, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 19, "startColumn": 5, - "endLine": 14, + "endLine": 19, "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'InstanceCount' is a required property", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyIAMUser' of type 'AWS::IAM::User' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ModelQualityJobDefinition", + "logicalId": "MyIAMUser", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" + "resourceType": "AWS::IAM::User" }, - "propertyPath": "Properties.JobResources.ClusterConfig", - "suggestedFix": "Add the required property 'InstanceCount'", - "category": "Schema", - "startLine": 16, - "startColumn": 9, - "endLine": 16, - "endColumn": 22, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" - }, - { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'VolumeSizeInGB' is a required property", - "source": "SCHEMA", - "entity": { - "logicalId": "ModelQualityJobDefinition", - "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" - }, - "propertyPath": "Properties.JobResources.ClusterConfig", - "suggestedFix": "Add the required property 'VolumeSizeInGB'", - "category": "Schema", - "startLine": 16, - "startColumn": 9, - "endLine": 16, - "endColumn": 22, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 26, + "startColumn": 5, + "endLine": 26, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'EndpointName' is a required property", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'InvalidMapping' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "InferenceExperiment", + "logicalId": "InvalidMapping", "entityType": "Resource", - "resourceType": "AWS::SageMaker::InferenceExperiment" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'EndpointName'", - "category": "Schema", - "startLine": 22, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 39, "startColumn": 5, - "endLine": 22, + "endLine": 39, "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/route53.yaml": { + "filePath": "bad/route53.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 11, + "counts": { + "fatal": 0, + "errors": 30, + "warnings": 1, + "informational": 12, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'Name' is a required property", - "source": "SCHEMA", + "ruleId": "E3023", + "severity": "ERROR", + "message": "TXT record value '\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"' must be enclosed in double quotes", + "source": "CFN_LINT", "entity": { - "logicalId": "InferenceExperiment", + "logicalId": "MyTXTRecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::InferenceExperiment" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'Name'", - "category": "Schema", - "startLine": 22, - "startColumn": 5, - "endLine": 22, - "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.ResourceRecords.0", + "category": "Resource", + "startLine": 32, + "startColumn": 11, + "endLine": 32, + "endColumn": 12, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'RoleArn' is a required property", - "source": "SCHEMA", + "ruleId": "E3023", + "severity": "ERROR", + "message": "TXT record value '\"a\"\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\"' must be enclosed in double quotes", + "source": "CFN_LINT", "entity": { - "logicalId": "InferenceExperiment", + "logicalId": "MyTXTRecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::InferenceExperiment" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'RoleArn'", - "category": "Schema", - "startLine": 22, - "startColumn": 5, - "endLine": 22, - "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.ResourceRecords.1", + "category": "Resource", + "startLine": 33, + "startColumn": 11, + "endLine": 33, + "endColumn": 12, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'Type' is a required property", - "source": "SCHEMA", + "ruleId": "E3023", + "severity": "ERROR", + "message": "TXT record value 'test2' must be enclosed in double quotes", + "source": "CFN_LINT", "entity": { - "logicalId": "InferenceExperiment", + "logicalId": "MyTXTRecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::InferenceExperiment" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'Type'", - "category": "Schema", - "startLine": 22, - "startColumn": 5, - "endLine": 22, - "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.ResourceRecords.3", + "category": "Resource", + "startLine": 35, + "startColumn": 11, + "endLine": 35, + "endColumn": 12, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'InfrastructureType' is a required property", - "source": "SCHEMA", + "ruleId": "E3023", + "severity": "ERROR", + "message": "'127.0.0.1' is not a valid IPv6 address for record type 'AAAA'", + "source": "CFN_LINT", "entity": { - "logicalId": "InferenceExperiment", + "logicalId": "MyAAAARecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::InferenceExperiment" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.ModelVariants.0.InfrastructureConfig", - "suggestedFix": "Add the required property 'InfrastructureType'", - "category": "Schema", - "startLine": 24, + "propertyPath": "Properties.ResourceRecords.0", + "category": "Resource", + "startLine": 55, "startColumn": 11, - "endLine": 24, - "endColumn": 31, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "endLine": 55, + "endColumn": 12, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'ModelName' is a required property", - "source": "SCHEMA", + "ruleId": "E3023", + "severity": "ERROR", + "message": "'XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:1.2.3.4' is not a valid IPv6 address for record type 'AAAA'", + "source": "CFN_LINT", "entity": { - "logicalId": "InferenceExperiment", + "logicalId": "MyAAAARecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::InferenceExperiment" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.ModelVariants.0", - "suggestedFix": "Add the required property 'ModelName'", - "category": "Schema", - "startLine": 24, - "startColumn": 31, - "endLine": 24, - "endColumn": 32, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.ResourceRecords.1", + "category": "Resource", + "startLine": 56, + "startColumn": 11, + "endLine": 56, + "endColumn": 12, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'VariantName' is a required property", - "source": "SCHEMA", + "ruleId": "E3023", + "severity": "ERROR", + "message": "'2001:0db8: 85a3:0:0:8a2e:0370:7334' is not a valid IPv6 address for record type 'AAAA'", + "source": "CFN_LINT", "entity": { - "logicalId": "InferenceExperiment", + "logicalId": "MyAAAARecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::InferenceExperiment" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.ModelVariants.0", - "suggestedFix": "Add the required property 'VariantName'", - "category": "Schema", - "startLine": 24, - "startColumn": 31, - "endLine": 24, - "endColumn": 32, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.ResourceRecords.2", + "category": "Resource", + "startLine": 57, + "startColumn": 11, + "endLine": 57, + "endColumn": 12, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'InstanceCount' is a required property", - "source": "SCHEMA", + "ruleId": "E3023", + "severity": "ERROR", + "message": "'1111:2222:3333:4444:5555:6666:7777' is not a valid IPv6 address for record type 'AAAA'", + "source": "CFN_LINT", "entity": { - "logicalId": "InferenceExperiment", + "logicalId": "MyAAAARecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::InferenceExperiment" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.ModelVariants.0.InfrastructureConfig.RealTimeInferenceConfig", - "suggestedFix": "Add the required property 'InstanceCount'", - "category": "Schema", - "startLine": 25, - "startColumn": 13, - "endLine": 25, - "endColumn": 36, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.ResourceRecords.3", + "category": "Resource", + "startLine": 58, + "startColumn": 11, + "endLine": 58, + "endColumn": 12, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'InfrastructureType' is a required property", - "source": "SCHEMA", + "ruleId": "E3023", + "severity": "ERROR", + "message": "'1111:2222:3333:4444:5555:6666:7777:8888::' is not a valid IPv6 address for record type 'AAAA'", + "source": "CFN_LINT", "entity": { - "logicalId": "InferenceExperiment", + "logicalId": "MyAAAARecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::InferenceExperiment" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.ModelVariants.1.InfrastructureConfig", - "suggestedFix": "Add the required property 'InfrastructureType'", - "category": "Schema", - "startLine": 27, + "propertyPath": "Properties.ResourceRecords.4", + "category": "Resource", + "startLine": 59, "startColumn": 11, - "endLine": 27, - "endColumn": 31, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "endLine": 59, + "endColumn": 12, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'ModelName' is a required property", - "source": "SCHEMA", + "ruleId": "E3023", + "severity": "ERROR", + "message": "CAA record value '127.0.0.1' must match format: flag tag 'value'", + "source": "CFN_LINT", "entity": { - "logicalId": "InferenceExperiment", + "logicalId": "MyCAARecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::InferenceExperiment" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.ModelVariants.1", - "suggestedFix": "Add the required property 'ModelName'", - "category": "Schema", - "startLine": 27, - "startColumn": 31, - "endLine": 27, - "endColumn": 32, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.ResourceRecords.0", + "category": "Resource", + "startLine": 69, + "startColumn": 11, + "endLine": 69, + "endColumn": 12, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'VariantName' is a required property", - "source": "SCHEMA", + "ruleId": "E3023", + "severity": "ERROR", + "message": "CAA record value '0 issue amazon.com; henk' must match format: flag tag 'value'", + "source": "CFN_LINT", "entity": { - "logicalId": "InferenceExperiment", + "logicalId": "MyCAARecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::InferenceExperiment" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.ModelVariants.1", - "suggestedFix": "Add the required property 'VariantName'", - "category": "Schema", - "startLine": 27, - "startColumn": 31, - "endLine": 27, - "endColumn": 32, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.ResourceRecords.1", + "category": "Resource", + "startLine": 70, + "startColumn": 11, + "endLine": 70, + "endColumn": 12, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'InstanceCount' is a required property", - "source": "SCHEMA", + "ruleId": "E3023", + "severity": "ERROR", + "message": "CNAME records must have at most 1 ResourceRecord", + "source": "CFN_LINT", "entity": { - "logicalId": "InferenceExperiment", + "logicalId": "MyCNAMERecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::InferenceExperiment" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.ModelVariants.1.InfrastructureConfig.RealTimeInferenceConfig", - "suggestedFix": "Add the required property 'InstanceCount'", - "category": "Schema", - "startLine": 28, - "startColumn": 13, - "endLine": 28, - "endColumn": 36, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.ResourceRecords", + "category": "Resource", + "startLine": 79, + "startColumn": 7, + "endLine": 79, + "endColumn": 22, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'ValidationRole' is a required property", - "source": "SCHEMA", + "ruleId": "E3023", + "severity": "ERROR", + "message": "CNAME records must have at most 1 ResourceRecord", + "source": "CFN_LINT", "entity": { - "logicalId": "ModelPackage", + "logicalId": "MyCNAMERecordSetConditions", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelPackage" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.ValidationSpecification", - "suggestedFix": "Add the required property 'ValidationRole'", - "category": "Schema", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 30, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker", - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.ResourceRecords", + "category": "Resource", + "startLine": 93, + "startColumn": 11, + "endLine": 93, + "endColumn": 12, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'TransformInput' is a required property", - "source": "SCHEMA", + "ruleId": "E3023", + "severity": "ERROR", + "message": "MX record value '127.0.0.1' must match format: priority domain", + "source": "CFN_LINT", "entity": { - "logicalId": "ModelPackage", + "logicalId": "MyMXRecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelPackage" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.ValidationSpecification.ValidationProfiles.0.TransformJobDefinition", - "suggestedFix": "Add the required property 'TransformInput'", - "category": "Schema", - "startLine": 37, - "startColumn": 13, - "endLine": 37, - "endColumn": 35, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker", - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.ResourceRecords.0", + "category": "Resource", + "startLine": 104, + "startColumn": 11, + "endLine": 104, + "endColumn": 12, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'TransformOutput' is a required property", - "source": "SCHEMA", + "ruleId": "E3023", + "severity": "ERROR", + "message": "MX record value '10 my domain' must match format: priority domain", + "source": "CFN_LINT", "entity": { - "logicalId": "ModelPackage", + "logicalId": "MyMXRecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelPackage" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.ValidationSpecification.ValidationProfiles.0.TransformJobDefinition", - "suggestedFix": "Add the required property 'TransformOutput'", - "category": "Schema", - "startLine": 37, - "startColumn": 13, - "endLine": 37, - "endColumn": 35, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker", - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.ResourceRecords.1", + "category": "Resource", + "startLine": 105, + "startColumn": 11, + "endLine": 105, + "endColumn": 12, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'ProfileName' is a required property", - "source": "SCHEMA", + "ruleId": "E3023", + "severity": "ERROR", + "message": "TXT record value 'test4' must be enclosed in double quotes", + "source": "CFN_LINT", "entity": { - "logicalId": "ModelPackage", + "logicalId": "MyRecordSetGroup", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelPackage" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.ValidationSpecification.ValidationProfiles.0", - "suggestedFix": "Add the required property 'ProfileName'", - "category": "Schema", - "startLine": 37, - "startColumn": 35, - "endLine": 37, - "endColumn": 36, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker", - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.RecordSets.0.ResourceRecords.0", + "category": "Resource", + "startLine": 127, + "startColumn": 15, + "endLine": 127, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'InstanceCount' is a required property", - "source": "SCHEMA", + "ruleId": "E3023", + "severity": "ERROR", + "message": "'a.example.com' is not a valid IPv4 address for record type 'A'", + "source": "CFN_LINT", "entity": { - "logicalId": "ModelPackage", + "logicalId": "MyRecordSetGroup", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelPackage" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.ValidationSpecification.ValidationProfiles.0.TransformJobDefinition.TransformResources", - "suggestedFix": "Add the required property 'InstanceCount'", - "category": "Schema", - "startLine": 38, + "propertyPath": "Properties.RecordSets.1.ResourceRecords.0", + "category": "Resource", + "startLine": 132, "startColumn": 15, - "endLine": 38, - "endColumn": 33, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker", - "ruleDescription": "Required property missing", - "phase": "SCHEMA" - }, - { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'ExecutionRole' is a required property", - "source": "SCHEMA", - "entity": { - "logicalId": "Cluster", - "entityType": "Resource", - "resourceType": "AWS::SageMaker::Cluster" - }, - "propertyPath": "Properties.InstanceGroups.0", - "suggestedFix": "Add the required property 'ExecutionRole'", - "category": "Schema", - "startLine": 46, - "startColumn": 23, - "endLine": 46, - "endColumn": 24, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "endLine": 132, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'InstanceCount' is a required property", - "source": "SCHEMA", + "ruleId": "E3023", + "severity": "ERROR", + "message": "'1111:2222:3333:4444:55556666:7777:8888' is not a valid IPv6 address for record type 'AAAA'", + "source": "CFN_LINT", "entity": { - "logicalId": "Cluster", + "logicalId": "MyRecordSetGroup", "entityType": "Resource", - "resourceType": "AWS::SageMaker::Cluster" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.InstanceGroups.0", - "suggestedFix": "Add the required property 'InstanceCount'", - "category": "Schema", - "startLine": 46, - "startColumn": 23, - "endLine": 46, - "endColumn": 24, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.RecordSets.2.ResourceRecords.0", + "category": "Resource", + "startLine": 137, + "startColumn": 15, + "endLine": 137, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'InstanceGroupName' is a required property", - "source": "SCHEMA", + "ruleId": "E3023", + "severity": "ERROR", + "message": "'1111:2222:3333:4444:5555:6666:7777:8888:' is not a valid IPv6 address for record type 'AAAA'", + "source": "CFN_LINT", "entity": { - "logicalId": "Cluster", + "logicalId": "MyRecordSetGroup", "entityType": "Resource", - "resourceType": "AWS::SageMaker::Cluster" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.InstanceGroups.0", - "suggestedFix": "Add the required property 'InstanceGroupName'", - "category": "Schema", - "startLine": 46, - "startColumn": 23, - "endLine": 46, - "endColumn": 24, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.RecordSets.2.ResourceRecords.1", + "category": "Resource", + "startLine": 138, + "startColumn": 15, + "endLine": 138, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'ExecutionRole' is a required property", - "source": "SCHEMA", + "ruleId": "E3023", + "severity": "ERROR", + "message": "'1111:2222:3333:::5555:6666:7777:8888' is not a valid IPv6 address for record type 'AAAA'", + "source": "CFN_LINT", "entity": { - "logicalId": "Cluster", + "logicalId": "MyRecordSetGroup", "entityType": "Resource", - "resourceType": "AWS::SageMaker::Cluster" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.RestrictedInstanceGroups.0", - "suggestedFix": "Add the required property 'ExecutionRole'", - "category": "Schema", - "startLine": 48, - "startColumn": 23, - "endLine": 48, - "endColumn": 24, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.RecordSets.2.ResourceRecords.2", + "category": "Resource", + "startLine": 139, + "startColumn": 15, + "endLine": 139, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'InstanceCount' is a required property", - "source": "SCHEMA", + "ruleId": "E3023", + "severity": "ERROR", + "message": "'1111::3333:4444:5555::7777:8888' is not a valid IPv6 address for record type 'AAAA'", + "source": "CFN_LINT", "entity": { - "logicalId": "Cluster", + "logicalId": "MyRecordSetGroup", "entityType": "Resource", - "resourceType": "AWS::SageMaker::Cluster" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.RestrictedInstanceGroups.0", - "suggestedFix": "Add the required property 'InstanceCount'", - "category": "Schema", - "startLine": 48, - "startColumn": 23, - "endLine": 48, - "endColumn": 24, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.RecordSets.2.ResourceRecords.3", + "category": "Resource", + "startLine": 140, + "startColumn": 15, + "endLine": 140, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'InstanceGroupName' is a required property", - "source": "SCHEMA", + "ruleId": "E3023", + "severity": "ERROR", + "message": "'::1.2.3.' is not a valid IPv6 address for record type 'AAAA'", + "source": "CFN_LINT", "entity": { - "logicalId": "Cluster", + "logicalId": "MyRecordSetGroup", "entityType": "Resource", - "resourceType": "AWS::SageMaker::Cluster" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.RestrictedInstanceGroups.0", - "suggestedFix": "Add the required property 'InstanceGroupName'", - "category": "Schema", - "startLine": 48, - "startColumn": 23, - "endLine": 48, - "endColumn": 24, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.RecordSets.2.ResourceRecords.4", + "category": "Resource", + "startLine": 141, + "startColumn": 15, + "endLine": 141, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "E3640", + "ruleId": "E3023", "severity": "ERROR", - "message": "'ml.fake.xlarge' is not valid in any region", + "message": "':1111:2222:3333:4444:5555::7777:8888' is not a valid IPv6 address for record type 'AAAA'", "source": "CFN_LINT", "entity": { - "logicalId": "MonitoringSchedule", + "logicalId": "MyRecordSetGroup", "entityType": "Resource", - "resourceType": "AWS::SageMaker::MonitoringSchedule" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.MonitoringScheduleConfig.MonitoringJobDefinition.MonitoringResources.ClusterConfig.InstanceType", + "propertyPath": "Properties.RecordSets.2.ResourceRecords.5", "category": "Resource", - "startLine": 11, + "startLine": 142, "startColumn": 15, - "endLine": 11, - "endColumn": 27, - "ruleDescription": "Validate SageMaker processing instance types based on region", + "endLine": 142, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" }, { - "ruleId": "E3642", + "ruleId": "E3023", "severity": "ERROR", - "message": "'ml.fake.xlarge' is not valid in any region", + "message": "'127.0.0.1 ' is not a valid IPv4 address for record type 'A'", "source": "CFN_LINT", "entity": { - "logicalId": "InferenceExperiment", + "logicalId": "MyRecordSetGroup", "entityType": "Resource", - "resourceType": "AWS::SageMaker::InferenceExperiment" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.ModelVariants.InfrastructureConfig.RealTimeInferenceConfig.InstanceType", + "propertyPath": "Properties.RecordSets.3.ResourceRecords.0", "category": "Resource", - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 20, - "ruleDescription": "Validate SageMaker hosting instance types based on region", + "startLine": 147, + "startColumn": 15, + "endLine": 147, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" }, { - "ruleId": "E3643", + "ruleId": "E3023", "severity": "ERROR", - "message": "'ml.bogus.large' is not valid in any region", + "message": "'256.10.1.256' is not a valid IPv4 address for record type 'A'", "source": "CFN_LINT", "entity": { - "logicalId": "ModelPackage", + "logicalId": "MyRecordSetGroup", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelPackage" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.ValidationSpecification.ValidationProfiles.TransformJobDefinition.TransformResources.InstanceType", + "propertyPath": "Properties.RecordSets.4.ResourceRecords.0", "category": "Resource", - "startLine": 36, - "startColumn": 9, - "endLine": 36, - "endColumn": 27, - "ruleDescription": "Validate SageMaker transform instance types based on region", + "startLine": 152, + "startColumn": 15, + "endLine": 152, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" }, { - "ruleId": "E3644", + "ruleId": "E3023", "severity": "ERROR", - "message": "'ml.fake.xlarge' is not valid in any region", + "message": "CAA record value '1 issue \"amazon.com; example.com\"' must match format: flag tag 'value'", "source": "CFN_LINT", "entity": { - "logicalId": "Cluster", + "logicalId": "MyRecordSetGroup", "entityType": "Resource", - "resourceType": "AWS::SageMaker::Cluster" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.InstanceGroups.InstanceType", + "propertyPath": "Properties.RecordSets.5.ResourceRecords.0", "category": "Resource", - "startLine": 45, - "startColumn": 7, - "endLine": 45, - "endColumn": 21, - "ruleDescription": "Validate SageMaker cluster instance types based on region", + "startLine": 157, + "startColumn": 15, + "endLine": 157, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" }, { - "ruleId": "E3644", + "ruleId": "E3023", "severity": "ERROR", - "message": "'ml.bogus.large' is not valid in any region", + "message": "CAA record value 'A issue \"amazon.com; example.com\"' must match format: flag tag 'value'", "source": "CFN_LINT", "entity": { - "logicalId": "Cluster", + "logicalId": "MyRecordSetGroup", "entityType": "Resource", - "resourceType": "AWS::SageMaker::Cluster" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.RestrictedInstanceGroups.InstanceType", + "propertyPath": "Properties.RecordSets.5.ResourceRecords.1", "category": "Resource", - "startLine": 47, + "startLine": 158, + "startColumn": 15, + "endLine": 158, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" + }, + { + "ruleId": "E3023", + "severity": "ERROR", + "message": "CAA record value '0 special-value \"amazon.com\"' must match format: flag tag 'value'", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyRecordSetGroup", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "propertyPath": "Properties.RecordSets.5.ResourceRecords.2", + "category": "Resource", + "startLine": 159, + "startColumn": 15, + "endLine": 159, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" + }, + { + "ruleId": "E3023", + "severity": "ERROR", + "message": "MX record value 'mx1.example.com' must match format: priority domain", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyRecordSetGroup", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "propertyPath": "Properties.RecordSets.7.ResourceRecords.0", + "category": "Resource", + "startLine": 169, + "startColumn": 15, + "endLine": 169, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" + }, + { + "ruleId": "E3023", + "severity": "ERROR", + "message": "MX record value '65536 mx2.example.com' must match format: priority domain", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyRecordSetGroup", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "propertyPath": "Properties.RecordSets.7.ResourceRecords.1", + "category": "Resource", + "startLine": 170, + "startColumn": 15, + "endLine": 170, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" + }, + { + "ruleId": "E3029", + "severity": "ERROR", + "message": "TTL must not be set when AliasTarget is specified", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyAliasRecordSet", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.TTL", + "category": "Resource", + "startLine": 113, "startColumn": 7, - "endLine": 47, - "endColumn": 31, - "ruleDescription": "Validate SageMaker cluster instance types based on region", + "endLine": 113, + "endColumn": 10, + "ruleDescription": "Validate Route53 record set aliases", + "phase": "LINT" + }, + { + "ruleId": "W1054", + "severity": "WARN", + "message": "Found a string 'AWS::Region' that appears to be a pseudo parameter reference; use 'Ref: AWS::Region' instead", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyHostedZone", + "entityType": "Resource", + "resourceType": "AWS::Route53::HostedZone" + }, + "propertyPath": "Properties.VPCs.0.VPCRegion", + "suggestedFix": "Use Ref to reference pseudo parameters instead of embedding them as literal strings", + "category": "Intrinsic Function", + "startLine": 22, + "startColumn": 11, + "endLine": 22, + "endColumn": 20, + "ruleDescription": "String value matches a pseudo parameter; use Ref instead", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'JobResources' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ModelQualityJobDefinition", + "logicalId": "MyHostedZone", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" + "resourceType": "AWS::Route53::HostedZone" }, - "propertyPath": "Properties.JobResources", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 15, + "startLine": 19, "startColumn": 7, - "endLine": 15, - "endColumn": 19, + "endLine": 19, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -8047,147 +7782,273 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ValidationSpecification' is create-only; updating it will cause resource replacement", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ModelPackage", + "logicalId": "MyTXTRecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelPackage" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.ValidationSpecification", + "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "startLine": 35, + "startLine": 27, "startColumn": 7, - "endLine": 35, - "endColumn": 30, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker", + "endLine": 27, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyHostedZone'" } }, { - "ruleId": "I9003", + "ruleId": "I9001", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", "source": "ENGINE", + "entity": { + "logicalId": "MyARecordSet", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" + "startLine": 40, + "startColumn": 7, + "endLine": 40, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyHostedZone'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MonitoringSchedule' of type 'AWS::SageMaker::MonitoringSchedule' supports Tags but none are configured", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MonitoringSchedule", + "logicalId": "MyAAAARecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::MonitoringSchedule" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 50, + "startColumn": 7, + "endLine": 50, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyHostedZone'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ModelQualityJobDefinition' of type 'AWS::SageMaker::ModelQualityJobDefinition' supports Tags but none are configured", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ModelQualityJobDefinition", + "logicalId": "MyCAARecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "startLine": 14, - "startColumn": 5, - "endLine": 14, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 64, + "startColumn": 7, + "endLine": 64, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyHostedZone'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'InferenceExperiment' of type 'AWS::SageMaker::InferenceExperiment' supports Tags but none are configured", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "InferenceExperiment", + "logicalId": "MyCNAMERecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::InferenceExperiment" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "startLine": 22, - "startColumn": 5, - "endLine": 22, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 75, + "startColumn": 7, + "endLine": 75, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyHostedZone'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ModelPackage' of type 'AWS::SageMaker::ModelPackage' supports Tags but none are configured", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ModelPackage", + "logicalId": "MyCNAMERecordSetConditions", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelPackage" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "startLine": 34, - "startColumn": 5, - "endLine": 34, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 86, + "startColumn": 7, + "endLine": 86, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyHostedZone'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Cluster' of type 'AWS::SageMaker::Cluster' supports Tags but none are configured", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "MyMXRecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::Cluster" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "startLine": 44, - "startColumn": 5, - "endLine": 44, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 99, + "startColumn": 7, + "endLine": 99, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyHostedZone'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyAliasRecordSet", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.HostedZoneId", + "category": "Best Practice", + "startLine": 110, + "startColumn": 7, + "endLine": 110, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyHostedZone'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyRecordSetGroup", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "propertyPath": "Properties.HostedZoneId", + "category": "Best Practice", + "startLine": 121, + "startColumn": 7, + "endLine": 121, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyHostedZone'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PoorlyConfiguredRoute53", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "propertyPath": "Properties.HostedZoneId", + "category": "Best Practice", + "startLine": 174, + "startColumn": 7, + "endLine": 174, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyHostedZone'" + } + }, + { + "ruleId": "I9002", + "severity": "INFO", + "message": "'TTL' is ignored in this configuration (from extension)", + "source": "ENGINE", + "entity": { + "logicalId": "MyAliasRecordSet", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.TTL", + "category": "Best Practice", + "startLine": 113, + "startColumn": 7, + "endLine": 113, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Property is ignored in this configuration (from extension)", + "phase": "SCHEMA" } ] }, - "bad/sam/api_missing_stagename.yaml": { - "filePath": "bad/sam/api_missing_stagename.yaml", + "bad/route53_conditional_record_arrays.yaml": { + "filePath": "bad/route53_conditional_record_arrays.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 10, "counts": { "fatal": 0, - "errors": 1, + "errors": 10, "warnings": 0, - "informational": 0, + "informational": 10, "debug": 0 }, "suppressed": 0, @@ -8196,568 +8057,432 @@ }, "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [MyApi] is invalid. Missing required property 'StageName'.", + "message": "'invalid-standalone-true' is not a valid IPv4 address for record type 'A'", "source": "CFN_LINT", "entity": { - "logicalId": "MyApi", + "logicalId": "StandaloneInvalidTrue", "entityType": "Resource", - "resourceType": "AWS::Serverless::Api" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties/StageName", - "category": "Structure", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 8, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.ResourceRecords.0", + "category": "Resource", + "startLine": 21, + "startColumn": 12, + "endLine": 21, + "endColumn": 13, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/connector_missing_destination.yaml": { - "filePath": "bad/sam/connector_missing_destination.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [MyConn] is invalid. Missing required property 'Destination'.", + "message": "'invalid-standalone-false' is not a valid IPv4 address for record type 'A'", "source": "CFN_LINT", "entity": { - "logicalId": "MyConn", + "logicalId": "StandaloneInvalidFalse", "entityType": "Resource", - "resourceType": "AWS::Serverless::Connector" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties/Destination", - "category": "Structure", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 9, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.ResourceRecords.0", + "category": "Resource", + "startLine": 33, + "startColumn": 12, + "endLine": 33, + "endColumn": 13, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/connector_missing_source.yaml": { - "filePath": "bad/sam/connector_missing_source.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [MyConn] is invalid. Missing required property 'Source'.", + "message": "'invalid-standalone-mixed-true' is not a valid IPv4 address for record type 'A'", "source": "CFN_LINT", "entity": { - "logicalId": "MyConn", + "logicalId": "StandaloneMixedInvalidTrue", "entityType": "Resource", - "resourceType": "AWS::Serverless::Connector" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties/Source", - "category": "Structure", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 9, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.ResourceRecords.1", + "category": "Resource", + "startLine": 44, + "startColumn": 13, + "endLine": 44, + "endColumn": 14, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/function_autopublishalias_invalid_name.yaml": { - "filePath": "bad/sam/function_autopublishalias_invalid_name.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [Fn] is invalid. AutoPublishAlias name ('123') must contain only alphanumeric characters, hyphens, or underscores matching (?!^[0-9]+$)([a-zA-Z0-9-_]+) pattern.", + "message": "'invalid-standalone-mixed-false' is not a valid IPv4 address for record type 'A'", "source": "CFN_LINT", "entity": { - "logicalId": "Fn", + "logicalId": "StandaloneMixedInvalidFalse", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.ResourceRecords.1", + "category": "Resource", + "startLine": 57, + "startColumn": 13, + "endLine": 57, + "endColumn": 14, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/function_capacityprovider_with_vpcconfig.yaml": { - "filePath": "bad/sam/function_capacityprovider_with_vpcconfig.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [Fn] is invalid. Cannot specify 'CapacityProviderConfig' and 'VpcConfig' together.", + "message": "'invalid-group-true' is not a valid IPv4 address for record type 'A'", "source": "CFN_LINT", "entity": { - "logicalId": "Fn", + "logicalId": "GroupInvalidTrue", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.RecordSets.0.ResourceRecords.0", + "category": "Resource", + "startLine": 67, + "startColumn": 31, + "endLine": 67, + "endColumn": 32, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/function_deploymentpreference_without_alias.yaml": { - "filePath": "bad/sam/function_deploymentpreference_without_alias.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [Fn] is invalid. 'DeploymentPreference' requires AutoPublishAlias property to be specified.", + "message": "'invalid-group-false' is not a valid IPv4 address for record type 'A'", "source": "CFN_LINT", "entity": { - "logicalId": "Fn", + "logicalId": "GroupInvalidFalse", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.RecordSets.0.ResourceRecords.0", + "category": "Resource", + "startLine": 85, + "startColumn": 31, + "endLine": 85, + "endColumn": 32, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/function_dlq_invalid_type.yaml": { - "filePath": "bad/sam/function_dlq_invalid_type.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [Fn] is invalid. 'DeadLetterQueue' requires Type of ['SQS', 'SNS']", + "message": "'invalid-group-mixed-true' is not a valid IPv4 address for record type 'A'", "source": "CFN_LINT", "entity": { - "logicalId": "Fn", + "logicalId": "GroupMixedInvalidTrue", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.RecordSets.0.ResourceRecords.1", + "category": "Resource", + "startLine": 97, + "startColumn": 17, + "endLine": 97, + "endColumn": 18, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/function_dlq_missing_targetarn.yaml": { - "filePath": "bad/sam/function_dlq_missing_targetarn.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [Fn] is invalid. 'DeadLetterQueue' requires Type and TargetArn properties to be specified.", + "message": "'invalid-group-mixed-false' is not a valid IPv4 address for record type 'A'", "source": "CFN_LINT", "entity": { - "logicalId": "Fn", + "logicalId": "GroupMixedInvalidFalse", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.RecordSets.0.ResourceRecords.1", + "category": "Resource", + "startLine": 117, + "startColumn": 17, + "endLine": 117, + "endColumn": 18, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/function_functionscaling_without_capacityprovider.yaml": { - "filePath": "bad/sam/function_functionscaling_without_capacityprovider.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [Fn] is invalid. 'FunctionScalingConfig' requires 'CapacityProviderConfig'.", + "message": "CNAME records must have at most 1 ResourceRecord", "source": "CFN_LINT", "entity": { - "logicalId": "Fn", + "logicalId": "StandaloneUnresolvedCnameCardinality", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", - "phase": "LINT" - } - ] - }, - "bad/sam/function_image_with_handler_runtime.yaml": { - "filePath": "bad/sam/function_image_with_handler_runtime.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 + "propertyPath": "Properties.ResourceRecords", + "category": "Resource", + "startLine": 125, + "startColumn": 7, + "endLine": 125, + "endColumn": 22, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [Fn] is invalid. Runtime, Handler, Layers cannot be present when PackageType is of type `Image`", + "message": "CNAME records must have at most 1 ResourceRecord", "source": "CFN_LINT", "entity": { - "logicalId": "Fn", + "logicalId": "GroupUnresolvedCnameCardinality", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.RecordSets.0.ResourceRecords", + "category": "Resource", + "startLine": 136, + "startColumn": 11, + "endLine": 136, + "endColumn": 26, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/function_packagetype_invalid.yaml": { - "filePath": "bad/sam/function_packagetype_invalid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", - "severity": "ERROR", - "message": "Error transforming template: Resource with id [Fn] is invalid. invalid 'PackageType' : Banana", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Fn", + "logicalId": "StandaloneInvalidTrue", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", - "phase": "LINT" - } - ] - }, - "bad/sam/function_provisioned_concurrency_without_alias.yaml": { - "filePath": "bad/sam/function_provisioned_concurrency_without_alias.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 + "propertyPath": "Properties.HostedZoneName", + "category": "Best Practice", + "startLine": 15, + "startColumn": 7, + "endLine": 15, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", - "severity": "ERROR", - "message": "Error transforming template: Resource with id [Fn] is invalid. To set ProvisionedConcurrencyConfig AutoPublishALias must be defined on the function", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Fn", + "logicalId": "StandaloneInvalidFalse", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", - "phase": "LINT" - } - ] - }, - "bad/sam/function_url_config_missing_authtype.yaml": { - "filePath": "bad/sam/function_url_config_missing_authtype.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 + "propertyPath": "Properties.HostedZoneName", + "category": "Best Practice", + "startLine": 26, + "startColumn": 7, + "endLine": 26, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", - "severity": "ERROR", - "message": "Error transforming template: Resource with id [Fn] is invalid. AuthType is required to configure function property `FunctionUrlConfig`. Please provide either AWS_IAM or NONE.", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Fn", + "logicalId": "StandaloneMixedInvalidTrue", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", - "phase": "LINT" - } - ] - }, - "bad/sam/function_versiondeletionpolicy_without_alias.yaml": { - "filePath": "bad/sam/function_versiondeletionpolicy_without_alias.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 + "propertyPath": "Properties.HostedZoneName", + "category": "Best Practice", + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", - "severity": "ERROR", - "message": "Error transforming template: Resource with id [Fn] is invalid. 'VersionDeletionPolicy' requires 'AutoPublishAlias'.", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Fn", + "logicalId": "StandaloneMixedInvalidFalse", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", - "phase": "LINT" - } - ] - }, - "bad/sam/function_zip_missing_runtime_handler.yaml": { - "filePath": "bad/sam/function_zip_missing_runtime_handler.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ + "propertyPath": "Properties.HostedZoneName", + "category": "Best Practice", + "startLine": 49, + "startColumn": 7, + "endLine": 49, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, { - "ruleId": "E0001", - "severity": "ERROR", - "message": "Error transforming template: Resource with id [Fn] is invalid. Runtime and Handler needs to be present when PackageType is of type `Zip`", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Fn", + "logicalId": "GroupInvalidTrue", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", - "phase": "LINT" + "propertyPath": "Properties.HostedZoneName", + "category": "Best Practice", + "startLine": 61, + "startColumn": 7, + "endLine": 61, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "GroupInvalidFalse", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "propertyPath": "Properties.HostedZoneName", + "category": "Best Practice", + "startLine": 75, + "startColumn": 7, + "endLine": 75, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "GroupMixedInvalidTrue", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "propertyPath": "Properties.HostedZoneName", + "category": "Best Practice", + "startLine": 89, + "startColumn": 7, + "endLine": 89, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "GroupMixedInvalidFalse", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "propertyPath": "Properties.HostedZoneName", + "category": "Best Practice", + "startLine": 105, + "startColumn": 7, + "endLine": 105, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "StandaloneUnresolvedCnameCardinality", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.HostedZoneName", + "category": "Best Practice", + "startLine": 121, + "startColumn": 7, + "endLine": 121, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "GroupUnresolvedCnameCardinality", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "propertyPath": "Properties.HostedZoneName", + "category": "Best Practice", + "startLine": 131, + "startColumn": 7, + "endLine": 131, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } } ] }, - "bad/sam/function_zip_with_imageuri.yaml": { - "filePath": "bad/sam/function_zip_with_imageuri.yaml", + "bad/route53_conditional_scenarios.yaml": { + "filePath": "bad/route53_conditional_scenarios.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 7, "counts": { "fatal": 0, - "errors": 1, + "errors": 8, "warnings": 0, - "informational": 0, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -8766,358 +8491,236 @@ }, "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [Fn] is invalid. ImageUri or ImageConfig cannot be present when PackageType is of type `Zip`", + "message": "'not-an-ipv4-address' is not a valid IPv4 address for record type 'A'", "source": "CFN_LINT", "entity": { - "logicalId": "Fn", + "logicalId": "ConditionalRecordSetsInvalidFirst", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.RecordSets.0.ResourceRecords.0", + "category": "Resource", + "startLine": 60, + "startColumn": 31, + "endLine": 60, + "endColumn": 32, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/globals_not_dict.yaml": { - "filePath": "bad/sam/globals_not_dict.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: 'Globals' section is invalid. It must be a non-empty dictionary", + "message": "'still-not-an-ipv4-address' is not a valid IPv4 address for record type 'A'", "source": "CFN_LINT", - "propertyPath": "Globals", - "category": "Structure", - "startLine": 2, - "startColumn": 1, - "endLine": 2, - "endColumn": 8, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "entity": { + "logicalId": "ConditionalRecordSetsInvalidSecond", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "propertyPath": "Properties.RecordSets.0.ResourceRecords.0", + "category": "Resource", + "startLine": 78, + "startColumn": 31, + "endLine": 78, + "endColumn": 32, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/globals_section_not_dict.yaml": { - "filePath": "bad/sam/globals_section_not_dict.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: 'Globals' section is invalid. Value of ${section} must be a dictionary", - "source": "CFN_LINT", - "propertyPath": "Globals", - "category": "Structure", - "startLine": 2, - "startColumn": 1, - "endLine": 2, - "endColumn": 8, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", - "phase": "LINT" - } - ] - }, - "bad/sam/globals_unknown_property.yaml": { - "filePath": "bad/sam/globals_unknown_property.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E0001", - "severity": "ERROR", - "message": "Error transforming template: 'Globals' section is invalid. 'NotARealProperty' is not a supported property of 'Function'. Must be one of the following values - ['Handler', 'Runtime', 'CodeUri', 'DeadLetterQueue', 'Description', 'MemorySize', 'Timeout', 'VpcConfig', 'Environment', 'Tags', 'PropagateTags', 'Tracing', 'KmsKeyArn', 'AutoPublishAlias', 'AutoPublishAliasAllProperties', 'Layers', 'DeploymentPreference', 'RolePath', 'PermissionsBoundary', 'ReservedConcurrentExecutions', 'ProvisionedConcurrencyConfig', 'AssumeRolePolicyDocument', 'EventInvokeConfig', 'FileSystemConfigs', 'CodeSigningConfigArn', 'Architectures', 'SnapStart', 'EphemeralStorage', 'FunctionUrlConfig', 'RuntimeManagementConfig', 'LoggingConfig', 'RecursiveLoop', 'SourceKMSKeyArn', 'TenancyConfig', 'DurableConfig', 'CapacityProviderConfig', 'FunctionScalingConfig', 'PublishToLatestPublished', 'VersionDeletionPolicy']", + "message": "'invalid-first-branch' is not a valid IPv4 address for record type 'A'", "source": "CFN_LINT", - "propertyPath": "Globals", - "category": "Structure", - "startLine": 2, - "startColumn": 1, - "endLine": 2, - "endColumn": 8, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "entity": { + "logicalId": "WholePropertiesRecordsInvalidFirst", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "propertyPath": "Properties.RecordSets.0.ResourceRecords.0", + "category": "Resource", + "startLine": 88, + "startColumn": 31, + "endLine": 88, + "endColumn": 32, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/globals_unknown_section.yaml": { - "filePath": "bad/sam/globals_unknown_section.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: 'Globals' section is invalid. 'Foo' is not supported. Must be one of the following values - ['Api', 'CapacityProvider', 'Function', 'HttpApi', 'LayerVersion', 'MicrovmImage', 'NetworkConnector', 'SimpleTable', 'StateMachine', 'WebSocketApi']", + "message": "'invalid-second-branch' is not a valid IPv4 address for record type 'A'", "source": "CFN_LINT", - "propertyPath": "Globals", - "category": "Structure", - "startLine": 2, - "startColumn": 1, - "endLine": 2, - "endColumn": 8, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "entity": { + "logicalId": "WholePropertiesRecordsInvalidSecond", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "propertyPath": "Properties.RecordSets.0.ResourceRecords.0", + "category": "Resource", + "startLine": 110, + "startColumn": 31, + "endLine": 110, + "endColumn": 32, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/graphqlapi_missing_auth.yaml": { - "filePath": "bad/sam/graphqlapi_missing_auth.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3029", "severity": "ERROR", - "message": "Error transforming template: Resource with id [MyApi] is invalid. Missing required property 'Auth'.", + "message": "TTL must not be set when AliasTarget is specified", "source": "CFN_LINT", "entity": { - "logicalId": "MyApi", + "logicalId": "AliasConflictFirst", "entityType": "Resource", - "resourceType": "AWS::Serverless::GraphQLApi" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties/Auth", - "category": "Structure", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 8, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.TTL", + "category": "Resource", + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Validate Route53 record set aliases", "phase": "LINT" - } - ] - }, - "bad/sam/layerversion_invalid_compatible_architectures.yaml": { - "filePath": "bad/sam/layerversion_invalid_compatible_architectures.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3029", "severity": "ERROR", - "message": "Error transforming template: Resource with id [Layer] is invalid. CompatibleArchitectures needs to be a list of 'x86_64' or 'arm64'", + "message": "TTL must not be set when AliasTarget is specified", "source": "CFN_LINT", "entity": { - "logicalId": "Layer", + "logicalId": "AliasConflictSecond", "entityType": "Resource", - "resourceType": "AWS::Serverless::LayerVersion" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, + "propertyPath": "Properties.TTL", + "category": "Resource", + "startLine": 28, "startColumn": 5, - "endLine": 5, + "endLine": 28, "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "ruleDescription": "Validate Route53 record set aliases", "phase": "LINT" - } - ] - }, - "bad/sam/layerversion_invalid_retention_policy.yaml": { - "filePath": "bad/sam/layerversion_invalid_retention_policy.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3029", "severity": "ERROR", - "message": "Error transforming template: Resource with id [Layer] is invalid. 'RetentionPolicy' must be one of the following options: ['Retain', 'Delete'].", + "message": "AliasTarget cannot be used with record type 'NS'", "source": "CFN_LINT", "entity": { - "logicalId": "Layer", + "logicalId": "ConditionalInvalidAliasTypes", "entityType": "Resource", - "resourceType": "AWS::Serverless::LayerVersion" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.AliasTarget", + "category": "Resource", + "startLine": 48, + "startColumn": 7, + "endLine": 48, + "endColumn": 18, + "ruleDescription": "Validate Route53 record set aliases", "phase": "LINT" - } - ] - }, - "bad/sam/simpletable_primarykey_invalid_type.yaml": { - "filePath": "bad/sam/simpletable_primarykey_invalid_type.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3029", "severity": "ERROR", - "message": "Error transforming template: Resource with id [MyTable] is invalid. Invalid 'Type' \"Banana\".", + "message": "AliasTarget cannot be used with record type 'SOA'", "source": "CFN_LINT", "entity": { - "logicalId": "MyTable", + "logicalId": "ConditionalInvalidAliasTypes", "entityType": "Resource", - "resourceType": "AWS::Serverless::SimpleTable" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties/PrimaryKey", - "category": "Structure", - "startLine": 6, + "propertyPath": "Properties.AliasTarget", + "category": "Resource", + "startLine": 48, "startColumn": 7, - "endLine": 6, - "endColumn": 17, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "endLine": 48, + "endColumn": 18, + "ruleDescription": "Validate Route53 record set aliases", "phase": "LINT" - } - ] - }, - "bad/sam/simpletable_primarykey_missing_type.yaml": { - "filePath": "bad/sam/simpletable_primarykey_missing_type.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", - "severity": "ERROR", - "message": "Error transforming template: Resource with id [MyTable] is invalid. Property 'PrimaryKey.Type' is required.", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyTable", + "logicalId": "ConditionalInvalidAliasTypes", "entityType": "Resource", - "resourceType": "AWS::Serverless::SimpleTable" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties/PrimaryKey", - "category": "Structure", - "startLine": 6, + "propertyPath": "Properties.HostedZoneName", + "category": "Best Practice", + "startLine": 45, "startColumn": 7, - "endLine": 6, - "endColumn": 17, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", - "phase": "LINT" + "endLine": 45, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalRecordSetsInvalidFirst", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "propertyPath": "Properties.HostedZoneName", + "category": "Best Practice", + "startLine": 54, + "startColumn": 7, + "endLine": 54, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalRecordSetsInvalidSecond", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "propertyPath": "Properties.HostedZoneName", + "category": "Best Practice", + "startLine": 68, + "startColumn": 7, + "endLine": 68, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } } ] }, - "bad/sam/statemachine_both_definitions.yaml": { - "filePath": "bad/sam/statemachine_both_definitions.yaml", + "bad/s3_tiering_bad_days.yaml": { + "filePath": "bad/s3_tiering_bad_days.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 1, + "errors": 4, "warnings": 0, - "informational": 0, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -9126,108 +8729,94 @@ }, "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3061", "severity": "ERROR", - "message": "Error transforming template: Resource with id [MySM] is invalid. Specify either 'Definition' or 'DefinitionUri' property and not both.", + "message": "Days 30 for ARCHIVE_ACCESS must be between 90 and 730", "source": "CFN_LINT", "entity": { - "logicalId": "MySM", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Serverless::StateMachine" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties", - "category": "Structure", + "propertyPath": "Properties.IntelligentTieringConfigurations[0].Tierings[0].Days", + "suggestedFix": "Set Days between 90 and 730", + "category": "Resource", "startLine": 5, "startColumn": 5, "endLine": 5, "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "ruleDescription": "Validate the days for tierings in IntelligentTieringConfigurations", "phase": "LINT" - } - ] - }, - "bad/sam/statemachine_no_definition.yaml": { - "filePath": "bad/sam/statemachine_no_definition.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3061", "severity": "ERROR", - "message": "Error transforming template: Resource with id [MySM] is invalid. Either 'Definition' or 'DefinitionUri' property must be specified.", + "message": "Days 800 for ARCHIVE_ACCESS must be between 90 and 730", "source": "CFN_LINT", "entity": { - "logicalId": "MySM", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Serverless::StateMachine" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties", - "category": "Structure", + "propertyPath": "Properties.IntelligentTieringConfigurations[1].Tierings[0].Days", + "suggestedFix": "Set Days between 90 and 730", + "category": "Resource", "startLine": 5, "startColumn": 5, "endLine": 5, "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "ruleDescription": "Validate the days for tierings in IntelligentTieringConfigurations", "phase": "LINT" - } - ] - }, - "bad/sam/transform_bogus_name.yaml": { - "filePath": "bad/sam/transform_bogus_name.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3038", + "ruleId": "E3061", "severity": "ERROR", - "message": "Resource type 'AWS::Serverless::Function' requires the AWS::Serverless-2016-10-31 transform", + "message": "Days 100 for DEEP_ARCHIVE_ACCESS must be between 180 and 730", "source": "CFN_LINT", "entity": { - "logicalId": "MyFn", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::S3::Bucket" }, - "category": "Structure", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 7, - "ruleDescription": "Check if Serverless Resources have Serverless Transform", + "propertyPath": "Properties.IntelligentTieringConfigurations[1].Tierings[1].Days", + "suggestedFix": "Set Days between 180 and 730", + "category": "Resource", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Validate the days for tierings in IntelligentTieringConfigurations", + "phase": "LINT" + }, + { + "ruleId": "E3061", + "severity": "ERROR", + "message": "Days 900 for DEEP_ARCHIVE_ACCESS must be between 180 and 730", + "source": "CFN_LINT", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.IntelligentTieringConfigurations[1].Tierings[2].Days", + "suggestedFix": "Set Days between 180 and 730", + "category": "Resource", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Validate the days for tierings in IntelligentTieringConfigurations", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyFn", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -9241,16 +8830,16 @@ } ] }, - "bad/sam/transform_wrong_date.yaml": { - "filePath": "bad/sam/transform_wrong_date.yaml", + "bad/sagemaker_instance_types.yaml": { + "filePath": "bad/sagemaker_instance_types.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 5, "counts": { - "fatal": 0, - "errors": 1, + "fatal": 36, + "errors": 5, "warnings": 0, - "informational": 1, + "informational": 8, "debug": 0 }, "suppressed": 0, @@ -9259,1133 +8848,841 @@ }, "diagnostics": [ { - "ruleId": "E3038", - "severity": "ERROR", - "message": "Resource type 'AWS::Serverless::Function' requires the AWS::Serverless-2016-10-31 transform", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'MonitoringScheduleName' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "MyFn", + "logicalId": "MonitoringSchedule", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::SageMaker::MonitoringSchedule" }, - "category": "Structure", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 7, - "ruleDescription": "Check if Serverless Resources have Serverless Transform", - "phase": "LINT" + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'MonitoringScheduleName'", + "category": "Schema", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'MonitoringAppSpecification' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "MyFn", + "logicalId": "MonitoringSchedule", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::SageMaker::MonitoringSchedule" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/schema_additional_props.yaml": { - "filePath": "bad/schema_additional_props.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 2, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 + "propertyPath": "Properties.MonitoringScheduleConfig.MonitoringJobDefinition", + "suggestedFix": "Add the required property 'MonitoringAppSpecification'", + "category": "Schema", + "startLine": 8, + "startColumn": 9, + "endLine": 8, + "endColumn": 32, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3002", + "ruleId": "F3003", "severity": "FATAL", - "message": "Additional properties are not allowed ('NotARealProperty' was unexpected)", + "message": "'MonitoringInputs' is a required property", "source": "SCHEMA", "entity": { - "logicalId": "Bucket", + "logicalId": "MonitoringSchedule", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SageMaker::MonitoringSchedule" }, - "propertyPath": "Properties.NotARealProperty", + "propertyPath": "Properties.MonitoringScheduleConfig.MonitoringJobDefinition", + "suggestedFix": "Add the required property 'MonitoringInputs'", "category": "Schema", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 23, - "ruleDescription": "Additional properties are not allowed", - "phase": "SCHEMA", - "context": { - "property": "NotARealProperty", - "extra": { - "allowed_properties": [ - "AbacStatus", - "AccelerateConfiguration", - "AccessControl", - "AnalyticsConfigurations", - "Arn", - "BucketEncryption", - "BucketName", - "BucketNamePrefix", - "BucketNamespace", - "CorsConfiguration", - "DomainName", - "DualStackDomainName", - "IntelligentTieringConfigurations", - "InventoryConfigurations", - "LifecycleConfiguration", - "LoggingConfiguration", - "MetadataConfiguration", - "MetadataTableConfiguration", - "MetricsConfigurations", - "NotificationConfiguration", - "ObjectLockConfiguration", - "ObjectLockEnabled", - "OwnershipControls", - "PublicAccessBlockConfiguration", - "RegionalDomainName", - "ReplicationConfiguration", - "Tags", - "VersioningConfiguration", - "WebsiteConfiguration", - "WebsiteURL" - ] - } - } + "startLine": 8, + "startColumn": 9, + "endLine": 8, + "endColumn": 32, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "F3002", + "ruleId": "F3003", "severity": "FATAL", - "message": "Additional properties are not allowed ('BukcetName' was unexpected)", + "message": "'MonitoringOutputConfig' is a required property", "source": "SCHEMA", "entity": { - "logicalId": "Bucket", + "logicalId": "MonitoringSchedule", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SageMaker::MonitoringSchedule" }, - "propertyPath": "Properties.BukcetName", + "propertyPath": "Properties.MonitoringScheduleConfig.MonitoringJobDefinition", + "suggestedFix": "Add the required property 'MonitoringOutputConfig'", "category": "Schema", "startLine": 8, - "startColumn": 7, + "startColumn": 9, "endLine": 8, - "endColumn": 17, - "ruleDescription": "Additional properties are not allowed", - "phase": "SCHEMA", - "context": { - "property": "BukcetName", - "extra": { - "allowed_properties": [ - "AbacStatus", - "AccelerateConfiguration", - "AccessControl", - "AnalyticsConfigurations", - "Arn", - "BucketEncryption", - "BucketName", - "BucketNamePrefix", - "BucketNamespace", - "CorsConfiguration", - "DomainName", - "DualStackDomainName", - "IntelligentTieringConfigurations", - "InventoryConfigurations", - "LifecycleConfiguration", - "LoggingConfiguration", - "MetadataConfiguration", - "MetadataTableConfiguration", - "MetricsConfigurations", - "NotificationConfiguration", - "ObjectLockConfiguration", - "ObjectLockEnabled", - "OwnershipControls", - "PublicAccessBlockConfiguration", - "RegionalDomainName", - "ReplicationConfiguration", - "Tags", - "VersioningConfiguration", - "WebsiteConfiguration", - "WebsiteURL" - ] - } - } + "endColumn": 32, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'RoleArn' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Bucket", + "logicalId": "MonitoringSchedule", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SageMaker::MonitoringSchedule" }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.MonitoringScheduleConfig.MonitoringJobDefinition", + "suggestedFix": "Add the required property 'RoleArn'", + "category": "Schema", + "startLine": 8, + "startColumn": 9, + "endLine": 8, + "endColumn": 32, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'InstanceCount' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Bucket", + "logicalId": "MonitoringSchedule", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SageMaker::MonitoringSchedule" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/schema_composition.yaml": { - "filePath": "bad/schema_composition.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 2, - "errors": 0, - "warnings": 0, - "informational": 5, - "debug": 0 + "propertyPath": "Properties.MonitoringScheduleConfig.MonitoringJobDefinition.MonitoringResources.ClusterConfig", + "suggestedFix": "Add the required property 'InstanceCount'", + "category": "Schema", + "startLine": 10, + "startColumn": 13, + "endLine": 10, + "endColumn": 26, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3017", + "ruleId": "F3003", "severity": "FATAL", - "message": "Value is not valid under any of the 5 anyOf schemas for AWS::EC2::Volume (0 branches matched; at least one is required). Required property combinations: ['AvailabilityZone', 'Size'] or ['AvailabilityZone', 'SnapshotId'] or ['AvailabilityZoneId', 'Size'] or ['AvailabilityZoneId', 'SnapshotId'] or ['SourceVolumeId']. Branch failures: branch 1: 'AvailabilityZone' is a required property, 'Size' is a required property; branch 2: 'AvailabilityZone' is a required property, 'SnapshotId' is a required property; branch 3: 'AvailabilityZoneId' is a required property, 'Size' is a required property; branch 4: 'AvailabilityZoneId' is a required property, 'SnapshotId' is a required property; branch 5: 'SourceVolumeId' is a required property.", + "message": "'VolumeSizeInGB' is a required property", "source": "SCHEMA", "entity": { - "logicalId": "NoAZ", + "logicalId": "MonitoringSchedule", "entityType": "Resource", - "resourceType": "AWS::EC2::Volume" + "resourceType": "AWS::SageMaker::MonitoringSchedule" }, - "propertyPath": "Properties", + "propertyPath": "Properties.MonitoringScheduleConfig.MonitoringJobDefinition.MonitoringResources.ClusterConfig", + "suggestedFix": "Add the required property 'VolumeSizeInGB'", "category": "Schema", - "startLine": 13, - "startColumn": 5, - "endLine": 13, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Value not valid under anyOf", - "phase": "SCHEMA", - "context": { - "expectedConstraint": "at least one anyOf branch", - "extra": { - "branchCount": 5, - "branchFailures": [ - { - "branch": 1, - "reasons": [ - { - "message": "'AvailabilityZone' is a required property", - "propertyPath": "Properties" - }, - { - "message": "'Size' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 2, - "reasons": [ - { - "message": "'AvailabilityZone' is a required property", - "propertyPath": "Properties" - }, - { - "message": "'SnapshotId' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 3, - "reasons": [ - { - "message": "'AvailabilityZoneId' is a required property", - "propertyPath": "Properties" - }, - { - "message": "'Size' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 4, - "reasons": [ - { - "message": "'AvailabilityZoneId' is a required property", - "propertyPath": "Properties" - }, - { - "message": "'SnapshotId' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 5, - "reasons": [ - { - "message": "'SourceVolumeId' is a required property", - "propertyPath": "Properties" - } - ] - } - ], - "compositionKind": "anyOf", - "matchCount": 0, - "matchOutcome": "zeroMatches", - "validPropertyCombinations": [ - [ - "AvailabilityZone", - "Size" - ], - [ - "AvailabilityZone", - "SnapshotId" - ], - [ - "AvailabilityZoneId", - "Size" - ], - [ - "AvailabilityZoneId", - "SnapshotId" - ], - [ - "SourceVolumeId" - ] - ] - } - } + "startLine": 10, + "startColumn": 13, + "endLine": 10, + "endColumn": 26, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "F3018", + "ruleId": "F3003", "severity": "FATAL", - "message": "Value is not valid under any of the 2 oneOf schemas for AWS::AppStream::ImageBuilder (0 branches matched; exactly one is required). Required property combinations: ['ImageArn'] or ['ImageName']. Branch failures: branch 1: 'ImageName' is a required property; branch 2: 'ImageArn' is a required property.", + "message": "'ModelQualityAppSpecification' is a required property", "source": "SCHEMA", "entity": { - "logicalId": "NoImage", + "logicalId": "ModelQualityJobDefinition", "entityType": "Resource", - "resourceType": "AWS::AppStream::ImageBuilder" + "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" }, "propertyPath": "Properties", + "suggestedFix": "Add the required property 'ModelQualityAppSpecification'", "category": "Schema", - "startLine": 6, + "startLine": 14, "startColumn": 5, - "endLine": 6, + "endLine": 14, "endColumn": 15, - "ruleDescription": "Value not valid under oneOf", - "phase": "SCHEMA", - "context": { - "expectedConstraint": "exactly one oneOf branch", - "extra": { - "branchCount": 2, - "branchFailures": [ - { - "branch": 1, - "reasons": [ - { - "message": "'ImageName' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 2, - "reasons": [ - { - "message": "'ImageArn' is a required property", - "propertyPath": "Properties" - } - ] - } - ], - "compositionKind": "oneOf", - "matchCount": 0, - "matchOutcome": "zeroMatches", - "validPropertyCombinations": [ - [ - "ImageArn" - ], - [ - "ImageName" - ] - ] - } - } + "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", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'ModelQualityJobInput' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "NoAZ", + "logicalId": "ModelQualityJobDefinition", "entityType": "Resource", - "resourceType": "AWS::EC2::Volume" + "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" }, - "category": "Best Practice", - "startLine": 11, - "startColumn": 3, - "endLine": 11, - "endColumn": 7, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'ModelQualityJobInput'", + "category": "Schema", + "startLine": 14, + "startColumn": 5, + "endLine": 14, + "endColumn": 15, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "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", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'ModelQualityJobOutputConfig' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "NoAZ", + "logicalId": "ModelQualityJobDefinition", "entityType": "Resource", - "resourceType": "AWS::EC2::Volume" + "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" }, - "category": "Best Practice", - "startLine": 11, - "startColumn": 3, - "endLine": 11, - "endColumn": 7, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'ModelQualityJobOutputConfig'", + "category": "Schema", + "startLine": 14, + "startColumn": 5, + "endLine": 14, + "endColumn": 15, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'RoleArn' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "NoImage", + "logicalId": "ModelQualityJobDefinition", "entityType": "Resource", - "resourceType": "AWS::AppStream::ImageBuilder" + "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'RoleArn'", + "category": "Schema", + "startLine": 14, + "startColumn": 5, + "endLine": 14, + "endColumn": 15, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'NoImage' of type 'AWS::AppStream::ImageBuilder' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'InstanceCount' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "NoImage", + "logicalId": "ModelQualityJobDefinition", "entityType": "Resource", - "resourceType": "AWS::AppStream::ImageBuilder" + "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.JobResources.ClusterConfig", + "suggestedFix": "Add the required property 'InstanceCount'", + "category": "Schema", + "startLine": 16, + "startColumn": 9, + "endLine": 16, + "endColumn": 22, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'NoAZ' of type 'AWS::EC2::Volume' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'VolumeSizeInGB' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "NoAZ", + "logicalId": "ModelQualityJobDefinition", "entityType": "Resource", - "resourceType": "AWS::EC2::Volume" + "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 13, - "startColumn": 5, - "endLine": 13, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/schema_conditional_type.yaml": { - "filePath": "bad/schema_conditional_type.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 2, - "debug": 0 + "propertyPath": "Properties.JobResources.ClusterConfig", + "suggestedFix": "Add the required property 'VolumeSizeInGB'", + "category": "Schema", + "startLine": 16, + "startColumn": 9, + "endLine": 16, + "endColumn": 22, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W9003", - "severity": "WARN", - "message": "12345 (from Fn::If on condition 'IsProd') is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'EndpointName' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Bucket", + "logicalId": "InferenceExperiment", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 17, - "conditionScenario": { - "IsProd": true + "resourceType": "AWS::SageMaker::InferenceExperiment" }, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA", - "context": { - "resolutionSource": "Fn::If on condition 'IsProd'" - } + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'EndpointName'", + "category": "Schema", + "startLine": 22, + "startColumn": 5, + "endLine": 22, + "endColumn": 15, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'Name' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Bucket", + "logicalId": "InferenceExperiment", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SageMaker::InferenceExperiment" }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" - } + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'Name'", + "category": "Schema", + "startLine": 22, + "startColumn": 5, + "endLine": 22, + "endColumn": 15, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'RoleArn' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Bucket", + "logicalId": "InferenceExperiment", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SageMaker::InferenceExperiment" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 11, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'RoleArn'", + "category": "Schema", + "startLine": 22, "startColumn": 5, - "endLine": 11, + "endLine": 22, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/schema_enum_violation.yaml": { - "filePath": "bad/schema_enum_violation.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 2, - "informational": 2, - "debug": 0 + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3045", - "severity": "ERROR", - "message": "A bucket with 'AccessControl' set should also have at least one 'OwnershipControl' configured", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'Type' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Bucket", + "logicalId": "InferenceExperiment", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SageMaker::InferenceExperiment" }, "propertyPath": "Properties", - "suggestedFix": "Add OwnershipControls to the bucket when using AccessControl", - "category": "Resource", - "startLine": 5, + "suggestedFix": "Add the required property 'Type'", + "category": "Schema", + "startLine": 22, "startColumn": 5, - "endLine": 5, + "endLine": 22, "endColumn": 15, - "ruleDescription": "Validate AccessControl are set with OwnershipControls", - "phase": "LINT" + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "W3030", - "severity": "WARN", - "message": "'InvalidAccessControl' is not one of ['AuthenticatedRead', 'AwsExecRead', 'BucketOwnerFullControl', 'BucketOwnerRead', 'LogDeliveryWrite', 'Private', 'PublicRead', 'PublicReadWrite']", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'InfrastructureType' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Bucket", + "logicalId": "InferenceExperiment", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SageMaker::InferenceExperiment" }, - "propertyPath": "Properties.AccessControl", + "propertyPath": "Properties.ModelVariants.0.InfrastructureConfig", + "suggestedFix": "Add the required property 'InfrastructureType'", "category": "Schema", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 20, - "ruleDescription": "Value not in allowed enum", - "phase": "SCHEMA", - "context": { - "actualValue": "InvalidAccessControl", - "extra": { - "allowed_values": [ - "AuthenticatedRead", - "AwsExecRead", - "BucketOwnerFullControl", - "BucketOwnerRead", - "LogDeliveryWrite", - "Private", - "PublicRead", - "PublicReadWrite" - ] - } - } + "startLine": 24, + "startColumn": 11, + "endLine": 24, + "endColumn": 31, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "W3045", - "severity": "WARN", - "message": "AccessControl property is deprecated. Use bucket policies instead", - "source": "CFN_LINT", - "entity": { - "logicalId": "Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "ruleId": "F3003", + "severity": "FATAL", + "message": "'ModelName' is a required property", + "source": "SCHEMA", + "entity": { + "logicalId": "InferenceExperiment", + "entityType": "Resource", + "resourceType": "AWS::SageMaker::InferenceExperiment" }, - "propertyPath": "Properties.AccessControl", - "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", - "category": "Deprecation", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 20, - "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", - "phase": "LINT", - "context": { - "actualValue": "InvalidAccessControl" - } + "propertyPath": "Properties.ModelVariants.0", + "suggestedFix": "Add the required property 'ModelName'", + "category": "Schema", + "startLine": 24, + "startColumn": 31, + "endLine": 24, + "endColumn": 32, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'VariantName' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Bucket", + "logicalId": "InferenceExperiment", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SageMaker::InferenceExperiment" }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.ModelVariants.0", + "suggestedFix": "Add the required property 'VariantName'", + "category": "Schema", + "startLine": 24, + "startColumn": 31, + "endLine": 24, + "endColumn": 32, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'InstanceCount' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Bucket", + "logicalId": "InferenceExperiment", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SageMaker::InferenceExperiment" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/schema_format_violation.yaml": { - "filePath": "bad/schema_format_violation.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 1, - "informational": 4, - "debug": 0 + "propertyPath": "Properties.ModelVariants.0.InfrastructureConfig.RealTimeInferenceConfig", + "suggestedFix": "Add the required property 'InstanceCount'", + "category": "Schema", + "startLine": 25, + "startColumn": 13, + "endLine": 25, + "endColumn": 36, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E1154", - "severity": "ERROR", - "message": "'subnet-bad' does not match format 'AWS::EC2::Subnet.Id'", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'InfrastructureType' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Instance", + "logicalId": "InferenceExperiment", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SageMaker::InferenceExperiment" }, - "propertyPath": "Properties.SubnetId", - "category": "Intrinsic Function", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate VPC subnet id format", - "phase": "SCHEMA", - "context": { - "actualValue": "subnet-bad" - } + "propertyPath": "Properties.ModelVariants.1.InfrastructureConfig", + "suggestedFix": "Add the required property 'InfrastructureType'", + "category": "Schema", + "startLine": 27, + "startColumn": 11, + "endLine": 27, + "endColumn": 31, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'ModelName' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Instance", + "logicalId": "InferenceExperiment", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SageMaker::InferenceExperiment" }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", - "phase": "LINT" + "propertyPath": "Properties.ModelVariants.1", + "suggestedFix": "Add the required property 'ModelName'", + "category": "Schema", + "startLine": 27, + "startColumn": 31, + "endLine": 27, + "endColumn": 32, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'VariantName' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Instance", + "logicalId": "InferenceExperiment", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SageMaker::InferenceExperiment" }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.ModelVariants.1", + "suggestedFix": "Add the required property 'VariantName'", + "category": "Schema", + "startLine": 27, + "startColumn": 31, + "endLine": 27, + "endColumn": 32, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'InstanceCount' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Instance", + "logicalId": "InferenceExperiment", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SageMaker::InferenceExperiment" }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.ModelVariants.1.InfrastructureConfig.RealTimeInferenceConfig", + "suggestedFix": "Add the required property 'InstanceCount'", + "category": "Schema", + "startLine": 28, + "startColumn": 13, + "endLine": 28, + "endColumn": 36, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'ValidationRole' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Instance", + "logicalId": "ModelPackage", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SageMaker::ModelPackage" }, - "propertyPath": "Properties.SecurityGroupIds", - "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "propertyPath": "Properties.ValidationSpecification", + "suggestedFix": "Add the required property 'ValidationRole'", + "category": "Schema", + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 30, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker", + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'TransformInput' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Instance", + "logicalId": "ModelPackage", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SageMaker::ModelPackage" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/schema_lifecycle.yaml": { - "filePath": "bad/schema_lifecycle.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 1, - "errors": 3, - "warnings": 5, - "informational": 8, - "debug": 0 + "propertyPath": "Properties.ValidationSpecification.ValidationProfiles.0.TransformJobDefinition", + "suggestedFix": "Add the required property 'TransformInput'", + "category": "Schema", + "startLine": 37, + "startColumn": 13, + "endLine": 37, + "endColumn": 35, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker", + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "F3003", "severity": "FATAL", - "message": "'RepositoryOwner' is a required property", + "message": "'TransformOutput' is a required property", "source": "SCHEMA", "entity": { - "logicalId": "ShutdownResource", + "logicalId": "ModelPackage", "entityType": "Resource", - "resourceType": "AWS::CodeStar::GitHubRepository" + "resourceType": "AWS::SageMaker::ModelPackage" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'RepositoryOwner'", + "propertyPath": "Properties.ValidationSpecification.ValidationProfiles.0.TransformJobDefinition", + "suggestedFix": "Add the required property 'TransformOutput'", "category": "Schema", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, + "startLine": 37, + "startColumn": 13, + "endLine": 37, + "endColumn": 35, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker", "ruleDescription": "Required property missing", "phase": "SCHEMA" }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'dotnetcore2.1' was deprecated on '2022-01-05'. Creation was disabled on '2022-01-05', and updates were disabled on '2022-04-13'. Please consider updating to 'dotnet10'", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'ProfileName' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "EolLambda", + "logicalId": "ModelPackage", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SageMaker::ModelPackage" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 27, - "startColumn": 7, - "endLine": 27, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "dotnetcore2.1", - "lifecycle": "end-of-life" - } + "propertyPath": "Properties.ValidationSpecification.ValidationProfiles.0", + "suggestedFix": "Add the required property 'ProfileName'", + "category": "Schema", + "startLine": 37, + "startColumn": 35, + "endLine": 37, + "endColumn": 36, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker", + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "E3677", - "severity": "ERROR", - "message": "Runtime 'dotnetcore2.1' is not supported with Code.ZipFile - use nodejs or python", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'InstanceCount' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "EolLambda", + "logicalId": "ModelPackage", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SageMaker::ModelPackage" }, - "category": "Resource", - "startLine": 23, - "startColumn": 3, - "endLine": 23, - "endColumn": 12, - "ruleDescription": "Lambda ZipFile requires nodejs or python runtime", - "phase": "LINT" + "propertyPath": "Properties.ValidationSpecification.ValidationProfiles.0.TransformJobDefinition.TransformResources", + "suggestedFix": "Add the required property 'InstanceCount'", + "category": "Schema", + "startLine": 38, + "startColumn": 15, + "endLine": 38, + "endColumn": 33, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker", + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "E3710", - "severity": "ERROR", - "message": "Resource type 'AWS::CodeStar::GitHubRepository' is from a service that was shut down on 2024-07-25", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'ExecutionRole' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "ShutdownResource", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::CodeStar::GitHubRepository" + "resourceType": "AWS::SageMaker::Cluster" }, - "category": "Deprecation", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 19, - "ruleDescription": "Resource type is from a service that has been shut down", + "propertyPath": "Properties.InstanceGroups.0", + "suggestedFix": "Add the required property 'ExecutionRole'", + "category": "Schema", + "startLine": 46, + "startColumn": 23, + "endLine": 46, + "endColumn": 24, + "ruleDescription": "Required property missing", "phase": "SCHEMA" }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs16.x' was deprecated on '2024-06-12'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'InstanceCount' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "DeprecatedLambda", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SageMaker::Cluster" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 38, - "startColumn": 7, - "endLine": 38, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs16.x", - "lifecycle": "deprecated" - } + "propertyPath": "Properties.InstanceGroups.0", + "suggestedFix": "Add the required property 'InstanceCount'", + "category": "Schema", + "startLine": 46, + "startColumn": 23, + "endLine": 46, + "endColumn": 24, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "W3696", - "severity": "WARN", - "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'InstanceGroupName' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "SunsetResource", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::SageMaker::Cluster" }, - "category": "Deprecation", - "startLine": 10, - "startColumn": 3, - "endLine": 10, - "endColumn": 17, - "ruleDescription": "Resource type is from a service that is sunsetting", + "propertyPath": "Properties.InstanceGroups.0", + "suggestedFix": "Add the required property 'InstanceGroupName'", + "category": "Schema", + "startLine": 46, + "startColumn": 23, + "endLine": 46, + "endColumn": 24, + "ruleDescription": "Required property missing", "phase": "SCHEMA" }, { - "ruleId": "W3697", - "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'ExecutionRole' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "MaintenanceResource", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::SageMaker::Cluster" }, - "category": "Deprecation", - "startLine": 16, - "startColumn": 3, - "endLine": 16, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" - }, - { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", + "propertyPath": "Properties.RestrictedInstanceGroups.0", + "suggestedFix": "Add the required property 'ExecutionRole'", + "category": "Schema", + "startLine": 48, + "startColumn": 23, + "endLine": 48, + "endColumn": 24, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "F3003", + "severity": "FATAL", + "message": "'InstanceCount' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "EolLambda", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SageMaker::Cluster" }, - "category": "Security", + "propertyPath": "Properties.RestrictedInstanceGroups.0", + "suggestedFix": "Add the required property 'InstanceCount'", + "category": "Schema", + "startLine": 48, + "startColumn": 23, + "endLine": 48, + "endColumn": 24, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "F3003", + "severity": "FATAL", + "message": "'InstanceGroupName' is a required property", + "source": "SCHEMA", + "entity": { + "logicalId": "Cluster", + "entityType": "Resource", + "resourceType": "AWS::SageMaker::Cluster" + }, + "propertyPath": "Properties.RestrictedInstanceGroups.0", + "suggestedFix": "Add the required property 'InstanceGroupName'", + "category": "Schema", + "startLine": 48, + "startColumn": 23, + "endLine": 48, + "endColumn": 24, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "E3640", + "severity": "ERROR", + "message": "'ml.fake.xlarge' is not valid in any region", + "source": "CFN_LINT", + "entity": { + "logicalId": "MonitoringSchedule", + "entityType": "Resource", + "resourceType": "AWS::SageMaker::MonitoringSchedule" + }, + "propertyPath": "Properties.MonitoringScheduleConfig.MonitoringJobDefinition.MonitoringResources.ClusterConfig.InstanceType", + "category": "Resource", + "startLine": 11, + "startColumn": 15, + "endLine": 11, + "endColumn": 27, + "ruleDescription": "Validate SageMaker processing instance types based on region", + "phase": "LINT" + }, + { + "ruleId": "E3642", + "severity": "ERROR", + "message": "'ml.fake.xlarge' is not valid in any region", + "source": "CFN_LINT", + "entity": { + "logicalId": "InferenceExperiment", + "entityType": "Resource", + "resourceType": "AWS::SageMaker::InferenceExperiment" + }, + "propertyPath": "Properties.ModelVariants.InfrastructureConfig.RealTimeInferenceConfig.InstanceType", + "category": "Resource", "startLine": 23, - "startColumn": 3, + "startColumn": 7, "endLine": 23, - "endColumn": 12, - "ruleDescription": "Hardcoded account ID in ARN", + "endColumn": 20, + "ruleDescription": "Validate SageMaker hosting instance types based on region", "phase": "LINT" }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", + "ruleId": "E3643", + "severity": "ERROR", + "message": "'ml.bogus.large' is not valid in any region", + "source": "CFN_LINT", "entity": { - "logicalId": "DeprecatedLambda", + "logicalId": "ModelPackage", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SageMaker::ModelPackage" }, - "category": "Security", - "startLine": 34, - "startColumn": 3, - "endLine": 34, - "endColumn": 19, - "ruleDescription": "Hardcoded account ID in ARN", + "propertyPath": "Properties.ValidationSpecification.ValidationProfiles.TransformJobDefinition.TransformResources.InstanceType", + "category": "Resource", + "startLine": 36, + "startColumn": 9, + "endLine": 36, + "endColumn": 27, + "ruleDescription": "Validate SageMaker transform instance types based on region", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3644", + "severity": "ERROR", + "message": "'ml.fake.xlarge' is not valid in any region", + "source": "CFN_LINT", "entity": { - "logicalId": "SunsetResource", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::SageMaker::Cluster" }, - "propertyPath": "Properties.MeshName", - "category": "Best Practice", - "startLine": 13, + "propertyPath": "Properties.InstanceGroups.InstanceType", + "category": "Resource", + "startLine": 45, "startColumn": 7, - "endLine": 13, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 45, + "endColumn": 21, + "ruleDescription": "Validate SageMaker cluster instance types based on region", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3644", + "severity": "ERROR", + "message": "'ml.bogus.large' is not valid in any region", + "source": "CFN_LINT", "entity": { - "logicalId": "MaintenanceResource", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::SageMaker::Cluster" }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 19, + "propertyPath": "Properties.RestrictedInstanceGroups.InstanceType", + "category": "Resource", + "startLine": 47, "startColumn": 7, - "endLine": 19, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 47, + "endColumn": 31, + "ruleDescription": "Validate SageMaker cluster instance types based on region", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "message": "Property 'JobResources' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MaintenanceResource", + "logicalId": "ModelQualityJobDefinition", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.JobResources", "category": "Best Practice", - "startLine": 20, + "startLine": 15, "startColumn": 7, - "endLine": 20, + "endLine": 15, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -10395,19 +9692,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'ValidationSpecification' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EolLambda", + "logicalId": "ModelPackage", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SageMaker::ModelPackage" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.ValidationSpecification", "category": "Best Practice", - "startLine": 26, + "startLine": 35, "startColumn": 7, - "endLine": 26, - "endColumn": 19, + "endLine": 35, + "endColumn": 30, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -10415,43 +9713,30 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9003", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", "source": "ENGINE", - "entity": { - "logicalId": "DeprecatedLambda", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 37, - "startColumn": 7, - "endLine": 37, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SunsetResource' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", + "message": "Resource 'MonitoringSchedule' of type 'AWS::SageMaker::MonitoringSchedule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SunsetResource", + "logicalId": "MonitoringSchedule", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::SageMaker::MonitoringSchedule" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, + "startLine": 6, "startColumn": 5, - "endLine": 12, + "endLine": 6, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -10459,19 +9744,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EolLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'ModelQualityJobDefinition' of type 'AWS::SageMaker::ModelQualityJobDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EolLambda", + "logicalId": "ModelQualityJobDefinition", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 25, + "startLine": 14, "startColumn": 5, - "endLine": 25, + "endLine": 14, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -10479,35 +9764,75 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DeprecatedLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'InferenceExperiment' of type 'AWS::SageMaker::InferenceExperiment' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DeprecatedLambda", + "logicalId": "InferenceExperiment", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SageMaker::InferenceExperiment" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 36, + "startLine": 22, "startColumn": 5, - "endLine": 36, + "endLine": 22, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ModelPackage' of type 'AWS::SageMaker::ModelPackage' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ModelPackage", + "entityType": "Resource", + "resourceType": "AWS::SageMaker::ModelPackage" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 34, + "startColumn": 5, + "endLine": 34, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Cluster' of type 'AWS::SageMaker::Cluster' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster", + "entityType": "Resource", + "resourceType": "AWS::SageMaker::Cluster" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 44, + "startColumn": 5, + "endLine": 44, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] }, - "bad/schema_numeric_bounds.yaml": { - "filePath": "bad/schema_numeric_bounds.yaml", + "bad/sam/api_missing_stagename.yaml": { + "filePath": "bad/sam/api_missing_stagename.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 1, - "errors": 0, + "fatal": 0, + "errors": 1, "warnings": 0, - "informational": 5, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -10516,142 +9841,150 @@ }, "diagnostics": [ { - "ruleId": "F3034", - "severity": "FATAL", - "message": "-1 is less than the minimum of 0", - "source": "SCHEMA", - "entity": { - "logicalId": "Queue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.VisibilityTimeout", - "category": "Schema", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Numeric value out of bounds", - "phase": "SCHEMA", - "context": { - "actualValue": -1, - "extra": { - "maximum": 43200.0, - "minimum": 0.0 - } - } - }, - { - "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)", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [MyApi] is invalid. Missing required property 'StageName'.", "source": "CFN_LINT", "entity": { - "logicalId": "Queue", + "logicalId": "MyApi", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::Serverless::Api" }, - "category": "Best Practice", + "propertyPath": "Properties/StageName", + "category": "Structure", "startLine": 3, "startColumn": 3, "endLine": 3, "endColumn": 8, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", "phase": "LINT" + } + ] + }, + "bad/sam/connector_missing_destination.yaml": { + "filePath": "bad/sam/connector_missing_destination.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "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)", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [MyConn] is invalid. Missing required property 'Destination'.", "source": "CFN_LINT", "entity": { - "logicalId": "Queue", + "logicalId": "MyConn", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::Serverless::Connector" }, - "category": "Best Practice", + "propertyPath": "Properties/Destination", + "category": "Structure", "startLine": 3, "startColumn": 3, "endLine": 3, - "endColumn": 8, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endColumn": 9, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", "phase": "LINT" + } + ] + }, + "bad/sam/connector_missing_source.yaml": { + "filePath": "bad/sam/connector_missing_source.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "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)", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [MyConn] is invalid. Missing required property 'Source'.", "source": "CFN_LINT", "entity": { - "logicalId": "Queue", + "logicalId": "MyConn", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::Serverless::Connector" }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "propertyPath": "Properties/Source", + "category": "Structure", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", "phase": "LINT" + } + ] + }, + "bad/sam/function_autopublishalias_invalid_name.yaml": { + "filePath": "bad/sam/function_autopublishalias_invalid_name.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Queue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.QueueName", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Queue' of type 'AWS::SQS::Queue' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Fn] is invalid. AutoPublishAlias name ('123') must contain only alphanumeric characters, hyphens, or underscores matching (?!^[0-9]+$)([a-zA-Z0-9-_]+) pattern.", + "source": "CFN_LINT", "entity": { - "logicalId": "Queue", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", + "propertyPath": "Properties", + "category": "Structure", "startLine": 5, "startColumn": 5, "endLine": 5, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", "phase": "LINT" } ] }, - "bad/schema_property_constraints.yaml": { - "filePath": "bad/schema_property_constraints.yaml", + "bad/sam/function_capacityprovider_with_vpcconfig.yaml": { + "filePath": "bad/sam/function_capacityprovider_with_vpcconfig.yaml", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 1, "counts": { - "fatal": 1, - "errors": 0, - "warnings": 3, - "informational": 8, + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -10660,277 +9993,378 @@ }, "diagnostics": [ { - "ruleId": "F3031", - "severity": "FATAL", - "message": "'INVALID_UPPERCASE_BUCKET' does not match pattern '^([a-z0-9][a-z0-9.-]*[a-z0-9])?$'", - "source": "SCHEMA", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Fn] is invalid. Cannot specify 'CapacityProviderConfig' and 'VpcConfig' together.", + "source": "CFN_LINT", "entity": { - "logicalId": "PatternBucket", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.BucketName", - "category": "Schema", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 17, - "ruleDescription": "Value does not match pattern", - "phase": "SCHEMA", - "context": { - "actualValue": "INVALID_UPPERCASE_BUCKET", - "expectedConstraint": "^([a-z0-9][a-z0-9.-]*[a-z0-9])?$" - } + "propertyPath": "Properties", + "category": "Structure", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/sam/function_deploymentpreference_without_alias.yaml": { + "filePath": "bad/sam/function_deploymentpreference_without_alias.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'CertificateAuthorityArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Fn] is invalid. 'DeploymentPreference' requires AutoPublishAlias property to be specified.", + "source": "CFN_LINT", "entity": { - "logicalId": "ReadOnlyProp", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::ACMPCA::Certificate" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.CertificateAuthorityArn", - "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 30, - "ruleDescription": "Hardcoded ARN property", + "propertyPath": "Properties", + "category": "Structure", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", "phase": "LINT" + } + ] + }, + "bad/sam/function_dlq_invalid_type.yaml": { + "filePath": "bad/sam/function_dlq_invalid_type.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W9009", - "severity": "WARN", - "message": "Property 'WorkGroupConfigurationUpdates' is deprecated", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Fn] is invalid. 'DeadLetterQueue' requires Type of ['SQS', 'SNS']", + "source": "CFN_LINT", "entity": { - "logicalId": "DeprecatedProp", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::Athena::WorkGroup" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.WorkGroupConfigurationUpdates", - "category": "Deprecation", - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 36, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", - "ruleDescription": "Resource type sunset or shutdown", - "phase": "SCHEMA", - "context": { - "lifecycle": "deprecated" - } + "propertyPath": "Properties", + "category": "Structure", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/sam/function_dlq_missing_targetarn.yaml": { + "filePath": "bad/sam/function_dlq_missing_targetarn.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Fn] is invalid. 'DeadLetterQueue' requires Type and TargetArn properties to be specified.", + "source": "CFN_LINT", "entity": { - "logicalId": "ReadOnlyProp", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::ACMPCA::Certificate" + "resourceType": "AWS::Serverless::Function" }, - "category": "Security", - "startLine": 8, - "startColumn": 3, - "endLine": 8, + "propertyPath": "Properties", + "category": "Structure", + "startLine": 5, + "startColumn": 5, + "endLine": 5, "endColumn": 15, - "ruleDescription": "Hardcoded account ID in ARN", + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", "phase": "LINT" + } + ] + }, + "bad/sam/function_functionscaling_without_capacityprovider.yaml": { + "filePath": "bad/sam/function_functionscaling_without_capacityprovider.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Fn] is invalid. 'FunctionScalingConfig' requires 'CapacityProviderConfig'.", + "source": "CFN_LINT", "entity": { - "logicalId": "PatternBucket", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties", + "category": "Structure", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/sam/function_image_with_handler_runtime.yaml": { + "filePath": "bad/sam/function_image_with_handler_runtime.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CertificateAuthorityArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Fn] is invalid. Runtime, Handler, Layers cannot be present when PackageType is of type `Image`", + "source": "CFN_LINT", "entity": { - "logicalId": "ReadOnlyProp", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::ACMPCA::Certificate" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.CertificateAuthorityArn", - "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CertificateSigningRequest' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ReadOnlyProp", - "entityType": "Resource", - "resourceType": "AWS::ACMPCA::Certificate" - }, - "propertyPath": "Properties.CertificateSigningRequest", - "category": "Best Practice", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 32, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SigningAlgorithm' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ReadOnlyProp", - "entityType": "Resource", - "resourceType": "AWS::ACMPCA::Certificate" - }, - "propertyPath": "Properties.SigningAlgorithm", - "category": "Best Practice", - "startLine": 13, - "startColumn": 7, - "endLine": 13, - "endColumn": 23, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties", + "category": "Structure", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/sam/function_packagetype_invalid.yaml": { + "filePath": "bad/sam/function_packagetype_invalid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Validity' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Fn] is invalid. invalid 'PackageType' : Banana", + "source": "CFN_LINT", "entity": { - "logicalId": "ReadOnlyProp", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::ACMPCA::Certificate" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.Validity", - "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, + "propertyPath": "Properties", + "category": "Structure", + "startLine": 5, + "startColumn": 5, + "endLine": 5, "endColumn": 15, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/sam/function_provisioned_concurrency_without_alias.yaml": { + "filePath": "bad/sam/function_provisioned_concurrency_without_alias.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Fn] is invalid. To set ProvisionedConcurrencyConfig AutoPublishALias must be defined on the function", + "source": "CFN_LINT", "entity": { - "logicalId": "DeprecatedProp", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::Athena::WorkGroup" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 22, - "startColumn": 7, - "endLine": 22, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties", + "category": "Structure", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/sam/function_url_config_missing_authtype.yaml": { + "filePath": "bad/sam/function_url_config_missing_authtype.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'PatternBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Fn] is invalid. AuthType is required to configure function property `FunctionUrlConfig`. Please provide either AWS_IAM or NONE.", + "source": "CFN_LINT", "entity": { - "logicalId": "PatternBucket", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", + "propertyPath": "Properties", + "category": "Structure", "startLine": 5, "startColumn": 5, "endLine": 5, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", "phase": "LINT" + } + ] + }, + "bad/sam/function_versiondeletionpolicy_without_alias.yaml": { + "filePath": "bad/sam/function_versiondeletionpolicy_without_alias.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DeprecatedProp' of type 'AWS::Athena::WorkGroup' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Fn] is invalid. 'VersionDeletionPolicy' requires 'AutoPublishAlias'.", + "source": "CFN_LINT", "entity": { - "logicalId": "DeprecatedProp", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::Athena::WorkGroup" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 21, + "propertyPath": "Properties", + "category": "Structure", + "startLine": 5, "startColumn": 5, - "endLine": 21, + "endLine": 5, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", "phase": "LINT" } ] }, - "bad/schema_required_xor_conditional.yaml": { - "filePath": "bad/schema_required_xor_conditional.yaml", + "bad/sam/function_zip_missing_runtime_handler.yaml": { + "filePath": "bad/sam/function_zip_missing_runtime_handler.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 1, - "errors": 0, + "fatal": 0, + "errors": 1, "warnings": 0, - "informational": 5, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -10939,157 +10373,36 @@ }, "diagnostics": [ { - "ruleId": "F3014", - "severity": "FATAL", - "message": "Exactly one of ['ScalingTargetId', 'ResourceId'] must be specified", - "source": "SCHEMA", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Fn] is invalid. Runtime and Handler needs to be present when PackageType is of type `Zip`", + "source": "CFN_LINT", "entity": { - "logicalId": "Policy", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties", - "category": "Schema", - "startLine": 13, + "category": "Structure", + "startLine": 5, "startColumn": 5, - "endLine": 13, + "endLine": 5, "endColumn": 15, - "conditionScenario": { - "DuplicateTarget": true - }, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Exactly one of properties required (requiredXor)", - "phase": "SCHEMA" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Policy", - "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" - }, - "propertyPath": "Properties.PolicyName", - "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ScalingTargetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Policy", - "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" - }, - "propertyPath": "Properties.ScalingTargetId", - "category": "Best Practice", - "startLine": 16, - "startColumn": 7, - "endLine": 16, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'TargetId' (type String)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Policy", - "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" - }, - "propertyPath": "Properties.ResourceId", - "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'DuplicateTarget'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ScalableDimension' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Policy", - "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" - }, - "propertyPath": "Properties.ScalableDimension", - "category": "Best Practice", - "startLine": 18, - "startColumn": 7, - "endLine": 18, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ServiceNamespace' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Policy", - "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" - }, - "propertyPath": "Properties.ServiceNamespace", - "category": "Best Practice", - "startLine": 19, - "startColumn": 7, - "endLine": 19, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" } ] }, - "bad/schema_string_length.yaml": { - "filePath": "bad/schema_string_length.yaml", + "bad/sam/function_zip_with_imageuri.yaml": { + "filePath": "bad/sam/function_zip_with_imageuri.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 2, + "errors": 1, + "warnings": 0, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -11098,77 +10411,36 @@ }, "diagnostics": [ { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", - "entity": { - "logicalId": "Lambda", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "category": "Security", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 9, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Lambda", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Lambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Fn] is invalid. ImageUri or ImageConfig cannot be present when PackageType is of type `Zip`", + "source": "CFN_LINT", "entity": { - "logicalId": "Lambda", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", + "propertyPath": "Properties", + "category": "Structure", "startLine": 5, "startColumn": 5, "endLine": 5, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", "phase": "LINT" } ] }, - "bad/schema_structural.yaml": { - "filePath": "bad/schema_structural.yaml", + "bad/sam/globals_not_dict.yaml": { + "filePath": "bad/sam/globals_not_dict.yaml", "status": "OK", "metadata": { - "resourcesScanned": 4, + "resourcesScanned": 1, "counts": { - "fatal": 6, - "errors": 0, + "fatal": 0, + "errors": 1, "warnings": 0, - "informational": 10, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -11177,367 +10449,453 @@ }, "diagnostics": [ { - "ruleId": "F3014", - "severity": "FATAL", - "message": "Exactly one of ['ScalingTargetId', 'ResourceId'] must be specified", - "source": "SCHEMA", - "entity": { - "logicalId": "ScalingPolicyBothIds", - "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" - }, - "propertyPath": "Properties", - "category": "Schema", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Exactly one of properties required (requiredXor)", - "phase": "SCHEMA" + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: 'Globals' section is invalid. It must be a non-empty dictionary", + "source": "CFN_LINT", + "propertyPath": "Globals", + "category": "Structure", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 8, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/sam/globals_section_not_dict.yaml": { + "filePath": "bad/sam/globals_section_not_dict.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, - { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'Statistic' should not be included with 'ExtendedStatistic'", - "source": "SCHEMA", - "entity": { - "logicalId": "AlarmBothStats", - "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" - }, - "propertyPath": "Properties.Statistic", - "category": "Schema", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Mutually exclusive properties", - "phase": "SCHEMA", - "context": { - "property": "Statistic" - } + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: 'Globals' section is invalid. Value of ${section} must be a dictionary", + "source": "CFN_LINT", + "propertyPath": "Globals", + "category": "Structure", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 8, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/sam/globals_unknown_property.yaml": { + "filePath": "bad/sam/globals_unknown_property.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'ExtendedStatistic' should not be included with 'Statistic'", - "source": "SCHEMA", - "entity": { - "logicalId": "AlarmBothStats", - "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" - }, - "propertyPath": "Properties.ExtendedStatistic", - "category": "Schema", - "startLine": 13, - "startColumn": 7, - "endLine": 13, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Mutually exclusive properties", - "phase": "SCHEMA", - "context": { - "property": "ExtendedStatistic" - } + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: 'Globals' section is invalid. 'NotARealProperty' is not a supported property of 'Function'. Must be one of the following values - ['Handler', 'Runtime', 'CodeUri', 'DeadLetterQueue', 'Description', 'MemorySize', 'Timeout', 'VpcConfig', 'Environment', 'Tags', 'PropagateTags', 'Tracing', 'KmsKeyArn', 'AutoPublishAlias', 'AutoPublishAliasAllProperties', 'Layers', 'DeploymentPreference', 'RolePath', 'PermissionsBoundary', 'ReservedConcurrentExecutions', 'ProvisionedConcurrencyConfig', 'AssumeRolePolicyDocument', 'EventInvokeConfig', 'FileSystemConfigs', 'CodeSigningConfigArn', 'Architectures', 'SnapStart', 'EphemeralStorage', 'FunctionUrlConfig', 'RuntimeManagementConfig', 'LoggingConfig', 'RecursiveLoop', 'SourceKMSKeyArn', 'TenancyConfig', 'DurableConfig', 'CapacityProviderConfig', 'FunctionScalingConfig', 'PublishToLatestPublished', 'VersionDeletionPolicy']", + "source": "CFN_LINT", + "propertyPath": "Globals", + "category": "Structure", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 8, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/sam/globals_unknown_section.yaml": { + "filePath": "bad/sam/globals_unknown_section.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "F3021", - "severity": "FATAL", - "message": "'ScalableDimension' is a dependency of 'ResourceId'", - "source": "SCHEMA", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: 'Globals' section is invalid. 'Foo' is not supported. Must be one of the following values - ['Api', 'CapacityProvider', 'Function', 'HttpApi', 'LayerVersion', 'MicrovmImage', 'NetworkConnector', 'SimpleTable', 'StateMachine', 'WebSocketApi']", + "source": "CFN_LINT", + "propertyPath": "Globals", + "category": "Structure", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 8, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/sam/graphqlapi_missing_auth.yaml": { + "filePath": "bad/sam/graphqlapi_missing_auth.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [MyApi] is invalid. Missing required property 'Auth'.", + "source": "CFN_LINT", "entity": { - "logicalId": "ScalingPolicyMissingDeps", + "logicalId": "MyApi", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::Serverless::GraphQLApi" }, - "propertyPath": "Properties", - "suggestedFix": "Add 'ScalableDimension' when 'ResourceId' is specified", - "category": "Schema", - "startLine": 36, - "startColumn": 5, - "endLine": 36, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Dependent property required", - "phase": "SCHEMA" + "propertyPath": "Properties/Auth", + "category": "Structure", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 8, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/sam/layerversion_invalid_compatible_architectures.yaml": { + "filePath": "bad/sam/layerversion_invalid_compatible_architectures.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "F3021", - "severity": "FATAL", - "message": "'ServiceNamespace' is a dependency of 'ResourceId'", - "source": "SCHEMA", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Layer] is invalid. CompatibleArchitectures needs to be a list of 'x86_64' or 'arm64'", + "source": "CFN_LINT", "entity": { - "logicalId": "ScalingPolicyMissingDeps", + "logicalId": "Layer", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::Serverless::LayerVersion" }, "propertyPath": "Properties", - "suggestedFix": "Add 'ServiceNamespace' when 'ResourceId' is specified", - "category": "Schema", - "startLine": 36, + "category": "Structure", + "startLine": 5, "startColumn": 5, - "endLine": 36, + "endLine": 5, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Dependent property required", - "phase": "SCHEMA" + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/sam/layerversion_invalid_retention_policy.yaml": { + "filePath": "bad/sam/layerversion_invalid_retention_policy.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "F3058", - "severity": "FATAL", - "message": "One of ['CidrBlock', 'Ipv4IpamPoolId', 'Ipv6IpamPoolId', 'Ipv6CidrBlock'] is a required property", - "source": "SCHEMA", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Layer] is invalid. 'RetentionPolicy' must be one of the following options: ['Retain', 'Delete'].", + "source": "CFN_LINT", "entity": { - "logicalId": "SubnetNoCidr", + "logicalId": "Layer", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::LayerVersion" }, "propertyPath": "Properties", - "category": "Schema", - "startLine": 19, + "category": "Structure", + "startLine": 5, "startColumn": 5, - "endLine": 19, + "endLine": 5, "endColumn": 15, - "ruleDescription": "One of properties required (requiredOr)", - "phase": "SCHEMA" - }, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/sam/simpletable_primarykey_invalid_type.yaml": { + "filePath": "bad/sam/simpletable_primarykey_invalid_type.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [MyTable] is invalid. Invalid 'Type' \"Banana\".", + "source": "CFN_LINT", "entity": { - "logicalId": "SubnetNoCidr", + "logicalId": "MyTable", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::SimpleTable" }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 20, + "propertyPath": "Properties/PrimaryKey", + "category": "Structure", + "startLine": 6, "startColumn": 7, - "endLine": 20, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 6, + "endColumn": 17, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/sam/simpletable_primarykey_missing_type.yaml": { + "filePath": "bad/sam/simpletable_primarykey_missing_type.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [MyTable] is invalid. Property 'PrimaryKey.Type' is required.", + "source": "CFN_LINT", "entity": { - "logicalId": "ScalingPolicyBothIds", + "logicalId": "MyTable", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::Serverless::SimpleTable" }, - "propertyPath": "Properties.PolicyName", - "category": "Best Practice", - "startLine": 26, + "propertyPath": "Properties/PrimaryKey", + "category": "Structure", + "startLine": 6, "startColumn": 7, - "endLine": 26, + "endLine": 6, "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/sam/statemachine_both_definitions.yaml": { + "filePath": "bad/sam/statemachine_both_definitions.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ScalingTargetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [MySM] is invalid. Specify either 'Definition' or 'DefinitionUri' property and not both.", + "source": "CFN_LINT", "entity": { - "logicalId": "ScalingPolicyBothIds", + "logicalId": "MySM", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::Serverless::StateMachine" }, - "propertyPath": "Properties.ScalingTargetId", - "category": "Best Practice", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties", + "category": "Structure", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/sam/statemachine_no_definition.yaml": { + "filePath": "bad/sam/statemachine_no_definition.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [MySM] is invalid. Either 'Definition' or 'DefinitionUri' property must be specified.", + "source": "CFN_LINT", "entity": { - "logicalId": "ScalingPolicyBothIds", + "logicalId": "MySM", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::Serverless::StateMachine" }, - "propertyPath": "Properties.ResourceId", - "category": "Best Practice", - "startLine": 29, - "startColumn": 7, - "endLine": 29, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties", + "category": "Structure", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/sam/transform_bogus_name.yaml": { + "filePath": "bad/sam/transform_bogus_name.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ScalableDimension' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3038", + "severity": "ERROR", + "message": "Resource type 'AWS::Serverless::Function' requires the AWS::Serverless-2016-10-31 transform", + "source": "CFN_LINT", "entity": { - "logicalId": "ScalingPolicyBothIds", + "logicalId": "MyFn", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.ScalableDimension", - "category": "Best Practice", - "startLine": 30, - "startColumn": 7, - "endLine": 30, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "category": "Structure", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 7, + "ruleDescription": "Check if Serverless Resources have Serverless Transform", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ServiceNamespace' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ScalingPolicyBothIds", + "logicalId": "MyFn", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" - }, - "propertyPath": "Properties.ServiceNamespace", - "category": "Best Practice", - "startLine": 31, - "startColumn": 7, - "endLine": 31, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ScalingPolicyMissingDeps", - "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" - }, - "propertyPath": "Properties.PolicyName", - "category": "Best Practice", - "startLine": 37, - "startColumn": 7, - "endLine": 37, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ScalingPolicyMissingDeps", - "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" - }, - "propertyPath": "Properties.ResourceId", - "category": "Best Practice", - "startLine": 39, - "startColumn": 7, - "endLine": 39, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'AlarmBothStats' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "AlarmBothStats", - "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SubnetNoCidr' of type 'AWS::EC2::Subnet' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SubnetNoCidr", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 19, + "startLine": 5, "startColumn": 5, - "endLine": 19, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/schema_type_mismatch.yaml": { - "filePath": "bad/schema_type_mismatch.yaml", + "bad/sam/transform_wrong_date.yaml": { + "filePath": "bad/sam/transform_wrong_date.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 0, - "warnings": 3, - "informational": 2, + "errors": 1, + "warnings": 0, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -11546,102 +10904,32 @@ }, "diagnostics": [ { - "ruleId": "W3030", - "severity": "WARN", - "message": "true is not one of ['Enabled', 'Suspended']", - "source": "CFN_LINT", - "entity": { - "logicalId": "Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.VersioningConfiguration.Status", - "category": "Schema", - "startLine": 8, - "startColumn": 9, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Value not in allowed enum", - "phase": "SCHEMA", - "context": { - "actualValue": true, - "extra": { - "allowed_values": [ - "Enabled", - "Suspended" - ] - } - } - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "12345 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", - "entity": { - "logicalId": "Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 17, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "true is not of type 'string' - automatically coerced (boolean to string)", + "ruleId": "E3038", + "severity": "ERROR", + "message": "Resource type 'AWS::Serverless::Function' requires the AWS::Serverless-2016-10-31 transform", "source": "CFN_LINT", "entity": { - "logicalId": "Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.VersioningConfiguration.Status", - "category": "Best Practice", - "startLine": 8, - "startColumn": 9, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket", + "logicalId": "MyFn", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "category": "Structure", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 7, + "ruleDescription": "Check if Serverless Resources have Serverless Transform", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "MyFn", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -11655,8 +10943,8 @@ } ] }, - "bad/schema_unique_items.yaml": { - "filePath": "bad/schema_unique_items.yaml", + "bad/schema_additional_props.yaml": { + "filePath": "bad/schema_additional_props.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, @@ -11664,7 +10952,7 @@ "fatal": 2, "errors": 0, "warnings": 0, - "informational": 0, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -11673,188 +10961,171 @@ }, "diagnostics": [ { - "ruleId": "F3032", + "ruleId": "F3002", "severity": "FATAL", - "message": "expected maximum item count: 1, found: 2", + "message": "Additional properties are not allowed ('NotARealProperty' was unexpected)", "source": "SCHEMA", "entity": { - "logicalId": "Profile", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Roles", + "propertyPath": "Properties.NotARealProperty", "category": "Schema", - "startLine": 6, + "startLine": 7, "startColumn": 7, - "endLine": 6, - "endColumn": 12, - "ruleDescription": "Array item count out of bounds", + "endLine": 7, + "endColumn": 23, + "ruleDescription": "Additional properties are not allowed", "phase": "SCHEMA", "context": { + "property": "NotARealProperty", "extra": { - "actual_count": 2, - "max_items": 1, - "min_items": 0 - } - } - }, - { - "ruleId": "F3037", - "severity": "FATAL", - "message": "Array items are not unique", - "source": "SCHEMA", - "entity": { - "logicalId": "Profile", - "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" - }, - "propertyPath": "Properties.Roles", - "category": "Schema", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 12, - "ruleDescription": "Array items not unique", - "phase": "SCHEMA", - "context": { - "actualValue": [ - "arn:aws:iam::012345678901:role/SameRole", - "arn:aws:iam::012345678901:role/SameRole" - ] + "allowed_properties": [ + "AbacStatus", + "AccelerateConfiguration", + "AccessControl", + "AnalyticsConfigurations", + "Arn", + "BucketEncryption", + "BucketName", + "BucketNamePrefix", + "BucketNamespace", + "CorsConfiguration", + "DomainName", + "DualStackDomainName", + "IntelligentTieringConfigurations", + "InventoryConfigurations", + "LifecycleConfiguration", + "LoggingConfiguration", + "MetadataConfiguration", + "MetadataTableConfiguration", + "MetricsConfigurations", + "NotificationConfiguration", + "ObjectLockConfiguration", + "ObjectLockEnabled", + "OwnershipControls", + "PublicAccessBlockConfiguration", + "RegionalDomainName", + "ReplicationConfiguration", + "Tags", + "VersioningConfiguration", + "WebsiteConfiguration", + "WebsiteURL" + ] + } } - } - ] - }, - "bad/schema_write_only.yaml": { - "filePath": "bad/schema_write_only.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 3, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F6101", + "ruleId": "F3002", "severity": "FATAL", - "message": "'Certificate' is not one of ['CompleteCertificateChain']", + "message": "Additional properties are not allowed ('BukcetName' was unexpected)", "source": "SCHEMA", "entity": { - "logicalId": "WriteOnlyOutput", - "entityType": "Output" - }, - "propertyPath": "Outputs/WriteOnlyOutput/Value.Fn::GetAtt.1", - "category": "Structure", - "startLine": 10, - "startColumn": 3, - "endLine": 10, - "endColumn": 18, - "ruleDescription": "Output value must be a string", - "phase": "SCHEMA" - }, - { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'CertificateAuthorityArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", - "source": "ENGINE", - "entity": { - "logicalId": "CertAuth", - "entityType": "Resource", - "resourceType": "AWS::ACMPCA::CertificateAuthorityActivation" - }, - "propertyPath": "Properties.CertificateAuthorityArn", - "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 30, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" - }, - { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", - "entity": { - "logicalId": "CertAuth", - "entityType": "Resource", - "resourceType": "AWS::ACMPCA::CertificateAuthorityActivation" - }, - "category": "Security", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 11, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" - }, - { - "ruleId": "W9054", - "severity": "WARN", - "message": "Write-only property 'Certificate' of 'CertAuth' is referenced in output 'WriteOnlyOutput'", - "source": "ENGINE", - "entity": { - "logicalId": "CertAuth", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::ACMPCA::CertificateAuthorityActivation" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Certificate", - "category": "Best Practice", + "propertyPath": "Properties.BukcetName", + "category": "Schema", "startLine": 8, "startColumn": 7, "endLine": 8, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html", - "ruleDescription": "Write-only property referenced in output", + "endColumn": 17, + "ruleDescription": "Additional properties are not allowed", "phase": "SCHEMA", "context": { - "lifecycle": "write-only" + "property": "BukcetName", + "extra": { + "allowed_properties": [ + "AbacStatus", + "AccelerateConfiguration", + "AccessControl", + "AnalyticsConfigurations", + "Arn", + "BucketEncryption", + "BucketName", + "BucketNamePrefix", + "BucketNamespace", + "CorsConfiguration", + "DomainName", + "DualStackDomainName", + "IntelligentTieringConfigurations", + "InventoryConfigurations", + "LifecycleConfiguration", + "LoggingConfiguration", + "MetadataConfiguration", + "MetadataTableConfiguration", + "MetricsConfigurations", + "NotificationConfiguration", + "ObjectLockConfiguration", + "ObjectLockEnabled", + "OwnershipControls", + "PublicAccessBlockConfiguration", + "RegionalDomainName", + "ReplicationConfiguration", + "Tags", + "VersioningConfiguration", + "WebsiteConfiguration", + "WebsiteURL" + ] + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CertificateAuthorityArn' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CertAuth", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::ACMPCA::CertificateAuthorityActivation" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.CertificateAuthorityArn", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 7, + "startLine": 6, "startColumn": 7, - "endLine": 7, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html", + "endLine": 6, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } + }, + { + "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": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "bad/security_issues.yaml": { - "filePath": "bad/security_issues.yaml", + "bad/schema_composition.yaml": { + "filePath": "bad/schema_composition.yaml", "status": "OK", "metadata": { "resourcesScanned": 2, "counts": { - "fatal": 1, + "fatal": 2, "errors": 0, - "warnings": 1, - "informational": 2, + "warnings": 0, + "informational": 5, "debug": 0 }, "suppressed": 0, @@ -11865,32 +11136,36 @@ { "ruleId": "F3017", "severity": "FATAL", - "message": "Value is not valid under any of the 3 anyOf schemas for AWS::IAM::Policy (0 branches matched; at least one is required). Required property combinations: ['Groups'] or ['Roles'] or ['Users']. Branch failures: branch 1: 'Users' is a required property; branch 2: 'Groups' is a required property; branch 3: 'Roles' is a required property.", + "message": "Value is not valid under any of the 5 anyOf schemas for AWS::EC2::Volume (0 branches matched; at least one is required). Required property combinations: ['AvailabilityZone', 'Size'] or ['AvailabilityZone', 'SnapshotId'] or ['AvailabilityZoneId', 'Size'] or ['AvailabilityZoneId', 'SnapshotId'] or ['SourceVolumeId']. Branch failures: branch 1: 'AvailabilityZone' is a required property, 'Size' is a required property; branch 2: 'AvailabilityZone' is a required property, 'SnapshotId' is a required property; branch 3: 'AvailabilityZoneId' is a required property, 'Size' is a required property; branch 4: 'AvailabilityZoneId' is a required property, 'SnapshotId' is a required property; branch 5: 'SourceVolumeId' is a required property.", "source": "SCHEMA", "entity": { - "logicalId": "WildcardPolicy", + "logicalId": "NoAZ", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::EC2::Volume" }, "propertyPath": "Properties", "category": "Schema", - "startLine": 14, + "startLine": 13, "startColumn": 5, - "endLine": 14, + "endLine": 13, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Value not valid under anyOf", "phase": "SCHEMA", "context": { "expectedConstraint": "at least one anyOf branch", "extra": { - "branchCount": 3, + "branchCount": 5, "branchFailures": [ { "branch": 1, "reasons": [ { - "message": "'Users' is a required property", + "message": "'AvailabilityZone' is a required property", + "propertyPath": "Properties" + }, + { + "message": "'Size' is a required property", "propertyPath": "Properties" } ] @@ -11899,7 +11174,11 @@ "branch": 2, "reasons": [ { - "message": "'Groups' is a required property", + "message": "'AvailabilityZone' is a required property", + "propertyPath": "Properties" + }, + { + "message": "'SnapshotId' is a required property", "propertyPath": "Properties" } ] @@ -11908,193 +11187,230 @@ "branch": 3, "reasons": [ { - "message": "'Roles' is a required property", + "message": "'AvailabilityZoneId' is a required property", + "propertyPath": "Properties" + }, + { + "message": "'Size' is a required property", "propertyPath": "Properties" } ] - } - ], - "compositionKind": "anyOf", - "matchCount": 0, - "matchOutcome": "zeroMatches", - "validPropertyCombinations": [ - [ - "Groups" - ], - [ - "Roles" - ], - [ - "Users" - ] - ] + }, + { + "branch": 4, + "reasons": [ + { + "message": "'AvailabilityZoneId' is a required property", + "propertyPath": "Properties" + }, + { + "message": "'SnapshotId' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 5, + "reasons": [ + { + "message": "'SourceVolumeId' is a required property", + "propertyPath": "Properties" + } + ] + } + ], + "compositionKind": "anyOf", + "matchCount": 0, + "matchOutcome": "zeroMatches", + "validPropertyCombinations": [ + [ + "AvailabilityZone", + "Size" + ], + [ + "AvailabilityZone", + "SnapshotId" + ], + [ + "AvailabilityZoneId", + "Size" + ], + [ + "AvailabilityZoneId", + "SnapshotId" + ], + [ + "SourceVolumeId" + ] + ] } } }, { - "ruleId": "W2508", - "severity": "WARN", - "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", - "source": "ENGINE", + "ruleId": "F3018", + "severity": "FATAL", + "message": "Value is not valid under any of the 2 oneOf schemas for AWS::AppStream::ImageBuilder (0 branches matched; exactly one is required). Required property combinations: ['ImageArn'] or ['ImageName']. Branch failures: branch 1: 'ImageName' is a required property; branch 2: 'ImageArn' is a required property.", + "source": "SCHEMA", "entity": { - "logicalId": "OpenSSH", + "logicalId": "NoImage", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::AppStream::ImageBuilder" }, - "propertyPath": "Properties.SecurityGroupIngress", - "suggestedFix": "Restrict the CIDR range to specific IP addresses", - "category": "Security", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 27, - "ruleDescription": "Security group allows open access to sensitive port", - "phase": "LINT" + "propertyPath": "Properties", + "category": "Schema", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Value not valid under oneOf", + "phase": "SCHEMA", + "context": { + "expectedConstraint": "exactly one oneOf branch", + "extra": { + "branchCount": 2, + "branchFailures": [ + { + "branch": 1, + "reasons": [ + { + "message": "'ImageName' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 2, + "reasons": [ + { + "message": "'ImageArn' is a required property", + "propertyPath": "Properties" + } + ] + } + ], + "compositionKind": "oneOf", + "matchCount": 0, + "matchOutcome": "zeroMatches", + "validPropertyCombinations": [ + [ + "ImageArn" + ], + [ + "ImageName" + ] + ] + } + } }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "OpenSSH", + "logicalId": "NoAZ", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Volume" }, - "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 7, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'OpenSSH' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", + "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": "OpenSSH", + "logicalId": "NoAZ", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Volume" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 7, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "bad/sg_bad_port_range.yaml": { - "filePath": "bad/sg_bad_port_range.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E9002", - "severity": "ERROR", - "message": "FromPort 443 is greater than ToPort 80", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SG", + "logicalId": "NoImage", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::AppStream::ImageBuilder" }, - "propertyPath": "Properties.SecurityGroupIngress.0", - "suggestedFix": "Set FromPort to a value less than or equal to ToPort", - "category": "Resource", + "propertyPath": "Properties.Name", + "category": "Best Practice", "startLine": 8, - "startColumn": 21, + "startColumn": 7, "endLine": 8, - "endColumn": 22, - "ruleDescription": "SecurityGroup FromPort must be <= ToPort for the TCP and UDP protocols", - "phase": "LINT", + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { - "actualValue": [ - { - "IpProtocol": "tcp", - "FromPort": 443, - "ToPort": 80, - "CidrIp": "10.0.0.0/8" - } - ] + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Resource 'NoImage' of type 'AWS::AppStream::ImageBuilder' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SG", + "logicalId": "NoImage", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::AppStream::ImageBuilder" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 6, - "startColumn": 7, + "startColumn": 5, "endLine": 6, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SG' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'NoAZ' of type 'AWS::EC2::Volume' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SG", + "logicalId": "NoAZ", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Volume" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 13, "startColumn": 5, - "endLine": 5, + "endLine": 13, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/sg_open_egress.yaml": { - "filePath": "bad/sg_open_egress.yaml", + "bad/schema_conditional_type.yaml": { + "filePath": "bad/schema_conditional_type.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 1, + "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 1, "informational": 2, "debug": 0 }, @@ -12104,78 +11420,84 @@ }, "diagnostics": [ { - "ruleId": "F3021", - "severity": "FATAL", - "message": "'VpcId' is a dependency of 'SecurityGroupEgress'", - "source": "SCHEMA", + "ruleId": "W9003", + "severity": "WARN", + "message": "12345 (from Fn::If on condition 'IsProd') is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "OpenSG", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties", - "suggestedFix": "Add 'VpcId' when 'SecurityGroupEgress' is specified", - "category": "Schema", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Dependent property required", - "phase": "SCHEMA" + "propertyPath": "Properties.BucketName", + "category": "Best Practice", + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 17, + "conditionScenario": { + "IsProd": true + }, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA", + "context": { + "resolutionSource": "Fn::If on condition 'IsProd'" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenSG", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 6, + "startLine": 12, "startColumn": 7, - "endLine": 6, - "endColumn": 23, + "endLine": 12, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'OpenSG' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "OpenSG", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 11, "startColumn": 5, - "endLine": 5, + "endLine": 11, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/simple_sub_param.yaml": { - "filePath": "bad/simple_sub_param.yaml", + "bad/schema_enum_violation.yaml": { + "filePath": "bad/schema_enum_violation.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 0, - "warnings": 0, + "errors": 1, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -12185,84 +11507,98 @@ }, "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3045", + "severity": "ERROR", + "message": "A bucket with 'AccessControl' set should also have at least one 'OwnershipControl' configured", + "source": "CFN_LINT", "entity": { "logicalId": "Bucket", "entityType": "Resource", "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 9, + "propertyPath": "Properties", + "suggestedFix": "Add OwnershipControls to the bucket when using AccessControl", + "category": "Resource", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Validate AccessControl are set with OwnershipControls", + "phase": "LINT" + }, + { + "ruleId": "W3030", + "severity": "WARN", + "message": "'InvalidAccessControl' is not one of ['AuthenticatedRead', 'AwsExecRead', 'BucketOwnerFullControl', 'BucketOwnerRead', 'LogDeliveryWrite', 'Private', 'PublicRead', 'PublicReadWrite']", + "source": "CFN_LINT", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.AccessControl", + "category": "Schema", + "startLine": 7, "startColumn": 7, - "endLine": 9, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 7, + "endColumn": 20, + "ruleDescription": "Value not in allowed enum", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:${Env})" + "actualValue": "InvalidAccessControl", + "extra": { + "allowed_values": [ + "AuthenticatedRead", + "AwsExecRead", + "BucketOwnerFullControl", + "BucketOwnerRead", + "LogDeliveryWrite", + "Private", + "PublicRead", + "PublicReadWrite" + ] + } } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3045", + "severity": "WARN", + "message": "AccessControl property is deprecated. Use bucket policies instead", + "source": "CFN_LINT", "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": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/sns_cross_account.yaml": { - "filePath": "bad/sns_cross_account.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 + "propertyPath": "Properties.AccessControl", + "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", + "category": "Deprecation", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 20, + "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", + "phase": "LINT", + "context": { + "actualValue": "InvalidAccessControl" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.TopicName", + "propertyPath": "Properties.BucketName", "category": "Best Practice", "startLine": 6, "startColumn": 7, "endLine": 6, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -12272,12 +11608,12 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Topic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Topic", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -12291,16 +11627,16 @@ } ] }, - "bad/some_logs_stream_lambda.yaml": { - "filePath": "bad/some_logs_stream_lambda.yaml", + "bad/schema_format_violation.yaml": { + "filePath": "bad/schema_format_violation.yaml", "status": "OK", "metadata": { - "resourcesScanned": 8, + "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 4, - "warnings": 0, - "informational": 20, + "errors": 1, + "warnings": 1, + "informational": 4, "debug": 0 }, "suppressed": 0, @@ -12309,373 +11645,458 @@ }, "diagnostics": [ { - "ruleId": "E2533", + "ruleId": "E1154", "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", + "message": "'subnet-bad' does not match format 'AWS::EC2::Subnet.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "FunctionA", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 21, + "propertyPath": "Properties.SubnetId", + "category": "Intrinsic Function", + "startLine": 7, "startColumn": 7, - "endLine": 21, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "endLine": 7, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate VPC subnet id format", "phase": "SCHEMA", "context": { - "actualValue": "python3.6", - "lifecycle": "end-of-life" + "actualValue": "subnet-bad" } }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", "entity": { - "logicalId": "FunctionB", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 33, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 6, "startColumn": 7, - "endLine": 33, + "endLine": 6, "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.6", - "lifecycle": "end-of-life" - } + "ruleDescription": "Hardcoded AMI ID", + "phase": "LINT" }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", - "entity": { - "logicalId": "FunctionC", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 44, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 6, "startColumn": 7, - "endLine": 44, + "endLine": 6, "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.6", - "lifecycle": "end-of-life" + "lifecycle": "create-only" } }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LogSubscriptionFunction", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 56, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 7, "startColumn": 7, - "endLine": 56, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "endLine": 7, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.6", - "lifecycle": "end-of-life" + "lifecycle": "create-only" } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionALogGroup", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.SecurityGroupIds", "category": "Best Practice", - "startLine": 22, - "startColumn": 3, - "endLine": 22, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "FunctionALogGroup", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 22, - "startColumn": 3, - "endLine": 22, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/schema_lifecycle.yaml": { + "filePath": "bad/schema_lifecycle.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 1, + "errors": 3, + "warnings": 5, + "informational": 8, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "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", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'RepositoryOwner' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "FunctionBLogGroup", + "logicalId": "ShutdownResource", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::CodeStar::GitHubRepository" }, - "category": "Best Practice", - "startLine": 34, - "startColumn": 3, - "endLine": 34, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'RepositoryOwner'", + "category": "Schema", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "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)", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'dotnetcore2.1' was deprecated on '2022-01-05'. Creation was disabled on '2022-01-05', and updates were disabled on '2022-04-13'. Please consider updating to 'dotnet10'", "source": "CFN_LINT", "entity": { - "logicalId": "FunctionBLogGroup", + "logicalId": "EolLambda", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Lambda::Function" }, - "category": "Best Practice", - "startLine": 34, - "startColumn": 3, - "endLine": 34, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 27, + "startColumn": 7, + "endLine": 27, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "dotnetcore2.1", + "lifecycle": "end-of-life" + } }, { - "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)", + "ruleId": "E3677", + "severity": "ERROR", + "message": "Runtime 'dotnetcore2.1' is not supported with Code.ZipFile - use nodejs or python", "source": "CFN_LINT", "entity": { - "logicalId": "FunctionCLogGroup", + "logicalId": "EolLambda", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Lambda::Function" }, - "category": "Best Practice", - "startLine": 45, + "category": "Resource", + "startLine": 23, "startColumn": 3, - "endLine": 45, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 23, + "endColumn": 12, + "ruleDescription": "Lambda ZipFile requires nodejs or python runtime", "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)", + "ruleId": "E3710", + "severity": "ERROR", + "message": "Resource type 'AWS::CodeStar::GitHubRepository' is from a service that was shut down on 2024-07-25", "source": "CFN_LINT", "entity": { - "logicalId": "FunctionCLogGroup", + "logicalId": "ShutdownResource", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::CodeStar::GitHubRepository" }, - "category": "Best Practice", - "startLine": 45, + "category": "Deprecation", + "startLine": 4, "startColumn": 3, - "endLine": 45, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "endLine": 4, + "endColumn": 19, + "ruleDescription": "Resource type is from a service that has been shut down", + "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)", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs16.x' was deprecated on '2024-06-12'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "LogSubscriptionFunctionLogGroup", + "logicalId": "DeprecatedLambda", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Lambda::Function" }, - "category": "Best Practice", - "startLine": 78, - "startColumn": 3, - "endLine": 78, - "endColumn": 34, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 38, + "startColumn": 7, + "endLine": 38, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs16.x", + "lifecycle": "deprecated" + } }, { - "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)", + "ruleId": "W3696", + "severity": "WARN", + "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", "source": "CFN_LINT", "entity": { - "logicalId": "LogSubscriptionFunctionLogGroup", + "logicalId": "SunsetResource", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::AppMesh::Mesh" }, - "category": "Best Practice", - "startLine": 78, + "category": "Deprecation", + "startLine": 10, "startColumn": 3, - "endLine": 78, - "endColumn": 34, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 10, + "endColumn": 17, + "ruleDescription": "Resource type is from a service that is sunsetting", + "phase": "SCHEMA" + }, + { + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "MaintenanceResource", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "category": "Deprecation", + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "EolLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "category": "Security", + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 12, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "DeprecatedLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "category": "Security", + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 19, + "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionALogGroup", + "logicalId": "SunsetResource", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::AppMesh::Mesh" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.MeshName", "category": "Best Practice", - "startLine": 25, + "startLine": 13, "startColumn": 7, - "endLine": 25, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "endLine": 13, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:/aws/lambda/${FunctionA})" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionBLogGroup", + "logicalId": "MaintenanceResource", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 37, + "startLine": 19, "startColumn": 7, - "endLine": 37, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "endLine": 19, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:/aws/lambda/${FunctionB})" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionCLogGroup", + "logicalId": "MaintenanceResource", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 48, + "startLine": 20, "startColumn": 7, - "endLine": 48, + "endLine": 20, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:/aws/lambda/${FunctionC})" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LogSubscriptionFunctionLogGroup", + "logicalId": "EolLambda", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 81, + "startLine": 26, "startColumn": 7, - "endLine": 81, + "endLine": 26, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:/aws/lambda/${LogSubscriptionFunction})" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FunctionA' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionA", + "logicalId": "DeprecatedLambda", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 18, - "startColumn": 5, - "endLine": 18, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FunctionALogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Resource 'SunsetResource' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FunctionALogGroup", + "logicalId": "SunsetResource", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::AppMesh::Mesh" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 24, + "startLine": 12, "startColumn": 5, - "endLine": 24, + "endLine": 12, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -12683,19 +12104,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FunctionB' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'EolLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FunctionB", + "logicalId": "EolLambda", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 30, + "startLine": 25, "startColumn": 5, - "endLine": 30, + "endLine": 25, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -12703,12 +12124,12 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FunctionBLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Resource 'DeprecatedLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FunctionBLogGroup", + "logicalId": "DeprecatedLambda", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -12719,165 +12140,68 @@ "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/schema_numeric_bounds.yaml": { + "filePath": "bad/schema_numeric_bounds.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 5, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FunctionC' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F3034", + "severity": "FATAL", + "message": "-1 is less than the minimum of 0", + "source": "SCHEMA", "entity": { - "logicalId": "FunctionC", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 41, - "startColumn": 5, - "endLine": 41, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.VisibilityTimeout", + "category": "Schema", + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Numeric value out of bounds", + "phase": "SCHEMA", + "context": { + "actualValue": -1, + "extra": { + "maximum": 43200.0, + "minimum": 0.0 + } + } }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'FunctionCLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", - "source": "ENGINE", + "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": "FunctionCLogGroup", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 47, - "startColumn": 5, - "endLine": 47, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LogSubscriptionFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "LogSubscriptionFunction", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 53, - "startColumn": 5, - "endLine": 53, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LogSubscriptionFunctionLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "LogSubscriptionFunctionLogGroup", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 80, - "startColumn": 5, - "endLine": 80, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/sqs_fifo_no_suffix.yaml": { - "filePath": "bad/sqs_fifo_no_suffix.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 2, - "warnings": 0, - "informational": 6, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E2504", - "severity": "ERROR", - "message": "FIFO queue name 'my-queue' must end with '.fifo'", - "source": "ENGINE", - "entity": { - "logicalId": "FifoQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.QueueName", - "category": "Resource", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 16, - "ruleDescription": "FIFO queue name must end with .fifo", - "phase": "LINT" - }, - { - "ruleId": "E3501", - "severity": "ERROR", - "message": "FIFO queue name 'my-queue' must end with '.fifo'", - "source": "CFN_LINT", - "entity": { - "logicalId": "FifoQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.QueueName", - "suggestedFix": "Append .fifo to the queue name", - "category": "Resource", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 16, - "ruleDescription": "Validate SQS queue properties are valid", - "phase": "LINT", - "context": { - "extra": { - "queue_name": "my-queue" - } - } - }, - { - "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": "FifoQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::SQS::Queue" }, "category": "Best Practice", "startLine": 3, "startColumn": 3, "endLine": 3, - "endColumn": 12, + "endColumn": 8, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -12887,7 +12211,7 @@ "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": "FifoQueue", + "logicalId": "Queue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, @@ -12895,7 +12219,7 @@ "startLine": 3, "startColumn": 3, "endLine": 3, - "endColumn": 12, + "endColumn": 8, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -12905,7 +12229,7 @@ "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": "FifoQueue", + "logicalId": "Queue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, @@ -12924,7 +12248,7 @@ "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FifoQueue", + "logicalId": "Queue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, @@ -12941,36 +12265,13 @@ "lifecycle": "create-only" } }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FifoQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.FifoQueue", - "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FifoQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Resource 'Queue' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FifoQueue", + "logicalId": "Queue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, @@ -12986,16 +12287,16 @@ } ] }, - "bad/sqs_fifo_standard_dlq.yaml": { - "filePath": "bad/sqs_fifo_standard_dlq.yaml", + "bad/schema_property_constraints.yaml": { + "filePath": "bad/schema_property_constraints.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 3, "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 11, + "fatal": 1, + "errors": 0, + "warnings": 3, + "informational": 8, "debug": 0 }, "suppressed": 0, @@ -13004,151 +12305,173 @@ }, "diagnostics": [ { - "ruleId": "E3502", - "severity": "ERROR", - "message": "Source queue type 'FIFO' does not match destination queue type 'standard'", - "source": "CFN_LINT", + "ruleId": "F3031", + "severity": "FATAL", + "message": "'INVALID_UPPERCASE_BUCKET' does not match pattern '^([a-z0-9][a-z0-9.-]*[a-z0-9])?$'", + "source": "SCHEMA", "entity": { - "logicalId": "MainQueue", + "logicalId": "PatternBucket", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.RedrivePolicy", - "category": "Resource", - "startLine": 12, + "propertyPath": "Properties.BucketName", + "category": "Schema", + "startLine": 6, "startColumn": 7, - "endLine": 12, - "endColumn": 20, - "ruleDescription": "Validate SQS DLQ queues are the same type", - "phase": "LINT" + "endLine": 6, + "endColumn": 17, + "ruleDescription": "Value does not match pattern", + "phase": "SCHEMA", + "context": { + "actualValue": "INVALID_UPPERCASE_BUCKET", + "expectedConstraint": "^([a-z0-9][a-z0-9.-]*[a-z0-9])?$" + } }, { - "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", + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'CertificateAuthorityArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", "entity": { - "logicalId": "DLQ", + "logicalId": "ReadOnlyProp", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ACMPCA::Certificate" }, + "propertyPath": "Properties.CertificateAuthorityArn", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 6, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 30, + "ruleDescription": "Hardcoded ARN property", "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", + "ruleId": "W9009", + "severity": "WARN", + "message": "Property 'WorkGroupConfigurationUpdates' is deprecated", + "source": "ENGINE", "entity": { - "logicalId": "DLQ", + "logicalId": "DeprecatedProp", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::Athena::WorkGroup" }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 6, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Properties.WorkGroupConfigurationUpdates", + "category": "Deprecation", + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 36, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "ruleDescription": "Resource type sunset or shutdown", + "phase": "SCHEMA", + "context": { + "lifecycle": "deprecated" + } }, { - "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", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", "entity": { - "logicalId": "MainQueue", + "logicalId": "ReadOnlyProp", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ACMPCA::Certificate" }, - "category": "Best Practice", - "startLine": 7, + "category": "Security", + "startLine": 8, "startColumn": 3, - "endLine": 7, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MainQueue", + "logicalId": "PatternBucket", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::S3::Bucket" }, + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "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", + "message": "Property 'CertificateAuthorityArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DLQ", + "logicalId": "ReadOnlyProp", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ACMPCA::Certificate" }, - "propertyPath": "Properties", + "propertyPath": "Properties.CertificateAuthorityArn", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "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", + "message": "Property 'CertificateSigningRequest' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MainQueue", + "logicalId": "ReadOnlyProp", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ACMPCA::Certificate" }, - "propertyPath": "Properties", + "propertyPath": "Properties.CertificateSigningRequest", "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 32, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "message": "Property 'SigningAlgorithm' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DLQ", + "logicalId": "ReadOnlyProp", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ACMPCA::Certificate" }, - "propertyPath": "Properties.QueueName", + "propertyPath": "Properties.SigningAlgorithm", "category": "Best Practice", - "startLine": 6, + "startLine": 13, "startColumn": 7, - "endLine": 6, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "endLine": 13, + "endColumn": 23, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13158,20 +12481,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "message": "Property 'Validity' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MainQueue", + "logicalId": "ReadOnlyProp", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ACMPCA::Certificate" }, - "propertyPath": "Properties.QueueName", + "propertyPath": "Properties.Validity", "category": "Best Practice", - "startLine": 10, + "startLine": 14, "startColumn": 7, - "endLine": 10, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "endLine": 14, + "endColumn": 15, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13181,20 +12504,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MainQueue", + "logicalId": "DeprecatedProp", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::Athena::WorkGroup" }, - "propertyPath": "Properties.FifoQueue", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 11, + "startLine": 22, "startColumn": 7, - "endLine": 11, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "endLine": 22, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13204,12 +12527,12 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DLQ' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Resource 'PatternBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DLQ", + "logicalId": "PatternBucket", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -13224,35 +12547,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MainQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Resource 'DeprecatedProp' of type 'AWS::Athena::WorkGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MainQueue", + "logicalId": "DeprecatedProp", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::Athena::WorkGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, + "startLine": 21, "startColumn": 5, - "endLine": 9, + "endLine": 21, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/ssm_document_invalid.yaml": { - "filePath": "bad/ssm_document_invalid.yaml", + "bad/schema_required_xor_conditional.yaml": { + "filePath": "bad/schema_required_xor_conditional.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 0, - "errors": 1, + "fatal": 1, + "errors": 0, "warnings": 0, - "informational": 3, + "informational": 5, "debug": 0 }, "suppressed": 0, @@ -13261,41 +12584,45 @@ }, "diagnostics": [ { - "ruleId": "E3051", - "severity": "ERROR", - "message": "SSM Document Content must include 'schemaVersion'", - "source": "CFN_LINT", + "ruleId": "F3014", + "severity": "FATAL", + "message": "Exactly one of ['ScalingTargetId', 'ResourceId'] must be specified", + "source": "SCHEMA", "entity": { - "logicalId": "Doc", + "logicalId": "Policy", "entityType": "Resource", - "resourceType": "AWS::SSM::Document" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.Content", - "category": "Resource", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 14, - "ruleDescription": "Validate the structure of a SSM document", - "phase": "LINT" + "propertyPath": "Properties", + "category": "Schema", + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 15, + "conditionScenario": { + "DuplicateTarget": true + }, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Exactly one of properties required (requiredXor)", + "phase": "SCHEMA" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DocumentType' is create-only; updating it will cause resource replacement", + "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Doc", + "logicalId": "Policy", "entityType": "Resource", - "resourceType": "AWS::SSM::Document" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.DocumentType", + "propertyPath": "Properties.PolicyName", "category": "Best Practice", - "startLine": 6, + "startLine": 14, "startColumn": 7, - "endLine": 6, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", + "endLine": 14, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13305,135 +12632,109 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Content' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ScalingTargetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Doc", + "logicalId": "Policy", "entityType": "Resource", - "resourceType": "AWS::SSM::Document" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.Content", + "propertyPath": "Properties.ScalingTargetId", "category": "Best Practice", - "startLine": 7, + "startLine": 16, "startColumn": 7, - "endLine": 7, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", + "endLine": 16, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter 'TargetId' (type String)" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Doc' of type 'AWS::SSM::Document' supports Tags but none are configured", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Doc", + "logicalId": "Policy", "entityType": "Resource", - "resourceType": "AWS::SSM::Document" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/stepfunctions_bad_start_at.yaml": { - "filePath": "bad/stepfunctions_bad_start_at.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 1, - "informational": 1, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3601", - "severity": "ERROR", - "message": "StartAt 'NonExistentState' does not reference a valid state at StartAt", - "source": "CFN_LINT", - "entity": { - "logicalId": "SM", - "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" - }, - "propertyPath": "Properties.DefinitionString", - "category": "Resource", - "startLine": 6, + "startLine": 17, "startColumn": 7, - "endLine": 6, - "endColumn": 23, - "ruleDescription": "Validate the structure of a StateMachine definition", - "phase": "LINT" + "endLine": 17, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'DuplicateTarget'" + } }, { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ScalableDimension' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SM", + "logicalId": "Policy", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.RoleArn", + "propertyPath": "Properties.ScalableDimension", "category": "Best Practice", - "startLine": 16, + "startLine": 18, "startColumn": 7, - "endLine": 16, - "endColumn": 14, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" + "endLine": 18, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SM' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "message": "Property 'ServiceNamespace' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SM", + "logicalId": "Policy", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ServiceNamespace", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 19, + "startColumn": 7, + "endLine": 19, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } } ] }, - "bad/stepfunctions_invalid_state.yaml": { - "filePath": "bad/stepfunctions_invalid_state.yaml", + "bad/schema_string_length.yaml": { + "filePath": "bad/schema_string_length.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 2, + "errors": 0, "warnings": 1, - "informational": 1, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -13442,71 +12743,54 @@ }, "diagnostics": [ { - "ruleId": "E3601", - "severity": "ERROR", - "message": "StartAt 'NonExistentState' does not reference a valid state at StartAt", - "source": "CFN_LINT", - "entity": { - "logicalId": "StateMachine", - "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" - }, - "propertyPath": "Properties.DefinitionString", - "category": "Resource", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 23, - "ruleDescription": "Validate the structure of a StateMachine definition", - "phase": "LINT" - }, - { - "ruleId": "E3601", - "severity": "ERROR", - "message": "State 'DoWork' has invalid Type 'InvalidType'. Must be one of ['Task', 'Pass', 'Choice', 'Wait', 'Succeed', 'Fail', 'Parallel', 'Map']", - "source": "CFN_LINT", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", "entity": { - "logicalId": "StateMachine", + "logicalId": "Lambda", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.DefinitionString", - "category": "Resource", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 23, - "ruleDescription": "Validate the structure of a StateMachine definition", + "category": "Security", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StateMachine", + "logicalId": "Lambda", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RoleArn", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", "startLine": 6, "startColumn": 7, "endLine": 6, - "endColumn": 14, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'StateMachine' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "message": "Resource 'Lambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StateMachine", + "logicalId": "Lambda", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -13520,16 +12804,16 @@ } ] }, - "bad/string.yaml": { - "filePath": "bad/string.yaml", - "status": "ERROR", + "bad/schema_structural.yaml": { + "filePath": "bad/schema_structural.yaml", + "status": "OK", "metadata": { - "resourcesScanned": 0, + "resourcesScanned": 4, "counts": { - "fatal": 1, + "fatal": 6, "errors": 0, "warnings": 0, - "informational": 0, + "informational": 10, "debug": 0 }, "suppressed": 0, @@ -13538,114 +12822,171 @@ }, "diagnostics": [ { - "ruleId": "F1101", + "ruleId": "F3014", "severity": "FATAL", - "message": "Template root must be a YAML mapping", + "message": "Exactly one of ['ScalingTargetId', 'ResourceId'] must be specified", "source": "SCHEMA", - "category": "Structure", - "startLine": 1, - "startColumn": 1, - "endLine": 1, - "endColumn": 1, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" - } - ] - }, - "bad/sub_needed.yaml": { - "filePath": "bad/sub_needed.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 1, - "warnings": 1, - "informational": 2, - "debug": 0 + "entity": { + "logicalId": "ScalingPolicyBothIds", + "entityType": "Resource", + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + }, + "propertyPath": "Properties", + "category": "Schema", + "startLine": 25, + "startColumn": 5, + "endLine": 25, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Exactly one of properties required (requiredXor)", + "phase": "SCHEMA" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3031", + "ruleId": "F3020", "severity": "FATAL", - "message": "'${MyParam}-bucket' does not match pattern '^([a-z0-9][a-z0-9.-]*[a-z0-9])?$'", + "message": "'Statistic' should not be included with 'ExtendedStatistic'", "source": "SCHEMA", "entity": { - "logicalId": "Bucket", + "logicalId": "AlarmBothStats", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::CloudWatch::Alarm" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Statistic", "category": "Schema", - "startLine": 9, + "startLine": 12, "startColumn": 7, - "endLine": 9, - "endColumn": 17, - "ruleDescription": "Value does not match pattern", + "endLine": 12, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Mutually exclusive properties", "phase": "SCHEMA", "context": { - "actualValue": "${MyParam}-bucket", - "expectedConstraint": "^([a-z0-9][a-z0-9.-]*[a-z0-9])?$" + "property": "Statistic" } }, { - "ruleId": "E1029", - "severity": "ERROR", - "message": "Found an embedded parameter '${MyParam}' outside of an 'Fn::Sub' at Properties.BucketName", - "source": "CFN_LINT", + "ruleId": "F3020", + "severity": "FATAL", + "message": "'ExtendedStatistic' should not be included with 'Statistic'", + "source": "SCHEMA", "entity": { - "logicalId": "Bucket", + "logicalId": "AlarmBothStats", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::CloudWatch::Alarm" }, - "propertyPath": "Properties.BucketName", - "suggestedFix": "Wrap the string with Fn::Sub", - "category": "Intrinsic Function", - "startLine": 9, + "propertyPath": "Properties.ExtendedStatistic", + "category": "Schema", + "startLine": 13, "startColumn": 7, - "endLine": 9, - "endColumn": 17, - "ruleDescription": "Substitution variable ${X} requires Fn::Sub", - "phase": "LINT" + "endLine": 13, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Mutually exclusive properties", + "phase": "SCHEMA", + "context": { + "property": "ExtendedStatistic" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'MyParam' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "F3021", + "severity": "FATAL", + "message": "'ScalableDimension' is a dependency of 'ResourceId'", + "source": "SCHEMA", "entity": { - "logicalId": "MyParam", - "entityType": "Parameter" + "logicalId": "ScalingPolicyMissingDeps", + "entityType": "Resource", + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Parameters/MyParam", + "propertyPath": "Properties", + "suggestedFix": "Add 'ScalableDimension' when 'ResourceId' is specified", + "category": "Schema", + "startLine": 36, + "startColumn": 5, + "endLine": 36, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Dependent property required", + "phase": "SCHEMA" + }, + { + "ruleId": "F3021", + "severity": "FATAL", + "message": "'ServiceNamespace' is a dependency of 'ResourceId'", + "source": "SCHEMA", + "entity": { + "logicalId": "ScalingPolicyMissingDeps", + "entityType": "Resource", + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + }, + "propertyPath": "Properties", + "suggestedFix": "Add 'ServiceNamespace' when 'ResourceId' is specified", + "category": "Schema", + "startLine": 36, + "startColumn": 5, + "endLine": 36, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Dependent property required", + "phase": "SCHEMA" + }, + { + "ruleId": "F3058", + "severity": "FATAL", + "message": "One of ['CidrBlock', 'Ipv4IpamPoolId', 'Ipv6IpamPoolId', 'Ipv6CidrBlock'] is a required property", + "source": "SCHEMA", + "entity": { + "logicalId": "SubnetNoCidr", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties", + "category": "Schema", + "startLine": 19, + "startColumn": 5, + "endLine": 19, + "endColumn": 15, + "ruleDescription": "One of properties required (requiredOr)", + "phase": "SCHEMA" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetNoCidr", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 10, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 20, + "startColumn": 7, + "endLine": 20, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "ScalingPolicyBothIds", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.PolicyName", "category": "Best Practice", - "startLine": 9, + "startLine": 26, "startColumn": 7, - "endLine": 9, + "endLine": 26, "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13653,60 +12994,45 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'ScalingTargetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "ScalingPolicyBothIds", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ScalingTargetId", "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/sub_nested_intrinsic.yaml": { - "filePath": "bad/sub_nested_intrinsic.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 + "startLine": 28, + "startColumn": 7, + "endLine": 28, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "ScalingPolicyBothIds", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 6, + "startLine": 29, "startColumn": 7, - "endLine": 6, + "endLine": 29, "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13714,99 +13040,45 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'ScalableDimension' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "ScalingPolicyBothIds", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ScalableDimension", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 30, + "startColumn": 7, + "endLine": 30, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'OtherBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'ServiceNamespace' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OtherBucket", + "logicalId": "ScalingPolicyBothIds", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ServiceNamespace", "category": "Best Practice", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 14, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/subnet_outside_vpc.yaml": { - "filePath": "bad/subnet_outside_vpc.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 5, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3059", - "severity": "ERROR", - "message": "Subnet CIDR '192.168.1.0/24' is not within VPC CIDR '10.0.0.0/16'", - "source": "CFN_LINT", - "entity": { - "logicalId": "SubnetOutside", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Resource", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 16, - "ruleDescription": "Validate subnet CIDRs are within the CIDRs of the VPC", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VPC", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 6, + "startLine": 31, "startColumn": 7, - "endLine": 6, - "endColumn": 16, + "endLine": 31, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13816,42 +13088,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetOutside", + "logicalId": "ScalingPolicyMissingDeps", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.PolicyName", "category": "Best Practice", - "startLine": 10, + "startLine": 37, "startColumn": 7, - "endLine": 10, - "endColumn": 12, + "endLine": 37, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetOutside", + "logicalId": "ScalingPolicyMissingDeps", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 11, + "startLine": 39, "startColumn": 7, - "endLine": 11, - "endColumn": 16, + "endLine": 39, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13861,19 +13134,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'VPC' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "message": "Resource 'AlarmBothStats' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPC", + "logicalId": "AlarmBothStats", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::CloudWatch::Alarm" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 6, "startColumn": 5, - "endLine": 5, + "endLine": 6, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -13881,35 +13154,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SubnetOutside' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'SubnetNoCidr' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetOutside", + "logicalId": "SubnetNoCidr", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, + "startLine": 19, "startColumn": 5, - "endLine": 9, + "endLine": 19, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/subnet_overlap.yaml": { - "filePath": "bad/subnet_overlap.yaml", + "bad/schema_type_mismatch.yaml": { + "filePath": "bad/schema_type_mismatch.yaml", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 1, - "warnings": 2, - "informational": 10, + "errors": 0, + "warnings": 3, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -13918,98 +13191,87 @@ }, "diagnostics": [ { - "ruleId": "E3060", - "severity": "ERROR", - "message": "'10.0.0.0/24' overlaps with '10.0.0.0/24'", + "ruleId": "W3030", + "severity": "WARN", + "message": "true is not one of ['Enabled', 'Suspended']", "source": "CFN_LINT", "entity": { - "logicalId": "SubnetB", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.CidrBlock", - "category": "Resource", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 16, - "relatedResources": [ - { - "resource": { - "id": "SubnetA", - "resourceType": "AWS::EC2::Subnet" - }, - "location": { - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 10 - }, - "message": "Overlapping subnet CIDR 10.0.0.0/24" - } - ], - "ruleDescription": "Validate subnet CIDRs do not overlap with other subnets", - "phase": "LINT", + "propertyPath": "Properties.VersioningConfiguration.Status", + "category": "Schema", + "startLine": 8, + "startColumn": 9, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Value not in allowed enum", + "phase": "SCHEMA", "context": { + "actualValue": true, "extra": { - "cidr": "10.0.0.0/24" + "allowed_values": [ + "Enabled", + "Suspended" + ] } } }, { - "ruleId": "W3010", + "ruleId": "W9003", "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1a'", + "message": "12345 is not of type 'string' - automatically coerced (number to string)", "source": "CFN_LINT", "entity": { - "logicalId": "SubnetA", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 12, + "startLine": 6, "startColumn": 7, - "endLine": 12, - "endColumn": 23, - "ruleDescription": "Availability zone properties should not be hardcoded", - "phase": "LINT" + "endLine": 6, + "endColumn": 17, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "W3010", + "ruleId": "W9003", "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1b'", + "message": "true is not of type 'string' - automatically coerced (boolean to string)", "source": "CFN_LINT", "entity": { - "logicalId": "SubnetB", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.VersioningConfiguration.Status", "category": "Best Practice", - "startLine": 18, - "startColumn": 7, - "endLine": 18, - "endColumn": 23, - "ruleDescription": "Availability zone properties should not be hardcoded", - "phase": "LINT" + "startLine": 8, + "startColumn": 9, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPC", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.BucketName", "category": "Best Practice", "startLine": 6, "startColumn": 7, "endLine": 6, - "endColumn": 16, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -14017,211 +13279,227 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/schema_unique_items.yaml": { + "filePath": "bad/schema_unique_items.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 2, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SubnetA", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3032", + "severity": "FATAL", + "message": "expected maximum item count: 1, found: 2", + "source": "SCHEMA", "entity": { - "logicalId": "SubnetA", + "logicalId": "Profile", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 12, + "propertyPath": "Properties.Roles", + "category": "Schema", + "startLine": 6, "startColumn": 7, - "endLine": 12, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 6, + "endColumn": 12, + "ruleDescription": "Array item count out of bounds", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "extra": { + "actual_count": 2, + "max_items": 1, + "min_items": 0 + } } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3037", + "severity": "FATAL", + "message": "Array items are not unique", + "source": "SCHEMA", "entity": { - "logicalId": "SubnetB", + "logicalId": "Profile", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 16, + "propertyPath": "Properties.Roles", + "category": "Schema", + "startLine": 6, "startColumn": 7, - "endLine": 16, + "endLine": 6, "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", + "ruleDescription": "Array items not unique", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" + "actualValue": [ + "arn:aws:iam::012345678901:role/SameRole", + "arn:aws:iam::012345678901:role/SameRole" + ] } + } + ] + }, + "bad/schema_write_only.yaml": { + "filePath": "bad/schema_write_only.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 3, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F6101", + "severity": "FATAL", + "message": "'Certificate' is not one of ['CompleteCertificateChain']", + "source": "SCHEMA", "entity": { - "logicalId": "SubnetB", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "logicalId": "WriteOnlyOutput", + "entityType": "Output" }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Outputs/WriteOnlyOutput/Value.Fn::GetAtt.1", + "category": "Structure", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 18, + "ruleDescription": "Output value must be a string", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'CertificateAuthorityArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "CertAuth", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ACMPCA::CertificateAuthorityActivation" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.CertificateAuthorityArn", "category": "Best Practice", - "startLine": 18, + "startLine": 7, "startColumn": 7, - "endLine": 18, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 7, + "endColumn": 30, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'VPC' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "VPC", + "logicalId": "CertAuth", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::ACMPCA::CertificateAuthorityActivation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "category": "Security", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 11, + "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SubnetA' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "ruleId": "W9054", + "severity": "WARN", + "message": "Write-only property 'Certificate' of 'CertAuth' is referenced in output 'WriteOnlyOutput'", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "CertAuth", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ACMPCA::CertificateAuthorityActivation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Certificate", "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html", + "ruleDescription": "Write-only property referenced in output", + "phase": "SCHEMA", + "context": { + "lifecycle": "write-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SubnetB' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Property 'CertificateAuthorityArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "CertAuth", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ACMPCA::CertificateAuthorityActivation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CertificateAuthorityArn", "category": "Best Practice", - "startLine": 15, - "startColumn": 5, - "endLine": 15, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } } ] }, - "bad/subnet_overlap_multi.yaml": { - "filePath": "bad/subnet_overlap_multi.yaml", + "bad/security_issues.yaml": { + "filePath": "bad/security_issues.yaml", "status": "OK", "metadata": { - "resourcesScanned": 5, + "resourcesScanned": 2, "counts": { - "fatal": 0, - "errors": 4, - "warnings": 4, - "informational": 18, + "fatal": 1, + "errors": 0, + "warnings": 1, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -14230,233 +13508,282 @@ }, "diagnostics": [ { - "ruleId": "E3059", - "severity": "ERROR", - "message": "Subnet CIDR '172.16.0.0/16' is not within VPC CIDR '10.0.0.0/8'", - "source": "CFN_LINT", - "entity": { - "logicalId": "SubnetC", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Resource", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 16, - "ruleDescription": "Validate subnet CIDRs are within the CIDRs of the VPC", - "phase": "LINT" - }, - { - "ruleId": "E3060", - "severity": "ERROR", - "message": "'10.0.0.0/16' overlaps with '10.0.0.0/8'", - "source": "CFN_LINT", + "ruleId": "F3017", + "severity": "FATAL", + "message": "Value is not valid under any of the 3 anyOf schemas for AWS::IAM::Policy (0 branches matched; at least one is required). Required property combinations: ['Groups'] or ['Roles'] or ['Users']. Branch failures: branch 1: 'Users' is a required property; branch 2: 'Groups' is a required property; branch 3: 'Roles' is a required property.", + "source": "SCHEMA", "entity": { - "logicalId": "SubnetB", + "logicalId": "WildcardPolicy", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.CidrBlock", - "category": "Resource", - "startLine": 22, - "startColumn": 7, - "endLine": 22, - "endColumn": 16, - "relatedResources": [ - { - "resource": { - "id": "SubnetA", - "resourceType": "AWS::EC2::Subnet" - }, - "location": { - "startLine": 12, - "startColumn": 3, - "endLine": 12, - "endColumn": 10 - }, - "message": "Overlapping subnet CIDR 10.0.0.0/8" - } - ], - "ruleDescription": "Validate subnet CIDRs do not overlap with other subnets", - "phase": "LINT", + "propertyPath": "Properties", + "category": "Schema", + "startLine": 14, + "startColumn": 5, + "endLine": 14, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Value not valid under anyOf", + "phase": "SCHEMA", "context": { + "expectedConstraint": "at least one anyOf branch", "extra": { - "cidr": "10.0.0.0/16" + "branchCount": 3, + "branchFailures": [ + { + "branch": 1, + "reasons": [ + { + "message": "'Users' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 2, + "reasons": [ + { + "message": "'Groups' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 3, + "reasons": [ + { + "message": "'Roles' is a required property", + "propertyPath": "Properties" + } + ] + } + ], + "compositionKind": "anyOf", + "matchCount": 0, + "matchOutcome": "zeroMatches", + "validPropertyCombinations": [ + [ + "Groups" + ], + [ + "Roles" + ], + [ + "Users" + ] + ] } } }, { - "ruleId": "E3060", - "severity": "ERROR", - "message": "'10.0.1.0/24' overlaps with '10.0.0.0/16'", - "source": "CFN_LINT", + "ruleId": "W2508", + "severity": "WARN", + "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", + "source": "ENGINE", "entity": { - "logicalId": "SubnetD", + "logicalId": "OpenSSH", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.CidrBlock", - "category": "Resource", - "startLine": 34, + "propertyPath": "Properties.SecurityGroupIngress", + "suggestedFix": "Restrict the CIDR range to specific IP addresses", + "category": "Security", + "startLine": 7, "startColumn": 7, - "endLine": 34, - "endColumn": 16, - "relatedResources": [ - { - "resource": { - "id": "SubnetB", - "resourceType": "AWS::EC2::Subnet" - }, - "location": { - "startLine": 18, - "startColumn": 3, - "endLine": 18, - "endColumn": 10 - }, - "message": "Overlapping subnet CIDR 10.0.0.0/16" - } - ], - "ruleDescription": "Validate subnet CIDRs do not overlap with other subnets", - "phase": "LINT", - "context": { - "extra": { - "cidr": "10.0.1.0/24" - } - } + "endLine": 7, + "endColumn": 27, + "ruleDescription": "Security group allows open access to sensitive port", + "phase": "LINT" }, { - "ruleId": "E3060", - "severity": "ERROR", - "message": "'10.0.1.0/24' overlaps with '10.0.0.0/8'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SubnetD", + "logicalId": "OpenSSH", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.CidrBlock", - "category": "Resource", - "startLine": 34, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 6, "startColumn": 7, - "endLine": 34, - "endColumn": 16, - "relatedResources": [ - { - "resource": { - "id": "SubnetA", - "resourceType": "AWS::EC2::Subnet" - }, - "location": { - "startLine": 12, - "startColumn": 3, - "endLine": 12, - "endColumn": 10 - }, - "message": "Overlapping subnet CIDR 10.0.0.0/8" - } - ], - "ruleDescription": "Validate subnet CIDRs do not overlap with other subnets", - "phase": "LINT", + "endLine": 6, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { - "extra": { - "cidr": "10.0.1.0/24" - } + "lifecycle": "create-only" } }, { - "ruleId": "W3010", - "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1a'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'OpenSSH' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "OpenSSH", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 23, - "ruleDescription": "Availability zone properties should not be hardcoded", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/sg_bad_port_range.yaml": { + "filePath": "bad/sg_bad_port_range.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W3010", - "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1b'", - "source": "CFN_LINT", + "ruleId": "E9002", + "severity": "ERROR", + "message": "FromPort 443 is greater than ToPort 80", + "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "SG", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 23, - "ruleDescription": "Availability zone properties should not be hardcoded", - "phase": "LINT" + "propertyPath": "Properties.SecurityGroupIngress.0", + "suggestedFix": "Set FromPort to a value less than or equal to ToPort", + "category": "Resource", + "startLine": 8, + "startColumn": 21, + "endLine": 8, + "endColumn": 22, + "ruleDescription": "SecurityGroup FromPort must be <= ToPort for the TCP and UDP protocols", + "phase": "LINT", + "context": { + "actualValue": [ + { + "IpProtocol": "tcp", + "FromPort": 443, + "ToPort": 80, + "CidrIp": "10.0.0.0/8" + } + ] + } }, { - "ruleId": "W3010", - "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1c'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SubnetC", + "logicalId": "SG", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 29, + "startLine": 6, "startColumn": 7, - "endLine": 29, + "endLine": 6, "endColumn": 23, - "ruleDescription": "Availability zone properties should not be hardcoded", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3010", - "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1d'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SG' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "SubnetD", + "logicalId": "SG", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 23, - "ruleDescription": "Availability zone properties should not be hardcoded", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/sg_open_egress.yaml": { + "filePath": "bad/sg_open_egress.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3021", + "severity": "FATAL", + "message": "'VpcId' is a dependency of 'SecurityGroupEgress'", + "source": "SCHEMA", + "entity": { + "logicalId": "OpenSG", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties", + "suggestedFix": "Add 'VpcId' when 'SecurityGroupEgress' is specified", + "category": "Schema", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Dependent property required", + "phase": "SCHEMA" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPC", + "logicalId": "OpenSG", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 11, + "startLine": 6, "startColumn": 7, - "endLine": 11, - "endColumn": 16, + "endLine": 6, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -14464,309 +13791,516 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'OpenSG' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "OpenSG", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 15, - "startColumn": 7, - "endLine": 15, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/simple_sub_param.yaml": { + "filePath": "bad/simple_sub_param.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 16, + "startLine": 9, "startColumn": 7, - "endLine": 16, - "endColumn": 16, + "endLine": 9, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:${Env})" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/sns_cross_account.yaml": { + "filePath": "bad/sns_cross_account.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "Topic", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.TopicName", "category": "Best Practice", - "startLine": 21, + "startLine": 6, "startColumn": 7, - "endLine": 21, - "endColumn": 12, + "endLine": 6, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'Topic' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "Topic", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 22, - "startColumn": 7, - "endLine": 22, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/some_logs_stream_lambda.yaml": { + "filePath": "bad/some_logs_stream_lambda.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 8, + "counts": { + "fatal": 0, + "errors": 4, + "warnings": 0, + "informational": 20, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "SubnetB", + "logicalId": "FunctionA", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 23, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 21, "startColumn": 7, - "endLine": 23, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 21, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "python3.6", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "SubnetC", + "logicalId": "FunctionB", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 27, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 33, "startColumn": 7, - "endLine": 27, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 33, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" + "actualValue": "python3.6", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "SubnetC", + "logicalId": "FunctionC", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 28, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 44, "startColumn": 7, - "endLine": 28, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 44, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "python3.6", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "SubnetC", + "logicalId": "LogSubscriptionFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 29, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 56, "startColumn": 7, - "endLine": 29, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 56, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "python3.6", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "SubnetD", + "logicalId": "FunctionALogGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" - } + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "SubnetD", + "logicalId": "FunctionALogGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 34, - "startColumn": 7, - "endLine": 34, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "SubnetD", + "logicalId": "FunctionBLogGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'VPC' of type 'AWS::EC2::VPC' supports Tags but none are configured", - "source": "ENGINE", + "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": "VPC", + "logicalId": "FunctionBLogGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'SubnetA' of type 'AWS::EC2::Subnet' supports Tags but none are configured", - "source": "ENGINE", + "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": "SubnetA", + "logicalId": "FunctionCLogGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Logs::LogGroup" + }, + "category": "Best Practice", + "startLine": 45, + "startColumn": 3, + "endLine": 45, + "endColumn": 20, + "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": "FunctionCLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "category": "Best Practice", + "startLine": 45, + "startColumn": 3, + "endLine": 45, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "LogSubscriptionFunctionLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "category": "Best Practice", + "startLine": 78, + "startColumn": 3, + "endLine": 78, + "endColumn": 34, + "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": "LogSubscriptionFunctionLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "category": "Best Practice", + "startLine": 78, + "startColumn": 3, + "endLine": 78, + "endColumn": 34, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionALogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "propertyPath": "Properties.LogGroupName", + "category": "Best Practice", + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:/aws/lambda/${FunctionA})" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionBLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "propertyPath": "Properties.LogGroupName", + "category": "Best Practice", + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:/aws/lambda/${FunctionB})" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionCLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "propertyPath": "Properties.LogGroupName", + "category": "Best Practice", + "startLine": 48, + "startColumn": 7, + "endLine": 48, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:/aws/lambda/${FunctionC})" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "LogSubscriptionFunctionLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "propertyPath": "Properties.LogGroupName", + "category": "Best Practice", + "startLine": 81, + "startColumn": 7, + "endLine": 81, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:/aws/lambda/${LogSubscriptionFunction})" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionA' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionA", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 14, + "startLine": 18, "startColumn": 5, - "endLine": 14, + "endLine": 18, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -14774,19 +14308,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SubnetB' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'FunctionALogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "FunctionALogGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Logs::LogGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 20, + "startLine": 24, "startColumn": 5, - "endLine": 20, + "endLine": 24, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -14794,19 +14328,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SubnetC' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'FunctionB' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetC", + "logicalId": "FunctionB", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 26, + "startLine": 30, "startColumn": 5, - "endLine": 26, + "endLine": 30, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -14814,141 +14348,115 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SubnetD' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'FunctionBLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetD", + "logicalId": "FunctionBLogGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Logs::LogGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 32, + "startLine": 36, "startColumn": 5, - "endLine": 32, + "endLine": 36, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/template.yaml": { - "filePath": "bad/template.yaml", - "status": "ERROR", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F1101", - "severity": "FATAL", - "message": "YAML parse error: while parsing a block mapping, did not find expected key at byte 234 line 12 column 11", - "source": "SCHEMA", - "category": "Structure", - "startLine": 12, - "startColumn": 11, - "endLine": 12, - "endColumn": 11, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" - } - ] - }, - "bad/templates/base.yaml": { - "filePath": "bad/templates/base.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 2, - "errors": 2, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "startLine": 4, - "startColumn": 1, - "endLine": 4, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionC' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionC", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 41, + "startColumn": 5, + "endLine": 41, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "F0002", - "severity": "FATAL", - "message": "AWSTemplateFormatVersion must be '2010-09-09', got '2010-09-10'", - "source": "SCHEMA", - "propertyPath": "AWSTemplateFormatVersion", - "category": "Structure", - "startLine": 1, - "startColumn": 1, - "endLine": 1, - "endColumn": 25, - "ruleDescription": "AWSTemplateFormatVersion must be 2010-09-09", - "phase": "SCHEMA" + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionCLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionCLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 47, + "startColumn": 5, + "endLine": 47, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1005", - "severity": "ERROR", - "message": "Transform object is missing required 'Name' property", - "source": "CFN_LINT", - "propertyPath": "Transform", - "category": "Structure", - "startLine": 2, - "startColumn": 1, - "endLine": 2, - "endColumn": 10, - "ruleDescription": "Validate Transform configuration", - "phase": "PARSE" + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LogSubscriptionFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "LogSubscriptionFunction", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 53, + "startColumn": 5, + "endLine": 53, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1005", - "severity": "ERROR", - "message": "Transform object has unknown property 'key' - expected one of 'Name', 'Parameters'", - "source": "CFN_LINT", - "propertyPath": "Transform", - "category": "Structure", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 6, - "ruleDescription": "Validate Transform configuration", - "phase": "PARSE" + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LogSubscriptionFunctionLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "LogSubscriptionFunctionLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 80, + "startColumn": 5, + "endLine": 80, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "bad/templates/base_date.yaml": { - "filePath": "bad/templates/base_date.yaml", + "bad/sqs_fifo_no_suffix.yaml": { + "filePath": "bad/sqs_fifo_no_suffix.yaml", "status": "OK", "metadata": { - "resourcesScanned": 0, + "resourcesScanned": 1, "counts": { - "fatal": 2, - "errors": 0, + "fatal": 0, + "errors": 2, "warnings": 0, - "informational": 0, + "informational": 6, "debug": 0 }, "suppressed": 0, @@ -14957,198 +14465,182 @@ }, "diagnostics": [ { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "startLine": 2, - "startColumn": 1, - "endLine": 2, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" + "ruleId": "E2504", + "severity": "ERROR", + "message": "FIFO queue name 'my-queue' must end with '.fifo'", + "source": "ENGINE", + "entity": { + "logicalId": "FifoQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.QueueName", + "category": "Resource", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 16, + "ruleDescription": "FIFO queue name must end with .fifo", + "phase": "LINT" }, { - "ruleId": "F0002", - "severity": "FATAL", - "message": "AWSTemplateFormatVersion must be '2010-09-09', got '2010-09-10'", - "source": "SCHEMA", - "propertyPath": "AWSTemplateFormatVersion", - "category": "Structure", - "startLine": 1, - "startColumn": 1, - "endLine": 1, - "endColumn": 25, - "ruleDescription": "AWSTemplateFormatVersion must be 2010-09-09", - "phase": "SCHEMA" - } - ] - }, - "bad/templates/base_null.yaml": { - "filePath": "bad/templates/base_null.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 2, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 + "ruleId": "E3501", + "severity": "ERROR", + "message": "FIFO queue name 'my-queue' must end with '.fifo'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FifoQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.QueueName", + "suggestedFix": "Append .fifo to the queue name", + "category": "Resource", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 16, + "ruleDescription": "Validate SQS queue properties are valid", + "phase": "LINT", + "context": { + "extra": { + "queue_name": "my-queue" + } + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", + "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": "FifoQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "category": "Best Practice", "startLine": 3, - "startColumn": 1, + "startColumn": 3, "endLine": 3, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" - }, - { - "ruleId": "F0002", - "severity": "FATAL", - "message": "AWSTemplateFormatVersion must be '2010-09-09', got null", - "source": "SCHEMA", - "propertyPath": "AWSTemplateFormatVersion", - "category": "Structure", - "startLine": 1, - "startColumn": 1, - "endLine": 1, - "endColumn": 25, - "ruleDescription": "AWSTemplateFormatVersion must be 2010-09-09", - "phase": "PARSE" + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "E1005", - "severity": "ERROR", - "message": "Transform must be a transform name, a list of transforms, or a {Name, Parameters} object, got null", + "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", - "propertyPath": "Transform", - "category": "Structure", - "startLine": 2, - "startColumn": 1, - "endLine": 2, - "endColumn": 10, - "ruleDescription": "Validate Transform configuration", - "phase": "PARSE" - } - ] - }, - "bad/templates/description_object.yaml": { - "filePath": "bad/templates/description_object.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F1004", - "severity": "FATAL", - "message": "Description must be a string, got a list", - "source": "SCHEMA", - "propertyPath": "Description", - "category": "Structure", - "startLine": 2, - "startColumn": 1, - "endLine": 2, + "entity": { + "logicalId": "FifoQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, "endColumn": 12, - "ruleDescription": "Description must be a string", - "phase": "PARSE" - } - ] - }, - "bad/templates/transform_invalid_entries.yaml": { - "filePath": "bad/templates/transform_invalid_entries.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 3, - "warnings": 0, - "informational": 0, - "debug": 0 + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E1005", - "severity": "ERROR", - "message": "Transform entry must be a transform name or a {Name, Parameters} object, got a number", + "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", - "propertyPath": "Transform", - "category": "Structure", - "startLine": 4, + "entity": { + "logicalId": "FifoQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 5, "startColumn": 5, - "endLine": 4, - "endColumn": 6, - "ruleDescription": "Validate Transform configuration", - "phase": "PARSE" + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "E1005", - "severity": "ERROR", - "message": "Transform 'Parameters' must be an object, got a string", - "source": "CFN_LINT", - "propertyPath": "Transform", - "category": "Structure", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FifoQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.QueueName", + "category": "Best Practice", "startLine": 6, - "startColumn": 5, + "startColumn": 7, "endLine": 6, - "endColumn": 15, - "ruleDescription": "Validate Transform configuration", - "phase": "PARSE" + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E1005", - "severity": "ERROR", - "message": "Transform 'Name' must be a string, got a list", - "source": "CFN_LINT", - "propertyPath": "Transform", - "category": "Structure", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FifoQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.FifoQueue", + "category": "Best Practice", "startLine": 7, - "startColumn": 5, + "startColumn": 7, "endLine": 7, - "endColumn": 9, - "ruleDescription": "Validate Transform configuration", - "phase": "PARSE" + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FifoQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FifoQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "bad/transform/auto_publish_alias.yaml": { - "filePath": "bad/transform/auto_publish_alias.yaml", + "bad/sqs_fifo_standard_dlq.yaml": { + "filePath": "bad/sqs_fifo_standard_dlq.yaml", "status": "OK", "metadata": { "resourcesScanned": 2, "counts": { "fatal": 0, - "errors": 2, + "errors": 1, "warnings": 0, - "informational": 0, + "informational": 11, "debug": 0 }, "suppressed": 0, @@ -15157,329 +14649,255 @@ }, "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3502", "severity": "ERROR", - "message": "Error transforming template: Resource with id [SkillFunctionExtraItems] is invalid. Type of property 'AutoPublishAlias' is invalid.", + "message": "Source queue type 'FIFO' does not match destination queue type 'standard'", "source": "CFN_LINT", "entity": { - "logicalId": "SkillFunctionExtraItems", + "logicalId": "MainQueue", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties/AutoPublishAlias", - "category": "Structure", - "startLine": 22, + "propertyPath": "Properties.RedrivePolicy", + "category": "Resource", + "startLine": 12, "startColumn": 7, - "endLine": 22, - "endColumn": 23, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "endLine": 12, + "endColumn": 20, + "ruleDescription": "Validate SQS DLQ queues are the same type", "phase": "LINT" }, { - "ruleId": "E0001", - "severity": "ERROR", - "message": "Error transforming template: Resource with id [SkillFunctionNotRef] is invalid. 'AutoPublishAlias' must be a string or a Ref to a template parameter", + "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": "SkillFunctionNotRef", + "logicalId": "DLQ", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties/AutoPublishAlias", - "category": "Structure", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 23, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 6, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "bad/transform/no_properties.yaml": { - "filePath": "bad/transform/no_properties.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", - "severity": "ERROR", - "message": "Error transforming template: Resource with id [MyApi] is invalid. Missing required property 'StageName'.", + "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": "MyApi", + "logicalId": "DLQ", "entityType": "Resource", - "resourceType": "AWS::Serverless::Api" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties/StageName", - "category": "Structure", - "startLine": 7, + "category": "Best Practice", + "startLine": 3, "startColumn": 3, - "endLine": 7, - "endColumn": 8, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "endLine": 3, + "endColumn": 6, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "bad/transform_serverless_auto_publish_alias.yaml": { - "filePath": "bad/transform_serverless_auto_publish_alias.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", - "severity": "ERROR", - "message": "Error transforming template: Resource with id [ProcessorFunction] is invalid. 'AutoPublishAlias' must be a string or a Ref to a template parameter", + "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": "ProcessorFunction", + "logicalId": "MainQueue", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties/AutoPublishAlias", - "category": "Structure", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 23, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "category": "Best Practice", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "bad/transform_serverless_template.yaml": { - "filePath": "bad/transform_serverless_template.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 6, - "counts": { - "fatal": 0, - "errors": 3, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", - "severity": "ERROR", - "message": "Error transforming template: Resource with id [myFunctionMyTimer] is invalid. Missing required property 'Schedule'.", + "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": "myFunction", + "logicalId": "MainQueue", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties/Events/MyTimer", - "category": "Structure", - "startLine": 39, - "startColumn": 9, - "endLine": 39, - "endColumn": 16, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "category": "Best Practice", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "E0001", - "severity": "ERROR", - "message": "Error transforming template: Resource with id [ExampleLayer] is invalid. Missing required property 'ContentUri'.", + "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": "ExampleLayer", + "logicalId": "DLQ", "entityType": "Resource", - "resourceType": "AWS::Serverless::LayerVersion" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties/ContentUri", - "category": "Structure", - "startLine": 50, - "startColumn": 3, - "endLine": 50, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "E0001", - "severity": "ERROR", - "message": "Error transforming template: Resource with id [AppName] is invalid. Resource is missing the required [Location] property.", + "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": "AppName", + "logicalId": "MainQueue", "entityType": "Resource", - "resourceType": "AWS::Serverless::Application" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties/Location", - "category": "Structure", - "startLine": 56, - "startColumn": 3, - "endLine": 56, - "endColumn": 10, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" - } - ] - }, - "bad/undefined_condition.yaml": { - "filePath": "bad/undefined_condition.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E8002", - "severity": "ERROR", - "message": "Condition 'DoesNotExist' referenced by resource 'R' is not defined", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "R", + "logicalId": "DLQ", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SQS::Queue" }, - "category": "Structure", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 4, - "ruleDescription": "Condition referenced by resource is not defined", - "phase": "PARSE" + "propertyPath": "Properties.QueueName", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'R' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R", + "logicalId": "MainQueue", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.QueueName", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 4, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/unique_items.yaml": { - "filePath": "bad/unique_items.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 1, - "informational": 0, - "debug": 0 + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('AvailabilityZones' was unexpected)", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "R", + "logicalId": "MainQueue", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::WaitConditionHandle" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.AvailabilityZones", - "category": "Schema", - "startLine": 6, + "propertyPath": "Properties.FifoQueue", + "category": "Best Practice", + "startLine": 11, "startColumn": 7, - "endLine": 6, - "endColumn": 24, - "ruleDescription": "Additional properties are not allowed", + "endLine": 11, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "AvailabilityZones", - "extra": { - "allowed_properties": [ - "Id" - ] - } + "lifecycle": "create-only" } }, { - "ruleId": "W9007", - "severity": "WARN", - "message": "Array property 'AvailabilityZones' contains duplicate values", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DLQ' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "R", + "logicalId": "DLQ", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::WaitConditionHandle" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.AvailabilityZones", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 24, - "ruleDescription": "Array items must be unique when required", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MainQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "MainQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/unknown_properties.yaml": { - "filePath": "bad/unknown_properties.yaml", + "bad/ssm_document_invalid.yaml": { + "filePath": "bad/ssm_document_invalid.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 1, "counts": { - "fatal": 2, - "errors": 0, + "fatal": 0, + "errors": 1, "warnings": 0, - "informational": 2, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -15488,138 +14906,102 @@ }, "diagnostics": [ { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('FakeProperty' was unexpected)", - "source": "SCHEMA", + "ruleId": "E3051", + "severity": "ERROR", + "message": "SSM Document Content must include 'schemaVersion'", + "source": "CFN_LINT", "entity": { - "logicalId": "BadBucket", + "logicalId": "Doc", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SSM::Document" }, - "propertyPath": "Properties.FakeProperty", - "category": "Schema", - "startLine": 11, + "propertyPath": "Properties.Content", + "category": "Resource", + "startLine": 7, "startColumn": 7, - "endLine": 11, - "endColumn": 19, - "ruleDescription": "Additional properties are not allowed", - "phase": "SCHEMA", - "context": { - "property": "FakeProperty", - "extra": { - "allowed_properties": [ - "AbacStatus", - "AccelerateConfiguration", - "AccessControl", - "AnalyticsConfigurations", - "Arn", - "BucketEncryption", - "BucketName", - "BucketNamePrefix", - "BucketNamespace", - "CorsConfiguration", - "DomainName", - "DualStackDomainName", - "IntelligentTieringConfigurations", - "InventoryConfigurations", - "LifecycleConfiguration", - "LoggingConfiguration", - "MetadataConfiguration", - "MetadataTableConfiguration", - "MetricsConfigurations", - "NotificationConfiguration", - "ObjectLockConfiguration", - "ObjectLockEnabled", - "OwnershipControls", - "PublicAccessBlockConfiguration", - "RegionalDomainName", - "ReplicationConfiguration", - "Tags", - "VersioningConfiguration", - "WebsiteConfiguration", - "WebsiteURL" - ] - } - } + "endLine": 7, + "endColumn": 14, + "ruleDescription": "Validate the structure of a SSM document", + "phase": "LINT" }, { - "ruleId": "F3006", - "severity": "FATAL", - "message": "Unknown resource type 'AWS::Fake::NonExistent'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DocumentType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FakeResource", + "logicalId": "Doc", "entityType": "Resource", - "resourceType": "AWS::Fake::NonExistent" + "resourceType": "AWS::SSM::Document" }, - "category": "Schema", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 15, - "ruleDescription": "AWS resource type must be recognized and available in the configured region", + "propertyPath": "Properties.DocumentType", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "extra": { - "resource_type": "AWS::Fake::NonExistent" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'Content' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BadBucket", + "logicalId": "Doc", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SSM::Document" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Content", "category": "Best Practice", - "startLine": 10, + "startLine": 7, "startColumn": 7, - "endLine": 10, - "endColumn": 17, + "endLine": 7, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BadBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'Doc' of type 'AWS::SSM::Document' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BadBucket", + "logicalId": "Doc", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SSM::Document" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, + "startLine": 5, "startColumn": 5, - "endLine": 9, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/DemoStack.template.json": { - "filePath": "cdk/DemoStack.template.json", + "bad/stepfunctions_bad_start_at.yaml": { + "filePath": "bad/stepfunctions_bad_start_at.yaml", "status": "OK", "metadata": { - "resourcesScanned": 8, + "resourcesScanned": 1, "counts": { - "fatal": 1, - "errors": 4, - "warnings": 3, - "informational": 16, + "fatal": 0, + "errors": 1, + "warnings": 1, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -15628,387 +15010,369 @@ }, "diagnostics": [ { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'ProvisionedThroughput' is a required property (from extension)", - "source": "SCHEMA", + "ruleId": "E3601", + "severity": "ERROR", + "message": "StartAt 'NonExistentState' does not reference a valid state at StartAt", + "source": "CFN_LINT", "entity": { - "logicalId": "DataTable", + "logicalId": "SM", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties", - "suggestedFix": "Add 'ProvisionedThroughput'", - "category": "Schema", - "startLine": 72, - "startColumn": 4, - "endLine": 72, - "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.DefinitionString", + "category": "Resource", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 23, + "ruleDescription": "Validate the structure of a StateMachine definition", + "phase": "LINT" }, { - "ruleId": "E3045", - "severity": "ERROR", - "message": "A bucket with 'AccessControl' set should also have at least one 'OwnershipControl' configured", - "source": "CFN_LINT", + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", "entity": { - "logicalId": "DataBucket", + "logicalId": "SM", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties", - "suggestedFix": "Add OwnershipControls to the bucket when using AccessControl", - "category": "Resource", - "startLine": 40, - "startColumn": 4, - "endLine": 40, - "endColumn": 15, - "ruleDescription": "Validate AccessControl are set with OwnershipControls", + "propertyPath": "Properties.RoleArn", + "category": "Best Practice", + "startLine": 16, + "startColumn": 7, + "endLine": 16, + "endColumn": 14, + "ruleDescription": "Hardcoded ARN property", "phase": "LINT" }, { - "ruleId": "E3505", - "severity": "ERROR", - "message": "Queue visibility timeout (10) is less than Function timeout (60) seconds", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SM' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "TaskQueue", + "logicalId": "SM", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.VisibilityTimeout", - "suggestedFix": "Set the SQS VisibilityTimeout to at least the Lambda function Timeout", - "category": "Resource", - "startLine": 118, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, "startColumn": 5, - "endLine": 118, - "endColumn": 23, - "ruleDescription": "Validate SQS VisibilityTimeout is greater than a function's Timeout", - "phase": "LINT", - "context": { - "extra": { - "visibility_timeout": 10 - } - } + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/stepfunctions_invalid_state.yaml": { + "filePath": "bad/stepfunctions_invalid_state.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 1, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "E3639", + "ruleId": "E3601", "severity": "ERROR", - "message": "ProvisionedThroughput is required when BillingMode is 'PROVISIONED'", + "message": "StartAt 'NonExistentState' does not reference a valid state at StartAt", "source": "CFN_LINT", "entity": { - "logicalId": "DataTable", + "logicalId": "StateMachine", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.ProvisionedThroughput", - "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", + "propertyPath": "Properties.DefinitionString", "category": "Resource", - "startLine": 72, - "startColumn": 4, - "endLine": 72, - "endColumn": 15, - "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 23, + "ruleDescription": "Validate the structure of a StateMachine definition", "phase": "LINT" }, { - "ruleId": "E9002", + "ruleId": "E3601", "severity": "ERROR", - "message": "FromPort 443 is greater than ToPort 80", - "source": "ENGINE", + "message": "State 'DoWork' has invalid Type 'InvalidType'. Must be one of ['Task', 'Pass', 'Choice', 'Wait', 'Succeed', 'Fail', 'Parallel', 'Map']", + "source": "CFN_LINT", "entity": { - "logicalId": "AppSecurityGroup", + "logicalId": "StateMachine", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.SecurityGroupIngress.1", - "suggestedFix": "Set FromPort to a value less than or equal to ToPort", + "propertyPath": "Properties.DefinitionString", "category": "Resource", - "startLine": 103, - "startColumn": 6, - "endLine": 103, - "endColumn": 7, - "ruleDescription": "SecurityGroup FromPort must be <= ToPort for the TCP and UDP protocols", - "phase": "LINT", - "context": { - "actualValue": [ - { - "CidrIp": "0.0.0.0/0", - "FromPort": 22, - "IpProtocol": "tcp", - "ToPort": 22 - }, - { - "CidrIp": "10.0.0.0/8", - "FromPort": 443, - "IpProtocol": "tcp", - "ToPort": 80 - } - ] - } + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 23, + "ruleDescription": "Validate the structure of a StateMachine definition", + "phase": "LINT" }, { - "ruleId": "W2508", + "ruleId": "W9002", "severity": "WARN", - "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", + "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", "source": "ENGINE", "entity": { - "logicalId": "AppSecurityGroup", + "logicalId": "StateMachine", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.SecurityGroupIngress", - "suggestedFix": "Restrict the CIDR range to specific IP addresses", - "category": "Security", - "startLine": 96, - "startColumn": 5, - "endLine": 96, - "endColumn": 26, - "ruleDescription": "Security group allows open access to sensitive port", + "propertyPath": "Properties.RoleArn", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 14, + "ruleDescription": "Hardcoded ARN property", "phase": "LINT" }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'StateMachine' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "AppFunction", + "logicalId": "StateMachine", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 63, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, "startColumn": 5, - "endLine": 63, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs20.x", - "lifecycle": "deprecated" - } + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/string.yaml": { + "filePath": "bad/string.yaml", + "status": "ERROR", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W3045", - "severity": "WARN", - "message": "AccessControl property is deprecated. Use bucket policies instead", - "source": "CFN_LINT", + "ruleId": "F1101", + "severity": "FATAL", + "message": "Template root must be a YAML mapping", + "source": "SCHEMA", + "category": "Structure", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 1, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" + } + ] + }, + "bad/sub_needed.yaml": { + "filePath": "bad/sub_needed.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 1, + "warnings": 1, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3031", + "severity": "FATAL", + "message": "'${MyParam}-bucket' does not match pattern '^([a-z0-9][a-z0-9.-]*[a-z0-9])?$'", + "source": "SCHEMA", "entity": { - "logicalId": "DataBucket", + "logicalId": "Bucket", "entityType": "Resource", "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.AccessControl", - "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", - "category": "Deprecation", - "startLine": 41, - "startColumn": 5, - "endLine": 41, - "endColumn": 19, - "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", - "phase": "LINT", + "propertyPath": "Properties.BucketName", + "category": "Schema", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 17, + "ruleDescription": "Value does not match pattern", + "phase": "SCHEMA", "context": { - "actualValue": "PublicRead" + "actualValue": "${MyParam}-bucket", + "expectedConstraint": "^([a-z0-9][a-z0-9.-]*[a-z0-9])?$" } }, { - "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)", + "ruleId": "E1029", + "severity": "ERROR", + "message": "Found an embedded parameter '${MyParam}' outside of an 'Fn::Sub' at Properties.BucketName", "source": "CFN_LINT", "entity": { - "logicalId": "DataTable", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::S3::Bucket" }, - "category": "Best Practice", - "startLine": 70, - "startColumn": 3, - "endLine": 70, - "endColumn": 13, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.BucketName", + "suggestedFix": "Wrap the string with Fn::Sub", + "category": "Intrinsic Function", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 17, + "ruleDescription": "Substitution variable ${X} requires Fn::Sub", "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)", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'MyParam' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "DataTable", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "logicalId": "MyParam", + "entityType": "Parameter" }, + "propertyPath": "Parameters/MyParam", "category": "Best Practice", - "startLine": 70, + "startLine": 3, "startColumn": 3, - "endLine": 70, - "endColumn": 13, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "TaskQueue", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::S3::Bucket" }, + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 115, - "startColumn": 3, - "endLine": 115, - "endColumn": 13, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "TaskQueue", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::S3::Bucket" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 115, - "startColumn": 3, - "endLine": 115, - "endColumn": 13, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/sub_nested_intrinsic.yaml": { + "filePath": "bad/sub_nested_intrinsic.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, - { - "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": "TaskQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 117, - "startColumn": 4, - "endLine": 117, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DataTable", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.KeySchema", - "category": "Best Practice", - "startLine": 80, - "startColumn": 5, - "endLine": 80, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DataTable", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.TableName", - "category": "Best Practice", - "startLine": 86, - "startColumn": 5, - "endLine": 86, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AppSecurityGroup", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 95, - "startColumn": 5, - "endLine": 95, - "endColumn": 22, + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "QueueMapping", - "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" - }, - "propertyPath": "Properties.EventSourceArn", - "category": "Best Practice", - "startLine": 127, - "startColumn": 5, - "endLine": 127, - "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt TaskQueue.Arn" - } - }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'AppRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AppRole", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 5, - "startColumn": 4, + "startColumn": 5, "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", @@ -16017,99 +15381,144 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DataBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'OtherBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DataBucket", + "logicalId": "OtherBucket", "entityType": "Resource", "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 40, - "startColumn": 4, - "endLine": 40, - "endColumn": 15, + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/subnet_outside_vpc.yaml": { + "filePath": "bad/subnet_outside_vpc.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 5, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3059", + "severity": "ERROR", + "message": "Subnet CIDR '192.168.1.0/24' is not within VPC CIDR '10.0.0.0/16'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SubnetOutside", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Resource", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 16, + "ruleDescription": "Validate subnet CIDRs are within the CIDRs of the VPC", + "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'AppFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AppFunction", + "logicalId": "VPC", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 52, - "startColumn": 4, - "endLine": 52, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DataTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DataTable", + "logicalId": "SubnetOutside", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 72, - "startColumn": 4, - "endLine": 72, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'AppSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AppSecurityGroup", + "logicalId": "SubnetOutside", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 94, - "startColumn": 4, - "endLine": 94, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TaskQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Resource 'VPC' of type 'AWS::EC2::VPC' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskQueue", + "logicalId": "VPC", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 117, - "startColumn": 4, - "endLine": 117, + "startLine": 5, + "startColumn": 5, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -16117,35 +15526,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'QueueMapping' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", + "message": "Resource 'SubnetOutside' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "QueueMapping", + "logicalId": "SubnetOutside", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 126, - "startColumn": 4, - "endLine": 126, + "startLine": 9, + "startColumn": 5, + "endLine": 9, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/amazon-mq-rabbitmq-lambda--AmazonMqRabbitmqLambdaStack.template.json": { - "filePath": "cdk/amazon-mq-rabbitmq-lambda--AmazonMqRabbitmqLambdaStack.template.json", + "bad/subnet_overlap.yaml": { + "filePath": "bad/subnet_overlap.yaml", "status": "OK", "metadata": { - "resourcesScanned": 27, + "resourcesScanned": 3, "counts": { "fatal": 0, - "errors": 0, - "warnings": 10, - "informational": 41, + "errors": 1, + "warnings": 2, + "informational": 10, "debug": 0 }, "suppressed": 0, @@ -16154,486 +15563,589 @@ }, "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "ruleId": "E3060", + "severity": "ERROR", + "message": "'10.0.0.0/24' overlaps with '10.0.0.0/24'", "source": "CFN_LINT", "entity": { - "logicalId": "consumerlambdaFunctionBD0C2D50", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 185, - "startColumn": 5, - "endLine": 185, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs20.x", - "lifecycle": "deprecated" - } - }, - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1oneventE34C977A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 329, - "startColumn": 5, - "endLine": 329, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", + "propertyPath": "Properties.CidrBlock", + "category": "Resource", + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "SubnetA", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 10 + }, + "message": "Overlapping subnet CIDR 10.0.0.0/24" + } + ], + "ruleDescription": "Validate subnet CIDRs do not overlap with other subnets", + "phase": "LINT", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "extra": { + "cidr": "10.0.0.0/24" + } } }, { - "ruleId": "W2531", + "ruleId": "W3010", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "Avoid hardcoding availability zones 'us-east-1a'", "source": "CFN_LINT", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1iscompleteB42ABDBF", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 422, - "startColumn": 5, - "endLine": 422, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" - } + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 23, + "ruleDescription": "Availability zone properties should not be hardcoded", + "phase": "LINT" }, { - "ruleId": "W3005", + "ruleId": "W3010", "severity": "WARN", - "message": "'consumerlambdaFunctionServiceRole095C1C28' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "Avoid hardcoding availability zones 'us-east-1b'", "source": "CFN_LINT", "entity": { - "logicalId": "consumerlambdaFunctionBD0C2D50", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 188, - "startColumn": 4, - "endLine": 188, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 18, + "startColumn": 7, + "endLine": 18, + "endColumn": 23, + "ruleDescription": "Availability zone properties should not be hardcoded", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1oneventServiceRole606F1C54' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1oneventE34C977A", + "logicalId": "VPC", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 331, - "startColumn": 4, - "endLine": 331, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1iscompleteServiceRole046BF68A' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1iscompleteB42ABDBF", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 424, - "startColumn": 4, - "endLine": 424, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonEv7CD3D355' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonEv3DB60A38", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 602, - "startColumn": 4, - "endLine": 602, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkisCo31EA91F4' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkisCo57F822F2", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 770, - "startColumn": 4, - "endLine": 770, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonTi96D937B8' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonTi07114F31", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 938, - "startColumn": 4, - "endLine": 938, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 16, + "startColumn": 7, + "endLine": 16, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema2C960A5F' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema2520C928", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 1066, - "startColumn": 4, - "endLine": 1066, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3012", + "ruleId": "I9001", "severity": "INFO", - "message": "Logical ID 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonEv7CD3D355' is 248 characters - approaching the 256 character limit", - "source": "CFN_LINT", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonEv7CD3D355", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, - "category": "Structure", - "startLine": 435, - "startColumn": 3, - "endLine": 435, - "endColumn": 252, - "ruleDescription": "Resource name limit", - "phase": "LINT" + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 18, + "startColumn": 7, + "endLine": 18, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3012", + "ruleId": "I9040", "severity": "INFO", - "message": "Logical ID 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonEvA054414A' is 248 characters - approaching the 256 character limit", - "source": "CFN_LINT", + "message": "Resource 'VPC' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonEvA054414A", + "logicalId": "VPC", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::EC2::VPC" }, - "category": "Structure", - "startLine": 469, - "startColumn": 3, - "endLine": 469, - "endColumn": 252, - "ruleDescription": "Resource name limit", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3012", + "ruleId": "I9040", "severity": "INFO", - "message": "Logical ID 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonEv3DB60A38' is 248 characters - approaching the 256 character limit", - "source": "CFN_LINT", + "message": "Resource 'SubnetA' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonEv3DB60A38", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "category": "Structure", - "startLine": 559, - "startColumn": 3, - "endLine": 559, - "endColumn": 252, - "ruleDescription": "Resource name limit", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3012", + "ruleId": "I9040", "severity": "INFO", - "message": "Logical ID 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkisCo31EA91F4' is 248 characters - approaching the 256 character limit", - "source": "CFN_LINT", + "message": "Resource 'SubnetB' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkisCo31EA91F4", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, - "category": "Structure", - "startLine": 613, - "startColumn": 3, - "endLine": 613, - "endColumn": 252, - "ruleDescription": "Resource name limit", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/subnet_overlap_multi.yaml": { + "filePath": "bad/subnet_overlap_multi.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 4, + "warnings": 4, + "informational": 18, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I3012", - "severity": "INFO", - "message": "Logical ID 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkisCo1DFB897B' is 248 characters - approaching the 256 character limit", + "ruleId": "E3059", + "severity": "ERROR", + "message": "Subnet CIDR '172.16.0.0/16' is not within VPC CIDR '10.0.0.0/8'", "source": "CFN_LINT", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkisCo1DFB897B", + "logicalId": "SubnetC", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::EC2::Subnet" }, - "category": "Structure", - "startLine": 647, - "startColumn": 3, - "endLine": 647, - "endColumn": 252, - "ruleDescription": "Resource name limit", + "propertyPath": "Properties.CidrBlock", + "category": "Resource", + "startLine": 28, + "startColumn": 7, + "endLine": 28, + "endColumn": 16, + "ruleDescription": "Validate subnet CIDRs are within the CIDRs of the VPC", "phase": "LINT" }, { - "ruleId": "I3012", - "severity": "INFO", - "message": "Logical ID 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkisCo57F822F2' is 248 characters - approaching the 256 character limit", + "ruleId": "E3060", + "severity": "ERROR", + "message": "'10.0.0.0/16' overlaps with '10.0.0.0/8'", "source": "CFN_LINT", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkisCo57F822F2", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "category": "Structure", - "startLine": 730, - "startColumn": 3, - "endLine": 730, - "endColumn": 252, - "ruleDescription": "Resource name limit", - "phase": "LINT" + "propertyPath": "Properties.CidrBlock", + "category": "Resource", + "startLine": 22, + "startColumn": 7, + "endLine": 22, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "SubnetA", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 10 + }, + "message": "Overlapping subnet CIDR 10.0.0.0/8" + } + ], + "ruleDescription": "Validate subnet CIDRs do not overlap with other subnets", + "phase": "LINT", + "context": { + "extra": { + "cidr": "10.0.0.0/16" + } + } }, { - "ruleId": "I3012", - "severity": "INFO", - "message": "Logical ID 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonTi96D937B8' is 248 characters - approaching the 256 character limit", + "ruleId": "E3060", + "severity": "ERROR", + "message": "'10.0.1.0/24' overlaps with '10.0.0.0/16'", "source": "CFN_LINT", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonTi96D937B8", + "logicalId": "SubnetD", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, - "category": "Structure", - "startLine": 781, - "startColumn": 3, - "endLine": 781, - "endColumn": 252, - "ruleDescription": "Resource name limit", - "phase": "LINT" + "propertyPath": "Properties.CidrBlock", + "category": "Resource", + "startLine": 34, + "startColumn": 7, + "endLine": 34, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "SubnetB", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 10 + }, + "message": "Overlapping subnet CIDR 10.0.0.0/16" + } + ], + "ruleDescription": "Validate subnet CIDRs do not overlap with other subnets", + "phase": "LINT", + "context": { + "extra": { + "cidr": "10.0.1.0/24" + } + } }, { - "ruleId": "I3012", - "severity": "INFO", - "message": "Logical ID 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonTi243BAA69' is 248 characters - approaching the 256 character limit", + "ruleId": "E3060", + "severity": "ERROR", + "message": "'10.0.1.0/24' overlaps with '10.0.0.0/8'", "source": "CFN_LINT", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonTi243BAA69", + "logicalId": "SubnetD", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::EC2::Subnet" }, - "category": "Structure", - "startLine": 815, - "startColumn": 3, - "endLine": 815, - "endColumn": 252, - "ruleDescription": "Resource name limit", - "phase": "LINT" + "propertyPath": "Properties.CidrBlock", + "category": "Resource", + "startLine": 34, + "startColumn": 7, + "endLine": 34, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "SubnetA", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 10 + }, + "message": "Overlapping subnet CIDR 10.0.0.0/8" + } + ], + "ruleDescription": "Validate subnet CIDRs do not overlap with other subnets", + "phase": "LINT", + "context": { + "extra": { + "cidr": "10.0.1.0/24" + } + } }, { - "ruleId": "I3012", - "severity": "INFO", - "message": "Logical ID 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonTi07114F31' is 248 characters - approaching the 256 character limit", + "ruleId": "W3010", + "severity": "WARN", + "message": "Avoid hardcoding availability zones 'us-east-1a'", "source": "CFN_LINT", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonTi07114F31", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "category": "Structure", - "startLine": 898, - "startColumn": 3, - "endLine": 898, - "endColumn": 252, - "ruleDescription": "Resource name limit", + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 23, + "ruleDescription": "Availability zone properties should not be hardcoded", "phase": "LINT" }, { - "ruleId": "I3012", - "severity": "INFO", - "message": "Logical ID 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema2C960A5F' is 248 characters - approaching the 256 character limit", + "ruleId": "W3010", + "severity": "WARN", + "message": "Avoid hardcoding availability zones 'us-east-1b'", "source": "CFN_LINT", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema2C960A5F", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, - "category": "Structure", - "startLine": 949, - "startColumn": 3, - "endLine": 949, - "endColumn": 252, - "ruleDescription": "Resource name limit", + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 23, + "ruleDescription": "Availability zone properties should not be hardcoded", "phase": "LINT" }, { - "ruleId": "I3012", - "severity": "INFO", - "message": "Logical ID 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema34D41C85' is 248 characters - approaching the 256 character limit", + "ruleId": "W3010", + "severity": "WARN", + "message": "Avoid hardcoding availability zones 'us-east-1c'", "source": "CFN_LINT", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema34D41C85", + "logicalId": "SubnetC", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::EC2::Subnet" }, - "category": "Structure", - "startLine": 969, - "startColumn": 3, - "endLine": 969, - "endColumn": 252, - "ruleDescription": "Resource name limit", + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 29, + "startColumn": 7, + "endLine": 29, + "endColumn": 23, + "ruleDescription": "Availability zone properties should not be hardcoded", "phase": "LINT" }, { - "ruleId": "I3012", - "severity": "INFO", - "message": "Logical ID 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema2520C928' is 248 characters - approaching the 256 character limit", + "ruleId": "W3010", + "severity": "WARN", + "message": "Avoid hardcoding availability zones 'us-east-1d'", "source": "CFN_LINT", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema2520C928", + "logicalId": "SubnetD", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::EC2::Subnet" }, - "category": "Structure", - "startLine": 1034, - "startColumn": 3, - "endLine": 1034, - "endColumn": 252, - "ruleDescription": "Resource name limit", + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 23, + "ruleDescription": "Availability zone properties should not be hardcoded", "phase": "LINT" }, { - "ruleId": "I3012", + "ruleId": "I9001", "severity": "INFO", - "message": "Logical ID 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterCRAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FFB2C1A86' is 237 characters - approaching the 256 character limit", - "source": "CFN_LINT", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterCRAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FFB2C1A86", + "logicalId": "VPC", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::CustomResource" + "resourceType": "AWS::EC2::VPC" }, - "category": "Structure", - "startLine": 1074, - "startColumn": 3, - "endLine": 1074, - "endColumn": 241, - "ruleDescription": "Resource name limit", - "phase": "LINT" + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AdminSecretB9452750", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::SecretsManager::Secret" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-secretsmanager.git", + "startLine": 15, + "startColumn": 7, + "endLine": 15, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BrokerName' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RabbitMqBrokerE7F26F68", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::AmazonMQ::Broker" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.BrokerName", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 24, - "startColumn": 5, - "endLine": 24, + "startLine": 16, + "startColumn": 7, + "endLine": 16, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -16644,19 +16156,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DeploymentMode' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RabbitMqBrokerE7F26F68", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::AmazonMQ::Broker" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.DeploymentMode", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 20, + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16666,40 +16178,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'EncryptionOptions' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RabbitMqBrokerE7F26F68", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::AmazonMQ::Broker" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.EncryptionOptions", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 26, - "startColumn": 5, - "endLine": 26, - "endColumn": 23, + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'EngineType' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RabbitMqBrokerE7F26F68", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::AmazonMQ::Broker" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.EngineType", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 29, - "startColumn": 5, - "endLine": 29, + "startLine": 22, + "startColumn": 7, + "endLine": 22, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -16710,19 +16223,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PubliclyAccessible' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RabbitMqBrokerE7F26F68", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::AmazonMQ::Broker" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.PubliclyAccessible", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 32, - "startColumn": 5, - "endLine": 32, - "endColumn": 24, + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16732,137 +16245,153 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConsumerLambdaLogGroupD33C6265", + "logicalId": "SubnetC", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 69, - "startColumn": 5, - "endLine": 69, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "startLine": 27, + "startColumn": 7, + "endLine": 27, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1CA0799D4", + "logicalId": "SubnetC", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.EventSourceArn", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 202, - "startColumn": 5, - "endLine": 202, - "endColumn": 20, + "startLine": 28, + "startColumn": 7, + "endLine": 28, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt RabbitMqBrokerE7F26F68.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterCRAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FFB2C1A86", + "logicalId": "SubnetC", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::CustomResource" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ServiceToken", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 1077, - "startColumn": 5, - "endLine": 1077, - "endColumn": 18, + "startLine": 29, + "startColumn": 7, + "endLine": 29, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonEv3DB60A38.Arn" + "lifecycle": "create-only" } }, { - "ruleId": "I9003", + "ruleId": "I9001", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", + "entity": { + "logicalId": "SubnetD", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'AdminSecretB9452750' of type 'AWS::SecretsManager::Secret' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AdminSecretB9452750", + "logicalId": "SubnetD", "entityType": "Resource", - "resourceType": "AWS::SecretsManager::Secret" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 34, + "startColumn": 7, + "endLine": 34, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'RabbitMqBrokerE7F26F68' of type 'AWS::AmazonMQ::Broker' supports Tags but none are configured", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RabbitMqBrokerE7F26F68", + "logicalId": "SubnetD", "entityType": "Resource", - "resourceType": "AWS::AmazonMQ::Broker" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 22, - "startColumn": 4, - "endLine": 22, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ConsumerLambdaLogGroupD33C6265' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Resource 'VPC' of type 'AWS::EC2::VPC' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConsumerLambdaLogGroupD33C6265", + "logicalId": "VPC", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 68, - "startColumn": 4, - "endLine": 68, + "startLine": 10, + "startColumn": 5, + "endLine": 10, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -16870,19 +16399,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'consumerlambdaFunctionServiceRole095C1C28' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'SubnetA' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "consumerlambdaFunctionServiceRole095C1C28", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 80, - "startColumn": 4, - "endLine": 80, + "startLine": 14, + "startColumn": 5, + "endLine": 14, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -16890,19 +16419,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'consumerlambdaFunctionBD0C2D50' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'SubnetB' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "consumerlambdaFunctionBD0C2D50", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 165, - "startColumn": 4, - "endLine": 165, + "startLine": 20, + "startColumn": 5, + "endLine": 20, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -16910,19 +16439,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1CA0799D4' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", + "message": "Resource 'SubnetC' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1CA0799D4", + "logicalId": "SubnetC", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 201, - "startColumn": 4, - "endLine": 201, + "startLine": 26, + "startColumn": 5, + "endLine": 26, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -16930,241 +16459,536 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1oneventServiceRole606F1C54' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'SubnetD' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1oneventServiceRole606F1C54", + "logicalId": "SubnetD", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 229, - "startColumn": 4, - "endLine": 229, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1oneventE34C977A' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1oneventE34C977A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 309, - "startColumn": 4, - "endLine": 309, + "startLine": 32, + "startColumn": 5, + "endLine": 32, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/template.yaml": { + "filePath": "bad/template.yaml", + "status": "ERROR", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1iscompleteServiceRole046BF68A' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1iscompleteServiceRole046BF68A", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 344, - "startColumn": 4, - "endLine": 344, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleId": "F1101", + "severity": "FATAL", + "message": "YAML parse error: while parsing a block mapping, did not find expected key at byte 234 line 12 column 11", + "source": "SCHEMA", + "category": "Structure", + "startLine": 12, + "startColumn": 11, + "endLine": 12, + "endColumn": 11, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" + } + ] + }, + "bad/templates/base.yaml": { + "filePath": "bad/templates/base.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 2, + "errors": 2, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1iscompleteB42ABDBF' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1iscompleteB42ABDBF", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 402, - "startColumn": 4, - "endLine": 402, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "startLine": 4, + "startColumn": 1, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" + }, + { + "ruleId": "F0002", + "severity": "FATAL", + "message": "AWSTemplateFormatVersion must be '2010-09-09', got '2010-09-10'", + "source": "SCHEMA", + "propertyPath": "AWSTemplateFormatVersion", + "category": "Structure", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 25, + "ruleDescription": "AWSTemplateFormatVersion must be 2010-09-09", + "phase": "SCHEMA" + }, + { + "ruleId": "E1005", + "severity": "ERROR", + "message": "Transform object is missing required 'Name' property", + "source": "CFN_LINT", + "propertyPath": "Transform", + "category": "Structure", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate Transform configuration", + "phase": "PARSE" + }, + { + "ruleId": "E1005", + "severity": "ERROR", + "message": "Transform object has unknown property 'key' - expected one of 'Name', 'Parameters'", + "source": "CFN_LINT", + "propertyPath": "Transform", + "category": "Structure", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 6, + "ruleDescription": "Validate Transform configuration", + "phase": "PARSE" + } + ] + }, + "bad/templates/base_date.yaml": { + "filePath": "bad/templates/base_date.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 2, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" + }, + { + "ruleId": "F0002", + "severity": "FATAL", + "message": "AWSTemplateFormatVersion must be '2010-09-09', got '2010-09-10'", + "source": "SCHEMA", + "propertyPath": "AWSTemplateFormatVersion", + "category": "Structure", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 25, + "ruleDescription": "AWSTemplateFormatVersion must be 2010-09-09", + "phase": "SCHEMA" + } + ] + }, + "bad/templates/base_null.yaml": { + "filePath": "bad/templates/base_null.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 2, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" + }, + { + "ruleId": "F0002", + "severity": "FATAL", + "message": "AWSTemplateFormatVersion must be '2010-09-09', got null", + "source": "SCHEMA", + "propertyPath": "AWSTemplateFormatVersion", + "category": "Structure", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 25, + "ruleDescription": "AWSTemplateFormatVersion must be 2010-09-09", + "phase": "PARSE" + }, + { + "ruleId": "E1005", + "severity": "ERROR", + "message": "Transform must be a transform name, a list of transforms, or a {Name, Parameters} object, got null", + "source": "CFN_LINT", + "propertyPath": "Transform", + "category": "Structure", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate Transform configuration", + "phase": "PARSE" + } + ] + }, + "bad/templates/description_object.yaml": { + "filePath": "bad/templates/description_object.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F1004", + "severity": "FATAL", + "message": "Description must be a string, got a list", + "source": "SCHEMA", + "propertyPath": "Description", + "category": "Structure", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Description must be a string", + "phase": "PARSE" + } + ] + }, + "bad/templates/transform_invalid_entries.yaml": { + "filePath": "bad/templates/transform_invalid_entries.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 3, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E1005", + "severity": "ERROR", + "message": "Transform entry must be a transform name or a {Name, Parameters} object, got a number", + "source": "CFN_LINT", + "propertyPath": "Transform", + "category": "Structure", + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 6, + "ruleDescription": "Validate Transform configuration", + "phase": "PARSE" + }, + { + "ruleId": "E1005", + "severity": "ERROR", + "message": "Transform 'Parameters' must be an object, got a string", + "source": "CFN_LINT", + "propertyPath": "Transform", + "category": "Structure", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Validate Transform configuration", + "phase": "PARSE" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonEv7CD3D355' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonEv7CD3D355", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 437, - "startColumn": 4, - "endLine": 437, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleId": "E1005", + "severity": "ERROR", + "message": "Transform 'Name' must be a string, got a list", + "source": "CFN_LINT", + "propertyPath": "Transform", + "category": "Structure", + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 9, + "ruleDescription": "Validate Transform configuration", + "phase": "PARSE" + } + ] + }, + "bad/transform/auto_publish_alias.yaml": { + "filePath": "bad/transform/auto_publish_alias.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonEv3DB60A38' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [SkillFunctionExtraItems] is invalid. Type of property 'AutoPublishAlias' is invalid.", + "source": "CFN_LINT", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonEv3DB60A38", + "logicalId": "SkillFunctionExtraItems", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 561, - "startColumn": 4, - "endLine": 561, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties/AutoPublishAlias", + "category": "Structure", + "startLine": 22, + "startColumn": 7, + "endLine": 22, + "endColumn": 23, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkisCo31EA91F4' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [SkillFunctionNotRef] is invalid. 'AutoPublishAlias' must be a string or a Ref to a template parameter", + "source": "CFN_LINT", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkisCo31EA91F4", + "logicalId": "SkillFunctionNotRef", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 615, - "startColumn": 4, - "endLine": 615, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties/AutoPublishAlias", + "category": "Structure", + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 23, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", "phase": "LINT" + } + ] + }, + "bad/transform/no_properties.yaml": { + "filePath": "bad/transform/no_properties.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkisCo57F822F2' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [MyApi] is invalid. Missing required property 'StageName'.", + "source": "CFN_LINT", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkisCo57F822F2", + "logicalId": "MyApi", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Serverless::Api" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 732, - "startColumn": 4, - "endLine": 732, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties/StageName", + "category": "Structure", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 8, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", "phase": "LINT" + } + ] + }, + "bad/transform_serverless_auto_publish_alias.yaml": { + "filePath": "bad/transform_serverless_auto_publish_alias.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonTi96D937B8' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [ProcessorFunction] is invalid. 'AutoPublishAlias' must be a string or a Ref to a template parameter", + "source": "CFN_LINT", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonTi96D937B8", + "logicalId": "ProcessorFunction", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 783, - "startColumn": 4, - "endLine": 783, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties/AutoPublishAlias", + "category": "Structure", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 23, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", "phase": "LINT" + } + ] + }, + "bad/transform_serverless_template.yaml": { + "filePath": "bad/transform_serverless_template.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 6, + "counts": { + "fatal": 0, + "errors": 3, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonTi07114F31' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [myFunctionMyTimer] is invalid. Missing required property 'Schedule'.", + "source": "CFN_LINT", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonTi07114F31", + "logicalId": "myFunction", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 900, - "startColumn": 4, - "endLine": 900, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties/Events/MyTimer", + "category": "Structure", + "startLine": 39, + "startColumn": 9, + "endLine": 39, + "endColumn": 16, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema2C960A5F' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [ExampleLayer] is invalid. Missing required property 'ContentUri'.", + "source": "CFN_LINT", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema2C960A5F", + "logicalId": "ExampleLayer", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Serverless::LayerVersion" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 951, - "startColumn": 4, - "endLine": 951, + "propertyPath": "Properties/ContentUri", + "category": "Structure", + "startLine": 50, + "startColumn": 3, + "endLine": 50, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema2520C928' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [AppName] is invalid. Resource is missing the required [Location] property.", + "source": "CFN_LINT", "entity": { - "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema2520C928", + "logicalId": "AppName", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::Serverless::Application" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1036, - "startColumn": 4, - "endLine": 1036, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties/Location", + "category": "Structure", + "startLine": 56, + "startColumn": 3, + "endLine": 56, + "endColumn": 10, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", "phase": "LINT" } ] diff --git a/src/resources/expected/validation_reports4.json b/src/resources/expected/validation_reports4.json index 40e153c1..d61a3e43 100644 --- a/src/resources/expected/validation_reports4.json +++ b/src/resources/expected/validation_reports4.json @@ -1,14 +1,14 @@ { - "cdk/amplify-console-app--AmplifyConsoleApp.template.json": { - "filePath": "cdk/amplify-console-app--AmplifyConsoleApp.template.json", + "bad/undefined_condition.yaml": { + "filePath": "bad/undefined_condition.yaml", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 0, + "errors": 1, "warnings": 0, - "informational": 4, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -17,104 +17,260 @@ }, "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "E8002", + "severity": "ERROR", + "message": "Condition 'DoesNotExist' referenced by resource 'R' is not defined", + "source": "SCHEMA", + "entity": { + "logicalId": "R", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "category": "Structure", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 4, + "ruleDescription": "Condition referenced by resource is not defined", + "phase": "PARSE" + }, + { + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AppId' is create-only; updating it will cause resource replacement", + "message": "Resource 'R' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MasterBranch", + "logicalId": "R", "entityType": "Resource", - "resourceType": "AWS::Amplify::Branch" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.AppId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-amplify", - "ruleDescription": "Create-only property updated triggers resource replacement", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 4, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/unique_items.yaml": { + "filePath": "bad/unique_items.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 1, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3002", + "severity": "FATAL", + "message": "Additional properties are not allowed ('AvailabilityZones' was unexpected)", + "source": "SCHEMA", + "entity": { + "logicalId": "R", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::WaitConditionHandle" + }, + "propertyPath": "Properties.AvailabilityZones", + "category": "Schema", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 24, + "ruleDescription": "Additional properties are not allowed", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt testapp.AppId" + "property": "AvailabilityZones", + "extra": { + "allowed_properties": [ + "Id" + ] + } } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BranchName' is create-only; updating it will cause resource replacement", + "ruleId": "W9007", + "severity": "WARN", + "message": "Array property 'AvailabilityZones' contains duplicate values", "source": "ENGINE", "entity": { - "logicalId": "MasterBranch", + "logicalId": "R", "entityType": "Resource", - "resourceType": "AWS::Amplify::Branch" + "resourceType": "AWS::CloudFormation::WaitConditionHandle" }, - "propertyPath": "Properties.BranchName", + "propertyPath": "Properties.AvailabilityZones", "category": "Best Practice", - "startLine": 23, - "startColumn": 5, - "endLine": 23, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-amplify", - "ruleDescription": "Create-only property updated triggers resource replacement", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 24, + "ruleDescription": "Array items must be unique when required", + "phase": "LINT" + } + ] + }, + "bad/unknown_properties.yaml": { + "filePath": "bad/unknown_properties.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 2, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3002", + "severity": "FATAL", + "message": "Additional properties are not allowed ('FakeProperty' was unexpected)", + "source": "SCHEMA", + "entity": { + "logicalId": "BadBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.FakeProperty", + "category": "Schema", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 19, + "ruleDescription": "Additional properties are not allowed", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "property": "FakeProperty", + "extra": { + "allowed_properties": [ + "AbacStatus", + "AccelerateConfiguration", + "AccessControl", + "AnalyticsConfigurations", + "Arn", + "BucketEncryption", + "BucketName", + "BucketNamePrefix", + "BucketNamespace", + "CorsConfiguration", + "DomainName", + "DualStackDomainName", + "IntelligentTieringConfigurations", + "InventoryConfigurations", + "LifecycleConfiguration", + "LoggingConfiguration", + "MetadataConfiguration", + "MetadataTableConfiguration", + "MetricsConfigurations", + "NotificationConfiguration", + "ObjectLockConfiguration", + "ObjectLockEnabled", + "OwnershipControls", + "PublicAccessBlockConfiguration", + "RegionalDomainName", + "ReplicationConfiguration", + "Tags", + "VersioningConfiguration", + "WebsiteConfiguration", + "WebsiteURL" + ] + } } }, { - "ruleId": "I9040", + "ruleId": "F3006", + "severity": "FATAL", + "message": "Unknown resource type 'AWS::Fake::NonExistent'", + "source": "SCHEMA", + "entity": { + "logicalId": "FakeResource", + "entityType": "Resource", + "resourceType": "AWS::Fake::NonExistent" + }, + "category": "Schema", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 15, + "ruleDescription": "AWS resource type must be recognized and available in the configured region", + "phase": "SCHEMA", + "context": { + "extra": { + "resource_type": "AWS::Fake::NonExistent" + } + } + }, + { + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'testapp' of type 'AWS::Amplify::App' supports Tags but none are configured", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "testapp", + "logicalId": "BadBucket", "entityType": "Resource", - "resourceType": "AWS::Amplify::App" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MasterBranch' of type 'AWS::Amplify::Branch' supports Tags but none are configured", + "message": "Resource 'BadBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MasterBranch", + "logicalId": "BadBucket", "entityType": "Resource", - "resourceType": "AWS::Amplify::Branch" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 16, - "startColumn": 4, - "endLine": 16, + "startLine": 9, + "startColumn": 5, + "endLine": 9, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/api-cors-lambda-crud-dynamodb--ApiLambdaCrudDynamoDBExample.template.json": { - "filePath": "cdk/api-cors-lambda-crud-dynamodb--ApiLambdaCrudDynamoDBExample.template.json", + "cdk/DemoStack.template.json": { + "filePath": "cdk/DemoStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 41, + "resourcesScanned": 8, "counts": { - "fatal": 0, - "errors": 0, - "warnings": 10, - "informational": 86, + "fatal": 1, + "errors": 4, + "warnings": 3, + "informational": 16, "debug": 0 }, "suppressed": 0, @@ -123,73 +279,145 @@ }, "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'ProvisionedThroughput' is a required property (from extension)", + "source": "SCHEMA", + "entity": { + "logicalId": "DataTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties", + "suggestedFix": "Add 'ProvisionedThroughput'", + "category": "Schema", + "startLine": 72, + "startColumn": 4, + "endLine": 72, + "endColumn": 15, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "E3045", + "severity": "ERROR", + "message": "A bucket with 'AccessControl' set should also have at least one 'OwnershipControl' configured", "source": "CFN_LINT", "entity": { - "logicalId": "getOneItemFunctionE3257B22", + "logicalId": "DataBucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 145, + "propertyPath": "Properties", + "suggestedFix": "Add OwnershipControls to the bucket when using AccessControl", + "category": "Resource", + "startLine": 40, + "startColumn": 4, + "endLine": 40, + "endColumn": 15, + "ruleDescription": "Validate AccessControl are set with OwnershipControls", + "phase": "LINT" + }, + { + "ruleId": "E3505", + "severity": "ERROR", + "message": "Queue visibility timeout (10) is less than Function timeout (60) seconds", + "source": "CFN_LINT", + "entity": { + "logicalId": "TaskQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.VisibilityTimeout", + "suggestedFix": "Set the SQS VisibilityTimeout to at least the Lambda function Timeout", + "category": "Resource", + "startLine": 118, "startColumn": 5, - "endLine": 145, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", + "endLine": 118, + "endColumn": 23, + "ruleDescription": "Validate SQS VisibilityTimeout is greater than a function's Timeout", + "phase": "LINT", "context": { - "actualValue": "nodejs20.x", - "lifecycle": "deprecated" + "extra": { + "visibility_timeout": 10 + } } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "ruleId": "E3639", + "severity": "ERROR", + "message": "ProvisionedThroughput is required when BillingMode is 'PROVISIONED'", "source": "CFN_LINT", "entity": { - "logicalId": "getAllItemsFunction0B7A913E", + "logicalId": "DataTable", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 273, - "startColumn": 5, - "endLine": 273, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs20.x", - "lifecycle": "deprecated" + "propertyPath": "Properties.ProvisionedThroughput", + "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", + "category": "Resource", + "startLine": 72, + "startColumn": 4, + "endLine": 72, + "endColumn": 15, + "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", + "phase": "LINT" + }, + { + "ruleId": "E9002", + "severity": "ERROR", + "message": "FromPort 443 is greater than ToPort 80", + "source": "ENGINE", + "entity": { + "logicalId": "AppSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.1", + "suggestedFix": "Set FromPort to a value less than or equal to ToPort", + "category": "Resource", + "startLine": 103, + "startColumn": 6, + "endLine": 103, + "endColumn": 7, + "ruleDescription": "SecurityGroup FromPort must be <= ToPort for the TCP and UDP protocols", + "phase": "LINT", + "context": { + "actualValue": [ + { + "CidrIp": "0.0.0.0/0", + "FromPort": 22, + "IpProtocol": "tcp", + "ToPort": 22 + }, + { + "CidrIp": "10.0.0.0/8", + "FromPort": 443, + "IpProtocol": "tcp", + "ToPort": 80 + } + ] } }, { - "ruleId": "W2531", + "ruleId": "W2508", "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", + "source": "ENGINE", "entity": { - "logicalId": "createItemFunction8D47E48A", + "logicalId": "AppSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 401, + "propertyPath": "Properties.SecurityGroupIngress", + "suggestedFix": "Restrict the CIDR range to specific IP addresses", + "category": "Security", + "startLine": 96, "startColumn": 5, - "endLine": 401, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs20.x", - "lifecycle": "deprecated" - } + "endLine": 96, + "endColumn": 26, + "ruleDescription": "Security group allows open access to sensitive port", + "phase": "LINT" }, { "ruleId": "W2531", @@ -197,15 +425,15 @@ "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "updateItemFunction59415205", + "logicalId": "AppFunction", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 529, + "startLine": 63, "startColumn": 5, - "endLine": 529, + "endLine": 63, "endColumn": 13, "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", @@ -215,126 +443,117 @@ } }, { - "ruleId": "W2531", + "ruleId": "W3045", "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "AccessControl property is deprecated. Use bucket policies instead", "source": "CFN_LINT", "entity": { - "logicalId": "deleteItemFunction2918B1B0", + "logicalId": "DataBucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Runtime", + "propertyPath": "Properties.AccessControl", + "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", "category": "Deprecation", - "startLine": 657, + "startLine": 41, "startColumn": 5, - "endLine": 657, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", + "endLine": 41, + "endColumn": 19, + "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", + "phase": "LINT", "context": { - "actualValue": "nodejs20.x", - "lifecycle": "deprecated" + "actualValue": "PublicRead" } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'getOneItemFunctionServiceRoleCFD54796' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "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": "getOneItemFunctionE3257B22", + "logicalId": "DataTable", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 147, - "startColumn": 4, - "endLine": 147, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 70, + "startColumn": 3, + "endLine": 70, + "endColumn": 13, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'getAllItemsFunctionServiceRoleCC084440' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "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": "getAllItemsFunction0B7A913E", + "logicalId": "DataTable", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 275, - "startColumn": 4, - "endLine": 275, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 70, + "startColumn": 3, + "endLine": 70, + "endColumn": 13, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'createItemFunctionServiceRole1BBF2178' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "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": "createItemFunction8D47E48A", + "logicalId": "TaskQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 403, - "startColumn": 4, - "endLine": 403, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 115, + "startColumn": 3, + "endLine": 115, + "endColumn": 13, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'updateItemFunctionServiceRole40035396' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "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": "updateItemFunction59415205", + "logicalId": "TaskQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 531, - "startColumn": 4, - "endLine": 531, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 115, + "startColumn": 3, + "endLine": 115, + "endColumn": 13, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'deleteItemFunctionServiceRole5C201FCC' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "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": "deleteItemFunction2918B1B0", + "logicalId": "TaskQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 659, + "startLine": 117, "startColumn": 4, - "endLine": 659, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 117, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { @@ -343,15 +562,15 @@ "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "items07D08F4B", + "logicalId": "DataTable", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 12, + "startLine": 80, "startColumn": 5, - "endLine": 12, + "endLine": 80, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -365,15 +584,15 @@ "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "items07D08F4B", + "logicalId": "DataTable", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 22, + "startLine": 86, "startColumn": 5, - "endLine": 22, + "endLine": 86, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -384,759 +603,667 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "itemsApiDeploymentFEC31BD04feb54db86e2f8eed94e1b28001143ce", + "logicalId": "AppSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 738, + "startLine": 95, "startColumn": 5, - "endLine": 738, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 95, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApi28111E1C'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "itemsApiDeploymentStageprodE77B897D", + "logicalId": "QueueMapping", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.EventSourceArn", "category": "Best Practice", - "startLine": 764, + "startLine": 127, "startColumn": 5, - "endLine": 764, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 127, + "endColumn": 20, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApi28111E1C'" + "resolutionSource": "GetAtt TaskQueue.Arn" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Resource 'AppRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemsApiDeploymentStageprodE77B897D", + "logicalId": "AppRole", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 767, - "startColumn": 5, - "endLine": 767, + "startLine": 5, + "startColumn": 4, + "endLine": 5, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Resource 'DataBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitems9015DBED", + "logicalId": "DataBucket", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 779, - "startColumn": 5, - "endLine": 779, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt itemsApi28111E1C.RootResourceId" - } + "startLine": 40, + "startColumn": 4, + "endLine": 40, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Resource 'AppFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitems9015DBED", + "logicalId": "AppFunction", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 785, - "startColumn": 5, - "endLine": 785, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 52, + "startColumn": 4, + "endLine": 52, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'DataTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitems9015DBED", + "logicalId": "DataTable", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 786, - "startColumn": 5, - "endLine": 786, + "startLine": 72, + "startColumn": 4, + "endLine": 72, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApi28111E1C'" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Resource 'AppSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitems2A648972", + "logicalId": "AppSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 797, - "startColumn": 5, - "endLine": 797, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 94, + "startColumn": 4, + "endLine": 94, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'TaskQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitems2A648972", + "logicalId": "TaskQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 798, - "startColumn": 5, - "endLine": 798, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt getAllItemsFunction0B7A913E.Arn" - } + "startLine": 117, + "startColumn": 4, + "endLine": 117, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Resource 'QueueMapping' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitems2A648972", + "logicalId": "QueueMapping", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 804, - "startColumn": 5, - "endLine": 804, + "startLine": 126, + "startColumn": 4, + "endLine": 126, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/amazon-mq-rabbitmq-lambda--AmazonMqRabbitmqLambdaStack.template.json": { + "filePath": "cdk/amazon-mq-rabbitmq-lambda--AmazonMqRabbitmqLambdaStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 27, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 10, + "informational": 41, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "itemsApiitemsGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitems2A648972", + "logicalId": "consumerlambdaFunctionBD0C2D50", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 805, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 185, "startColumn": 5, - "endLine": 805, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 185, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/{ref:itemsApiDeploymentStageprodE77B897D}/GET/items)" + "actualValue": "nodejs20.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "itemsApiitemsGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsF4364FB2", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1oneventE34C977A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 841, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 329, "startColumn": 5, - "endLine": 841, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 329, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "itemsApiitemsGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsF4364FB2", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1iscompleteB42ABDBF", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 842, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 422, "startColumn": 5, - "endLine": 842, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 422, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt getAllItemsFunction0B7A913E.Arn" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'consumerlambdaFunctionServiceRole095C1C28' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "itemsApiitemsGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsF4364FB2", + "logicalId": "consumerlambdaFunctionBD0C2D50", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Principal", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 848, - "startColumn": 5, - "endLine": 848, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 188, + "startColumn": 4, + "endLine": 188, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1oneventServiceRole606F1C54' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "itemsApiitemsGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsF4364FB2", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1oneventE34C977A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 849, - "startColumn": 5, - "endLine": 849, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/test-invoke-stage/GET/items)" - } + "startLine": 331, + "startColumn": 4, + "endLine": 331, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1iscompleteServiceRole046BF68A' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "itemsApiitemsGET59B0F78A", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1iscompleteB42ABDBF", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 882, - "startColumn": 5, - "endLine": 882, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 424, + "startColumn": 4, + "endLine": 424, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonEv7CD3D355' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "itemsApiitemsGET59B0F78A", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonEv3DB60A38", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 910, - "startColumn": 5, - "endLine": 910, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApiitems9015DBED'" - } + "startLine": 602, + "startColumn": 4, + "endLine": 602, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkisCo31EA91F4' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "itemsApiitemsGET59B0F78A", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkisCo57F822F2", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 913, - "startColumn": 5, - "endLine": 913, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApi28111E1C'" - } + "startLine": 770, + "startColumn": 4, + "endLine": 770, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonTi96D937B8' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "itemsApiitemsPOSTApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitems7DA2B753", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonTi07114F31", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Action", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 924, - "startColumn": 5, - "endLine": 924, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 938, + "startColumn": 4, + "endLine": 938, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema2C960A5F' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", + "source": "CFN_LINT", "entity": { - "logicalId": "itemsApiitemsPOSTApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitems7DA2B753", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema2520C928", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 925, - "startColumn": 5, - "endLine": 925, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt createItemFunction8D47E48A.Arn" - } + "startLine": 1066, + "startColumn": 4, + "endLine": 1066, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3012", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Logical ID 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonEv7CD3D355' is 248 characters - approaching the 256 character limit", + "source": "CFN_LINT", "entity": { - "logicalId": "itemsApiitemsPOSTApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitems7DA2B753", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonEv7CD3D355", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 931, - "startColumn": 5, - "endLine": 931, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "category": "Structure", + "startLine": 435, + "startColumn": 3, + "endLine": 435, + "endColumn": 252, + "ruleDescription": "Resource name limit", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3012", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Logical ID 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonEvA054414A' is 248 characters - approaching the 256 character limit", + "source": "CFN_LINT", "entity": { - "logicalId": "itemsApiitemsPOSTApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitems7DA2B753", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonEvA054414A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 932, - "startColumn": 5, - "endLine": 932, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/{ref:itemsApiDeploymentStageprodE77B897D}/POST/items)" - } + "category": "Structure", + "startLine": 469, + "startColumn": 3, + "endLine": 469, + "endColumn": 252, + "ruleDescription": "Resource name limit", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3012", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Logical ID 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonEv3DB60A38' is 248 characters - approaching the 256 character limit", + "source": "CFN_LINT", "entity": { - "logicalId": "itemsApiitemsPOSTApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitemsAE25CBB6", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonEv3DB60A38", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 968, - "startColumn": 5, - "endLine": 968, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "category": "Structure", + "startLine": 559, + "startColumn": 3, + "endLine": 559, + "endColumn": 252, + "ruleDescription": "Resource name limit", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3012", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Logical ID 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkisCo31EA91F4' is 248 characters - approaching the 256 character limit", + "source": "CFN_LINT", "entity": { - "logicalId": "itemsApiitemsPOSTApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitemsAE25CBB6", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkisCo31EA91F4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 969, - "startColumn": 5, - "endLine": 969, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt createItemFunction8D47E48A.Arn" - } + "category": "Structure", + "startLine": 613, + "startColumn": 3, + "endLine": 613, + "endColumn": 252, + "ruleDescription": "Resource name limit", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3012", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Logical ID 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkisCo1DFB897B' is 248 characters - approaching the 256 character limit", + "source": "CFN_LINT", "entity": { - "logicalId": "itemsApiitemsPOSTApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitemsAE25CBB6", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkisCo1DFB897B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 975, - "startColumn": 5, - "endLine": 975, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "category": "Structure", + "startLine": 647, + "startColumn": 3, + "endLine": 647, + "endColumn": 252, + "ruleDescription": "Resource name limit", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3012", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Logical ID 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkisCo57F822F2' is 248 characters - approaching the 256 character limit", + "source": "CFN_LINT", "entity": { - "logicalId": "itemsApiitemsPOSTApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitemsAE25CBB6", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkisCo57F822F2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 976, - "startColumn": 5, - "endLine": 976, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/test-invoke-stage/POST/items)" - } + "category": "Structure", + "startLine": 730, + "startColumn": 3, + "endLine": 730, + "endColumn": 252, + "ruleDescription": "Resource name limit", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3012", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Logical ID 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonTi96D937B8' is 248 characters - approaching the 256 character limit", + "source": "CFN_LINT", "entity": { - "logicalId": "itemsApiitemsPOSTDD3E83D0", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonTi96D937B8", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.HttpMethod", - "category": "Best Practice", - "startLine": 1009, - "startColumn": 5, - "endLine": 1009, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "category": "Structure", + "startLine": 781, + "startColumn": 3, + "endLine": 781, + "endColumn": 252, + "ruleDescription": "Resource name limit", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3012", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Logical ID 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonTi243BAA69' is 248 characters - approaching the 256 character limit", + "source": "CFN_LINT", "entity": { - "logicalId": "itemsApiitemsPOSTDD3E83D0", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonTi243BAA69", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.ResourceId", - "category": "Best Practice", - "startLine": 1037, - "startColumn": 5, - "endLine": 1037, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApiitems9015DBED'" - } + "category": "Structure", + "startLine": 815, + "startColumn": 3, + "endLine": 815, + "endColumn": 252, + "ruleDescription": "Resource name limit", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3012", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Logical ID 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonTi07114F31' is 248 characters - approaching the 256 character limit", + "source": "CFN_LINT", "entity": { - "logicalId": "itemsApiitemsPOSTDD3E83D0", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonTi07114F31", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 1040, - "startColumn": 5, - "endLine": 1040, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApi28111E1C'" - } + "category": "Structure", + "startLine": 898, + "startColumn": 3, + "endLine": 898, + "endColumn": 252, + "ruleDescription": "Resource name limit", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3012", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Logical ID 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema2C960A5F' is 248 characters - approaching the 256 character limit", + "source": "CFN_LINT", "entity": { - "logicalId": "itemsApiitemsOPTIONSB46B4D53", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema2C960A5F", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.HttpMethod", - "category": "Best Practice", - "startLine": 1052, - "startColumn": 5, - "endLine": 1052, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "category": "Structure", + "startLine": 949, + "startColumn": 3, + "endLine": 949, + "endColumn": 252, + "ruleDescription": "Resource name limit", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3012", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Logical ID 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema34D41C85' is 248 characters - approaching the 256 character limit", + "source": "CFN_LINT", "entity": { - "logicalId": "itemsApiitemsOPTIONSB46B4D53", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema34D41C85", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.ResourceId", - "category": "Best Practice", - "startLine": 1082, - "startColumn": 5, - "endLine": 1082, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApiitems9015DBED'" - } + "category": "Structure", + "startLine": 969, + "startColumn": 3, + "endLine": 969, + "endColumn": 252, + "ruleDescription": "Resource name limit", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3012", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Logical ID 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema2520C928' is 248 characters - approaching the 256 character limit", + "source": "CFN_LINT", "entity": { - "logicalId": "itemsApiitemsOPTIONSB46B4D53", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema2520C928", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 1085, - "startColumn": 5, - "endLine": 1085, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApi28111E1C'" - } + "category": "Structure", + "startLine": 1034, + "startColumn": 3, + "endLine": 1034, + "endColumn": 252, + "ruleDescription": "Resource name limit", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3012", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Logical ID 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterCRAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FFB2C1A86' is 237 characters - approaching the 256 character limit", + "source": "CFN_LINT", "entity": { - "logicalId": "itemsApiitemsidA29927C2", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterCRAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FFB2C1A86", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::CloudFormation::CustomResource" }, - "propertyPath": "Properties.ParentId", - "category": "Best Practice", - "startLine": 1096, - "startColumn": 5, - "endLine": 1096, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApiitems9015DBED'" - } + "category": "Structure", + "startLine": 1074, + "startColumn": 3, + "endLine": 1074, + "endColumn": 241, + "ruleDescription": "Resource name limit", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidA29927C2", + "logicalId": "AdminSecretB9452750", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::SecretsManager::Secret" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 1099, + "startLine": 12, "startColumn": 5, - "endLine": 1099, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 12, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-secretsmanager.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -1146,43 +1273,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'BrokerName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidA29927C2", + "logicalId": "RabbitMqBrokerE7F26F68", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::AmazonMQ::Broker" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.BrokerName", "category": "Best Practice", - "startLine": 1100, + "startLine": 24, "startColumn": 5, - "endLine": 1100, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 24, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApi28111E1C'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'DeploymentMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsid6D54AF22", + "logicalId": "RabbitMqBrokerE7F26F68", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AmazonMQ::Broker" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.DeploymentMode", "category": "Best Practice", - "startLine": 1111, + "startLine": 25, "startColumn": 5, - "endLine": 1111, - "endColumn": 12, + "endLine": 25, + "endColumn": 20, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -1192,42 +1317,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'EncryptionOptions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsid6D54AF22", + "logicalId": "RabbitMqBrokerE7F26F68", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AmazonMQ::Broker" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.EncryptionOptions", "category": "Best Practice", - "startLine": 1112, + "startLine": 26, "startColumn": 5, - "endLine": 1112, - "endColumn": 18, + "endLine": 26, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt getOneItemFunctionE3257B22.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'EngineType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsid6D54AF22", + "logicalId": "RabbitMqBrokerE7F26F68", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AmazonMQ::Broker" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.EngineType", "category": "Best Practice", - "startLine": 1118, + "startLine": 29, "startColumn": 5, - "endLine": 1118, - "endColumn": 15, + "endLine": 29, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -1237,42 +1361,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'PubliclyAccessible' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsid6D54AF22", + "logicalId": "RabbitMqBrokerE7F26F68", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AmazonMQ::Broker" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.PubliclyAccessible", "category": "Best Practice", - "startLine": 1119, + "startLine": 32, "startColumn": 5, - "endLine": 1119, - "endColumn": 15, + "endLine": 32, + "endColumn": 24, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/{ref:itemsApiDeploymentStageprodE77B897D}/GET/items/*)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsidCA08693A", + "logicalId": "ConsumerLambdaLogGroupD33C6265", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 1155, + "startLine": 69, "startColumn": 5, - "endLine": 1155, - "endColumn": 12, + "endLine": 69, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -1282,1053 +1406,754 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsidCA08693A", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1CA0799D4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.EventSourceArn", "category": "Best Practice", - "startLine": 1156, + "startLine": 202, "startColumn": 5, - "endLine": 1156, - "endColumn": 18, + "endLine": 202, + "endColumn": 20, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt getOneItemFunctionE3257B22.Arn" + "resolutionSource": "GetAtt RabbitMqBrokerE7F26F68.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsidCA08693A", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterCRAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FFB2C1A86", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::CloudFormation::CustomResource" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.ServiceToken", "category": "Best Practice", - "startLine": 1162, + "startLine": 1077, "startColumn": 5, - "endLine": 1162, - "endColumn": 15, + "endLine": 1077, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonEv3DB60A38.Arn" } }, { - "ruleId": "I9001", + "ruleId": "I9003", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsidCA08693A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 1163, - "startColumn": 5, - "endLine": 1163, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/test-invoke-stage/GET/items/*)" - } + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Resource 'AdminSecretB9452750' of type 'AWS::SecretsManager::Secret' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidGET38A333A8", + "logicalId": "AdminSecretB9452750", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::SecretsManager::Secret" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1196, - "startColumn": 5, - "endLine": 1196, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Resource 'RabbitMqBrokerE7F26F68' of type 'AWS::AmazonMQ::Broker' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidGET38A333A8", + "logicalId": "RabbitMqBrokerE7F26F68", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::AmazonMQ::Broker" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1224, - "startColumn": 5, - "endLine": 1224, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApiitemsidA29927C2'" - } + "startLine": 22, + "startColumn": 4, + "endLine": 22, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'ConsumerLambdaLogGroupD33C6265' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidGET38A333A8", + "logicalId": "ConsumerLambdaLogGroupD33C6265", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1227, - "startColumn": 5, - "endLine": 1227, + "startLine": 68, + "startColumn": 4, + "endLine": 68, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApi28111E1C'" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Resource 'consumerlambdaFunctionServiceRole095C1C28' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidPATCHApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsidEE9531C0", + "logicalId": "consumerlambdaFunctionServiceRole095C1C28", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1238, - "startColumn": 5, - "endLine": 1238, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 80, + "startColumn": 4, + "endLine": 80, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'consumerlambdaFunctionBD0C2D50' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidPATCHApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsidEE9531C0", + "logicalId": "consumerlambdaFunctionBD0C2D50", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1239, - "startColumn": 5, - "endLine": 1239, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt updateItemFunction59415205.Arn" - } + "startLine": 165, + "startColumn": 4, + "endLine": 165, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Resource 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1CA0799D4' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidPATCHApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsidEE9531C0", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1CA0799D4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1245, - "startColumn": 5, - "endLine": 1245, + "startLine": 201, + "startColumn": 4, + "endLine": 201, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1oneventServiceRole606F1C54' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidPATCHApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsidEE9531C0", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1oneventServiceRole606F1C54", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1246, - "startColumn": 5, - "endLine": 1246, + "startLine": 229, + "startColumn": 4, + "endLine": 229, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/{ref:itemsApiDeploymentStageprodE77B897D}/PATCH/items/*)" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Resource 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1oneventE34C977A' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidPATCHApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsid513A5711", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1oneventE34C977A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1282, - "startColumn": 5, - "endLine": 1282, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 309, + "startColumn": 4, + "endLine": 309, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1iscompleteServiceRole046BF68A' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidPATCHApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsid513A5711", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1iscompleteServiceRole046BF68A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1283, - "startColumn": 5, - "endLine": 1283, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt updateItemFunction59415205.Arn" - } + "startLine": 344, + "startColumn": 4, + "endLine": 344, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Resource 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1iscompleteB42ABDBF' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidPATCHApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsid513A5711", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1iscompleteB42ABDBF", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1289, - "startColumn": 5, - "endLine": 1289, + "startLine": 402, + "startColumn": 4, + "endLine": 402, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonEv7CD3D355' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidPATCHApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsid513A5711", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonEv7CD3D355", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1290, - "startColumn": 5, - "endLine": 1290, + "startLine": 437, + "startColumn": 4, + "endLine": 437, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/test-invoke-stage/PATCH/items/*)" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Resource 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonEv3DB60A38' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidPATCH0548CB6A", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonEv3DB60A38", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1323, - "startColumn": 5, - "endLine": 1323, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 561, + "startColumn": 4, + "endLine": 561, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Resource 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkisCo31EA91F4' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidPATCH0548CB6A", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkisCo31EA91F4", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1351, - "startColumn": 5, - "endLine": 1351, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApiitemsidA29927C2'" - } + "startLine": 615, + "startColumn": 4, + "endLine": 615, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkisCo57F822F2' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidPATCH0548CB6A", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkisCo57F822F2", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1354, - "startColumn": 5, - "endLine": 1354, + "startLine": 732, + "startColumn": 4, + "endLine": 732, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApi28111E1C'" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Resource 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonTi96D937B8' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidDELETEApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid056EB521", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonTi96D937B8", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1365, - "startColumn": 5, - "endLine": 1365, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 783, + "startColumn": 4, + "endLine": 783, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonTi07114F31' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidDELETEApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid056EB521", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FframeworkonTi07114F31", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1366, - "startColumn": 5, - "endLine": 1366, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt deleteItemFunction2918B1B0.Arn" - } + "startLine": 900, + "startColumn": 4, + "endLine": 900, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Resource 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema2C960A5F' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidDELETEApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid056EB521", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema2C960A5F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1372, - "startColumn": 5, - "endLine": 1372, + "startLine": 951, + "startColumn": 4, + "endLine": 951, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema2520C928' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidDELETEApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid056EB521", + "logicalId": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema2520C928", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1373, - "startColumn": 5, - "endLine": 1373, + "startLine": 1036, + "startColumn": 4, + "endLine": 1036, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/{ref:itemsApiDeploymentStageprodE77B897D}/DELETE/items/*)" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/amplify-console-app--AmplifyConsoleApp.template.json": { + "filePath": "cdk/amplify-console-app--AmplifyConsoleApp.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 4, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'AppId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidDELETEApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid4C18D4E2", + "logicalId": "MasterBranch", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Amplify::Branch" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.AppId", "category": "Best Practice", - "startLine": 1409, + "startLine": 17, "startColumn": 5, - "endLine": 1409, - "endColumn": 12, + "endLine": 17, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-amplify", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt testapp.AppId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'BranchName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidDELETEApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid4C18D4E2", + "logicalId": "MasterBranch", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Amplify::Branch" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.BranchName", "category": "Best Practice", - "startLine": 1410, + "startLine": 23, "startColumn": 5, - "endLine": 1410, - "endColumn": 18, + "endLine": 23, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-amplify", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt deleteItemFunction2918B1B0.Arn" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Resource 'testapp' of type 'AWS::Amplify::App' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidDELETEApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid4C18D4E2", + "logicalId": "testapp", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Amplify::App" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1416, - "startColumn": 5, - "endLine": 1416, + "startLine": 5, + "startColumn": 4, + "endLine": 5, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'MasterBranch' of type 'AWS::Amplify::Branch' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemsApiitemsidDELETEApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid4C18D4E2", + "logicalId": "MasterBranch", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Amplify::Branch" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1417, - "startColumn": 5, - "endLine": 1417, + "startLine": 16, + "startColumn": 4, + "endLine": 16, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/test-invoke-stage/DELETE/items/*)" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/api-cors-lambda-crud-dynamodb--ApiLambdaCrudDynamoDBExample.template.json": { + "filePath": "cdk/api-cors-lambda-crud-dynamodb--ApiLambdaCrudDynamoDBExample.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 41, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 10, + "informational": 86, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "itemsApiitemsidDELETE21550005", + "logicalId": "getOneItemFunctionE3257B22", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.HttpMethod", - "category": "Best Practice", - "startLine": 1450, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 145, "startColumn": 5, - "endLine": 1450, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 145, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs20.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "itemsApiitemsidDELETE21550005", + "logicalId": "getAllItemsFunction0B7A913E", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ResourceId", - "category": "Best Practice", - "startLine": 1478, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 273, "startColumn": 5, - "endLine": 1478, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 273, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApiitemsidA29927C2'" + "actualValue": "nodejs20.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "itemsApiitemsidDELETE21550005", + "logicalId": "createItemFunction8D47E48A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 1481, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 401, "startColumn": 5, - "endLine": 1481, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 401, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApi28111E1C'" + "actualValue": "nodejs20.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "itemsApiitemsidOPTIONS62BD91D0", + "logicalId": "updateItemFunction59415205", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.HttpMethod", - "category": "Best Practice", - "startLine": 1493, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 529, "startColumn": 5, - "endLine": 1493, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 529, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs20.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "itemsApiitemsidOPTIONS62BD91D0", + "logicalId": "deleteItemFunction2918B1B0", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ResourceId", - "category": "Best Practice", - "startLine": 1523, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 657, "startColumn": 5, - "endLine": 1523, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApiitemsidA29927C2'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiitemsidOPTIONS62BD91D0", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 1526, - "startColumn": 5, - "endLine": 1526, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 657, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'itemsApi28111E1C'" + "actualValue": "nodejs20.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'items07D08F4B' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "items07D08F4B", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'getOneItemFunctionServiceRoleCFD54796' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "getOneItemFunctionServiceRoleCFD54796", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 32, - "startColumn": 4, - "endLine": 32, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'getOneItemFunctionE3257B22' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'getOneItemFunctionServiceRoleCFD54796' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { "logicalId": "getOneItemFunctionE3257B22", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 123, - "startColumn": 4, - "endLine": 123, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'getAllItemsFunctionServiceRoleCC084440' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "getAllItemsFunctionServiceRoleCC084440", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 160, + "startLine": 147, "startColumn": 4, - "endLine": 160, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endLine": 147, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'getAllItemsFunction0B7A913E' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'getAllItemsFunctionServiceRoleCC084440' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { "logicalId": "getAllItemsFunction0B7A913E", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 251, - "startColumn": 4, - "endLine": 251, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'createItemFunctionServiceRole1BBF2178' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "createItemFunctionServiceRole1BBF2178", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 288, + "startLine": 275, "startColumn": 4, - "endLine": 288, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endLine": 275, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'createItemFunction8D47E48A' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'createItemFunctionServiceRole1BBF2178' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { "logicalId": "createItemFunction8D47E48A", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 379, - "startColumn": 4, - "endLine": 379, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'updateItemFunctionServiceRole40035396' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "updateItemFunctionServiceRole40035396", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 416, + "startLine": 403, "startColumn": 4, - "endLine": 416, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endLine": 403, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'updateItemFunction59415205' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'updateItemFunctionServiceRole40035396' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { "logicalId": "updateItemFunction59415205", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 507, - "startColumn": 4, - "endLine": 507, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'deleteItemFunctionServiceRole5C201FCC' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "deleteItemFunctionServiceRole5C201FCC", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 544, - "startColumn": 4, - "endLine": 544, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'deleteItemFunction2918B1B0' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "deleteItemFunction2918B1B0", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 635, - "startColumn": 4, - "endLine": 635, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'itemsApi28111E1C' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApi28111E1C", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 672, - "startColumn": 4, - "endLine": 672, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'itemsApiCloudWatchRoleB5C7B431' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiCloudWatchRoleB5C7B431", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 681, - "startColumn": 4, - "endLine": 681, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'itemsApiDeploymentStageprodE77B897D' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "itemsApiDeploymentStageprodE77B897D", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 760, + "startLine": 531, "startColumn": 4, - "endLine": 760, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endLine": 531, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" - } - ] - }, - "cdk/api-gateway-async-lambda-invocation--ApiGatewayAsyncLambdaStack.template.json": { - "filePath": "cdk/api-gateway-async-lambda-invocation--ApiGatewayAsyncLambdaStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 19, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 34, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "apigwasynclambdafnAD6250E4", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 138, - "startColumn": 5, - "endLine": 138, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs20.x", - "lifecycle": "deprecated" - } }, { "ruleId": "W3005", "severity": "WARN", - "message": "'apigwasynclambdafnServiceRole607675A2' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'deleteItemFunctionServiceRole5C201FCC' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "apigwasynclambdafnAD6250E4", + "logicalId": "deleteItemFunction2918B1B0", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 140, + "startLine": 659, "startColumn": 4, - "endLine": 140, + "endLine": 659, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -2339,7 +2164,7 @@ "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdatable1075CD30", + "logicalId": "items07D08F4B", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, @@ -2361,7 +2186,7 @@ "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdatable1075CD30", + "logicalId": "items07D08F4B", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, @@ -2383,22 +2208,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwDeploymentDA408F9D41ab700bc8db89ed7cb2c6250ab97c0a", + "logicalId": "itemsApiDeploymentFEC31BD04feb54db86e2f8eed94e1b28001143ce", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Deployment" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 230, + "startLine": 738, "startColumn": 5, - "endLine": 230, + "endLine": 738, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'apigwasynclambdaapigw3449931B'" + "resolutionSource": "Ref to 'itemsApi28111E1C'" } }, { @@ -2407,22 +2232,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwDeploymentStageprodAE3424CD", + "logicalId": "itemsApiDeploymentStageprodE77B897D", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 269, + "startLine": 764, "startColumn": 5, - "endLine": 269, + "endLine": 764, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'apigwasynclambdaapigw3449931B'" + "resolutionSource": "Ref to 'itemsApi28111E1C'" } }, { @@ -2431,15 +2256,15 @@ "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwDeploymentStageprodAE3424CD", + "logicalId": "itemsApiDeploymentStageprodE77B897D", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 272, + "startLine": 767, "startColumn": 5, - "endLine": 272, + "endLine": 767, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -2454,22 +2279,22 @@ "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjob39EDA914", + "logicalId": "itemsApiitems9015DBED", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Resource" }, "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 284, + "startLine": 779, "startColumn": 5, - "endLine": 284, + "endLine": 779, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt apigwasynclambdaapigw3449931B.RootResourceId" + "resolutionSource": "GetAtt itemsApi28111E1C.RootResourceId" } }, { @@ -2478,15 +2303,15 @@ "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjob39EDA914", + "logicalId": "itemsApiitems9015DBED", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Resource" }, "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 290, + "startLine": 785, "startColumn": 5, - "endLine": 290, + "endLine": 785, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -2501,22 +2326,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjob39EDA914", + "logicalId": "itemsApiitems9015DBED", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Resource" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 291, + "startLine": 786, "startColumn": 5, - "endLine": 291, + "endLine": 786, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'apigwasynclambdaapigw3449931B'" + "resolutionSource": "Ref to 'itemsApi28111E1C'" } }, { @@ -2525,15 +2350,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob195929C9", + "logicalId": "itemsApiitemsGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitems2A648972", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 302, + "startLine": 797, "startColumn": 5, - "endLine": 302, + "endLine": 797, "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -2547,21 +2372,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob195929C9", + "logicalId": "itemsApiitemsGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitems2A648972", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 303, + "startLine": 798, "startColumn": 5, - "endLine": 303, + "endLine": 798, "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt apigwasynclambdafnAD6250E4.Arn" + "resolutionSource": "GetAtt getAllItemsFunction0B7A913E.Arn" } }, { @@ -2570,15 +2395,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob195929C9", + "logicalId": "itemsApiitemsGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitems2A648972", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 309, + "startLine": 804, "startColumn": 5, - "endLine": 309, + "endLine": 804, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -2592,21 +2417,21 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob195929C9", + "logicalId": "itemsApiitemsGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitems2A648972", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 310, + "startLine": 805, "startColumn": 5, - "endLine": 310, + "endLine": 805, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:apigwasynclambdaapigw3449931B}/{ref:apigwasynclambdaapigwDeploymentStageprodAE3424CD}/POST/job)" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/{ref:itemsApiDeploymentStageprodE77B897D}/GET/items)" } }, { @@ -2615,15 +2440,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionTestApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob01D110CD", + "logicalId": "itemsApiitemsGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsF4364FB2", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 338, + "startLine": 841, "startColumn": 5, - "endLine": 338, + "endLine": 841, "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -2637,21 +2462,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionTestApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob01D110CD", + "logicalId": "itemsApiitemsGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsF4364FB2", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 339, + "startLine": 842, "startColumn": 5, - "endLine": 339, + "endLine": 842, "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt apigwasynclambdafnAD6250E4.Arn" + "resolutionSource": "GetAtt getAllItemsFunction0B7A913E.Arn" } }, { @@ -2660,15 +2485,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionTestApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob01D110CD", + "logicalId": "itemsApiitemsGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsF4364FB2", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 345, + "startLine": 848, "startColumn": 5, - "endLine": 345, + "endLine": 848, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -2682,21 +2507,21 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionTestApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob01D110CD", + "logicalId": "itemsApiitemsGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsF4364FB2", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 346, + "startLine": 849, "startColumn": 5, - "endLine": 346, + "endLine": 849, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:apigwasynclambdaapigw3449931B}/test-invoke-stage/POST/job)" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/test-invoke-stage/GET/items)" } }, { @@ -2705,15 +2530,15 @@ "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobPOST79D1CAC1", + "logicalId": "itemsApiitemsGET59B0F78A", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 371, + "startLine": 882, "startColumn": 5, - "endLine": 371, + "endLine": 882, "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -2728,22 +2553,22 @@ "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobPOST79D1CAC1", + "logicalId": "itemsApiitemsGET59B0F78A", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 419, + "startLine": 910, "startColumn": 5, - "endLine": 419, + "endLine": 910, "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'apigwasynclambdaapigwjob39EDA914'" + "resolutionSource": "Ref to 'itemsApiitems9015DBED'" } }, { @@ -2752,470 +2577,416 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobPOST79D1CAC1", + "logicalId": "itemsApiitemsGET59B0F78A", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 422, + "startLine": 913, "startColumn": 5, - "endLine": 422, + "endLine": 913, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'apigwasynclambdaapigw3449931B'" + "resolutionSource": "Ref to 'itemsApi28111E1C'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobjobId73AEE867", + "logicalId": "itemsApiitemsPOSTApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitems7DA2B753", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 433, + "startLine": 924, "startColumn": 5, - "endLine": 433, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 924, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'apigwasynclambdaapigwjob39EDA914'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobjobId73AEE867", + "logicalId": "itemsApiitemsPOSTApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitems7DA2B753", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 436, + "startLine": 925, "startColumn": 5, - "endLine": 436, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 925, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt createItemFunction8D47E48A.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobjobId73AEE867", + "logicalId": "itemsApiitemsPOSTApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitems7DA2B753", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 437, + "startLine": 931, "startColumn": 5, - "endLine": 437, + "endLine": 931, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'apigwasynclambdaapigw3449931B'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobjobIdGETED10CC0C", + "logicalId": "itemsApiitemsPOSTApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitems7DA2B753", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 449, + "startLine": 932, "startColumn": 5, - "endLine": 449, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 932, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/{ref:itemsApiDeploymentStageprodE77B897D}/POST/items)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobjobIdGETED10CC0C", + "logicalId": "itemsApiitemsPOSTApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitemsAE25CBB6", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 498, + "startLine": 968, "startColumn": 5, - "endLine": 498, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 968, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'apigwasynclambdaapigwjobjobId73AEE867'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwjobjobIdGETED10CC0C", + "logicalId": "itemsApiitemsPOSTApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitemsAE25CBB6", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 501, + "startLine": 969, "startColumn": 5, - "endLine": 501, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 969, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'apigwasynclambdaapigw3449931B'" + "resolutionSource": "GetAtt createItemFunction8D47E48A.Arn" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'apigwasynclambdatable1075CD30' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdatable1075CD30", + "logicalId": "itemsApiitemsPOSTApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitemsAE25CBB6", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, + "startLine": 975, + "startColumn": 5, + "endLine": 975, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'apigwasynclambdafnloggroup3D262524' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdafnloggroup3D262524", + "logicalId": "itemsApiitemsPOSTApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitemsAE25CBB6", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 32, - "startColumn": 4, - "endLine": 32, + "startLine": 976, + "startColumn": 5, + "endLine": 976, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/test-invoke-stage/POST/items)" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'apigwasynclambdafnServiceRole607675A2' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdafnServiceRole607675A2", + "logicalId": "itemsApiitemsPOSTDD3E83D0", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 43, - "startColumn": 4, - "endLine": 43, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1009, + "startColumn": 5, + "endLine": 1009, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'apigwasynclambdafnAD6250E4' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdafnAD6250E4", + "logicalId": "itemsApiitemsPOSTDD3E83D0", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 112, - "startColumn": 4, - "endLine": 112, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1037, + "startColumn": 5, + "endLine": 1037, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'itemsApiitems9015DBED'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'apigwasynclambdaapigwloggroup1E36CCD4' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwloggroup1E36CCD4", + "logicalId": "itemsApiitemsPOSTDD3E83D0", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 153, - "startColumn": 4, - "endLine": 153, + "startLine": 1040, + "startColumn": 5, + "endLine": 1040, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'itemsApi28111E1C'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'apigwasynclambdaapigw3449931B' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigw3449931B", + "logicalId": "itemsApiitemsOPTIONSB46B4D53", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 164, - "startColumn": 4, - "endLine": 164, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1052, + "startColumn": 5, + "endLine": 1052, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'apigwasynclambdaapigwCloudWatchRoleC01BF930' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwCloudWatchRoleC01BF930", + "logicalId": "itemsApiitemsOPTIONSB46B4D53", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 173, - "startColumn": 4, - "endLine": 173, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1082, + "startColumn": 5, + "endLine": 1082, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'itemsApiitems9015DBED'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'apigwasynclambdaapigwDeploymentStageprodAE3424CD' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "apigwasynclambdaapigwDeploymentStageprodAE3424CD", + "logicalId": "itemsApiitemsOPTIONSB46B4D53", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 247, - "startColumn": 4, - "endLine": 247, + "startLine": 1085, + "startColumn": 5, + "endLine": 1085, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'itemsApi28111E1C'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ApiGatewayDynamoRole447127F0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayDynamoRole447127F0", + "logicalId": "itemsApiitemsidA29927C2", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 511, - "startColumn": 4, - "endLine": 511, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/api-gateway-lambda-token-authorizer--gateway-lambda-auth-stack.template.json": { - "filePath": "cdk/api-gateway-lambda-token-authorizer--gateway-lambda-auth-stack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 20, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 5, - "informational": 30, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "operationallambdaFE43E13E", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 60, + "startLine": 1096, "startColumn": 5, - "endLine": 60, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 1096, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'itemsApiitems9015DBED'" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "authenticationlambdaDD3A2252", + "logicalId": "itemsApiitemsidA29927C2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 263, + "propertyPath": "Properties.PathPart", + "category": "Best Practice", + "startLine": 1099, "startColumn": 5, - "endLine": 263, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 1099, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'operationallambdaServiceRole14B56EA5' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "operationallambdaFE43E13E", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 63, - "startColumn": 4, - "endLine": 63, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 195, - "startColumn": 4, - "endLine": 195, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'authenticationlambdaServiceRole9798A92B' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "authenticationlambdaDD3A2252", + "logicalId": "itemsApiitemsidA29927C2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 266, - "startColumn": 4, - "endLine": 266, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1100, + "startColumn": 5, + "endLine": 1100, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'itemsApi28111E1C'" + } }, { "ruleId": "I9001", @@ -3223,15 +2994,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "authenticationlambdagatewaylambdaauthstackoperationalAuthorizerD36E749EPermissionsCD2687F2", + "logicalId": "itemsApiitemsidGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsid6D54AF22", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 305, + "startLine": 1111, "startColumn": 5, - "endLine": 305, + "endLine": 1111, "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -3245,21 +3016,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "authenticationlambdagatewaylambdaauthstackoperationalAuthorizerD36E749EPermissionsCD2687F2", + "logicalId": "itemsApiitemsidGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsid6D54AF22", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 306, + "startLine": 1112, "startColumn": 5, - "endLine": 306, + "endLine": 1112, "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt authenticationlambdaDD3A2252.Arn" + "resolutionSource": "GetAtt getOneItemFunctionE3257B22.Arn" } }, { @@ -3268,15 +3039,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "authenticationlambdagatewaylambdaauthstackoperationalAuthorizerD36E749EPermissionsCD2687F2", + "logicalId": "itemsApiitemsidGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsid6D54AF22", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 312, + "startLine": 1118, "startColumn": 5, - "endLine": 312, + "endLine": 1118, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -3290,163 +3061,158 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "authenticationlambdagatewaylambdaauthstackoperationalAuthorizerD36E749EPermissionsCD2687F2", + "logicalId": "itemsApiitemsidGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsid6D54AF22", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 313, + "startLine": 1119, "startColumn": 5, - "endLine": 313, + "endLine": 1119, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:restapigatewayE22E31C5}/authorizers/{ref:operationalAuthorizer363A7D2B})" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/{ref:itemsApiDeploymentStageprodE77B897D}/GET/items/*)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "operationalAuthorizer363A7D2B", + "logicalId": "itemsApiitemsidGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsidCA08693A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Authorizer" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 392, + "startLine": 1155, "startColumn": 5, - "endLine": 392, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 1155, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'restapigatewayE22E31C5'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayDeploymentB29CB257026bd226d852d73169d333911fdd4fa6", + "logicalId": "itemsApiitemsidGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsidCA08693A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 431, + "startLine": 1156, "startColumn": 5, - "endLine": 431, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 1156, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'restapigatewayE22E31C5'" + "resolutionSource": "GetAtt getOneItemFunctionE3257B22.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayDeploymentStagedevB80C9CD7", + "logicalId": "itemsApiitemsidGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsidCA08693A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 473, + "startLine": 1162, "startColumn": 5, - "endLine": 473, + "endLine": 1162, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'restapigatewayE22E31C5'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayDeploymentStagedevB80C9CD7", + "logicalId": "itemsApiitemsidGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsidCA08693A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 476, + "startLine": 1163, "startColumn": 5, - "endLine": 476, + "endLine": 1163, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/test-invoke-stage/GET/items/*)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayhealth0EB12846", + "logicalId": "itemsApiitemsidGET38A333A8", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 485, + "startLine": 1196, "startColumn": 5, - "endLine": 485, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 1196, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt restapigatewayE22E31C5.RootResourceId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayhealth0EB12846", + "logicalId": "itemsApiitemsidGET38A333A8", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 491, + "startLine": 1224, "startColumn": 5, - "endLine": 491, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 1224, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'itemsApiitemsidA29927C2'" } }, { @@ -3455,22 +3221,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayhealth0EB12846", + "logicalId": "itemsApiitemsidGET38A333A8", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 492, + "startLine": 1227, "startColumn": 5, - "endLine": 492, + "endLine": 1227, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'restapigatewayE22E31C5'" + "resolutionSource": "Ref to 'itemsApi28111E1C'" } }, { @@ -3479,15 +3245,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayhealthGETApiPermissiongatewaylambdaauthstackrestapigatewayAEDD1643GEThealth051F210D", + "logicalId": "itemsApiitemsidPATCHApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsidEE9531C0", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 503, + "startLine": 1238, "startColumn": 5, - "endLine": 503, + "endLine": 1238, "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -3501,21 +3267,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayhealthGETApiPermissiongatewaylambdaauthstackrestapigatewayAEDD1643GEThealth051F210D", + "logicalId": "itemsApiitemsidPATCHApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsidEE9531C0", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 504, + "startLine": 1239, "startColumn": 5, - "endLine": 504, + "endLine": 1239, "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt operationallambdaFE43E13E.Arn" + "resolutionSource": "GetAtt updateItemFunction59415205.Arn" } }, { @@ -3524,15 +3290,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayhealthGETApiPermissiongatewaylambdaauthstackrestapigatewayAEDD1643GEThealth051F210D", + "logicalId": "itemsApiitemsidPATCHApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsidEE9531C0", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 510, + "startLine": 1245, "startColumn": 5, - "endLine": 510, + "endLine": 1245, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -3546,21 +3312,21 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayhealthGETApiPermissiongatewaylambdaauthstackrestapigatewayAEDD1643GEThealth051F210D", + "logicalId": "itemsApiitemsidPATCHApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsidEE9531C0", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 511, + "startLine": 1246, "startColumn": 5, - "endLine": 511, + "endLine": 1246, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:restapigatewayE22E31C5}/{ref:restapigatewayDeploymentStagedevB80C9CD7}/GET/health)" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/{ref:itemsApiDeploymentStageprodE77B897D}/PATCH/items/*)" } }, { @@ -3569,15 +3335,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayhealthGETApiPermissionTestgatewaylambdaauthstackrestapigatewayAEDD1643GEThealthAF95E556", + "logicalId": "itemsApiitemsidPATCHApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsid513A5711", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 539, + "startLine": 1282, "startColumn": 5, - "endLine": 539, + "endLine": 1282, "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -3591,21 +3357,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayhealthGETApiPermissionTestgatewaylambdaauthstackrestapigatewayAEDD1643GEThealthAF95E556", + "logicalId": "itemsApiitemsidPATCHApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsid513A5711", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 540, + "startLine": 1283, "startColumn": 5, - "endLine": 540, + "endLine": 1283, "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt operationallambdaFE43E13E.Arn" + "resolutionSource": "GetAtt updateItemFunction59415205.Arn" } }, { @@ -3614,15 +3380,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayhealthGETApiPermissionTestgatewaylambdaauthstackrestapigatewayAEDD1643GEThealthAF95E556", + "logicalId": "itemsApiitemsidPATCHApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsid513A5711", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 546, + "startLine": 1289, "startColumn": 5, - "endLine": 546, + "endLine": 1289, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -3636,21 +3402,21 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayhealthGETApiPermissionTestgatewaylambdaauthstackrestapigatewayAEDD1643GEThealthAF95E556", + "logicalId": "itemsApiitemsidPATCHApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsid513A5711", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 547, + "startLine": 1290, "startColumn": 5, - "endLine": 547, + "endLine": 1290, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:restapigatewayE22E31C5}/test-invoke-stage/GET/health)" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/test-invoke-stage/PATCH/items/*)" } }, { @@ -3659,15 +3425,15 @@ "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayhealthGET9A80151C", + "logicalId": "itemsApiitemsidPATCH0548CB6A", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 575, + "startLine": 1323, "startColumn": 5, - "endLine": 575, + "endLine": 1323, "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -3682,22 +3448,22 @@ "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayhealthGET9A80151C", + "logicalId": "itemsApiitemsidPATCH0548CB6A", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 595, + "startLine": 1351, "startColumn": 5, - "endLine": 595, + "endLine": 1351, "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'restapigatewayhealth0EB12846'" + "resolutionSource": "Ref to 'itemsApiitemsidA29927C2'" } }, { @@ -3706,636 +3472,726 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayhealthGET9A80151C", + "logicalId": "itemsApiitemsidPATCH0548CB6A", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 598, + "startLine": 1354, "startColumn": 5, - "endLine": 598, + "endLine": 1354, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'restapigatewayE22E31C5'" + "resolutionSource": "Ref to 'itemsApi28111E1C'" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'operationallambdaServiceRole14B56EA5' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "operationallambdaServiceRole14B56EA5", + "logicalId": "itemsApiitemsidDELETEApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid056EB521", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1365, + "startColumn": 5, + "endLine": 1365, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'operationallambdaFE43E13E' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "operationallambdaFE43E13E", + "logicalId": "itemsApiitemsidDELETEApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid056EB521", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 39, - "startColumn": 4, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1366, + "startColumn": 5, + "endLine": 1366, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt deleteItemFunction2918B1B0.Arn" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + "logicalId": "itemsApiitemsidDELETEApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid056EB521", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 101, - "startColumn": 4, - "endLine": 101, + "startLine": 1372, + "startColumn": 5, + "endLine": 1372, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "logicalId": "itemsApiitemsidDELETEApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid056EB521", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 178, - "startColumn": 4, - "endLine": 178, + "startLine": 1373, + "startColumn": 5, + "endLine": 1373, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/{ref:itemsApiDeploymentStageprodE77B897D}/DELETE/items/*)" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'authenticationlambdaServiceRole9798A92B' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "authenticationlambdaServiceRole9798A92B", + "logicalId": "itemsApiitemsidDELETEApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid4C18D4E2", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 208, - "startColumn": 4, - "endLine": 208, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1409, + "startColumn": 5, + "endLine": 1409, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'authenticationlambdaDD3A2252' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "authenticationlambdaDD3A2252", + "logicalId": "itemsApiitemsidDELETEApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid4C18D4E2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 242, - "startColumn": 4, - "endLine": 242, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1410, + "startColumn": 5, + "endLine": 1410, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt deleteItemFunction2918B1B0.Arn" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'restapigatewayE22E31C5' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayE22E31C5", + "logicalId": "itemsApiitemsidDELETEApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid4C18D4E2", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 420, - "startColumn": 4, - "endLine": 420, + "startLine": 1416, + "startColumn": 5, + "endLine": 1416, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'restapigatewayDeploymentStagedevB80C9CD7' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "restapigatewayDeploymentStagedevB80C9CD7", + "logicalId": "itemsApiitemsidDELETEApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid4C18D4E2", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 447, - "startColumn": 4, - "endLine": 447, + "startLine": 1417, + "startColumn": 5, + "endLine": 1417, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/api-gateway-parallel-step-functions--apigateway-parallel-stepfunctions-stack-2.template.json": { - "filePath": "cdk/api-gateway-parallel-step-functions--apigateway-parallel-stepfunctions-stack-2.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 27, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 16, - "informational": 33, - "debug": 0 + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:itemsApi28111E1C}/test-invoke-stage/DELETE/items/*)" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "lambdafunction1A09FC241", + "logicalId": "itemsApiitemsidDELETE21550005", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 142, + "propertyPath": "Properties.HttpMethod", + "category": "Best Practice", + "startLine": 1450, "startColumn": 5, - "endLine": 142, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 1450, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "lambdafunction2F899168D", + "logicalId": "itemsApiitemsidDELETE21550005", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 407, + "propertyPath": "Properties.ResourceId", + "category": "Best Practice", + "startLine": 1478, "startColumn": 5, - "endLine": 407, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 1478, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'itemsApiitemsidA29927C2'" } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.VpcId'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "lambdafunction1SecurityGroupF7DF9E6F", + "logicalId": "itemsApiitemsidDELETE21550005", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 102, - "startColumn": 4, - "endLine": 102, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1481, + "startColumn": 5, + "endLine": 1481, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'itemsApi28111E1C'" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'lambdafunction1ServiceRoleA9EAFFE5' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "lambdafunction1A09FC241", + "logicalId": "itemsApiitemsidOPTIONS62BD91D0", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 169, - "startColumn": 4, - "endLine": 169, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1493, + "startColumn": 5, + "endLine": 1493, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.Environment.Variables.VPC_CIDR'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "lambdafunction1A09FC241", + "logicalId": "itemsApiitemsidOPTIONS62BD91D0", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 169, + "startLine": 1523, + "startColumn": 5, + "endLine": 1523, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'itemsApiitemsidA29927C2'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "itemsApiitemsidOPTIONS62BD91D0", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" + }, + "propertyPath": "Properties.RestApiId", + "category": "Best Practice", + "startLine": 1526, + "startColumn": 5, + "endLine": 1526, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'itemsApi28111E1C'" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'items07D08F4B' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "items07D08F4B", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, "startColumn": 4, - "endLine": 169, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.Environment.Variables.VPC_ID'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'getOneItemFunctionServiceRoleCFD54796' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "lambdafunction1A09FC241", + "logicalId": "getOneItemFunctionServiceRoleCFD54796", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 169, + "startLine": 32, "startColumn": 4, - "endLine": 169, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 32, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.VpcConfig.SubnetIds.0'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'getOneItemFunctionE3257B22' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "lambdafunction1A09FC241", + "logicalId": "getOneItemFunctionE3257B22", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 169, + "startLine": 123, "startColumn": 4, - "endLine": 169, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 123, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.VpcConfig.SubnetIds.1'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'getAllItemsFunctionServiceRoleCC084440' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "lambdafunction1A09FC241", + "logicalId": "getAllItemsFunctionServiceRoleCC084440", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 169, + "startLine": 160, "startColumn": 4, - "endLine": 169, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 160, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'getAllItemsFunction0B7A913E' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "logicalId": "getAllItemsFunction0B7A913E", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 289, + "startLine": 251, "startColumn": 4, - "endLine": 289, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 251, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.VpcId'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'createItemFunctionServiceRole1BBF2178' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "lambdafunction2SecurityGroup7268045A", + "logicalId": "createItemFunctionServiceRole1BBF2178", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 367, + "startLine": 288, "startColumn": 4, - "endLine": 367, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 288, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'lambdafunction2ServiceRole380A1BE9' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'createItemFunction8D47E48A' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "lambdafunction2F899168D", + "logicalId": "createItemFunction8D47E48A", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 434, + "startLine": 379, "startColumn": 4, - "endLine": 434, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 379, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.Environment.Variables.VPC_CIDR'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'updateItemFunctionServiceRole40035396' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "lambdafunction2F899168D", + "logicalId": "updateItemFunctionServiceRole40035396", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 434, + "startLine": 416, "startColumn": 4, - "endLine": 434, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 416, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.Environment.Variables.VPC_ID'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'updateItemFunction59415205' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "lambdafunction2F899168D", + "logicalId": "updateItemFunction59415205", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 434, + "startLine": 507, "startColumn": 4, - "endLine": 434, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 507, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.VpcConfig.SubnetIds.0'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'deleteItemFunctionServiceRole5C201FCC' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "lambdafunction2F899168D", + "logicalId": "deleteItemFunctionServiceRole5C201FCC", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 434, + "startLine": 544, "startColumn": 4, - "endLine": 434, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 544, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.VpcConfig.SubnetIds.1'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'deleteItemFunction2918B1B0' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "lambdafunction2F899168D", + "logicalId": "deleteItemFunction2918B1B0", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 434, + "startLine": 635, "startColumn": 4, - "endLine": 434, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 635, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'mystatemachineRole70AA91FD' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'itemsApi28111E1C' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "mystatemachine15ECA539", + "logicalId": "itemsApi28111E1C", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::ApiGateway::RestApi" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 646, + "startLine": 672, "startColumn": 4, - "endLine": 646, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 672, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Resource 'itemsApiCloudWatchRoleB5C7B431' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "lambdafunction1SecurityGroupF7DF9E6F", + "logicalId": "itemsApiCloudWatchRoleB5C7B431", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 87, - "startColumn": 5, - "endLine": 87, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 681, + "startColumn": 4, + "endLine": 681, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'itemsApiDeploymentStageprodE77B897D' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "lambdafunction1SecurityGroupF7DF9E6F", + "logicalId": "itemsApiDeploymentStageprodE77B897D", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 95, + "startLine": 760, + "startColumn": 4, + "endLine": 760, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/api-gateway-async-lambda-invocation--ApiGatewayAsyncLambdaStack.template.json": { + "filePath": "cdk/api-gateway-async-lambda-invocation--ApiGatewayAsyncLambdaStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 19, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 34, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "apigwasynclambdafnAD6250E4", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 138, "startColumn": 5, - "endLine": 95, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 138, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF.Outputs.apigatewayparallelstepfunctionsstack2nestedstacklambdanestedstackvpc238BBD13Ref" + "actualValue": "nodejs20.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'apigwasynclambdafnServiceRole607675A2' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "lambdafunction2SecurityGroup7268045A", + "logicalId": "apigwasynclambdafnAD6250E4", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 352, - "startColumn": 5, - "endLine": 352, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 140, + "startColumn": 4, + "endLine": 140, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "lambdafunction2SecurityGroup7268045A", + "logicalId": "apigwasynclambdatable1075CD30", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 360, + "startLine": 12, "startColumn": 5, - "endLine": 360, - "endColumn": 11, + "endLine": 12, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF.Outputs.apigatewayparallelstepfunctionsstack2nestedstacklambdanestedstackvpc238BBD13Ref" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StateMachineType' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mystatemachine15ECA539", + "logicalId": "apigwasynclambdatable1075CD30", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.StateMachineType", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 644, + "startLine": 22, "startColumn": 5, - "endLine": 644, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-stepfunctions.git", + "endLine": 22, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -4348,22 +4204,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myapiDeployment92F2CB49668bc8f388b84571173cc408b70fc6fa", + "logicalId": "apigwasynclambdaapigwDeploymentDA408F9D41ab700bc8db89ed7cb2c6250ab97c0a", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Deployment" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 725, + "startLine": 230, "startColumn": 5, - "endLine": 725, + "endLine": 230, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'myapi4C7BF186'" + "resolutionSource": "Ref to 'apigwasynclambdaapigw3449931B'" } }, { @@ -4372,22 +4228,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myapiDeploymentStagedevB1704B15", + "logicalId": "apigwasynclambdaapigwDeploymentStageprodAE3424CD", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 745, + "startLine": 269, "startColumn": 5, - "endLine": 745, + "endLine": 269, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'myapi4C7BF186'" + "resolutionSource": "Ref to 'apigwasynclambdaapigw3449931B'" } }, { @@ -4396,15 +4252,15 @@ "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myapiDeploymentStagedevB1704B15", + "logicalId": "apigwasynclambdaapigwDeploymentStageprodAE3424CD", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 748, + "startLine": 272, "startColumn": 5, - "endLine": 748, + "endLine": 272, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -4416,48 +4272,48 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myapiANYA805D87B", + "logicalId": "apigwasynclambdaapigwjob39EDA914", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 807, + "startLine": 284, "startColumn": 5, - "endLine": 807, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 284, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt apigwasynclambdaapigw3449931B.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myapiANYA805D87B", + "logicalId": "apigwasynclambdaapigwjob39EDA914", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 891, + "startLine": 290, "startColumn": 5, - "endLine": 891, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 290, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt myapi4C7BF186.RootResourceId" + "lifecycle": "create-only" } }, { @@ -4466,65 +4322,85 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myapiANYA805D87B", + "logicalId": "apigwasynclambdaapigwjob39EDA914", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ApiGateway::Resource" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 897, + "startLine": 291, "startColumn": 5, - "endLine": 897, + "endLine": 291, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'myapi4C7BF186'" + "resolutionSource": "Ref to 'apigwasynclambdaapigw3449931B'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myapimessagesE5D75039", + "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob195929C9", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 908, + "startLine": 302, "startColumn": 5, - "endLine": 908, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 302, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob195929C9", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 303, + "startColumn": 5, + "endLine": 303, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt myapi4C7BF186.RootResourceId" + "resolutionSource": "GetAtt apigwasynclambdafnAD6250E4.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myapimessagesE5D75039", + "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob195929C9", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 914, + "startLine": 309, "startColumn": 5, - "endLine": 914, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 309, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -4534,25 +4410,114 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myapimessagesE5D75039", + "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob195929C9", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 915, + "startLine": 310, "startColumn": 5, - "endLine": 915, + "endLine": 310, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'myapi4C7BF186'" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:apigwasynclambdaapigw3449931B}/{ref:apigwasynclambdaapigwDeploymentStageprodAE3424CD}/POST/job)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionTestApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob01D110CD", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 338, + "startColumn": 5, + "endLine": 338, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionTestApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob01D110CD", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 339, + "startColumn": 5, + "endLine": 339, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt apigwasynclambdafnAD6250E4.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionTestApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob01D110CD", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 345, + "startColumn": 5, + "endLine": 345, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "apigwasynclambdaapigwjobPOSTApiPermissionTestApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob01D110CD", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.SourceArn", + "category": "Best Practice", + "startLine": 346, + "startColumn": 5, + "endLine": 346, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:apigwasynclambdaapigw3449931B}/test-invoke-stage/POST/job)" } }, { @@ -4561,15 +4526,15 @@ "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myapimessagesGETE09B1C35", + "logicalId": "apigwasynclambdaapigwjobPOST79D1CAC1", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 927, + "startLine": 371, "startColumn": 5, - "endLine": 927, + "endLine": 371, "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -4584,22 +4549,22 @@ "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myapimessagesGETE09B1C35", + "logicalId": "apigwasynclambdaapigwjobPOST79D1CAC1", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 931, + "startLine": 419, "startColumn": 5, - "endLine": 931, + "endLine": 419, "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'myapimessagesE5D75039'" + "resolutionSource": "Ref to 'apigwasynclambdaapigwjob39EDA914'" } }, { @@ -4608,180 +4573,182 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myapimessagesGETE09B1C35", + "logicalId": "apigwasynclambdaapigwjobPOST79D1CAC1", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 934, + "startLine": 422, "startColumn": 5, - "endLine": 934, + "endLine": 422, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'myapi4C7BF186'" + "resolutionSource": "Ref to 'apigwasynclambdaapigw3449931B'" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'lambdafunction1ServiceRoleA9EAFFE5' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "lambdafunction1ServiceRoleA9EAFFE5", + "logicalId": "apigwasynclambdaapigwjobjobId73AEE867", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 37, - "startColumn": 4, - "endLine": 37, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 433, + "startColumn": 5, + "endLine": 433, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'apigwasynclambdaapigwjob39EDA914'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'lambdafunction1SecurityGroupF7DF9E6F' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "lambdafunction1SecurityGroupF7DF9E6F", + "logicalId": "apigwasynclambdaapigwjobjobId73AEE867", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 86, - "startColumn": 4, - "endLine": 86, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 436, + "startColumn": 5, + "endLine": 436, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'lambdafunction1A09FC241' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "lambdafunction1A09FC241", + "logicalId": "apigwasynclambdaapigwjobjobId73AEE867", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 111, - "startColumn": 4, - "endLine": 111, + "startLine": 437, + "startColumn": 5, + "endLine": 437, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'apigwasynclambdaapigw3449931B'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + "logicalId": "apigwasynclambdaapigwjobjobIdGETED10CC0C", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 211, - "startColumn": 4, - "endLine": 211, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 449, + "startColumn": 5, + "endLine": 449, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "logicalId": "apigwasynclambdaapigwjobjobIdGETED10CC0C", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 272, - "startColumn": 4, - "endLine": 272, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 498, + "startColumn": 5, + "endLine": 498, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'apigwasynclambdaapigwjobjobId73AEE867'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'lambdafunction2ServiceRole380A1BE9' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "lambdafunction2ServiceRole380A1BE9", + "logicalId": "apigwasynclambdaapigwjobjobIdGETED10CC0C", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 302, - "startColumn": 4, - "endLine": 302, + "startLine": 501, + "startColumn": 5, + "endLine": 501, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'apigwasynclambdaapigw3449931B'" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'lambdafunction2SecurityGroup7268045A' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'apigwasynclambdatable1075CD30' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "lambdafunction2SecurityGroup7268045A", + "logicalId": "apigwasynclambdatable1075CD30", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 351, + "startLine": 5, "startColumn": 4, - "endLine": 351, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -4789,19 +4756,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'lambdafunction2F899168D' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'apigwasynclambdafnloggroup3D262524' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "lambdafunction2F899168D", + "logicalId": "apigwasynclambdafnloggroup3D262524", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Logs::LogGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 376, + "startLine": 32, "startColumn": 4, - "endLine": 376, + "endLine": 32, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -4809,19 +4776,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'stepfunctionsloggroup6EBF6C71' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Resource 'apigwasynclambdafnServiceRole607675A2' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "stepfunctionsloggroup6EBF6C71", + "logicalId": "apigwasynclambdafnServiceRole607675A2", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 476, + "startLine": 43, "startColumn": 4, - "endLine": 476, + "endLine": 43, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -4829,19 +4796,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'mystatemachineRole70AA91FD' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'apigwasynclambdafnAD6250E4' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mystatemachineRole70AA91FD", + "logicalId": "apigwasynclambdafnAD6250E4", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 487, + "startLine": 112, "startColumn": 4, - "endLine": 487, + "endLine": 112, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -4849,19 +4816,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'mystatemachine15ECA539' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "message": "Resource 'apigwasynclambdaapigwloggroup1E36CCD4' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mystatemachine15ECA539", + "logicalId": "apigwasynclambdaapigwloggroup1E36CCD4", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::Logs::LogGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 592, + "startLine": 153, "startColumn": 4, - "endLine": 592, + "endLine": 153, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -4869,19 +4836,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myapi4C7BF186' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Resource 'apigwasynclambdaapigw3449931B' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myapi4C7BF186", + "logicalId": "apigwasynclambdaapigw3449931B", "entityType": "Resource", "resourceType": "AWS::ApiGateway::RestApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 658, + "startLine": 164, "startColumn": 4, - "endLine": 658, + "endLine": 164, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -4889,19 +4856,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myapiCloudWatchRole095452E5' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'apigwasynclambdaapigwCloudWatchRoleC01BF930' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myapiCloudWatchRole095452E5", + "logicalId": "apigwasynclambdaapigwCloudWatchRoleC01BF930", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 668, + "startLine": 173, "startColumn": 4, - "endLine": 668, + "endLine": 173, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -4909,19 +4876,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myapiDeploymentStagedevB1704B15' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Resource 'apigwasynclambdaapigwDeploymentStageprodAE3424CD' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myapiDeploymentStagedevB1704B15", + "logicalId": "apigwasynclambdaapigwDeploymentStageprodAE3424CD", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 741, + "startLine": 247, "startColumn": 4, - "endLine": 741, + "endLine": 247, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -4929,35 +4896,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myapiANYStartSyncExecutionRole7935C5BB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'ApiGatewayDynamoRole447127F0' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myapiANYStartSyncExecutionRole7935C5BB", + "logicalId": "ApiGatewayDynamoRole447127F0", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 759, + "startLine": 511, "startColumn": 4, - "endLine": 759, + "endLine": 511, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/api-gateway-parallel-step-functions--apigatewayparallelstepfunctionsstack2nestedstacklambda9F5CAB08.nested.template.json": { - "filePath": "cdk/api-gateway-parallel-step-functions--apigatewayparallelstepfunctionsstack2nestedstacklambda9F5CAB08.nested.template.json", + "cdk/api-gateway-lambda-token-authorizer--gateway-lambda-auth-stack.template.json": { + "filePath": "cdk/api-gateway-lambda-token-authorizer--gateway-lambda-auth-stack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 18, + "resourcesScanned": 20, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 31, + "warnings": 5, + "informational": 30, "debug": 0 }, "suppressed": 0, @@ -4966,403 +4933,383 @@ }, "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "nestedstackvpc4488A7AF", + "logicalId": "operationallambdaFE43E13E", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 6, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 60, "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 60, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" - } + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" + } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "nestedstackvpc4488A7AF", + "logicalId": "authenticationlambdaDD3A2252", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.InstanceTenancy", - "category": "Best Practice", - "startLine": 9, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 263, "startColumn": 5, - "endLine": 9, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 263, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'operationallambdaServiceRole14B56EA5' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet1Subnet89E5486A", + "logicalId": "operationallambdaFE43E13E", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 24, - "startColumn": 5, - "endLine": 24, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 63, + "startColumn": 4, + "endLine": 63, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet1Subnet89E5486A", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 32, - "startColumn": 5, - "endLine": 32, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 195, + "startColumn": 4, + "endLine": 195, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'authenticationlambdaServiceRole9798A92B' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet1Subnet89E5486A", + "logicalId": "authenticationlambdaDD3A2252", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 48, - "startColumn": 5, - "endLine": 48, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" - } + "startLine": 266, + "startColumn": 4, + "endLine": 266, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet1RouteTable518786D0", + "logicalId": "authenticationlambdagatewaylambdaauthstackoperationalAuthorizerD36E749EPermissionsCD2687F2", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 65, + "startLine": 305, "startColumn": 5, - "endLine": 65, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 305, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet1RouteTableAssociationE08618B5", + "logicalId": "authenticationlambdagatewaylambdaauthstackoperationalAuthorizerD36E749EPermissionsCD2687F2", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 76, + "startLine": 306, "startColumn": 5, - "endLine": 76, + "endLine": 306, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpcpublicsubnet1Subnet1RouteTable518786D0'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt authenticationlambdaDD3A2252.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet1RouteTableAssociationE08618B5", + "logicalId": "authenticationlambdagatewaylambdaauthstackoperationalAuthorizerD36E749EPermissionsCD2687F2", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 79, + "startLine": 312, "startColumn": 5, - "endLine": 79, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 312, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpcpublicsubnet1Subnet1Subnet89E5486A'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet1DefaultRouteA3ABB16E", + "logicalId": "authenticationlambdagatewaylambdaauthstackoperationalAuthorizerD36E749EPermissionsCD2687F2", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 90, + "startLine": 313, "startColumn": 5, - "endLine": 90, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 313, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:restapigatewayE22E31C5}/authorizers/{ref:operationalAuthorizer363A7D2B})" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet1DefaultRouteA3ABB16E", + "logicalId": "operationalAuthorizer363A7D2B", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ApiGateway::Authorizer" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 94, + "startLine": 392, "startColumn": 5, - "endLine": 94, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 392, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpcpublicsubnet1Subnet1RouteTable518786D0'" + "resolutionSource": "Ref to 'restapigatewayE22E31C5'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet2Subnet778CFACA", + "logicalId": "restapigatewayDeploymentB29CB257026bd226d852d73169d333911fdd4fa6", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 108, + "startLine": 431, "startColumn": 5, - "endLine": 108, - "endColumn": 22, + "endLine": 431, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'restapigatewayE22E31C5'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet2Subnet778CFACA", + "logicalId": "restapigatewayDeploymentStagedevB80C9CD7", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 116, + "startLine": 473, "startColumn": 5, - "endLine": 116, + "endLine": 473, "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'restapigatewayE22E31C5'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet2Subnet778CFACA", + "logicalId": "restapigatewayDeploymentStagedevB80C9CD7", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 132, + "startLine": 476, "startColumn": 5, - "endLine": 132, - "endColumn": 11, + "endLine": 476, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet2RouteTableF3884194", + "logicalId": "restapigatewayhealth0EB12846", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 149, + "startLine": 485, "startColumn": 5, - "endLine": 149, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 485, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" + "resolutionSource": "GetAtt restapigatewayE22E31C5.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet2RouteTableAssociation432D9A37", + "logicalId": "restapigatewayhealth0EB12846", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 160, + "startLine": 491, "startColumn": 5, - "endLine": 160, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 491, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpcpublicsubnet1Subnet2RouteTableF3884194'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet2RouteTableAssociation432D9A37", + "logicalId": "restapigatewayhealth0EB12846", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 163, + "startLine": 492, "startColumn": 5, - "endLine": 163, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 492, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpcpublicsubnet1Subnet2Subnet778CFACA'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "Ref to 'restapigatewayE22E31C5'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet2DefaultRouteC44F12D1", + "logicalId": "restapigatewayhealthGETApiPermissiongatewaylambdaauthstackrestapigatewayAEDD1643GEThealth051F210D", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 174, + "startLine": 503, "startColumn": 5, - "endLine": 174, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 503, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5372,43 +5319,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcpublicsubnet1Subnet2DefaultRouteC44F12D1", + "logicalId": "restapigatewayhealthGETApiPermissiongatewaylambdaauthstackrestapigatewayAEDD1643GEThealth051F210D", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 178, + "startLine": 504, "startColumn": 5, - "endLine": 178, + "endLine": 504, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpcpublicsubnet1Subnet2RouteTableF3884194'" + "resolutionSource": "GetAtt operationallambdaFE43E13E.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet1Subnet46C8720E", + "logicalId": "restapigatewayhealthGETApiPermissiongatewaylambdaauthstackrestapigatewayAEDD1643GEThealth051F210D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 192, + "startLine": 510, "startColumn": 5, - "endLine": 192, - "endColumn": 22, + "endLine": 510, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5418,142 +5364,133 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet1Subnet46C8720E", + "logicalId": "restapigatewayhealthGETApiPermissiongatewaylambdaauthstackrestapigatewayAEDD1643GEThealth051F210D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 200, + "startLine": 511, "startColumn": 5, - "endLine": 200, + "endLine": 511, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:restapigatewayE22E31C5}/{ref:restapigatewayDeploymentStagedevB80C9CD7}/GET/health)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet1Subnet46C8720E", + "logicalId": "restapigatewayhealthGETApiPermissionTestgatewaylambdaauthstackrestapigatewayAEDD1643GEThealthAF95E556", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 216, + "startLine": 539, "startColumn": 5, - "endLine": 216, - "endColumn": 11, + "endLine": 539, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet1RouteTable5302591F", + "logicalId": "restapigatewayhealthGETApiPermissionTestgatewaylambdaauthstackrestapigatewayAEDD1643GEThealthAF95E556", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 233, + "startLine": 540, "startColumn": 5, - "endLine": 233, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 540, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" + "resolutionSource": "GetAtt operationallambdaFE43E13E.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet1RouteTableAssociation6C6975EB", + "logicalId": "restapigatewayhealthGETApiPermissionTestgatewaylambdaauthstackrestapigatewayAEDD1643GEThealthAF95E556", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 244, + "startLine": 546, "startColumn": 5, - "endLine": 244, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 546, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpcprivateisolatedsubnet1Subnet1RouteTable5302591F'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet1RouteTableAssociation6C6975EB", + "logicalId": "restapigatewayhealthGETApiPermissionTestgatewaylambdaauthstackrestapigatewayAEDD1643GEThealthAF95E556", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 247, + "startLine": 547, "startColumn": 5, - "endLine": 247, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 547, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpcprivateisolatedsubnet1Subnet1Subnet46C8720E'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:restapigatewayE22E31C5}/test-invoke-stage/GET/health)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet2Subnet89BFE59F", + "logicalId": "restapigatewayhealthGET9A80151C", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 258, + "startLine": 575, "startColumn": 5, - "endLine": 258, - "endColumn": 22, + "endLine": 575, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5563,165 +5500,223 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet2Subnet89BFE59F", + "logicalId": "restapigatewayhealthGET9A80151C", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 266, + "startLine": 595, "startColumn": 5, - "endLine": 266, - "endColumn": 15, + "endLine": 595, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'restapigatewayhealth0EB12846'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet2Subnet89BFE59F", + "logicalId": "restapigatewayhealthGET9A80151C", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 282, + "startLine": 598, "startColumn": 5, - "endLine": 282, - "endColumn": 11, + "endLine": 598, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" + "resolutionSource": "Ref to 'restapigatewayE22E31C5'" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'operationallambdaServiceRole14B56EA5' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet2RouteTableEA03EC80", + "logicalId": "operationallambdaServiceRole14B56EA5", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 299, - "startColumn": 5, - "endLine": 299, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'operationallambdaFE43E13E' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet2RouteTableAssociation61E13F31", + "logicalId": "operationallambdaFE43E13E", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 310, - "startColumn": 5, - "endLine": 310, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpcprivateisolatedsubnet1Subnet2RouteTableEA03EC80'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 39, + "startColumn": 4, + "endLine": 39, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet2RouteTableAssociation61E13F31", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 313, - "startColumn": 5, - "endLine": 313, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpcprivateisolatedsubnet1Subnet2Subnet89BFE59F'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 101, + "startColumn": 4, + "endLine": 101, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "nestedstackvpcVPCGWA39BF2BE", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 341, - "startColumn": 5, - "endLine": 341, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 178, + "startColumn": 4, + "endLine": 178, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'authenticationlambdaServiceRole9798A92B' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "authenticationlambdaServiceRole9798A92B", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 208, + "startColumn": 4, + "endLine": 208, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'authenticationlambdaDD3A2252' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "authenticationlambdaDD3A2252", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 242, + "startColumn": 4, + "endLine": 242, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'restapigatewayE22E31C5' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "restapigatewayE22E31C5", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 420, + "startColumn": 4, + "endLine": 420, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'restapigatewayDeploymentStagedevB80C9CD7' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "restapigatewayDeploymentStagedevB80C9CD7", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Stage" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 447, + "startColumn": 4, + "endLine": 447, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "cdk/api-websocket-lambda-dynamodb--chat-app.template.json": { - "filePath": "cdk/api-websocket-lambda-dynamodb--chat-app.template.json", + "cdk/api-gateway-parallel-step-functions--apigateway-parallel-stepfunctions-stack-2.template.json": { + "filePath": "cdk/api-gateway-parallel-step-functions--apigateway-parallel-stepfunctions-stack-2.template.json", "status": "OK", "metadata": { - "resourcesScanned": 22, + "resourcesScanned": 27, "counts": { "fatal": 0, "errors": 0, - "warnings": 3, - "informational": 22, + "warnings": 16, + "informational": 33, "debug": 0 }, "suppressed": 0, @@ -5730,21 +5725,67 @@ }, "diagnostics": [ { - "ruleId": "W3005", + "ruleId": "W2531", "severity": "WARN", - "message": "'connectlambdaServiceRole04DCF570' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "connectlambdaFFAE59F3", + "logicalId": "lambdafunction1A09FC241", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 142, + "startColumn": 5, + "endLine": 142, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "lambdafunction2F899168D", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 407, + "startColumn": 5, + "endLine": 407, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.VpcId'", + "source": "CFN_LINT", + "entity": { + "logicalId": "lambdafunction1SecurityGroupF7DF9E6F", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 157, + "startLine": 102, "startColumn": 4, - "endLine": 157, + "endLine": 102, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -5752,19 +5793,19 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'disconnectlambdaServiceRole2779F08C' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'lambdafunction1ServiceRoleA9EAFFE5' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "disconnectlambdaAC22A441", + "logicalId": "lambdafunction1A09FC241", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 284, + "startLine": 169, "startColumn": 4, - "endLine": 284, + "endLine": 169, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -5772,279 +5813,402 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'messagelambdaServiceRole544EC18A' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.Environment.Variables.VPC_CIDR'", "source": "CFN_LINT", "entity": { - "logicalId": "messagelambda16C1C2A3", + "logicalId": "lambdafunction1A09FC241", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 427, + "startLine": 169, "startColumn": 4, - "endLine": 427, + "endLine": 169, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ProtocolType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.Environment.Variables.VPC_ID'", + "source": "CFN_LINT", "entity": { - "logicalId": "chatappapi", + "logicalId": "lambdafunction1A09FC241", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Api" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ProtocolType", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 169, + "startColumn": 4, + "endLine": 169, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.VpcConfig.SubnetIds.0'", + "source": "CFN_LINT", "entity": { - "logicalId": "chatappapitable5244EF8B", + "logicalId": "lambdafunction1A09FC241", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 23, - "startColumn": 5, - "endLine": 23, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 169, + "startColumn": 4, + "endLine": 169, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.VpcConfig.SubnetIds.1'", + "source": "CFN_LINT", "entity": { - "logicalId": "chatappapitable5244EF8B", + "logicalId": "lambdafunction1A09FC241", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.TableName", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 33, - "startColumn": 5, - "endLine": 33, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 169, + "startColumn": 4, + "endLine": 169, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "connectlambdaintegration", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Integration" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 504, - "startColumn": 5, - "endLine": 504, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'chatappapi'" - } + "startLine": 289, + "startColumn": 4, + "endLine": 289, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.VpcId'", + "source": "CFN_LINT", "entity": { - "logicalId": "disconnectlambdaintegration", + "logicalId": "lambdafunction2SecurityGroup7268045A", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Integration" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 537, - "startColumn": 5, - "endLine": 537, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'chatappapi'" - } + "startLine": 367, + "startColumn": 4, + "endLine": 367, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'lambdafunction2ServiceRole380A1BE9' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "messagelambdaintegration", + "logicalId": "lambdafunction2F899168D", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Integration" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 570, - "startColumn": 5, - "endLine": 570, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'chatappapi'" - } + "startLine": 434, + "startColumn": 4, + "endLine": 434, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.Environment.Variables.VPC_CIDR'", + "source": "CFN_LINT", "entity": { - "logicalId": "connectroute", + "logicalId": "lambdafunction2F899168D", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Route" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 603, - "startColumn": 5, - "endLine": 603, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'chatappapi'" - } + "startLine": 434, + "startColumn": 4, + "endLine": 434, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.Environment.Variables.VPC_ID'", + "source": "CFN_LINT", "entity": { - "logicalId": "disconnectroute", + "logicalId": "lambdafunction2F899168D", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Route" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 627, + "startLine": 434, + "startColumn": 4, + "endLine": 434, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.VpcConfig.SubnetIds.0'", + "source": "CFN_LINT", + "entity": { + "logicalId": "lambdafunction2F899168D", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 434, + "startColumn": 4, + "endLine": 434, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' dependency already enforced by a 'GetAtt' at 'Properties.VpcConfig.SubnetIds.1'", + "source": "CFN_LINT", + "entity": { + "logicalId": "lambdafunction2F899168D", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 434, + "startColumn": 4, + "endLine": 434, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'mystatemachineRole70AA91FD' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", + "source": "CFN_LINT", + "entity": { + "logicalId": "mystatemachine15ECA539", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 646, + "startColumn": 4, + "endLine": 646, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "lambdafunction1SecurityGroupF7DF9E6F", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 87, "startColumn": 5, - "endLine": 627, + "endLine": 87, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "lambdafunction1SecurityGroupF7DF9E6F", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 95, + "startColumn": 5, + "endLine": 95, "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'chatappapi'" + "resolutionSource": "GetAtt nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF.Outputs.apigatewayparallelstepfunctionsstack2nestedstacklambdanestedstackvpc238BBD13Ref" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "messageroute", + "logicalId": "lambdafunction2SecurityGroup7268045A", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Route" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 651, + "startLine": 352, "startColumn": 5, - "endLine": 651, + "endLine": 352, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "lambdafunction2SecurityGroup7268045A", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 360, + "startColumn": 5, + "endLine": 360, "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'chatappapi'" + "resolutionSource": "GetAtt nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF.Outputs.apigatewayparallelstepfunctionsstack2nestedstacklambdanestedstackvpc238BBD13Ref" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'StateMachineType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "chatappapideployment", + "logicalId": "mystatemachine15ECA539", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Deployment" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.StateMachineType", "category": "Best Practice", - "startLine": 675, + "startLine": 644, "startColumn": 5, - "endLine": 675, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", + "endLine": 644, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-stepfunctions.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myapiDeployment92F2CB49668bc8f388b84571173cc408b70fc6fa", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Deployment" + }, + "propertyPath": "Properties.RestApiId", + "category": "Best Practice", + "startLine": 725, + "startColumn": 5, + "endLine": 725, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'chatappapi'" + "resolutionSource": "Ref to 'myapi4C7BF186'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "chatappapistage", + "logicalId": "myapiDeploymentStagedevB1704B15", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Stage" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 691, + "startLine": 745, "startColumn": 5, - "endLine": 691, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", + "endLine": 745, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'chatappapi'" + "resolutionSource": "Ref to 'myapi4C7BF186'" } }, { @@ -6053,32 +6217,245 @@ "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "chatappapistage", + "logicalId": "myapiDeploymentStagedevB1704B15", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Stage" + "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 698, + "startLine": 748, "startColumn": 5, - "endLine": 698, + "endLine": 748, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myapiANYA805D87B", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" + }, + "propertyPath": "Properties.HttpMethod", + "category": "Best Practice", + "startLine": 807, + "startColumn": 5, + "endLine": 807, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myapiANYA805D87B", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" + }, + "propertyPath": "Properties.ResourceId", + "category": "Best Practice", + "startLine": 891, + "startColumn": 5, + "endLine": 891, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt myapi4C7BF186.RootResourceId" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myapiANYA805D87B", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" + }, + "propertyPath": "Properties.RestApiId", + "category": "Best Practice", + "startLine": 897, + "startColumn": 5, + "endLine": 897, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'myapi4C7BF186'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myapimessagesE5D75039", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Resource" + }, + "propertyPath": "Properties.ParentId", + "category": "Best Practice", + "startLine": 908, + "startColumn": 5, + "endLine": 908, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt myapi4C7BF186.RootResourceId" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myapimessagesE5D75039", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Resource" + }, + "propertyPath": "Properties.PathPart", + "category": "Best Practice", + "startLine": 914, + "startColumn": 5, + "endLine": 914, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myapimessagesE5D75039", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Resource" + }, + "propertyPath": "Properties.RestApiId", + "category": "Best Practice", + "startLine": 915, + "startColumn": 5, + "endLine": 915, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'myapi4C7BF186'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myapimessagesGETE09B1C35", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" + }, + "propertyPath": "Properties.HttpMethod", + "category": "Best Practice", + "startLine": 927, + "startColumn": 5, + "endLine": 927, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myapimessagesGETE09B1C35", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" + }, + "propertyPath": "Properties.ResourceId", + "category": "Best Practice", + "startLine": 931, + "startColumn": 5, + "endLine": 931, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'myapimessagesE5D75039'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myapimessagesGETE09B1C35", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" + }, + "propertyPath": "Properties.RestApiId", + "category": "Best Practice", + "startLine": 934, + "startColumn": 5, + "endLine": 934, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'myapi4C7BF186'" + } + }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'chatappapi' of type 'AWS::ApiGatewayV2::Api' supports Tags but none are configured", + "message": "Resource 'nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "chatappapi", + "logicalId": "nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Api" + "resourceType": "AWS::CloudFormation::Stack" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -6093,19 +6470,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'chatappapitable5244EF8B' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'lambdafunction1ServiceRoleA9EAFFE5' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "chatappapitable5244EF8B", + "logicalId": "lambdafunction1ServiceRoleA9EAFFE5", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 16, + "startLine": 37, "startColumn": 4, - "endLine": 16, + "endLine": 37, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -6113,19 +6490,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'connectlambdaServiceRole04DCF570' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'lambdafunction1SecurityGroupF7DF9E6F' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "connectlambdaServiceRole04DCF570", + "logicalId": "lambdafunction1SecurityGroupF7DF9E6F", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 43, + "startLine": 86, "startColumn": 4, - "endLine": 43, + "endLine": 86, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -6133,19 +6510,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'connectlambdaFFAE59F3' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'lambdafunction1A09FC241' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "connectlambdaFFAE59F3", + "logicalId": "lambdafunction1A09FC241", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 134, + "startLine": 111, "startColumn": 4, - "endLine": 134, + "endLine": 111, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -6153,19 +6530,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'disconnectlambdaServiceRole2779F08C' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "disconnectlambdaServiceRole2779F08C", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 170, + "startLine": 211, "startColumn": 4, - "endLine": 170, + "endLine": 211, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -6173,19 +6550,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'disconnectlambdaAC22A441' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "disconnectlambdaAC22A441", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 261, + "startLine": 272, "startColumn": 4, - "endLine": 261, + "endLine": 272, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -6193,19 +6570,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'messagelambdaServiceRole544EC18A' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'lambdafunction2ServiceRole380A1BE9' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "messagelambdaServiceRole544EC18A", + "logicalId": "lambdafunction2ServiceRole380A1BE9", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 297, + "startLine": 302, "startColumn": 4, - "endLine": 297, + "endLine": 302, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -6213,19 +6590,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'messagelambda16C1C2A3' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'lambdafunction2SecurityGroup7268045A' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "messagelambda16C1C2A3", + "logicalId": "lambdafunction2SecurityGroup7268045A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 404, + "startLine": 351, "startColumn": 4, - "endLine": 404, + "endLine": 351, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -6233,19 +6610,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'chatappapiiamrole2977C2A3' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'lambdafunction2F899168D' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "chatappapiiamrole2977C2A3", + "logicalId": "lambdafunction2F899168D", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 440, + "startLine": 376, "startColumn": 4, - "endLine": 440, + "endLine": 376, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -6253,148 +6630,169 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'chatappapistage' of type 'AWS::ApiGatewayV2::Stage' supports Tags but none are configured", + "message": "Resource 'stepfunctionsloggroup6EBF6C71' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "chatappapistage", + "logicalId": "stepfunctionsloggroup6EBF6C71", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Stage" + "resourceType": "AWS::Logs::LogGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 690, + "startLine": 476, "startColumn": 4, - "endLine": 690, + "endLine": 476, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "cdk/application-load-balancer--LoadBalancerStack.template.json": { - "filePath": "cdk/application-load-balancer--LoadBalancerStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 36, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 5, - "informational": 72, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LBListener49E825B4' dependency already enforced by a 'Ref' at 'Properties.TargetTrackingConfiguration.PredefinedMetricSpecification.ResourceLabel.Fn::Join.1.0'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'mystatemachineRole70AA91FD' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ASGScalingPolicyAModestLoadC5714E5A", + "logicalId": "mystatemachineRole70AA91FD", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::ScalingPolicy" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 687, + "startLine": 487, "startColumn": 4, - "endLine": 687, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 487, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LBListener49E825B4' dependency already enforced by a 'Ref' at 'Properties.TargetTrackingConfiguration.PredefinedMetricSpecification.ResourceLabel.Fn::Join.1.2'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'mystatemachine15ECA539' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ASGScalingPolicyAModestLoadC5714E5A", + "logicalId": "mystatemachine15ECA539", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::ScalingPolicy" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 687, + "startLine": 592, "startColumn": 4, - "endLine": 687, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 592, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LBListener49E825B4' dependency already enforced by a 'Ref' at 'Properties.TargetTrackingConfiguration.PredefinedMetricSpecification.ResourceLabel.Fn::Join.1.4'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myapi4C7BF186' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ASGScalingPolicyAModestLoadC5714E5A", + "logicalId": "myapi4C7BF186", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::ScalingPolicy" + "resourceType": "AWS::ApiGateway::RestApi" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 687, + "startLine": 658, "startColumn": 4, - "endLine": 687, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 658, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LBListenerTargetGroupF04FCF6D' dependency already enforced by a 'GetAtt' at 'Properties.TargetTrackingConfiguration.PredefinedMetricSpecification.ResourceLabel.Fn::Join.1.6'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myapiCloudWatchRole095452E5' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ASGScalingPolicyAModestLoadC5714E5A", + "logicalId": "myapiCloudWatchRole095452E5", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::ScalingPolicy" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 687, + "startLine": 668, "startColumn": 4, - "endLine": 687, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 668, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3697", - "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myapiDeploymentStagedevB1704B15' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "myapiDeploymentStagedevB1704B15", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::ApiGateway::Stage" }, - "category": "Deprecation", - "startLine": 551, - "startColumn": 3, - "endLine": 551, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 741, + "startColumn": 4, + "endLine": 741, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myapiANYStartSyncExecutionRole7935C5BB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "myapiANYStartSyncExecutionRole7935C5BB", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 759, + "startColumn": 4, + "endLine": 759, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/api-gateway-parallel-step-functions--apigatewayparallelstepfunctionsstack2nestedstacklambda9F5CAB08.nested.template.json": { + "filePath": "cdk/api-gateway-parallel-step-functions--apigatewayparallelstepfunctionsstack2nestedstacklambda9F5CAB08.nested.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 18, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 31, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCB9E5F0B4", + "logicalId": "nestedstackvpc4488A7AF", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, @@ -6416,7 +6814,7 @@ "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCB9E5F0B4", + "logicalId": "nestedstackvpc4488A7AF", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, @@ -6438,7 +6836,7 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1SubnetB4246D30", + "logicalId": "nestedstackvpcpublicsubnet1Subnet1Subnet89E5486A", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -6460,7 +6858,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1SubnetB4246D30", + "logicalId": "nestedstackvpcpublicsubnet1Subnet1Subnet89E5486A", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -6482,7 +6880,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1SubnetB4246D30", + "logicalId": "nestedstackvpcpublicsubnet1Subnet1Subnet89E5486A", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -6496,7 +6894,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" } }, { @@ -6505,7 +6903,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1RouteTableFEE4B781", + "logicalId": "nestedstackvpcpublicsubnet1Subnet1RouteTable518786D0", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, @@ -6520,7 +6918,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" } }, { @@ -6529,7 +6927,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", + "logicalId": "nestedstackvpcpublicsubnet1Subnet1RouteTableAssociationE08618B5", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -6544,7 +6942,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'", + "resolutionSource": "Ref to 'nestedstackvpcpublicsubnet1Subnet1RouteTable518786D0'", "extra": { "replacement_strategy": "delete_then_create" } @@ -6556,7 +6954,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", + "logicalId": "nestedstackvpcpublicsubnet1Subnet1RouteTableAssociationE08618B5", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -6571,7 +6969,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'", + "resolutionSource": "Ref to 'nestedstackvpcpublicsubnet1Subnet1Subnet89E5486A'", "extra": { "replacement_strategy": "delete_then_create" } @@ -6583,7 +6981,7 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", + "logicalId": "nestedstackvpcpublicsubnet1Subnet1DefaultRouteA3ABB16E", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -6606,7 +7004,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", + "logicalId": "nestedstackvpcpublicsubnet1Subnet1DefaultRouteA3ABB16E", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -6621,53 +7019,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VPCPublicSubnet1NATGatewayE0556630", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.AllocationId", - "category": "Best Practice", - "startLine": 123, - "startColumn": 5, - "endLine": 123, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt VPCPublicSubnet1EIP6AD938E8.AllocationId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VPCPublicSubnet1NATGatewayE0556630", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 129, - "startColumn": 5, - "endLine": 129, - "endColumn": 14, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'" + "resolutionSource": "Ref to 'nestedstackvpcpublicsubnet1Subnet1RouteTable518786D0'" } }, { @@ -6676,15 +7028,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2Subnet74179F39", + "logicalId": "nestedstackvpcpublicsubnet1Subnet2Subnet778CFACA", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 150, + "startLine": 108, "startColumn": 5, - "endLine": 150, + "endLine": 108, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -6698,15 +7050,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2Subnet74179F39", + "logicalId": "nestedstackvpcpublicsubnet1Subnet2Subnet778CFACA", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 158, + "startLine": 116, "startColumn": 5, - "endLine": 158, + "endLine": 116, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -6720,21 +7072,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2Subnet74179F39", + "logicalId": "nestedstackvpcpublicsubnet1Subnet2Subnet778CFACA", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 174, + "startLine": 132, "startColumn": 5, - "endLine": 174, + "endLine": 132, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" } }, { @@ -6743,22 +7095,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2RouteTable6F1A15F1", + "logicalId": "nestedstackvpcpublicsubnet1Subnet2RouteTableF3884194", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 191, + "startLine": 149, "startColumn": 5, - "endLine": 191, + "endLine": 149, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" } }, { @@ -6767,22 +7119,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2RouteTableAssociation5A808732", + "logicalId": "nestedstackvpcpublicsubnet1Subnet2RouteTableAssociation432D9A37", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 202, + "startLine": 160, "startColumn": 5, - "endLine": 202, + "endLine": 160, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet2RouteTable6F1A15F1'", + "resolutionSource": "Ref to 'nestedstackvpcpublicsubnet1Subnet2RouteTableF3884194'", "extra": { "replacement_strategy": "delete_then_create" } @@ -6794,22 +7146,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2RouteTableAssociation5A808732", + "logicalId": "nestedstackvpcpublicsubnet1Subnet2RouteTableAssociation432D9A37", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 205, + "startLine": 163, "startColumn": 5, - "endLine": 205, + "endLine": 163, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet2Subnet74179F39'", + "resolutionSource": "Ref to 'nestedstackvpcpublicsubnet1Subnet2Subnet778CFACA'", "extra": { "replacement_strategy": "delete_then_create" } @@ -6821,15 +7173,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2DefaultRouteB7481BBA", + "logicalId": "nestedstackvpcpublicsubnet1Subnet2DefaultRouteC44F12D1", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 216, + "startLine": 174, "startColumn": 5, - "endLine": 216, + "endLine": 174, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -6844,68 +7196,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2DefaultRouteB7481BBA", + "logicalId": "nestedstackvpcpublicsubnet1Subnet2DefaultRouteC44F12D1", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 220, + "startLine": 178, "startColumn": 5, - "endLine": 220, + "endLine": 178, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet2RouteTable6F1A15F1'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VPCPublicSubnet2NATGateway3C070193", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.AllocationId", - "category": "Best Practice", - "startLine": 249, - "startColumn": 5, - "endLine": 249, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt VPCPublicSubnet2EIP4947BC00.AllocationId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VPCPublicSubnet2NATGateway3C070193", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 255, - "startColumn": 5, - "endLine": 255, - "endColumn": 14, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet2Subnet74179F39'" + "resolutionSource": "Ref to 'nestedstackvpcpublicsubnet1Subnet2RouteTableF3884194'" } }, { @@ -6914,15 +7220,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", + "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet1Subnet46C8720E", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 276, + "startLine": 192, "startColumn": 5, - "endLine": 276, + "endLine": 192, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -6936,15 +7242,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", + "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet1Subnet46C8720E", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 284, + "startLine": 200, "startColumn": 5, - "endLine": 284, + "endLine": 200, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -6958,21 +7264,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", + "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet1Subnet46C8720E", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 300, + "startLine": 216, "startColumn": 5, - "endLine": 300, + "endLine": 216, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" } }, { @@ -6981,22 +7287,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1RouteTableBE8A6027", + "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet1RouteTable5302591F", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 317, + "startLine": 233, "startColumn": 5, - "endLine": 317, + "endLine": 233, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" } }, { @@ -7005,22 +7311,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1RouteTableAssociation347902D1", + "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet1RouteTableAssociation6C6975EB", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 328, + "startLine": 244, "startColumn": 5, - "endLine": 328, + "endLine": 244, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet1RouteTableBE8A6027'", + "resolutionSource": "Ref to 'nestedstackvpcprivateisolatedsubnet1Subnet1RouteTable5302591F'", "extra": { "replacement_strategy": "delete_then_create" } @@ -7032,89 +7338,42 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1RouteTableAssociation347902D1", + "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet1RouteTableAssociation6C6975EB", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 331, + "startLine": 247, "startColumn": 5, - "endLine": 331, + "endLine": 247, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet1Subnet8BCA10E0'", + "resolutionSource": "Ref to 'nestedstackvpcprivateisolatedsubnet1Subnet1Subnet46C8720E'", "extra": { "replacement_strategy": "delete_then_create" } } }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VPCPrivateSubnet1DefaultRouteAE1D6490", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.DestinationCidrBlock", - "category": "Best Practice", - "startLine": 342, - "startColumn": 5, - "endLine": 342, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VPCPrivateSubnet1DefaultRouteAE1D6490", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 346, - "startColumn": 5, - "endLine": 346, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet1RouteTableBE8A6027'" - } - }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2SubnetCFCDAA7A", + "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet2Subnet89BFE59F", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 357, + "startLine": 258, "startColumn": 5, - "endLine": 357, + "endLine": 258, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -7128,15 +7387,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2SubnetCFCDAA7A", + "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet2Subnet89BFE59F", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 365, + "startLine": 266, "startColumn": 5, - "endLine": 365, + "endLine": 266, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -7150,21 +7409,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2SubnetCFCDAA7A", + "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet2Subnet89BFE59F", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 381, + "startLine": 282, "startColumn": 5, - "endLine": 381, + "endLine": 282, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" } }, { @@ -7173,22 +7432,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2RouteTable0A19E10E", + "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet2RouteTableEA03EC80", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 398, + "startLine": 299, "startColumn": 5, - "endLine": 398, + "endLine": 299, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'" } }, { @@ -7197,22 +7456,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2RouteTableAssociation0C73D413", + "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet2RouteTableAssociation61E13F31", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 409, + "startLine": 310, "startColumn": 5, - "endLine": 409, + "endLine": 310, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet2RouteTable0A19E10E'", + "resolutionSource": "Ref to 'nestedstackvpcprivateisolatedsubnet1Subnet2RouteTableEA03EC80'", "extra": { "replacement_strategy": "delete_then_create" } @@ -7224,22 +7483,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2RouteTableAssociation0C73D413", + "logicalId": "nestedstackvpcprivateisolatedsubnet1Subnet2RouteTableAssociation61E13F31", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 412, + "startLine": 313, "startColumn": 5, - "endLine": 412, + "endLine": 313, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet2SubnetCFCDAA7A'", + "resolutionSource": "Ref to 'nestedstackvpcprivateisolatedsubnet1Subnet2Subnet89BFE59F'", "extra": { "replacement_strategy": "delete_then_create" } @@ -7248,93 +7507,125 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2DefaultRouteF4F5CFD2", + "logicalId": "nestedstackvpcVPCGWA39BF2BE", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 423, + "startLine": 341, "startColumn": 5, - "endLine": 423, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 341, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'nestedstackvpc4488A7AF'", + "extra": { + "replacement_strategy": "delete_then_create" + } } + } + ] + }, + "cdk/api-websocket-lambda-dynamodb--chat-app.template.json": { + "filePath": "cdk/api-websocket-lambda-dynamodb--chat-app.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 22, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 3, + "informational": 22, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'connectlambdaServiceRole04DCF570' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "VPCPrivateSubnet2DefaultRouteF4F5CFD2", + "logicalId": "connectlambdaFFAE59F3", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 427, - "startColumn": 5, - "endLine": 427, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet2RouteTable0A19E10E'" - } + "startLine": 157, + "startColumn": 4, + "endLine": 157, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'disconnectlambdaServiceRole2779F08C' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "VPCVPCGW99B986DC", + "logicalId": "disconnectlambdaAC22A441", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 455, - "startColumn": 5, - "endLine": 455, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 284, + "startColumn": 4, + "endLine": 284, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'messagelambdaServiceRole544EC18A' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "messagelambda16C1C2A3", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 427, + "startColumn": 4, + "endLine": 427, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'ProtocolType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroup0525485D", + "logicalId": "chatappapi", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGatewayV2::Api" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.ProtocolType", "category": "Best Practice", - "startLine": 466, + "startLine": 7, "startColumn": 5, - "endLine": 466, - "endColumn": 22, + "endLine": 7, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -7344,43 +7635,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroup0525485D", + "logicalId": "chatappapitable5244EF8B", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 480, + "startLine": 23, "startColumn": 5, - "endLine": 480, - "endColumn": 11, + "endLine": 23, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", + "logicalId": "chatappapitable5244EF8B", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 492, + "startLine": 33, "startColumn": 5, - "endLine": 492, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 33, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -7390,207 +7679,212 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", + "logicalId": "connectlambdaintegration", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ApiGatewayV2::Integration" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 493, + "startLine": 504, "startColumn": 5, - "endLine": 493, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 504, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ASGInstanceSecurityGroup0525485D.GroupId" + "resolutionSource": "Ref to 'chatappapi'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", + "logicalId": "disconnectlambdaintegration", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ApiGatewayV2::Integration" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 499, + "startLine": 537, "startColumn": 5, - "endLine": 499, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 537, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'chatappapi'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", + "logicalId": "messagelambdaintegration", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ApiGatewayV2::Integration" }, - "propertyPath": "Properties.SourceSecurityGroupId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 500, + "startLine": 570, "startColumn": 5, - "endLine": 500, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 570, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt LBSecurityGroup8A41EA2B.GroupId" + "resolutionSource": "Ref to 'chatappapi'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", + "logicalId": "connectroute", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ApiGatewayV2::Route" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 506, + "startLine": 603, "startColumn": 5, - "endLine": 506, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 603, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'chatappapi'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "disconnectroute", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::ApiGatewayV2::Route" }, - "propertyPath": "Properties.IamInstanceProfile", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 554, + "startLine": 627, "startColumn": 5, - "endLine": 554, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 627, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ASGInstanceProfile0A2834D7'" + "resolutionSource": "Ref to 'chatappapi'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "messageroute", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::ApiGatewayV2::Route" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 557, + "startLine": 651, "startColumn": 5, - "endLine": 557, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 651, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'chatappapi'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "chatappapideployment", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::ApiGatewayV2::Deployment" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 560, + "startLine": 675, "startColumn": 5, - "endLine": 560, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 675, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'chatappapi'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "chatappapistage", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::ApiGatewayV2::Stage" }, - "propertyPath": "Properties.SecurityGroups", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 561, + "startLine": 691, "startColumn": 5, - "endLine": 561, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 691, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'chatappapi'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "chatappapistage", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::ApiGatewayV2::Stage" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 569, + "startLine": 698, "startColumn": 5, - "endLine": 569, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 698, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -7598,276 +7892,339 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'chatappapi' of type 'AWS::ApiGatewayV2::Api' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ASG46ED3070", + "logicalId": "chatappapi", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::ApiGatewayV2::Api" }, - "propertyPath": "Properties.LaunchConfigurationName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 583, - "startColumn": 5, - "endLine": 583, - "endColumn": 29, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'ASGLaunchConfigC00AF12B'" - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'chatappapitable5244EF8B' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ASG46ED3070", + "logicalId": "chatappapitable5244EF8B", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.VPCZoneIdentifier", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 600, - "startColumn": 5, - "endLine": 600, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 16, + "startColumn": 4, + "endLine": 16, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", + "message": "Resource 'connectlambdaServiceRole04DCF570' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ASGScalingPolicyAModestLoadC5714E5A", + "logicalId": "connectlambdaServiceRole04DCF570", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::ScalingPolicy" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.AutoScalingGroupName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 621, - "startColumn": 5, - "endLine": 621, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ASG46ED3070'" - } + "startLine": 43, + "startColumn": 4, + "endLine": 43, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", + "message": "Resource 'connectlambdaFFAE59F3' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LB8A12904C", + "logicalId": "connectlambdaFFAE59F3", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Scheme", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 704, - "startColumn": 5, - "endLine": 704, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 134, + "startColumn": 4, + "endLine": 134, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Resource 'disconnectlambdaServiceRole2779F08C' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LB8A12904C", + "logicalId": "disconnectlambdaServiceRole2779F08C", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 721, - "startColumn": 5, - "endLine": 721, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 170, + "startColumn": 4, + "endLine": 170, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Resource 'disconnectlambdaAC22A441' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGroup8A41EA2B", + "logicalId": "disconnectlambdaAC22A441", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 736, - "startColumn": 5, - "endLine": 736, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 261, + "startColumn": 4, + "endLine": 261, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'messagelambdaServiceRole544EC18A' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGroup8A41EA2B", + "logicalId": "messagelambdaServiceRole544EC18A", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 746, - "startColumn": 5, - "endLine": 746, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" - } + "startLine": 297, + "startColumn": 4, + "endLine": 297, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'DestinationSecurityGroupId' is create-only; updating it will cause resource replacement", + "message": "Resource 'messagelambda16C1C2A3' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", + "logicalId": "messagelambda16C1C2A3", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.DestinationSecurityGroupId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 758, - "startColumn": 5, - "endLine": 758, - "endColumn": 32, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ASGInstanceSecurityGroup0525485D.GroupId" - } + "startLine": 404, + "startColumn": 4, + "endLine": 404, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Resource 'chatappapiiamrole2977C2A3' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", + "logicalId": "chatappapiiamrole2977C2A3", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 764, - "startColumn": 5, - "endLine": 764, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 440, + "startColumn": 4, + "endLine": 440, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Resource 'chatappapistage' of type 'AWS::ApiGatewayV2::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", + "logicalId": "chatappapistage", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::ApiGatewayV2::Stage" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 765, - "startColumn": 5, - "endLine": 765, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt LBSecurityGroup8A41EA2B.GroupId" - } + "startLine": 690, + "startColumn": 4, + "endLine": 690, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/application-load-balancer--LoadBalancerStack.template.json": { + "filePath": "cdk/application-load-balancer--LoadBalancerStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 36, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 5, + "informational": 72, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'LBListener49E825B4' dependency already enforced by a 'Ref' at 'Properties.TargetTrackingConfiguration.PredefinedMetricSpecification.ResourceLabel.Fn::Join.1.0'", + "source": "CFN_LINT", "entity": { - "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", + "logicalId": "ASGScalingPolicyAModestLoadC5714E5A", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::AutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 771, - "startColumn": 5, - "endLine": 771, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 687, + "startColumn": 4, + "endLine": 687, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'LBListener49E825B4' dependency already enforced by a 'Ref' at 'Properties.TargetTrackingConfiguration.PredefinedMetricSpecification.ResourceLabel.Fn::Join.1.2'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ASGScalingPolicyAModestLoadC5714E5A", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::ScalingPolicy" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 687, + "startColumn": 4, + "endLine": 687, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'LBListener49E825B4' dependency already enforced by a 'Ref' at 'Properties.TargetTrackingConfiguration.PredefinedMetricSpecification.ResourceLabel.Fn::Join.1.4'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ASGScalingPolicyAModestLoadC5714E5A", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::ScalingPolicy" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 687, + "startColumn": 4, + "endLine": 687, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'LBListenerTargetGroupF04FCF6D' dependency already enforced by a 'GetAtt' at 'Properties.TargetTrackingConfiguration.PredefinedMetricSpecification.ResourceLabel.Fn::Join.1.6'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ASGScalingPolicyAModestLoadC5714E5A", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::ScalingPolicy" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 687, + "startColumn": 4, + "endLine": 687, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "ASGLaunchConfigC00AF12B", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "category": "Deprecation", + "startLine": 551, + "startColumn": 3, + "endLine": 551, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", + "logicalId": "VPCB9E5F0B4", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 772, + "startLine": 6, "startColumn": 5, - "endLine": 772, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 6, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -7877,43 +8234,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LBListener49E825B4", + "logicalId": "VPCB9E5F0B4", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.LoadBalancerArn", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 789, + "startLine": 9, "startColumn": 5, - "endLine": 789, + "endLine": 9, "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'LB8A12904C'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LBListenerTargetGroupF04FCF6D", + "logicalId": "VPCPublicSubnet1SubnetB4246D30", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 802, + "startLine": 24, "startColumn": 5, - "endLine": 802, - "endColumn": 10, + "endLine": 24, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -7923,19 +8278,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LBListenerTargetGroupF04FCF6D", + "logicalId": "VPCPublicSubnet1SubnetB4246D30", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 803, + "startLine": 32, "startColumn": 5, - "endLine": 803, - "endColumn": 14, + "endLine": 32, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -7945,23 +8300,24 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LBListenerTargetGroupF04FCF6D", + "logicalId": "VPCPublicSubnet1SubnetB4246D30", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.TargetType", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 810, + "startLine": 48, "startColumn": 5, - "endLine": 810, - "endColumn": 16, + "endLine": 48, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { @@ -7970,16 +8326,17 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LBListenerTargetGroupF04FCF6D", + "logicalId": "VPCPublicSubnet1RouteTableFEE4B781", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 811, + "startLine": 65, "startColumn": 5, - "endLine": 811, + "endLine": 65, "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -7988,185 +8345,189 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LB8A12904C' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LB8A12904C", + "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 697, - "startColumn": 4, - "endLine": 697, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 76, + "startColumn": 5, + "endLine": 76, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LBSecurityGroup8A41EA2B' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGroup8A41EA2B", + "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 735, - "startColumn": 4, - "endLine": 735, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 79, + "startColumn": 5, + "endLine": 79, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LBListener49E825B4' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LBListener49E825B4", + "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 780, - "startColumn": 4, - "endLine": 780, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 90, + "startColumn": 5, + "endLine": 90, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LBListenerTargetGroupF04FCF6D' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LBListenerTargetGroupF04FCF6D", + "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 801, - "startColumn": 4, - "endLine": 801, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/appsync-graphql-dynamodb--CdkAppsyncDemoStack.template.json": { - "filePath": "cdk/appsync-graphql-dynamodb--CdkAppsyncDemoStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 15, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 22, - "debug": 0 + "startLine": 94, + "startColumn": 5, + "endLine": 94, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CarTableA597893A", + "logicalId": "VPCPublicSubnet1NATGatewayE0556630", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 12, + "startLine": 123, "startColumn": 5, - "endLine": 12, - "endColumn": 15, + "endLine": 123, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt VPCPublicSubnet1EIP6AD938E8.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CarTableA597893A", + "logicalId": "VPCPublicSubnet1NATGatewayE0556630", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.TableName", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 22, + "startLine": 129, "startColumn": 5, - "endLine": 22, - "endColumn": 15, + "endLine": 129, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DefectsTable2A57950B", + "logicalId": "VPCPublicSubnet2Subnet74179F39", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 61, + "startLine": 150, "startColumn": 5, - "endLine": 61, - "endColumn": 15, + "endLine": 150, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DefectsTable2A57950B", + "logicalId": "VPCPublicSubnet2Subnet74179F39", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.TableName", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 71, + "startLine": 158, "startColumn": 5, - "endLine": 71, + "endLine": 158, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -8177,114 +8538,121 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CarApiSchema8E4784D9", + "logicalId": "VPCPublicSubnet2Subnet74179F39", "entityType": "Resource", - "resourceType": "AWS::AppSync::GraphQLSchema" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 93, + "startLine": 174, "startColumn": 5, - "endLine": 93, + "endLine": 174, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt CarApiE5E7ACF5.ApiId" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CarApiCarsDataSourceD8C35DA8", + "logicalId": "VPCPublicSubnet2RouteTable6F1A15F1", "entityType": "Resource", - "resourceType": "AWS::AppSync::DataSource" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 170, + "startLine": 191, "startColumn": 5, - "endLine": 170, + "endLine": 191, "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt CarApiE5E7ACF5.ApiId" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CarApiCarsDataSourceD8C35DA8", + "logicalId": "VPCPublicSubnet2RouteTableAssociation5A808732", "entityType": "Resource", - "resourceType": "AWS::AppSync::DataSource" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 182, + "startLine": 202, "startColumn": 5, - "endLine": 182, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", + "endLine": 202, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet2RouteTable6F1A15F1'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CarApiDefectsDataSourceEBF3B13F", + "logicalId": "VPCPublicSubnet2RouteTableAssociation5A808732", "entityType": "Resource", - "resourceType": "AWS::AppSync::DataSource" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 276, + "startLine": 205, "startColumn": 5, - "endLine": 276, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", + "endLine": 205, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt CarApiE5E7ACF5.ApiId" + "resolutionSource": "Ref to 'VPCPublicSubnet2Subnet74179F39'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CarApiDefectsDataSourceEBF3B13F", + "logicalId": "VPCPublicSubnet2DefaultRouteB7481BBA", "entityType": "Resource", - "resourceType": "AWS::AppSync::DataSource" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 288, + "startLine": 216, "startColumn": 5, - "endLine": 288, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", + "endLine": 216, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -8294,92 +8662,89 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CarsFunction7C2F2ED2", + "logicalId": "VPCPublicSubnet2DefaultRouteB7481BBA", "entityType": "Resource", - "resourceType": "AWS::AppSync::FunctionConfiguration" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 304, + "startLine": 220, "startColumn": 5, - "endLine": 304, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 220, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt CarApiE5E7ACF5.ApiId" + "resolutionSource": "Ref to 'VPCPublicSubnet2RouteTable6F1A15F1'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DefectsFunction929174B7", + "logicalId": "VPCPublicSubnet2NATGateway3C070193", "entityType": "Resource", - "resourceType": "AWS::AppSync::FunctionConfiguration" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 332, + "startLine": 249, "startColumn": 5, - "endLine": 332, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 249, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt CarApiE5E7ACF5.ApiId" + "resolutionSource": "GetAtt VPCPublicSubnet2EIP4947BC00.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PipelineResolverGetCars2DDF5816", + "logicalId": "VPCPublicSubnet2NATGateway3C070193", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 360, + "startLine": 255, "startColumn": 5, - "endLine": 360, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 255, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt CarApiE5E7ACF5.ApiId" + "resolutionSource": "Ref to 'VPCPublicSubnet2Subnet74179F39'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PipelineResolverGetCars2DDF5816", + "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.FieldName", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 369, + "startLine": 276, "startColumn": 5, - "endLine": 369, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 276, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -8389,20 +8754,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PipelineResolverGetCars2DDF5816", + "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.TypeName", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 385, + "startLine": 284, "startColumn": 5, - "endLine": 385, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 284, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -8412,391 +8776,386 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PipelineResolverGetDefects032EF131", + "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 397, + "startLine": 300, "startColumn": 5, - "endLine": 397, + "endLine": 300, "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt CarApiE5E7ACF5.ApiId" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PipelineResolverGetDefects032EF131", + "logicalId": "VPCPrivateSubnet1RouteTableBE8A6027", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.FieldName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 406, + "startLine": 317, "startColumn": 5, - "endLine": 406, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 317, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PipelineResolverGetDefects032EF131", + "logicalId": "VPCPrivateSubnet1RouteTableAssociation347902D1", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.TypeName", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 422, + "startLine": 328, "startColumn": 5, - "endLine": 422, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 328, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPrivateSubnet1RouteTableBE8A6027'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CarTableA597893A' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CarTableA597893A", + "logicalId": "VPCPrivateSubnet1RouteTableAssociation347902D1", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 331, + "startColumn": 5, + "endLine": 331, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPrivateSubnet1Subnet8BCA10E0'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DefectsTable2A57950B' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DefectsTable2A57950B", + "logicalId": "VPCPrivateSubnet1DefaultRouteAE1D6490", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 32, - "startColumn": 4, - "endLine": 32, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 342, + "startColumn": 5, + "endLine": 342, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CarApiE5E7ACF5' of type 'AWS::AppSync::GraphQLApi' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CarApiE5E7ACF5", + "logicalId": "VPCPrivateSubnet1DefaultRouteAE1D6490", "entityType": "Resource", - "resourceType": "AWS::AppSync::GraphQLApi" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 81, - "startColumn": 4, - "endLine": 81, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 346, + "startColumn": 5, + "endLine": 346, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPrivateSubnet1RouteTableBE8A6027'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CarApiCarsDataSourceServiceRole82F3FC8A' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CarApiCarsDataSourceServiceRole82F3FC8A", + "logicalId": "VPCPrivateSubnet2SubnetCFCDAA7A", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 107, - "startColumn": 4, - "endLine": 107, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 357, + "startColumn": 5, + "endLine": 357, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CarApiDefectsDataSourceServiceRole7EDF6907' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CarApiDefectsDataSourceServiceRole7EDF6907", + "logicalId": "VPCPrivateSubnet2SubnetCFCDAA7A", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 197, - "startColumn": 4, - "endLine": 197, + "startLine": 365, + "startColumn": 5, + "endLine": 365, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/appsync-graphql-eventbridge--AppSyncEventBridge.template.json": { - "filePath": "cdk/appsync-graphql-eventbridge--AppSyncEventBridge.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 12, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 16, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'echoFunctionServiceRole1EBD6DF0' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "echoFunction5207BE9B", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 202, - "startColumn": 4, - "endLine": 202, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AppSync2EventBridgeApiKey", + "logicalId": "VPCPrivateSubnet2SubnetCFCDAA7A", "entityType": "Resource", - "resourceType": "AWS::AppSync::ApiKey" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 16, + "startLine": 381, "startColumn": 5, - "endLine": 16, + "endLine": 381, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt AppSync2EventBridgeApi.ApiId" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ItemsSchema", + "logicalId": "VPCPrivateSubnet2RouteTable0A19E10E", "entityType": "Resource", - "resourceType": "AWS::AppSync::GraphQLSchema" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 30, + "startLine": 398, "startColumn": 5, - "endLine": 30, + "endLine": 398, "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt AppSync2EventBridgeApi.ApiId" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ItemsDataSource", + "logicalId": "VPCPrivateSubnet2RouteTableAssociation0C73D413", "entityType": "Resource", - "resourceType": "AWS::AppSync::DataSource" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 89, + "startLine": 409, "startColumn": 5, - "endLine": 89, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", + "endLine": 409, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt AppSync2EventBridgeApi.ApiId" + "resolutionSource": "Ref to 'VPCPrivateSubnet2RouteTable0A19E10E'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ItemsDataSource", + "logicalId": "VPCPrivateSubnet2RouteTableAssociation0C73D413", "entityType": "Resource", - "resourceType": "AWS::AppSync::DataSource" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 118, + "startLine": 412, "startColumn": 5, - "endLine": 118, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", + "endLine": 412, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPrivateSubnet2SubnetCFCDAA7A'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PutEventMutationResolver", + "logicalId": "VPCPrivateSubnet2DefaultRouteF4F5CFD2", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 134, + "startLine": 423, "startColumn": 5, - "endLine": 134, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 423, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt AppSync2EventBridgeApi.ApiId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PutEventMutationResolver", + "logicalId": "VPCPrivateSubnet2DefaultRouteF4F5CFD2", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.FieldName", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 141, + "startLine": 427, "startColumn": 5, - "endLine": 141, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 427, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPrivateSubnet2RouteTable0A19E10E'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PutEventMutationResolver", + "logicalId": "VPCVPCGW99B986DC", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.TypeName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 144, + "startLine": 455, "startColumn": 5, - "endLine": 144, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 455, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AppSyncEventBridgeRleAllowEventRuleAppSyncEventBridgeechoFunction7F06E48E35535C50", + "logicalId": "ASGInstanceSecurityGroup0525485D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 237, + "startLine": 466, "startColumn": 5, - "endLine": 237, - "endColumn": 12, + "endLine": 466, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -8806,42 +9165,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AppSyncEventBridgeRleAllowEventRuleAppSyncEventBridgeechoFunction7F06E48E35535C50", + "logicalId": "ASGInstanceSecurityGroup0525485D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 238, + "startLine": 480, "startColumn": 5, - "endLine": 238, - "endColumn": 18, + "endLine": 480, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt echoFunction5207BE9B.Arn" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AppSyncEventBridgeRleAllowEventRuleAppSyncEventBridgeechoFunction7F06E48E35535C50", + "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 244, + "startLine": 492, "startColumn": 5, - "endLine": 244, - "endColumn": 15, + "endLine": 492, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -8851,232 +9211,207 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AppSyncEventBridgeRleAllowEventRuleAppSyncEventBridgeechoFunction7F06E48E35535C50", + "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 245, + "startLine": 493, "startColumn": 5, - "endLine": 245, - "endColumn": 15, + "endLine": 493, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt AppSyncEventBridgeRle2A25B9B1.Arn" + "resolutionSource": "GetAtt ASGInstanceSecurityGroup0525485D.GroupId" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'AppSync2EventBridgeApi' of type 'AWS::AppSync::GraphQLApi' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "AppSync2EventBridgeApi", - "entityType": "Resource", - "resourceType": "AWS::AppSync::GraphQLApi" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'AppSyncEventBridgeRoleE2F34FE0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AppSyncEventBridgeRoleE2F34FE0", + "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 44, - "startColumn": 4, - "endLine": 44, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 499, + "startColumn": 5, + "endLine": 499, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'echoFunctionServiceRole1EBD6DF0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "echoFunctionServiceRole1EBD6DF0", + "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SourceSecurityGroupId", "category": "Best Practice", - "startLine": 155, - "startColumn": 4, - "endLine": 155, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 500, + "startColumn": 5, + "endLine": 500, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt LBSecurityGroup8A41EA2B.GroupId" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'echoFunction5207BE9B' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "echoFunction5207BE9B", + "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 189, - "startColumn": 4, - "endLine": 189, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 506, + "startColumn": 5, + "endLine": 506, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'AppSyncEventBridgeRle2A25B9B1' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AppSyncEventBridgeRle2A25B9B1", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.IamInstanceProfile", "category": "Best Practice", - "startLine": 211, - "startColumn": 4, - "endLine": 211, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/appsync-graphql-http--AppSyncGraphQLHTTPExample.template.json": { - "filePath": "cdk/appsync-graphql-http--AppSyncGraphQLHTTPExample.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 9, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 17, - "debug": 0 + "startLine": 554, + "startColumn": 5, + "endLine": 554, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ASGInstanceProfile0A2834D7'" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PostsApiKey", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::AppSync::ApiKey" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 16, + "startLine": 557, "startColumn": 5, - "endLine": 16, - "endColumn": 11, + "endLine": 557, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt PostsApiCdk.ApiId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PostsSchema", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::AppSync::GraphQLSchema" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 30, + "startLine": 560, "startColumn": 5, - "endLine": 30, - "endColumn": 11, + "endLine": 560, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt PostsApiCdk.ApiId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PostsDataSource", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::AppSync::DataSource" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.SecurityGroups", "category": "Best Practice", - "startLine": 45, + "startLine": 561, "startColumn": 5, - "endLine": 45, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", + "endLine": 561, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt PostsApiCdk.ApiId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'UserData' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PostsDataSource", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::AppSync::DataSource" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 54, + "startLine": 569, "startColumn": 5, - "endLine": 54, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", + "endLine": 569, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9086,114 +9421,112 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GetOneQueryResolver", + "logicalId": "ASG46ED3070", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.LaunchConfigurationName", "category": "Best Practice", - "startLine": 64, + "startLine": 583, "startColumn": 5, - "endLine": 64, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 583, + "endColumn": 29, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt PostsApiCdk.ApiId" + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'ASGLaunchConfigC00AF12B'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", + "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GetOneQueryResolver", + "logicalId": "ASG46ED3070", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.FieldName", + "propertyPath": "Properties.VPCZoneIdentifier", "category": "Best Practice", - "startLine": 72, + "startLine": 600, "startColumn": 5, - "endLine": 72, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 600, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", + "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GetOneQueryResolver", + "logicalId": "ASGScalingPolicyAModestLoadC5714E5A", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::AutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.TypeName", + "propertyPath": "Properties.AutoScalingGroupName", "category": "Best Practice", - "startLine": 77, + "startLine": 621, "startColumn": 5, - "endLine": 77, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 621, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ASG46ED3070'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GetAllQueryResolver", + "logicalId": "LB8A12904C", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.Scheme", "category": "Best Practice", - "startLine": 89, + "startLine": 704, "startColumn": 5, - "endLine": 89, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 704, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt PostsApiCdk.ApiId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GetAllQueryResolver", + "logicalId": "LB8A12904C", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.FieldName", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 97, + "startLine": 721, "startColumn": 5, - "endLine": 97, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 721, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9203,20 +9536,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GetAllQueryResolver", + "logicalId": "LBSecurityGroup8A41EA2B", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.TypeName", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 102, + "startLine": 736, "startColumn": 5, - "endLine": 102, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 736, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9226,67 +9558,67 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SaveMutationResolver", + "logicalId": "LBSecurityGroup8A41EA2B", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 114, + "startLine": 746, "startColumn": 5, - "endLine": 114, + "endLine": 746, "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt PostsApiCdk.ApiId" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationSecurityGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SaveMutationResolver", + "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.FieldName", + "propertyPath": "Properties.DestinationSecurityGroupId", "category": "Best Practice", - "startLine": 122, + "startLine": 758, "startColumn": 5, - "endLine": 122, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 758, + "endColumn": 32, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt ASGInstanceSecurityGroup0525485D.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SaveMutationResolver", + "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.TypeName", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 127, + "startLine": 764, "startColumn": 5, - "endLine": 127, + "endLine": 764, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9296,44 +9628,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DeleteMutationResolver", + "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 139, + "startLine": 765, "startColumn": 5, - "endLine": 139, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 765, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt PostsApiCdk.ApiId" + "resolutionSource": "GetAtt LBSecurityGroup8A41EA2B.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DeleteMutationResolver", + "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.FieldName", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 147, + "startLine": 771, "startColumn": 5, - "endLine": 147, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 771, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9343,20 +9675,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DeleteMutationResolver", + "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.TypeName", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 152, + "startLine": 772, "startColumn": 5, - "endLine": 152, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 772, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9364,312 +9696,134 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'PostsApiCdk' of type 'AWS::AppSync::GraphQLApi' supports Tags but none are configured", + "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PostsApiCdk", + "logicalId": "LBListener49E825B4", "entityType": "Resource", - "resourceType": "AWS::AppSync::GraphQLApi" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.LoadBalancerArn", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/aspects--SampleStack.template.json": { - "filePath": "cdk/aspects--SampleStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 9, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 8, - "informational": 8, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Construct1StandardFunctionD5361E84", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 50, + "startLine": 789, "startColumn": 5, - "endLine": 50, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 789, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'LB8A12904C'" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Construct1FunctionWithReservedCEs6458B719", + "logicalId": "LBListenerTargetGroupF04FCF6D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 107, + "propertyPath": "Properties.Port", + "category": "Best Practice", + "startLine": 802, "startColumn": 5, - "endLine": 107, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 802, + "endColumn": 10, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Construct2StandardFunction1EBDBFFA", + "logicalId": "LBListenerTargetGroupF04FCF6D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 164, + "propertyPath": "Properties.Protocol", + "category": "Best Practice", + "startLine": 803, "startColumn": 5, - "endLine": 164, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 803, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Construct2FunctionWithReservedCEs89864BB2", + "logicalId": "LBListenerTargetGroupF04FCF6D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 221, + "propertyPath": "Properties.TargetType", + "category": "Best Practice", + "startLine": 810, "startColumn": 5, - "endLine": 221, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 810, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'Construct1StandardFunctionServiceRole716388BA' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Construct1StandardFunctionD5361E84", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 52, - "startColumn": 4, - "endLine": 52, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'Construct1FunctionWithReservedCEsServiceRole21C8F977' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Construct1FunctionWithReservedCEs6458B719", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 109, - "startColumn": 4, - "endLine": 109, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'Construct2StandardFunctionServiceRole450FEF35' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Construct2StandardFunction1EBDBFFA", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 166, - "startColumn": 4, - "endLine": 166, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'Construct2FunctionWithReservedCEsServiceRoleB80261C4' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Construct2FunctionWithReservedCEs89864BB2", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 223, - "startColumn": 4, - "endLine": 223, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Construct1StandardFunctionServiceRole716388BA' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Construct1StandardFunctionServiceRole716388BA", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Construct1StandardFunctionD5361E84' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Construct1StandardFunctionD5361E84", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 39, - "startColumn": 4, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Construct1FunctionWithReservedCEsServiceRole21C8F977' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Construct1FunctionWithReservedCEsServiceRole21C8F977", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 61, - "startColumn": 4, - "endLine": 61, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Construct1FunctionWithReservedCEs6458B719' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Construct1FunctionWithReservedCEs6458B719", + "logicalId": "LBListenerTargetGroupF04FCF6D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 95, - "startColumn": 4, - "endLine": 95, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 811, + "startColumn": 5, + "endLine": 811, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Construct2StandardFunctionServiceRole450FEF35' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'LB8A12904C' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Construct2StandardFunctionServiceRole450FEF35", + "logicalId": "LB8A12904C", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 118, + "startLine": 697, "startColumn": 4, - "endLine": 118, + "endLine": 697, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -9677,19 +9831,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Construct2StandardFunction1EBDBFFA' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'LBSecurityGroup8A41EA2B' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Construct2StandardFunction1EBDBFFA", + "logicalId": "LBSecurityGroup8A41EA2B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 152, + "startLine": 735, "startColumn": 4, - "endLine": 152, + "endLine": 735, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -9697,19 +9851,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Construct2FunctionWithReservedCEsServiceRoleB80261C4' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'LBListener49E825B4' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Construct2FunctionWithReservedCEsServiceRoleB80261C4", + "logicalId": "LBListener49E825B4", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 175, + "startLine": 780, "startColumn": 4, - "endLine": 175, + "endLine": 780, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -9717,35 +9871,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Construct2FunctionWithReservedCEs89864BB2' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'LBListenerTargetGroupF04FCF6D' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Construct2FunctionWithReservedCEs89864BB2", + "logicalId": "LBListenerTargetGroupF04FCF6D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 209, + "startLine": 801, "startColumn": 4, - "endLine": 209, + "endLine": 801, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/aws-transfer-sftp-server--IncomingDataStack-dev.template.json": { - "filePath": "cdk/aws-transfer-sftp-server--IncomingDataStack-dev.template.json", + "cdk/appsync-graphql-dynamodb--CdkAppsyncDemoStack.template.json": { + "filePath": "cdk/appsync-graphql-dynamodb--CdkAppsyncDemoStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 15, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 3, + "informational": 22, "debug": 0 }, "suppressed": 0, @@ -9756,122 +9910,84 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "IncomingDataBucket3554D835", + "logicalId": "CarTableA597893A", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 15, + "startLine": 12, "startColumn": 5, - "endLine": 15, - "endColumn": 16, + "endLine": 12, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "IncomingDataBucketPolicyCA22042A", + "logicalId": "CarTableA597893A", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 32, + "startLine": 22, "startColumn": 5, - "endLine": 32, - "endColumn": 12, + "endLine": 22, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'IncomingDataBucket3554D835'" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'IncomingDataBucket3554D835' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "IncomingDataBucket3554D835", + "logicalId": "DefectsTable2A57950B", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/aws-transfer-sftp-server--SftpServerStack-dev.template.json": { - "filePath": "cdk/aws-transfer-sftp-server--SftpServerStack-dev.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 29, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 54, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2508", - "severity": "WARN", - "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", - "source": "ENGINE", - "entity": { - "logicalId": "SftpServerSG79C38856", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress", - "suggestedFix": "Restrict the CIDR range to specific IP addresses", - "category": "Security", - "startLine": 415, + "startLine": 61, "startColumn": 5, - "endLine": 415, - "endColumn": 26, - "ruleDescription": "Security group allows open access to sensitive port", - "phase": "LINT" + "endLine": 61, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCB9E5F0B4", + "logicalId": "DefectsTable2A57950B", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 6, + "startLine": 71, "startColumn": 5, - "endLine": 6, + "endLine": 71, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -9882,63 +9998,67 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCB9E5F0B4", + "logicalId": "CarApiSchema8E4784D9", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::AppSync::GraphQLSchema" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 9, + "startLine": 93, "startColumn": 5, - "endLine": 9, - "endColumn": 21, + "endLine": 93, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt CarApiE5E7ACF5.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1SubnetB4246D30", + "logicalId": "CarApiCarsDataSourceD8C35DA8", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AppSync::DataSource" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 24, + "startLine": 170, "startColumn": 5, - "endLine": 24, - "endColumn": 22, + "endLine": 170, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt CarApiE5E7ACF5.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1SubnetB4246D30", + "logicalId": "CarApiCarsDataSourceD8C35DA8", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AppSync::DataSource" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 32, + "startLine": 182, "startColumn": 5, - "endLine": 32, - "endColumn": 15, + "endLine": 182, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9948,167 +10068,162 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1SubnetB4246D30", + "logicalId": "CarApiDefectsDataSourceEBF3B13F", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AppSync::DataSource" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 48, + "startLine": 276, "startColumn": 5, - "endLine": 48, + "endLine": 276, "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "GetAtt CarApiE5E7ACF5.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1RouteTableFEE4B781", + "logicalId": "CarApiDefectsDataSourceEBF3B13F", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::AppSync::DataSource" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 65, + "startLine": 288, "startColumn": 5, - "endLine": 65, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 288, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", + "logicalId": "CarsFunction7C2F2ED2", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::AppSync::FunctionConfiguration" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 76, + "startLine": 304, "startColumn": 5, - "endLine": 76, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 304, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt CarApiE5E7ACF5.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", + "logicalId": "DefectsFunction929174B7", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::AppSync::FunctionConfiguration" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 79, + "startLine": 332, "startColumn": 5, - "endLine": 79, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 332, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt CarApiE5E7ACF5.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", + "logicalId": "PipelineResolverGetCars2DDF5816", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 90, + "startLine": 360, "startColumn": 5, - "endLine": 90, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 360, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt CarApiE5E7ACF5.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", + "logicalId": "PipelineResolverGetCars2DDF5816", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.FieldName", "category": "Best Practice", - "startLine": 94, + "startLine": 369, "startColumn": 5, - "endLine": 94, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 369, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2Subnet74179F39", + "logicalId": "PipelineResolverGetCars2DDF5816", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.TypeName", "category": "Best Practice", - "startLine": 108, + "startLine": 385, "startColumn": 5, - "endLine": 108, - "endColumn": 22, + "endLine": 385, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -10118,334 +10233,346 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2Subnet74179F39", + "logicalId": "PipelineResolverGetDefects032EF131", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 116, + "startLine": 397, "startColumn": 5, - "endLine": 116, - "endColumn": 15, + "endLine": 397, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt CarApiE5E7ACF5.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2Subnet74179F39", + "logicalId": "PipelineResolverGetDefects032EF131", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.FieldName", "category": "Best Practice", - "startLine": 132, + "startLine": 406, "startColumn": 5, - "endLine": 132, - "endColumn": 11, + "endLine": 406, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2RouteTable6F1A15F1", + "logicalId": "PipelineResolverGetDefects032EF131", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.TypeName", "category": "Best Practice", - "startLine": 149, + "startLine": 422, "startColumn": 5, - "endLine": 149, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 422, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'CarTableA597893A' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2RouteTableAssociation5A808732", + "logicalId": "CarTableA597893A", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 160, - "startColumn": 5, - "endLine": 160, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet2RouteTable6F1A15F1'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'DefectsTable2A57950B' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2RouteTableAssociation5A808732", + "logicalId": "DefectsTable2A57950B", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 163, - "startColumn": 5, - "endLine": 163, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet2Subnet74179F39'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 32, + "startColumn": 4, + "endLine": 32, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'CarApiE5E7ACF5' of type 'AWS::AppSync::GraphQLApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2DefaultRouteB7481BBA", + "logicalId": "CarApiE5E7ACF5", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::AppSync::GraphQLApi" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 174, - "startColumn": 5, - "endLine": 174, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 81, + "startColumn": 4, + "endLine": 81, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'CarApiCarsDataSourceServiceRole82F3FC8A' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2DefaultRouteB7481BBA", + "logicalId": "CarApiCarsDataSourceServiceRole82F3FC8A", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 178, - "startColumn": 5, - "endLine": 178, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet2RouteTable6F1A15F1'" - } + "startLine": 107, + "startColumn": 4, + "endLine": 107, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Resource 'CarApiDefectsDataSourceServiceRole7EDF6907' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCIsolatedSubnet1SubnetEBD00FC6", + "logicalId": "CarApiDefectsDataSourceServiceRole7EDF6907", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 192, - "startColumn": 5, - "endLine": 192, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 197, + "startColumn": 4, + "endLine": 197, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/appsync-graphql-eventbridge--AppSyncEventBridge.template.json": { + "filePath": "cdk/appsync-graphql-eventbridge--AppSyncEventBridge.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 12, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 16, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'echoFunctionServiceRole1EBD6DF0' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "echoFunction5207BE9B", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 202, + "startColumn": 4, + "endLine": 202, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCIsolatedSubnet1SubnetEBD00FC6", + "logicalId": "AppSync2EventBridgeApiKey", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AppSync::ApiKey" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 200, + "startLine": 16, "startColumn": 5, - "endLine": 200, - "endColumn": 15, + "endLine": 16, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt AppSync2EventBridgeApi.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCIsolatedSubnet1SubnetEBD00FC6", + "logicalId": "ItemsSchema", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AppSync::GraphQLSchema" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 216, + "startLine": 30, "startColumn": 5, - "endLine": 216, + "endLine": 30, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "GetAtt AppSync2EventBridgeApi.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCIsolatedSubnet1RouteTableEB156210", + "logicalId": "ItemsDataSource", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::AppSync::DataSource" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 233, + "startLine": 89, "startColumn": 5, - "endLine": 233, + "endLine": 89, "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "GetAtt AppSync2EventBridgeApi.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCIsolatedSubnet1RouteTableAssociationA2D18F7C", + "logicalId": "ItemsDataSource", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::AppSync::DataSource" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 244, + "startLine": 118, "startColumn": 5, - "endLine": 244, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 118, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCIsolatedSubnet1RouteTableEB156210'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCIsolatedSubnet1RouteTableAssociationA2D18F7C", + "logicalId": "PutEventMutationResolver", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 247, + "startLine": 134, "startColumn": 5, - "endLine": 247, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 134, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCIsolatedSubnet1SubnetEBD00FC6'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt AppSync2EventBridgeApi.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCIsolatedSubnet2Subnet4B1C8CAA", + "logicalId": "PutEventMutationResolver", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.FieldName", "category": "Best Practice", - "startLine": 258, + "startLine": 141, "startColumn": 5, - "endLine": 258, - "endColumn": 22, + "endLine": 141, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -10455,19 +10582,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCIsolatedSubnet2Subnet4B1C8CAA", + "logicalId": "PutEventMutationResolver", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.TypeName", "category": "Best Practice", - "startLine": 266, + "startLine": 144, "startColumn": 5, - "endLine": 266, - "endColumn": 15, + "endLine": 144, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -10477,215 +10605,299 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCIsolatedSubnet2Subnet4B1C8CAA", + "logicalId": "AppSyncEventBridgeRleAllowEventRuleAppSyncEventBridgeechoFunction7F06E48E35535C50", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 282, + "startLine": 237, "startColumn": 5, - "endLine": 282, - "endColumn": 11, + "endLine": 237, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCIsolatedSubnet2RouteTable9B4F78DC", + "logicalId": "AppSyncEventBridgeRleAllowEventRuleAppSyncEventBridgeechoFunction7F06E48E35535C50", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 299, + "startLine": 238, "startColumn": 5, - "endLine": 299, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 238, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "GetAtt echoFunction5207BE9B.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCIsolatedSubnet2RouteTableAssociation7BF8E0EB", + "logicalId": "AppSyncEventBridgeRleAllowEventRuleAppSyncEventBridgeechoFunction7F06E48E35535C50", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 310, + "startLine": 244, "startColumn": 5, - "endLine": 310, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 244, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCIsolatedSubnet2RouteTable9B4F78DC'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCIsolatedSubnet2RouteTableAssociation7BF8E0EB", + "logicalId": "AppSyncEventBridgeRleAllowEventRuleAppSyncEventBridgeechoFunction7F06E48E35535C50", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 313, + "startLine": 245, "startColumn": 5, - "endLine": 313, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 245, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCIsolatedSubnet2Subnet4B1C8CAA'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt AppSyncEventBridgeRle2A25B9B1.Arn" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'AppSync2EventBridgeApi' of type 'AWS::AppSync::GraphQLApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCVPCGW99B986DC", + "logicalId": "AppSync2EventBridgeApi", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::AppSync::GraphQLApi" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 341, - "startColumn": 5, - "endLine": 341, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'AppSyncEventBridgeRoleE2F34FE0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "AppSyncEventBridgeRoleE2F34FE0", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 44, + "startColumn": 4, + "endLine": 44, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'echoFunctionServiceRole1EBD6DF0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "echoFunctionServiceRole1EBD6DF0", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 155, + "startColumn": 4, + "endLine": 155, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'echoFunction5207BE9B' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "echoFunction5207BE9B", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 189, + "startColumn": 4, + "endLine": 189, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'AppSyncEventBridgeRle2A25B9B1' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "AppSyncEventBridgeRle2A25B9B1", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 211, + "startColumn": 4, + "endLine": 211, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/appsync-graphql-http--AppSyncGraphQLHTTPExample.template.json": { + "filePath": "cdk/appsync-graphql-http--AppSyncGraphQLHTTPExample.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 9, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 17, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SftpServerSG79C38856", + "logicalId": "PostsApiKey", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::AppSync::ApiKey" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 404, + "startLine": 16, "startColumn": 5, - "endLine": 404, - "endColumn": 22, + "endLine": 16, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt PostsApiCdk.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SftpServerSG79C38856", + "logicalId": "PostsSchema", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::AppSync::GraphQLSchema" }, - "propertyPath": "Properties.GroupName", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 405, + "startLine": 30, "startColumn": 5, - "endLine": 405, - "endColumn": 15, + "endLine": 30, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt PostsApiCdk.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SftpServerSG79C38856", + "logicalId": "PostsDataSource", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::AppSync::DataSource" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 424, + "startLine": 45, "startColumn": 5, - "endLine": 424, + "endLine": 45, "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "GetAtt PostsApiCdk.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Domain' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SFTPServer", + "logicalId": "PostsDataSource", "entityType": "Resource", - "resourceType": "AWS::Transfer::Server" + "resourceType": "AWS::AppSync::DataSource" }, - "propertyPath": "Properties.Domain", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 453, + "startLine": 54, "startColumn": 5, - "endLine": 453, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transfer", + "endLine": 54, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -10695,66 +10907,67 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'EndpointDetails' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SFTPServer", + "logicalId": "GetOneQueryResolver", "entityType": "Resource", - "resourceType": "AWS::Transfer::Server" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.EndpointDetails", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 454, + "startLine": 64, "startColumn": 5, - "endLine": 454, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transfer", + "endLine": 64, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt PostsApiCdk.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'EndpointDetails.AddressAllocationIds' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SFTPServer", + "logicalId": "GetOneQueryResolver", "entityType": "Resource", - "resourceType": "AWS::Transfer::Server" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.EndpointDetails.AddressAllocationIds", + "propertyPath": "Properties.FieldName", "category": "Best Practice", - "startLine": 455, - "startColumn": 6, - "endLine": 455, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transfer", + "startLine": 72, + "startColumn": 5, + "endLine": 72, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SftpAccessPolicy6C559C82", + "logicalId": "GetOneQueryResolver", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.Description", + "propertyPath": "Properties.TypeName", "category": "Best Practice", - "startLine": 508, + "startLine": 77, "startColumn": 5, - "endLine": 508, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", + "endLine": 77, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -10764,43 +10977,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ManagedPolicyName' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SftpAccessPolicy6C559C82", + "logicalId": "GetAllQueryResolver", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.ManagedPolicyName", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 509, + "startLine": 89, "startColumn": 5, - "endLine": 509, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", + "endLine": 89, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt PostsApiCdk.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SftpAccessPolicy6C559C82", + "logicalId": "GetAllQueryResolver", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.FieldName", "category": "Best Practice", - "startLine": 510, + "startLine": 97, "startColumn": 5, - "endLine": 510, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", + "endLine": 97, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -10810,20 +11024,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", + "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SftpAccessRoleBDBB5CE1", + "logicalId": "GetAllQueryResolver", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.TypeName", "category": "Best Practice", - "startLine": 572, + "startLine": 102, "startColumn": 5, - "endLine": 572, + "endLine": 102, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -10833,68 +11047,67 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SftpLogGroupC79A244B", + "logicalId": "SaveMutationResolver", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 581, + "startLine": 114, "startColumn": 5, - "endLine": 581, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "endLine": 114, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:/aws/transfer/{ref:SFTPServer})" + "resolutionSource": "GetAtt PostsApiCdk.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ServerId' is create-only; updating it will cause resource replacement", + "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SFTPUser", + "logicalId": "SaveMutationResolver", "entityType": "Resource", - "resourceType": "AWS::Transfer::User" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.ServerId", + "propertyPath": "Properties.FieldName", "category": "Best Practice", - "startLine": 624, + "startLine": 122, "startColumn": 5, - "endLine": 624, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transfer", + "endLine": 122, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt SFTPServer.ServerId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserName' is create-only; updating it will cause resource replacement", + "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SFTPUser", + "logicalId": "SaveMutationResolver", "entityType": "Resource", - "resourceType": "AWS::Transfer::User" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.UserName", + "propertyPath": "Properties.TypeName", "category": "Best Practice", - "startLine": 631, + "startLine": 127, "startColumn": 5, - "endLine": 631, + "endLine": 127, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transfer", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -10904,126 +11117,300 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MetricFilter1B93B6E5", + "logicalId": "DeleteMutationResolver", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 641, + "startLine": 139, "startColumn": 5, - "endLine": 641, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "endLine": 139, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SftpLogGroupC79A244B'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt PostsApiCdk.ApiId" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CloudWatchLoggingRole8E23D1D4' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CloudWatchLoggingRole8E23D1D4", + "logicalId": "DeleteMutationResolver", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FieldName", "category": "Best Practice", - "startLine": 351, - "startColumn": 4, - "endLine": 351, + "startLine": 147, + "startColumn": 5, + "endLine": 147, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SftpServerSG79C38856' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SftpServerSG79C38856", + "logicalId": "DeleteMutationResolver", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.TypeName", "category": "Best Practice", - "startLine": 403, - "startColumn": 4, - "endLine": 403, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 152, + "startColumn": 5, + "endLine": 152, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SftpEIP1' of type 'AWS::EC2::EIP' supports Tags but none are configured", + "message": "Resource 'PostsApiCdk' of type 'AWS::AppSync::GraphQLApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SftpEIP1", + "logicalId": "PostsApiCdk", "entityType": "Resource", - "resourceType": "AWS::EC2::EIP" + "resourceType": "AWS::AppSync::GraphQLApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 434, + "startLine": 5, "startColumn": 4, - "endLine": 434, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "cdk/aspects--SampleStack.template.json": { + "filePath": "cdk/aspects--SampleStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 9, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 8, + "informational": 8, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SftpEIP2' of type 'AWS::EC2::EIP' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "SftpEIP2", + "logicalId": "Construct1StandardFunctionD5361E84", "entityType": "Resource", - "resourceType": "AWS::EC2::EIP" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 443, - "startColumn": 4, - "endLine": 443, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 50, + "startColumn": 5, + "endLine": 50, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Construct1FunctionWithReservedCEs6458B719", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 107, + "startColumn": 5, + "endLine": 107, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Construct2StandardFunction1EBDBFFA", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 164, + "startColumn": 5, + "endLine": 164, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Construct2FunctionWithReservedCEs89864BB2", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 221, + "startColumn": 5, + "endLine": 221, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'Construct1StandardFunctionServiceRole716388BA' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Construct1StandardFunctionD5361E84", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 52, + "startColumn": 4, + "endLine": 52, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'Construct1FunctionWithReservedCEsServiceRole21C8F977' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Construct1FunctionWithReservedCEs6458B719", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 109, + "startColumn": 4, + "endLine": 109, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'Construct2StandardFunctionServiceRole450FEF35' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Construct2StandardFunction1EBDBFFA", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 166, + "startColumn": 4, + "endLine": 166, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'Construct2FunctionWithReservedCEsServiceRoleB80261C4' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Construct2FunctionWithReservedCEs89864BB2", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 223, + "startColumn": 4, + "endLine": 223, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SFTPServer' of type 'AWS::Transfer::Server' supports Tags but none are configured", + "message": "Resource 'Construct1StandardFunctionServiceRole716388BA' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SFTPServer", + "logicalId": "Construct1StandardFunctionServiceRole716388BA", "entityType": "Resource", - "resourceType": "AWS::Transfer::Server" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 452, + "startLine": 5, "startColumn": 4, - "endLine": 452, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -11031,19 +11418,39 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SftpAccessRoleBDBB5CE1' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'Construct1StandardFunctionD5361E84' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SftpAccessRoleBDBB5CE1", + "logicalId": "Construct1StandardFunctionD5361E84", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 39, + "startColumn": 4, + "endLine": 39, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Construct1FunctionWithReservedCEsServiceRole21C8F977' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Construct1FunctionWithReservedCEsServiceRole21C8F977", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 554, + "startLine": 61, "startColumn": 4, - "endLine": 554, + "endLine": 61, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -11051,19 +11458,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SftpLogGroupC79A244B' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Resource 'Construct1FunctionWithReservedCEs6458B719' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SftpLogGroupC79A244B", + "logicalId": "Construct1FunctionWithReservedCEs6458B719", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 580, + "startLine": 95, "startColumn": 4, - "endLine": 580, + "endLine": 95, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -11071,19 +11478,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SFTPUser' of type 'AWS::Transfer::User' supports Tags but none are configured", + "message": "Resource 'Construct2StandardFunctionServiceRole450FEF35' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SFTPUser", + "logicalId": "Construct2StandardFunctionServiceRole450FEF35", "entityType": "Resource", - "resourceType": "AWS::Transfer::User" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 605, + "startLine": 118, "startColumn": 4, - "endLine": 605, + "endLine": 118, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -11091,27 +11498,151 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'AlarmMetricFilter9DBA3966' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Resource 'Construct2StandardFunction1EBDBFFA' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AlarmMetricFilter9DBA3966", + "logicalId": "Construct2StandardFunction1EBDBFFA", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 659, + "startLine": 152, "startColumn": 4, - "endLine": 659, + "endLine": 152, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Construct2FunctionWithReservedCEsServiceRoleB80261C4' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Construct2FunctionWithReservedCEsServiceRoleB80261C4", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 175, + "startColumn": 4, + "endLine": 175, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Construct2FunctionWithReservedCEs89864BB2' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Construct2FunctionWithReservedCEs89864BB2", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 209, + "startColumn": 4, + "endLine": 209, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/aws-transfer-sftp-server--SftpServerStack-prod.template.json": { - "filePath": "cdk/aws-transfer-sftp-server--SftpServerStack-prod.template.json", + "cdk/aws-transfer-sftp-server--IncomingDataStack-dev.template.json": { + "filePath": "cdk/aws-transfer-sftp-server--IncomingDataStack-dev.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "IncomingDataBucket3554D835", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.BucketName", + "category": "Best Practice", + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "IncomingDataBucketPolicyCA22042A", + "entityType": "Resource", + "resourceType": "AWS::S3::BucketPolicy" + }, + "propertyPath": "Properties.Bucket", + "category": "Best Practice", + "startLine": 32, + "startColumn": 5, + "endLine": 32, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'IncomingDataBucket3554D835'" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'IncomingDataBucket3554D835' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "IncomingDataBucket3554D835", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/aws-transfer-sftp-server--SftpServerStack-dev.template.json": { + "filePath": "cdk/aws-transfer-sftp-server--SftpServerStack-dev.template.json", "status": "OK", "metadata": { "resourcesScanned": 29, @@ -12400,148 +12931,16 @@ } ] }, - "cdk/backup-s3--AwsBackupS3Stack.template.json": { - "filePath": "cdk/backup-s3--AwsBackupS3Stack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 8, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 5, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "testBucketPolicy47484917", - "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" - }, - "propertyPath": "Properties.Bucket", - "category": "Best Practice", - "startLine": 40, - "startColumn": 5, - "endLine": 40, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'testBucketDF4D7D1A'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BackupVaultName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Vault23237E5B", - "entityType": "Resource", - "resourceType": "AWS::Backup::BackupVault" - }, - "propertyPath": "Properties.BackupVaultName", - "category": "Best Practice", - "startLine": 216, - "startColumn": 5, - "endLine": 216, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BackupPlanId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "demobackupplanSelectionF4B47C20", - "entityType": "Resource", - "resourceType": "AWS::Backup::BackupSelection" - }, - "propertyPath": "Properties.BackupPlanId", - "category": "Best Practice", - "startLine": 253, - "startColumn": 5, - "endLine": 253, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt demobackupplan32CA9462.BackupPlanId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BackupSelection' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "demobackupplanSelectionF4B47C20", - "entityType": "Resource", - "resourceType": "AWS::Backup::BackupSelection" - }, - "propertyPath": "Properties.BackupSelection", - "category": "Best Practice", - "startLine": 259, - "startColumn": 5, - "endLine": 259, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Role1ABCC5F0' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Role1ABCC5F0", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 89, - "startColumn": 4, - "endLine": 89, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/batch-ecr-openmp--AwsBatchOpenmpBenchmarkStack.template.json": { - "filePath": "cdk/batch-ecr-openmp--AwsBatchOpenmpBenchmarkStack.template.json", + "cdk/aws-transfer-sftp-server--SftpServerStack-prod.template.json": { + "filePath": "cdk/aws-transfer-sftp-server--SftpServerStack-prod.template.json", "status": "OK", "metadata": { - "resourcesScanned": 41, + "resourcesScanned": 29, "counts": { "fatal": 0, "errors": 0, - "warnings": 2, - "informational": 62, + "warnings": 1, + "informational": 54, "debug": 0 }, "suppressed": 0, @@ -12550,67 +12949,24 @@ }, "diagnostics": [ { - "ruleId": "W3005", - "severity": "WARN", - "message": "'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 556, - "startColumn": 4, - "endLine": 556, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", + "ruleId": "W2508", "severity": "WARN", - "message": "'JobSubmitterFunctionServiceRole55AD6E92' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "JobSubmitterFunctionFAE645C8", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 1073, - "startColumn": 4, - "endLine": 1073, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RepositoryName' is create-only; updating it will cause resource replacement", + "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", "source": "ENGINE", "entity": { - "logicalId": "OpenMPRepositoryAB8BB3BC", + "logicalId": "SftpServerSG79C38856", "entityType": "Resource", - "resourceType": "AWS::ECR::Repository" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.RepositoryName", - "category": "Best Practice", - "startLine": 10, + "propertyPath": "Properties.SecurityGroupIngress", + "suggestedFix": "Restrict the CIDR range to specific IP addresses", + "category": "Security", + "startLine": 415, "startColumn": 5, - "endLine": 10, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ecr.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 415, + "endColumn": 26, + "ruleDescription": "Security group allows open access to sensitive port", + "phase": "LINT" }, { "ruleId": "I9001", @@ -12618,15 +12974,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCF5EF58EB", + "logicalId": "VPCB9E5F0B4", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 21, + "startLine": 6, "startColumn": 5, - "endLine": 21, + "endLine": 6, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -12640,15 +12996,15 @@ "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCF5EF58EB", + "logicalId": "VPCB9E5F0B4", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 24, + "startLine": 9, "startColumn": 5, - "endLine": 24, + "endLine": 9, "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -12662,15 +13018,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet1Subnet4888FED8", + "logicalId": "VPCPublicSubnet1SubnetB4246D30", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 41, + "startLine": 24, "startColumn": 5, - "endLine": 41, + "endLine": 24, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -12684,15 +13040,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet1Subnet4888FED8", + "logicalId": "VPCPublicSubnet1SubnetB4246D30", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 49, + "startLine": 32, "startColumn": 5, - "endLine": 49, + "endLine": 32, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -12706,21 +13062,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet1Subnet4888FED8", + "logicalId": "VPCPublicSubnet1SubnetB4246D30", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 65, + "startLine": 48, "startColumn": 5, - "endLine": 65, + "endLine": 48, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { @@ -12729,22 +13085,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet1RouteTableDADE381A", + "logicalId": "VPCPublicSubnet1RouteTableFEE4B781", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 82, + "startLine": 65, "startColumn": 5, - "endLine": 82, + "endLine": 65, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { @@ -12753,22 +13109,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet1RouteTableAssociationB4BDC09E", + "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 93, + "startLine": 76, "startColumn": 5, - "endLine": 93, + "endLine": 76, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCPublicSubnet1RouteTableDADE381A'", + "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'", "extra": { "replacement_strategy": "delete_then_create" } @@ -12780,22 +13136,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet1RouteTableAssociationB4BDC09E", + "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 96, + "startLine": 79, "startColumn": 5, - "endLine": 96, + "endLine": 79, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCPublicSubnet1Subnet4888FED8'", + "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'", "extra": { "replacement_strategy": "delete_then_create" } @@ -12807,15 +13163,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet1DefaultRoute5FD9D646", + "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 107, + "startLine": 90, "startColumn": 5, - "endLine": 107, + "endLine": 90, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -12830,68 +13186,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet1DefaultRoute5FD9D646", + "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 111, + "startLine": 94, "startColumn": 5, - "endLine": 111, + "endLine": 94, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCPublicSubnet1RouteTableDADE381A'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenMPVPCPublicSubnet1NATGateway29BD3E8B", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.AllocationId", - "category": "Best Practice", - "startLine": 140, - "startColumn": 5, - "endLine": 140, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt OpenMPVPCPublicSubnet1EIP53BE2C61.AllocationId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenMPVPCPublicSubnet1NATGateway29BD3E8B", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 146, - "startColumn": 5, - "endLine": 146, - "endColumn": 14, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCPublicSubnet1Subnet4888FED8'" + "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'" } }, { @@ -12900,15 +13210,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet2Subnet7642A39F", + "logicalId": "VPCPublicSubnet2Subnet74179F39", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 167, + "startLine": 108, "startColumn": 5, - "endLine": 167, + "endLine": 108, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -12922,15 +13232,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet2Subnet7642A39F", + "logicalId": "VPCPublicSubnet2Subnet74179F39", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 175, + "startLine": 116, "startColumn": 5, - "endLine": 175, + "endLine": 116, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -12944,21 +13254,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet2Subnet7642A39F", + "logicalId": "VPCPublicSubnet2Subnet74179F39", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 191, + "startLine": 132, "startColumn": 5, - "endLine": 191, + "endLine": 132, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { @@ -12967,22 +13277,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet2RouteTable29142B7F", + "logicalId": "VPCPublicSubnet2RouteTable6F1A15F1", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 208, + "startLine": 149, "startColumn": 5, - "endLine": 208, + "endLine": 149, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { @@ -12991,22 +13301,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet2RouteTableAssociationA72D6947", + "logicalId": "VPCPublicSubnet2RouteTableAssociation5A808732", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 219, + "startLine": 160, "startColumn": 5, - "endLine": 219, + "endLine": 160, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCPublicSubnet2RouteTable29142B7F'", + "resolutionSource": "Ref to 'VPCPublicSubnet2RouteTable6F1A15F1'", "extra": { "replacement_strategy": "delete_then_create" } @@ -13018,22 +13328,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet2RouteTableAssociationA72D6947", + "logicalId": "VPCPublicSubnet2RouteTableAssociation5A808732", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 222, + "startLine": 163, "startColumn": 5, - "endLine": 222, + "endLine": 163, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCPublicSubnet2Subnet7642A39F'", + "resolutionSource": "Ref to 'VPCPublicSubnet2Subnet74179F39'", "extra": { "replacement_strategy": "delete_then_create" } @@ -13045,15 +13355,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet2DefaultRouteF2C059E2", + "logicalId": "VPCPublicSubnet2DefaultRouteB7481BBA", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 233, + "startLine": 174, "startColumn": 5, - "endLine": 233, + "endLine": 174, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -13068,22 +13378,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPublicSubnet2DefaultRouteF2C059E2", + "logicalId": "VPCPublicSubnet2DefaultRouteB7481BBA", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 237, + "startLine": 178, "startColumn": 5, - "endLine": 237, + "endLine": 178, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCPublicSubnet2RouteTable29142B7F'" + "resolutionSource": "Ref to 'VPCPublicSubnet2RouteTable6F1A15F1'" } }, { @@ -13092,15 +13402,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPrivateSubnet1Subnet95C8C324", + "logicalId": "VPCIsolatedSubnet1SubnetEBD00FC6", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 251, + "startLine": 192, "startColumn": 5, - "endLine": 251, + "endLine": 192, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -13114,15 +13424,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPrivateSubnet1Subnet95C8C324", + "logicalId": "VPCIsolatedSubnet1SubnetEBD00FC6", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 259, + "startLine": 200, "startColumn": 5, - "endLine": 259, + "endLine": 200, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -13136,21 +13446,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPrivateSubnet1Subnet95C8C324", + "logicalId": "VPCIsolatedSubnet1SubnetEBD00FC6", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 275, + "startLine": 216, "startColumn": 5, - "endLine": 275, + "endLine": 216, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { @@ -13159,22 +13469,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPrivateSubnet1RouteTable3DBEEA60", + "logicalId": "VPCIsolatedSubnet1RouteTableEB156210", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 292, + "startLine": 233, "startColumn": 5, - "endLine": 292, + "endLine": 233, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { @@ -13183,22 +13493,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPrivateSubnet1RouteTableAssociationD2C7C327", + "logicalId": "VPCIsolatedSubnet1RouteTableAssociationA2D18F7C", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 303, + "startLine": 244, "startColumn": 5, - "endLine": 303, + "endLine": 244, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCPrivateSubnet1RouteTable3DBEEA60'", + "resolutionSource": "Ref to 'VPCIsolatedSubnet1RouteTableEB156210'", "extra": { "replacement_strategy": "delete_then_create" } @@ -13210,89 +13520,42 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPrivateSubnet1RouteTableAssociationD2C7C327", + "logicalId": "VPCIsolatedSubnet1RouteTableAssociationA2D18F7C", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 306, + "startLine": 247, "startColumn": 5, - "endLine": 306, + "endLine": 247, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCPrivateSubnet1Subnet95C8C324'", + "resolutionSource": "Ref to 'VPCIsolatedSubnet1SubnetEBD00FC6'", "extra": { "replacement_strategy": "delete_then_create" } } }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenMPVPCPrivateSubnet1DefaultRoute7EB9EABF", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.DestinationCidrBlock", - "category": "Best Practice", - "startLine": 317, - "startColumn": 5, - "endLine": 317, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenMPVPCPrivateSubnet1DefaultRoute7EB9EABF", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 321, - "startColumn": 5, - "endLine": 321, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCPrivateSubnet1RouteTable3DBEEA60'" - } - }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPrivateSubnet2Subnet039333AF", + "logicalId": "VPCIsolatedSubnet2Subnet4B1C8CAA", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 332, + "startLine": 258, "startColumn": 5, - "endLine": 332, + "endLine": 258, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -13306,15 +13569,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPrivateSubnet2Subnet039333AF", + "logicalId": "VPCIsolatedSubnet2Subnet4B1C8CAA", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 340, + "startLine": 266, "startColumn": 5, - "endLine": 340, + "endLine": 266, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -13328,21 +13591,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPrivateSubnet2Subnet039333AF", + "logicalId": "VPCIsolatedSubnet2Subnet4B1C8CAA", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 356, + "startLine": 282, "startColumn": 5, - "endLine": 356, + "endLine": 282, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { @@ -13351,22 +13614,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPrivateSubnet2RouteTable7EFB668D", + "logicalId": "VPCIsolatedSubnet2RouteTable9B4F78DC", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 373, + "startLine": 299, "startColumn": 5, - "endLine": 373, + "endLine": 299, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { @@ -13375,22 +13638,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPrivateSubnet2RouteTableAssociation50872E14", + "logicalId": "VPCIsolatedSubnet2RouteTableAssociation7BF8E0EB", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 384, + "startLine": 310, "startColumn": 5, - "endLine": 384, + "endLine": 310, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCPrivateSubnet2RouteTable7EFB668D'", + "resolutionSource": "Ref to 'VPCIsolatedSubnet2RouteTable9B4F78DC'", "extra": { "replacement_strategy": "delete_then_create" } @@ -13402,22 +13665,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPrivateSubnet2RouteTableAssociation50872E14", + "logicalId": "VPCIsolatedSubnet2RouteTableAssociation7BF8E0EB", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 387, + "startLine": 313, "startColumn": 5, - "endLine": 387, + "endLine": 313, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCPrivateSubnet2Subnet039333AF'", + "resolutionSource": "Ref to 'VPCIsolatedSubnet2Subnet4B1C8CAA'", "extra": { "replacement_strategy": "delete_then_create" } @@ -13426,93 +13689,68 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenMPVPCPrivateSubnet2DefaultRouteA5C36AF6", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.DestinationCidrBlock", - "category": "Best Practice", - "startLine": 398, - "startColumn": 5, - "endLine": 398, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCPrivateSubnet2DefaultRouteA5C36AF6", + "logicalId": "VPCVPCGW99B986DC", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 402, + "startLine": 341, "startColumn": 5, - "endLine": 402, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 341, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCPrivateSubnet2RouteTable7EFB668D'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPVPCVPCGWDD05DB82", + "logicalId": "SftpServerSG79C38856", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 430, + "startLine": 404, "startColumn": 5, - "endLine": 430, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "endLine": 404, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BatchSecurityGroup77EC865F", + "logicalId": "SftpServerSG79C38856", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.GroupName", "category": "Best Practice", - "startLine": 568, + "startLine": 405, "startColumn": 5, - "endLine": 568, - "endColumn": 22, + "endLine": 405, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13525,61 +13763,63 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BatchSecurityGroup77EC865F", + "logicalId": "SftpServerSG79C38856", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 576, + "startLine": 424, "startColumn": 5, - "endLine": 576, + "endLine": 424, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ComputeResources.InstanceRole' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Domain' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPComputeEnvironment", + "logicalId": "SFTPServer", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::Transfer::Server" }, - "propertyPath": "Properties.ComputeResources.InstanceRole", + "propertyPath": "Properties.Domain", "category": "Best Practice", - "startLine": 749, - "startColumn": 6, - "endLine": 749, - "endColumn": 19, + "startLine": 453, + "startColumn": 5, + "endLine": 453, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transfer", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ComputeResources.InstanceTypes' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'EndpointDetails' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPComputeEnvironment", + "logicalId": "SFTPServer", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::Transfer::Server" }, - "propertyPath": "Properties.ComputeResources.InstanceTypes", + "propertyPath": "Properties.EndpointDetails", "category": "Best Practice", - "startLine": 755, - "startColumn": 6, - "endLine": 755, - "endColumn": 20, + "startLine": 454, + "startColumn": 5, + "endLine": 454, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transfer", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13589,19 +13829,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ComputeResources.SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'EndpointDetails.AddressAllocationIds' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPComputeEnvironment", + "logicalId": "SFTPServer", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::Transfer::Server" }, - "propertyPath": "Properties.ComputeResources.SecurityGroupIds", + "propertyPath": "Properties.EndpointDetails.AddressAllocationIds", "category": "Best Practice", - "startLine": 764, + "startLine": 455, "startColumn": 6, - "endLine": 764, - "endColumn": 23, + "endLine": 455, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transfer", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13611,63 +13852,66 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ComputeResources.Subnets' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPComputeEnvironment", + "logicalId": "SftpAccessPolicy6C559C82", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.ComputeResources.Subnets", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 772, - "startColumn": 6, - "endLine": 772, - "endColumn": 14, + "startLine": 508, + "startColumn": 5, + "endLine": 508, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ComputeResources.Type' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ManagedPolicyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPComputeEnvironment", + "logicalId": "SftpAccessPolicy6C559C82", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.ComputeResources.Type", + "propertyPath": "Properties.ManagedPolicyName", "category": "Best Practice", - "startLine": 780, - "startColumn": 6, - "endLine": 780, - "endColumn": 11, + "startLine": 509, + "startColumn": 5, + "endLine": 509, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPComputeEnvironment", + "logicalId": "SftpAccessPolicy6C559C82", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 789, + "startLine": 510, "startColumn": 5, - "endLine": 789, + "endLine": 510, "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13677,20 +13921,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPLogGroup95FEB040", + "logicalId": "SftpAccessRoleBDBB5CE1", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 850, + "startLine": 572, "startColumn": 5, - "endLine": 850, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "endLine": 572, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13703,100 +13947,114 @@ "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "JobSubmitterFunctionLogGroupF7938D09", + "logicalId": "SftpLogGroupC79A244B", "entityType": "Resource", "resourceType": "AWS::Logs::LogGroup" }, "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 1084, + "startLine": 581, "startColumn": 5, - "endLine": 1084, + "endLine": 581, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:/aws/lambda/{ref:JobSubmitterFunctionFAE645C8})" + "resolutionSource": "dynamic (Join:/aws/transfer/{ref:SFTPServer})" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'OpenMPRepositoryAB8BB3BC' of type 'AWS::ECR::Repository' supports Tags but none are configured", + "message": "Property 'ServerId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OpenMPRepositoryAB8BB3BC", + "logicalId": "SFTPUser", "entityType": "Resource", - "resourceType": "AWS::ECR::Repository" + "resourceType": "AWS::Transfer::User" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ServerId", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 624, + "startColumn": 5, + "endLine": 624, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transfer", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt SFTPServer.ServerId" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'UserName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0", + "logicalId": "SFTPUser", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Transfer::User" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.UserName", "category": "Best Practice", - "startLine": 465, - "startColumn": 4, - "endLine": 465, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 631, + "startColumn": 5, + "endLine": 631, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-transfer", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", + "logicalId": "MetricFilter1B93B6E5", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Logs::MetricFilter" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 537, - "startColumn": 4, - "endLine": 537, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 641, + "startColumn": 5, + "endLine": 641, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SftpLogGroupC79A244B'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BatchSecurityGroup77EC865F' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'CloudWatchLoggingRole8E23D1D4' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BatchSecurityGroup77EC865F", + "logicalId": "CloudWatchLoggingRole8E23D1D4", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 567, + "startLine": 351, "startColumn": 4, - "endLine": 567, + "endLine": 351, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -13804,19 +14062,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BatchServiceRole57930367' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'SftpServerSG79C38856' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BatchServiceRole57930367", + "logicalId": "SftpServerSG79C38856", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 586, + "startLine": 403, "startColumn": 4, - "endLine": 586, + "endLine": 403, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -13824,19 +14082,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BatchInstanceRole8DB66C4C' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'SftpEIP1' of type 'AWS::EC2::EIP' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BatchInstanceRole8DB66C4C", + "logicalId": "SftpEIP1", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::EIP" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 620, + "startLine": 434, "startColumn": 4, - "endLine": 620, + "endLine": 434, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -13844,19 +14102,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'OpenMPComputeEnvironment' of type 'AWS::Batch::ComputeEnvironment' supports Tags but none are configured", + "message": "Resource 'SftpEIP2' of type 'AWS::EC2::EIP' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "OpenMPComputeEnvironment", + "logicalId": "SftpEIP2", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::EC2::EIP" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 747, + "startLine": 443, "startColumn": 4, - "endLine": 747, + "endLine": 443, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -13864,19 +14122,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'OpenMPJobQueue' of type 'AWS::Batch::JobQueue' supports Tags but none are configured", + "message": "Resource 'SFTPServer' of type 'AWS::Transfer::Server' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "OpenMPJobQueue", + "logicalId": "SFTPServer", "entityType": "Resource", - "resourceType": "AWS::Batch::JobQueue" + "resourceType": "AWS::Transfer::Server" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 797, + "startLine": 452, "startColumn": 4, - "endLine": 797, + "endLine": 452, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -13884,19 +14142,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BatchJobRole37A83758' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'SftpAccessRoleBDBB5CE1' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BatchJobRole37A83758", + "logicalId": "SftpAccessRoleBDBB5CE1", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 815, + "startLine": 554, "startColumn": 4, - "endLine": 815, + "endLine": 554, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -13904,59 +14162,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'OpenMPLogGroup95FEB040' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Resource 'SftpLogGroupC79A244B' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "OpenMPLogGroup95FEB040", + "logicalId": "SftpLogGroupC79A244B", "entityType": "Resource", "resourceType": "AWS::Logs::LogGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 849, - "startColumn": 4, - "endLine": 849, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'OpenMPJobDefinition' of type 'AWS::Batch::JobDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "OpenMPJobDefinition", - "entityType": "Resource", - "resourceType": "AWS::Batch::JobDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 861, - "startColumn": 4, - "endLine": 861, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'JobSubmitterFunctionServiceRole55AD6E92' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "JobSubmitterFunctionServiceRole55AD6E92", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 972, + "startLine": 580, "startColumn": 4, - "endLine": 972, + "endLine": 580, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -13964,19 +14182,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'JobSubmitterFunctionFAE645C8' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'SFTPUser' of type 'AWS::Transfer::User' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "JobSubmitterFunctionFAE645C8", + "logicalId": "SFTPUser", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Transfer::User" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1034, + "startLine": 605, "startColumn": 4, - "endLine": 1034, + "endLine": 605, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -13984,35 +14202,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'JobSubmitterFunctionLogGroupF7938D09' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Resource 'AlarmMetricFilter9DBA3966' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "JobSubmitterFunctionLogGroupF7938D09", + "logicalId": "AlarmMetricFilter9DBA3966", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::CloudWatch::Alarm" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1083, + "startLine": 659, "startColumn": 4, - "endLine": 1083, + "endLine": 659, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/classic-load-balancer--LoadBalancerStack.template.json": { - "filePath": "cdk/classic-load-balancer--LoadBalancerStack.template.json", + "cdk/backup-s3--AwsBackupS3Stack.template.json": { + "filePath": "cdk/backup-s3--AwsBackupS3Stack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 33, + "resourcesScanned": 8, "counts": { "fatal": 0, "errors": 0, - "warnings": 1, - "informational": 65, + "warnings": 0, + "informational": 5, "debug": 0 }, "suppressed": 0, @@ -14020,106 +14238,282 @@ "severityLevel": "DEBUG" }, "diagnostics": [ - { - "ruleId": "W3697", - "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", - "source": "CFN_LINT", - "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "category": "Deprecation", - "startLine": 551, - "startColumn": 3, - "endLine": 551, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" - }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCB9E5F0B4", + "logicalId": "testBucketPolicy47484917", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 6, + "startLine": 40, "startColumn": 5, - "endLine": 6, - "endColumn": 15, + "endLine": 40, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'testBucketDF4D7D1A'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'BackupVaultName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCB9E5F0B4", + "logicalId": "Vault23237E5B", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Backup::BackupVault" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.BackupVaultName", "category": "Best Practice", - "startLine": 9, + "startLine": 216, "startColumn": 5, - "endLine": 9, + "endLine": 216, "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'BackupPlanId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1SubnetB4246D30", + "logicalId": "demobackupplanSelectionF4B47C20", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Backup::BackupSelection" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.BackupPlanId", "category": "Best Practice", - "startLine": 24, + "startLine": 253, "startColumn": 5, - "endLine": 24, - "endColumn": 22, + "endLine": 253, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt demobackupplan32CA9462.BackupPlanId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'BackupSelection' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1SubnetB4246D30", + "logicalId": "demobackupplanSelectionF4B47C20", + "entityType": "Resource", + "resourceType": "AWS::Backup::BackupSelection" + }, + "propertyPath": "Properties.BackupSelection", + "category": "Best Practice", + "startLine": 259, + "startColumn": 5, + "endLine": 259, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Role1ABCC5F0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Role1ABCC5F0", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 89, + "startColumn": 4, + "endLine": 89, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/batch-ecr-openmp--AwsBatchOpenmpBenchmarkStack.template.json": { + "filePath": "cdk/batch-ecr-openmp--AwsBatchOpenmpBenchmarkStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 41, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 62, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 556, + "startColumn": 4, + "endLine": 556, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'JobSubmitterFunctionServiceRole55AD6E92' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "JobSubmitterFunctionFAE645C8", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1073, + "startColumn": 4, + "endLine": 1073, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RepositoryName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenMPRepositoryAB8BB3BC", + "entityType": "Resource", + "resourceType": "AWS::ECR::Repository" + }, + "propertyPath": "Properties.RepositoryName", + "category": "Best Practice", + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ecr.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenMPVPCF5EF58EB", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 21, + "startColumn": 5, + "endLine": 21, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenMPVPCF5EF58EB", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.InstanceTenancy", + "category": "Best Practice", + "startLine": 24, + "startColumn": 5, + "endLine": 24, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenMPVPCPublicSubnet1Subnet4888FED8", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 41, + "startColumn": 5, + "endLine": 41, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenMPVPCPublicSubnet1Subnet4888FED8", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 32, + "startLine": 49, "startColumn": 5, - "endLine": 32, + "endLine": 49, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -14133,21 +14527,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1SubnetB4246D30", + "logicalId": "OpenMPVPCPublicSubnet1Subnet4888FED8", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 48, + "startLine": 65, "startColumn": 5, - "endLine": 48, + "endLine": 65, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" } }, { @@ -14156,22 +14550,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1RouteTableFEE4B781", + "logicalId": "OpenMPVPCPublicSubnet1RouteTableDADE381A", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 65, + "startLine": 82, "startColumn": 5, - "endLine": 65, + "endLine": 82, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" } }, { @@ -14180,22 +14574,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", + "logicalId": "OpenMPVPCPublicSubnet1RouteTableAssociationB4BDC09E", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 76, + "startLine": 93, "startColumn": 5, - "endLine": 76, + "endLine": 93, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'", + "resolutionSource": "Ref to 'OpenMPVPCPublicSubnet1RouteTableDADE381A'", "extra": { "replacement_strategy": "delete_then_create" } @@ -14207,22 +14601,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", + "logicalId": "OpenMPVPCPublicSubnet1RouteTableAssociationB4BDC09E", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 79, + "startLine": 96, "startColumn": 5, - "endLine": 79, + "endLine": 96, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'", + "resolutionSource": "Ref to 'OpenMPVPCPublicSubnet1Subnet4888FED8'", "extra": { "replacement_strategy": "delete_then_create" } @@ -14234,15 +14628,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", + "logicalId": "OpenMPVPCPublicSubnet1DefaultRoute5FD9D646", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 90, + "startLine": 107, "startColumn": 5, - "endLine": 90, + "endLine": 107, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -14257,22 +14651,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", + "logicalId": "OpenMPVPCPublicSubnet1DefaultRoute5FD9D646", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 94, + "startLine": 111, "startColumn": 5, - "endLine": 94, + "endLine": 111, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'" + "resolutionSource": "Ref to 'OpenMPVPCPublicSubnet1RouteTableDADE381A'" } }, { @@ -14281,21 +14675,21 @@ "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1NATGatewayE0556630", + "logicalId": "OpenMPVPCPublicSubnet1NATGateway29BD3E8B", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 123, + "startLine": 140, "startColumn": 5, - "endLine": 123, + "endLine": 140, "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt VPCPublicSubnet1EIP6AD938E8.AllocationId" + "resolutionSource": "GetAtt OpenMPVPCPublicSubnet1EIP53BE2C61.AllocationId" } }, { @@ -14304,21 +14698,21 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1NATGatewayE0556630", + "logicalId": "OpenMPVPCPublicSubnet1NATGateway29BD3E8B", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 129, + "startLine": 146, "startColumn": 5, - "endLine": 129, + "endLine": 146, "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'" + "resolutionSource": "Ref to 'OpenMPVPCPublicSubnet1Subnet4888FED8'" } }, { @@ -14327,15 +14721,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2Subnet74179F39", + "logicalId": "OpenMPVPCPublicSubnet2Subnet7642A39F", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 150, + "startLine": 167, "startColumn": 5, - "endLine": 150, + "endLine": 167, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -14349,15 +14743,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2Subnet74179F39", + "logicalId": "OpenMPVPCPublicSubnet2Subnet7642A39F", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 158, + "startLine": 175, "startColumn": 5, - "endLine": 158, + "endLine": 175, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -14371,21 +14765,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2Subnet74179F39", + "logicalId": "OpenMPVPCPublicSubnet2Subnet7642A39F", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 174, + "startLine": 191, "startColumn": 5, - "endLine": 174, + "endLine": 191, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" } }, { @@ -14394,22 +14788,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2RouteTable6F1A15F1", + "logicalId": "OpenMPVPCPublicSubnet2RouteTable29142B7F", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 191, + "startLine": 208, "startColumn": 5, - "endLine": 191, + "endLine": 208, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" } }, { @@ -14418,22 +14812,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2RouteTableAssociation5A808732", + "logicalId": "OpenMPVPCPublicSubnet2RouteTableAssociationA72D6947", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 202, + "startLine": 219, "startColumn": 5, - "endLine": 202, + "endLine": 219, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet2RouteTable6F1A15F1'", + "resolutionSource": "Ref to 'OpenMPVPCPublicSubnet2RouteTable29142B7F'", "extra": { "replacement_strategy": "delete_then_create" } @@ -14445,22 +14839,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2RouteTableAssociation5A808732", + "logicalId": "OpenMPVPCPublicSubnet2RouteTableAssociationA72D6947", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 205, + "startLine": 222, "startColumn": 5, - "endLine": 205, + "endLine": 222, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet2Subnet74179F39'", + "resolutionSource": "Ref to 'OpenMPVPCPublicSubnet2Subnet7642A39F'", "extra": { "replacement_strategy": "delete_then_create" } @@ -14472,15 +14866,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2DefaultRouteB7481BBA", + "logicalId": "OpenMPVPCPublicSubnet2DefaultRouteF2C059E2", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 216, + "startLine": 233, "startColumn": 5, - "endLine": 216, + "endLine": 233, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -14495,68 +14889,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet2DefaultRouteB7481BBA", + "logicalId": "OpenMPVPCPublicSubnet2DefaultRouteF2C059E2", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 220, + "startLine": 237, "startColumn": 5, - "endLine": 220, + "endLine": 237, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet2RouteTable6F1A15F1'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VPCPublicSubnet2NATGateway3C070193", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.AllocationId", - "category": "Best Practice", - "startLine": 249, - "startColumn": 5, - "endLine": 249, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt VPCPublicSubnet2EIP4947BC00.AllocationId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VPCPublicSubnet2NATGateway3C070193", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 255, - "startColumn": 5, - "endLine": 255, - "endColumn": 14, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet2Subnet74179F39'" + "resolutionSource": "Ref to 'OpenMPVPCPublicSubnet2RouteTable29142B7F'" } }, { @@ -14565,15 +14913,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", + "logicalId": "OpenMPVPCPrivateSubnet1Subnet95C8C324", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 276, + "startLine": 251, "startColumn": 5, - "endLine": 276, + "endLine": 251, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -14587,15 +14935,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", + "logicalId": "OpenMPVPCPrivateSubnet1Subnet95C8C324", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 284, + "startLine": 259, "startColumn": 5, - "endLine": 284, + "endLine": 259, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -14609,21 +14957,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", + "logicalId": "OpenMPVPCPrivateSubnet1Subnet95C8C324", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 300, + "startLine": 275, "startColumn": 5, - "endLine": 300, + "endLine": 275, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" } }, { @@ -14632,22 +14980,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1RouteTableBE8A6027", + "logicalId": "OpenMPVPCPrivateSubnet1RouteTable3DBEEA60", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 317, + "startLine": 292, "startColumn": 5, - "endLine": 317, + "endLine": 292, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" } }, { @@ -14656,22 +15004,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1RouteTableAssociation347902D1", + "logicalId": "OpenMPVPCPrivateSubnet1RouteTableAssociationD2C7C327", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 328, + "startLine": 303, "startColumn": 5, - "endLine": 328, + "endLine": 303, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet1RouteTableBE8A6027'", + "resolutionSource": "Ref to 'OpenMPVPCPrivateSubnet1RouteTable3DBEEA60'", "extra": { "replacement_strategy": "delete_then_create" } @@ -14683,22 +15031,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1RouteTableAssociation347902D1", + "logicalId": "OpenMPVPCPrivateSubnet1RouteTableAssociationD2C7C327", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 331, + "startLine": 306, "startColumn": 5, - "endLine": 331, + "endLine": 306, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet1Subnet8BCA10E0'", + "resolutionSource": "Ref to 'OpenMPVPCPrivateSubnet1Subnet95C8C324'", "extra": { "replacement_strategy": "delete_then_create" } @@ -14710,15 +15058,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1DefaultRouteAE1D6490", + "logicalId": "OpenMPVPCPrivateSubnet1DefaultRoute7EB9EABF", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 342, + "startLine": 317, "startColumn": 5, - "endLine": 342, + "endLine": 317, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -14733,22 +15081,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1DefaultRouteAE1D6490", + "logicalId": "OpenMPVPCPrivateSubnet1DefaultRoute7EB9EABF", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 346, + "startLine": 321, "startColumn": 5, - "endLine": 346, + "endLine": 321, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet1RouteTableBE8A6027'" + "resolutionSource": "Ref to 'OpenMPVPCPrivateSubnet1RouteTable3DBEEA60'" } }, { @@ -14757,15 +15105,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2SubnetCFCDAA7A", + "logicalId": "OpenMPVPCPrivateSubnet2Subnet039333AF", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 357, + "startLine": 332, "startColumn": 5, - "endLine": 357, + "endLine": 332, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -14779,15 +15127,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2SubnetCFCDAA7A", + "logicalId": "OpenMPVPCPrivateSubnet2Subnet039333AF", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 365, + "startLine": 340, "startColumn": 5, - "endLine": 365, + "endLine": 340, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -14801,21 +15149,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2SubnetCFCDAA7A", + "logicalId": "OpenMPVPCPrivateSubnet2Subnet039333AF", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 381, + "startLine": 356, "startColumn": 5, - "endLine": 381, + "endLine": 356, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" } }, { @@ -14824,22 +15172,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2RouteTable0A19E10E", + "logicalId": "OpenMPVPCPrivateSubnet2RouteTable7EFB668D", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 398, + "startLine": 373, "startColumn": 5, - "endLine": 398, + "endLine": 373, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" } }, { @@ -14848,22 +15196,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2RouteTableAssociation0C73D413", + "logicalId": "OpenMPVPCPrivateSubnet2RouteTableAssociation50872E14", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 409, + "startLine": 384, "startColumn": 5, - "endLine": 409, + "endLine": 384, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet2RouteTable0A19E10E'", + "resolutionSource": "Ref to 'OpenMPVPCPrivateSubnet2RouteTable7EFB668D'", "extra": { "replacement_strategy": "delete_then_create" } @@ -14875,22 +15223,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2RouteTableAssociation0C73D413", + "logicalId": "OpenMPVPCPrivateSubnet2RouteTableAssociation50872E14", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 412, + "startLine": 387, "startColumn": 5, - "endLine": 412, + "endLine": 387, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet2SubnetCFCDAA7A'", + "resolutionSource": "Ref to 'OpenMPVPCPrivateSubnet2Subnet039333AF'", "extra": { "replacement_strategy": "delete_then_create" } @@ -14902,15 +15250,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2DefaultRouteF4F5CFD2", + "logicalId": "OpenMPVPCPrivateSubnet2DefaultRouteA5C36AF6", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 423, + "startLine": 398, "startColumn": 5, - "endLine": 423, + "endLine": 398, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -14925,22 +15273,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet2DefaultRouteF4F5CFD2", + "logicalId": "OpenMPVPCPrivateSubnet2DefaultRouteA5C36AF6", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 427, + "startLine": 402, "startColumn": 5, - "endLine": 427, + "endLine": 402, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet2RouteTable0A19E10E'" + "resolutionSource": "Ref to 'OpenMPVPCPrivateSubnet2RouteTable7EFB668D'" } }, { @@ -14949,22 +15297,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCVPCGW99B986DC", + "logicalId": "OpenMPVPCVPCGWDD05DB82", "entityType": "Resource", "resourceType": "AWS::EC2::VPCGatewayAttachment" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 455, + "startLine": 430, "startColumn": 5, - "endLine": 455, + "endLine": 430, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'", + "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'", "extra": { "replacement_strategy": "delete_then_create" } @@ -14976,15 +15324,15 @@ "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroup0525485D", + "logicalId": "BatchSecurityGroup77EC865F", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 466, + "startLine": 568, "startColumn": 5, - "endLine": 466, + "endLine": 568, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -14998,181 +15346,149 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroup0525485D", + "logicalId": "BatchSecurityGroup77EC865F", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 480, + "startLine": 576, "startColumn": 5, - "endLine": 480, + "endLine": 576, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'OpenMPVPCF5EF58EB'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'ComputeResources.InstanceRole' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", + "logicalId": "OpenMPComputeEnvironment", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Batch::ComputeEnvironment" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.ComputeResources.InstanceRole", "category": "Best Practice", - "startLine": 492, - "startColumn": 5, - "endLine": 492, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" - }, - "propertyPath": "Properties.GroupId", - "category": "Best Practice", - "startLine": 493, - "startColumn": 5, - "endLine": 493, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 749, + "startColumn": 6, + "endLine": 749, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ASGInstanceSecurityGroup0525485D.GroupId" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'ComputeResources.InstanceTypes' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", + "logicalId": "OpenMPComputeEnvironment", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Batch::ComputeEnvironment" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.ComputeResources.InstanceTypes", "category": "Best Practice", - "startLine": 499, - "startColumn": 5, - "endLine": 499, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 755, + "startColumn": 6, + "endLine": 755, + "endColumn": 20, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'ComputeResources.SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", + "logicalId": "OpenMPComputeEnvironment", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Batch::ComputeEnvironment" }, - "propertyPath": "Properties.SourceSecurityGroupId", + "propertyPath": "Properties.ComputeResources.SecurityGroupIds", "category": "Best Practice", - "startLine": 500, - "startColumn": 5, - "endLine": 500, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 764, + "startColumn": 6, + "endLine": 764, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt LBSecurityGroup8A41EA2B.GroupId" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'ComputeResources.Subnets' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", + "logicalId": "OpenMPComputeEnvironment", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Batch::ComputeEnvironment" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.ComputeResources.Subnets", "category": "Best Practice", - "startLine": 506, - "startColumn": 5, - "endLine": 506, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 772, + "startColumn": 6, + "endLine": 772, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", + "message": "Property 'ComputeResources.Type' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "OpenMPComputeEnvironment", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Batch::ComputeEnvironment" }, - "propertyPath": "Properties.IamInstanceProfile", + "propertyPath": "Properties.ComputeResources.Type", "category": "Best Practice", - "startLine": 554, - "startColumn": 5, - "endLine": 554, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "startLine": 780, + "startColumn": 6, + "endLine": 780, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ASGInstanceProfile0A2834D7'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "OpenMPComputeEnvironment", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Batch::ComputeEnvironment" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 557, + "startLine": 789, "startColumn": 5, - "endLine": 557, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 789, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -15182,43 +15498,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "OpenMPLogGroup95FEB040", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 560, + "startLine": 850, "startColumn": 5, - "endLine": 560, + "endLine": 850, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.SecurityGroups", - "category": "Best Practice", - "startLine": 561, - "startColumn": 5, - "endLine": 561, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -15228,318 +15521,283 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is create-only; updating it will cause resource replacement", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "JobSubmitterFunctionLogGroupF7938D09", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 569, + "startLine": 1084, "startColumn": 5, - "endLine": 569, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 1084, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:/aws/lambda/{ref:JobSubmitterFunctionFAE645C8})" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'OpenMPRepositoryAB8BB3BC' of type 'AWS::ECR::Repository' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ASG46ED3070", + "logicalId": "OpenMPRepositoryAB8BB3BC", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::ECR::Repository" }, - "propertyPath": "Properties.LaunchConfigurationName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 583, - "startColumn": 5, - "endLine": 583, - "endColumn": 29, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'ASGLaunchConfigC00AF12B'" - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ASG46ED3070", + "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.VPCZoneIdentifier", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 600, - "startColumn": 5, - "endLine": 600, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 465, + "startColumn": 4, + "endLine": 465, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGroup8A41EA2B", + "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 621, - "startColumn": 5, - "endLine": 621, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 537, + "startColumn": 4, + "endLine": 537, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'BatchSecurityGroup77EC865F' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGroup8A41EA2B", + "logicalId": "BatchSecurityGroup77EC865F", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 631, - "startColumn": 5, - "endLine": 631, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" - } + "startLine": 567, + "startColumn": 4, + "endLine": 567, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'DestinationSecurityGroupId' is create-only; updating it will cause resource replacement", + "message": "Resource 'BatchServiceRole57930367' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", + "logicalId": "BatchServiceRole57930367", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.DestinationSecurityGroupId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 643, - "startColumn": 5, - "endLine": 643, - "endColumn": 32, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ASGInstanceSecurityGroup0525485D.GroupId" - } + "startLine": 586, + "startColumn": 4, + "endLine": 586, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Resource 'BatchInstanceRole8DB66C4C' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", + "logicalId": "BatchInstanceRole8DB66C4C", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 649, - "startColumn": 5, - "endLine": 649, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 620, + "startColumn": 4, + "endLine": 620, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Resource 'OpenMPComputeEnvironment' of type 'AWS::Batch::ComputeEnvironment' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", + "logicalId": "OpenMPComputeEnvironment", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::Batch::ComputeEnvironment" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 650, - "startColumn": 5, - "endLine": 650, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt LBSecurityGroup8A41EA2B.GroupId" - } + "startLine": 747, + "startColumn": 4, + "endLine": 747, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Resource 'OpenMPJobQueue' of type 'AWS::Batch::JobQueue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", + "logicalId": "OpenMPJobQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::Batch::JobQueue" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 656, - "startColumn": 5, - "endLine": 656, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 797, + "startColumn": 4, + "endLine": 797, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Resource 'BatchJobRole37A83758' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", + "logicalId": "BatchJobRole37A83758", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 657, - "startColumn": 5, - "endLine": 657, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 815, + "startColumn": 4, + "endLine": 815, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'HealthCheck' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'OpenMPLogGroup95FEB040' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LB8A12904C", + "logicalId": "OpenMPLogGroup95FEB040", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.HealthCheck", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 667, - "startColumn": 5, - "endLine": 667, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 849, + "startColumn": 4, + "endLine": 849, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", + "message": "Resource 'OpenMPJobDefinition' of type 'AWS::Batch::JobDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LB8A12904C", + "logicalId": "OpenMPJobDefinition", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::Batch::JobDefinition" }, - "propertyPath": "Properties.Scheme", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 682, - "startColumn": 5, - "endLine": 682, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 861, + "startColumn": 4, + "endLine": 861, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Subnets' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'JobSubmitterFunctionServiceRole55AD6E92' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LB8A12904C", + "logicalId": "JobSubmitterFunctionServiceRole55AD6E92", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Subnets", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 691, - "startColumn": 5, - "endLine": 691, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 972, + "startColumn": 4, + "endLine": 972, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LBSecurityGroup8A41EA2B' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'JobSubmitterFunctionFAE645C8' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LBSecurityGroup8A41EA2B", + "logicalId": "JobSubmitterFunctionFAE645C8", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 620, + "startLine": 1034, "startColumn": 4, - "endLine": 620, + "endLine": 1034, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -15547,35 +15805,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LB8A12904C' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", + "message": "Resource 'JobSubmitterFunctionLogGroupF7938D09' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LB8A12904C", + "logicalId": "JobSubmitterFunctionLogGroupF7938D09", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::Logs::LogGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 665, + "startLine": 1083, "startColumn": 4, - "endLine": 665, + "endLine": 1083, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/cloudfront-functions--DemoCloudfrontFunctionsStack.template.json": { - "filePath": "cdk/cloudfront-functions--DemoCloudfrontFunctionsStack.template.json", + "cdk/classic-load-balancer--LoadBalancerStack.template.json": { + "filePath": "cdk/classic-load-balancer--LoadBalancerStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 13, + "resourcesScanned": 33, "counts": { "fatal": 0, "errors": 0, "warnings": 1, - "informational": 10, + "informational": 65, "debug": 0 }, "suppressed": 0, @@ -15584,88 +15842,84 @@ }, "diagnostics": [ { - "ruleId": "W3005", + "ruleId": "W3697", "severity": "WARN", - "message": "'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", "source": "CFN_LINT", "entity": { - "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 363, - "startColumn": 4, - "endLine": 363, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "category": "Deprecation", + "startLine": 551, + "startColumn": 3, + "endLine": 551, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebsiteBucketPolicyE10E3262", + "logicalId": "VPCB9E5F0B4", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 40, + "startLine": 6, "startColumn": 5, - "endLine": 40, - "endColumn": 12, + "endLine": 6, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'WebsiteBucket75C24D94'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Content' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebsiteFilesAwsCliLayerE117CD16", + "logicalId": "VPCB9E5F0B4", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Content", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 154, + "startLine": 9, "startColumn": 5, - "endLine": 154, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "endLine": 9, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebsiteFilesAwsCliLayerE117CD16", + "logicalId": "VPCPublicSubnet1SubnetB4246D30", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Description", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 160, + "startLine": 24, "startColumn": 5, - "endLine": 160, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "endLine": 24, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -15675,19 +15929,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RequestFunction0B9B463A", + "logicalId": "VPCPublicSubnet1SubnetB4246D30", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 394, + "startLine": 32, "startColumn": 5, - "endLine": 394, - "endColumn": 10, + "endLine": 32, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -15697,314 +15951,213 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ResponseFunctionB78A69CA", + "logicalId": "VPCPublicSubnet1SubnetB4246D30", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 409, + "startLine": 48, "startColumn": 5, - "endLine": 409, - "endColumn": 10, + "endLine": 48, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 205, - "startColumn": 4, - "endLine": 205, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", + "logicalId": "VPCPublicSubnet1RouteTableFEE4B781", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 336, - "startColumn": 4, - "endLine": 336, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 65, + "startColumn": 5, + "endLine": 65, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'RequestFunction0B9B463A' of type 'AWS::CloudFront::Function' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RequestFunction0B9B463A", + "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Function" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 387, - "startColumn": 4, - "endLine": 387, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 76, + "startColumn": 5, + "endLine": 76, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ResponseFunctionB78A69CA' of type 'AWS::CloudFront::Function' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ResponseFunctionB78A69CA", + "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Function" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 402, - "startColumn": 4, - "endLine": 402, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 79, + "startColumn": 5, + "endLine": 79, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SiteDistribution3FF9535D' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SiteDistribution3FF9535D", + "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 428, - "startColumn": 4, - "endLine": 428, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/codepipeline-build-deploy--CodepipelineBuildDeployStack.template.json": { - "filePath": "cdk/codepipeline-build-deploy--CodepipelineBuildDeployStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 74, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 4, - "informational": 112, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "BuildLambda72E2A667", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 944, + "startLine": 90, "startColumn": 5, - "endLine": 944, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 90, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'BuildLambdaServiceRole8FB6C033' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "BuildLambda72E2A667", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 946, - "startColumn": 4, - "endLine": 946, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "AWS679f53fac002430cb0da5b7982bd22872D164C4C", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 1084, - "startColumn": 4, - "endLine": 1084, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'BuildDeployPipelineRole3223E55F' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", - "source": "CFN_LINT", - "entity": { - "logicalId": "BuildDeployPipeline5EEC284B", - "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 2461, - "startColumn": 4, - "endLine": 2461, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefC6FB60B4", + "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 120, + "startLine": 94, "startColumn": 5, - "endLine": 120, - "endColumn": 26, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 94, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefC6FB60B4", + "logicalId": "VPCPublicSubnet1NATGatewayE0556630", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 181, + "startLine": 123, "startColumn": 5, - "endLine": 181, - "endColumn": 9, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 123, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt VPCPublicSubnet1EIP6AD938E8.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefC6FB60B4", + "logicalId": "VPCPublicSubnet1NATGatewayE0556630", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.ExecutionRoleArn", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 182, + "startLine": 129, "startColumn": 5, - "endLine": 182, - "endColumn": 22, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 129, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateTaskDefExecutionRole272677A9.Arn" + "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefC6FB60B4", + "logicalId": "VPCPublicSubnet2Subnet74179F39", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 188, + "startLine": 150, "startColumn": 5, - "endLine": 188, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 150, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16014,20 +16167,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefC6FB60B4", + "logicalId": "VPCPublicSubnet2Subnet74179F39", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 189, + "startLine": 158, "startColumn": 5, - "endLine": 189, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 158, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16037,115 +16189,195 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefC6FB60B4", + "logicalId": "VPCPublicSubnet2Subnet74179F39", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 190, + "startLine": 174, "startColumn": 5, - "endLine": 190, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 174, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefC6FB60B4", + "logicalId": "VPCPublicSubnet2RouteTable6F1A15F1", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.VpcId", "category": "Best Practice", "startLine": 191, "startColumn": 5, "endLine": 191, - "endColumn": 29, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefC6FB60B4", + "logicalId": "VPCPublicSubnet2RouteTableAssociation5A808732", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.TaskRoleArn", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 194, + "startLine": 202, "startColumn": 5, - "endLine": 194, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 202, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateTaskDefTaskRole0B257552.Arn" + "resolutionSource": "Ref to 'VPCPublicSubnet2RouteTable6F1A15F1'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcA8CFF6E7", + "logicalId": "VPCPublicSubnet2RouteTableAssociation5A808732", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 1097, + "startLine": 205, "startColumn": 5, - "endLine": 1097, - "endColumn": 15, + "endLine": 205, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet2Subnet74179F39'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcA8CFF6E7", + "logicalId": "VPCPublicSubnet2DefaultRouteB7481BBA", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 1100, + "startLine": 216, "startColumn": 5, - "endLine": 1100, - "endColumn": 21, + "endLine": 216, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "VPCPublicSubnet2DefaultRouteB7481BBA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 220, + "startColumn": 5, + "endLine": 220, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet2RouteTable6F1A15F1'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "VPCPublicSubnet2NATGateway3C070193", + "entityType": "Resource", + "resourceType": "AWS::EC2::NatGateway" + }, + "propertyPath": "Properties.AllocationId", + "category": "Best Practice", + "startLine": 249, + "startColumn": 5, + "endLine": 249, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt VPCPublicSubnet2EIP4947BC00.AllocationId" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "VPCPublicSubnet2NATGateway3C070193", + "entityType": "Resource", + "resourceType": "AWS::EC2::NatGateway" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 255, + "startColumn": 5, + "endLine": 255, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet2Subnet74179F39'" } }, { @@ -16154,15 +16386,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet1Subnet6F292256", + "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 1119, + "startLine": 276, "startColumn": 5, - "endLine": 1119, + "endLine": 276, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -16176,15 +16408,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet1Subnet6F292256", + "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 1127, + "startLine": 284, "startColumn": 5, - "endLine": 1127, + "endLine": 284, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -16198,21 +16430,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet1Subnet6F292256", + "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1143, + "startLine": 300, "startColumn": 5, - "endLine": 1143, + "endLine": 300, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { @@ -16221,22 +16453,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet1RouteTableA4D922A0", + "logicalId": "VPCPrivateSubnet1RouteTableBE8A6027", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1164, + "startLine": 317, "startColumn": 5, - "endLine": 1164, + "endLine": 317, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { @@ -16245,22 +16477,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet1RouteTableAssociation5AD6D21B", + "logicalId": "VPCPrivateSubnet1RouteTableAssociation347902D1", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 1179, + "startLine": 328, "startColumn": 5, - "endLine": 1179, + "endLine": 328, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcPublicSubnet1RouteTableA4D922A0'", + "resolutionSource": "Ref to 'VPCPrivateSubnet1RouteTableBE8A6027'", "extra": { "replacement_strategy": "delete_then_create" } @@ -16272,22 +16504,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet1RouteTableAssociation5AD6D21B", + "logicalId": "VPCPrivateSubnet1RouteTableAssociation347902D1", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 1182, + "startLine": 331, "startColumn": 5, - "endLine": 1182, + "endLine": 331, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcPublicSubnet1Subnet6F292256'", + "resolutionSource": "Ref to 'VPCPrivateSubnet1Subnet8BCA10E0'", "extra": { "replacement_strategy": "delete_then_create" } @@ -16299,15 +16531,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet1DefaultRouteAFF78CE0", + "logicalId": "VPCPrivateSubnet1DefaultRouteAE1D6490", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 1197, + "startLine": 342, "startColumn": 5, - "endLine": 1197, + "endLine": 342, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -16322,68 +16554,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet1DefaultRouteAFF78CE0", + "logicalId": "VPCPrivateSubnet1DefaultRouteAE1D6490", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 1201, + "startLine": 346, "startColumn": 5, - "endLine": 1201, + "endLine": 346, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcPublicSubnet1RouteTableA4D922A0'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ClusterVpcPublicSubnet1NATGateway69FA9C06", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.AllocationId", - "category": "Best Practice", - "startLine": 1236, - "startColumn": 5, - "endLine": 1236, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ClusterVpcPublicSubnet1EIP37B290BD.AllocationId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ClusterVpcPublicSubnet1NATGateway69FA9C06", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 1242, - "startColumn": 5, - "endLine": 1242, - "endColumn": 14, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcPublicSubnet1Subnet6F292256'" + "resolutionSource": "Ref to 'VPCPrivateSubnet1RouteTableBE8A6027'" } }, { @@ -16392,15 +16578,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet2Subnet426701E5", + "logicalId": "VPCPrivateSubnet2SubnetCFCDAA7A", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 1265, + "startLine": 357, "startColumn": 5, - "endLine": 1265, + "endLine": 357, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -16414,15 +16600,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet2Subnet426701E5", + "logicalId": "VPCPrivateSubnet2SubnetCFCDAA7A", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 1273, + "startLine": 365, "startColumn": 5, - "endLine": 1273, + "endLine": 365, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -16436,21 +16622,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet2Subnet426701E5", + "logicalId": "VPCPrivateSubnet2SubnetCFCDAA7A", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1289, + "startLine": 381, "startColumn": 5, - "endLine": 1289, + "endLine": 381, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { @@ -16459,22 +16645,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet2RouteTable12CC8384", + "logicalId": "VPCPrivateSubnet2RouteTable0A19E10E", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1310, + "startLine": 398, "startColumn": 5, - "endLine": 1310, + "endLine": 398, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { @@ -16483,22 +16669,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet2RouteTableAssociation7ADD1D72", + "logicalId": "VPCPrivateSubnet2RouteTableAssociation0C73D413", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 1325, + "startLine": 409, "startColumn": 5, - "endLine": 1325, + "endLine": 409, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcPublicSubnet2RouteTable12CC8384'", + "resolutionSource": "Ref to 'VPCPrivateSubnet2RouteTable0A19E10E'", "extra": { "replacement_strategy": "delete_then_create" } @@ -16510,22 +16696,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet2RouteTableAssociation7ADD1D72", + "logicalId": "VPCPrivateSubnet2RouteTableAssociation0C73D413", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 1328, + "startLine": 412, "startColumn": 5, - "endLine": 1328, + "endLine": 412, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcPublicSubnet2Subnet426701E5'", + "resolutionSource": "Ref to 'VPCPrivateSubnet2SubnetCFCDAA7A'", "extra": { "replacement_strategy": "delete_then_create" } @@ -16537,15 +16723,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet2DefaultRouteAEC6FDD4", + "logicalId": "VPCPrivateSubnet2DefaultRouteF4F5CFD2", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 1343, + "startLine": 423, "startColumn": 5, - "endLine": 1343, + "endLine": 423, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -16560,108 +16746,113 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet2DefaultRouteAEC6FDD4", + "logicalId": "VPCPrivateSubnet2DefaultRouteF4F5CFD2", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 1347, + "startLine": 427, "startColumn": 5, - "endLine": 1347, + "endLine": 427, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcPublicSubnet2RouteTable12CC8384'" + "resolutionSource": "Ref to 'VPCPrivateSubnet2RouteTable0A19E10E'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet2NATGatewayC9242BCE", + "logicalId": "VPCVPCGW99B986DC", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1382, + "startLine": 455, "startColumn": 5, - "endLine": 1382, - "endColumn": 18, + "endLine": 455, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ClusterVpcPublicSubnet2EIP299AF9FE.AllocationId" + "resolutionSource": "Ref to 'VPCB9E5F0B4'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPublicSubnet2NATGatewayC9242BCE", + "logicalId": "ASGInstanceSecurityGroup0525485D", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 1388, + "startLine": 466, "startColumn": 5, - "endLine": 1388, - "endColumn": 14, + "endLine": 466, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcPublicSubnet2Subnet426701E5'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet1Subnet505E4257", + "logicalId": "ASGInstanceSecurityGroup0525485D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1411, + "startLine": 480, "startColumn": 5, - "endLine": 1411, - "endColumn": 22, + "endLine": 480, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet1Subnet505E4257", + "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 1419, + "startLine": 492, "startColumn": 5, - "endLine": 1419, - "endColumn": 15, + "endLine": 492, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16671,167 +16862,161 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet1Subnet505E4257", + "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 1435, + "startLine": 493, "startColumn": 5, - "endLine": 1435, - "endColumn": 11, + "endLine": 493, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + "resolutionSource": "GetAtt ASGInstanceSecurityGroup0525485D.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet1RouteTable4D91A516", + "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 1456, + "startLine": 499, "startColumn": 5, - "endLine": 1456, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 499, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet1RouteTableAssociationB0545C4C", + "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.SourceSecurityGroupId", "category": "Best Practice", - "startLine": 1471, + "startLine": 500, "startColumn": 5, - "endLine": 1471, - "endColumn": 18, + "endLine": 500, + "endColumn": 27, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcPrivateSubnet1RouteTable4D91A516'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt LBSecurityGroup8A41EA2B.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet1RouteTableAssociationB0545C4C", + "logicalId": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 1474, + "startLine": 506, "startColumn": 5, - "endLine": 1474, - "endColumn": 14, + "endLine": 506, + "endColumn": 12, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcPrivateSubnet1Subnet505E4257'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet1DefaultRoute6BD16184", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.IamInstanceProfile", "category": "Best Practice", - "startLine": 1489, + "startLine": 554, "startColumn": 5, - "endLine": 1489, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 554, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ASGInstanceProfile0A2834D7'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet1DefaultRoute6BD16184", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 1493, + "startLine": 557, "startColumn": 5, - "endLine": 1493, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 557, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcPrivateSubnet1RouteTable4D91A516'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet2Subnet176BE39E", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 1508, + "startLine": 560, "startColumn": 5, - "endLine": 1508, - "endColumn": 22, + "endLine": 560, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16841,19 +17026,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet2Subnet176BE39E", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.SecurityGroups", "category": "Best Practice", - "startLine": 1516, + "startLine": 561, "startColumn": 5, - "endLine": 1516, - "endColumn": 15, + "endLine": 561, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16863,121 +17049,87 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'UserData' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet2Subnet176BE39E", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 1532, + "startLine": 569, "startColumn": 5, - "endLine": 1532, - "endColumn": 11, + "endLine": 569, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet2RouteTable918A9411", + "logicalId": "ASG46ED3070", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.LaunchConfigurationName", "category": "Best Practice", - "startLine": 1553, + "startLine": 583, "startColumn": 5, - "endLine": 1553, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 583, + "endColumn": 29, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'ASGLaunchConfigC00AF12B'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet2RouteTableAssociation994802D2", + "logicalId": "ASG46ED3070", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.VPCZoneIdentifier", "category": "Best Practice", - "startLine": 1568, + "startLine": 600, "startColumn": 5, - "endLine": 1568, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcPrivateSubnet2RouteTable918A9411'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ClusterVpcPrivateSubnet2RouteTableAssociation994802D2", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 1571, - "startColumn": 5, - "endLine": 1571, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 600, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcPrivateSubnet2Subnet176BE39E'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet2DefaultRouteCC18893B", + "logicalId": "LBSecurityGroup8A41EA2B", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 1586, + "startLine": 621, "startColumn": 5, - "endLine": 1586, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 621, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16987,70 +17139,67 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcPrivateSubnet2DefaultRouteCC18893B", + "logicalId": "LBSecurityGroup8A41EA2B", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1590, + "startLine": 631, "startColumn": 5, - "endLine": 1590, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 631, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcPrivateSubnet2RouteTable918A9411'" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationSecurityGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterVpcVPCGW361426E5", + "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.DestinationSecurityGroupId", "category": "Best Practice", - "startLine": 1626, + "startLine": 643, "startColumn": 5, - "endLine": 1626, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "endLine": 643, + "endColumn": 32, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt ASGInstanceSecurityGroup0525485D.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BlueTargetGroupF108EB01", + "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 1641, + "startLine": 649, "startColumn": 5, - "endLine": 1641, - "endColumn": 10, + "endLine": 649, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -17060,41 +17209,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BlueTargetGroupF108EB01", + "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 1642, + "startLine": 650, "startColumn": 5, - "endLine": 1642, - "endColumn": 10, + "endLine": 650, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt LBSecurityGroup8A41EA2B.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BlueTargetGroupF108EB01", + "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 1643, + "startLine": 656, "startColumn": 5, - "endLine": 1643, - "endColumn": 14, + "endLine": 656, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -17104,19 +17256,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BlueTargetGroupF108EB01", + "logicalId": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.TargetType", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 1650, + "startLine": 657, "startColumn": 5, - "endLine": 1650, - "endColumn": 16, + "endLine": 657, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -17126,42 +17279,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'HealthCheck' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BlueTargetGroupF108EB01", + "logicalId": "LB8A12904C", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.HealthCheck", "category": "Best Practice", - "startLine": 1651, + "startLine": 667, "startColumn": 5, - "endLine": 1651, - "endColumn": 11, + "endLine": 667, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GreenTargetGroupEEB2DF3E", + "logicalId": "LB8A12904C", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.Scheme", "category": "Best Practice", - "startLine": 1662, + "startLine": 682, "startColumn": 5, - "endLine": 1662, - "endColumn": 10, + "endLine": 682, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -17171,154 +17325,168 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Property 'Subnets' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GreenTargetGroupEEB2DF3E", + "logicalId": "LB8A12904C", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.Subnets", "category": "Best Practice", - "startLine": 1663, + "startLine": 691, "startColumn": 5, - "endLine": 1663, - "endColumn": 10, + "endLine": 691, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Resource 'LBSecurityGroup8A41EA2B' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "GreenTargetGroupEEB2DF3E", + "logicalId": "LBSecurityGroup8A41EA2B", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1664, - "startColumn": 5, - "endLine": 1664, - "endColumn": 14, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 620, + "startColumn": 4, + "endLine": 620, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", + "message": "Resource 'LB8A12904C' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "GreenTargetGroupEEB2DF3E", + "logicalId": "LB8A12904C", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" }, - "propertyPath": "Properties.TargetType", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1671, - "startColumn": 5, - "endLine": 1671, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 665, + "startColumn": 4, + "endLine": 665, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/cloudfront-functions--DemoCloudfrontFunctionsStack.template.json": { + "filePath": "cdk/cloudfront-functions--DemoCloudfrontFunctionsStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 13, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 10, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "GreenTargetGroupEEB2DF3E", + "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 1672, - "startColumn": 5, - "endLine": 1672, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" - } + "startLine": 363, + "startColumn": 4, + "endLine": 363, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroupDD263621", + "logicalId": "WebsiteBucketPolicyE10E3262", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 1683, + "startLine": 40, "startColumn": 5, - "endLine": 1683, - "endColumn": 22, + "endLine": 40, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'WebsiteBucket75C24D94'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Content' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroupDD263621", + "logicalId": "WebsiteFilesAwsCliLayerE117CD16", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Content", "category": "Best Practice", - "startLine": 1700, + "startLine": 154, "startColumn": 5, - "endLine": 1700, - "endColumn": 11, + "endLine": 154, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublicAlb84330974", + "logicalId": "WebsiteFilesAwsCliLayerE117CD16", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.Scheme", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 1717, + "startLine": 160, "startColumn": 5, - "endLine": 1717, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endLine": 160, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -17328,20 +17496,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublicAlb84330974", + "logicalId": "RequestFunction0B9B463A", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::CloudFront::Function" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 1734, + "startLine": 394, "startColumn": 5, - "endLine": 1734, + "endLine": 394, "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -17351,180 +17518,267 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublicAlbAlbListener804C1B2779", + "logicalId": "ResponseFunctionB78A69CA", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::CloudFront::Function" }, - "propertyPath": "Properties.LoadBalancerArn", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 1757, + "startLine": 409, "startColumn": 5, - "endLine": 1757, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", + "endLine": 409, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'PublicAlb84330974'" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", + "message": "Resource 'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EcsCluster72B17558", + "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", "entityType": "Resource", - "resourceType": "AWS::ECS::ClusterCapacityProviderAssociations" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Cluster", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1780, - "startColumn": 5, - "endLine": 1780, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'EcsCluster97242B84'" - } + "startLine": 205, + "startColumn": 4, + "endLine": 205, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", + "message": "Resource 'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceAC2B3B85", + "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Cluster", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1792, - "startColumn": 5, - "endLine": 1792, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'EcsCluster97242B84'" - } + "startLine": 336, + "startColumn": 4, + "endLine": 336, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'RequestFunction0B9B463A' of type 'AWS::CloudFront::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceAC2B3B85", + "logicalId": "RequestFunction0B9B463A", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::CloudFront::Function" }, - "propertyPath": "Properties.LaunchType", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1805, - "startColumn": 5, - "endLine": 1805, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 387, + "startColumn": 4, + "endLine": 387, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ServiceName' is create-only; updating it will cause resource replacement", + "message": "Resource 'ResponseFunctionB78A69CA' of type 'AWS::CloudFront::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceAC2B3B85", + "logicalId": "ResponseFunctionB78A69CA", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::CloudFront::Function" }, - "propertyPath": "Properties.ServiceName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1836, - "startColumn": 5, - "endLine": 1836, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 402, + "startColumn": 4, + "endLine": 402, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Resource 'SiteDistribution3FF9535D' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceSecurityGroup0A0E79CB", + "logicalId": "SiteDistribution3FF9535D", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1853, - "startColumn": 5, - "endLine": 1853, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, + "startLine": 428, + "startColumn": 4, + "endLine": 428, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/codepipeline-build-deploy--CodepipelineBuildDeployStack.template.json": { + "filePath": "cdk/codepipeline-build-deploy--CodepipelineBuildDeployStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 74, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 4, + "informational": 112, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "BuildLambda72E2A667", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 944, + "startColumn": 5, + "endLine": 944, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'BuildLambdaServiceRole8FB6C033' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "BuildLambda72E2A667", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 946, + "startColumn": 4, + "endLine": 946, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "AWS679f53fac002430cb0da5b7982bd22872D164C4C", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1084, + "startColumn": 4, + "endLine": 1084, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'BuildDeployPipelineRole3223E55F' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", + "source": "CFN_LINT", + "entity": { + "logicalId": "BuildDeployPipeline5EEC284B", + "entityType": "Resource", + "resourceType": "AWS::CodePipeline::Pipeline" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 2461, + "startColumn": 4, + "endLine": 2461, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceSecurityGroup0A0E79CB", + "logicalId": "FargateTaskDefC6FB60B4", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 1861, + "startLine": 120, "startColumn": 5, - "endLine": 1861, - "endColumn": 11, + "endLine": 120, + "endColumn": 26, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceSecurityGroupfromCodepipelineBuildDeployStackSecurityGroup07B96CA880690A9743", + "logicalId": "FargateTaskDefC6FB60B4", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 1879, + "startLine": 181, "startColumn": 5, - "endLine": 1879, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 181, + "endColumn": 9, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -17534,44 +17788,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceSecurityGroupfromCodepipelineBuildDeployStackSecurityGroup07B96CA880690A9743", + "logicalId": "FargateTaskDefC6FB60B4", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.ExecutionRoleArn", "category": "Best Practice", - "startLine": 1880, + "startLine": 182, "startColumn": 5, - "endLine": 1880, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 182, + "endColumn": 22, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateServiceSecurityGroup0A0E79CB.GroupId" + "resolutionSource": "GetAtt FargateTaskDefExecutionRole272677A9.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceSecurityGroupfromCodepipelineBuildDeployStackSecurityGroup07B96CA880690A9743", + "logicalId": "FargateTaskDefC6FB60B4", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 1886, + "startLine": 188, "startColumn": 5, - "endLine": 1886, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 188, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -17581,44 +17835,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceSecurityGroupfromCodepipelineBuildDeployStackSecurityGroup07B96CA880690A9743", + "logicalId": "FargateTaskDefC6FB60B4", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.SourceSecurityGroupId", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 1887, + "startLine": 189, "startColumn": 5, - "endLine": 1887, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 189, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt SecurityGroupDD263621.GroupId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceSecurityGroupfromCodepipelineBuildDeployStackSecurityGroup07B96CA880690A9743", + "logicalId": "FargateTaskDefC6FB60B4", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 1893, + "startLine": 190, "startColumn": 5, - "endLine": 1893, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 190, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -17628,20 +17881,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ComputePlatform' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CodeDeployGroupApplication13EFBDA6", + "logicalId": "FargateTaskDefC6FB60B4", "entityType": "Resource", - "resourceType": "AWS::CodeDeploy::Application" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ComputePlatform", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 1942, + "startLine": 191, "startColumn": 5, - "endLine": 1942, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 191, + "endColumn": 29, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -17651,44 +17904,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApplicationName' is create-only; updating it will cause resource replacement", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CodeDeployGroup58220FC8", + "logicalId": "FargateTaskDefC6FB60B4", "entityType": "Resource", - "resourceType": "AWS::CodeDeploy::DeploymentGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ApplicationName", + "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 1954, + "startLine": 194, "startColumn": 5, - "endLine": 1954, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 194, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'CodeDeployGroupApplication13EFBDA6'" + "resolutionSource": "GetAtt FargateTaskDefTaskRole0B257552.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AliasName' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildDeployPipelineArtifactsBucketEncryptionKeyAliasC52C67EF", + "logicalId": "ClusterVpcA8CFF6E7", "entityType": "Resource", - "resourceType": "AWS::KMS::Alias" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.AliasName", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 2074, + "startLine": 1097, "startColumn": 5, - "endLine": 2074, + "endLine": 1097, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -17698,43 +17950,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildDeployPipelineArtifactsBucketPolicyC49383E9", + "logicalId": "ClusterVpcA8CFF6E7", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 2122, + "startLine": 1100, "startColumn": 5, - "endLine": 2122, - "endColumn": 12, + "endLine": 1100, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'BuildDeployPipelineArtifactsBucket5D4A76C1'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildDeployPipeline5EEC284B", + "logicalId": "ClusterVpcPublicSubnet1Subnet6F292256", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 2309, + "startLine": 1119, "startColumn": 5, - "endLine": 2309, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", + "endLine": 1119, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -17742,812 +17992,886 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'repoBEC318EA' of type 'AWS::CodeCommit::Repository' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "repoBEC318EA", + "logicalId": "ClusterVpcPublicSubnet1Subnet6F292256", "entityType": "Resource", - "resourceType": "AWS::CodeCommit::Repository" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, + "startLine": 1127, + "startColumn": 5, + "endLine": 1127, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'repoCodepipelineBuildDeployStackBuildDeployPipeline2B279CCCmainEventRule3F24D1E0' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "repoCodepipelineBuildDeployStackBuildDeployPipeline2B279CCCmainEventRule3F24D1E0", + "logicalId": "ClusterVpcPublicSubnet1Subnet6F292256", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 23, - "startColumn": 4, - "endLine": 23, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1143, + "startColumn": 5, + "endLine": 1143, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'imageRepo1D8A68AF' of type 'AWS::ECR::Repository' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "imageRepo1D8A68AF", + "logicalId": "ClusterVpcPublicSubnet1RouteTableA4D922A0", "entityType": "Resource", - "resourceType": "AWS::ECR::Repository" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 89, - "startColumn": 3, - "endLine": 89, - "endColumn": 21, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1164, + "startColumn": 5, + "endLine": 1164, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateTaskDefTaskRole0B257552' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefTaskRole0B257552", + "logicalId": "ClusterVpcPublicSubnet1RouteTableAssociation5AD6D21B", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 99, - "startColumn": 4, - "endLine": 99, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1179, + "startColumn": 5, + "endLine": 1179, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcPublicSubnet1RouteTableA4D922A0'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateTaskDefC6FB60B4' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefC6FB60B4", + "logicalId": "ClusterVpcPublicSubnet1RouteTableAssociation5AD6D21B", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 119, - "startColumn": 4, - "endLine": 119, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1182, + "startColumn": 5, + "endLine": 1182, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcPublicSubnet1Subnet6F292256'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateTaskDefExecutionRole272677A9' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefExecutionRole272677A9", + "logicalId": "ClusterVpcPublicSubnet1DefaultRouteAFF78CE0", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 207, - "startColumn": 4, - "endLine": 207, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1197, + "startColumn": 5, + "endLine": 1197, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BuildImageRoleA9C72406' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildImageRoleA9C72406", + "logicalId": "ClusterVpcPublicSubnet1DefaultRouteAFF78CE0", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 265, - "startColumn": 4, - "endLine": 265, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1201, + "startColumn": 5, + "endLine": 1201, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcPublicSubnet1RouteTableA4D922A0'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BuildImage74257FD8' of type 'AWS::CodeBuild::Project' supports Tags but none are configured", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildImage74257FD8", + "logicalId": "ClusterVpcPublicSubnet1NATGateway69FA9C06", "entityType": "Resource", - "resourceType": "AWS::CodeBuild::Project" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 481, - "startColumn": 4, - "endLine": 481, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BuildTestRoleC332A422' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BuildTestRoleC332A422", + "startLine": 1236, + "startColumn": 5, + "endLine": 1236, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt ClusterVpcPublicSubnet1EIP37B290BD.AllocationId" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ClusterVpcPublicSubnet1NATGateway69FA9C06", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 627, - "startColumn": 4, - "endLine": 627, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1242, + "startColumn": 5, + "endLine": 1242, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcPublicSubnet1Subnet6F292256'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BuildTestC9659529' of type 'AWS::CodeBuild::Project' supports Tags but none are configured", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildTestC9659529", + "logicalId": "ClusterVpcPublicSubnet2Subnet426701E5", "entityType": "Resource", - "resourceType": "AWS::CodeBuild::Project" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 813, - "startColumn": 4, - "endLine": 813, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1265, + "startColumn": 5, + "endLine": 1265, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BuildLambdaServiceRole8FB6C033' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildLambdaServiceRole8FB6C033", + "logicalId": "ClusterVpcPublicSubnet2Subnet426701E5", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 856, - "startColumn": 4, - "endLine": 856, + "startLine": 1273, + "startColumn": 5, + "endLine": 1273, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BuildLambda72E2A667' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildLambda72E2A667", + "logicalId": "ClusterVpcPublicSubnet2Subnet426701E5", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 919, - "startColumn": 4, - "endLine": 919, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1289, + "startColumn": 5, + "endLine": 1289, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", + "logicalId": "ClusterVpcPublicSubnet2RouteTable12CC8384", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1032, - "startColumn": 4, - "endLine": 1032, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1310, + "startColumn": 5, + "endLine": 1310, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'AWS679f53fac002430cb0da5b7982bd22872D164C4C' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AWS679f53fac002430cb0da5b7982bd22872D164C4C", + "logicalId": "ClusterVpcPublicSubnet2RouteTableAssociation7ADD1D72", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 1066, - "startColumn": 4, - "endLine": 1066, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1325, + "startColumn": 5, + "endLine": 1325, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcPublicSubnet2RouteTable12CC8384'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BlueTargetGroupF108EB01' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BlueTargetGroupF108EB01", + "logicalId": "ClusterVpcPublicSubnet2RouteTableAssociation7ADD1D72", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 1640, - "startColumn": 4, - "endLine": 1640, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1328, + "startColumn": 5, + "endLine": 1328, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcPublicSubnet2Subnet426701E5'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'GreenTargetGroupEEB2DF3E' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GreenTargetGroupEEB2DF3E", + "logicalId": "ClusterVpcPublicSubnet2DefaultRouteAEC6FDD4", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 1661, - "startColumn": 4, - "endLine": 1661, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1343, + "startColumn": 5, + "endLine": 1343, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SecurityGroupDD263621' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroupDD263621", + "logicalId": "ClusterVpcPublicSubnet2DefaultRouteAEC6FDD4", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 1682, - "startColumn": 4, - "endLine": 1682, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1347, + "startColumn": 5, + "endLine": 1347, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcPublicSubnet2RouteTable12CC8384'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'PublicAlb84330974' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublicAlb84330974", + "logicalId": "ClusterVpcPublicSubnet2NATGatewayC9242BCE", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 1710, - "startColumn": 4, - "endLine": 1710, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1382, + "startColumn": 5, + "endLine": 1382, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt ClusterVpcPublicSubnet2EIP299AF9FE.AllocationId" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'PublicAlbAlbListener804C1B2779' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublicAlbAlbListener804C1B2779", + "logicalId": "ClusterVpcPublicSubnet2NATGatewayC9242BCE", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 1748, - "startColumn": 4, - "endLine": 1748, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1388, + "startColumn": 5, + "endLine": 1388, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcPublicSubnet2Subnet426701E5'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'EcsCluster97242B84' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsCluster97242B84", + "logicalId": "ClusterVpcPrivateSubnet1Subnet505E4257", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 1767, - "startColumn": 3, - "endLine": 1767, + "startLine": 1411, + "startColumn": 5, + "endLine": 1411, "endColumn": 22, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateServiceAC2B3B85' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceAC2B3B85", + "logicalId": "ClusterVpcPrivateSubnet1Subnet505E4257", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 1791, - "startColumn": 4, - "endLine": 1791, + "startLine": 1419, + "startColumn": 5, + "endLine": 1419, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateServiceSecurityGroup0A0E79CB' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceSecurityGroup0A0E79CB", + "logicalId": "ClusterVpcPrivateSubnet1Subnet505E4257", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1852, - "startColumn": 4, - "endLine": 1852, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1435, + "startColumn": 5, + "endLine": 1435, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CodeDeployGroupServiceRole50553EBF' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CodeDeployGroupServiceRole50553EBF", + "logicalId": "ClusterVpcPrivateSubnet1RouteTable4D91A516", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1907, - "startColumn": 4, - "endLine": 1907, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1456, + "startColumn": 5, + "endLine": 1456, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CodeDeployGroupApplication13EFBDA6' of type 'AWS::CodeDeploy::Application' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CodeDeployGroupApplication13EFBDA6", + "logicalId": "ClusterVpcPrivateSubnet1RouteTableAssociationB0545C4C", "entityType": "Resource", - "resourceType": "AWS::CodeDeploy::Application" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 1941, - "startColumn": 4, - "endLine": 1941, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1471, + "startColumn": 5, + "endLine": 1471, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcPrivateSubnet1RouteTable4D91A516'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CodeDeployGroup58220FC8' of type 'AWS::CodeDeploy::DeploymentGroup' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CodeDeployGroup58220FC8", + "logicalId": "ClusterVpcPrivateSubnet1RouteTableAssociationB0545C4C", "entityType": "Resource", - "resourceType": "AWS::CodeDeploy::DeploymentGroup" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 1950, - "startColumn": 4, - "endLine": 1950, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1474, + "startColumn": 5, + "endLine": 1474, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcPrivateSubnet1Subnet505E4257'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BuildDeployPipelineArtifactsBucketEncryptionKey8AB5ABF8' of type 'AWS::KMS::Key' supports Tags but none are configured", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildDeployPipelineArtifactsBucketEncryptionKey8AB5ABF8", + "logicalId": "ClusterVpcPrivateSubnet1DefaultRoute6BD16184", "entityType": "Resource", - "resourceType": "AWS::KMS::Key" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 2035, - "startColumn": 4, - "endLine": 2035, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1489, + "startColumn": 5, + "endLine": 1489, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BuildDeployPipelineArtifactsBucket5D4A76C1' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildDeployPipelineArtifactsBucket5D4A76C1", + "logicalId": "ClusterVpcPrivateSubnet1DefaultRoute6BD16184", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 2090, - "startColumn": 4, - "endLine": 2090, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1493, + "startColumn": 5, + "endLine": 1493, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcPrivateSubnet1RouteTable4D91A516'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BuildDeployPipelineRole3223E55F' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildDeployPipelineRole3223E55F", + "logicalId": "ClusterVpcPrivateSubnet2Subnet176BE39E", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 2171, - "startColumn": 4, - "endLine": 2171, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1508, + "startColumn": 5, + "endLine": 1508, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BuildDeployPipeline5EEC284B' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildDeployPipeline5EEC284B", + "logicalId": "ClusterVpcPrivateSubnet2Subnet176BE39E", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 2293, - "startColumn": 4, - "endLine": 2293, + "startLine": 1516, + "startColumn": 5, + "endLine": 1516, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BuildDeployPipelineSourceAppCodeCommitCodePipelineActionRoleB9EB8BA0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildDeployPipelineSourceAppCodeCommitCodePipelineActionRoleB9EB8BA0", + "logicalId": "ClusterVpcPrivateSubnet2Subnet176BE39E", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 2471, - "startColumn": 4, - "endLine": 2471, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1532, + "startColumn": 5, + "endLine": 1532, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BuildDeployPipelineEventsRoleDE5B0F8F' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildDeployPipelineEventsRoleDE5B0F8F", + "logicalId": "ClusterVpcPrivateSubnet2RouteTable918A9411", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 2584, - "startColumn": 4, - "endLine": 2584, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1553, + "startColumn": 5, + "endLine": 1553, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BuildDeployPipelineTestJestCDKCodePipelineActionRoleFA2BA8B1' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildDeployPipelineTestJestCDKCodePipelineActionRoleFA2BA8B1", + "logicalId": "ClusterVpcPrivateSubnet2RouteTableAssociation994802D2", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 2650, - "startColumn": 4, - "endLine": 2650, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1568, + "startColumn": 5, + "endLine": 1568, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcPrivateSubnet2RouteTable918A9411'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BuildDeployPipelineBuildDockerBuildPushCodePipelineActionRole760EF965' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildDeployPipelineBuildDockerBuildPushCodePipelineActionRole760EF965", + "logicalId": "ClusterVpcPrivateSubnet2RouteTableAssociation994802D2", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 2708, - "startColumn": 4, - "endLine": 2708, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1571, + "startColumn": 5, + "endLine": 1571, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcPrivateSubnet2Subnet176BE39E'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BuildDeployPipelineDeployEcsFargateDeployCodePipelineActionRole054540AB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BuildDeployPipelineDeployEcsFargateDeployCodePipelineActionRole054540AB", + "logicalId": "ClusterVpcPrivateSubnet2DefaultRouteCC18893B", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 2766, - "startColumn": 4, - "endLine": 2766, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/cognito-api-lambda--CognitoProtectedApi.template.json": { - "filePath": "cdk/cognito-api-lambda--CognitoProtectedApi.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 14, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 23, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "helloWorldFunction00C940B5", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 53, + "startLine": 1586, "startColumn": 5, - "endLine": 53, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 1586, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'helloWorldFunctionServiceRole8475DBF0' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "helloWorldFunction00C940B5", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 55, - "startColumn": 4, - "endLine": 55, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiDeploymentCB1FF57464f3e9f368e40968a1aeabdb5bcc9580", + "logicalId": "ClusterVpcPrivateSubnet2DefaultRouteCC18893B", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 133, + "startLine": 1590, "startColumn": 5, - "endLine": 133, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 1590, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'helloWorldLambdaRestApi6825FB98'" + "resolutionSource": "Ref to 'ClusterVpcPrivateSubnet2RouteTable918A9411'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiDeploymentStageprod67DD79AF", + "logicalId": "ClusterVpcVPCGW361426E5", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 152, + "startLine": 1626, "startColumn": 5, - "endLine": 152, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 1626, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'helloWorldLambdaRestApi6825FB98'" + "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiDeploymentStageprod67DD79AF", + "logicalId": "BlueTargetGroupF108EB01", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 155, + "startLine": 1641, "startColumn": 5, - "endLine": 155, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 1641, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -18557,44 +18881,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiHELLOAD091B67", + "logicalId": "BlueTargetGroupF108EB01", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 167, + "startLine": 1642, "startColumn": 5, - "endLine": 167, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 1642, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt helloWorldLambdaRestApi6825FB98.RootResourceId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiHELLOAD091B67", + "logicalId": "BlueTargetGroupF108EB01", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 173, + "startLine": 1643, "startColumn": 5, - "endLine": 173, + "endLine": 1643, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -18604,88 +18925,86 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiHELLOAD091B67", + "logicalId": "BlueTargetGroupF108EB01", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.TargetType", "category": "Best Practice", - "startLine": 174, + "startLine": 1650, "startColumn": 5, - "endLine": 174, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 1650, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'helloWorldLambdaRestApi6825FB98'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLO61B4977B", + "logicalId": "BlueTargetGroupF108EB01", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 185, + "startLine": 1651, "startColumn": 5, - "endLine": 185, - "endColumn": 12, + "endLine": 1651, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLO61B4977B", + "logicalId": "GreenTargetGroupEEB2DF3E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 186, + "startLine": 1662, "startColumn": 5, - "endLine": 186, - "endColumn": 18, + "endLine": 1662, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt helloWorldFunction00C940B5.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLO61B4977B", + "logicalId": "GreenTargetGroupEEB2DF3E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 192, + "startLine": 1663, "startColumn": 5, - "endLine": 192, - "endColumn": 15, + "endLine": 1663, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -18695,42 +19014,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLO61B4977B", + "logicalId": "GreenTargetGroupEEB2DF3E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 193, + "startLine": 1664, "startColumn": 5, - "endLine": 193, - "endColumn": 15, + "endLine": 1664, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:helloWorldLambdaRestApi6825FB98}/{ref:helloWorldLambdaRestApiDeploymentStageprod67DD79AF}/GET/HELLO)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionTestCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLOD4AD0AEF", + "logicalId": "GreenTargetGroupEEB2DF3E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.TargetType", "category": "Best Practice", - "startLine": 229, + "startLine": 1671, "startColumn": 5, - "endLine": 229, - "endColumn": 12, + "endLine": 1671, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -18740,42 +19058,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionTestCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLOD4AD0AEF", + "logicalId": "GreenTargetGroupEEB2DF3E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 230, + "startLine": 1672, "startColumn": 5, - "endLine": 230, - "endColumn": 18, + "endLine": 1672, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt helloWorldFunction00C940B5.Arn" + "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionTestCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLOD4AD0AEF", + "logicalId": "SecurityGroupDD263621", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 236, + "startLine": 1683, "startColumn": 5, - "endLine": 236, - "endColumn": 15, + "endLine": 1683, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -18785,43 +19103,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionTestCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLOD4AD0AEF", + "logicalId": "SecurityGroupDD263621", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 237, + "startLine": 1700, "startColumn": 5, - "endLine": 237, - "endColumn": 15, + "endLine": 1700, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:helloWorldLambdaRestApi6825FB98}/test-invoke-stage/GET/HELLO)" + "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiHELLOGET6E88F46C", + "logicalId": "PublicAlb84330974", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.Scheme", "category": "Best Practice", - "startLine": 273, + "startLine": 1717, "startColumn": 5, - "endLine": 273, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 1717, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -18831,375 +19149,435 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiHELLOGET6E88F46C", + "logicalId": "PublicAlb84330974", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 301, + "startLine": 1734, "startColumn": 5, - "endLine": 301, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 1734, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PublicAlbAlbListener804C1B2779", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + }, + "propertyPath": "Properties.LoadBalancerArn", + "category": "Best Practice", + "startLine": 1757, + "startColumn": 5, + "endLine": 1757, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'helloWorldLambdaRestApiHELLOAD091B67'" + "resolutionSource": "Ref to 'PublicAlb84330974'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiHELLOGET6E88F46C", + "logicalId": "EcsCluster72B17558", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ECS::ClusterCapacityProviderAssociations" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 304, + "startLine": 1780, "startColumn": 5, - "endLine": 304, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 1780, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'helloWorldLambdaRestApi6825FB98'" + "resolutionSource": "Ref to 'EcsCluster97242B84'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "cfnAuth", + "logicalId": "FargateServiceAC2B3B85", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Authorizer" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 365, + "startLine": 1792, "startColumn": 5, - "endLine": 365, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 1792, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'helloWorldLambdaRestApi6825FB98'" + "resolutionSource": "Ref to 'EcsCluster97242B84'" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'helloWorldFunctionServiceRole8475DBF0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldFunctionServiceRole8475DBF0", + "logicalId": "FargateServiceAC2B3B85", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1805, + "startColumn": 5, + "endLine": 1805, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'helloWorldFunction00C940B5' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'ServiceName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldFunction00C940B5", + "logicalId": "FargateServiceAC2B3B85", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ServiceName", "category": "Best Practice", - "startLine": 39, - "startColumn": 4, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1836, + "startColumn": 5, + "endLine": 1836, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'helloWorldLambdaRestApi6825FB98' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApi6825FB98", + "logicalId": "FargateServiceSecurityGroup0A0E79CB", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 67, - "startColumn": 4, - "endLine": 67, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1853, + "startColumn": 5, + "endLine": 1853, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'helloWorldLambdaRestApiCloudWatchRole22367FBD' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiCloudWatchRole22367FBD", + "logicalId": "FargateServiceSecurityGroup0A0E79CB", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 76, - "startColumn": 4, - "endLine": 76, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1861, + "startColumn": 5, + "endLine": 1861, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ClusterVpcA8CFF6E7'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'helloWorldLambdaRestApiDeploymentStageprod67DD79AF' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helloWorldLambdaRestApiDeploymentStageprod67DD79AF", + "logicalId": "FargateServiceSecurityGroupfromCodepipelineBuildDeployStackSecurityGroup07B96CA880690A9743", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 148, - "startColumn": 4, - "endLine": 148, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/custom-logical-names--MyStack.template.json": { - "filePath": "cdk/custom-logical-names--MyStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 + "startLine": 1879, + "startColumn": 5, + "endLine": 1879, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyTopic86869434' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyTopic86869434", + "logicalId": "FargateServiceSecurityGroupfromCodepipelineBuildDeployStackSecurityGroup07B96CA880690A9743", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 19, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1880, + "startColumn": 5, + "endLine": 1880, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FargateServiceSecurityGroup0A0E79CB.GroupId" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyBucketF68F3FF0' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyBucketF68F3FF0", + "logicalId": "FargateServiceSecurityGroupfromCodepipelineBuildDeployStackSecurityGroup07B96CA880690A9743", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 9, - "startColumn": 3, - "endLine": 9, - "endColumn": 20, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/custom-resource--CustomResourceDemoStack.template.json": { - "filePath": "cdk/custom-resource--CustomResourceDemoStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 3, - "informational": 5, - "debug": 0 + "startLine": 1886, + "startColumn": 5, + "endLine": 1886, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C", + "logicalId": "FargateServiceSecurityGroupfromCodepipelineBuildDeployStackSecurityGroup07B96CA880690A9743", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 201, + "propertyPath": "Properties.SourceSecurityGroupId", + "category": "Best Practice", + "startLine": 1887, "startColumn": 5, - "endLine": 201, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 1887, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.9", - "lifecycle": "deprecated" + "lifecycle": "create-only", + "resolutionSource": "GetAtt SecurityGroupDD263621.GroupId" } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'DemoResourceProviderframeworkonEventServiceRoleDB88154F' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DemoResourceProviderframeworkonEventF8E49AD2", + "logicalId": "FargateServiceSecurityGroupfromCodepipelineBuildDeployStackSecurityGroup07B96CA880690A9743", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 126, - "startColumn": 4, - "endLine": 126, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1893, + "startColumn": 5, + "endLine": 1893, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebcServiceRoleFE9ABB04' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ComputePlatform' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C", + "logicalId": "CodeDeployGroupApplication13EFBDA6", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::CodeDeploy::Application" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.ComputePlatform", "category": "Best Practice", - "startLine": 204, - "startColumn": 4, - "endLine": 204, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1942, + "startColumn": 5, + "endLine": 1942, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", + "message": "Property 'ApplicationName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DemoResource5B5C546C", + "logicalId": "CodeDeployGroup58220FC8", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::CustomResource" + "resourceType": "AWS::CodeDeploy::DeploymentGroup" }, - "propertyPath": "Properties.ServiceToken", + "propertyPath": "Properties.ApplicationName", "category": "Best Practice", - "startLine": 140, + "startLine": 1954, "startColumn": 5, - "endLine": 140, - "endColumn": 18, + "endLine": 1954, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt DemoResourceProviderframeworkonEventF8E49AD2.Arn" + "resolutionSource": "Ref to 'CodeDeployGroupApplication13EFBDA6'" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DemoResourceProviderframeworkonEventServiceRoleDB88154F' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'AliasName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DemoResourceProviderframeworkonEventServiceRoleDB88154F", + "logicalId": "BuildDeployPipelineArtifactsBucketEncryptionKeyAliasC52C67EF", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::KMS::Alias" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AliasName", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, + "startLine": 2074, + "startColumn": 5, + "endLine": 2074, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "BuildDeployPipelineArtifactsBucketPolicyC49383E9", + "entityType": "Resource", + "resourceType": "AWS::S3::BucketPolicy" + }, + "propertyPath": "Properties.Bucket", + "category": "Best Practice", + "startLine": 2122, + "startColumn": 5, + "endLine": 2122, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'BuildDeployPipelineArtifactsBucket5D4A76C1'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "BuildDeployPipeline5EEC284B", + "entityType": "Resource", + "resourceType": "AWS::CodePipeline::Pipeline" + }, + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 2309, + "startColumn": 5, + "endLine": 2309, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DemoResourceProviderframeworkonEventF8E49AD2' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'repoBEC318EA' of type 'AWS::CodeCommit::Repository' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DemoResourceProviderframeworkonEventF8E49AD2", + "logicalId": "repoBEC318EA", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::CodeCommit::Repository" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 94, + "startLine": 5, "startColumn": 4, - "endLine": 94, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19207,19 +19585,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebcServiceRoleFE9ABB04' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'repoCodepipelineBuildDeployStackBuildDeployPipeline2B279CCCmainEventRule3F24D1E0' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebcServiceRoleFE9ABB04", + "logicalId": "repoCodepipelineBuildDeployStackBuildDeployPipeline2B279CCCmainEventRule3F24D1E0", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Events::Rule" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 156, + "startLine": 23, "startColumn": 4, - "endLine": 156, + "endLine": 23, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19227,164 +19605,139 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'imageRepo1D8A68AF' of type 'AWS::ECR::Repository' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C", + "logicalId": "imageRepo1D8A68AF", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECR::Repository" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 190, - "startColumn": 4, - "endLine": 190, - "endColumn": 15, + "startLine": 89, + "startColumn": 3, + "endLine": 89, + "endColumn": 21, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "cdk/custom-resource-provider--CustomResourceDemoStack.template.json": { - "filePath": "cdk/custom-resource-provider--CustomResourceDemoStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 11, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 3, - "informational": 7, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FargateTaskDefTaskRole0B257552' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C", + "logicalId": "FargateTaskDefTaskRole0B257552", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 227, - "startColumn": 5, - "endLine": 227, - "endColumn": 13, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.6", - "lifecycle": "end-of-life" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 99, + "startColumn": 4, + "endLine": 99, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'DemoResourceMyProviderframeworkonEventServiceRole1437DF1C' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FargateTaskDefC6FB60B4' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DemoResourceMyProviderframeworkonEvent65F24A35", + "logicalId": "FargateTaskDefC6FB60B4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 126, + "startLine": 119, "startColumn": 4, - "endLine": 126, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 119, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebcServiceRoleFE9ABB04' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FargateTaskDefExecutionRole272677A9' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C", + "logicalId": "FargateTaskDefExecutionRole272677A9", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 230, + "startLine": 207, "startColumn": 4, - "endLine": 230, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 207, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BuildImageRoleA9C72406' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "logicalId": "BuildImageRoleA9C72406", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 317, + "startLine": 265, "startColumn": 4, - "endLine": 317, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 265, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", + "message": "Resource 'BuildImage74257FD8' of type 'AWS::CodeBuild::Project' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DemoResourceResource1DB79ECAB", + "logicalId": "BuildImage74257FD8", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::CustomResource" + "resourceType": "AWS::CodeBuild::Project" }, - "propertyPath": "Properties.ServiceToken", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 166, - "startColumn": 5, - "endLine": 166, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt DemoResourceMyProviderframeworkonEvent65F24A35.Arn" - } + "startLine": 481, + "startColumn": 4, + "endLine": 481, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DemoResourceMyProviderframeworkonEventServiceRole1437DF1C' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'BuildTestRoleC332A422' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DemoResourceMyProviderframeworkonEventServiceRole1437DF1C", + "logicalId": "BuildTestRoleC332A422", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 627, "startColumn": 4, - "endLine": 5, + "endLine": 627, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19392,19 +19745,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DemoResourceMyProviderframeworkonEvent65F24A35' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'BuildTestC9659529' of type 'AWS::CodeBuild::Project' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DemoResourceMyProviderframeworkonEvent65F24A35", + "logicalId": "BuildTestC9659529", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::CodeBuild::Project" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 94, + "startLine": 813, "startColumn": 4, - "endLine": 94, + "endLine": 813, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19412,19 +19765,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebcServiceRoleFE9ABB04' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'BuildLambdaServiceRole8FB6C033' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebcServiceRoleFE9ABB04", + "logicalId": "BuildLambdaServiceRole8FB6C033", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 182, + "startLine": 856, "startColumn": 4, - "endLine": 182, + "endLine": 856, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19432,19 +19785,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'BuildLambda72E2A667' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C", + "logicalId": "BuildLambda72E2A667", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 216, + "startLine": 919, "startColumn": 4, - "endLine": 216, + "endLine": 919, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19452,19 +19805,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + "logicalId": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 239, + "startLine": 1032, "startColumn": 4, - "endLine": 239, + "endLine": 1032, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19472,343 +19825,239 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'AWS679f53fac002430cb0da5b7982bd22872D164C4C' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "logicalId": "AWS679f53fac002430cb0da5b7982bd22872D164C4C", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 300, + "startLine": 1066, "startColumn": 4, - "endLine": 300, + "endLine": 1066, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "cdk/ddb-stream-lambda-sns--DdbStreamStack.template.json": { - "filePath": "cdk/ddb-stream-lambda-sns--DdbStreamStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 16, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 4, - "informational": 20, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "itemL2TableLambdaFunction1987B4C5", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 228, - "startColumn": 5, - "endLine": 228, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs20.x", - "lifecycle": "deprecated" - } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BlueTargetGroupF108EB01' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "itemL3TableLambdaFunction7B818C58", + "logicalId": "BlueTargetGroupF108EB01", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 433, - "startColumn": 5, - "endLine": 433, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs20.x", - "lifecycle": "deprecated" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1640, + "startColumn": 4, + "endLine": 1640, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'itemL2TableLambdaFunctionServiceRole41583A05' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'GreenTargetGroupEEB2DF3E' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "itemL2TableLambdaFunction1987B4C5", + "logicalId": "GreenTargetGroupEEB2DF3E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 233, + "startLine": 1661, "startColumn": 4, - "endLine": 233, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 1661, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'itemL3TableLambdaFunctionServiceRoleBA21B37D' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SecurityGroupDD263621' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "itemL3TableLambdaFunction7B818C58", + "logicalId": "SecurityGroupDD263621", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 438, + "startLine": 1682, "startColumn": 4, - "endLine": 438, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 1682, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "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", + "message": "Resource 'PublicAlb84330974' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "itemL3TableSqsDlqQueueD3C251B9", + "logicalId": "PublicAlb84330974", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 536, + "startLine": 1710, "startColumn": 4, - "endLine": 536, + "endLine": 1710, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", + "message": "Resource 'PublicAlbAlbListener804C1B2779' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ddbstreamtopic7821AF6E", + "logicalId": "PublicAlbAlbListener804C1B2779", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "Properties.TopicName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 27, - "startColumn": 5, - "endLine": 27, + "startLine": 1748, + "startColumn": 4, + "endLine": 1748, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "message": "Resource 'EcsCluster97242B84' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ddbstreaml2dlq5966ED66", + "logicalId": "EcsCluster97242B84", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ECS::Cluster" }, - "propertyPath": "Properties.QueueName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 70, - "startColumn": 5, - "endLine": 70, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 1767, + "startColumn": 3, + "endLine": 1767, + "endColumn": 22, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'FargateServiceAC2B3B85' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemL2TableBAC64D83", + "logicalId": "FargateServiceAC2B3B85", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 88, - "startColumn": 5, - "endLine": 88, + "startLine": 1791, + "startColumn": 4, + "endLine": 1791, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'FargateServiceSecurityGroup0A0E79CB' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemL2TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL2Table0234427734A22B95", + "logicalId": "FargateServiceSecurityGroup0A0E79CB", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.EventSourceArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 259, - "startColumn": 5, - "endLine": 259, - "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt itemL2TableBAC64D83.StreamArn" - } + "startLine": 1852, + "startColumn": 4, + "endLine": 1852, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'StartingPosition' is create-only; updating it will cause resource replacement", + "message": "Resource 'CodeDeployGroupServiceRole50553EBF' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemL2TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL2Table0234427734A22B95", + "logicalId": "CodeDeployGroupServiceRole50553EBF", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.StartingPosition", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 270, - "startColumn": 5, - "endLine": 270, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 1907, + "startColumn": 4, + "endLine": 1907, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'CodeDeployGroupApplication13EFBDA6' of type 'AWS::CodeDeploy::Application' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemL3TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL3TableDynamoTableF17D6710E0C1078B", + "logicalId": "CodeDeployGroupApplication13EFBDA6", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::CodeDeploy::Application" }, - "propertyPath": "Properties.EventSourceArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 480, - "startColumn": 5, - "endLine": 480, - "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt itemL3TableDynamoTable6BC36F24.StreamArn" - } + "startLine": 1941, + "startColumn": 4, + "endLine": 1941, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'StartingPosition' is create-only; updating it will cause resource replacement", + "message": "Resource 'CodeDeployGroup58220FC8' of type 'AWS::CodeDeploy::DeploymentGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemL3TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL3TableDynamoTableF17D6710E0C1078B", + "logicalId": "CodeDeployGroup58220FC8", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" - }, - "propertyPath": "Properties.StartingPosition", - "category": "Best Practice", - "startLine": 491, - "startColumn": 5, - "endLine": 491, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "itemL3TableDynamoTable6BC36F24", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.KeySchema", - "category": "Best Practice", - "startLine": 507, - "startColumn": 5, - "endLine": 507, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ddbstreamtopic7821AF6E' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ddbstreamtopic7821AF6E", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::CodeDeploy::DeploymentGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 1950, "startColumn": 4, - "endLine": 5, + "endLine": 1950, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19816,19 +20065,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ddbstreaml2dlq5966ED66' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Resource 'BuildDeployPipelineArtifactsBucketEncryptionKey8AB5ABF8' of type 'AWS::KMS::Key' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ddbstreaml2dlq5966ED66", + "logicalId": "BuildDeployPipelineArtifactsBucketEncryptionKey8AB5ABF8", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::KMS::Key" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 67, + "startLine": 2035, "startColumn": 4, - "endLine": 67, + "endLine": 2035, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19836,19 +20085,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'itemL2TableBAC64D83' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'BuildDeployPipelineArtifactsBucket5D4A76C1' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemL2TableBAC64D83", + "logicalId": "BuildDeployPipelineArtifactsBucket5D4A76C1", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 80, + "startLine": 2090, "startColumn": 4, - "endLine": 80, + "endLine": 2090, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19856,39 +20105,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'itemL2TableLambdaFunctionServiceRole41583A05' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'BuildDeployPipelineRole3223E55F' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemL2TableLambdaFunctionServiceRole41583A05", + "logicalId": "BuildDeployPipelineRole3223E55F", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 109, - "startColumn": 4, - "endLine": 109, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'itemL2TableLambdaFunction1987B4C5' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "itemL2TableLambdaFunction1987B4C5", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 206, + "startLine": 2171, "startColumn": 4, - "endLine": 206, + "endLine": 2171, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19896,19 +20125,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'itemL2TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL2Table0234427734A22B95' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", + "message": "Resource 'BuildDeployPipeline5EEC284B' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemL2TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL2Table0234427734A22B95", + "logicalId": "BuildDeployPipeline5EEC284B", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::CodePipeline::Pipeline" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 246, + "startLine": 2293, "startColumn": 4, - "endLine": 246, + "endLine": 2293, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19916,19 +20145,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'itemL3TableLambdaFunctionServiceRoleBA21B37D' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'BuildDeployPipelineSourceAppCodeCommitCodePipelineActionRoleB9EB8BA0' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemL3TableLambdaFunctionServiceRoleBA21B37D", + "logicalId": "BuildDeployPipelineSourceAppCodeCommitCodePipelineActionRoleB9EB8BA0", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 278, + "startLine": 2471, "startColumn": 4, - "endLine": 278, + "endLine": 2471, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19936,19 +20165,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'itemL3TableLambdaFunction7B818C58' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'BuildDeployPipelineEventsRoleDE5B0F8F' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemL3TableLambdaFunction7B818C58", + "logicalId": "BuildDeployPipelineEventsRoleDE5B0F8F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 412, + "startLine": 2584, "startColumn": 4, - "endLine": 412, + "endLine": 2584, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19956,19 +20185,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'itemL3TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL3TableDynamoTableF17D6710E0C1078B' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", + "message": "Resource 'BuildDeployPipelineTestJestCDKCodePipelineActionRoleFA2BA8B1' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemL3TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL3TableDynamoTableF17D6710E0C1078B", + "logicalId": "BuildDeployPipelineTestJestCDKCodePipelineActionRoleFA2BA8B1", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 467, + "startLine": 2650, "startColumn": 4, - "endLine": 467, + "endLine": 2650, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19976,19 +20205,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'itemL3TableDynamoTable6BC36F24' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'BuildDeployPipelineBuildDockerBuildPushCodePipelineActionRole760EF965' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemL3TableDynamoTable6BC36F24", + "logicalId": "BuildDeployPipelineBuildDockerBuildPushCodePipelineActionRole760EF965", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 499, + "startLine": 2708, "startColumn": 4, - "endLine": 499, + "endLine": 2708, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19996,35 +20225,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'itemL3TableSqsDlqQueueD3C251B9' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Resource 'BuildDeployPipelineDeployEcsFargateDeployCodePipelineActionRole054540AB' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "itemL3TableSqsDlqQueueD3C251B9", + "logicalId": "BuildDeployPipelineDeployEcsFargateDeployCodePipelineActionRole054540AB", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 536, + "startLine": 2766, "startColumn": 4, - "endLine": 536, + "endLine": 2766, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/ec2-instance--EC2Example.template.json": { - "filePath": "cdk/ec2-instance--EC2Example.template.json", + "cdk/cognito-api-lambda--CognitoProtectedApi.template.json": { + "filePath": "cdk/cognito-api-lambda--CognitoProtectedApi.template.json", "status": "OK", "metadata": { - "resourcesScanned": 28, + "resourcesScanned": 14, "counts": { "fatal": 0, "errors": 0, - "warnings": 5, - "informational": 40, + "warnings": 2, + "informational": 23, "debug": 0 }, "suppressed": 0, @@ -20033,101 +20262,44 @@ }, "diagnostics": [ { - "ruleId": "W2508", - "severity": "WARN", - "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", - "source": "ENGINE", - "entity": { - "logicalId": "VPCSSHSecurityGroup0495A24F", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress", - "suggestedFix": "Restrict the CIDR range to specific IP addresses", - "category": "Security", - "startLine": 229, - "startColumn": 5, - "endLine": 229, - "endColumn": 26, - "ruleDescription": "Security group allows open access to sensitive port", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'EC2serverEc2Role6775A3D4' dependency already enforced by a 'Ref' at 'Properties.UserData.Fn::Base64.Fn::Join.1.11'", - "source": "CFN_LINT", - "entity": { - "logicalId": "EC2Instance1F00751C57ee729c1274d778", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 658, - "startColumn": 4, - "endLine": 658, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'EC2serverEc2Role6775A3D4' dependency already enforced by a 'Ref' at 'Properties.UserData.Fn::Base64.Fn::Join.1.21'", - "source": "CFN_LINT", - "entity": { - "logicalId": "EC2Instance1F00751C57ee729c1274d778", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 658, - "startColumn": 4, - "endLine": 658, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", + "ruleId": "W2531", "severity": "WARN", - "message": "'CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "logicalId": "helloWorldFunction00C940B5", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 777, - "startColumn": 4, - "endLine": 777, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 53, + "startColumn": 5, + "endLine": 53, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" + } }, { "ruleId": "W3005", "severity": "WARN", - "message": "'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiBServiceRoleBA21DBC1' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'helloWorldFunctionServiceRole8475DBF0' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiB6723FB92", + "logicalId": "helloWorldFunction00C940B5", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 939, + "startLine": 55, "startColumn": 4, - "endLine": 939, + "endLine": 55, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -20135,63 +20307,68 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPC61AD6880", + "logicalId": "helloWorldLambdaRestApiDeploymentCB1FF57464f3e9f368e40968a1aeabdb5bcc9580", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 7, + "startLine": 133, "startColumn": 5, - "endLine": 7, + "endLine": 133, "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'helloWorldLambdaRestApi6825FB98'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPC61AD6880", + "logicalId": "helloWorldLambdaRestApiDeploymentStageprod67DD79AF", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 10, + "startLine": 152, "startColumn": 5, - "endLine": 10, - "endColumn": 21, + "endLine": 152, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'helloWorldLambdaRestApi6825FB98'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet1SubnetF3987995", + "logicalId": "helloWorldLambdaRestApiDeploymentStageprod67DD79AF", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 25, + "startLine": 155, "startColumn": 5, - "endLine": 25, - "endColumn": 22, + "endLine": 155, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -20201,143 +20378,135 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet1SubnetF3987995", + "logicalId": "helloWorldLambdaRestApiHELLOAD091B67", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 33, + "startLine": 167, "startColumn": 5, - "endLine": 33, - "endColumn": 15, + "endLine": 167, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt helloWorldLambdaRestApi6825FB98.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet1SubnetF3987995", + "logicalId": "helloWorldLambdaRestApiHELLOAD091B67", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 49, + "startLine": 173, "startColumn": 5, - "endLine": 49, - "endColumn": 11, + "endLine": 173, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC61AD6880'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet1RouteTable140320E2", + "logicalId": "helloWorldLambdaRestApiHELLOAD091B67", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 66, + "startLine": 174, "startColumn": 5, - "endLine": 66, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 174, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC61AD6880'" + "resolutionSource": "Ref to 'helloWorldLambdaRestApi6825FB98'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet1RouteTableAssociationBCA9EE21", + "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLO61B4977B", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 77, + "startLine": 185, "startColumn": 5, - "endLine": 77, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 185, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCServerPublicSubnet1RouteTable140320E2'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet1RouteTableAssociationBCA9EE21", + "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLO61B4977B", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 80, + "startLine": 186, "startColumn": 5, - "endLine": 80, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 186, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCServerPublicSubnet1SubnetF3987995'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt helloWorldFunction00C940B5.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet1DefaultRoute0DEC8857", + "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLO61B4977B", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 91, + "startLine": 192, "startColumn": 5, - "endLine": 91, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 192, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -20347,43 +20516,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet1DefaultRoute0DEC8857", + "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLO61B4977B", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 95, + "startLine": 193, "startColumn": 5, - "endLine": 95, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 193, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCServerPublicSubnet1RouteTable140320E2'" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:helloWorldLambdaRestApi6825FB98}/{ref:helloWorldLambdaRestApiDeploymentStageprod67DD79AF}/GET/HELLO)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet2SubnetDB508B90", + "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionTestCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLOD4AD0AEF", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 109, + "startLine": 229, "startColumn": 5, - "endLine": 109, - "endColumn": 22, + "endLine": 229, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -20393,143 +20561,88 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet2SubnetDB508B90", + "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionTestCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLOD4AD0AEF", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 117, + "startLine": 230, "startColumn": 5, - "endLine": 117, - "endColumn": 15, + "endLine": 230, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt helloWorldFunction00C940B5.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet2SubnetDB508B90", + "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionTestCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLOD4AD0AEF", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 133, + "startLine": 236, "startColumn": 5, - "endLine": 133, - "endColumn": 11, + "endLine": 236, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC61AD6880'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet2RouteTableD6971BF3", + "logicalId": "helloWorldLambdaRestApiHELLOGETApiPermissionTestCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLOD4AD0AEF", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 150, + "startLine": 237, "startColumn": 5, - "endLine": 150, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 237, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC61AD6880'" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:helloWorldLambdaRestApi6825FB98}/test-invoke-stage/GET/HELLO)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet2RouteTableAssociationE261CDCA", + "logicalId": "helloWorldLambdaRestApiHELLOGET6E88F46C", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 161, + "startLine": 273, "startColumn": 5, - "endLine": 161, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCServerPublicSubnet2RouteTableD6971BF3'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VPCServerPublicSubnet2RouteTableAssociationE261CDCA", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 164, - "startColumn": 5, - "endLine": 164, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCServerPublicSubnet2SubnetDB508B90'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VPCServerPublicSubnet2DefaultRoute6A434666", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.DestinationCidrBlock", - "category": "Best Practice", - "startLine": 175, - "startColumn": 5, - "endLine": 175, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 273, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -20539,378 +20652,375 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCServerPublicSubnet2DefaultRoute6A434666", + "logicalId": "helloWorldLambdaRestApiHELLOGET6E88F46C", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 179, + "startLine": 301, "startColumn": 5, - "endLine": 179, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 301, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCServerPublicSubnet2RouteTableD6971BF3'" + "resolutionSource": "Ref to 'helloWorldLambdaRestApiHELLOAD091B67'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCVPCGW3AFA48F6", + "logicalId": "helloWorldLambdaRestApiHELLOGET6E88F46C", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 210, + "startLine": 304, "startColumn": 5, - "endLine": 210, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "endLine": 304, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC61AD6880'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "Ref to 'helloWorldLambdaRestApi6825FB98'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCSSHSecurityGroup0495A24F", + "logicalId": "cfnAuth", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::Authorizer" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 221, + "startLine": 365, "startColumn": 5, - "endLine": 221, - "endColumn": 22, + "endLine": 365, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'helloWorldLambdaRestApi6825FB98'" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'helloWorldFunctionServiceRole8475DBF0' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCSSHSecurityGroup0495A24F", + "logicalId": "helloWorldFunctionServiceRole8475DBF0", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 238, - "startColumn": 5, - "endLine": 238, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC61AD6880'" - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Resource 'helloWorldFunction00C940B5' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EC2assetBucketPolicy31C0B372", + "logicalId": "helloWorldFunction00C940B5", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 276, - "startColumn": 5, - "endLine": 276, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'EC2assetBucketC584B4AB'" - } + "startLine": 39, + "startColumn": 4, + "endLine": 39, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Content' is create-only; updating it will cause resource replacement", + "message": "Resource 'helloWorldLambdaRestApi6825FB98' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EC2assetBucketDeploymentAwsCliLayerFF55632D", + "logicalId": "helloWorldLambdaRestApi6825FB98", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::ApiGateway::RestApi" }, - "propertyPath": "Properties.Content", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 353, - "startColumn": 5, - "endLine": 353, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 67, + "startColumn": 4, + "endLine": 67, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "message": "Resource 'helloWorldLambdaRestApiCloudWatchRole22367FBD' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EC2assetBucketDeploymentAwsCliLayerFF55632D", + "logicalId": "helloWorldLambdaRestApiCloudWatchRole22367FBD", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Description", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 359, - "startColumn": 5, - "endLine": 359, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 76, + "startColumn": 4, + "endLine": 76, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Resource 'helloWorldLambdaRestApiDeploymentStageprod67DD79AF' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EC2ec2InstanceSecurityGroupD268D496", + "logicalId": "helloWorldLambdaRestApiDeploymentStageprod67DD79AF", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 533, - "startColumn": 5, - "endLine": 533, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 148, + "startColumn": 4, + "endLine": 148, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/custom-logical-names--MyStack.template.json": { + "filePath": "cdk/custom-logical-names--MyStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyTopic86869434' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EC2ec2InstanceSecurityGroupD268D496", + "logicalId": "MyTopic86869434", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 541, - "startColumn": 5, - "endLine": 541, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC61AD6880'" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 19, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyBucketF68F3FF0' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EC2Instance1F00751C57ee729c1274d778", + "logicalId": "MyBucketF68F3FF0", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 565, - "startColumn": 5, - "endLine": 565, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 20, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/custom-resource--CustomResourceDemoStack.template.json": { + "filePath": "cdk/custom-resource--CustomResourceDemoStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 7, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 3, + "informational": 5, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "EC2Instance1F00751C57ee729c1274d778", + "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 576, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 201, "startColumn": 5, - "endLine": 576, + "endLine": 201, "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "python3.9", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'DemoResourceProviderframeworkonEventServiceRoleDB88154F' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "EC2Instance1F00751C57ee729c1274d778", + "logicalId": "DemoResourceProviderframeworkonEventF8E49AD2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 579, - "startColumn": 5, - "endLine": 579, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 126, + "startColumn": 4, + "endLine": 126, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebcServiceRoleFE9ABB04' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "EC2Instance1F00751C57ee729c1274d778", + "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SecurityGroupIds", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 580, - "startColumn": 5, - "endLine": 580, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 204, + "startColumn": 4, + "endLine": 204, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EC2Instance1F00751C57ee729c1274d778", + "logicalId": "DemoResource5B5C546C", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::CloudFormation::CustomResource" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.ServiceToken", "category": "Best Practice", - "startLine": 594, + "startLine": 140, "startColumn": 5, - "endLine": 594, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 140, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCServerPublicSubnet1SubnetF3987995'" + "resolutionSource": "GetAtt DemoResourceProviderframeworkonEventF8E49AD2.Arn" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'DemoResourceProviderframeworkonEventServiceRoleDB88154F' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EC2Instance1F00751C57ee729c1274d778", + "logicalId": "DemoResourceProviderframeworkonEventServiceRoleDB88154F", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.UserData", - "category": "Best Practice", - "startLine": 603, - "startColumn": 5, - "endLine": 603, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Base64 with unresolvable argument)" - } - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'VPCSSHSecurityGroup0495A24F' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'DemoResourceProviderframeworkonEventF8E49AD2' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCSSHSecurityGroup0495A24F", + "logicalId": "DemoResourceProviderframeworkonEventF8E49AD2", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 220, + "startLine": 94, "startColumn": 4, - "endLine": 220, + "endLine": 94, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20918,19 +21028,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EC2serverEc2Role6775A3D4' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebcServiceRoleFE9ABB04' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EC2serverEc2Role6775A3D4", + "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebcServiceRoleFE9ABB04", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 405, + "startLine": 156, "startColumn": 4, - "endLine": 405, + "endLine": 156, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20938,39 +21048,164 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EC2ec2InstanceSecurityGroupD268D496' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EC2ec2InstanceSecurityGroupD268D496", + "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 532, + "startLine": 190, "startColumn": 4, - "endLine": 532, + "endLine": 190, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - }, - { - "ruleId": "I9040", + } + ] + }, + "cdk/custom-resource-provider--CustomResourceDemoStack.template.json": { + "filePath": "cdk/custom-resource-provider--CustomResourceDemoStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 11, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 3, + "informational": 7, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 227, + "startColumn": 5, + "endLine": 227, + "endColumn": 13, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.6", + "lifecycle": "end-of-life" + } + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'DemoResourceMyProviderframeworkonEventServiceRole1437DF1C' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "DemoResourceMyProviderframeworkonEvent65F24A35", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 126, + "startColumn": 4, + "endLine": 126, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebcServiceRoleFE9ABB04' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 230, + "startColumn": 4, + "endLine": 230, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 317, + "startColumn": 4, + "endLine": 317, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "logicalId": "DemoResourceResource1DB79ECAB", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::CustomResource" + }, + "propertyPath": "Properties.ServiceToken", + "category": "Best Practice", + "startLine": 166, + "startColumn": 5, + "endLine": 166, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt DemoResourceMyProviderframeworkonEvent65F24A35.Arn" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DemoResourceMyProviderframeworkonEventServiceRole1437DF1C' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "DemoResourceMyProviderframeworkonEventServiceRole1437DF1C", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 722, + "startLine": 5, "startColumn": 4, - "endLine": 722, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20978,19 +21213,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'DemoResourceMyProviderframeworkonEvent65F24A35' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "logicalId": "DemoResourceMyProviderframeworkonEvent65F24A35", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 747, + "startLine": 94, "startColumn": 4, - "endLine": 747, + "endLine": 94, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20998,19 +21233,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiBServiceRoleBA21DBC1' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebcServiceRoleFE9ABB04' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiBServiceRoleBA21DBC1", + "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebcServiceRoleFE9ABB04", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 788, + "startLine": 182, "startColumn": 4, - "endLine": 788, + "endLine": 182, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21018,35 +21253,75 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiB6723FB92' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiB6723FB92", + "logicalId": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 911, + "startLine": 216, "startColumn": 4, - "endLine": 911, + "endLine": 216, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 239, + "startColumn": 4, + "endLine": 239, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 300, + "startColumn": 4, + "endLine": 300, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/ec2-instance-connect-endpoint--integ-testing-eicendpoint.template.json": { - "filePath": "cdk/ec2-instance-connect-endpoint--integ-testing-eicendpoint.template.json", + "cdk/ddb-stream-lambda-sns--DdbStreamStack.template.json": { + "filePath": "cdk/ddb-stream-lambda-sns--DdbStreamStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 29, + "resourcesScanned": 16, "counts": { "fatal": 0, "errors": 0, - "warnings": 8, - "informational": 34, + "warnings": 4, + "informational": 20, "debug": 0 }, "suppressed": 0, @@ -21057,125 +21332,65 @@ { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "EICEndpointonEventHandlerC2E1F5F2", + "logicalId": "itemL2TableLambdaFunction1987B4C5", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 412, + "startLine": 228, "startColumn": 5, - "endLine": 412, + "endLine": 228, "endColumn": 13, "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "actualValue": "python3.9", + "actualValue": "nodejs20.x", "lifecycle": "deprecated" } }, { "ruleId": "W2531", "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "EICEndpointisCompleteHandler0273707A", + "logicalId": "itemL3TableLambdaFunction7B818C58", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 440, + "startLine": 433, "startColumn": 5, - "endLine": 440, + "endLine": 433, "endColumn": 13, "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "actualValue": "python3.9", + "actualValue": "nodejs20.x", "lifecycle": "deprecated" } }, { "ruleId": "W3005", "severity": "WARN", - "message": "'EICEndpointRole7DC4D43E' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "EICEndpointonEventHandlerC2E1F5F2", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 415, - "startColumn": 4, - "endLine": 415, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'EICEndpointRole7DC4D43E' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "EICEndpointisCompleteHandler0273707A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 443, - "startColumn": 4, - "endLine": 443, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'EICEndpointProviderframeworkonEventServiceRoleC0D29A73' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "EICEndpointProviderframeworkonEventB48896C9", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 618, - "startColumn": 4, - "endLine": 618, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'EICEndpointProviderframeworkisCompleteServiceRole0E0A4C51' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'itemL2TableLambdaFunctionServiceRole41583A05' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "EICEndpointProviderframeworkisCompleteB1442B18", + "logicalId": "itemL2TableLambdaFunction1987B4C5", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 786, + "startLine": 233, "startColumn": 4, - "endLine": 786, + "endLine": 233, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -21183,59 +21398,59 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'EICEndpointProviderframeworkonTimeoutServiceRole904320AB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'itemL3TableLambdaFunctionServiceRoleBA21B37D' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "EICEndpointProviderframeworkonTimeout83318112", + "logicalId": "itemL3TableLambdaFunction7B818C58", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 954, + "startLine": 438, "startColumn": 4, - "endLine": 954, + "endLine": 438, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'EICEndpointProviderwaiterstatemachineRole5E284D23' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", + "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": "EICEndpointProviderwaiterstatemachine1A139B58", + "logicalId": "itemL3TableSqsDlqQueueD3C251B9", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 1082, + "startLine": 536, "startColumn": 4, - "endLine": 1082, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 536, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Vpc8378EB38", + "logicalId": "ddbstreamtopic7821AF6E", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.TopicName", "category": "Best Practice", - "startLine": 6, + "startLine": 27, "startColumn": 5, - "endLine": 6, + "endLine": 27, "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -21245,41 +21460,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Vpc8378EB38", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.InstanceTenancy", - "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcrdsSubnet1SubnetC2926CEA", + "logicalId": "ddbstreaml2dlq5966ED66", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.QueueName", "category": "Best Practice", - "startLine": 24, + "startLine": 70, "startColumn": 5, - "endLine": 24, - "endColumn": 22, + "endLine": 70, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -21289,500 +21483,173 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcrdsSubnet1SubnetC2926CEA", + "logicalId": "itemL2TableBAC64D83", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 32, + "startLine": 88, "startColumn": 5, - "endLine": 32, + "endLine": 88, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcrdsSubnet1SubnetC2926CEA", + "logicalId": "itemL2TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL2Table0234427734A22B95", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.EventSourceArn", "category": "Best Practice", - "startLine": 48, + "startLine": 259, "startColumn": 5, - "endLine": 48, - "endColumn": 11, + "endLine": 259, + "endColumn": 20, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "GetAtt itemL2TableBAC64D83.StreamArn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'StartingPosition' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcrdsSubnet1RouteTableE62E4ED6", + "logicalId": "itemL2TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL2Table0234427734A22B95", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.StartingPosition", "category": "Best Practice", - "startLine": 65, + "startLine": 270, "startColumn": 5, - "endLine": 65, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 270, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcrdsSubnet1RouteTableAssociationE01668F2", + "logicalId": "itemL3TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL3TableDynamoTableF17D6710E0C1078B", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.EventSourceArn", "category": "Best Practice", - "startLine": 76, + "startLine": 480, "startColumn": 5, - "endLine": 76, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 480, + "endColumn": 20, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcrdsSubnet1RouteTableE62E4ED6'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt itemL3TableDynamoTable6BC36F24.StreamArn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'StartingPosition' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcrdsSubnet1RouteTableAssociationE01668F2", + "logicalId": "itemL3TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL3TableDynamoTableF17D6710E0C1078B", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.StartingPosition", "category": "Best Practice", - "startLine": 79, + "startLine": 491, "startColumn": 5, - "endLine": 79, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 491, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcrdsSubnet1SubnetC2926CEA'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcrdsSubnet2Subnet70A835C8", + "logicalId": "itemL3TableDynamoTable6BC36F24", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 90, + "startLine": 507, "startColumn": 5, - "endLine": 90, - "endColumn": 22, + "endLine": 507, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'ddbstreamtopic7821AF6E' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcrdsSubnet2Subnet70A835C8", + "logicalId": "ddbstreamtopic7821AF6E", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 98, - "startColumn": 5, - "endLine": 98, + "startLine": 5, + "startColumn": 4, + "endLine": 5, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'ddbstreaml2dlq5966ED66' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcrdsSubnet2Subnet70A835C8", + "logicalId": "ddbstreaml2dlq5966ED66", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 114, - "startColumn": 5, - "endLine": 114, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VpcrdsSubnet2RouteTable3E531D9B", - "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 131, - "startColumn": 5, - "endLine": 131, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VpcrdsSubnet2RouteTableAssociation25A7BD68", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 142, - "startColumn": 5, - "endLine": 142, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcrdsSubnet2RouteTable3E531D9B'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VpcrdsSubnet2RouteTableAssociation25A7BD68", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 145, - "startColumn": 5, - "endLine": 145, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcrdsSubnet2Subnet70A835C8'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "instanceInstanceSecurityGroup725C795D", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 156, - "startColumn": 5, - "endLine": 156, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "instanceInstanceSecurityGroup725C795D", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 196, - "startColumn": 5, - "endLine": 196, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "instanceB7CCE687", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 246, - "startColumn": 5, - "endLine": 246, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "instanceB7CCE687", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 257, - "startColumn": 5, - "endLine": 257, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "instanceB7CCE687", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 260, - "startColumn": 5, - "endLine": 260, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "instanceB7CCE687", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.SecurityGroupIds", - "category": "Best Practice", - "startLine": 261, - "startColumn": 5, - "endLine": 261, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "instanceB7CCE687", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 269, - "startColumn": 5, - "endLine": 269, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcrdsSubnet1SubnetC2926CEA'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "instanceB7CCE687", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.UserData", - "category": "Best Practice", - "startLine": 278, - "startColumn": 5, - "endLine": 278, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'EICEndpointRole7DC4D43E' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "EICEndpointRole7DC4D43E", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 291, - "startColumn": 4, - "endLine": 291, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'EICEndpointonEventHandlerC2E1F5F2' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "EICEndpointonEventHandlerC2E1F5F2", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SQS::Queue" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 397, + "startLine": 67, "startColumn": 4, - "endLine": 397, + "endLine": 67, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21790,19 +21657,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EICEndpointisCompleteHandler0273707A' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'itemL2TableBAC64D83' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EICEndpointisCompleteHandler0273707A", + "logicalId": "itemL2TableBAC64D83", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 425, + "startLine": 80, "startColumn": 4, - "endLine": 425, + "endLine": 80, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21810,19 +21677,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EICEndpointProviderframeworkonEventServiceRoleC0D29A73' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'itemL2TableLambdaFunctionServiceRole41583A05' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EICEndpointProviderframeworkonEventServiceRoleC0D29A73", + "logicalId": "itemL2TableLambdaFunctionServiceRole41583A05", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 453, + "startLine": 109, "startColumn": 4, - "endLine": 453, + "endLine": 109, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21830,19 +21697,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EICEndpointProviderframeworkonEventB48896C9' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'itemL2TableLambdaFunction1987B4C5' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EICEndpointProviderframeworkonEventB48896C9", + "logicalId": "itemL2TableLambdaFunction1987B4C5", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 577, + "startLine": 206, "startColumn": 4, - "endLine": 577, + "endLine": 206, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21850,19 +21717,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EICEndpointProviderframeworkisCompleteServiceRole0E0A4C51' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'itemL2TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL2Table0234427734A22B95' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EICEndpointProviderframeworkisCompleteServiceRole0E0A4C51", + "logicalId": "itemL2TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL2Table0234427734A22B95", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::EventSourceMapping" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 631, + "startLine": 246, "startColumn": 4, - "endLine": 631, + "endLine": 246, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21870,19 +21737,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EICEndpointProviderframeworkisCompleteB1442B18' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'itemL3TableLambdaFunctionServiceRoleBA21B37D' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EICEndpointProviderframeworkisCompleteB1442B18", + "logicalId": "itemL3TableLambdaFunctionServiceRoleBA21B37D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 748, + "startLine": 278, "startColumn": 4, - "endLine": 748, + "endLine": 278, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21890,19 +21757,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EICEndpointProviderframeworkonTimeoutServiceRole904320AB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'itemL3TableLambdaFunction7B818C58' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EICEndpointProviderframeworkonTimeoutServiceRole904320AB", + "logicalId": "itemL3TableLambdaFunction7B818C58", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 799, + "startLine": 412, "startColumn": 4, - "endLine": 799, + "endLine": 412, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21910,19 +21777,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EICEndpointProviderframeworkonTimeout83318112' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'itemL3TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL3TableDynamoTableF17D6710E0C1078B' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EICEndpointProviderframeworkonTimeout83318112", + "logicalId": "itemL3TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL3TableDynamoTableF17D6710E0C1078B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::EventSourceMapping" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 916, + "startLine": 467, "startColumn": 4, - "endLine": 916, + "endLine": 467, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21930,19 +21797,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EICEndpointProviderwaiterstatemachineRole5E284D23' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'itemL3TableDynamoTable6BC36F24' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EICEndpointProviderwaiterstatemachineRole5E284D23", + "logicalId": "itemL3TableDynamoTable6BC36F24", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 967, + "startLine": 499, "startColumn": 4, - "endLine": 967, + "endLine": 499, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21950,35 +21817,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EICEndpointProviderwaiterstatemachine1A139B58' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "message": "Resource 'itemL3TableSqsDlqQueueD3C251B9' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EICEndpointProviderwaiterstatemachine1A139B58", + "logicalId": "itemL3TableSqsDlqQueueD3C251B9", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::SQS::Queue" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1052, + "startLine": 536, "startColumn": 4, - "endLine": 1052, + "endLine": 536, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/ecs-cluster--MyFirstEcsCluster.template.json": { - "filePath": "cdk/ecs-cluster--MyFirstEcsCluster.template.json", + "cdk/ec2-instance--EC2Example.template.json": { + "filePath": "cdk/ec2-instance--EC2Example.template.json", "status": "OK", "metadata": { - "resourcesScanned": 33, + "resourcesScanned": 28, "counts": { "fatal": 0, "errors": 0, - "warnings": 1, - "informational": 52, + "warnings": 5, + "informational": 40, "debug": 0 }, "suppressed": 0, @@ -21987,83 +21854,164 @@ }, "diagnostics": [ { - "ruleId": "W3697", + "ruleId": "W2508", "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", - "source": "CFN_LINT", + "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", + "source": "ENGINE", "entity": { - "logicalId": "MyFleetLaunchConfig5D7F9801", + "logicalId": "VPCSSHSecurityGroup0495A24F", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EC2::SecurityGroup" }, - "category": "Deprecation", - "startLine": 588, - "startColumn": 3, - "endLine": 588, - "endColumn": 31, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" + "propertyPath": "Properties.SecurityGroupIngress", + "suggestedFix": "Restrict the CIDR range to specific IP addresses", + "category": "Security", + "startLine": 229, + "startColumn": 5, + "endLine": 229, + "endColumn": 26, + "ruleDescription": "Security group allows open access to sensitive port", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'EC2serverEc2Role6775A3D4' dependency already enforced by a 'Ref' at 'Properties.UserData.Fn::Base64.Fn::Join.1.11'", + "source": "CFN_LINT", "entity": { - "logicalId": "MyVpcF9F0CA6F", + "logicalId": "EC2Instance1F00751C57ee729c1274d778", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 658, + "startColumn": 4, + "endLine": 658, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'EC2serverEc2Role6775A3D4' dependency already enforced by a 'Ref' at 'Properties.UserData.Fn::Base64.Fn::Join.1.21'", + "source": "CFN_LINT", "entity": { - "logicalId": "MyVpcF9F0CA6F", + "logicalId": "EC2Instance1F00751C57ee729c1274d778", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 658, + "startColumn": 4, + "endLine": 658, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "MyVpcPublicSubnet1SubnetF6608456", + "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 777, + "startColumn": 4, + "endLine": 777, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiBServiceRoleBA21DBC1' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiB6723FB92", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 939, + "startColumn": 4, + "endLine": 939, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "VPC61AD6880", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "VPC61AD6880", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.InstanceTenancy", + "category": "Best Practice", + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "VPCServerPublicSubnet1SubnetF3987995", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 24, + "startLine": 25, "startColumn": 5, - "endLine": 24, + "endLine": 25, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -22077,15 +22025,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1SubnetF6608456", + "logicalId": "VPCServerPublicSubnet1SubnetF3987995", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 32, + "startLine": 33, "startColumn": 5, - "endLine": 32, + "endLine": 33, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -22099,21 +22047,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1SubnetF6608456", + "logicalId": "VPCServerPublicSubnet1SubnetF3987995", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 48, + "startLine": 49, "startColumn": 5, - "endLine": 48, + "endLine": 49, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'VPC61AD6880'" } }, { @@ -22122,22 +22070,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1RouteTableC46AB2F4", + "logicalId": "VPCServerPublicSubnet1RouteTable140320E2", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 65, + "startLine": 66, "startColumn": 5, - "endLine": 65, + "endLine": 66, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'VPC61AD6880'" } }, { @@ -22146,22 +22094,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", + "logicalId": "VPCServerPublicSubnet1RouteTableAssociationBCA9EE21", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 76, + "startLine": 77, "startColumn": 5, - "endLine": 76, + "endLine": 77, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'", + "resolutionSource": "Ref to 'VPCServerPublicSubnet1RouteTable140320E2'", "extra": { "replacement_strategy": "delete_then_create" } @@ -22173,22 +22121,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", + "logicalId": "VPCServerPublicSubnet1RouteTableAssociationBCA9EE21", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 79, + "startLine": 80, "startColumn": 5, - "endLine": 79, + "endLine": 80, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'", + "resolutionSource": "Ref to 'VPCServerPublicSubnet1SubnetF3987995'", "extra": { "replacement_strategy": "delete_then_create" } @@ -22200,15 +22148,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", + "logicalId": "VPCServerPublicSubnet1DefaultRoute0DEC8857", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 90, + "startLine": 91, "startColumn": 5, - "endLine": 90, + "endLine": 91, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -22223,68 +22171,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", + "logicalId": "VPCServerPublicSubnet1DefaultRoute0DEC8857", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 94, + "startLine": 95, "startColumn": 5, - "endLine": 94, + "endLine": 95, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.AllocationId", - "category": "Best Practice", - "startLine": 123, - "startColumn": 5, - "endLine": 123, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt MyVpcPublicSubnet1EIP096967CB.AllocationId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 129, - "startColumn": 5, - "endLine": 129, - "endColumn": 14, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'" + "resolutionSource": "Ref to 'VPCServerPublicSubnet1RouteTable140320E2'" } }, { @@ -22293,15 +22195,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", + "logicalId": "VPCServerPublicSubnet2SubnetDB508B90", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 150, + "startLine": 109, "startColumn": 5, - "endLine": 150, + "endLine": 109, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -22315,15 +22217,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", + "logicalId": "VPCServerPublicSubnet2SubnetDB508B90", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 158, + "startLine": 117, "startColumn": 5, - "endLine": 158, + "endLine": 117, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -22337,21 +22239,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", + "logicalId": "VPCServerPublicSubnet2SubnetDB508B90", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 174, + "startLine": 133, "startColumn": 5, - "endLine": 174, + "endLine": 133, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'VPC61AD6880'" } }, { @@ -22360,22 +22262,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2RouteTable1DF17386", + "logicalId": "VPCServerPublicSubnet2RouteTableD6971BF3", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 191, + "startLine": 150, "startColumn": 5, - "endLine": 191, + "endLine": 150, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'VPC61AD6880'" } }, { @@ -22384,22 +22286,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", + "logicalId": "VPCServerPublicSubnet2RouteTableAssociationE261CDCA", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 202, + "startLine": 161, "startColumn": 5, - "endLine": 202, + "endLine": 161, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'", + "resolutionSource": "Ref to 'VPCServerPublicSubnet2RouteTableD6971BF3'", "extra": { "replacement_strategy": "delete_then_create" } @@ -22411,22 +22313,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", + "logicalId": "VPCServerPublicSubnet2RouteTableAssociationE261CDCA", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 205, + "startLine": 164, "startColumn": 5, - "endLine": 205, + "endLine": 164, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'", + "resolutionSource": "Ref to 'VPCServerPublicSubnet2SubnetDB508B90'", "extra": { "replacement_strategy": "delete_then_create" } @@ -22438,15 +22340,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", + "logicalId": "VPCServerPublicSubnet2DefaultRoute6A434666", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 216, + "startLine": 175, "startColumn": 5, - "endLine": 216, + "endLine": 175, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -22461,85 +22363,66 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", + "logicalId": "VPCServerPublicSubnet2DefaultRoute6A434666", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 220, + "startLine": 179, "startColumn": 5, - "endLine": 220, + "endLine": 179, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.AllocationId", - "category": "Best Practice", - "startLine": 249, - "startColumn": 5, - "endLine": 249, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt MyVpcPublicSubnet2EIP8CCBA239.AllocationId" + "resolutionSource": "Ref to 'VPCServerPublicSubnet2RouteTableD6971BF3'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", + "logicalId": "VPCVPCGW3AFA48F6", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 255, + "startLine": 210, "startColumn": 5, - "endLine": 255, - "endColumn": 14, + "endLine": 210, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'" + "resolutionSource": "Ref to 'VPC61AD6880'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", + "logicalId": "VPCSSHSecurityGroup0495A24F", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 276, + "startLine": 221, "startColumn": 5, - "endLine": 276, + "endLine": 221, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -22547,146 +22430,114 @@ "lifecycle": "create-only" } }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 284, - "startColumn": 5, - "endLine": 284, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", + "logicalId": "VPCSSHSecurityGroup0495A24F", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 300, + "startLine": 238, "startColumn": 5, - "endLine": 300, + "endLine": 238, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'VPC61AD6880'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1RouteTable8819E6E2", + "logicalId": "EC2assetBucketPolicy31C0B372", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 317, + "startLine": 276, "startColumn": 5, - "endLine": 317, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 276, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'EC2assetBucketC584B4AB'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Content' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", + "logicalId": "EC2assetBucketDeploymentAwsCliLayerFF55632D", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Content", "category": "Best Practice", - "startLine": 328, + "startLine": 353, "startColumn": 5, - "endLine": 328, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 353, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", + "logicalId": "EC2assetBucketDeploymentAwsCliLayerFF55632D", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 331, + "startLine": 359, "startColumn": 5, - "endLine": 331, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 359, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet1Subnet5057CF7E'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", + "logicalId": "EC2ec2InstanceSecurityGroupD268D496", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 342, + "startLine": 533, "startColumn": 5, - "endLine": 342, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 533, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22696,25 +22547,24 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", + "logicalId": "EC2ec2InstanceSecurityGroupD268D496", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 346, + "startLine": 541, "startColumn": 5, - "endLine": 346, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 541, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'" + "resolutionSource": "Ref to 'VPC61AD6880'" } }, { @@ -22723,16 +22573,17 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", + "logicalId": "EC2Instance1F00751C57ee729c1274d778", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 357, + "startLine": 565, "startColumn": 5, - "endLine": 357, + "endLine": 565, "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22742,19 +22593,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", + "logicalId": "EC2Instance1F00751C57ee729c1274d778", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 365, + "startLine": 576, "startColumn": 5, - "endLine": 365, - "endColumn": 15, + "endLine": 576, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22764,490 +22616,431 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", + "logicalId": "EC2Instance1F00751C57ee729c1274d778", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 381, + "startLine": 579, "startColumn": 5, - "endLine": 381, - "endColumn": 11, + "endLine": 579, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2RouteTableCEDCEECE", + "logicalId": "EC2Instance1F00751C57ee729c1274d778", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.SecurityGroupIds", "category": "Best Practice", - "startLine": 398, + "startLine": 580, "startColumn": 5, - "endLine": 398, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 580, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", + "logicalId": "EC2Instance1F00751C57ee729c1274d778", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 409, + "startLine": 594, "startColumn": 5, - "endLine": 409, - "endColumn": 18, + "endLine": 594, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "Ref to 'VPCServerPublicSubnet1SubnetF3987995'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", + "logicalId": "EC2Instance1F00751C57ee729c1274d778", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 412, + "startLine": 603, "startColumn": 5, - "endLine": 412, + "endLine": 603, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet2Subnet0040C983'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Base64 with unresolvable argument)" } }, { - "ruleId": "I9001", + "ruleId": "I9003", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", "source": "ENGINE", - "entity": { - "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 423, - "startColumn": 5, - "endLine": 423, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'VPCSSHSecurityGroup0495A24F' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", + "logicalId": "VPCSSHSecurityGroup0495A24F", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 427, - "startColumn": 5, - "endLine": 427, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'" - } + "startLine": 220, + "startColumn": 4, + "endLine": 220, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'EC2serverEc2Role6775A3D4' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyVpcVPCGW488ACE0D", + "logicalId": "EC2serverEc2Role6775A3D4", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 455, - "startColumn": 5, - "endLine": 455, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 405, + "startColumn": 4, + "endLine": 405, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Resource 'EC2ec2InstanceSecurityGroupD268D496' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyFleetInstanceSecurityGroup774E8234", + "logicalId": "EC2ec2InstanceSecurityGroupD268D496", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 466, - "startColumn": 5, - "endLine": 466, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 532, + "startColumn": 4, + "endLine": 532, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyFleetInstanceSecurityGroup774E8234", + "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 480, - "startColumn": 5, - "endLine": 480, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" - } + "startLine": 722, + "startColumn": 4, + "endLine": 722, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", + "message": "Resource 'CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyFleetLaunchConfig5D7F9801", + "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.IamInstanceProfile", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 591, - "startColumn": 5, - "endLine": 591, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyFleetInstanceProfile70A58496'" - } + "startLine": 747, + "startColumn": 4, + "endLine": 747, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Resource 'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiBServiceRoleBA21DBC1' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyFleetLaunchConfig5D7F9801", + "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiBServiceRoleBA21DBC1", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 594, - "startColumn": 5, - "endLine": 594, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 788, + "startColumn": 4, + "endLine": 788, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "message": "Resource 'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiB6723FB92' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyFleetLaunchConfig5D7F9801", + "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiB6723FB92", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 597, - "startColumn": 5, - "endLine": 597, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 911, + "startColumn": 4, + "endLine": 911, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/ec2-instance-connect-endpoint--integ-testing-eicendpoint.template.json": { + "filePath": "cdk/ec2-instance-connect-endpoint--integ-testing-eicendpoint.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 29, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 8, + "informational": 34, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "MyFleetLaunchConfig5D7F9801", + "logicalId": "EICEndpointonEventHandlerC2E1F5F2", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SecurityGroups", - "category": "Best Practice", - "startLine": 598, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 412, "startColumn": 5, - "endLine": 598, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 412, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "python3.9", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "MyFleetLaunchConfig5D7F9801", + "logicalId": "EICEndpointisCompleteHandler0273707A", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.UserData", - "category": "Best Practice", - "startLine": 606, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 440, "startColumn": 5, - "endLine": 606, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 440, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Base64 with unresolvable argument)" + "actualValue": "python3.9", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'EICEndpointRole7DC4D43E' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "MyFleetASG88E55886", + "logicalId": "EICEndpointonEventHandlerC2E1F5F2", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.LaunchConfigurationName", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 633, - "startColumn": 5, - "endLine": 633, - "endColumn": 29, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'MyFleetLaunchConfig5D7F9801'" - } + "startLine": 415, + "startColumn": 4, + "endLine": 415, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'EICEndpointRole7DC4D43E' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "MyFleetASG88E55886", + "logicalId": "EICEndpointisCompleteHandler0273707A", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VPCZoneIdentifier", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 646, - "startColumn": 5, - "endLine": 646, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 443, + "startColumn": 4, + "endLine": 443, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'EICEndpointProviderframeworkonEventServiceRoleC0D29A73' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "EcsCluster72B17558", + "logicalId": "EICEndpointProviderframeworkonEventB48896C9", "entityType": "Resource", - "resourceType": "AWS::ECS::ClusterCapacityProviderAssociations" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Cluster", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 678, - "startColumn": 5, - "endLine": 678, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'EcsCluster97242B84'" - } + "startLine": 618, + "startColumn": 4, + "endLine": 618, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AutoScalingGroupProvider.AutoScalingGroupArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'EICEndpointProviderframeworkisCompleteServiceRole0E0A4C51' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "AsgCapacityProvider760D11D9", + "logicalId": "EICEndpointProviderframeworkisCompleteB1442B18", "entityType": "Resource", - "resourceType": "AWS::ECS::CapacityProvider" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AutoScalingGroupProvider.AutoScalingGroupArn", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 691, - "startColumn": 6, - "endLine": 691, - "endColumn": 26, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 786, + "startColumn": 4, + "endLine": 786, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'EcsCluster97242B84' of type 'AWS::ECS::Cluster' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'EICEndpointProviderframeworkonTimeoutServiceRole904320AB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "EcsCluster97242B84", + "logicalId": "EICEndpointProviderframeworkonTimeout83318112", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 664, - "startColumn": 3, - "endLine": 664, - "endColumn": 22, - "ruleDescription": "Resource should have Tags", + "startLine": 954, + "startColumn": 4, + "endLine": 954, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'AsgCapacityProvider760D11D9' of type 'AWS::ECS::CapacityProvider' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'EICEndpointProviderwaiterstatemachineRole5E284D23' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", + "source": "CFN_LINT", "entity": { - "logicalId": "AsgCapacityProvider760D11D9", + "logicalId": "EICEndpointProviderwaiterstatemachine1A139B58", "entityType": "Resource", - "resourceType": "AWS::ECS::CapacityProvider" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 689, + "startLine": 1082, "startColumn": 4, - "endLine": 689, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endLine": 1082, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" - } - ] - }, - "cdk/ecs-cross-stack-load-balancer--CrossStackLBInfra.template.json": { - "filePath": "cdk/ecs-cross-stack-load-balancer--CrossStackLBInfra.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 25, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 40, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", @@ -23298,7 +23091,7 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "VpcrdsSubnet1SubnetC2926CEA", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -23320,7 +23113,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "VpcrdsSubnet1SubnetC2926CEA", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -23342,7 +23135,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "VpcrdsSubnet1SubnetC2926CEA", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -23365,7 +23158,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTable6C95E38E", + "logicalId": "VpcrdsSubnet1RouteTableE62E4ED6", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, @@ -23389,7 +23182,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", + "logicalId": "VpcrdsSubnet1RouteTableAssociationE01668F2", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -23404,7 +23197,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'", + "resolutionSource": "Ref to 'VpcrdsSubnet1RouteTableE62E4ED6'", "extra": { "replacement_strategy": "delete_then_create" } @@ -23416,7 +23209,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", + "logicalId": "VpcrdsSubnet1RouteTableAssociationE01668F2", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -23431,7 +23224,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'", + "resolutionSource": "Ref to 'VpcrdsSubnet1SubnetC2926CEA'", "extra": { "replacement_strategy": "delete_then_create" } @@ -23440,111 +23233,18 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.DestinationCidrBlock", - "category": "Best Practice", - "startLine": 90, - "startColumn": 5, - "endLine": 90, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 94, - "startColumn": 5, - "endLine": 94, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.AllocationId", - "category": "Best Practice", - "startLine": 123, - "startColumn": 5, - "endLine": 123, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcPublicSubnet1EIPD7E02669.AllocationId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 129, - "startColumn": 5, - "endLine": 129, - "endColumn": 14, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "VpcrdsSubnet2Subnet70A835C8", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 150, + "startLine": 90, "startColumn": 5, - "endLine": 150, + "endLine": 90, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -23558,15 +23258,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "VpcrdsSubnet2Subnet70A835C8", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 158, + "startLine": 98, "startColumn": 5, - "endLine": 158, + "endLine": 98, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -23580,15 +23280,15 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "VpcrdsSubnet2Subnet70A835C8", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 174, + "startLine": 114, "startColumn": 5, - "endLine": 174, + "endLine": 114, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -23603,15 +23303,15 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTable94F7E489", + "logicalId": "VpcrdsSubnet2RouteTable3E531D9B", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 191, + "startLine": 131, "startColumn": 5, - "endLine": 191, + "endLine": 131, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -23627,22 +23327,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "logicalId": "VpcrdsSubnet2RouteTableAssociation25A7BD68", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 202, + "startLine": 142, "startColumn": 5, - "endLine": 202, + "endLine": 142, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'", + "resolutionSource": "Ref to 'VpcrdsSubnet2RouteTable3E531D9B'", "extra": { "replacement_strategy": "delete_then_create" } @@ -23654,22 +23354,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "logicalId": "VpcrdsSubnet2RouteTableAssociation25A7BD68", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 205, + "startLine": 145, "startColumn": 5, - "endLine": 205, + "endLine": 145, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'", + "resolutionSource": "Ref to 'VpcrdsSubnet2Subnet70A835C8'", "extra": { "replacement_strategy": "delete_then_create" } @@ -23678,20 +23378,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", + "logicalId": "instanceInstanceSecurityGroup725C795D", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 216, + "startLine": 156, "startColumn": 5, - "endLine": 216, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 156, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -23701,516 +23400,406 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", + "logicalId": "instanceInstanceSecurityGroup725C795D", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 220, + "startLine": 196, "startColumn": 5, - "endLine": 220, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 196, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2NATGateway9182C01D", + "logicalId": "instanceB7CCE687", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 249, + "startLine": 246, "startColumn": 5, - "endLine": 249, - "endColumn": 18, + "endLine": 246, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcPublicSubnet2EIP3C605A87.AllocationId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2NATGateway9182C01D", + "logicalId": "instanceB7CCE687", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 255, + "startLine": 257, "startColumn": 5, - "endLine": 255, - "endColumn": 14, + "endLine": 257, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "instanceB7CCE687", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 276, + "startLine": 260, "startColumn": 5, - "endLine": 276, - "endColumn": 22, + "endLine": 260, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "instanceB7CCE687", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.SecurityGroupIds", "category": "Best Practice", - "startLine": 284, + "startLine": 261, "startColumn": 5, - "endLine": 284, - "endColumn": 15, + "endLine": 261, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "instanceB7CCE687", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 300, + "startLine": 269, "startColumn": 5, - "endLine": 300, - "endColumn": 11, + "endLine": 269, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'VpcrdsSubnet1SubnetC2926CEA'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableB2C5B500", + "logicalId": "instanceB7CCE687", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 317, + "startLine": 278, "startColumn": 5, - "endLine": 317, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 278, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9003", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'EICEndpointRole7DC4D43E' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", + "logicalId": "EICEndpointRole7DC4D43E", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 328, - "startColumn": 5, - "endLine": 328, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 291, + "startColumn": 4, + "endLine": 291, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'EICEndpointonEventHandlerC2E1F5F2' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", + "logicalId": "EICEndpointonEventHandlerC2E1F5F2", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 331, - "startColumn": 5, - "endLine": 331, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1Subnet536B997A'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 397, + "startColumn": 4, + "endLine": 397, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'EICEndpointisCompleteHandler0273707A' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "logicalId": "EICEndpointisCompleteHandler0273707A", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 342, - "startColumn": 5, - "endLine": 342, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 425, + "startColumn": 4, + "endLine": 425, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'EICEndpointProviderframeworkonEventServiceRoleC0D29A73' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "logicalId": "EICEndpointProviderframeworkonEventServiceRoleC0D29A73", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 346, - "startColumn": 5, - "endLine": 346, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'" - } + "startLine": 453, + "startColumn": 4, + "endLine": 453, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Resource 'EICEndpointProviderframeworkonEventB48896C9' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "EICEndpointProviderframeworkonEventB48896C9", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 357, - "startColumn": 5, - "endLine": 357, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 577, + "startColumn": 4, + "endLine": 577, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'EICEndpointProviderframeworkisCompleteServiceRole0E0A4C51' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "EICEndpointProviderframeworkisCompleteServiceRole0E0A4C51", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 365, - "startColumn": 5, - "endLine": 365, + "startLine": 631, + "startColumn": 4, + "endLine": 631, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'EICEndpointProviderframeworkisCompleteB1442B18' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "EICEndpointProviderframeworkisCompleteB1442B18", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 381, - "startColumn": 5, - "endLine": 381, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } + "startLine": 748, + "startColumn": 4, + "endLine": 748, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'EICEndpointProviderframeworkonTimeoutServiceRole904320AB' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableA678073B", + "logicalId": "EICEndpointProviderframeworkonTimeoutServiceRole904320AB", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 398, - "startColumn": 5, - "endLine": 398, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } + "startLine": 799, + "startColumn": 4, + "endLine": 799, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'EICEndpointProviderframeworkonTimeout83318112' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", + "logicalId": "EICEndpointProviderframeworkonTimeout83318112", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 409, - "startColumn": 5, - "endLine": 409, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 412, - "startColumn": 5, - "endLine": 412, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2Subnet3788AAA1'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.DestinationCidrBlock", - "category": "Best Practice", - "startLine": 423, - "startColumn": 5, - "endLine": 423, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 427, - "startColumn": 5, - "endLine": 427, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'" - } + "startLine": 916, + "startColumn": 4, + "endLine": 916, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'EICEndpointProviderwaiterstatemachineRole5E284D23' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcVPCGWBF912B6E", + "logicalId": "EICEndpointProviderwaiterstatemachineRole5E284D23", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 455, - "startColumn": 5, - "endLine": 455, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 967, + "startColumn": 4, + "endLine": 967, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ClusterEB0386A7' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Resource 'EICEndpointProviderwaiterstatemachine1A139B58' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ClusterEB0386A7", + "logicalId": "EICEndpointProviderwaiterstatemachine1A139B58", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::StepFunctions::StateMachine" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 463, - "startColumn": 3, - "endLine": 463, - "endColumn": 19, + "startLine": 1052, + "startColumn": 4, + "endLine": 1052, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/ecs-cross-stack-load-balancer--SplitAtListener-LBStack.template.json": { - "filePath": "cdk/ecs-cross-stack-load-balancer--SplitAtListener-LBStack.template.json", + "cdk/ecs-cluster--MyFirstEcsCluster.template.json": { + "filePath": "cdk/ecs-cluster--MyFirstEcsCluster.template.json", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 33, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 6, + "warnings": 1, + "informational": 52, "debug": 0 }, "suppressed": 0, @@ -24218,23 +23807,41 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyFleetLaunchConfig5D7F9801", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "category": "Deprecation", + "startLine": 588, + "startColumn": 3, + "endLine": 588, + "endColumn": 31, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" + }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LoadBalancerBE9EEC3A", + "logicalId": "MyVpcF9F0CA6F", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Scheme", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 12, + "startLine": 6, "startColumn": 5, - "endLine": 12, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endLine": 6, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24244,41 +23851,40 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LoadBalancerBE9EEC3A", + "logicalId": "MyVpcF9F0CA6F", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 29, + "startLine": 9, "startColumn": 5, - "endLine": 29, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endLine": 9, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LoadBalancerSecurityGroupA28D6DD7", + "logicalId": "MyVpcPublicSubnet1SubnetF6608456", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 38, + "startLine": 24, "startColumn": 5, - "endLine": 38, + "endLine": 24, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -24289,191 +23895,143 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LoadBalancerSecurityGroupA28D6DD7", + "logicalId": "MyVpcPublicSubnet1SubnetF6608456", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 48, + "startLine": 32, "startColumn": 5, - "endLine": 48, - "endColumn": 11, + "endLine": 32, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefVpc8378EB38272D6E3A)" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LoadBalancerBE9EEC3A' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "LoadBalancerBE9EEC3A", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LoadBalancerSecurityGroupA28D6DD7' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LoadBalancerSecurityGroupA28D6DD7", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 37, - "startColumn": 4, - "endLine": 37, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/ecs-cross-stack-load-balancer--SplitAtListener-ServiceStack.template.json": { - "filePath": "cdk/ecs-cross-stack-load-balancer--SplitAtListener-ServiceStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 9, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 32, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ListenerECSGroup2EA4A011' dependency already enforced by a 'Ref' at 'Properties.LoadBalancers.0.TargetGroupArn'", - "source": "CFN_LINT", - "entity": { - "logicalId": "ServiceD69D759B", + "logicalId": "MyVpcPublicSubnet1SubnetF6608456", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 110, - "startColumn": 4, - "endLine": 110, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 48, + "startColumn": 5, + "endLine": 48, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "MyVpcPublicSubnet1RouteTableC46AB2F4", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 26, + "startLine": 65, "startColumn": 5, - "endLine": 26, - "endColumn": 26, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 65, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 40, + "startLine": 76, "startColumn": 5, - "endLine": 40, - "endColumn": 9, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 76, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 41, + "startLine": 79, "startColumn": 5, - "endLine": 41, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 79, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 42, + "startLine": 90, "startColumn": 5, - "endLine": 42, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 90, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24483,138 +24041,138 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 43, + "startLine": 94, "startColumn": 5, - "endLine": 43, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 94, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 44, + "startLine": 123, "startColumn": 5, - "endLine": 44, - "endColumn": 29, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 123, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt MyVpcPublicSubnet1EIP096967CB.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.TaskRoleArn", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 47, + "startLine": 129, "startColumn": 5, - "endLine": 47, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 129, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt TaskDefTaskRole1EDB4A67.Arn" + "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceD69D759B", + "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Cluster", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 61, + "startLine": 150, "startColumn": 5, - "endLine": 61, - "endColumn": 13, + "endLine": 150, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefClusterEB0386A796A0E3FE)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceD69D759B", + "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.LaunchType", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 75, + "startLine": 158, "startColumn": 5, - "endLine": 75, - "endColumn": 16, + "endLine": 158, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupC96ED6A7", + "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 122, + "startLine": 174, "startColumn": 5, - "endLine": 122, - "endColumn": 22, + "endLine": 174, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -24623,87 +24181,95 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupC96ED6A7", + "logicalId": "MyVpcPublicSubnet2RouteTable1DF17386", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 130, + "startLine": 191, "startColumn": 5, - "endLine": 130, + "endLine": 191, "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefVpc8378EB38272D6E3A)" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupfromSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680251D8C7D", + "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 145, + "startLine": 202, "startColumn": 5, - "endLine": 145, - "endColumn": 14, + "endLine": 202, + "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupfromSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680251D8C7D", + "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 146, + "startLine": 205, "startColumn": 5, - "endLine": 146, - "endColumn": 13, + "endLine": 205, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ServiceSecurityGroupC96ED6A7.GroupId" + "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupfromSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680251D8C7D", + "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 152, + "startLine": 216, "startColumn": 5, - "endLine": 152, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 216, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24713,91 +24279,89 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupfromSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680251D8C7D", + "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.SourceSecurityGroupId", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 153, + "startLine": 220, "startColumn": 5, - "endLine": 153, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 220, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: SplitAtListener-LBStack:ExportsOutputFnGetAttLoadBalancerSecurityGroupA28D6DD7GroupId44BDE65A)" + "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupfromSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680251D8C7D", + "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 156, + "startLine": 249, "startColumn": 5, - "endLine": 156, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 249, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt MyVpcPublicSubnet2EIP8CCBA239.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationSecurityGroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680from5771F1D9", + "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.DestinationSecurityGroupId", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 169, + "startLine": 255, "startColumn": 5, - "endLine": 169, - "endColumn": 32, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 255, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ServiceSecurityGroupC96ED6A7.GroupId" + "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680from5771F1D9", + "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 175, + "startLine": 276, "startColumn": 5, - "endLine": 175, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 276, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24807,135 +24371,143 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680from5771F1D9", + "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 176, + "startLine": 284, "startColumn": 5, - "endLine": 176, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 284, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: SplitAtListener-LBStack:ExportsOutputFnGetAttLoadBalancerSecurityGroupA28D6DD7GroupId44BDE65A)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680from5771F1D9", + "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 179, + "startLine": 300, "startColumn": 5, - "endLine": 179, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 300, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680from5771F1D9", + "logicalId": "MyVpcPrivateSubnet1RouteTable8819E6E2", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 180, + "startLine": 317, "startColumn": 5, - "endLine": 180, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 317, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Listener828B0E81", + "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.LoadBalancerArn", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 200, + "startLine": 328, "startColumn": 5, - "endLine": 200, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", + "endLine": 328, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: SplitAtListener-LBStack:ExportsOutputRefLoadBalancerBE9EEC3A2EF8C31C)" + "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ListenerECSGroup2EA4A011", + "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 213, + "startLine": 331, "startColumn": 5, - "endLine": 213, - "endColumn": 10, + "endLine": 331, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet1Subnet5057CF7E'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ListenerECSGroup2EA4A011", + "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 214, + "startLine": 342, "startColumn": 5, - "endLine": 214, - "endColumn": 14, + "endLine": 342, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24945,231 +24517,244 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ListenerECSGroup2EA4A011", + "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.TargetType", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 221, + "startLine": 346, "startColumn": 5, - "endLine": 221, - "endColumn": 16, + "endLine": 346, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ListenerECSGroup2EA4A011", + "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 222, + "startLine": 357, "startColumn": 5, - "endLine": 222, - "endColumn": 11, + "endLine": 357, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefVpc8378EB38272D6E3A)" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TaskDefTaskRole1EDB4A67' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDefTaskRole1EDB4A67", + "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, + "startLine": 365, + "startColumn": 5, + "endLine": 365, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TaskDef54694570' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 25, - "startColumn": 4, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 381, + "startColumn": 5, + "endLine": 381, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ServiceD69D759B' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceD69D759B", + "logicalId": "MyVpcPrivateSubnet2RouteTableCEDCEECE", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 60, - "startColumn": 4, - "endLine": 60, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 398, + "startColumn": 5, + "endLine": 398, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ServiceSecurityGroupC96ED6A7' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupC96ED6A7", + "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 121, - "startColumn": 4, - "endLine": 121, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 409, + "startColumn": 5, + "endLine": 409, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Listener828B0E81' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Listener828B0E81", + "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 191, - "startColumn": 4, - "endLine": 191, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 412, + "startColumn": 5, + "endLine": 412, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet2Subnet0040C983'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ListenerECSGroup2EA4A011' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ListenerECSGroup2EA4A011", + "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 212, - "startColumn": 4, - "endLine": 212, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/ecs-cross-stack-load-balancer--SplitAtTargetGroup-LBStack.template.json": { - "filePath": "cdk/ecs-cross-stack-load-balancer--SplitAtTargetGroup-LBStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 13, - "debug": 0 + "startLine": 423, + "startColumn": 5, + "endLine": 423, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LoadBalancerBE9EEC3A", + "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Scheme", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 12, + "startLine": 427, "startColumn": 5, - "endLine": 12, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endLine": 427, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LoadBalancerBE9EEC3A", + "logicalId": "MyVpcVPCGW488ACE0D", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 29, + "startLine": 455, "startColumn": 5, - "endLine": 29, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endLine": 455, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { @@ -25178,15 +24763,15 @@ "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LoadBalancerSecurityGroupA28D6DD7", + "logicalId": "MyFleetInstanceSecurityGroup774E8234", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 38, + "startLine": 466, "startColumn": 5, - "endLine": 38, + "endLine": 466, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -25200,63 +24785,64 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LoadBalancerSecurityGroupA28D6DD7", + "logicalId": "MyFleetInstanceSecurityGroup774E8234", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 48, + "startLine": 480, "startColumn": 5, - "endLine": 48, + "endLine": 480, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefVpc8378EB38272D6E3A)" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", + "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LoadBalancerListenerE1A099B9", + "logicalId": "MyFleetLaunchConfig5D7F9801", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.LoadBalancerArn", + "propertyPath": "Properties.IamInstanceProfile", "category": "Best Practice", - "startLine": 67, + "startLine": 591, "startColumn": 5, - "endLine": 67, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", + "endLine": 591, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'LoadBalancerBE9EEC3A'" + "resolutionSource": "Ref to 'MyFleetInstanceProfile70A58496'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup3D7CD9B8", + "logicalId": "MyFleetLaunchConfig5D7F9801", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 80, + "startLine": 594, "startColumn": 5, - "endLine": 80, - "endColumn": 10, + "endLine": 594, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -25266,19 +24852,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup3D7CD9B8", + "logicalId": "MyFleetLaunchConfig5D7F9801", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 81, + "startLine": 597, "startColumn": 5, - "endLine": 81, - "endColumn": 14, + "endLine": 597, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -25288,19 +24875,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", + "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup3D7CD9B8", + "logicalId": "MyFleetLaunchConfig5D7F9801", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.TargetType", + "propertyPath": "Properties.SecurityGroups", "category": "Best Practice", - "startLine": 88, + "startLine": 598, "startColumn": 5, - "endLine": 88, - "endColumn": 16, + "endLine": 598, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -25310,118 +24898,170 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'UserData' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup3D7CD9B8", + "logicalId": "MyFleetLaunchConfig5D7F9801", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 89, + "startLine": 606, "startColumn": 5, - "endLine": 89, - "endColumn": 11, + "endLine": 606, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefVpc8378EB38272D6E3A)" + "resolutionSource": "dynamic (Base64 with unresolvable argument)" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LoadBalancerBE9EEC3A' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LoadBalancerBE9EEC3A", + "logicalId": "MyFleetASG88E55886", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.LaunchConfigurationName", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 633, + "startColumn": 5, + "endLine": 633, + "endColumn": 29, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'MyFleetLaunchConfig5D7F9801'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LoadBalancerSecurityGroupA28D6DD7' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LoadBalancerSecurityGroupA28D6DD7", + "logicalId": "MyFleetASG88E55886", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VPCZoneIdentifier", "category": "Best Practice", - "startLine": 37, - "startColumn": 4, - "endLine": 37, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 646, + "startColumn": 5, + "endLine": 646, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "EcsCluster72B17558", + "entityType": "Resource", + "resourceType": "AWS::ECS::ClusterCapacityProviderAssociations" + }, + "propertyPath": "Properties.Cluster", + "category": "Best Practice", + "startLine": 678, + "startColumn": 5, + "endLine": 678, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'EcsCluster97242B84'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AutoScalingGroupProvider.AutoScalingGroupArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AsgCapacityProvider760D11D9", + "entityType": "Resource", + "resourceType": "AWS::ECS::CapacityProvider" + }, + "propertyPath": "Properties.AutoScalingGroupProvider.AutoScalingGroupArn", + "category": "Best Practice", + "startLine": 691, + "startColumn": 6, + "endLine": 691, + "endColumn": 26, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LoadBalancerListenerE1A099B9' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", + "message": "Resource 'EcsCluster97242B84' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LoadBalancerListenerE1A099B9", + "logicalId": "EcsCluster97242B84", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::ECS::Cluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 58, - "startColumn": 4, - "endLine": 58, - "endColumn": 15, + "startLine": 664, + "startColumn": 3, + "endLine": 664, + "endColumn": 22, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TargetGroup3D7CD9B8' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "message": "Resource 'AsgCapacityProvider760D11D9' of type 'AWS::ECS::CapacityProvider' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup3D7CD9B8", + "logicalId": "AsgCapacityProvider760D11D9", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::ECS::CapacityProvider" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 79, + "startLine": 689, "startColumn": 4, - "endLine": 79, + "endLine": 689, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/ecs-cross-stack-load-balancer--SplitAtTargetGroup-ServiceStack.template.json": { - "filePath": "cdk/ecs-cross-stack-load-balancer--SplitAtTargetGroup-ServiceStack.template.json", + "cdk/ecs-cross-stack-load-balancer--CrossStackLBInfra.template.json": { + "filePath": "cdk/ecs-cross-stack-load-balancer--CrossStackLBInfra.template.json", "status": "OK", "metadata": { - "resourcesScanned": 7, + "resourcesScanned": 25, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 25, + "informational": 40, "debug": 0 }, "suppressed": 0, @@ -25432,20 +25072,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "Vpc8378EB38", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 26, + "startLine": 6, "startColumn": 5, - "endLine": 26, - "endColumn": 26, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 6, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -25455,43 +25094,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "Vpc8378EB38", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 40, + "startLine": 9, "startColumn": 5, - "endLine": 40, - "endColumn": 9, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 9, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 41, + "startLine": 24, "startColumn": 5, - "endLine": 41, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 24, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -25501,20 +25138,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 42, + "startLine": 32, "startColumn": 5, - "endLine": 42, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 32, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -25524,227 +25160,235 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 43, + "startLine": 48, "startColumn": 5, - "endLine": 43, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 48, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "VpcPublicSubnet1RouteTable6C95E38E", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 44, + "startLine": 65, "startColumn": 5, - "endLine": 44, - "endColumn": 29, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 65, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.TaskRoleArn", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 47, + "startLine": 76, "startColumn": 5, - "endLine": 47, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 76, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt TaskDefTaskRole1EDB4A67.Arn" + "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceD69D759B", + "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Cluster", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 61, + "startLine": 79, "startColumn": 5, - "endLine": 61, - "endColumn": 13, + "endLine": 79, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefClusterEB0386A796A0E3FE)" + "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceD69D759B", + "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.LaunchType", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 75, + "startLine": 90, "startColumn": 5, - "endLine": 75, - "endColumn": 16, + "endLine": 90, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupC96ED6A7", + "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 120, + "startLine": 94, "startColumn": 5, - "endLine": 120, - "endColumn": 22, + "endLine": 94, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupC96ED6A7", + "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 128, + "startLine": 123, "startColumn": 5, - "endLine": 128, - "endColumn": 11, + "endLine": 123, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefVpc8378EB38272D6E3A)" + "resolutionSource": "GetAtt VpcPublicSubnet1EIPD7E02669.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupfromSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580953EC485", + "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 143, + "startLine": 129, "startColumn": 5, - "endLine": 143, + "endLine": 129, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupfromSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580953EC485", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 144, + "startLine": 150, "startColumn": 5, - "endLine": 144, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 150, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ServiceSecurityGroupC96ED6A7.GroupId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupfromSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580953EC485", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 150, + "startLine": 158, "startColumn": 5, - "endLine": 150, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 158, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -25754,138 +25398,121 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupfromSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580953EC485", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.SourceSecurityGroupId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 151, + "startLine": 174, "startColumn": 5, - "endLine": 151, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 174, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: SplitAtTargetGroup-LBStack:ExportsOutputFnGetAttLoadBalancerSecurityGroupA28D6DD7GroupId44BDE65A)" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupfromSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580953EC485", + "logicalId": "VpcPublicSubnet2RouteTable94F7E489", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 154, + "startLine": 191, "startColumn": 5, - "endLine": 154, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 191, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationSecurityGroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580from6A874A07", + "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.DestinationSecurityGroupId", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 167, + "startLine": 202, "startColumn": 5, - "endLine": 167, - "endColumn": 32, + "endLine": 202, + "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ServiceSecurityGroupC96ED6A7.GroupId" + "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580from6A874A07", + "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 173, + "startLine": 205, "startColumn": 5, - "endLine": 173, + "endLine": 205, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ServiceSecurityGroupSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580from6A874A07", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" - }, - "propertyPath": "Properties.GroupId", - "category": "Best Practice", - "startLine": 174, - "startColumn": 5, - "endLine": 174, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: SplitAtTargetGroup-LBStack:ExportsOutputFnGetAttLoadBalancerSecurityGroupA28D6DD7GroupId44BDE65A)" + "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580from6A874A07", + "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 177, + "startLine": 216, "startColumn": 5, - "endLine": 177, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 216, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -25895,226 +25522,71 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceSecurityGroupSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580from6A874A07", + "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 178, + "startLine": 220, "startColumn": 5, - "endLine": 178, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 220, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'" } }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TaskDefTaskRole1EDB4A67' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDefTaskRole1EDB4A67", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TaskDef54694570' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDef54694570", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 25, - "startColumn": 4, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ServiceD69D759B' of type 'AWS::ECS::Service' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ServiceD69D759B", - "entityType": "Resource", - "resourceType": "AWS::ECS::Service" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 60, - "startColumn": 4, - "endLine": 60, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ServiceSecurityGroupC96ED6A7' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ServiceSecurityGroupC96ED6A7", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 119, - "startColumn": 4, - "endLine": 119, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/ecs-ecs-service-with-logging--Willkommen.template.json": { - "filePath": "cdk/ecs-ecs-service-with-logging--Willkommen.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 46, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 3, - "informational": 71, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRole23116FA3' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionE0DEFB31", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 846, - "startColumn": 4, - "endLine": 846, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookRole71045ED7' dependency already enforced by a 'GetAtt' at 'Properties.RoleARN'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHook5CB1467E", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LifecycleHook" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 976, - "startColumn": 4, - "endLine": 976, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3697", - "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", - "source": "CFN_LINT", - "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "category": "Deprecation", - "startLine": 594, - "startColumn": 3, - "endLine": 594, - "endColumn": 57, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" - }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcF9F0CA6F", + "logicalId": "VpcPublicSubnet2NATGateway9182C01D", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 6, + "startLine": 249, "startColumn": 5, - "endLine": 6, - "endColumn": 15, + "endLine": 249, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt VpcPublicSubnet2EIP3C605A87.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcF9F0CA6F", + "logicalId": "VpcPublicSubnet2NATGateway9182C01D", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 9, + "startLine": 255, "startColumn": 5, - "endLine": 9, - "endColumn": 21, + "endLine": 255, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'" } }, { @@ -26123,15 +25595,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1SubnetF6608456", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 24, + "startLine": 276, "startColumn": 5, - "endLine": 24, + "endLine": 276, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -26145,15 +25617,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1SubnetF6608456", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 32, + "startLine": 284, "startColumn": 5, - "endLine": 32, + "endLine": 284, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -26167,21 +25639,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1SubnetF6608456", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 48, + "startLine": 300, "startColumn": 5, - "endLine": 48, + "endLine": 300, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -26190,22 +25662,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1RouteTableC46AB2F4", + "logicalId": "VpcPrivateSubnet1RouteTableB2C5B500", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 65, + "startLine": 317, "startColumn": 5, - "endLine": 65, + "endLine": 317, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -26214,22 +25686,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", + "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 76, + "startLine": 328, "startColumn": 5, - "endLine": 76, + "endLine": 328, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'", + "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'", "extra": { "replacement_strategy": "delete_then_create" } @@ -26241,22 +25713,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", + "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 79, + "startLine": 331, "startColumn": 5, - "endLine": 79, + "endLine": 331, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'", + "resolutionSource": "Ref to 'VpcPrivateSubnet1Subnet536B997A'", "extra": { "replacement_strategy": "delete_then_create" } @@ -26268,15 +25740,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", + "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 90, + "startLine": 342, "startColumn": 5, - "endLine": 90, + "endLine": 342, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -26291,68 +25763,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", + "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 94, + "startLine": 346, "startColumn": 5, - "endLine": 94, + "endLine": 346, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.AllocationId", - "category": "Best Practice", - "startLine": 123, - "startColumn": 5, - "endLine": 123, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt MyVpcPublicSubnet1EIP096967CB.AllocationId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 129, - "startColumn": 5, - "endLine": 129, - "endColumn": 14, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'" + "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'" } }, { @@ -26361,15 +25787,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 150, + "startLine": 357, "startColumn": 5, - "endLine": 150, + "endLine": 357, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -26383,15 +25809,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 158, + "startLine": 365, "startColumn": 5, - "endLine": 158, + "endLine": 365, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -26405,21 +25831,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 174, + "startLine": 381, "startColumn": 5, - "endLine": 174, + "endLine": 381, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -26428,22 +25854,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2RouteTable1DF17386", + "logicalId": "VpcPrivateSubnet2RouteTableA678073B", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 191, + "startLine": 398, "startColumn": 5, - "endLine": 191, + "endLine": 398, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -26452,22 +25878,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", + "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 202, + "startLine": 409, "startColumn": 5, - "endLine": 202, + "endLine": 409, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'", + "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'", "extra": { "replacement_strategy": "delete_then_create" } @@ -26479,22 +25905,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", + "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 205, + "startLine": 412, "startColumn": 5, - "endLine": 205, + "endLine": 412, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'", + "resolutionSource": "Ref to 'VpcPrivateSubnet2Subnet3788AAA1'", "extra": { "replacement_strategy": "delete_then_create" } @@ -26506,15 +25932,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", + "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 216, + "startLine": 423, "startColumn": 5, - "endLine": 216, + "endLine": 423, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -26529,86 +25955,107 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", + "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 220, + "startLine": 427, "startColumn": 5, - "endLine": 220, + "endLine": 427, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'" + "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", + "logicalId": "VpcVPCGWBF912B6E", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 249, + "startLine": 455, "startColumn": 5, - "endLine": 249, - "endColumn": 18, + "endLine": 455, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt MyVpcPublicSubnet2EIP8CCBA239.AllocationId" + "resolutionSource": "Ref to 'Vpc8378EB38'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'ClusterEB0386A7' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", + "logicalId": "ClusterEB0386A7", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::ECS::Cluster" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 255, - "startColumn": 5, - "endLine": 255, - "endColumn": 14, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'" - } + "startLine": 463, + "startColumn": 3, + "endLine": 463, + "endColumn": 19, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/ecs-cross-stack-load-balancer--SplitAtListener-LBStack.template.json": { + "filePath": "cdk/ecs-cross-stack-load-balancer--SplitAtListener-LBStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 6, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", + "logicalId": "LoadBalancerBE9EEC3A", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Scheme", "category": "Best Practice", - "startLine": 276, + "startLine": 12, "startColumn": 5, - "endLine": 276, - "endColumn": 22, + "endLine": 12, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -26618,19 +26065,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", + "logicalId": "LoadBalancerBE9EEC3A", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 284, + "startLine": 29, "startColumn": 5, - "endLine": 284, - "endColumn": 15, + "endLine": 29, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -26640,24 +26088,23 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", + "logicalId": "LoadBalancerSecurityGroupA28D6DD7", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 300, + "startLine": 38, "startColumn": 5, - "endLine": 300, - "endColumn": 11, + "endLine": 38, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "lifecycle": "create-only" } }, { @@ -26666,95 +26113,119 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1RouteTable8819E6E2", + "logicalId": "LoadBalancerSecurityGroupA28D6DD7", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 317, + "startLine": 48, "startColumn": 5, - "endLine": 317, + "endLine": 48, "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefVpc8378EB38272D6E3A)" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'LoadBalancerBE9EEC3A' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", + "logicalId": "LoadBalancerBE9EEC3A", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 328, - "startColumn": 5, - "endLine": 328, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'LoadBalancerSecurityGroupA28D6DD7' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", + "logicalId": "LoadBalancerSecurityGroupA28D6DD7", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 331, - "startColumn": 5, - "endLine": 331, + "startLine": 37, + "startColumn": 4, + "endLine": 37, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/ecs-cross-stack-load-balancer--SplitAtListener-ServiceStack.template.json": { + "filePath": "cdk/ecs-cross-stack-load-balancer--SplitAtListener-ServiceStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 9, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 32, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'ListenerECSGroup2EA4A011' dependency already enforced by a 'Ref' at 'Properties.LoadBalancers.0.TargetGroupArn'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ServiceD69D759B", + "entityType": "Resource", + "resourceType": "AWS::ECS::Service" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 110, + "startColumn": 4, + "endLine": 110, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet1Subnet5057CF7E'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 342, + "startLine": 26, "startColumn": 5, - "endLine": 342, + "endLine": 26, "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -26764,43 +26235,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 346, + "startLine": 40, "startColumn": 5, - "endLine": 346, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 40, + "endColumn": 9, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 357, + "startLine": 41, "startColumn": 5, - "endLine": 357, - "endColumn": 22, + "endLine": 41, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -26810,19 +26281,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 365, + "startLine": 42, "startColumn": 5, - "endLine": 365, - "endColumn": 15, + "endLine": 42, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -26832,149 +26304,138 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 381, + "startLine": 43, "startColumn": 5, - "endLine": 381, - "endColumn": 11, + "endLine": 43, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2RouteTableCEDCEECE", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 398, + "startLine": 44, "startColumn": 5, - "endLine": 398, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 44, + "endColumn": 29, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 409, + "startLine": 47, "startColumn": 5, - "endLine": 409, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 47, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt TaskDefTaskRole1EDB4A67.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", + "logicalId": "ServiceD69D759B", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 412, + "startLine": 61, "startColumn": 5, - "endLine": 412, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 61, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet2Subnet0040C983'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefClusterEB0386A796A0E3FE)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", + "logicalId": "ServiceD69D759B", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 423, + "startLine": 75, "startColumn": 5, - "endLine": 423, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 75, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", + "logicalId": "ServiceSecurityGroupC96ED6A7", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 427, + "startLine": 122, "startColumn": 5, - "endLine": 427, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 122, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'" + "lifecycle": "create-only" } }, { @@ -26983,43 +26444,40 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcVPCGW488ACE0D", + "logicalId": "ServiceSecurityGroupC96ED6A7", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 455, + "startLine": 130, "startColumn": 5, - "endLine": 455, + "endLine": 130, "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefVpc8378EB38272D6E3A)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupInstanceSecurityGroup149B0A9E", + "logicalId": "ServiceSecurityGroupfromSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680251D8C7D", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 472, + "startLine": 145, "startColumn": 5, - "endLine": 472, - "endColumn": 22, + "endLine": 145, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -27029,90 +26487,91 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupInstanceSecurityGroup149B0A9E", + "logicalId": "ServiceSecurityGroupfromSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680251D8C7D", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 486, + "startLine": 146, "startColumn": 5, - "endLine": 486, - "endColumn": 11, + "endLine": 146, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "GetAtt ServiceSecurityGroupC96ED6A7.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A", + "logicalId": "ServiceSecurityGroupfromSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680251D8C7D", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.IamInstanceProfile", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 597, + "startLine": 152, "startColumn": 5, - "endLine": 597, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 152, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Ec2ClusterDefaultAutoScalingGroupInstanceProfileDB232471'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A", + "logicalId": "ServiceSecurityGroupfromSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680251D8C7D", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.SourceSecurityGroupId", "category": "Best Practice", - "startLine": 600, + "startLine": 153, "startColumn": 5, - "endLine": 600, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 153, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import: SplitAtListener-LBStack:ExportsOutputFnGetAttLoadBalancerSecurityGroupA28D6DD7GroupId44BDE65A)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A", + "logicalId": "ServiceSecurityGroupfromSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680251D8C7D", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 603, + "startLine": 156, "startColumn": 5, - "endLine": 603, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 156, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -27122,111 +26581,114 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationSecurityGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A", + "logicalId": "ServiceSecurityGroupSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680from5771F1D9", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.SecurityGroups", + "propertyPath": "Properties.DestinationSecurityGroupId", "category": "Best Practice", - "startLine": 604, + "startLine": 169, "startColumn": 5, - "endLine": 604, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 169, + "endColumn": 32, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt ServiceSecurityGroupC96ED6A7.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A", + "logicalId": "ServiceSecurityGroupSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680from5771F1D9", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 612, + "startLine": 175, "startColumn": 5, - "endLine": 612, + "endLine": 175, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Base64 with unresolvable argument)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupASGC5A6D4C0", + "logicalId": "ServiceSecurityGroupSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680from5771F1D9", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.LaunchConfigurationName", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 638, + "startLine": 176, "startColumn": 5, - "endLine": 638, - "endColumn": 29, + "endLine": 176, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A'" + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import: SplitAtListener-LBStack:ExportsOutputFnGetAttLoadBalancerSecurityGroupA28D6DD7GroupId44BDE65A)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupASGC5A6D4C0", + "logicalId": "ServiceSecurityGroupSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680from5771F1D9", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.VPCZoneIdentifier", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 650, + "startLine": 179, "startColumn": 5, - "endLine": 650, - "endColumn": 23, + "endLine": 179, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeWillkommenEc2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic5835279F94354ECC", + "logicalId": "ServiceSecurityGroupSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680from5771F1D9", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 857, + "startLine": 180, "startColumn": 5, - "endLine": 857, + "endLine": 180, "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -27236,42 +26698,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeWillkommenEc2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic5835279F94354ECC", + "logicalId": "Listener828B0E81", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.LoadBalancerArn", "category": "Best Practice", - "startLine": 858, + "startLine": 200, "startColumn": 5, - "endLine": 858, - "endColumn": 18, + "endLine": 200, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionE0DEFB31.Arn" + "resolutionSource": "dynamic (cross-stack import: SplitAtListener-LBStack:ExportsOutputRefLoadBalancerBE9EEC3A2EF8C31C)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeWillkommenEc2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic5835279F94354ECC", + "logicalId": "ListenerECSGroup2EA4A011", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 864, + "startLine": 213, "startColumn": 5, - "endLine": 864, - "endColumn": 15, + "endLine": 213, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -27281,185 +26744,226 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeWillkommenEc2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic5835279F94354ECC", + "logicalId": "ListenerECSGroup2EA4A011", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 865, + "startLine": 214, "startColumn": 5, - "endLine": 865, - "endColumn": 15, + "endLine": 214, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopicF7263B30'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", + "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic4795E0F6", + "logicalId": "ListenerECSGroup2EA4A011", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Endpoint", + "propertyPath": "Properties.TargetType", "category": "Best Practice", - "startLine": 876, + "startLine": 221, "startColumn": 5, - "endLine": 876, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 221, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionE0DEFB31.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic4795E0F6", + "logicalId": "ListenerECSGroup2EA4A011", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 882, + "startLine": 222, "startColumn": 5, - "endLine": 882, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 222, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefVpc8378EB38272D6E3A)" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'TaskDefTaskRole1EDB4A67' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic4795E0F6", + "logicalId": "TaskDefTaskRole1EDB4A67", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.TopicArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 883, - "startColumn": 5, - "endLine": 883, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopicF7263B30'" - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", + "message": "Resource 'TaskDef54694570' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHook5CB1467E", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LifecycleHook" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.AutoScalingGroupName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 960, - "startColumn": 5, - "endLine": 960, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Ec2ClusterDefaultAutoScalingGroupASGC5A6D4C0'" - } + "startLine": 25, + "startColumn": 4, + "endLine": 25, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Resource 'ServiceD69D759B' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", + "logicalId": "ServiceD69D759B", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1007, - "startColumn": 5, - "endLine": 1007, - "endColumn": 26, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 60, + "startColumn": 4, + "endLine": 60, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'ServiceSecurityGroupC96ED6A7' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", + "logicalId": "ServiceSecurityGroupC96ED6A7", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ExecutionRoleArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1027, - "startColumn": 5, - "endLine": 1027, - "endColumn": 22, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt MyTaskDefinitionExecutionRole3D88C23D.Arn" - } + "startLine": 121, + "startColumn": 4, + "endLine": 121, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Listener828B0E81' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Listener828B0E81", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 191, + "startColumn": 4, + "endLine": 191, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ListenerECSGroup2EA4A011' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ListenerECSGroup2EA4A011", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 212, + "startColumn": 4, + "endLine": 212, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/ecs-cross-stack-load-balancer--SplitAtTargetGroup-LBStack.template.json": { + "filePath": "cdk/ecs-cross-stack-load-balancer--SplitAtTargetGroup-LBStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 13, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", + "logicalId": "LoadBalancerBE9EEC3A", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.Scheme", "category": "Best Practice", - "startLine": 1033, + "startLine": 12, "startColumn": 5, - "endLine": 1033, + "endLine": 12, "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -27469,20 +26973,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", + "logicalId": "LoadBalancerBE9EEC3A", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 1034, + "startLine": 29, "startColumn": 5, - "endLine": 1034, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 29, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -27492,20 +26996,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", + "logicalId": "LoadBalancerSecurityGroupA28D6DD7", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 1035, + "startLine": 38, "startColumn": 5, - "endLine": 1035, - "endColumn": 29, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 38, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -27515,88 +27018,88 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", + "logicalId": "LoadBalancerSecurityGroupA28D6DD7", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.TaskRoleArn", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1038, + "startLine": 48, "startColumn": 5, - "endLine": 1038, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 48, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt MyTaskDefinitionTaskRole93FBB305.Arn" + "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefVpc8378EB38272D6E3A)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", + "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2Service04A33183", + "logicalId": "LoadBalancerListenerE1A099B9", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "Properties.Cluster", + "propertyPath": "Properties.LoadBalancerArn", "category": "Best Practice", - "startLine": 1112, + "startLine": 67, "startColumn": 5, - "endLine": 1112, - "endColumn": 13, + "endLine": 67, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Ec2ClusterEE43E89D'" + "resolutionSource": "Ref to 'LoadBalancerBE9EEC3A'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2Service04A33183", + "logicalId": "TargetGroup3D7CD9B8", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.LaunchType", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 1125, + "startLine": 80, "startColumn": 5, - "endLine": 1125, - "endColumn": 16, + "endLine": 80, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SchedulingStrategy' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2Service04A33183", + "logicalId": "TargetGroup3D7CD9B8", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.SchedulingStrategy", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 1126, + "startLine": 81, "startColumn": 5, - "endLine": 1126, - "endColumn": 24, + "endLine": 81, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -27604,61 +27107,66 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Ec2ClusterEE43E89D' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2ClusterEE43E89D", + "logicalId": "TargetGroup3D7CD9B8", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.TargetType", "category": "Best Practice", - "startLine": 463, - "startColumn": 3, - "endLine": 463, - "endColumn": 22, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 88, + "startColumn": 5, + "endLine": 88, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyTaskDefinitionTaskRole93FBB305' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionTaskRole93FBB305", + "logicalId": "TargetGroup3D7CD9B8", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 986, - "startColumn": 4, - "endLine": 986, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 89, + "startColumn": 5, + "endLine": 89, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefVpc8378EB38272D6E3A)" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyTaskDefinitionF5B350B4' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'LoadBalancerBE9EEC3A' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", + "logicalId": "LoadBalancerBE9EEC3A", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1006, + "startLine": 5, "startColumn": 4, - "endLine": 1006, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -27666,39 +27174,39 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyTaskDefinitionAppContainerLogGroupA24DD1B6' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Resource 'LoadBalancerSecurityGroupA28D6DD7' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionAppContainerLogGroupA24DD1B6", + "logicalId": "LoadBalancerSecurityGroupA28D6DD7", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1049, - "startColumn": 3, - "endLine": 1049, - "endColumn": 48, + "startLine": 37, + "startColumn": 4, + "endLine": 37, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyTaskDefinitionExecutionRole3D88C23D' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'LoadBalancerListenerE1A099B9' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyTaskDefinitionExecutionRole3D88C23D", + "logicalId": "LoadBalancerListenerE1A099B9", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1059, + "startLine": 58, "startColumn": 4, - "endLine": 1059, + "endLine": 58, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -27706,35 +27214,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Ec2Service04A33183' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Resource 'TargetGroup3D7CD9B8' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Ec2Service04A33183", + "logicalId": "TargetGroup3D7CD9B8", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1111, + "startLine": 79, "startColumn": 4, - "endLine": 1111, + "endLine": 79, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/ecs-ecs-service-with-task-networking--ec2-service-with-task-networking.template.json": { - "filePath": "cdk/ecs-ecs-service-with-task-networking--ec2-service-with-task-networking.template.json", + "cdk/ecs-cross-stack-load-balancer--SplitAtTargetGroup-ServiceStack.template.json": { + "filePath": "cdk/ecs-cross-stack-load-balancer--SplitAtTargetGroup-ServiceStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 44, + "resourcesScanned": 7, "counts": { "fatal": 0, "errors": 0, - "warnings": 3, - "informational": 71, + "warnings": 0, + "informational": 25, "debug": 0 }, "suppressed": 0, @@ -27743,80 +27251,45 @@ }, "diagnostics": [ { - "ruleId": "W3005", - "severity": "WARN", - "message": "'awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRoleBC3C9F69' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionC919C385", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 846, - "startColumn": 4, - "endLine": 846, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 26, + "startColumn": 5, + "endLine": 26, + "endColumn": 26, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'awsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookRoleD0498D9C' dependency already enforced by a 'GetAtt' at 'Properties.RoleARN'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHook4D2DB763", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LifecycleHook" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 976, - "startColumn": 4, - "endLine": 976, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3697", - "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", - "source": "CFN_LINT", - "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "category": "Deprecation", - "startLine": 594, - "startColumn": 3, - "endLine": 594, - "endColumn": 67, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Vpc8378EB38", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 6, + "startLine": 40, "startColumn": 5, - "endLine": 6, - "endColumn": 15, + "endLine": 40, + "endColumn": 9, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -27826,41 +27299,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Vpc8378EB38", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 9, + "startLine": 41, "startColumn": 5, - "endLine": 9, - "endColumn": 21, + "endLine": 41, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 24, + "startLine": 42, "startColumn": 5, - "endLine": 24, - "endColumn": 22, + "endLine": 42, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -27870,19 +27345,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 32, + "startLine": 43, "startColumn": 5, - "endLine": 32, - "endColumn": 15, + "endLine": 43, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -27892,121 +27368,111 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 48, + "startLine": 44, "startColumn": 5, - "endLine": 48, - "endColumn": 11, + "endLine": 44, + "endColumn": 29, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTable6C95E38E", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 65, + "startLine": 47, "startColumn": 5, - "endLine": 65, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 47, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "GetAtt TaskDefTaskRole1EDB4A67.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", + "logicalId": "ServiceD69D759B", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 76, + "startLine": 61, "startColumn": 5, - "endLine": 76, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 61, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefClusterEB0386A796A0E3FE)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", + "logicalId": "ServiceD69D759B", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 79, + "startLine": 75, "startColumn": 5, - "endLine": 79, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 75, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", + "logicalId": "ServiceSecurityGroupC96ED6A7", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 90, + "startLine": 120, "startColumn": 5, - "endLine": 90, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 120, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -28016,89 +27482,90 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", + "logicalId": "ServiceSecurityGroupC96ED6A7", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 94, + "startLine": 128, "startColumn": 5, - "endLine": 94, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 128, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'" + "resolutionSource": "dynamic (cross-stack import: CrossStackLBInfra:ExportsOutputRefVpc8378EB38272D6E3A)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", + "logicalId": "ServiceSecurityGroupfromSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580953EC485", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 123, + "startLine": 143, "startColumn": 5, - "endLine": 123, - "endColumn": 18, + "endLine": 143, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcPublicSubnet1EIPD7E02669.AllocationId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", + "logicalId": "ServiceSecurityGroupfromSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580953EC485", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 129, + "startLine": 144, "startColumn": 5, - "endLine": 129, - "endColumn": 14, + "endLine": 144, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'" + "resolutionSource": "GetAtt ServiceSecurityGroupC96ED6A7.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "ServiceSecurityGroupfromSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580953EC485", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", "startLine": 150, "startColumn": 5, "endLine": 150, - "endColumn": 22, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -28108,143 +27575,138 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "ServiceSecurityGroupfromSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580953EC485", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.SourceSecurityGroupId", "category": "Best Practice", - "startLine": 158, + "startLine": 151, "startColumn": 5, - "endLine": 158, - "endColumn": 15, + "endLine": 151, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import: SplitAtTargetGroup-LBStack:ExportsOutputFnGetAttLoadBalancerSecurityGroupA28D6DD7GroupId44BDE65A)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "ServiceSecurityGroupfromSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580953EC485", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 174, + "startLine": 154, "startColumn": 5, - "endLine": 174, - "endColumn": 11, + "endLine": 154, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationSecurityGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTable94F7E489", + "logicalId": "ServiceSecurityGroupSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580from6A874A07", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.DestinationSecurityGroupId", "category": "Best Practice", - "startLine": 191, + "startLine": 167, "startColumn": 5, - "endLine": 191, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 167, + "endColumn": 32, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "GetAtt ServiceSecurityGroupC96ED6A7.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "logicalId": "ServiceSecurityGroupSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580from6A874A07", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 202, + "startLine": 173, "startColumn": 5, - "endLine": 202, - "endColumn": 18, + "endLine": 173, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "logicalId": "ServiceSecurityGroupSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580from6A874A07", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 205, + "startLine": 174, "startColumn": 5, - "endLine": 205, - "endColumn": 14, + "endLine": 174, + "endColumn": 13, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "dynamic (cross-stack import: SplitAtTargetGroup-LBStack:ExportsOutputFnGetAttLoadBalancerSecurityGroupA28D6DD7GroupId44BDE65A)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", + "logicalId": "ServiceSecurityGroupSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580from6A874A07", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 216, + "startLine": 177, "startColumn": 5, - "endLine": 216, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 177, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -28254,235 +27716,200 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", + "logicalId": "ServiceSecurityGroupSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580from6A874A07", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 220, + "startLine": 178, "startColumn": 5, - "endLine": 220, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 178, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Resource 'TaskDefTaskRole1EDB4A67' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2NATGateway9182C01D", + "logicalId": "TaskDefTaskRole1EDB4A67", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 249, - "startColumn": 5, - "endLine": 249, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcPublicSubnet2EIP3C605A87.AllocationId" - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'TaskDef54694570' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2NATGateway9182C01D", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 255, - "startColumn": 5, - "endLine": 255, - "endColumn": 14, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'" - } + "startLine": 25, + "startColumn": 4, + "endLine": 25, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Resource 'ServiceD69D759B' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "ServiceD69D759B", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 276, - "startColumn": 5, - "endLine": 276, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 60, + "startColumn": 4, + "endLine": 60, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'ServiceSecurityGroupC96ED6A7' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "ServiceSecurityGroupC96ED6A7", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 284, - "startColumn": 5, - "endLine": 284, + "startLine": 119, + "startColumn": 4, + "endLine": 119, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/ecs-ecs-service-with-logging--Willkommen.template.json": { + "filePath": "cdk/ecs-ecs-service-with-logging--Willkommen.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 46, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 3, + "informational": 71, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRole23116FA3' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionE0DEFB31", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 300, - "startColumn": 5, - "endLine": 300, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableB2C5B500", - "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 317, - "startColumn": 5, - "endLine": 317, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } + "startLine": 846, + "startColumn": 4, + "endLine": 846, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookRole71045ED7' dependency already enforced by a 'GetAtt' at 'Properties.RoleARN'", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHook5CB1467E", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::AutoScaling::LifecycleHook" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 328, - "startColumn": 5, - "endLine": 328, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 976, + "startColumn": 4, + "endLine": 976, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 331, - "startColumn": 5, - "endLine": 331, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1Subnet536B997A'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "category": "Deprecation", + "startLine": 594, + "startColumn": 3, + "endLine": 594, + "endColumn": 57, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "logicalId": "MyVpcF9F0CA6F", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 342, + "startLine": 6, "startColumn": 5, - "endLine": 342, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 6, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -28492,25 +27919,23 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "logicalId": "MyVpcF9F0CA6F", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 346, + "startLine": 9, "startColumn": 5, - "endLine": 346, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 9, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'" + "lifecycle": "conditional-create-only" } }, { @@ -28519,15 +27944,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "MyVpcPublicSubnet1SubnetF6608456", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 357, + "startLine": 24, "startColumn": 5, - "endLine": 357, + "endLine": 24, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -28541,15 +27966,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "MyVpcPublicSubnet1SubnetF6608456", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 365, + "startLine": 32, "startColumn": 5, - "endLine": 365, + "endLine": 32, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -28563,21 +27988,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "MyVpcPublicSubnet1SubnetF6608456", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 381, + "startLine": 48, "startColumn": 5, - "endLine": 381, + "endLine": 48, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -28586,22 +28011,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableA678073B", + "logicalId": "MyVpcPublicSubnet1RouteTableC46AB2F4", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 398, + "startLine": 65, "startColumn": 5, - "endLine": 398, + "endLine": 65, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -28610,22 +28035,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", + "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 409, + "startLine": 76, "startColumn": 5, - "endLine": 409, + "endLine": 76, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'", + "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'", "extra": { "replacement_strategy": "delete_then_create" } @@ -28637,22 +28062,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", + "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 412, + "startLine": 79, "startColumn": 5, - "endLine": 412, + "endLine": 79, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2Subnet3788AAA1'", + "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'", "extra": { "replacement_strategy": "delete_then_create" } @@ -28664,15 +28089,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", + "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 423, + "startLine": 90, "startColumn": 5, - "endLine": 423, + "endLine": 90, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -28687,319 +28112,324 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", + "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 427, + "startLine": 94, "startColumn": 5, - "endLine": 427, + "endLine": 94, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'" + "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcVPCGWBF912B6E", + "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 455, + "startLine": 123, "startColumn": 5, - "endLine": 455, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "endLine": 123, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt MyVpcPublicSubnet1EIP096967CB.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupInstanceSecurityGroupFF91CD80", + "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 472, + "startLine": 129, "startColumn": 5, - "endLine": 472, - "endColumn": 22, + "endLine": 129, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupInstanceSecurityGroupFF91CD80", + "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 486, + "startLine": 150, "startColumn": 5, - "endLine": 486, - "endColumn": 11, + "endLine": 150, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF", + "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.IamInstanceProfile", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 597, + "startLine": 158, "startColumn": 5, - "endLine": 597, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 158, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'awsvpcecsdemoclusterDefaultAutoScalingGroupInstanceProfileF3361609'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF", + "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 600, + "startLine": 174, "startColumn": 5, - "endLine": 600, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 174, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF", + "logicalId": "MyVpcPublicSubnet2RouteTable1DF17386", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 603, + "startLine": 191, "startColumn": 5, - "endLine": 603, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 191, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF", + "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.SecurityGroups", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 604, + "startLine": 202, "startColumn": 5, - "endLine": 604, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 202, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF", + "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 612, + "startLine": 205, "startColumn": 5, - "endLine": 612, + "endLine": 205, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Base64 with unresolvable argument)" + "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupASG7F29632B", + "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.LaunchConfigurationName", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 638, + "startLine": 216, "startColumn": 5, - "endLine": 638, - "endColumn": 29, + "endLine": 216, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupASG7F29632B", + "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.VPCZoneIdentifier", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 650, + "startLine": 220, "startColumn": 5, - "endLine": 650, - "endColumn": 23, + "endLine": 220, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeec2servicewithtasknetworkingawsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic582DD4BEABB08B98", + "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 857, + "startLine": 249, "startColumn": 5, - "endLine": 857, - "endColumn": 12, + "endLine": 249, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt MyVpcPublicSubnet2EIP8CCBA239.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeec2servicewithtasknetworkingawsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic582DD4BEABB08B98", + "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 858, + "startLine": 255, "startColumn": 5, - "endLine": 858, - "endColumn": 18, + "endLine": 255, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionC919C385.Arn" + "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeec2servicewithtasknetworkingawsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic582DD4BEABB08B98", + "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 864, + "startLine": 276, "startColumn": 5, - "endLine": 864, - "endColumn": 15, + "endLine": 276, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -29009,138 +28439,143 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeec2servicewithtasknetworkingawsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic582DD4BEABB08B98", + "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 865, + "startLine": 284, "startColumn": 5, - "endLine": 865, + "endLine": 284, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'awsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic42EE7A5C'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionTopicF27EF507", + "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Endpoint", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 876, + "startLine": 300, "startColumn": 5, - "endLine": 876, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 300, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionC919C385.Arn" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionTopicF27EF507", + "logicalId": "MyVpcPrivateSubnet1RouteTable8819E6E2", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 882, + "startLine": 317, "startColumn": 5, - "endLine": 882, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 317, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionTopicF27EF507", + "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.TopicArn", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 883, + "startLine": 328, "startColumn": 5, - "endLine": 883, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 328, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'awsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic42EE7A5C'" + "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHook4D2DB763", + "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LifecycleHook" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.AutoScalingGroupName", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 960, + "startLine": 331, "startColumn": 5, - "endLine": 960, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 331, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'awsvpcecsdemoclusterDefaultAutoScalingGroupASG7F29632B'" - } - }, + "resolutionSource": "Ref to 'MyVpcPrivateSubnet1Subnet5057CF7E'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nginxawspvcB396AC00", + "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 1007, + "startLine": 342, "startColumn": 5, - "endLine": 1007, + "endLine": 342, "endColumn": 26, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -29150,43 +28585,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nginxawspvcB396AC00", + "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 1030, + "startLine": 346, "startColumn": 5, - "endLine": 1030, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 346, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nginxawspvcB396AC00", + "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 1031, + "startLine": 357, "startColumn": 5, - "endLine": 1031, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 357, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -29196,20 +28631,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nginxawspvcB396AC00", + "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 1032, + "startLine": 365, "startColumn": 5, - "endLine": 1032, - "endColumn": 29, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 365, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -29219,333 +28653,264 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nginxawspvcB396AC00", + "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.TaskRoleArn", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1035, + "startLine": 381, "startColumn": 5, - "endLine": 1035, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 381, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt nginxawspvcTaskRole3F43A26E.Arn" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nginx76230F353007", + "logicalId": "MyVpcPrivateSubnet2RouteTableCEDCEECE", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1049, + "startLine": 398, "startColumn": 5, - "endLine": 1049, - "endColumn": 22, + "endLine": 398, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nginx76230F353007", + "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 1068, + "startLine": 409, "startColumn": 5, - "endLine": 1068, - "endColumn": 11, + "endLine": 409, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoserviceServiceFC4BE5C7", + "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Cluster", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 1079, + "startLine": 412, "startColumn": 5, - "endLine": 1079, - "endColumn": 13, + "endLine": 412, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'awsvpcecsdemoclusterA7FD8C86'" + "resolutionSource": "Ref to 'MyVpcPrivateSubnet2Subnet0040C983'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoserviceServiceFC4BE5C7", + "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.LaunchType", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 1092, + "startLine": 423, "startColumn": 5, - "endLine": 1092, - "endColumn": 16, + "endLine": 423, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SchedulingStrategy' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoserviceServiceFC4BE5C7", + "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.SchedulingStrategy", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 1114, + "startLine": 427, "startColumn": 5, - "endLine": 1114, - "endColumn": 24, + "endLine": 427, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'awsvpcecsdemoclusterA7FD8C86' of type 'AWS::ECS::Cluster' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "awsvpcecsdemoclusterA7FD8C86", - "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 463, - "startColumn": 3, - "endLine": 463, - "endColumn": 32, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'nginxawspvcTaskRole3F43A26E' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nginxawspvcTaskRole3F43A26E", + "logicalId": "MyVpcVPCGW488ACE0D", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 986, - "startColumn": 4, - "endLine": 986, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 455, + "startColumn": 5, + "endLine": 455, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'nginxawspvcB396AC00' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nginxawspvcB396AC00", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupInstanceSecurityGroup149B0A9E", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 1006, - "startColumn": 4, - "endLine": 1006, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 472, + "startColumn": 5, + "endLine": 472, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'nginx76230F353007' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "nginx76230F353007", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupInstanceSecurityGroup149B0A9E", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1048, - "startColumn": 4, - "endLine": 1048, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 486, + "startColumn": 5, + "endLine": 486, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'awsvpcecsdemoserviceServiceFC4BE5C7' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "awsvpcecsdemoserviceServiceFC4BE5C7", - "entityType": "Resource", - "resourceType": "AWS::ECS::Service" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1078, - "startColumn": 4, - "endLine": 1078, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/ecs-ecs-service-with-task-placement--sample-aws-ecs-integ-ecs.template.json": { - "filePath": "cdk/ecs-ecs-service-with-task-placement--sample-aws-ecs-integ-ecs.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 43, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 3, - "informational": 68, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRole94543EDA' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionE17A5F5E", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 846, - "startColumn": 4, - "endLine": 846, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'EcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookRoleA38EC83B' dependency already enforced by a 'GetAtt' at 'Properties.RoleARN'", - "source": "CFN_LINT", - "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookFFA63029", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LifecycleHook" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 976, - "startColumn": 4, - "endLine": 976, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3697", - "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", - "source": "CFN_LINT", - "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A", "entityType": "Resource", "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "category": "Deprecation", - "startLine": 594, - "startColumn": 3, - "endLine": 594, - "endColumn": 57, + "propertyPath": "Properties.IamInstanceProfile", + "category": "Best Practice", + "startLine": 597, + "startColumn": 5, + "endLine": 597, + "endColumn": 24, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Ec2ClusterDefaultAutoScalingGroupInstanceProfileDB232471'" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Vpc8378EB38", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 6, + "startLine": 600, "startColumn": 5, - "endLine": 6, - "endColumn": 15, + "endLine": 600, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -29555,41 +28920,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Vpc8378EB38", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 9, + "startLine": 603, "startColumn": 5, - "endLine": 9, - "endColumn": 21, + "endLine": 603, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.SecurityGroups", "category": "Best Practice", - "startLine": 24, + "startLine": 604, "startColumn": 5, - "endLine": 24, - "endColumn": 22, + "endLine": 604, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -29599,143 +28966,133 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'UserData' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 32, + "startLine": 612, "startColumn": 5, - "endLine": 32, - "endColumn": 15, + "endLine": 612, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Base64 with unresolvable argument)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupASGC5A6D4C0", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.LaunchConfigurationName", "category": "Best Practice", - "startLine": 48, + "startLine": 638, "startColumn": 5, - "endLine": 48, - "endColumn": 11, + "endLine": 638, + "endColumn": 29, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTable6C95E38E", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupASGC5A6D4C0", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.VPCZoneIdentifier", "category": "Best Practice", - "startLine": 65, + "startLine": 650, "startColumn": 5, - "endLine": 65, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 650, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeWillkommenEc2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic5835279F94354ECC", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 76, + "startLine": 857, "startColumn": 5, - "endLine": 76, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 857, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeWillkommenEc2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic5835279F94354ECC", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 79, + "startLine": 858, "startColumn": 5, - "endLine": 79, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 858, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionE0DEFB31.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeWillkommenEc2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic5835279F94354ECC", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 90, + "startLine": 864, "startColumn": 5, - "endLine": 90, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 864, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -29745,235 +29102,231 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeWillkommenEc2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic5835279F94354ECC", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 94, + "startLine": 865, "startColumn": 5, - "endLine": 94, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 865, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'" + "resolutionSource": "Ref to 'Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopicF7263B30'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic4795E0F6", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.Endpoint", "category": "Best Practice", - "startLine": 123, + "startLine": 876, "startColumn": 5, - "endLine": 123, - "endColumn": 18, + "endLine": 876, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcPublicSubnet1EIPD7E02669.AllocationId" + "resolutionSource": "GetAtt Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionE0DEFB31.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic4795E0F6", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 129, + "startLine": 882, "startColumn": 5, - "endLine": 129, + "endLine": 882, "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic4795E0F6", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.TopicArn", "category": "Best Practice", - "startLine": 150, + "startLine": 883, "startColumn": 5, - "endLine": 150, - "endColumn": 22, + "endLine": 883, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopicF7263B30'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHook5CB1467E", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AutoScaling::LifecycleHook" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.AutoScalingGroupName", "category": "Best Practice", - "startLine": 158, + "startLine": 960, "startColumn": 5, - "endLine": 158, - "endColumn": 15, + "endLine": 960, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Ec2ClusterDefaultAutoScalingGroupASGC5A6D4C0'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 174, + "startLine": 1007, "startColumn": 5, - "endLine": 174, - "endColumn": 11, + "endLine": 1007, + "endColumn": 26, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTable94F7E489", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ExecutionRoleArn", "category": "Best Practice", - "startLine": 191, + "startLine": 1027, "startColumn": 5, - "endLine": 191, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 1027, + "endColumn": 22, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "GetAtt MyTaskDefinitionExecutionRole3D88C23D.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 202, + "startLine": 1033, "startColumn": 5, - "endLine": 202, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 1033, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 205, + "startLine": 1034, "startColumn": 5, - "endLine": 205, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 1034, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 216, + "startLine": 1035, "startColumn": 5, - "endLine": 216, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 1035, + "endColumn": 29, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -29983,89 +29336,88 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 220, + "startLine": 1038, "startColumn": 5, - "endLine": 220, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 1038, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'" + "resolutionSource": "GetAtt MyTaskDefinitionTaskRole93FBB305.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2NATGateway9182C01D", + "logicalId": "Ec2Service04A33183", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 249, + "startLine": 1112, "startColumn": 5, - "endLine": 249, - "endColumn": 18, + "endLine": 1112, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcPublicSubnet2EIP3C605A87.AllocationId" + "resolutionSource": "Ref to 'Ec2ClusterEE43E89D'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2NATGateway9182C01D", + "logicalId": "Ec2Service04A33183", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 255, + "startLine": 1125, "startColumn": 5, - "endLine": 255, - "endColumn": 14, + "endLine": 1125, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'SchedulingStrategy' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "Ec2Service04A33183", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.SchedulingStrategy", "category": "Best Practice", - "startLine": 276, + "startLine": 1126, "startColumn": 5, - "endLine": 276, - "endColumn": 22, + "endLine": 1126, + "endColumn": 24, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -30073,190 +29425,262 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'Ec2ClusterEE43E89D' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "Ec2ClusterEE43E89D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::Cluster" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 284, - "startColumn": 5, - "endLine": 284, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 463, + "startColumn": 3, + "endLine": 463, + "endColumn": 22, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyTaskDefinitionTaskRole93FBB305' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "MyTaskDefinitionTaskRole93FBB305", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 300, - "startColumn": 5, - "endLine": 300, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } + "startLine": 986, + "startColumn": 4, + "endLine": 986, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyTaskDefinitionF5B350B4' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableB2C5B500", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 317, - "startColumn": 5, - "endLine": 317, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } + "startLine": 1006, + "startColumn": 4, + "endLine": 1006, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyTaskDefinitionAppContainerLogGroupA24DD1B6' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", + "logicalId": "MyTaskDefinitionAppContainerLogGroupA24DD1B6", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 328, - "startColumn": 5, - "endLine": 328, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 1049, + "startColumn": 3, + "endLine": 1049, + "endColumn": 48, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyTaskDefinitionExecutionRole3D88C23D' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", + "logicalId": "MyTaskDefinitionExecutionRole3D88C23D", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 331, - "startColumn": 5, - "endLine": 331, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1Subnet536B997A'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 1059, + "startColumn": 4, + "endLine": 1059, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'Ec2Service04A33183' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "logicalId": "Ec2Service04A33183", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 342, - "startColumn": 5, - "endLine": 342, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 1111, + "startColumn": 4, + "endLine": 1111, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/ecs-ecs-service-with-task-networking--ec2-service-with-task-networking.template.json": { + "filePath": "cdk/ecs-ecs-service-with-task-networking--ec2-service-with-task-networking.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 44, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 3, + "informational": 71, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRoleBC3C9F69' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionC919C385", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 346, - "startColumn": 5, - "endLine": 346, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'" - } + "startLine": 846, + "startColumn": 4, + "endLine": 846, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'awsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookRoleD0498D9C' dependency already enforced by a 'GetAtt' at 'Properties.RoleARN'", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHook4D2DB763", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AutoScaling::LifecycleHook" }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 357, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 976, + "startColumn": 4, + "endLine": 976, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "category": "Deprecation", + "startLine": 594, + "startColumn": 3, + "endLine": 594, + "endColumn": 67, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Vpc8378EB38", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 6, "startColumn": 5, - "endLine": 357, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Vpc8378EB38", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.InstanceTenancy", + "category": "Best Practice", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 24, + "startColumn": 5, + "endLine": 24, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -30270,15 +29694,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 365, + "startLine": 32, "startColumn": 5, - "endLine": 365, + "endLine": 32, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -30292,15 +29716,15 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 381, + "startLine": 48, "startColumn": 5, - "endLine": 381, + "endLine": 48, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -30315,15 +29739,15 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableA678073B", + "logicalId": "VpcPublicSubnet1RouteTable6C95E38E", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 398, + "startLine": 65, "startColumn": 5, - "endLine": 398, + "endLine": 65, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -30339,22 +29763,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", + "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 409, + "startLine": 76, "startColumn": 5, - "endLine": 409, + "endLine": 76, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'", + "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'", "extra": { "replacement_strategy": "delete_then_create" } @@ -30366,22 +29790,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", + "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 412, + "startLine": 79, "startColumn": 5, - "endLine": 412, + "endLine": 79, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2Subnet3788AAA1'", + "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'", "extra": { "replacement_strategy": "delete_then_create" } @@ -30393,15 +29817,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", + "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 423, + "startLine": 90, "startColumn": 5, - "endLine": 423, + "endLine": 90, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -30416,319 +29840,324 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", + "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 427, + "startLine": 94, "startColumn": 5, - "endLine": 427, + "endLine": 94, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'" + "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcVPCGWBF912B6E", + "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 455, + "startLine": 123, "startColumn": 5, - "endLine": 455, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "endLine": 123, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt VpcPublicSubnet1EIPD7E02669.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupInstanceSecurityGroup912E1231", + "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 472, + "startLine": 129, "startColumn": 5, - "endLine": 472, - "endColumn": 22, + "endLine": 129, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupInstanceSecurityGroup912E1231", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 486, + "startLine": 150, "startColumn": 5, - "endLine": 486, - "endColumn": 11, + "endLine": 150, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.IamInstanceProfile", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 597, + "startLine": 158, "startColumn": 5, - "endLine": 597, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 158, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'EcsClusterDefaultAutoScalingGroupInstanceProfile2CE606B3'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 600, + "startLine": 174, "startColumn": 5, - "endLine": 600, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 174, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1", + "logicalId": "VpcPublicSubnet2RouteTable94F7E489", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 603, + "startLine": 191, "startColumn": 5, - "endLine": 603, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 191, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1", + "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.SecurityGroups", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 604, + "startLine": 202, "startColumn": 5, - "endLine": 604, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 202, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1", + "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 612, + "startLine": 205, "startColumn": 5, - "endLine": 612, + "endLine": 205, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Base64 with unresolvable argument)" + "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupASGC1A785DB", + "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.LaunchConfigurationName", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 638, + "startLine": 216, "startColumn": 5, - "endLine": 638, - "endColumn": 29, + "endLine": 216, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupASGC1A785DB", + "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.VPCZoneIdentifier", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 650, + "startLine": 220, "startColumn": 5, - "endLine": 650, - "endColumn": 23, + "endLine": 220, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokesampleawsecsintegecsEcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic7D0FA5A858D2FF02", + "logicalId": "VpcPublicSubnet2NATGateway9182C01D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 857, + "startLine": 249, "startColumn": 5, - "endLine": 857, - "endColumn": 12, + "endLine": 249, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt VpcPublicSubnet2EIP3C605A87.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokesampleawsecsintegecsEcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic7D0FA5A858D2FF02", + "logicalId": "VpcPublicSubnet2NATGateway9182C01D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 858, + "startLine": 255, "startColumn": 5, - "endLine": 858, - "endColumn": 18, + "endLine": 255, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionE17A5F5E.Arn" + "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokesampleawsecsintegecsEcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic7D0FA5A858D2FF02", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 864, + "startLine": 276, "startColumn": 5, - "endLine": 864, - "endColumn": 15, + "endLine": 276, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -30738,138 +30167,143 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokesampleawsecsintegecsEcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic7D0FA5A858D2FF02", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 865, + "startLine": 284, "startColumn": 5, - "endLine": 865, + "endLine": 284, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'EcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopicACD2D4A4'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic8F34E394", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Endpoint", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 876, + "startLine": 300, "startColumn": 5, - "endLine": 876, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 300, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionE17A5F5E.Arn" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic8F34E394", + "logicalId": "VpcPrivateSubnet1RouteTableB2C5B500", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 882, + "startLine": 317, "startColumn": 5, - "endLine": 882, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 317, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic8F34E394", + "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.TopicArn", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 883, + "startLine": 328, "startColumn": 5, - "endLine": 883, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 328, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'EcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopicACD2D4A4'" + "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookFFA63029", + "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LifecycleHook" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.AutoScalingGroupName", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 960, + "startLine": 331, "startColumn": 5, - "endLine": 960, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 331, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'EcsClusterDefaultAutoScalingGroupASGC1A785DB'" + "resolutionSource": "Ref to 'VpcPrivateSubnet1Subnet536B997A'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 1007, + "startLine": 342, "startColumn": 5, - "endLine": 1007, + "endLine": 342, "endColumn": 26, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -30879,43 +30313,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 1022, + "startLine": 346, "startColumn": 5, - "endLine": 1022, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 346, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 1023, + "startLine": 357, "startColumn": 5, - "endLine": 1023, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 357, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -30925,20 +30359,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 1024, + "startLine": 365, "startColumn": 5, - "endLine": 1024, - "endColumn": 29, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 365, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -30948,273 +30381,264 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.TaskRoleArn", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1027, + "startLine": 381, "startColumn": 5, - "endLine": 1027, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 381, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt TaskDefTaskRole1EDB4A67.Arn" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceD69D759B", + "logicalId": "VpcPrivateSubnet2RouteTableA678073B", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Cluster", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1041, + "startLine": 398, "startColumn": 5, - "endLine": 1041, - "endColumn": 13, + "endLine": 398, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'EcsCluster97242B84'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceD69D759B", + "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.LaunchType", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 1054, + "startLine": 409, "startColumn": 5, - "endLine": 1054, - "endColumn": 16, + "endLine": 409, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SchedulingStrategy' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceD69D759B", + "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.SchedulingStrategy", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 1070, + "startLine": 412, "startColumn": 5, - "endLine": 1070, - "endColumn": 24, + "endLine": 412, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet2Subnet3788AAA1'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'EcsCluster97242B84' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EcsCluster97242B84", + "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 463, - "startColumn": 3, - "endLine": 463, - "endColumn": 22, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 423, + "startColumn": 5, + "endLine": 423, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TaskDefTaskRole1EDB4A67' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDefTaskRole1EDB4A67", + "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 986, - "startColumn": 4, - "endLine": 986, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 427, + "startColumn": 5, + "endLine": 427, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TaskDef54694570' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef54694570", + "logicalId": "VpcVPCGWBF912B6E", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1006, - "startColumn": 4, - "endLine": 1006, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 455, + "startColumn": 5, + "endLine": 455, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ServiceD69D759B' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceD69D759B", - "entityType": "Resource", - "resourceType": "AWS::ECS::Service" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1040, - "startColumn": 4, - "endLine": 1040, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/ecs-fargate-application-load-balanced-service--Bonjour.template.json": { - "filePath": "cdk/ecs-fargate-application-load-balanced-service--Bonjour.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 38, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 81, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FargateServiceLBPublicListenerECSGroupBE57E081' dependency already enforced by a 'Ref' at 'Properties.LoadBalancers.0.TargetGroupArn'", - "source": "CFN_LINT", - "entity": { - "logicalId": "FargateServiceECC8084D", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupInstanceSecurityGroupFF91CD80", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 777, - "startColumn": 4, - "endLine": 777, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 472, + "startColumn": 5, + "endLine": 472, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcF9F0CA6F", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupInstanceSecurityGroupFF91CD80", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 6, + "startLine": 486, "startColumn": 5, - "endLine": 6, - "endColumn": 15, + "endLine": 486, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcF9F0CA6F", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.IamInstanceProfile", "category": "Best Practice", - "startLine": 9, + "startLine": 597, "startColumn": 5, - "endLine": 9, - "endColumn": 21, + "endLine": 597, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'awsvpcecsdemoclusterDefaultAutoScalingGroupInstanceProfileF3361609'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1SubnetF6608456", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 24, + "startLine": 600, "startColumn": 5, - "endLine": 24, - "endColumn": 22, + "endLine": 600, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -31224,19 +30648,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1SubnetF6608456", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 32, + "startLine": 603, "startColumn": 5, - "endLine": 32, - "endColumn": 15, + "endLine": 603, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -31246,121 +30671,111 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1SubnetF6608456", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.SecurityGroups", "category": "Best Practice", - "startLine": 48, + "startLine": 604, "startColumn": 5, - "endLine": 48, - "endColumn": 11, + "endLine": 604, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'UserData' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1RouteTableC46AB2F4", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 65, + "startLine": 612, "startColumn": 5, - "endLine": 65, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 612, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "dynamic (Base64 with unresolvable argument)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupASG7F29632B", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.LaunchConfigurationName", "category": "Best Practice", - "startLine": 76, + "startLine": 638, "startColumn": 5, - "endLine": 76, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 638, + "endColumn": 29, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupASG7F29632B", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.VPCZoneIdentifier", "category": "Best Practice", - "startLine": 79, + "startLine": 650, "startColumn": 5, - "endLine": 79, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 650, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeec2servicewithtasknetworkingawsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic582DD4BEABB08B98", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 90, + "startLine": 857, "startColumn": 5, - "endLine": 90, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 857, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -31370,111 +30785,112 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeec2servicewithtasknetworkingawsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic582DD4BEABB08B98", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 94, + "startLine": 858, "startColumn": 5, - "endLine": 94, + "endLine": 858, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'" + "resolutionSource": "GetAtt awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionC919C385.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeec2servicewithtasknetworkingawsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic582DD4BEABB08B98", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 123, + "startLine": 864, "startColumn": 5, - "endLine": 123, - "endColumn": 18, + "endLine": 864, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt MyVpcPublicSubnet1EIP096967CB.AllocationId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeec2servicewithtasknetworkingawsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic582DD4BEABB08B98", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 129, + "startLine": 865, "startColumn": 5, - "endLine": 129, - "endColumn": 14, + "endLine": 865, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'" + "resolutionSource": "Ref to 'awsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic42EE7A5C'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionTopicF27EF507", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Endpoint", "category": "Best Practice", - "startLine": 150, + "startLine": 876, "startColumn": 5, - "endLine": 150, - "endColumn": 22, + "endLine": 876, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionC919C385.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionTopicF27EF507", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 158, + "startLine": 882, "startColumn": 5, - "endLine": 158, - "endColumn": 15, + "endLine": 882, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -31484,121 +30900,114 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionTopicF27EF507", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.TopicArn", "category": "Best Practice", - "startLine": 174, + "startLine": 883, "startColumn": 5, - "endLine": 174, - "endColumn": 11, + "endLine": 883, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'awsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic42EE7A5C'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2RouteTable1DF17386", + "logicalId": "awsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHook4D2DB763", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::AutoScaling::LifecycleHook" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.AutoScalingGroupName", "category": "Best Practice", - "startLine": 191, + "startLine": 960, "startColumn": 5, - "endLine": 191, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 960, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'awsvpcecsdemoclusterDefaultAutoScalingGroupASG7F29632B'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", + "logicalId": "nginxawspvcB396AC00", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 202, + "startLine": 1007, "startColumn": 5, - "endLine": 202, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 1007, + "endColumn": 26, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", + "logicalId": "nginxawspvcB396AC00", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 205, + "startLine": 1030, "startColumn": 5, - "endLine": 205, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 1030, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", + "logicalId": "nginxawspvcB396AC00", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 216, + "startLine": 1031, "startColumn": 5, - "endLine": 216, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 1031, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -31608,235 +31017,356 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", + "logicalId": "nginxawspvcB396AC00", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 220, + "startLine": 1032, "startColumn": 5, - "endLine": 220, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 1032, + "endColumn": 29, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", + "logicalId": "nginxawspvcB396AC00", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 249, + "startLine": 1035, "startColumn": 5, - "endLine": 249, - "endColumn": 18, + "endLine": 1035, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt MyVpcPublicSubnet2EIP8CCBA239.AllocationId" + "resolutionSource": "GetAtt nginxawspvcTaskRole3F43A26E.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", + "logicalId": "nginx76230F353007", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 255, + "startLine": 1049, "startColumn": 5, - "endLine": 255, - "endColumn": 14, + "endLine": 1049, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", + "logicalId": "nginx76230F353007", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 276, + "startLine": 1068, "startColumn": 5, - "endLine": 276, - "endColumn": 22, + "endLine": 1068, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", + "logicalId": "awsvpcecsdemoserviceServiceFC4BE5C7", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 284, + "startLine": 1079, "startColumn": 5, - "endLine": 284, - "endColumn": 15, + "endLine": 1079, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'awsvpcecsdemoclusterA7FD8C86'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", + "logicalId": "awsvpcecsdemoserviceServiceFC4BE5C7", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 300, + "startLine": 1092, "startColumn": 5, - "endLine": 300, - "endColumn": 11, + "endLine": 1092, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'SchedulingStrategy' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1RouteTable8819E6E2", + "logicalId": "awsvpcecsdemoserviceServiceFC4BE5C7", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.SchedulingStrategy", "category": "Best Practice", - "startLine": 317, + "startLine": 1114, "startColumn": 5, - "endLine": 317, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 1114, + "endColumn": 24, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'awsvpcecsdemoclusterA7FD8C86' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", + "logicalId": "awsvpcecsdemoclusterA7FD8C86", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ECS::Cluster" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 328, - "startColumn": 5, - "endLine": 328, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 463, + "startColumn": 3, + "endLine": 463, + "endColumn": 32, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'nginxawspvcTaskRole3F43A26E' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", + "logicalId": "nginxawspvcTaskRole3F43A26E", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 331, - "startColumn": 5, - "endLine": 331, + "startLine": 986, + "startColumn": 4, + "endLine": 986, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'nginxawspvcB396AC00' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "nginxawspvcB396AC00", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1006, + "startColumn": 4, + "endLine": 1006, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'nginx76230F353007' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "nginx76230F353007", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1048, + "startColumn": 4, + "endLine": 1048, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'awsvpcecsdemoserviceServiceFC4BE5C7' of type 'AWS::ECS::Service' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "awsvpcecsdemoserviceServiceFC4BE5C7", + "entityType": "Resource", + "resourceType": "AWS::ECS::Service" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1078, + "startColumn": 4, + "endLine": 1078, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/ecs-ecs-service-with-task-placement--sample-aws-ecs-integ-ecs.template.json": { + "filePath": "cdk/ecs-ecs-service-with-task-placement--sample-aws-ecs-integ-ecs.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 43, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 3, + "informational": 68, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRole94543EDA' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionE17A5F5E", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 846, + "startColumn": 4, + "endLine": 846, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet1Subnet5057CF7E'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'EcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookRoleA38EC83B' dependency already enforced by a 'GetAtt' at 'Properties.RoleARN'", + "source": "CFN_LINT", + "entity": { + "logicalId": "EcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookFFA63029", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LifecycleHook" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 976, + "startColumn": 4, + "endLine": 976, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "category": "Deprecation", + "startLine": 594, + "startColumn": 3, + "endLine": 594, + "endColumn": 57, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", + "logicalId": "Vpc8378EB38", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 342, + "startLine": 6, "startColumn": 5, - "endLine": 342, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 6, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -31846,25 +31376,23 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", + "logicalId": "Vpc8378EB38", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 346, + "startLine": 9, "startColumn": 5, - "endLine": 346, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 9, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'" + "lifecycle": "conditional-create-only" } }, { @@ -31873,15 +31401,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 357, + "startLine": 24, "startColumn": 5, - "endLine": 357, + "endLine": 24, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -31895,15 +31423,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 365, + "startLine": 32, "startColumn": 5, - "endLine": 365, + "endLine": 32, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -31917,21 +31445,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 381, + "startLine": 48, "startColumn": 5, - "endLine": 381, + "endLine": 48, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -31940,22 +31468,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2RouteTableCEDCEECE", + "logicalId": "VpcPublicSubnet1RouteTable6C95E38E", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 398, + "startLine": 65, "startColumn": 5, - "endLine": 398, + "endLine": 65, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -31964,22 +31492,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", + "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 409, + "startLine": 76, "startColumn": 5, - "endLine": 409, + "endLine": 76, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'", + "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'", "extra": { "replacement_strategy": "delete_then_create" } @@ -31991,22 +31519,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", + "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 412, + "startLine": 79, "startColumn": 5, - "endLine": 412, + "endLine": 79, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet2Subnet0040C983'", + "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'", "extra": { "replacement_strategy": "delete_then_create" } @@ -32018,15 +31546,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", + "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 423, + "startLine": 90, "startColumn": 5, - "endLine": 423, + "endLine": 90, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -32041,91 +31569,86 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", + "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 427, + "startLine": 94, "startColumn": 5, - "endLine": 427, + "endLine": 94, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'" + "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcVPCGW488ACE0D", + "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 455, + "startLine": 123, "startColumn": 5, - "endLine": 455, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "endLine": 123, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt VpcPublicSubnet1EIPD7E02669.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBB353E155", + "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Scheme", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 478, + "startLine": 129, "startColumn": 5, - "endLine": 478, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endLine": 129, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBB353E155", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 495, + "startLine": 150, "startColumn": 5, - "endLine": 495, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endLine": 150, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -32135,19 +31658,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBSecurityGroup5F444C78", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 510, + "startLine": 158, "startColumn": 5, - "endLine": 510, - "endColumn": 22, + "endLine": 158, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -32160,111 +31683,118 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBSecurityGroup5F444C78", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 520, + "startLine": 174, "startColumn": 5, - "endLine": 520, + "endLine": 174, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationSecurityGroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBSecurityGrouptoBonjourFargateServiceSecurityGroupB8A86CBA80181B6C73", + "logicalId": "VpcPublicSubnet2RouteTable94F7E489", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.DestinationSecurityGroupId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 532, + "startLine": 191, "startColumn": 5, - "endLine": 532, - "endColumn": 32, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 191, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateServiceSecurityGroup262B61DD.GroupId" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBSecurityGrouptoBonjourFargateServiceSecurityGroupB8A86CBA80181B6C73", + "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 538, + "startLine": 202, "startColumn": 5, - "endLine": 538, - "endColumn": 14, + "endLine": 202, + "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBSecurityGrouptoBonjourFargateServiceSecurityGroupB8A86CBA80181B6C73", + "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 539, + "startLine": 205, "startColumn": 5, - "endLine": 539, - "endColumn": 13, + "endLine": 205, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateServiceLBSecurityGroup5F444C78.GroupId" + "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBSecurityGrouptoBonjourFargateServiceSecurityGroupB8A86CBA80181B6C73", + "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 545, + "startLine": 216, "startColumn": 5, - "endLine": 545, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 216, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -32274,88 +31804,89 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBSecurityGrouptoBonjourFargateServiceSecurityGroupB8A86CBA80181B6C73", + "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 546, + "startLine": 220, "startColumn": 5, - "endLine": 546, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 220, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBPublicListener4B4929CA", + "logicalId": "VpcPublicSubnet2NATGateway9182C01D", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.LoadBalancerArn", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 563, + "startLine": 249, "startColumn": 5, - "endLine": 563, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", + "endLine": 249, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'FargateServiceLBB353E155'" + "resolutionSource": "GetAtt VpcPublicSubnet2EIP3C605A87.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBPublicListenerECSGroupBE57E081", + "logicalId": "VpcPublicSubnet2NATGateway9182C01D", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 576, + "startLine": 255, "startColumn": 5, - "endLine": 576, - "endColumn": 10, + "endLine": 255, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBPublicListenerECSGroupBE57E081", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 577, + "startLine": 276, "startColumn": 5, - "endLine": 577, - "endColumn": 14, + "endLine": 276, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -32365,19 +31896,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBPublicListenerECSGroupBE57E081", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.TargetType", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 584, + "startLine": 284, "startColumn": 5, - "endLine": 584, - "endColumn": 16, + "endLine": 284, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -32390,110 +31921,118 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBPublicListenerECSGroupBE57E081", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 585, + "startLine": 300, "startColumn": 5, - "endLine": 585, + "endLine": 300, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceTaskDef940E3A80", + "logicalId": "VpcPrivateSubnet1RouteTableB2C5B500", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 616, + "startLine": 317, "startColumn": 5, - "endLine": 616, - "endColumn": 26, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 317, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceTaskDef940E3A80", + "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 641, + "startLine": 328, "startColumn": 5, - "endLine": 641, - "endColumn": 9, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 328, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceTaskDef940E3A80", + "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.ExecutionRoleArn", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 642, + "startLine": 331, "startColumn": 5, - "endLine": 642, - "endColumn": 22, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 331, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateServiceTaskDefExecutionRole9194820E.Arn" + "resolutionSource": "Ref to 'VpcPrivateSubnet1Subnet536B997A'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceTaskDef940E3A80", + "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 648, + "startLine": 342, "startColumn": 5, - "endLine": 648, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 342, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -32503,43 +32042,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceTaskDef940E3A80", + "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 649, + "startLine": 346, "startColumn": 5, - "endLine": 649, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 346, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceTaskDef940E3A80", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 650, + "startLine": 357, "startColumn": 5, - "endLine": 650, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 357, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -32549,20 +32088,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceTaskDef940E3A80", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 651, + "startLine": 365, "startColumn": 5, - "endLine": 651, - "endColumn": 29, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 365, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -32572,181 +32110,194 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceTaskDef940E3A80", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.TaskRoleArn", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 654, + "startLine": 381, "startColumn": 5, - "endLine": 654, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 381, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateServiceTaskDefTaskRole8CDCF85E.Arn" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceECC8084D", + "logicalId": "VpcPrivateSubnet2RouteTableA678073B", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Cluster", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 728, + "startLine": 398, "startColumn": 5, - "endLine": 728, - "endColumn": 13, + "endLine": 398, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ClusterEB0386A7'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceECC8084D", + "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.LaunchType", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 742, + "startLine": 409, "startColumn": 5, - "endLine": 742, - "endColumn": 16, + "endLine": 409, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceSecurityGroup262B61DD", + "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 789, + "startLine": 412, "startColumn": 5, - "endLine": 789, - "endColumn": 22, + "endLine": 412, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet2Subnet3788AAA1'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceSecurityGroup262B61DD", + "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 797, + "startLine": 423, "startColumn": 5, - "endLine": 797, - "endColumn": 11, + "endLine": 423, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceSecurityGroupfromBonjourFargateServiceLBSecurityGroup660CF9B080C7AA015A", + "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 812, + "startLine": 427, "startColumn": 5, - "endLine": 812, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 427, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceSecurityGroupfromBonjourFargateServiceLBSecurityGroup660CF9B080C7AA015A", + "logicalId": "VpcVPCGWBF912B6E", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 813, + "startLine": 455, "startColumn": 5, - "endLine": 813, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 455, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateServiceSecurityGroup262B61DD.GroupId" + "resolutionSource": "Ref to 'Vpc8378EB38'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceSecurityGroupfromBonjourFargateServiceLBSecurityGroup660CF9B080C7AA015A", + "logicalId": "EcsClusterDefaultAutoScalingGroupInstanceSecurityGroup912E1231", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 819, + "startLine": 472, "startColumn": 5, - "endLine": 819, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 472, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -32756,369 +32307,390 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceSecurityGroupfromBonjourFargateServiceLBSecurityGroup660CF9B080C7AA015A", + "logicalId": "EcsClusterDefaultAutoScalingGroupInstanceSecurityGroup912E1231", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.SourceSecurityGroupId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 820, + "startLine": 486, "startColumn": 5, - "endLine": 820, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 486, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateServiceLBSecurityGroup5F444C78.GroupId" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceSecurityGroupfromBonjourFargateServiceLBSecurityGroup660CF9B080C7AA015A", + "logicalId": "EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.IamInstanceProfile", "category": "Best Practice", - "startLine": 826, + "startLine": 597, "startColumn": 5, - "endLine": 826, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 597, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'EcsClusterDefaultAutoScalingGroupInstanceProfile2CE606B3'" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ClusterEB0386A7' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterEB0386A7", + "logicalId": "EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 463, - "startColumn": 3, - "endLine": 463, - "endColumn": 19, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 600, + "startColumn": 5, + "endLine": 600, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateServiceLBB353E155' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBB353E155", + "logicalId": "EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 471, - "startColumn": 4, - "endLine": 471, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 603, + "startColumn": 5, + "endLine": 603, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateServiceLBSecurityGroup5F444C78' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBSecurityGroup5F444C78", + "logicalId": "EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SecurityGroups", "category": "Best Practice", - "startLine": 509, - "startColumn": 4, - "endLine": 509, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 604, + "startColumn": 5, + "endLine": 604, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateServiceLBPublicListener4B4929CA' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", + "message": "Property 'UserData' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBPublicListener4B4929CA", + "logicalId": "EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 554, - "startColumn": 4, - "endLine": 554, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 612, + "startColumn": 5, + "endLine": 612, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Base64 with unresolvable argument)" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateServiceLBPublicListenerECSGroupBE57E081' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceLBPublicListenerECSGroupBE57E081", + "logicalId": "EcsClusterDefaultAutoScalingGroupASGC1A785DB", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.LaunchConfigurationName", "category": "Best Practice", - "startLine": 575, - "startColumn": 4, - "endLine": 575, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 638, + "startColumn": 5, + "endLine": 638, + "endColumn": 29, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateServiceTaskDefTaskRole8CDCF85E' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceTaskDefTaskRole8CDCF85E", + "logicalId": "EcsClusterDefaultAutoScalingGroupASGC1A785DB", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VPCZoneIdentifier", "category": "Best Practice", - "startLine": 595, - "startColumn": 4, - "endLine": 595, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 650, + "startColumn": 5, + "endLine": 650, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateServiceTaskDef940E3A80' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceTaskDef940E3A80", + "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokesampleawsecsintegecsEcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic7D0FA5A858D2FF02", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 615, - "startColumn": 4, - "endLine": 615, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 857, + "startColumn": 5, + "endLine": 857, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateServiceTaskDefwebLogGroup71FAF541' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceTaskDefwebLogGroup71FAF541", + "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokesampleawsecsintegecsEcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic7D0FA5A858D2FF02", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 665, - "startColumn": 3, - "endLine": 665, - "endColumn": 44, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 858, + "startColumn": 5, + "endLine": 858, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionE17A5F5E.Arn" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateServiceTaskDefExecutionRole9194820E' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceTaskDefExecutionRole9194820E", + "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokesampleawsecsintegecsEcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic7D0FA5A858D2FF02", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 675, - "startColumn": 4, - "endLine": 675, + "startLine": 864, + "startColumn": 5, + "endLine": 864, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateServiceECC8084D' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceECC8084D", + "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokesampleawsecsintegecsEcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic7D0FA5A858D2FF02", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 727, - "startColumn": 4, - "endLine": 727, + "startLine": 865, + "startColumn": 5, + "endLine": 865, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'EcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopicACD2D4A4'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateServiceSecurityGroup262B61DD' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateServiceSecurityGroup262B61DD", + "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic8F34E394", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Endpoint", "category": "Best Practice", - "startLine": 788, - "startColumn": 4, - "endLine": 788, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/ecs-fargate-service-with-auto-scaling--aws-fargate-application-autoscaling.template.json": { - "filePath": "cdk/ecs-fargate-service-with-auto-scaling--aws-fargate-application-autoscaling.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 37, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 74, - "debug": 0 + "startLine": 876, + "startColumn": 5, + "endLine": 876, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionE17A5F5E.Arn" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W3005", - "severity": "WARN", - "message": "'sampleappLBPublicListenerECSGroup525A567D' dependency already enforced by a 'Ref' at 'Properties.LoadBalancers.0.TargetGroupArn'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "sampleappServiceE7504FDB", + "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic8F34E394", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 718, - "startColumn": 4, - "endLine": 718, + "startLine": 882, + "startColumn": 5, + "endLine": 882, "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Vpc8378EB38", + "logicalId": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic8F34E394", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.TopicArn", "category": "Best Practice", - "startLine": 6, + "startLine": 883, "startColumn": 5, - "endLine": 6, - "endColumn": 15, + "endLine": 883, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'EcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopicACD2D4A4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Vpc8378EB38", + "logicalId": "EcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookFFA63029", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::AutoScaling::LifecycleHook" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.AutoScalingGroupName", "category": "Best Practice", - "startLine": 9, + "startLine": 960, "startColumn": 5, - "endLine": 9, - "endColumn": 21, + "endLine": 960, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'EcsClusterDefaultAutoScalingGroupASGC1A785DB'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 24, + "startLine": 1007, "startColumn": 5, - "endLine": 24, - "endColumn": 22, + "endLine": 1007, + "endColumn": 26, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -33128,19 +32700,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 32, + "startLine": 1022, "startColumn": 5, - "endLine": 32, - "endColumn": 15, + "endLine": 1022, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -33150,136 +32723,480 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 48, + "startLine": 1023, "startColumn": 5, - "endLine": 48, - "endColumn": 11, + "endLine": 1023, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTable6C95E38E", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 65, + "startLine": 1024, "startColumn": 5, - "endLine": 65, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 1024, + "endColumn": 29, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", + "logicalId": "TaskDef54694570", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 76, + "startLine": 1027, "startColumn": 5, - "endLine": 76, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 1027, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt TaskDefTaskRole1EDB4A67.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", + "logicalId": "ServiceD69D759B", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 79, + "startLine": 1041, "startColumn": 5, - "endLine": 79, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 1041, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "Ref to 'EcsCluster97242B84'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", + "logicalId": "ServiceD69D759B", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 90, + "startLine": 1054, "startColumn": 5, - "endLine": 90, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 1054, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'SchedulingStrategy' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", + "logicalId": "ServiceD69D759B", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ECS::Service" + }, + "propertyPath": "Properties.SchedulingStrategy", + "category": "Best Practice", + "startLine": 1070, + "startColumn": 5, + "endLine": 1070, + "endColumn": 24, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'EcsCluster97242B84' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "EcsCluster97242B84", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 463, + "startColumn": 3, + "endLine": 463, + "endColumn": 22, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TaskDefTaskRole1EDB4A67' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "TaskDefTaskRole1EDB4A67", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 986, + "startColumn": 4, + "endLine": 986, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TaskDef54694570' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "TaskDef54694570", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1006, + "startColumn": 4, + "endLine": 1006, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ServiceD69D759B' of type 'AWS::ECS::Service' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ServiceD69D759B", + "entityType": "Resource", + "resourceType": "AWS::ECS::Service" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1040, + "startColumn": 4, + "endLine": 1040, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/ecs-fargate-application-load-balanced-service--Bonjour.template.json": { + "filePath": "cdk/ecs-fargate-application-load-balanced-service--Bonjour.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 38, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 81, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'FargateServiceLBPublicListenerECSGroupBE57E081' dependency already enforced by a 'Ref' at 'Properties.LoadBalancers.0.TargetGroupArn'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FargateServiceECC8084D", + "entityType": "Resource", + "resourceType": "AWS::ECS::Service" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 777, + "startColumn": 4, + "endLine": 777, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyVpcF9F0CA6F", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyVpcF9F0CA6F", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.InstanceTenancy", + "category": "Best Practice", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyVpcPublicSubnet1SubnetF6608456", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 24, + "startColumn": 5, + "endLine": 24, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyVpcPublicSubnet1SubnetF6608456", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 32, + "startColumn": 5, + "endLine": 32, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyVpcPublicSubnet1SubnetF6608456", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 48, + "startColumn": 5, + "endLine": 48, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyVpcPublicSubnet1RouteTableC46AB2F4", + "entityType": "Resource", + "resourceType": "AWS::EC2::RouteTable" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 65, + "startColumn": 5, + "endLine": 65, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 76, + "startColumn": 5, + "endLine": 76, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 79, + "startColumn": 5, + "endLine": 79, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" + }, + "propertyPath": "Properties.DestinationCidrBlock", + "category": "Best Practice", + "startLine": 90, + "startColumn": 5, + "endLine": 90, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", @@ -33292,7 +33209,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'" + "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'" } }, { @@ -33301,7 +33218,7 @@ "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", + "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, @@ -33315,7 +33232,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcPublicSubnet1EIPD7E02669.AllocationId" + "resolutionSource": "GetAtt MyVpcPublicSubnet1EIP096967CB.AllocationId" } }, { @@ -33324,7 +33241,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", + "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, @@ -33338,7 +33255,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'" + "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'" } }, { @@ -33347,7 +33264,7 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -33369,7 +33286,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -33391,7 +33308,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -33405,7 +33322,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -33414,7 +33331,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTable94F7E489", + "logicalId": "MyVpcPublicSubnet2RouteTable1DF17386", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, @@ -33429,7 +33346,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -33438,7 +33355,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -33453,7 +33370,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'", + "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'", "extra": { "replacement_strategy": "delete_then_create" } @@ -33465,7 +33382,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -33480,7 +33397,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'", + "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'", "extra": { "replacement_strategy": "delete_then_create" } @@ -33492,7 +33409,7 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", + "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -33515,7 +33432,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", + "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -33530,7 +33447,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'" + "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'" } }, { @@ -33539,7 +33456,7 @@ "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2NATGateway9182C01D", + "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, @@ -33553,7 +33470,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcPublicSubnet2EIP3C605A87.AllocationId" + "resolutionSource": "GetAtt MyVpcPublicSubnet2EIP8CCBA239.AllocationId" } }, { @@ -33562,7 +33479,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2NATGateway9182C01D", + "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, @@ -33576,7 +33493,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'" + "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'" } }, { @@ -33585,7 +33502,7 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -33607,7 +33524,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -33629,7 +33546,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -33643,7 +33560,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -33652,7 +33569,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableB2C5B500", + "logicalId": "MyVpcPrivateSubnet1RouteTable8819E6E2", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, @@ -33667,7 +33584,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -33676,7 +33593,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", + "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -33691,7 +33608,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'", "extra": { "replacement_strategy": "delete_then_create" } @@ -33703,7 +33620,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", + "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -33718,7 +33635,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1Subnet536B997A'", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet1Subnet5057CF7E'", "extra": { "replacement_strategy": "delete_then_create" } @@ -33730,7 +33647,7 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -33753,7 +33670,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -33768,7 +33685,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'" + "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'" } }, { @@ -33777,7 +33694,7 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -33799,7 +33716,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -33821,7 +33738,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -33835,7 +33752,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -33844,7 +33761,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableA678073B", + "logicalId": "MyVpcPrivateSubnet2RouteTableCEDCEECE", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, @@ -33859,7 +33776,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -33868,7 +33785,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", + "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -33883,7 +33800,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'", "extra": { "replacement_strategy": "delete_then_create" } @@ -33895,7 +33812,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", + "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -33910,7 +33827,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2Subnet3788AAA1'", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet2Subnet0040C983'", "extra": { "replacement_strategy": "delete_then_create" } @@ -33922,7 +33839,7 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", + "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -33945,7 +33862,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", + "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -33960,7 +33877,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'" + "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'" } }, { @@ -33969,7 +33886,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcVPCGWBF912B6E", + "logicalId": "MyVpcVPCGW488ACE0D", "entityType": "Resource", "resourceType": "AWS::EC2::VPCGatewayAttachment" }, @@ -33984,7 +33901,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'", "extra": { "replacement_strategy": "delete_then_create" } @@ -33996,7 +33913,7 @@ "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappLBBDE1D276", + "logicalId": "FargateServiceLBB353E155", "entityType": "Resource", "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, @@ -34019,15 +33936,15 @@ "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappLBBDE1D276", + "logicalId": "FargateServiceLBB353E155", "entityType": "Resource", "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 487, + "startLine": 495, "startColumn": 5, - "endLine": 487, + "endLine": 495, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -34039,86 +33956,248 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappLBPublicListenerC4DF6480", + "logicalId": "FargateServiceLBSecurityGroup5F444C78", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.LoadBalancerArn", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", "startLine": 510, "startColumn": 5, "endLine": 510, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'sampleappLBBDE1D276'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappLBPublicListenerECSGroup525A567D", + "logicalId": "FargateServiceLBSecurityGroup5F444C78", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 523, + "startLine": 520, "startColumn": 5, - "endLine": 523, - "endColumn": 10, + "endLine": 520, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationSecurityGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappLBPublicListenerECSGroup525A567D", + "logicalId": "FargateServiceLBSecurityGrouptoBonjourFargateServiceSecurityGroupB8A86CBA80181B6C73", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.DestinationSecurityGroupId", "category": "Best Practice", - "startLine": 524, + "startLine": 532, "startColumn": 5, - "endLine": 524, - "endColumn": 14, + "endLine": 532, + "endColumn": 32, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt FargateServiceSecurityGroup262B61DD.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappLBPublicListenerECSGroup525A567D", + "logicalId": "FargateServiceLBSecurityGrouptoBonjourFargateServiceSecurityGroupB8A86CBA80181B6C73", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupEgress" + }, + "propertyPath": "Properties.FromPort", + "category": "Best Practice", + "startLine": 538, + "startColumn": 5, + "endLine": 538, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FargateServiceLBSecurityGrouptoBonjourFargateServiceSecurityGroupB8A86CBA80181B6C73", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupEgress" + }, + "propertyPath": "Properties.GroupId", + "category": "Best Practice", + "startLine": 539, + "startColumn": 5, + "endLine": 539, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FargateServiceLBSecurityGroup5F444C78.GroupId" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FargateServiceLBSecurityGrouptoBonjourFargateServiceSecurityGroupB8A86CBA80181B6C73", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupEgress" + }, + "propertyPath": "Properties.IpProtocol", + "category": "Best Practice", + "startLine": 545, + "startColumn": 5, + "endLine": 545, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FargateServiceLBSecurityGrouptoBonjourFargateServiceSecurityGroupB8A86CBA80181B6C73", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupEgress" + }, + "propertyPath": "Properties.ToPort", + "category": "Best Practice", + "startLine": 546, + "startColumn": 5, + "endLine": 546, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FargateServiceLBPublicListener4B4929CA", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + }, + "propertyPath": "Properties.LoadBalancerArn", + "category": "Best Practice", + "startLine": 563, + "startColumn": 5, + "endLine": 563, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'FargateServiceLBB353E155'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FargateServiceLBPublicListenerECSGroupBE57E081", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + }, + "propertyPath": "Properties.Port", + "category": "Best Practice", + "startLine": 576, + "startColumn": 5, + "endLine": 576, + "endColumn": 10, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FargateServiceLBPublicListenerECSGroupBE57E081", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + }, + "propertyPath": "Properties.Protocol", + "category": "Best Practice", + "startLine": 577, + "startColumn": 5, + "endLine": 577, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FargateServiceLBPublicListenerECSGroupBE57E081", "entityType": "Resource", "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, "propertyPath": "Properties.TargetType", "category": "Best Practice", - "startLine": 525, + "startLine": 584, "startColumn": 5, - "endLine": 525, + "endLine": 584, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -34132,21 +34211,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappLBPublicListenerECSGroup525A567D", + "logicalId": "FargateServiceLBPublicListenerECSGroupBE57E081", "entityType": "Resource", "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 526, + "startLine": 585, "startColumn": 5, - "endLine": 526, + "endLine": 585, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { @@ -34155,15 +34234,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappTaskDef6BF75736", + "logicalId": "FargateServiceTaskDef940E3A80", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 557, + "startLine": 616, "startColumn": 5, - "endLine": 557, + "endLine": 616, "endColumn": 26, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -34178,15 +34257,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappTaskDef6BF75736", + "logicalId": "FargateServiceTaskDef940E3A80", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 582, + "startLine": 641, "startColumn": 5, - "endLine": 582, + "endLine": 641, "endColumn": 9, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -34201,22 +34280,22 @@ "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappTaskDef6BF75736", + "logicalId": "FargateServiceTaskDef940E3A80", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ExecutionRoleArn", "category": "Best Practice", - "startLine": 583, + "startLine": 642, "startColumn": 5, - "endLine": 583, + "endLine": 642, "endColumn": 22, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt sampleappTaskDefExecutionRoleAD6F4C40.Arn" + "resolutionSource": "GetAtt FargateServiceTaskDefExecutionRole9194820E.Arn" } }, { @@ -34225,15 +34304,15 @@ "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappTaskDef6BF75736", + "logicalId": "FargateServiceTaskDef940E3A80", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 589, + "startLine": 648, "startColumn": 5, - "endLine": 589, + "endLine": 648, "endColumn": 12, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -34248,15 +34327,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappTaskDef6BF75736", + "logicalId": "FargateServiceTaskDef940E3A80", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 590, + "startLine": 649, "startColumn": 5, - "endLine": 590, + "endLine": 649, "endColumn": 12, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -34271,15 +34350,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappTaskDef6BF75736", + "logicalId": "FargateServiceTaskDef940E3A80", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 591, + "startLine": 650, "startColumn": 5, - "endLine": 591, + "endLine": 650, "endColumn": 17, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -34294,15 +34373,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappTaskDef6BF75736", + "logicalId": "FargateServiceTaskDef940E3A80", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 592, + "startLine": 651, "startColumn": 5, - "endLine": 592, + "endLine": 651, "endColumn": 29, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -34317,22 +34396,22 @@ "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappTaskDef6BF75736", + "logicalId": "FargateServiceTaskDef940E3A80", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 595, + "startLine": 654, "startColumn": 5, - "endLine": 595, + "endLine": 654, "endColumn": 17, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt sampleappTaskDefTaskRoleB530CAC0.Arn" + "resolutionSource": "GetAtt FargateServiceTaskDefTaskRole8CDCF85E.Arn" } }, { @@ -34341,21 +34420,21 @@ "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappServiceE7504FDB", + "logicalId": "FargateServiceECC8084D", "entityType": "Resource", "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 669, + "startLine": 728, "startColumn": 5, - "endLine": 669, + "endLine": 728, "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'fargateserviceautoscalingD107CF93'" + "resolutionSource": "Ref to 'ClusterEB0386A7'" } }, { @@ -34364,15 +34443,15 @@ "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappServiceE7504FDB", + "logicalId": "FargateServiceECC8084D", "entityType": "Resource", "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 683, + "startLine": 742, "startColumn": 5, - "endLine": 683, + "endLine": 742, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -34386,15 +34465,15 @@ "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappServiceSecurityGroup0ABF0D21", + "logicalId": "FargateServiceSecurityGroup262B61DD", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 730, + "startLine": 789, "startColumn": 5, - "endLine": 730, + "endLine": 789, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -34408,87 +34487,87 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappServiceSecurityGroup0ABF0D21", + "logicalId": "FargateServiceSecurityGroup262B61DD", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 738, + "startLine": 797, "startColumn": 5, - "endLine": 738, + "endLine": 797, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappServiceTaskCountTargetE827DC30", + "logicalId": "FargateServiceSecurityGroupfromBonjourFargateServiceLBSecurityGroup660CF9B080C7AA015A", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalableTarget" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 754, + "startLine": 812, "startColumn": 5, - "endLine": 754, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 812, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:service/{ref:fargateserviceautoscalingD107CF93}/{ref:sampleappServiceE7504FDB})" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ScalableDimension' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappServiceTaskCountTargetE827DC30", + "logicalId": "FargateServiceSecurityGroupfromBonjourFargateServiceLBSecurityGroup660CF9B080C7AA015A", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalableTarget" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.ScalableDimension", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 788, + "startLine": 813, "startColumn": 5, - "endLine": 788, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 813, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt FargateServiceSecurityGroup262B61DD.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ServiceNamespace' is create-only; updating it will cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappServiceTaskCountTargetE827DC30", + "logicalId": "FargateServiceSecurityGroupfromBonjourFargateServiceLBSecurityGroup660CF9B080C7AA015A", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalableTarget" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.ServiceNamespace", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 789, + "startLine": 819, "startColumn": 5, - "endLine": 789, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 819, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -34498,57 +34577,57 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappServiceTaskCountTargetCpuScalingF4452F80", + "logicalId": "FargateServiceSecurityGroupfromBonjourFargateServiceLBSecurityGroup660CF9B080C7AA015A", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.PolicyName", + "propertyPath": "Properties.SourceSecurityGroupId", "category": "Best Practice", - "startLine": 801, + "startLine": 820, "startColumn": 5, - "endLine": 801, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 820, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt FargateServiceLBSecurityGroup5F444C78.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ScalingTargetId' is create-only; updating it will cause resource replacement", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sampleappServiceTaskCountTargetCpuScalingF4452F80", + "logicalId": "FargateServiceSecurityGroupfromBonjourFargateServiceLBSecurityGroup660CF9B080C7AA015A", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.ScalingTargetId", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 803, + "startLine": 826, "startColumn": 5, - "endLine": 803, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 826, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'sampleappServiceTaskCountTargetE827DC30'" + "lifecycle": "create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'fargateserviceautoscalingD107CF93' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Resource 'ClusterEB0386A7' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "fargateserviceautoscalingD107CF93", + "logicalId": "ClusterEB0386A7", "entityType": "Resource", "resourceType": "AWS::ECS::Cluster" }, @@ -34558,17 +34637,17 @@ "startLine": 463, "startColumn": 3, "endLine": 463, - "endColumn": 37, + "endColumn": 19, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sampleappLBBDE1D276' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "message": "Resource 'FargateServiceLBB353E155' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sampleappLBBDE1D276", + "logicalId": "FargateServiceLBB353E155", "entityType": "Resource", "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, @@ -34585,19 +34664,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sampleappLBPublicListenerC4DF6480' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", + "message": "Resource 'FargateServiceLBSecurityGroup5F444C78' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sampleappLBPublicListenerC4DF6480", + "logicalId": "FargateServiceLBSecurityGroup5F444C78", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 501, + "startLine": 509, "startColumn": 4, - "endLine": 501, + "endLine": 509, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -34605,19 +34684,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sampleappLBPublicListenerECSGroup525A567D' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "message": "Resource 'FargateServiceLBPublicListener4B4929CA' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sampleappLBPublicListenerECSGroup525A567D", + "logicalId": "FargateServiceLBPublicListener4B4929CA", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 522, + "startLine": 554, "startColumn": 4, - "endLine": 522, + "endLine": 554, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -34625,19 +34704,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sampleappTaskDefTaskRoleB530CAC0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'FargateServiceLBPublicListenerECSGroupBE57E081' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sampleappTaskDefTaskRoleB530CAC0", + "logicalId": "FargateServiceLBPublicListenerECSGroupBE57E081", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 536, + "startLine": 575, "startColumn": 4, - "endLine": 536, + "endLine": 575, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -34645,19 +34724,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sampleappTaskDef6BF75736' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'FargateServiceTaskDefTaskRole8CDCF85E' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sampleappTaskDef6BF75736", + "logicalId": "FargateServiceTaskDefTaskRole8CDCF85E", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 556, + "startLine": 595, "startColumn": 4, - "endLine": 556, + "endLine": 595, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -34665,59 +34744,59 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sampleappTaskDefwebLogGroup34BE8C79' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Resource 'FargateServiceTaskDef940E3A80' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sampleappTaskDefwebLogGroup34BE8C79", + "logicalId": "FargateServiceTaskDef940E3A80", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 606, - "startColumn": 3, - "endLine": 606, - "endColumn": 39, + "startLine": 615, + "startColumn": 4, + "endLine": 615, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sampleappTaskDefExecutionRoleAD6F4C40' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'FargateServiceTaskDefwebLogGroup71FAF541' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sampleappTaskDefExecutionRoleAD6F4C40", + "logicalId": "FargateServiceTaskDefwebLogGroup71FAF541", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Logs::LogGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 616, - "startColumn": 4, - "endLine": 616, - "endColumn": 15, + "startLine": 665, + "startColumn": 3, + "endLine": 665, + "endColumn": 44, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sampleappServiceE7504FDB' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Resource 'FargateServiceTaskDefExecutionRole9194820E' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sampleappServiceE7504FDB", + "logicalId": "FargateServiceTaskDefExecutionRole9194820E", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 668, + "startLine": 675, "startColumn": 4, - "endLine": 668, + "endLine": 675, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -34725,19 +34804,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sampleappServiceSecurityGroup0ABF0D21' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'FargateServiceECC8084D' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sampleappServiceSecurityGroup0ABF0D21", + "logicalId": "FargateServiceECC8084D", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 729, + "startLine": 727, "startColumn": 4, - "endLine": 729, + "endLine": 727, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -34745,35 +34824,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sampleappServiceTaskCountTargetE827DC30' of type 'AWS::ApplicationAutoScaling::ScalableTarget' supports Tags but none are configured", + "message": "Resource 'FargateServiceSecurityGroup262B61DD' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sampleappServiceTaskCountTargetE827DC30", + "logicalId": "FargateServiceSecurityGroup262B61DD", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalableTarget" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 751, + "startLine": 788, "startColumn": 4, - "endLine": 751, + "endLine": 788, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/ecs-fargate-service-with-logging--Willkommen.template.json": { - "filePath": "cdk/ecs-fargate-service-with-logging--Willkommen.template.json", + "cdk/ecs-fargate-service-with-auto-scaling--aws-fargate-application-autoscaling.template.json": { + "filePath": "cdk/ecs-fargate-service-with-auto-scaling--aws-fargate-application-autoscaling.template.json", "status": "OK", "metadata": { - "resourcesScanned": 32, + "resourcesScanned": 37, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 58, + "warnings": 1, + "informational": 74, "debug": 0 }, "suppressed": 0, @@ -34781,13 +34860,33 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'sampleappLBPublicListenerECSGroup525A567D' dependency already enforced by a 'Ref' at 'Properties.LoadBalancers.0.TargetGroupArn'", + "source": "CFN_LINT", + "entity": { + "logicalId": "sampleappServiceE7504FDB", + "entityType": "Resource", + "resourceType": "AWS::ECS::Service" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 718, + "startColumn": 4, + "endLine": 718, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcF9F0CA6F", + "logicalId": "Vpc8378EB38", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, @@ -34809,7 +34908,7 @@ "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcF9F0CA6F", + "logicalId": "Vpc8378EB38", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, @@ -34831,7 +34930,7 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1SubnetF6608456", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -34853,7 +34952,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1SubnetF6608456", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -34875,7 +34974,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1SubnetF6608456", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -34889,7 +34988,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -34898,7 +34997,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1RouteTableC46AB2F4", + "logicalId": "VpcPublicSubnet1RouteTable6C95E38E", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, @@ -34913,7 +35012,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -34922,7 +35021,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", + "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -34937,7 +35036,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'", + "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'", "extra": { "replacement_strategy": "delete_then_create" } @@ -34949,7 +35048,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", + "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -34964,7 +35063,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'", + "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'", "extra": { "replacement_strategy": "delete_then_create" } @@ -34976,7 +35075,7 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", + "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -34999,7 +35098,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", + "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -35014,7 +35113,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'" + "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'" } }, { @@ -35023,7 +35122,7 @@ "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", + "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, @@ -35037,7 +35136,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt MyVpcPublicSubnet1EIP096967CB.AllocationId" + "resolutionSource": "GetAtt VpcPublicSubnet1EIPD7E02669.AllocationId" } }, { @@ -35046,7 +35145,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", + "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, @@ -35060,7 +35159,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'" + "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'" } }, { @@ -35069,7 +35168,7 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -35091,7 +35190,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -35113,7 +35212,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -35127,7 +35226,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -35136,7 +35235,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2RouteTable1DF17386", + "logicalId": "VpcPublicSubnet2RouteTable94F7E489", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, @@ -35151,7 +35250,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -35160,7 +35259,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", + "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -35175,7 +35274,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'", + "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'", "extra": { "replacement_strategy": "delete_then_create" } @@ -35187,7 +35286,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", + "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -35202,7 +35301,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'", + "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'", "extra": { "replacement_strategy": "delete_then_create" } @@ -35214,7 +35313,7 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", + "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -35237,7 +35336,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", + "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -35252,7 +35351,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'" + "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'" } }, { @@ -35261,7 +35360,7 @@ "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", + "logicalId": "VpcPublicSubnet2NATGateway9182C01D", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, @@ -35275,7 +35374,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt MyVpcPublicSubnet2EIP8CCBA239.AllocationId" + "resolutionSource": "GetAtt VpcPublicSubnet2EIP3C605A87.AllocationId" } }, { @@ -35284,7 +35383,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", + "logicalId": "VpcPublicSubnet2NATGateway9182C01D", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, @@ -35298,7 +35397,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'" + "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'" } }, { @@ -35307,7 +35406,7 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -35329,7 +35428,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -35351,7 +35450,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -35365,7 +35464,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -35374,7 +35473,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1RouteTable8819E6E2", + "logicalId": "VpcPrivateSubnet1RouteTableB2C5B500", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, @@ -35389,7 +35488,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { @@ -35398,7 +35497,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", + "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -35413,7 +35512,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'", + "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'", "extra": { "replacement_strategy": "delete_then_create" } @@ -35425,7 +35524,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", + "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -35440,7 +35539,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet1Subnet5057CF7E'", + "resolutionSource": "Ref to 'VpcPrivateSubnet1Subnet536B997A'", "extra": { "replacement_strategy": "delete_then_create" } @@ -35452,7 +35551,7 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", + "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -35475,7 +35574,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", + "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -35490,7 +35589,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'" + "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'" } }, { @@ -35499,2475 +35598,162 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 357, - "startColumn": 5, - "endLine": 357, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 365, - "startColumn": 5, - "endLine": 365, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 381, - "startColumn": 5, - "endLine": 381, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyVpcPrivateSubnet2RouteTableCEDCEECE", - "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 398, - "startColumn": 5, - "endLine": 398, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 409, - "startColumn": 5, - "endLine": 409, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 412, - "startColumn": 5, - "endLine": 412, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet2Subnet0040C983'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.DestinationCidrBlock", - "category": "Best Practice", - "startLine": 423, - "startColumn": 5, - "endLine": 423, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 427, - "startColumn": 5, - "endLine": 427, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyVpcVPCGW488ACE0D", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 455, - "startColumn": 5, - "endLine": 455, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 492, - "startColumn": 5, - "endLine": 492, - "endColumn": 26, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Cpu", - "category": "Best Practice", - "startLine": 511, - "startColumn": 5, - "endLine": 511, - "endColumn": 9, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.ExecutionRoleArn", - "category": "Best Practice", - "startLine": 512, - "startColumn": 5, - "endLine": 512, - "endColumn": 22, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt MyTaskDefinitionExecutionRole3D88C23D.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Family", - "category": "Best Practice", - "startLine": 518, - "startColumn": 5, - "endLine": 518, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Memory", - "category": "Best Practice", - "startLine": 519, - "startColumn": 5, - "endLine": 519, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 520, - "startColumn": 5, - "endLine": 520, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 521, - "startColumn": 5, - "endLine": 521, - "endColumn": 29, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.TaskRoleArn", - "category": "Best Practice", - "startLine": 524, - "startColumn": 5, - "endLine": 524, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt MyTaskDefinitionTaskRole93FBB305.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FargateServiceAC2B3B85", - "entityType": "Resource", - "resourceType": "AWS::ECS::Service" - }, - "propertyPath": "Properties.Cluster", - "category": "Best Practice", - "startLine": 598, - "startColumn": 5, - "endLine": 598, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Ec2ClusterEE43E89D'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FargateServiceAC2B3B85", - "entityType": "Resource", - "resourceType": "AWS::ECS::Service" - }, - "propertyPath": "Properties.LaunchType", - "category": "Best Practice", - "startLine": 611, - "startColumn": 5, - "endLine": 611, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FargateServiceSecurityGroup0A0E79CB", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 647, - "startColumn": 5, - "endLine": 647, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FargateServiceSecurityGroup0A0E79CB", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 655, - "startColumn": 5, - "endLine": 655, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Ec2ClusterEE43E89D' of type 'AWS::ECS::Cluster' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Ec2ClusterEE43E89D", - "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 463, - "startColumn": 3, - "endLine": 463, - "endColumn": 22, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyTaskDefinitionTaskRole93FBB305' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MyTaskDefinitionTaskRole93FBB305", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 471, - "startColumn": 4, - "endLine": 471, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyTaskDefinitionF5B350B4' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MyTaskDefinitionF5B350B4", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 491, - "startColumn": 4, - "endLine": 491, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyTaskDefinitionAppContainerLogGroupA24DD1B6' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MyTaskDefinitionAppContainerLogGroupA24DD1B6", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 535, - "startColumn": 3, - "endLine": 535, - "endColumn": 48, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyTaskDefinitionExecutionRole3D88C23D' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MyTaskDefinitionExecutionRole3D88C23D", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 545, - "startColumn": 4, - "endLine": 545, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FargateServiceAC2B3B85' of type 'AWS::ECS::Service' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FargateServiceAC2B3B85", - "entityType": "Resource", - "resourceType": "AWS::ECS::Service" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 597, - "startColumn": 4, - "endLine": 597, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FargateServiceSecurityGroup0A0E79CB' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FargateServiceSecurityGroup0A0E79CB", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 646, - "startColumn": 4, - "endLine": 646, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/eventbridge-lambda--EventBridgeLambdaStack.template.json": { - "filePath": "cdk/eventbridge-lambda--EventBridgeLambdaStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 8, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 11, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Singleton8C7B99F3", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 105, - "startColumn": 5, - "endLine": 105, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.9", - "lifecycle": "deprecated" - } - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'SingletonServiceRoleDDD815CD' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Singleton8C7B99F3", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 108, - "startColumn": 4, - "endLine": 108, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TopicTokenSubscription178F3F75E", - "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" - }, - "propertyPath": "Properties.Endpoint", - "category": "Best Practice", - "startLine": 15, - "startColumn": 5, - "endLine": 15, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'email' (type String)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TopicTokenSubscription178F3F75E", - "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" - }, - "propertyPath": "Properties.Protocol", - "category": "Best Practice", - "startLine": 18, - "startColumn": 5, - "endLine": 18, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TopicTokenSubscription178F3F75E", - "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" - }, - "propertyPath": "Properties.TopicArn", - "category": "Best Practice", - "startLine": 19, - "startColumn": 5, - "endLine": 19, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TopicBFC7AF6E'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "RuleAllowEventRuleEventBridgeLambdaStackSingleton0D05990EAAD8CFB9", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 140, - "startColumn": 5, - "endLine": 140, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "RuleAllowEventRuleEventBridgeLambdaStackSingleton0D05990EAAD8CFB9", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 141, - "startColumn": 5, - "endLine": 141, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt Singleton8C7B99F3.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "RuleAllowEventRuleEventBridgeLambdaStackSingleton0D05990EAAD8CFB9", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 147, - "startColumn": 5, - "endLine": 147, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "RuleAllowEventRuleEventBridgeLambdaStackSingleton0D05990EAAD8CFB9", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 148, - "startColumn": 5, - "endLine": 148, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt Rule4C995B7F.Arn" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TopicBFC7AF6E' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TopicBFC7AF6E", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SingletonServiceRoleDDD815CD' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SingletonServiceRoleDDD815CD", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 29, - "startColumn": 4, - "endLine": 29, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Singleton8C7B99F3' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Singleton8C7B99F3", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 87, - "startColumn": 4, - "endLine": 87, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Rule4C995B7F' of type 'AWS::Events::Rule' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Rule4C995B7F", - "entityType": "Resource", - "resourceType": "AWS::Events::Rule" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 118, - "startColumn": 4, - "endLine": 118, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/http-proxy-apigateway--HttpProxy.template.json": { - "filePath": "cdk/http-proxy-apigateway--HttpProxy.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 9, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 15, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ProxyAPIDeployment0905F2A51149e52ed55821cdb6db0214e7f00a2c", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 76, - "startColumn": 5, - "endLine": 76, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ProxyAPI32755B5A'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ProxyAPIDeploymentStageprodBE6BE99F", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 96, - "startColumn": 5, - "endLine": 96, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ProxyAPI32755B5A'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ProxyAPIDeploymentStageprodBE6BE99F", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" - }, - "propertyPath": "Properties.StageName", - "category": "Best Practice", - "startLine": 99, - "startColumn": 5, - "endLine": 99, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ProxyAPIaws4558A94F", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" - }, - "propertyPath": "Properties.ParentId", - "category": "Best Practice", - "startLine": 111, - "startColumn": 5, - "endLine": 111, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ProxyAPI32755B5A.RootResourceId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ProxyAPIaws4558A94F", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" - }, - "propertyPath": "Properties.PathPart", - "category": "Best Practice", - "startLine": 117, - "startColumn": 5, - "endLine": 117, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ProxyAPIaws4558A94F", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 118, - "startColumn": 5, - "endLine": 118, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ProxyAPI32755B5A'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ProxyProxyResourceGETawsB89410CC", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" - }, - "propertyPath": "Properties.ParentId", - "category": "Best Practice", - "startLine": 129, - "startColumn": 5, - "endLine": 129, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ProxyAPIaws4558A94F'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ProxyProxyResourceGETawsB89410CC", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" - }, - "propertyPath": "Properties.PathPart", - "category": "Best Practice", - "startLine": 132, - "startColumn": 5, - "endLine": 132, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ProxyProxyResourceGETawsB89410CC", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 133, - "startColumn": 5, - "endLine": 133, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ProxyAPI32755B5A'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ProxyProxyResourceGETawsGET6AEDAC86", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.HttpMethod", - "category": "Best Practice", - "startLine": 145, - "startColumn": 5, - "endLine": 145, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ProxyProxyResourceGETawsGET6AEDAC86", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.ResourceId", - "category": "Best Practice", - "startLine": 157, - "startColumn": 5, - "endLine": 157, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ProxyProxyResourceGETawsB89410CC'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ProxyProxyResourceGETawsGET6AEDAC86", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 160, - "startColumn": 5, - "endLine": 160, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ProxyAPI32755B5A'" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ProxyAPI32755B5A' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ProxyAPI32755B5A", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ProxyAPICloudWatchRoleB8A087D1' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ProxyAPICloudWatchRoleB8A087D1", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 19, - "startColumn": 4, - "endLine": 19, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ProxyAPIDeploymentStageprodBE6BE99F' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ProxyAPIDeploymentStageprodBE6BE99F", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 92, - "startColumn": 4, - "endLine": 92, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/imagebuilder--ImagebuilderStack.template.json": { - "filePath": "cdk/imagebuilder--ImagebuilderStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 11, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 31, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Data' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "GitComponenet", - "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" - }, - "propertyPath": "Properties.Data", - "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "GitComponenet", - "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" - }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Platform' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "GitComponenet", - "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" - }, - "propertyPath": "Properties.Platform", - "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Version' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "GitComponenet", - "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" - }, - "propertyPath": "Properties.Version", - "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Data' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "NodejsComponenet", - "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" - }, - "propertyPath": "Properties.Data", - "category": "Best Practice", - "startLine": 18, - "startColumn": 5, - "endLine": 18, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "NodejsComponenet", - "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" - }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 19, - "startColumn": 5, - "endLine": 19, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Platform' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "NodejsComponenet", - "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" - }, - "propertyPath": "Properties.Platform", - "category": "Best Practice", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Version' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "NodejsComponenet", - "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" - }, - "propertyPath": "Properties.Version", - "category": "Best Practice", - "startLine": 21, - "startColumn": 5, - "endLine": 21, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Data' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DockerComponenet", - "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" - }, - "propertyPath": "Properties.Data", - "category": "Best Practice", - "startLine": 30, - "startColumn": 5, - "endLine": 30, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DockerComponenet", - "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" - }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 31, - "startColumn": 5, - "endLine": 31, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Platform' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DockerComponenet", - "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" - }, - "propertyPath": "Properties.Platform", - "category": "Best Practice", - "startLine": 32, - "startColumn": 5, - "endLine": 32, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Version' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DockerComponenet", - "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" - }, - "propertyPath": "Properties.Version", - "category": "Best Practice", - "startLine": 33, - "startColumn": 5, - "endLine": 33, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Components' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AmazonLinux2023withGitAndNodeRecipe", - "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::ContainerRecipe" - }, - "propertyPath": "Properties.Components", - "category": "Best Practice", - "startLine": 50, - "startColumn": 5, - "endLine": 50, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AmazonLinux2023withGitAndNodeRecipe", - "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::ContainerRecipe" - }, - "propertyPath": "Properties.ContainerType", - "category": "Best Practice", - "startLine": 76, - "startColumn": 5, - "endLine": 76, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DockerfileTemplateData' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AmazonLinux2023withGitAndNodeRecipe", - "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::ContainerRecipe" - }, - "propertyPath": "Properties.DockerfileTemplateData", - "category": "Best Practice", - "startLine": 77, - "startColumn": 5, - "endLine": 77, - "endColumn": 28, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AmazonLinux2023withGitAndNodeRecipe", - "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::ContainerRecipe" - }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 78, - "startColumn": 5, - "endLine": 78, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ParentImage' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AmazonLinux2023withGitAndNodeRecipe", - "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::ContainerRecipe" - }, - "propertyPath": "Properties.ParentImage", - "category": "Best Practice", - "startLine": 79, - "startColumn": 5, - "endLine": 79, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TargetRepository' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AmazonLinux2023withGitAndNodeRecipe", - "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::ContainerRecipe" - }, - "propertyPath": "Properties.TargetRepository", - "category": "Best Practice", - "startLine": 91, - "startColumn": 5, - "endLine": 91, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Version' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AmazonLinux2023withGitAndNodeRecipe", - "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::ContainerRecipe" - }, - "propertyPath": "Properties.Version", - "category": "Best Practice", - "startLine": 97, - "startColumn": 5, - "endLine": 97, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ImageBuilderInfraConfig", - "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::InfrastructureConfiguration" - }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 188, - "startColumn": 5, - "endLine": 188, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ImageBuilderDistConfig", - "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::DistributionConfiguration" - }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 212, - "startColumn": 5, - "endLine": 212, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AmazonLinux2023WithGitPipeline", - "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::ImagePipeline" - }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 239, - "startColumn": 5, - "endLine": 239, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'GitComponenet' of type 'AWS::ImageBuilder::Component' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "GitComponenet", - "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'NodejsComponenet' of type 'AWS::ImageBuilder::Component' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "NodejsComponenet", - "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 17, - "startColumn": 4, - "endLine": 17, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DockerComponenet' of type 'AWS::ImageBuilder::Component' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "DockerComponenet", - "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::Component" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 29, - "startColumn": 4, - "endLine": 29, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'EcrRepoForImageBuilderCodeCatalystBF634BA6' of type 'AWS::ECR::Repository' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "EcrRepoForImageBuilderCodeCatalystBF634BA6", - "entityType": "Resource", - "resourceType": "AWS::ECR::Repository" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 39, - "startColumn": 3, - "endLine": 39, - "endColumn": 46, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'AmazonLinux2023withGitAndNodeRecipe' of type 'AWS::ImageBuilder::ContainerRecipe' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "AmazonLinux2023withGitAndNodeRecipe", - "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::ContainerRecipe" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 49, - "startColumn": 4, - "endLine": 49, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'EC2InstanceProfileForImageBuilderA043DE9F' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "EC2InstanceProfileForImageBuilderA043DE9F", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 105, - "startColumn": 4, - "endLine": 105, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ImageBuilderInfraConfig' of type 'AWS::ImageBuilder::InfrastructureConfiguration' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ImageBuilderInfraConfig", - "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::InfrastructureConfiguration" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 184, - "startColumn": 4, - "endLine": 184, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ImageBuilderDistConfig' of type 'AWS::ImageBuilder::DistributionConfiguration' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ImageBuilderDistConfig", - "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::DistributionConfiguration" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 196, - "startColumn": 4, - "endLine": 196, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'AmazonLinux2023WithGitPipeline' of type 'AWS::ImageBuilder::ImagePipeline' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "AmazonLinux2023WithGitPipeline", - "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::ImagePipeline" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 220, - "startColumn": 4, - "endLine": 220, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/inspector2--Inspector2EnableDelegatedAdminAccountStack.template.json": { - "filePath": "cdk/inspector2--Inspector2EnableDelegatedAdminAccountStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 12, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 5, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'Inspector2EnableDelegatedAdminAccountResourceInspector2EnableResourceInspectorRole00253606' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "AWS679f53fac002430cb0da5b7982bd22872D164C4C", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 230, - "startColumn": 4, - "endLine": 230, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 346, - "startColumn": 4, - "endLine": 346, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Inspector2EnableDelegatedAdminAccountResourceInspector2EnableDelegatedAdminResourceRoleC8FD65F6' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Inspector2EnableDelegatedAdminAccountResourceInspector2EnableDelegatedAdminResourceRoleC8FD65F6", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 6, - "startColumn": 4, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Inspector2EnableDelegatedAdminAccountResourceInspector2EnableResourceInspectorRole00253606' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Inspector2EnableDelegatedAdminAccountResourceInspector2EnableResourceInspectorRole00253606", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 52, - "startColumn": 4, - "endLine": 52, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'AWS679f53fac002430cb0da5b7982bd22872D164C4C' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "AWS679f53fac002430cb0da5b7982bd22872D164C4C", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 212, - "startColumn": 4, - "endLine": 212, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 268, - "startColumn": 4, - "endLine": 268, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 329, - "startColumn": 4, - "endLine": 329, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/inspector2--Inspector2EnableStack.template.json": { - "filePath": "cdk/inspector2--Inspector2EnableStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 2, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'EnableInspector2ResourceInspectorRole75753456' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "AWS679f53fac002430cb0da5b7982bd22872D164C4C", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 89, - "startColumn": 4, - "endLine": 89, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'EnableInspector2ResourceInspectorRole75753456' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "EnableInspector2ResourceInspectorRole75753456", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 6, - "startColumn": 4, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'AWS679f53fac002430cb0da5b7982bd22872D164C4C' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "AWS679f53fac002430cb0da5b7982bd22872D164C4C", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 71, - "startColumn": 4, - "endLine": 71, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/inspector2--Inspector2MonitoringStack.template.json": { - "filePath": "cdk/inspector2--Inspector2MonitoringStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 14, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 5, - "informational": 16, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Inspector2InitialScanHandler460C9991", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 164, - "startColumn": 5, - "endLine": 164, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" - } - }, - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Inspector2FindingHandler1F85FFBC", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 344, - "startColumn": 5, - "endLine": 344, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" - } - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'Inspector2InitialScanHandlerServiceRoleA1739B7A' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Inspector2InitialScanHandler460C9991", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 167, - "startColumn": 4, - "endLine": 167, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 283, - "startColumn": 4, - "endLine": 283, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 357, + "startColumn": 5, + "endLine": 357, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'Inspector2FindingHandlerServiceRoleCEDAFBC1' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Inspector2FindingHandler1F85FFBC", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 347, - "startColumn": 4, - "endLine": 347, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 365, + "startColumn": 5, + "endLine": 365, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Inspector2MonitoringinitialScanRuleAllowEventRuleInspector2MonitoringStackInspector2InitialScanHandler1F2D84B66EB326AF", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 40, + "startLine": 381, "startColumn": 5, - "endLine": 40, - "endColumn": 12, + "endLine": 381, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Inspector2MonitoringinitialScanRuleAllowEventRuleInspector2MonitoringStackInspector2InitialScanHandler1F2D84B66EB326AF", + "logicalId": "VpcPrivateSubnet2RouteTableA678073B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 41, + "startLine": 398, "startColumn": 5, - "endLine": 41, - "endColumn": 18, + "endLine": 398, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt Inspector2InitialScanHandler460C9991.Arn" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Inspector2MonitoringinitialScanRuleAllowEventRuleInspector2MonitoringStackInspector2InitialScanHandler1F2D84B66EB326AF", + "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 47, + "startLine": 409, "startColumn": 5, - "endLine": 47, - "endColumn": 15, + "endLine": 409, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Inspector2MonitoringinitialScanRuleAllowEventRuleInspector2MonitoringStackInspector2InitialScanHandler1F2D84B66EB326AF", + "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 48, + "startLine": 412, "startColumn": 5, - "endLine": 48, - "endColumn": 15, + "endLine": 412, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt Inspector2MonitoringinitialScanRule902E013C.Arn" + "resolutionSource": "Ref to 'VpcPrivateSubnet2Subnet3788AAA1'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Inspector2MonitoringfindingScanRuleAllowEventRuleInspector2MonitoringStackInspector2FindingHandler16831F85366B3530", + "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 95, + "startLine": 423, "startColumn": 5, - "endLine": 95, - "endColumn": 12, + "endLine": 423, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -37977,330 +35763,346 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Inspector2MonitoringfindingScanRuleAllowEventRuleInspector2MonitoringStackInspector2FindingHandler16831F85366B3530", + "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 96, + "startLine": 427, "startColumn": 5, - "endLine": 96, + "endLine": 427, "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt Inspector2FindingHandler1F85FFBC.Arn" + "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Inspector2MonitoringfindingScanRuleAllowEventRuleInspector2MonitoringStackInspector2FindingHandler16831F85366B3530", + "logicalId": "VpcVPCGWBF912B6E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 102, + "startLine": 455, "startColumn": 5, - "endLine": 102, - "endColumn": 15, + "endLine": 455, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Inspector2MonitoringfindingScanRuleAllowEventRuleInspector2MonitoringStackInspector2FindingHandler16831F85366B3530", + "logicalId": "sampleappLBBDE1D276", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Scheme", "category": "Best Practice", - "startLine": 103, + "startLine": 478, "startColumn": 5, - "endLine": 103, - "endColumn": 15, + "endLine": 478, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt Inspector2MonitoringfindingScanRuleC84833CE.Arn" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Inspector2MonitoringinitialScanRule902E013C' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Inspector2MonitoringinitialScanRule902E013C", + "logicalId": "sampleappLBBDE1D276", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 6, - "startColumn": 4, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 487, + "startColumn": 5, + "endLine": 487, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Inspector2MonitoringfindingScanRuleC84833CE' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Inspector2MonitoringfindingScanRuleC84833CE", + "logicalId": "sampleappLBPublicListenerC4DF6480", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.LoadBalancerArn", "category": "Best Practice", - "startLine": 61, - "startColumn": 4, - "endLine": 61, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 510, + "startColumn": 5, + "endLine": 510, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'sampleappLBBDE1D276'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Inspector2InitialScanHandlerServiceRoleA1739B7A' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Inspector2InitialScanHandlerServiceRoleA1739B7A", + "logicalId": "sampleappLBPublicListenerECSGroup525A567D", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 116, - "startColumn": 4, - "endLine": 116, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 523, + "startColumn": 5, + "endLine": 523, + "endColumn": 10, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Inspector2InitialScanHandler460C9991' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Inspector2InitialScanHandler460C9991", + "logicalId": "sampleappLBPublicListenerECSGroup525A567D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 150, - "startColumn": 4, - "endLine": 150, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 524, + "startColumn": 5, + "endLine": 524, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + "logicalId": "sampleappLBPublicListenerECSGroup525A567D", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.TargetType", "category": "Best Practice", - "startLine": 205, - "startColumn": 4, - "endLine": 205, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 525, + "startColumn": 5, + "endLine": 525, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "logicalId": "sampleappLBPublicListenerECSGroup525A567D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 266, - "startColumn": 4, - "endLine": 266, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 526, + "startColumn": 5, + "endLine": 526, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Inspector2FindingHandlerServiceRoleCEDAFBC1' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Inspector2FindingHandlerServiceRoleCEDAFBC1", + "logicalId": "sampleappTaskDef6BF75736", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 296, - "startColumn": 4, - "endLine": 296, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 557, + "startColumn": 5, + "endLine": 557, + "endColumn": 26, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Inspector2FindingHandler1F85FFBC' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Inspector2FindingHandler1F85FFBC", + "logicalId": "sampleappTaskDef6BF75736", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 330, - "startColumn": 4, - "endLine": 330, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/lambda-cloudwatch-dashboard--LambdaCloudwatchDashboardStack.template.json": { - "filePath": "cdk/lambda-cloudwatch-dashboard--LambdaCloudwatchDashboardStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 8, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 2, - "informational": 6, - "debug": 0 + "startLine": 582, + "startColumn": 5, + "endLine": 582, + "endColumn": 9, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E2531", - "severity": "ERROR", - "message": "Runtime 'python3.7' was deprecated on '2023-12-04'. Creation was disabled on '2024-01-09', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SampleLambdaB2FF4FA1", + "logicalId": "sampleappTaskDef6BF75736", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 54, + "propertyPath": "Properties.ExecutionRoleArn", + "category": "Best Practice", + "startLine": 583, "startColumn": 5, - "endLine": 54, - "endColumn": 13, - "ruleDescription": "Check if Lambda Function Runtimes are blocked for create", + "endLine": 583, + "endColumn": 22, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.7", - "lifecycle": "create-blocked" + "lifecycle": "create-only", + "resolutionSource": "GetAtt sampleappTaskDefExecutionRoleAD6F4C40.Arn" } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'SampleLambdaServiceRoleB1A8618F' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SampleLambdaB2FF4FA1", + "logicalId": "sampleappTaskDef6BF75736", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 57, - "startColumn": 4, - "endLine": 57, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 589, + "startColumn": 5, + "endLine": 589, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "logicalId": "sampleappTaskDef6BF75736", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 236, - "startColumn": 4, - "endLine": 236, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 590, + "startColumn": 5, + "endLine": 590, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DashboardName' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleLambdaDashboard39118496", + "logicalId": "sampleappTaskDef6BF75736", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Dashboard" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.DashboardName", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 150, + "startLine": 591, "startColumn": 5, - "endLine": 150, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch", + "endLine": 591, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -38308,183 +36110,183 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SampleLambdaServiceRoleB1A8618F' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleLambdaServiceRoleB1A8618F", + "logicalId": "sampleappTaskDef6BF75736", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 592, + "startColumn": 5, + "endLine": 592, + "endColumn": 29, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SampleLambdaB2FF4FA1' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleLambdaB2FF4FA1", + "logicalId": "sampleappTaskDef6BF75736", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 39, - "startColumn": 4, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 595, + "startColumn": 5, + "endLine": 595, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt sampleappTaskDefTaskRoleB530CAC0.Arn" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SampleLambdaDashboard39118496' of type 'AWS::CloudWatch::Dashboard' supports Tags but none are configured", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleLambdaDashboard39118496", + "logicalId": "sampleappServiceE7504FDB", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Dashboard" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 94, - "startColumn": 4, - "endLine": 94, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 669, + "startColumn": 5, + "endLine": 669, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'fargateserviceautoscalingD107CF93'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + "logicalId": "sampleappServiceE7504FDB", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 158, - "startColumn": 4, - "endLine": 158, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 683, + "startColumn": 5, + "endLine": 683, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "logicalId": "sampleappServiceSecurityGroup0ABF0D21", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 219, - "startColumn": 4, - "endLine": 219, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/lambda-cron--LambdaCronExample.template.json": { - "filePath": "cdk/lambda-cron--LambdaCronExample.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 7, - "debug": 0 + "startLine": 730, + "startColumn": 5, + "endLine": 730, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Singleton8C7B99F3", + "logicalId": "sampleappServiceSecurityGroup0ABF0D21", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 50, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 738, "startColumn": 5, - "endLine": 50, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 738, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.9", - "lifecycle": "deprecated" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'SingletonServiceRoleDDD815CD' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Singleton8C7B99F3", + "logicalId": "sampleappServiceTaskCountTargetE827DC30", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApplicationAutoScaling::ScalableTarget" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 53, - "startColumn": 4, - "endLine": 53, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 754, + "startColumn": 5, + "endLine": 754, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:service/{ref:fargateserviceautoscalingD107CF93}/{ref:sampleappServiceE7504FDB})" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'ScalableDimension' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", + "logicalId": "sampleappServiceTaskCountTargetE827DC30", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApplicationAutoScaling::ScalableTarget" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.ScalableDimension", "category": "Best Practice", - "startLine": 84, + "startLine": 788, "startColumn": 5, - "endLine": 84, - "endColumn": 12, + "endLine": 788, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -38494,42 +36296,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'ServiceNamespace' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", + "logicalId": "sampleappServiceTaskCountTargetE827DC30", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApplicationAutoScaling::ScalableTarget" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.ServiceNamespace", "category": "Best Practice", - "startLine": 85, + "startLine": 789, "startColumn": 5, - "endLine": 85, - "endColumn": 18, + "endLine": 789, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt Singleton8C7B99F3.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", + "logicalId": "sampleappServiceTaskCountTargetCpuScalingF4452F80", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.PolicyName", "category": "Best Practice", - "startLine": 91, + "startLine": 801, "startColumn": 5, - "endLine": 91, - "endColumn": 15, + "endLine": 801, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -38539,42 +36342,63 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'ScalingTargetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", + "logicalId": "sampleappServiceTaskCountTargetCpuScalingF4452F80", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.ScalingTargetId", "category": "Best Practice", - "startLine": 92, + "startLine": 803, "startColumn": 5, - "endLine": 92, - "endColumn": 15, + "endLine": 803, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt Rule4C995B7F.Arn" + "resolutionSource": "Ref to 'sampleappServiceTaskCountTargetE827DC30'" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SingletonServiceRoleDDD815CD' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'fargateserviceautoscalingD107CF93' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SingletonServiceRoleDDD815CD", + "logicalId": "fargateserviceautoscalingD107CF93", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::Cluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 463, + "startColumn": 3, + "endLine": 463, + "endColumn": 37, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'sampleappLBBDE1D276' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "sampleappLBBDE1D276", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 471, "startColumn": 4, - "endLine": 5, + "endLine": 471, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -38582,19 +36406,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Singleton8C7B99F3' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'sampleappLBPublicListenerC4DF6480' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Singleton8C7B99F3", + "logicalId": "sampleappLBPublicListenerC4DF6480", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 39, + "startLine": 501, "startColumn": 4, - "endLine": 39, + "endLine": 501, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -38602,147 +36426,119 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Rule4C995B7F' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Resource 'sampleappLBPublicListenerECSGroup525A567D' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Rule4C995B7F", + "logicalId": "sampleappLBPublicListenerECSGroup525A567D", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 62, + "startLine": 522, "startColumn": 4, - "endLine": 62, + "endLine": 522, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "cdk/lambda-layer--LambdaLayerStack.template.json": { - "filePath": "cdk/lambda-layer--LambdaLayerStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 5, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LambdaFunctionServiceRoleC555A460' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'sampleappTaskDefTaskRoleB530CAC0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionBF21E41F", + "logicalId": "sampleappTaskDefTaskRoleB530CAC0", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 83, + "startLine": 536, "startColumn": 4, - "endLine": 83, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 536, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CompatibleRuntimes' is create-only; updating it will cause resource replacement", + "message": "Resource 'sampleappTaskDef6BF75736' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "HelperLayer49ADCD6B", + "logicalId": "sampleappTaskDef6BF75736", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CompatibleRuntimes", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 556, + "startColumn": 4, + "endLine": 556, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Content' is create-only; updating it will cause resource replacement", + "message": "Resource 'sampleappTaskDefwebLogGroup34BE8C79' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "HelperLayer49ADCD6B", + "logicalId": "sampleappTaskDefwebLogGroup34BE8C79", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.Content", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 606, + "startColumn": 3, + "endLine": 606, + "endColumn": 39, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "message": "Resource 'sampleappTaskDefExecutionRoleAD6F4C40' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "HelperLayer49ADCD6B", + "logicalId": "sampleappTaskDefExecutionRoleAD6F4C40", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Description", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 15, - "startColumn": 5, - "endLine": 15, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 616, + "startColumn": 4, + "endLine": 616, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LambdaFunctionServiceRoleC555A460' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'sampleappServiceE7504FDB' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionServiceRoleC555A460", + "logicalId": "sampleappServiceE7504FDB", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 28, + "startLine": 668, "startColumn": 4, - "endLine": 28, + "endLine": 668, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -38750,35 +36546,55 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LambdaFunctionBF21E41F' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'sampleappServiceSecurityGroup0ABF0D21' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionBF21E41F", + "logicalId": "sampleappServiceSecurityGroup0ABF0D21", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 62, + "startLine": 729, "startColumn": 4, - "endLine": 62, + "endLine": 729, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'sampleappServiceTaskCountTargetE827DC30' of type 'AWS::ApplicationAutoScaling::ScalableTarget' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "sampleappServiceTaskCountTargetE827DC30", + "entityType": "Resource", + "resourceType": "AWS::ApplicationAutoScaling::ScalableTarget" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 751, + "startColumn": 4, + "endLine": 751, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/lambda-manage-s3-event-notification--AStack.template.json": { - "filePath": "cdk/lambda-manage-s3-event-notification--AStack.template.json", + "cdk/ecs-fargate-service-with-logging--Willkommen.template.json": { + "filePath": "cdk/ecs-fargate-service-with-logging--Willkommen.template.json", "status": "OK", "metadata": { - "resourcesScanned": 4, + "resourcesScanned": 32, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 3, + "informational": 58, "debug": 0 }, "suppressed": 0, @@ -38787,101 +36603,87 @@ }, "diagnostics": [ { - "ruleId": "I3013", + "ruleId": "I9001", "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", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SampleQueue49AAAEFF", + "logicalId": "MyVpcF9F0CA6F", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 23, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleBucketNotification", + "logicalId": "MyVpcF9F0CA6F", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::CustomResource" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.ServiceToken", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 69, + "startLine": 9, "startColumn": 5, - "endLine": 69, - "endColumn": 18, + "endLine": 9, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SampleQueue49AAAEFF' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleQueue49AAAEFF", + "logicalId": "MyVpcPublicSubnet1SubnetF6608456", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 23, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/lambda-manage-s3-event-notification--BStack.template.json": { - "filePath": "cdk/lambda-manage-s3-event-notification--BStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 + "startLine": 24, + "startColumn": 5, + "endLine": 24, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleBucketNotification", + "logicalId": "MyVpcPublicSubnet1SubnetF6608456", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::CustomResource" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ServiceToken", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 61, + "startLine": 32, "startColumn": 5, - "endLine": 61, - "endColumn": 18, + "endLine": 32, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -38889,363 +36691,361 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SampleTopic5FE9B5DC' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleTopic5FE9B5DC", + "logicalId": "MyVpcPublicSubnet1SubnetF6608456", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 23, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/lambda-manage-s3-event-notification--SharedStack.template.json": { - "filePath": "cdk/lambda-manage-s3-event-notification--SharedStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 4, - "debug": 0 + "startLine": 48, + "startColumn": 5, + "endLine": 48, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "S3EventNotificationsLambda20F17D80", + "logicalId": "MyVpcPublicSubnet1RouteTableC46AB2F4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 96, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 65, "startColumn": 5, - "endLine": 96, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 65, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'S3EventNotificationsLambdaServiceRoleD45D5063' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "S3EventNotificationsLambda20F17D80", + "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 99, - "startColumn": 4, - "endLine": 99, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 76, + "startColumn": 5, + "endLine": 76, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "S3EventNotificationsLambda20F17D80", + "logicalId": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 87, + "startLine": 79, "startColumn": 5, - "endLine": 87, - "endColumn": 18, + "endLine": 79, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SampleBucket7F6F8160' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleBucket7F6F8160", + "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 24, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 90, + "startColumn": 5, + "endLine": 90, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'S3EventNotificationsLambdaServiceRoleD45D5063' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "S3EventNotificationsLambdaServiceRoleD45D5063", + "logicalId": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 14, - "startColumn": 4, - "endLine": 14, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 94, + "startColumn": 5, + "endLine": 94, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPublicSubnet1RouteTableC46AB2F4'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'S3EventNotificationsLambda20F17D80' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "S3EventNotificationsLambda20F17D80", + "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 80, - "startColumn": 4, - "endLine": 80, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/my-widget-service--MyWidgetServiceStack.template.json": { - "filePath": "cdk/my-widget-service--MyWidgetServiceStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 23, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 56, - "debug": 0 + "startLine": 123, + "startColumn": 5, + "endLine": 123, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt MyVpcPublicSubnet1EIP096967CB.AllocationId" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WidgetsWidgetHandler1BC9DB34", + "logicalId": "MyVpcPublicSubnet1NATGatewayAD3400C1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 124, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 129, "startColumn": 5, - "endLine": 124, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 129, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs20.x", - "lifecycle": "deprecated" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPublicSubnet1SubnetF6608456'" } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'WidgetsWidgetHandlerServiceRole8C2B589C' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WidgetsWidgetHandler1BC9DB34", + "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 126, - "startColumn": 4, - "endLine": 126, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 150, + "startColumn": 5, + "endLine": 150, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiDeployment406A9BD66039252bdc49ee37076fc3c8f3a2eed8", + "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 206, + "startLine": 158, "startColumn": 5, - "endLine": 206, + "endLine": 158, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Widgetswidgetsapi72353315'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiDeploymentStageprod0D8CD1B7", + "logicalId": "MyVpcPublicSubnet2Subnet492B6BFB", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 228, + "startLine": 174, "startColumn": 5, - "endLine": 228, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 174, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Widgetswidgetsapi72353315'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiDeploymentStageprod0D8CD1B7", + "logicalId": "MyVpcPublicSubnet2RouteTable1DF17386", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 231, + "startLine": 191, "startColumn": 5, - "endLine": 231, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 191, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETFA317FE0", + "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 243, + "startLine": 202, "startColumn": 5, - "endLine": 243, - "endColumn": 12, + "endLine": 202, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETFA317FE0", + "logicalId": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 244, + "startLine": 205, "startColumn": 5, - "endLine": 244, - "endColumn": 18, + "endLine": 205, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" + "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETFA317FE0", + "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 250, + "startLine": 216, "startColumn": 5, - "endLine": 250, - "endColumn": 15, + "endLine": 216, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -39255,87 +37055,89 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETFA317FE0", + "logicalId": "MyVpcPublicSubnet2DefaultRoute052936F6", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 251, + "startLine": 220, "startColumn": 5, - "endLine": 251, - "endColumn": 15, + "endLine": 220, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/{ref:WidgetswidgetsapiDeploymentStageprod0D8CD1B7}/GET/)" + "resolutionSource": "Ref to 'MyVpcPublicSubnet2RouteTable1DF17386'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETD6697AB5", + "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 287, + "startLine": 249, "startColumn": 5, - "endLine": 287, - "endColumn": 12, + "endLine": 249, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt MyVpcPublicSubnet2EIP8CCBA239.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETD6697AB5", + "logicalId": "MyVpcPublicSubnet2NATGateway91BFBEC9", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 288, + "startLine": 255, "startColumn": 5, - "endLine": 288, - "endColumn": 18, + "endLine": 255, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" + "resolutionSource": "Ref to 'MyVpcPublicSubnet2Subnet492B6BFB'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETD6697AB5", + "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 294, + "startLine": 276, "startColumn": 5, - "endLine": 294, - "endColumn": 15, + "endLine": 276, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -39345,138 +37147,143 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETD6697AB5", + "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 295, + "startLine": 284, "startColumn": 5, - "endLine": 295, + "endLine": 284, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/test-invoke-stage/GET/)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiGET2086C825", + "logicalId": "MyVpcPrivateSubnet1Subnet5057CF7E", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 328, + "startLine": 300, "startColumn": 5, - "endLine": 328, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 300, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiGET2086C825", + "logicalId": "MyVpcPrivateSubnet1RouteTable8819E6E2", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 359, + "startLine": 317, "startColumn": 5, - "endLine": 359, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 317, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt Widgetswidgetsapi72353315.RootResourceId" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiGET2086C825", + "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 365, + "startLine": 328, "startColumn": 5, - "endLine": 365, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 328, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Widgetswidgetsapi72353315'" + "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidAA19CFA8", + "logicalId": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 376, + "startLine": 331, "startColumn": 5, - "endLine": 376, + "endLine": 331, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt Widgetswidgetsapi72353315.RootResourceId" + "resolutionSource": "Ref to 'MyVpcPrivateSubnet1Subnet5057CF7E'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidAA19CFA8", + "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 382, + "startLine": 342, "startColumn": 5, - "endLine": 382, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 342, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -39486,43 +37293,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidAA19CFA8", + "logicalId": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 383, + "startLine": 346, "startColumn": 5, - "endLine": 383, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 346, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Widgetswidgetsapi72353315'" + "resolutionSource": "Ref to 'MyVpcPrivateSubnet1RouteTable8819E6E2'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidPOSTApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTid9DF97A7A", + "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 394, + "startLine": 357, "startColumn": 5, - "endLine": 394, - "endColumn": 12, + "endLine": 357, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -39532,132 +37339,143 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidPOSTApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTid9DF97A7A", + "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 395, + "startLine": 365, "startColumn": 5, - "endLine": 395, - "endColumn": 18, + "endLine": 365, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidPOSTApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTid9DF97A7A", + "logicalId": "MyVpcPrivateSubnet2Subnet0040C983", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 401, + "startLine": 381, "startColumn": 5, - "endLine": 401, - "endColumn": 15, + "endLine": 381, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidPOSTApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTid9DF97A7A", + "logicalId": "MyVpcPrivateSubnet2RouteTableCEDCEECE", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 402, + "startLine": 398, "startColumn": 5, - "endLine": 402, - "endColumn": 15, + "endLine": 398, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/{ref:WidgetswidgetsapiDeploymentStageprod0D8CD1B7}/POST/*)" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidPOSTApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTidF1C29E62", + "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 438, + "startLine": 409, "startColumn": 5, - "endLine": 438, - "endColumn": 12, + "endLine": 409, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidPOSTApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTidF1C29E62", + "logicalId": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 439, + "startLine": 412, "startColumn": 5, - "endLine": 439, - "endColumn": 18, + "endLine": 412, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" + "resolutionSource": "Ref to 'MyVpcPrivateSubnet2Subnet0040C983'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidPOSTApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTidF1C29E62", + "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 445, + "startLine": 423, "startColumn": 5, - "endLine": 445, - "endColumn": 15, + "endLine": 423, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -39667,158 +37485,164 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidPOSTApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTidF1C29E62", + "logicalId": "MyVpcPrivateSubnet2DefaultRoute9CE96294", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 446, + "startLine": 427, "startColumn": 5, - "endLine": 446, - "endColumn": 15, + "endLine": 427, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/test-invoke-stage/POST/*)" + "resolutionSource": "Ref to 'MyVpcPrivateSubnet2RouteTableCEDCEECE'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidPOST60B9DB49", + "logicalId": "MyVpcVPCGW488ACE0D", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 479, + "startLine": 455, "startColumn": 5, - "endLine": 479, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 455, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidPOST60B9DB49", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 507, + "startLine": 492, "startColumn": 5, - "endLine": 507, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 492, + "endColumn": 26, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'WidgetswidgetsapiidAA19CFA8'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidPOST60B9DB49", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 510, + "startLine": 511, "startColumn": 5, - "endLine": 510, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 511, + "endColumn": 9, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Widgetswidgetsapi72353315'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid8E6C9CDF", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.ExecutionRoleArn", "category": "Best Practice", - "startLine": 521, + "startLine": 512, "startColumn": 5, - "endLine": 521, - "endColumn": 12, + "endLine": 512, + "endColumn": 22, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt MyTaskDefinitionExecutionRole3D88C23D.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid8E6C9CDF", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 522, + "startLine": 518, "startColumn": 5, - "endLine": 522, - "endColumn": 18, + "endLine": 518, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid8E6C9CDF", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 528, + "startLine": 519, "startColumn": 5, - "endLine": 528, - "endColumn": 15, + "endLine": 519, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -39828,42 +37652,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid8E6C9CDF", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 529, + "startLine": 520, "startColumn": 5, - "endLine": 529, - "endColumn": 15, + "endLine": 520, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/{ref:WidgetswidgetsapiDeploymentStageprod0D8CD1B7}/GET/*)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid5E1031AB", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 565, + "startLine": 521, "startColumn": 5, - "endLine": 565, - "endColumn": 12, + "endLine": 521, + "endColumn": 29, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -39873,88 +37698,88 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid5E1031AB", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 566, + "startLine": 524, "startColumn": 5, - "endLine": 566, - "endColumn": 18, + "endLine": 524, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" + "resolutionSource": "GetAtt MyTaskDefinitionTaskRole93FBB305.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid5E1031AB", + "logicalId": "FargateServiceAC2B3B85", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 572, + "startLine": 598, "startColumn": 5, - "endLine": 572, - "endColumn": 15, + "endLine": 598, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Ec2ClusterEE43E89D'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid5E1031AB", + "logicalId": "FargateServiceAC2B3B85", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 573, + "startLine": 611, "startColumn": 5, - "endLine": 573, - "endColumn": 15, + "endLine": 611, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/test-invoke-stage/GET/*)" + "context": { + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidGETABE1C648", + "logicalId": "FargateServiceSecurityGroup0A0E79CB", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 606, + "startLine": 647, "startColumn": 5, - "endLine": 606, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 647, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -39964,202 +37789,269 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidGETABE1C648", + "logicalId": "FargateServiceSecurityGroup0A0E79CB", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 634, + "startLine": 655, "startColumn": 5, - "endLine": 634, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 655, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'WidgetswidgetsapiidAA19CFA8'" + "resolutionSource": "Ref to 'MyVpcF9F0CA6F'" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Ec2ClusterEE43E89D' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidGETABE1C648", + "logicalId": "Ec2ClusterEE43E89D", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ECS::Cluster" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 637, - "startColumn": 5, - "endLine": 637, + "startLine": 463, + "startColumn": 3, + "endLine": 463, + "endColumn": 22, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyTaskDefinitionTaskRole93FBB305' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "MyTaskDefinitionTaskRole93FBB305", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 471, + "startColumn": 4, + "endLine": 471, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Widgetswidgetsapi72353315'" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyTaskDefinitionF5B350B4' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidDELETEApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid2BAC56B6", + "logicalId": "MyTaskDefinitionF5B350B4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 648, - "startColumn": 5, - "endLine": 648, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 491, + "startColumn": 4, + "endLine": 491, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyTaskDefinitionAppContainerLogGroupA24DD1B6' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidDELETEApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid2BAC56B6", + "logicalId": "MyTaskDefinitionAppContainerLogGroupA24DD1B6", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 649, - "startColumn": 5, - "endLine": 649, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" - } + "startLine": 535, + "startColumn": 3, + "endLine": 535, + "endColumn": 48, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyTaskDefinitionExecutionRole3D88C23D' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidDELETEApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid2BAC56B6", + "logicalId": "MyTaskDefinitionExecutionRole3D88C23D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 655, - "startColumn": 5, - "endLine": 655, + "startLine": 545, + "startColumn": 4, + "endLine": 545, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'FargateServiceAC2B3B85' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidDELETEApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid2BAC56B6", + "logicalId": "FargateServiceAC2B3B85", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 656, - "startColumn": 5, - "endLine": 656, + "startLine": 597, + "startColumn": 4, + "endLine": 597, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/{ref:WidgetswidgetsapiDeploymentStageprod0D8CD1B7}/DELETE/*)" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Resource 'FargateServiceSecurityGroup0A0E79CB' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidDELETEApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid4096AFEF", + "logicalId": "FargateServiceSecurityGroup0A0E79CB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 692, + "startLine": 646, + "startColumn": 4, + "endLine": 646, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/eventbridge-lambda--EventBridgeLambdaStack.template.json": { + "filePath": "cdk/eventbridge-lambda--EventBridgeLambdaStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 8, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 11, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Singleton8C7B99F3", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 105, "startColumn": 5, - "endLine": 692, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 105, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "python3.9", + "lifecycle": "deprecated" } }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'SingletonServiceRoleDDD815CD' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Singleton8C7B99F3", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 108, + "startColumn": 4, + "endLine": 108, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidDELETEApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid4096AFEF", + "logicalId": "TopicTokenSubscription178F3F75E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Endpoint", "category": "Best Practice", - "startLine": 693, + "startLine": 15, "startColumn": 5, - "endLine": 693, - "endColumn": 18, + "endLine": 15, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" + "resolutionSource": "parameter 'email' (type String)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidDELETEApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid4096AFEF", + "logicalId": "TopicTokenSubscription178F3F75E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 699, + "startLine": 18, "startColumn": 5, - "endLine": 699, - "endColumn": 15, + "endLine": 18, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -40169,43 +38061,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidDELETEApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid4096AFEF", + "logicalId": "TopicTokenSubscription178F3F75E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.TopicArn", "category": "Best Practice", - "startLine": 700, + "startLine": 19, "startColumn": 5, - "endLine": 700, - "endColumn": 15, + "endLine": 19, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/test-invoke-stage/DELETE/*)" + "resolutionSource": "Ref to 'TopicBFC7AF6E'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidDELETEE81619C6", + "logicalId": "RuleAllowEventRuleEventBridgeLambdaStackSingleton0D05990EAAD8CFB9", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 733, + "startLine": 140, "startColumn": 5, - "endLine": 733, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 140, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -40215,107 +38107,87 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidDELETEE81619C6", + "logicalId": "RuleAllowEventRuleEventBridgeLambdaStackSingleton0D05990EAAD8CFB9", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 761, + "startLine": 141, "startColumn": 5, - "endLine": 761, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 141, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'WidgetswidgetsapiidAA19CFA8'" + "resolutionSource": "GetAtt Singleton8C7B99F3.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiidDELETEE81619C6", + "logicalId": "RuleAllowEventRuleEventBridgeLambdaStackSingleton0D05990EAAD8CFB9", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 764, + "startLine": 147, "startColumn": 5, - "endLine": 764, + "endLine": 147, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Widgetswidgetsapi72353315'" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'WidgetsWidgetStore0ED7FDB7' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "WidgetsWidgetStore0ED7FDB7", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 30, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'WidgetsWidgetHandlerServiceRole8C2B589C' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WidgetsWidgetHandlerServiceRole8C2B589C", + "logicalId": "RuleAllowEventRuleEventBridgeLambdaStackSingleton0D05990EAAD8CFB9", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 13, - "startColumn": 4, - "endLine": 13, + "startLine": 148, + "startColumn": 5, + "endLine": 148, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt Rule4C995B7F.Arn" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'WidgetsWidgetHandler1BC9DB34' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'TopicBFC7AF6E' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetsWidgetHandler1BC9DB34", + "logicalId": "TopicBFC7AF6E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 103, + "startLine": 5, "startColumn": 4, - "endLine": 103, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -40323,19 +38195,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Widgetswidgetsapi72353315' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Resource 'SingletonServiceRoleDDD815CD' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Widgetswidgetsapi72353315", + "logicalId": "SingletonServiceRoleDDD815CD", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 139, + "startLine": 29, "startColumn": 4, - "endLine": 139, + "endLine": 29, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -40343,19 +38215,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'WidgetswidgetsapiCloudWatchRole8C2A5801' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'Singleton8C7B99F3' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiCloudWatchRole8C2A5801", + "logicalId": "Singleton8C7B99F3", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 149, + "startLine": 87, "startColumn": 4, - "endLine": 149, + "endLine": 87, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -40363,35 +38235,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'WidgetswidgetsapiDeploymentStageprod0D8CD1B7' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Resource 'Rule4C995B7F' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WidgetswidgetsapiDeploymentStageprod0D8CD1B7", + "logicalId": "Rule4C995B7F", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Events::Rule" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 224, + "startLine": 118, "startColumn": 4, - "endLine": 224, + "endLine": 118, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/pat-the-big-fan--TheBigFanStack.template.json": { - "filePath": "cdk/pat-the-big-fan--TheBigFanStack.template.json", + "cdk/http-proxy-apigateway--HttpProxy.template.json": { + "filePath": "cdk/http-proxy-apigateway--HttpProxy.template.json", "status": "OK", "metadata": { - "resourcesScanned": 27, + "resourcesScanned": 9, "counts": { "fatal": 0, - "errors": 2, - "warnings": 3, - "informational": 44, + "errors": 0, + "warnings": 0, + "informational": 15, "debug": 0 }, "suppressed": 0, @@ -40400,236 +38272,235 @@ }, "diagnostics": [ { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "SQSCreatedStatusSubscribeLambdaHandler0467DB95", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 277, - "startColumn": 9, - "endLine": 277, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" - } - }, - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "SQSAnyOtherStatusSubscribeLambdaHandler4037E293", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 423, - "startColumn": 9, - "endLine": 423, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" - } - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AssetParameters18833649a477f0511316387314562906099cb212342be772321cf1075727e8d8ArtifactHash3D36986C' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AssetParameters18833649a477f0511316387314562906099cb212342be772321cf1075727e8d8ArtifactHash3D36986C", - "entityType": "Parameter" + "logicalId": "ProxyAPIDeployment0905F2A51149e52ed55821cdb6db0214e7f00a2c", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Parameters/AssetParameters18833649a477f0511316387314562906099cb212342be772321cf1075727e8d8ArtifactHash3D36986C", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 780, + "startLine": 76, "startColumn": 5, - "endLine": 780, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "endLine": 76, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ProxyAPI32755B5A'" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'SQSCreatedStatusSubscribeLambdaHandlerServiceRole36576A8A' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SQSCreatedStatusSubscribeLambdaHandler0467DB95", + "logicalId": "ProxyAPIDeploymentStageprodBE6BE99F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 279, - "startColumn": 7, - "endLine": 279, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 96, + "startColumn": 5, + "endLine": 96, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ProxyAPI32755B5A'" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'SQSAnyOtherStatusSubscribeLambdaHandlerServiceRole395E81EB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SQSAnyOtherStatusSubscribeLambdaHandler4037E293", + "logicalId": "ProxyAPIDeploymentStageprodBE6BE99F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 425, - "startColumn": 7, - "endLine": 425, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 99, + "startColumn": 5, + "endLine": 99, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BigFanTopicStatusCreatedSubscriberQueue589E974E", + "logicalId": "ProxyAPIaws4558A94F", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ApiGateway::Resource" }, + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 12, + "startLine": 111, "startColumn": 5, - "endLine": 12, - "endColumn": 53, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "endLine": 111, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt ProxyAPI32755B5A.RootResourceId" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BigFanTopicStatusCreatedSubscriberQueue589E974E", + "logicalId": "ProxyAPIaws4558A94F", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ApiGateway::Resource" }, + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 12, + "startLine": 117, "startColumn": 5, - "endLine": 12, - "endColumn": 53, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "endLine": 117, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76", + "logicalId": "ProxyAPIaws4558A94F", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ApiGateway::Resource" }, + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 84, + "startLine": 118, "startColumn": 5, - "endLine": 84, - "endColumn": 54, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "endLine": 118, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ProxyAPI32755B5A'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76", + "logicalId": "ProxyProxyResourceGETawsB89410CC", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ApiGateway::Resource" }, + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 84, + "startLine": 129, "startColumn": 5, - "endLine": 84, - "endColumn": 54, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "endLine": 129, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ProxyAPIaws4558A94F'" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "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", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BigFanTopicStatusCreatedSubscriberQueue589E974E", + "logicalId": "ProxyProxyResourceGETawsB89410CC", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 18, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "startLine": 132, + "startColumn": 5, + "endLine": 132, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "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", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76", + "logicalId": "ProxyProxyResourceGETawsB89410CC", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 86, - "startColumn": 7, - "endLine": 86, - "endColumn": 18, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "startLine": 133, + "startColumn": 5, + "endLine": 133, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ProxyAPI32755B5A'" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BigFanTopicStatusCreatedSubscriberQueue589E974E", + "logicalId": "ProxyProxyResourceGETawsGET6AEDAC86", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.QueueName", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 15, - "startColumn": 9, - "endLine": 15, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "startLine": 145, + "startColumn": 5, + "endLine": 145, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -40639,91 +38510,170 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BigFanTopicStatusCreatedSubscriberQueueTheBigFanStacktheBigFanTopicCC7EBE3B39DDDB95", + "logicalId": "ProxyProxyResourceGETawsGET6AEDAC86", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 63, - "startColumn": 9, - "endLine": 63, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "startLine": 157, + "startColumn": 5, + "endLine": 157, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ProxyProxyResourceGETawsB89410CC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BigFanTopicStatusCreatedSubscriberQueueTheBigFanStacktheBigFanTopicCC7EBE3B39DDDB95", + "logicalId": "ProxyProxyResourceGETawsGET6AEDAC86", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.TopicArn", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 64, - "startColumn": 9, - "endLine": 64, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "startLine": 160, + "startColumn": 5, + "endLine": 160, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'theBigFanTopicF96567DE'" + "resolutionSource": "Ref to 'ProxyAPI32755B5A'" } }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ProxyAPI32755B5A' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ProxyAPI32755B5A", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ProxyAPICloudWatchRoleB8A087D1' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ProxyAPICloudWatchRoleB8A087D1", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 19, + "startColumn": 4, + "endLine": 19, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ProxyAPIDeploymentStageprodBE6BE99F' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ProxyAPIDeploymentStageprodBE6BE99F", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Stage" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 92, + "startColumn": 4, + "endLine": 92, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/imagebuilder--ImagebuilderStack.template.json": { + "filePath": "cdk/imagebuilder--ImagebuilderStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 11, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 31, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", + "message": "Property 'Data' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BigFanTopicStatusCreatedSubscriberQueueTheBigFanStacktheBigFanTopicCC7EBE3B39DDDB95", + "logicalId": "GitComponenet", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::ImageBuilder::Component" }, - "propertyPath": "Properties.Endpoint", + "propertyPath": "Properties.Data", "category": "Best Practice", - "startLine": 67, - "startColumn": 9, - "endLine": 67, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt BigFanTopicStatusCreatedSubscriberQueue589E974E.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76", + "logicalId": "GitComponenet", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ImageBuilder::Component" }, - "propertyPath": "Properties.QueueName", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 87, - "startColumn": 9, - "endLine": 87, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -40733,20 +38683,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'Platform' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueueTheBigFanStacktheBigFanTopicCC7EBE3B9905847D", + "logicalId": "GitComponenet", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::ImageBuilder::Component" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.Platform", "category": "Best Practice", - "startLine": 135, - "startColumn": 9, - "endLine": 135, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -40756,162 +38706,158 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", + "message": "Property 'Version' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueueTheBigFanStacktheBigFanTopicCC7EBE3B9905847D", + "logicalId": "GitComponenet", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::ImageBuilder::Component" }, - "propertyPath": "Properties.TopicArn", + "propertyPath": "Properties.Version", "category": "Best Practice", - "startLine": 136, - "startColumn": 9, - "endLine": 136, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'theBigFanTopicF96567DE'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", + "message": "Property 'Data' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueueTheBigFanStacktheBigFanTopicCC7EBE3B9905847D", + "logicalId": "NodejsComponenet", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::ImageBuilder::Component" }, - "propertyPath": "Properties.Endpoint", + "propertyPath": "Properties.Data", "category": "Best Practice", - "startLine": 139, - "startColumn": 9, - "endLine": 139, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "startLine": 18, + "startColumn": 5, + "endLine": 18, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SQSCreatedStatusSubscribeLambdaHandlerSqsEventSourceTheBigFanStackBigFanTopicStatusCreatedSubscriberQueueF8927E4802E7770C", + "logicalId": "NodejsComponenet", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::ImageBuilder::Component" }, - "propertyPath": "Properties.EventSourceArn", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 295, - "startColumn": 9, - "endLine": 295, - "endColumn": 24, + "startLine": 19, + "startColumn": 5, + "endLine": 19, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt BigFanTopicStatusCreatedSubscriberQueue589E974E.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'Platform' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SQSAnyOtherStatusSubscribeLambdaHandlerSqsEventSourceTheBigFanStackBigFanTopicAnyOtherStatusSubscriberQueue08FB964013A92B5B", + "logicalId": "NodejsComponenet", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::ImageBuilder::Component" }, - "propertyPath": "Properties.EventSourceArn", + "propertyPath": "Properties.Platform", "category": "Best Practice", - "startLine": 441, - "startColumn": 9, - "endLine": 441, - "endColumn": 24, + "startLine": 20, + "startColumn": 5, + "endLine": 20, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Version' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPIDeployment0A3D40CC3de72833f42963bffb25d554063d867d", + "logicalId": "NodejsComponenet", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::ImageBuilder::Component" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Version", "category": "Best Practice", - "startLine": 515, - "startColumn": 9, - "endLine": 515, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 21, + "startColumn": 5, + "endLine": 21, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'theBigFanAPI6E21715A'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Data' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPIDeploymentStageprod1F15C9DC", + "logicalId": "DockerComponenet", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::ImageBuilder::Component" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Data", "category": "Best Practice", - "startLine": 533, - "startColumn": 9, - "endLine": 533, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 30, + "startColumn": 5, + "endLine": 30, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'theBigFanAPI6E21715A'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPIDeploymentStageprod1F15C9DC", + "logicalId": "DockerComponenet", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::ImageBuilder::Component" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 548, - "startColumn": 9, - "endLine": 548, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 31, + "startColumn": 5, + "endLine": 31, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -40921,44 +38867,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Property 'Platform' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPISendEventD29495C2", + "logicalId": "DockerComponenet", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::ImageBuilder::Component" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.Platform", "category": "Best Practice", - "startLine": 557, - "startColumn": 9, - "endLine": 557, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 32, + "startColumn": 5, + "endLine": 32, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt theBigFanAPI6E21715A.RootResourceId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Property 'Version' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPISendEventD29495C2", + "logicalId": "DockerComponenet", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::ImageBuilder::Component" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.Version", "category": "Best Practice", - "startLine": 563, - "startColumn": 9, - "endLine": 563, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 33, + "startColumn": 5, + "endLine": 33, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -40968,44 +38913,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Components' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPISendEventD29495C2", + "logicalId": "AmazonLinux2023withGitAndNodeRecipe", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::ImageBuilder::ContainerRecipe" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Components", "category": "Best Practice", - "startLine": 564, - "startColumn": 9, - "endLine": 564, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 50, + "startColumn": 5, + "endLine": 50, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'theBigFanAPI6E21715A'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPISendEventPOSTBC493093", + "logicalId": "AmazonLinux2023withGitAndNodeRecipe", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ImageBuilder::ContainerRecipe" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.ContainerType", "category": "Best Practice", - "startLine": 575, - "startColumn": 9, - "endLine": 575, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "startLine": 76, + "startColumn": 5, + "endLine": 76, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -41015,92 +38959,89 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'DockerfileTemplateData' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPISendEventPOSTBC493093", + "logicalId": "AmazonLinux2023withGitAndNodeRecipe", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ImageBuilder::ContainerRecipe" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.DockerfileTemplateData", "category": "Best Practice", - "startLine": 576, - "startColumn": 9, - "endLine": 576, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "startLine": 77, + "startColumn": 5, + "endLine": 77, + "endColumn": 28, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'theBigFanAPISendEventD29495C2'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPISendEventPOSTBC493093", + "logicalId": "AmazonLinux2023withGitAndNodeRecipe", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ImageBuilder::ContainerRecipe" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 579, - "startColumn": 9, - "endLine": 579, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "startLine": 78, + "startColumn": 5, + "endLine": 78, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'theBigFanAPI6E21715A'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentImage' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPIResponseModelD06A5A7F", + "logicalId": "AmazonLinux2023withGitAndNodeRecipe", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::ImageBuilder::ContainerRecipe" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.ParentImage", "category": "Best Practice", - "startLine": 668, - "startColumn": 9, - "endLine": 668, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 79, + "startColumn": 5, + "endLine": 79, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'theBigFanAPI6E21715A'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", + "message": "Property 'TargetRepository' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPIResponseModelD06A5A7F", + "logicalId": "AmazonLinux2023withGitAndNodeRecipe", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::ImageBuilder::ContainerRecipe" }, - "propertyPath": "Properties.ContentType", + "propertyPath": "Properties.TargetRepository", "category": "Best Practice", - "startLine": 671, - "startColumn": 9, - "endLine": 671, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 91, + "startColumn": 5, + "endLine": 91, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -41110,20 +39051,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'Version' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPIResponseModelD06A5A7F", + "logicalId": "AmazonLinux2023withGitAndNodeRecipe", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::ImageBuilder::ContainerRecipe" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.Version", "category": "Best Practice", - "startLine": 672, - "startColumn": 9, - "endLine": 672, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 97, + "startColumn": 5, + "endLine": 97, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -41133,44 +39074,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPIErrorResponseModel11E9FBC4", + "logicalId": "ImageBuilderInfraConfig", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::ImageBuilder::InfrastructureConfiguration" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 691, - "startColumn": 9, - "endLine": 691, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 188, + "startColumn": 5, + "endLine": 188, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'theBigFanAPI6E21715A'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPIErrorResponseModel11E9FBC4", + "logicalId": "ImageBuilderDistConfig", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::ImageBuilder::DistributionConfiguration" }, - "propertyPath": "Properties.ContentType", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 694, - "startColumn": 9, - "endLine": 694, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 212, + "startColumn": 5, + "endLine": 212, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -41183,17 +39123,17 @@ "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPIErrorResponseModel11E9FBC4", + "logicalId": "AmazonLinux2023WithGitPipeline", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::ImageBuilder::ImagePipeline" }, "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 695, - "startColumn": 9, - "endLine": 695, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 239, + "startColumn": 5, + "endLine": 239, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -41203,275 +39143,433 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'theBigFanTopicF96567DE' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'GitComponenet' of type 'AWS::ImageBuilder::Component' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "theBigFanTopicF96567DE", + "logicalId": "GitComponenet", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ImageBuilder::Component" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 5, - "startColumn": 7, + "startColumn": 4, "endLine": 5, - "endColumn": 18, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BigFanTopicStatusCreatedSubscriberQueue589E974E' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Resource 'NodejsComponenet' of type 'AWS::ImageBuilder::Component' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BigFanTopicStatusCreatedSubscriberQueue589E974E", + "logicalId": "NodejsComponenet", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ImageBuilder::Component" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 18, + "startLine": 17, + "startColumn": 4, + "endLine": 17, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Resource 'DockerComponenet' of type 'AWS::ImageBuilder::Component' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76", + "logicalId": "DockerComponenet", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ImageBuilder::Component" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 86, - "startColumn": 7, - "endLine": 86, - "endColumn": 18, + "startLine": 29, + "startColumn": 4, + "endLine": 29, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SQSCreatedStatusSubscribeLambdaHandlerServiceRole36576A8A' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'EcrRepoForImageBuilderCodeCatalystBF634BA6' of type 'AWS::ECR::Repository' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SQSCreatedStatusSubscribeLambdaHandlerServiceRole36576A8A", + "logicalId": "EcrRepoForImageBuilderCodeCatalystBF634BA6", + "entityType": "Resource", + "resourceType": "AWS::ECR::Repository" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 39, + "startColumn": 3, + "endLine": 39, + "endColumn": 46, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'AmazonLinux2023withGitAndNodeRecipe' of type 'AWS::ImageBuilder::ContainerRecipe' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "AmazonLinux2023withGitAndNodeRecipe", + "entityType": "Resource", + "resourceType": "AWS::ImageBuilder::ContainerRecipe" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 49, + "startColumn": 4, + "endLine": 49, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'EC2InstanceProfileForImageBuilderA043DE9F' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "EC2InstanceProfileForImageBuilderA043DE9F", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 162, - "startColumn": 7, - "endLine": 162, - "endColumn": 18, + "startLine": 105, + "startColumn": 4, + "endLine": 105, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SQSCreatedStatusSubscribeLambdaHandler0467DB95' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'ImageBuilderInfraConfig' of type 'AWS::ImageBuilder::InfrastructureConfiguration' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SQSCreatedStatusSubscribeLambdaHandler0467DB95", + "logicalId": "ImageBuilderInfraConfig", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ImageBuilder::InfrastructureConfiguration" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 231, - "startColumn": 7, - "endLine": 231, - "endColumn": 18, + "startLine": 184, + "startColumn": 4, + "endLine": 184, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SQSCreatedStatusSubscribeLambdaHandlerSqsEventSourceTheBigFanStackBigFanTopicStatusCreatedSubscriberQueueF8927E4802E7770C' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", + "message": "Resource 'ImageBuilderDistConfig' of type 'AWS::ImageBuilder::DistributionConfiguration' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SQSCreatedStatusSubscribeLambdaHandlerSqsEventSourceTheBigFanStackBigFanTopicStatusCreatedSubscriberQueueF8927E4802E7770C", + "logicalId": "ImageBuilderDistConfig", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::ImageBuilder::DistributionConfiguration" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 291, - "startColumn": 7, - "endLine": 291, - "endColumn": 18, + "startLine": 196, + "startColumn": 4, + "endLine": 196, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'AmazonLinux2023WithGitPipeline' of type 'AWS::ImageBuilder::ImagePipeline' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "AmazonLinux2023WithGitPipeline", + "entityType": "Resource", + "resourceType": "AWS::ImageBuilder::ImagePipeline" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 220, + "startColumn": 4, + "endLine": 220, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/inspector2--Inspector2EnableDelegatedAdminAccountStack.template.json": { + "filePath": "cdk/inspector2--Inspector2EnableDelegatedAdminAccountStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 12, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 5, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'Inspector2EnableDelegatedAdminAccountResourceInspector2EnableResourceInspectorRole00253606' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "AWS679f53fac002430cb0da5b7982bd22872D164C4C", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 230, + "startColumn": 4, + "endLine": 230, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 346, + "startColumn": 4, + "endLine": 346, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Inspector2EnableDelegatedAdminAccountResourceInspector2EnableDelegatedAdminResourceRoleC8FD65F6' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Inspector2EnableDelegatedAdminAccountResourceInspector2EnableDelegatedAdminResourceRoleC8FD65F6", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 6, + "startColumn": 4, + "endLine": 6, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SQSAnyOtherStatusSubscribeLambdaHandlerServiceRole395E81EB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'Inspector2EnableDelegatedAdminAccountResourceInspector2EnableResourceInspectorRole00253606' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SQSAnyOtherStatusSubscribeLambdaHandlerServiceRole395E81EB", + "logicalId": "Inspector2EnableDelegatedAdminAccountResourceInspector2EnableResourceInspectorRole00253606", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 308, - "startColumn": 7, - "endLine": 308, - "endColumn": 18, + "startLine": 52, + "startColumn": 4, + "endLine": 52, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SQSAnyOtherStatusSubscribeLambdaHandler4037E293' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'AWS679f53fac002430cb0da5b7982bd22872D164C4C' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SQSAnyOtherStatusSubscribeLambdaHandler4037E293", + "logicalId": "AWS679f53fac002430cb0da5b7982bd22872D164C4C", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 377, - "startColumn": 7, - "endLine": 377, - "endColumn": 18, + "startLine": 212, + "startColumn": 4, + "endLine": 212, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SQSAnyOtherStatusSubscribeLambdaHandlerSqsEventSourceTheBigFanStackBigFanTopicAnyOtherStatusSubscriberQueue08FB964013A92B5B' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SQSAnyOtherStatusSubscribeLambdaHandlerSqsEventSourceTheBigFanStackBigFanTopicAnyOtherStatusSubscriberQueue08FB964013A92B5B", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 437, - "startColumn": 7, - "endLine": 437, - "endColumn": 18, + "startLine": 268, + "startColumn": 4, + "endLine": 268, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'theBigFanAPI6E21715A' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPI6E21715A", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 454, - "startColumn": 7, - "endLine": 454, - "endColumn": 18, + "startLine": 329, + "startColumn": 4, + "endLine": 329, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "cdk/inspector2--Inspector2EnableStack.template.json": { + "filePath": "cdk/inspector2--Inspector2EnableStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'theBigFanAPICloudWatchRoleD603B41E' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'EnableInspector2ResourceInspectorRole75753456' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "theBigFanAPICloudWatchRoleD603B41E", + "logicalId": "AWS679f53fac002430cb0da5b7982bd22872D164C4C", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 463, - "startColumn": 7, - "endLine": 463, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", + "startLine": 89, + "startColumn": 4, + "endLine": 89, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'theBigFanAPIDeploymentStageprod1F15C9DC' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Resource 'EnableInspector2ResourceInspectorRole75753456' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "theBigFanAPIDeploymentStageprod1F15C9DC", + "logicalId": "EnableInspector2ResourceInspectorRole75753456", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 532, - "startColumn": 7, - "endLine": 532, - "endColumn": 18, + "startLine": 6, + "startColumn": 4, + "endLine": 6, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DefaultLambdaHanderRoleA44A3BA8' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'AWS679f53fac002430cb0da5b7982bd22872D164C4C' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DefaultLambdaHanderRoleA44A3BA8", + "logicalId": "AWS679f53fac002430cb0da5b7982bd22872D164C4C", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 716, - "startColumn": 7, - "endLine": 716, - "endColumn": 18, + "startLine": 71, + "startColumn": 4, + "endLine": 71, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/pat-the-cloudwatch-dashboard--TheCloudwatchDashboardStack.template.json": { - "filePath": "cdk/pat-the-cloudwatch-dashboard--TheCloudwatchDashboardStack.template.json", + "cdk/inspector2--Inspector2MonitoringStack.template.json": { + "filePath": "cdk/inspector2--Inspector2MonitoringStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 20, + "resourcesScanned": 14, "counts": { "fatal": 0, - "errors": 1, - "warnings": 2, - "informational": 25, + "errors": 0, + "warnings": 5, + "informational": 16, "debug": 0 }, "suppressed": 0, @@ -41480,109 +39578,110 @@ }, "diagnostics": [ { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "DynamoLambdaHandlerFB6EB814", + "logicalId": "Inspector2InitialScanHandler460C9991", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 160, - "startColumn": 9, - "endLine": 160, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "startLine": 164, + "startColumn": 5, + "endLine": 164, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, { - "ruleId": "W2001", + "ruleId": "W2531", "severity": "WARN", - "message": "Parameter 'AssetParameters2e2fb63cef5de8866986a28a524c8f97b58a2ec13b66aa5753892cafdd7dbe46ArtifactHash18C20B66' is not referenced anywhere in the template", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "AssetParameters2e2fb63cef5de8866986a28a524c8f97b58a2ec13b66aa5753892cafdd7dbe46ArtifactHash18C20B66", - "entityType": "Parameter" + "logicalId": "Inspector2FindingHandler1F85FFBC", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/AssetParameters2e2fb63cef5de8866986a28a524c8f97b58a2ec13b66aa5753892cafdd7dbe46ArtifactHash18C20B66", - "category": "Best Practice", - "startLine": 1058, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 344, "startColumn": 5, - "endLine": 1058, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "endLine": 344, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" + } }, { "ruleId": "W3005", "severity": "WARN", - "message": "'DynamoLambdaHandlerServiceRole4C867B01' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'Inspector2InitialScanHandlerServiceRoleA1739B7A' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "DynamoLambdaHandlerFB6EB814", + "logicalId": "Inspector2InitialScanHandler460C9991", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 162, - "startColumn": 7, - "endLine": 162, - "endColumn": 17, + "startLine": 167, + "startColumn": 4, + "endLine": 167, + "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "HitsFF5AF8CD", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 6, - "startColumn": 9, - "endLine": 6, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 283, + "startColumn": 4, + "endLine": 283, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ProtocolType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'Inspector2FindingHandlerServiceRoleCEDAFBC1' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "HttpAPI8D545486", + "logicalId": "Inspector2FindingHandler1F85FFBC", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Api" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ProtocolType", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 176, - "startColumn": 9, - "endLine": 176, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 347, + "startColumn": 4, + "endLine": 347, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", @@ -41590,16 +39689,16 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HttpAPIDefaultRouteTheCloudwatchDashboardStackHttpAPIDefaultRoute851EEAB4Permission3852997E", + "logicalId": "Inspector2MonitoringinitialScanRuleAllowEventRuleInspector2MonitoringStackInspector2InitialScanHandler1F2D84B66EB326AF", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 185, - "startColumn": 9, - "endLine": 185, - "endColumn": 16, + "startLine": 40, + "startColumn": 5, + "endLine": 40, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -41612,21 +39711,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HttpAPIDefaultRouteTheCloudwatchDashboardStackHttpAPIDefaultRoute851EEAB4Permission3852997E", + "logicalId": "Inspector2MonitoringinitialScanRuleAllowEventRuleInspector2MonitoringStackInspector2InitialScanHandler1F2D84B66EB326AF", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 186, - "startColumn": 9, - "endLine": 186, - "endColumn": 22, + "startLine": 41, + "startColumn": 5, + "endLine": 41, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt DynamoLambdaHandlerFB6EB814.Arn" + "resolutionSource": "GetAtt Inspector2InitialScanHandler460C9991.Arn" } }, { @@ -41635,16 +39734,16 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HttpAPIDefaultRouteTheCloudwatchDashboardStackHttpAPIDefaultRoute851EEAB4Permission3852997E", + "logicalId": "Inspector2MonitoringinitialScanRuleAllowEventRuleInspector2MonitoringStackInspector2InitialScanHandler1F2D84B66EB326AF", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 192, - "startColumn": 9, - "endLine": 192, - "endColumn": 19, + "startLine": 47, + "startColumn": 5, + "endLine": 47, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -41657,430 +39756,490 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HttpAPIDefaultRouteTheCloudwatchDashboardStackHttpAPIDefaultRoute851EEAB4Permission3852997E", + "logicalId": "Inspector2MonitoringinitialScanRuleAllowEventRuleInspector2MonitoringStackInspector2InitialScanHandler1F2D84B66EB326AF", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 193, - "startColumn": 9, - "endLine": 193, - "endColumn": 19, + "startLine": 48, + "startColumn": 5, + "endLine": 48, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:HttpAPI8D545486}/*/*)" + "resolutionSource": "GetAtt Inspector2MonitoringinitialScanRule902E013C.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HttpAPIDefaultRouteDefaultRouteIntegration9F0AC785", + "logicalId": "Inspector2MonitoringfindingScanRuleAllowEventRuleInspector2MonitoringStackInspector2FindingHandler16831F85366B3530", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Integration" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 225, - "startColumn": 9, - "endLine": 225, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 95, + "startColumn": 5, + "endLine": 95, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'HttpAPI8D545486'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HttpAPIDefaultRouteF9949FE6", + "logicalId": "Inspector2MonitoringfindingScanRuleAllowEventRuleInspector2MonitoringStackInspector2FindingHandler16831F85366B3530", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 244, - "startColumn": 9, - "endLine": 244, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", + "startLine": 96, + "startColumn": 5, + "endLine": 96, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'HttpAPI8D545486'" + "resolutionSource": "GetAtt Inspector2FindingHandler1F85FFBC.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HttpAPIDefaultStage1BC7D78F", + "logicalId": "Inspector2MonitoringfindingScanRuleAllowEventRuleInspector2MonitoringStackInspector2FindingHandler16831F85366B3530", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 267, - "startColumn": 9, - "endLine": 267, + "startLine": 102, + "startColumn": 5, + "endLine": 102, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'HttpAPI8D545486'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HttpAPIDefaultStage1BC7D78F", + "logicalId": "Inspector2MonitoringfindingScanRuleAllowEventRuleInspector2MonitoringStackInspector2FindingHandler16831F85366B3530", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 270, - "startColumn": 9, - "endLine": 270, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", + "startLine": 103, + "startColumn": 5, + "endLine": 103, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt Inspector2MonitoringfindingScanRuleC84833CE.Arn" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'HitsFF5AF8CD' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'Inspector2MonitoringinitialScanRule902E013C' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "HitsFF5AF8CD", + "logicalId": "Inspector2MonitoringinitialScanRule902E013C", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Events::Rule" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, + "startLine": 6, + "startColumn": 4, + "endLine": 6, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DynamoLambdaHandlerServiceRole4C867B01' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'Inspector2MonitoringfindingScanRuleC84833CE' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambdaHandlerServiceRole4C867B01", + "logicalId": "Inspector2MonitoringfindingScanRuleC84833CE", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 61, + "startColumn": 4, + "endLine": 61, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Inspector2InitialScanHandlerServiceRoleA1739B7A' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Inspector2InitialScanHandlerServiceRoleA1739B7A", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 18, + "startLine": 116, + "startColumn": 4, + "endLine": 116, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DynamoLambdaHandlerFB6EB814' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'Inspector2InitialScanHandler460C9991' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambdaHandlerFB6EB814", + "logicalId": "Inspector2InitialScanHandler460C9991", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 107, - "startColumn": 7, - "endLine": 107, - "endColumn": 18, + "startLine": 150, + "startColumn": 4, + "endLine": 150, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'HttpAPI8D545486' of type 'AWS::ApiGatewayV2::Api' supports Tags but none are configured", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "HttpAPI8D545486", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Api" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 174, - "startColumn": 7, - "endLine": 174, - "endColumn": 18, + "startLine": 205, + "startColumn": 4, + "endLine": 205, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'HttpAPIDefaultStage1BC7D78F' of type 'AWS::ApiGatewayV2::Stage' supports Tags but none are configured", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "HttpAPIDefaultStage1BC7D78F", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Stage" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 266, - "startColumn": 7, + "startColumn": 4, "endLine": 266, - "endColumn": 18, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'errorTopicE59AB483' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Inspector2FindingHandlerServiceRoleCEDAFBC1' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "errorTopicE59AB483", + "logicalId": "Inspector2FindingHandlerServiceRoleCEDAFBC1", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 277, - "startColumn": 5, - "endLine": 277, - "endColumn": 24, + "startLine": 296, + "startColumn": 4, + "endLine": 296, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'APIGateway4XXErrors1647FE3DB' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Resource 'Inspector2FindingHandler1F85FFBC' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "APIGateway4XXErrors1647FE3DB", + "logicalId": "Inspector2FindingHandler1F85FFBC", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 330, + "startColumn": 4, + "endLine": 330, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/lambda-cloudwatch-dashboard--LambdaCloudwatchDashboardStack.template.json": { + "filePath": "cdk/lambda-cloudwatch-dashboard--LambdaCloudwatchDashboardStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 8, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 2, + "informational": 6, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E2531", + "severity": "ERROR", + "message": "Runtime 'python3.7' was deprecated on '2023-12-04'. Creation was disabled on '2024-01-09', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SampleLambdaB2FF4FA1", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 285, - "startColumn": 7, - "endLine": 285, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 54, + "startColumn": 5, + "endLine": 54, + "endColumn": 13, + "ruleDescription": "Check if Lambda Function Runtimes are blocked for create", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.7", + "lifecycle": "create-blocked" + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'APIGateway5XXErrors0A91D7B4E' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'SampleLambdaServiceRoleB1A8618F' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "APIGateway5XXErrors0A91D7B4E", + "logicalId": "SampleLambdaB2FF4FA1", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 354, - "startColumn": 7, - "endLine": 354, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", + "startLine": 57, + "startColumn": 4, + "endLine": 57, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'APIp99latencyalarm1s67095ACE' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "APIp99latencyalarm1s67095ACE", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 385, - "startColumn": 7, - "endLine": 385, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", + "startLine": 236, + "startColumn": 4, + "endLine": 236, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DynamoLambda2ErrorDE3BEB2F' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Property 'DashboardName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambda2ErrorDE3BEB2F", + "logicalId": "SampleLambdaDashboard39118496", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::CloudWatch::Dashboard" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DashboardName", "category": "Best Practice", - "startLine": 416, - "startColumn": 7, - "endLine": 416, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 150, + "startColumn": 5, + "endLine": 150, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DynamoLambdap99LongDuration1s739ED568' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Resource 'SampleLambdaServiceRoleB1A8618F' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambdap99LongDuration1s739ED568", + "logicalId": "SampleLambdaServiceRoleB1A8618F", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 481, - "startColumn": 7, - "endLine": 481, - "endColumn": 18, + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DynamoLambda2Throttled090CFA4C' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Resource 'SampleLambdaB2FF4FA1' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambda2Throttled090CFA4C", + "logicalId": "SampleLambdaB2FF4FA1", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 511, - "startColumn": 7, - "endLine": 511, - "endColumn": 18, + "startLine": 39, + "startColumn": 4, + "endLine": 39, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DynamoDBTableReadsWritesThrottled13F6F2AE' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Resource 'SampleLambdaDashboard39118496' of type 'AWS::CloudWatch::Dashboard' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DynamoDBTableReadsWritesThrottled13F6F2AE", + "logicalId": "SampleLambdaDashboard39118496", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::CloudWatch::Dashboard" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 576, - "startColumn": 7, - "endLine": 576, - "endColumn": 18, + "startLine": 94, + "startColumn": 4, + "endLine": 94, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DynamoDBErrors0FA6C66C9' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DynamoDBErrors0FA6C66C9", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 641, - "startColumn": 7, - "endLine": 641, - "endColumn": 18, + "startLine": 158, + "startColumn": 4, + "endLine": 158, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CloudWatchDashBoard043C60B6' of type 'AWS::CloudWatch::Dashboard' supports Tags but none are configured", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CloudWatchDashBoard043C60B6", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Dashboard" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 900, - "startColumn": 7, - "endLine": 900, - "endColumn": 18, + "startLine": 219, + "startColumn": 4, + "endLine": 219, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/pat-the-destined-lambda--TheDestinedLambdaStack.template.json": { - "filePath": "cdk/pat-the-destined-lambda--TheDestinedLambdaStack.template.json", + "cdk/lambda-cron--LambdaCronExample.template.json": { + "filePath": "cdk/lambda-cron--LambdaCronExample.template.json", "status": "OK", "metadata": { - "resourcesScanned": 28, + "resourcesScanned": 5, "counts": { "fatal": 0, - "errors": 3, - "warnings": 4, - "informational": 49, + "errors": 0, + "warnings": 2, + "informational": 7, "debug": 0 }, "suppressed": 0, @@ -42089,216 +40248,254 @@ }, "diagnostics": [ { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "destinedLambda8DF776BB", + "logicalId": "Singleton8C7B99F3", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 127, - "startColumn": 9, - "endLine": 127, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "startLine": 50, + "startColumn": 5, + "endLine": 50, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" + "actualValue": "python3.9", + "lifecycle": "deprecated" } }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "ruleId": "W3005", + "severity": "WARN", + "message": "'SingletonServiceRoleDDD815CD' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "SuccessLambdaHandler0E2CD797", + "logicalId": "Singleton8C7B99F3", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 289, - "startColumn": 9, - "endLine": 289, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 53, + "startColumn": 4, + "endLine": 53, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 84, + "startColumn": 5, + "endLine": 84, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" + "lifecycle": "create-only" } }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FailureLambdaHandlerBB58C051", + "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 446, - "startColumn": 9, - "endLine": 446, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 85, + "startColumn": 5, + "endLine": 85, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" + "lifecycle": "create-only", + "resolutionSource": "GetAtt Singleton8C7B99F3.Arn" } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AssetParameters46d205b682091147559b63b9f28b2b0fcfd0b5f3e873a3b40a905e1f82d2001aArtifactHashE6B80060' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AssetParameters46d205b682091147559b63b9f28b2b0fcfd0b5f3e873a3b40a905e1f82d2001aArtifactHashE6B80060", - "entityType": "Parameter" + "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Parameters/AssetParameters46d205b682091147559b63b9f28b2b0fcfd0b5f3e873a3b40a905e1f82d2001aArtifactHashE6B80060", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 841, + "startLine": 91, "startColumn": 5, - "endLine": 841, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "endLine": 91, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'destinedLambdaServiceRole87608B6F' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "destinedLambda8DF776BB", + "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 129, - "startColumn": 7, - "endLine": 129, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 92, + "startColumn": 5, + "endLine": 92, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt Rule4C995B7F.Arn" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'SuccessLambdaHandlerServiceRole77BD70C4' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SingletonServiceRoleDDD815CD' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "SuccessLambdaHandler0E2CD797", + "logicalId": "SingletonServiceRoleDDD815CD", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 292, - "startColumn": 7, - "endLine": 292, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FailureLambdaHandlerServiceRole7E0414CB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Singleton8C7B99F3' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "FailureLambdaHandlerBB58C051", + "logicalId": "Singleton8C7B99F3", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 449, - "startColumn": 7, - "endLine": 449, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 39, + "startColumn": 4, + "endLine": 39, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Resource 'Rule4C995B7F' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DestinedEventBus14820B65", + "logicalId": "Rule4C995B7F", "entityType": "Resource", - "resourceType": "AWS::Events::EventBus" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, - "startColumn": 9, - "endLine": 6, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-events", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 62, + "startColumn": 4, + "endLine": 62, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/lambda-layer--LambdaLayerStack.template.json": { + "filePath": "cdk/lambda-layer--LambdaLayerStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 5, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'LambdaFunctionServiceRoleC555A460' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "destinedLambdaEventInvokeConfig3CA2AF7E", + "logicalId": "LambdaFunctionBF21E41F", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventInvokeConfig" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 142, - "startColumn": 9, - "endLine": 142, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'destinedLambda8DF776BB'" - } + "startLine": 83, + "startColumn": 4, + "endLine": 83, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Qualifier' is create-only; updating it will cause resource replacement", + "message": "Property 'CompatibleRuntimes' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "destinedLambdaEventInvokeConfig3CA2AF7E", + "logicalId": "HelperLayer49ADCD6B", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventInvokeConfig" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.Qualifier", + "propertyPath": "Properties.CompatibleRuntimes", "category": "Best Practice", - "startLine": 145, - "startColumn": 9, - "endLine": 145, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -42308,19 +40505,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'Content' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "destinedLambdaAllowInvokeTheDestinedLambdaStacktheDestinedLambdaTopic8CE84AB4D93BC799", + "logicalId": "HelperLayer49ADCD6B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Content", "category": "Best Practice", - "startLine": 173, - "startColumn": 9, - "endLine": 173, - "endColumn": 16, + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -42330,88 +40528,120 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "destinedLambdaAllowInvokeTheDestinedLambdaStacktheDestinedLambdaTopic8CE84AB4D93BC799", + "logicalId": "HelperLayer49ADCD6B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 174, - "startColumn": 9, - "endLine": 174, - "endColumn": 22, + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt destinedLambda8DF776BB.Arn" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Resource 'LambdaFunctionServiceRoleC555A460' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "destinedLambdaAllowInvokeTheDestinedLambdaStacktheDestinedLambdaTopic8CE84AB4D93BC799", + "logicalId": "LambdaFunctionServiceRoleC555A460", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 180, - "startColumn": 9, - "endLine": 180, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 28, + "startColumn": 4, + "endLine": 28, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'LambdaFunctionBF21E41F' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "destinedLambdaAllowInvokeTheDestinedLambdaStacktheDestinedLambdaTopic8CE84AB4D93BC799", + "logicalId": "LambdaFunctionBF21E41F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 181, - "startColumn": 9, - "endLine": 181, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'theDestinedLambdaTopic8F2C8FB6'" - } + "startLine": 62, + "startColumn": 4, + "endLine": 62, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/lambda-manage-s3-event-notification--AStack.template.json": { + "filePath": "cdk/lambda-manage-s3-event-notification--AStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "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": "SampleQueue49AAAEFF", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 23, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "destinedLambdatheDestinedLambdaTopic8E937C7F", + "logicalId": "SampleBucketNotification", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::CloudFormation::CustomResource" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.ServiceToken", "category": "Best Practice", - "startLine": 192, - "startColumn": 9, - "endLine": 192, + "startLine": 69, + "startColumn": 5, + "endLine": 69, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -42419,92 +40649,164 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'SampleQueue49AAAEFF' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "destinedLambdatheDestinedLambdaTopic8E937C7F", + "logicalId": "SampleQueue49AAAEFF", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.TopicArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 193, - "startColumn": 9, - "endLine": 193, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'theDestinedLambdaTopic8F2C8FB6'" - } + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 23, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/lambda-manage-s3-event-notification--BStack.template.json": { + "filePath": "cdk/lambda-manage-s3-event-notification--BStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", + "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "destinedLambdatheDestinedLambdaTopic8E937C7F", + "logicalId": "SampleBucketNotification", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::CloudFormation::CustomResource" }, - "propertyPath": "Properties.Endpoint", + "propertyPath": "Properties.ServiceToken", "category": "Best Practice", - "startLine": 196, - "startColumn": 9, - "endLine": 196, + "startLine": 61, + "startColumn": 5, + "endLine": 61, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt destinedLambda8DF776BB.Arn" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'EventBusName' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'SampleTopic5FE9B5DC' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "successRuleE9E88056", + "logicalId": "SampleTopic5FE9B5DC", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.EventBusName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 305, - "startColumn": 9, - "endLine": 305, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 23, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/lambda-manage-s3-event-notification--SharedStack.template.json": { + "filePath": "cdk/lambda-manage-s3-event-notification--SharedStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 4, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "S3EventNotificationsLambda20F17D80", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 96, + "startColumn": 5, + "endLine": 96, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'DestinedEventBus14820B65'" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'S3EventNotificationsLambdaServiceRoleD45D5063' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "S3EventNotificationsLambda20F17D80", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 99, + "startColumn": 4, + "endLine": 99, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "successRuleAllowEventRuleTheDestinedLambdaStacksuccessRuleDD139E31353F8BE2", + "logicalId": "S3EventNotificationsLambda20F17D80", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 345, - "startColumn": 9, - "endLine": 345, - "endColumn": 16, + "startLine": 87, + "startColumn": 5, + "endLine": 87, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -42512,157 +40814,214 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'SampleBucket7F6F8160' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "successRuleAllowEventRuleTheDestinedLambdaStacksuccessRuleDD139E31353F8BE2", + "logicalId": "SampleBucket7F6F8160", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 346, - "startColumn": 9, - "endLine": 346, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt SuccessLambdaHandler0E2CD797.Arn" - } + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 24, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Resource 'S3EventNotificationsLambdaServiceRoleD45D5063' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "successRuleAllowEventRuleTheDestinedLambdaStacksuccessRuleDD139E31353F8BE2", + "logicalId": "S3EventNotificationsLambdaServiceRoleD45D5063", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 352, - "startColumn": 9, - "endLine": 352, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 14, + "startColumn": 4, + "endLine": 14, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'S3EventNotificationsLambda20F17D80' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "successRuleAllowEventRuleTheDestinedLambdaStacksuccessRuleDD139E31353F8BE2", + "logicalId": "S3EventNotificationsLambda20F17D80", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 353, - "startColumn": 9, - "endLine": 353, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", + "startLine": 80, + "startColumn": 4, + "endLine": 80, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/my-widget-service--MyWidgetServiceStack.template.json": { + "filePath": "cdk/my-widget-service--MyWidgetServiceStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 23, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 56, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "WidgetsWidgetHandler1BC9DB34", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 124, + "startColumn": 5, + "endLine": 124, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt successRuleE9E88056.Arn" + "actualValue": "nodejs20.x", + "lifecycle": "deprecated" } }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'WidgetsWidgetHandlerServiceRole8C2B589C' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "WidgetsWidgetHandler1BC9DB34", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 126, + "startColumn": 4, + "endLine": 126, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'EventBusName' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "failureRule10D0B2E4", + "logicalId": "WidgetswidgetsapiDeployment406A9BD66039252bdc49ee37076fc3c8f3a2eed8", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.EventBusName", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 462, - "startColumn": 9, - "endLine": 462, - "endColumn": 22, + "startLine": 206, + "startColumn": 5, + "endLine": 206, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'DestinedEventBus14820B65'" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Widgetswidgetsapi72353315'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "failureRuleAllowEventRuleTheDestinedLambdaStackfailureRule39380610D37AD724", + "logicalId": "WidgetswidgetsapiDeploymentStageprod0D8CD1B7", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 494, - "startColumn": 9, - "endLine": 494, - "endColumn": 16, + "startLine": 228, + "startColumn": 5, + "endLine": 228, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Widgetswidgetsapi72353315'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "failureRuleAllowEventRuleTheDestinedLambdaStackfailureRule39380610D37AD724", + "logicalId": "WidgetswidgetsapiDeploymentStageprod0D8CD1B7", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 495, - "startColumn": 9, - "endLine": 495, - "endColumn": 22, + "startLine": 231, + "startColumn": 5, + "endLine": 231, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FailureLambdaHandlerBB58C051.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "failureRuleAllowEventRuleTheDestinedLambdaStackfailureRule39380610D37AD724", + "logicalId": "WidgetswidgetsapiGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETFA317FE0", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 501, - "startColumn": 9, - "endLine": 501, - "endColumn": 19, + "startLine": 243, + "startColumn": 5, + "endLine": 243, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -42672,91 +41031,87 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "failureRuleAllowEventRuleTheDestinedLambdaStackfailureRule39380610D37AD724", + "logicalId": "WidgetswidgetsapiGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETFA317FE0", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 502, - "startColumn": 9, - "endLine": 502, - "endColumn": 19, + "startLine": 244, + "startColumn": 5, + "endLine": 244, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt failureRule10D0B2E4.Arn" + "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPIDeploymentC364859Eae40584f53d9b7bb31907a57bb781ad3", + "logicalId": "WidgetswidgetsapiGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETFA317FE0", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 576, - "startColumn": 9, - "endLine": 576, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 250, + "startColumn": 5, + "endLine": 250, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'theDestinedLambdaAPIBAB2789B'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPIDeploymentStageprodD67BDFB2", + "logicalId": "WidgetswidgetsapiGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETFA317FE0", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 594, - "startColumn": 9, - "endLine": 594, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 251, + "startColumn": 5, + "endLine": 251, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'theDestinedLambdaAPIBAB2789B'" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/{ref:WidgetswidgetsapiDeploymentStageprod0D8CD1B7}/GET/)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPIDeploymentStageprodD67BDFB2", + "logicalId": "WidgetswidgetsapiGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETD6697AB5", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 609, - "startColumn": 9, - "endLine": 609, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 287, + "startColumn": 5, + "endLine": 287, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -42766,44 +41121,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPISendEventC20585CF", + "logicalId": "WidgetswidgetsapiGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETD6697AB5", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 618, - "startColumn": 9, - "endLine": 618, + "startLine": 288, + "startColumn": 5, + "endLine": 288, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt theDestinedLambdaAPIBAB2789B.RootResourceId" + "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPISendEventC20585CF", + "logicalId": "WidgetswidgetsapiGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETD6697AB5", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 624, - "startColumn": 9, - "endLine": 624, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 294, + "startColumn": 5, + "endLine": 294, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -42813,25 +41166,24 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPISendEventC20585CF", + "logicalId": "WidgetswidgetsapiGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETD6697AB5", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 625, - "startColumn": 9, - "endLine": 625, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 295, + "startColumn": 5, + "endLine": 295, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'theDestinedLambdaAPIBAB2789B'" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/test-invoke-stage/GET/)" } }, { @@ -42840,16 +41192,16 @@ "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPISendEventGETC3F11CCE", + "logicalId": "WidgetswidgetsapiGET2086C825", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 636, - "startColumn": 9, - "endLine": 636, - "endColumn": 20, + "startLine": 328, + "startColumn": 5, + "endLine": 328, + "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -42863,22 +41215,22 @@ "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPISendEventGETC3F11CCE", + "logicalId": "WidgetswidgetsapiGET2086C825", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 637, - "startColumn": 9, - "endLine": 637, - "endColumn": 20, + "startLine": 359, + "startColumn": 5, + "endLine": 359, + "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'theDestinedLambdaAPISendEventC20585CF'" + "resolutionSource": "GetAtt Widgetswidgetsapi72353315.RootResourceId" } }, { @@ -42887,64 +41239,64 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPISendEventGETC3F11CCE", + "logicalId": "WidgetswidgetsapiGET2086C825", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 640, - "startColumn": 9, - "endLine": 640, - "endColumn": 19, + "startLine": 365, + "startColumn": 5, + "endLine": 365, + "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'theDestinedLambdaAPIBAB2789B'" + "resolutionSource": "Ref to 'Widgetswidgetsapi72353315'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPIResponseModel7D59062C", + "logicalId": "WidgetswidgetsapiidAA19CFA8", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 729, - "startColumn": 9, - "endLine": 729, - "endColumn": 19, + "startLine": 376, + "startColumn": 5, + "endLine": 376, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'theDestinedLambdaAPIBAB2789B'" + "resolutionSource": "GetAtt Widgetswidgetsapi72353315.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPIResponseModel7D59062C", + "logicalId": "WidgetswidgetsapiidAA19CFA8", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.ContentType", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 732, - "startColumn": 9, - "endLine": 732, - "endColumn": 21, + "startLine": 382, + "startColumn": 5, + "endLine": 382, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -42955,90 +41307,88 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPIResponseModel7D59062C", + "logicalId": "WidgetswidgetsapiidAA19CFA8", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 733, - "startColumn": 9, - "endLine": 733, - "endColumn": 14, + "startLine": 383, + "startColumn": 5, + "endLine": 383, + "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Widgetswidgetsapi72353315'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPIErrorResponseModel5F76D2FC", + "logicalId": "WidgetswidgetsapiidPOSTApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTid9DF97A7A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 752, - "startColumn": 9, - "endLine": 752, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 394, + "startColumn": 5, + "endLine": 394, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'theDestinedLambdaAPIBAB2789B'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPIErrorResponseModel5F76D2FC", + "logicalId": "WidgetswidgetsapiidPOSTApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTid9DF97A7A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ContentType", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 755, - "startColumn": 9, - "endLine": 755, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 395, + "startColumn": 5, + "endLine": 395, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPIErrorResponseModel5F76D2FC", + "logicalId": "WidgetswidgetsapiidPOSTApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTid9DF97A7A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 756, - "startColumn": 9, - "endLine": 756, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 401, + "startColumn": 5, + "endLine": 401, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -43046,497 +41396,295 @@ } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DestinedEventBus14820B65' of type 'AWS::Events::EventBus' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "DestinedEventBus14820B65", - "entityType": "Resource", - "resourceType": "AWS::Events::EventBus" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'theDestinedLambdaTopic8F2C8FB6' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "theDestinedLambdaTopic8F2C8FB6", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'destinedLambdaServiceRole87608B6F' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "destinedLambdaServiceRole87608B6F", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'destinedLambda8DF776BB' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "destinedLambda8DF776BB", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 81, - "startColumn": 7, - "endLine": 81, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SuccessLambdaHandlerServiceRole77BD70C4' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SuccessLambdaHandlerServiceRole77BD70C4", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 209, - "startColumn": 7, - "endLine": 209, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SuccessLambdaHandler0E2CD797' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SuccessLambdaHandler0E2CD797", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 243, - "startColumn": 7, - "endLine": 243, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'successRuleE9E88056' of type 'AWS::Events::Rule' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "successRuleE9E88056", - "entityType": "Resource", - "resourceType": "AWS::Events::Rule" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 303, - "startColumn": 7, - "endLine": 303, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FailureLambdaHandlerServiceRole7E0414CB' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FailureLambdaHandlerServiceRole7E0414CB", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 366, - "startColumn": 7, - "endLine": 366, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FailureLambdaHandlerBB58C051' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FailureLambdaHandlerBB58C051", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 400, - "startColumn": 7, - "endLine": 400, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'failureRule10D0B2E4' of type 'AWS::Events::Rule' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "failureRule10D0B2E4", - "entityType": "Resource", - "resourceType": "AWS::Events::Rule" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 460, - "startColumn": 7, - "endLine": 460, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'theDestinedLambdaAPIBAB2789B' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPIBAB2789B", + "logicalId": "WidgetswidgetsapiidPOSTApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTid9DF97A7A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 515, - "startColumn": 7, - "endLine": 515, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 402, + "startColumn": 5, + "endLine": 402, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/{ref:WidgetswidgetsapiDeploymentStageprod0D8CD1B7}/POST/*)" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'theDestinedLambdaAPICloudWatchRoleCDF408DA' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPICloudWatchRoleCDF408DA", + "logicalId": "WidgetswidgetsapiidPOSTApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTidF1C29E62", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 524, - "startColumn": 7, - "endLine": 524, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 438, + "startColumn": 5, + "endLine": 438, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'theDestinedLambdaAPIDeploymentStageprodD67BDFB2' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "theDestinedLambdaAPIDeploymentStageprodD67BDFB2", + "logicalId": "WidgetswidgetsapiidPOSTApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTidF1C29E62", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 593, - "startColumn": 7, - "endLine": 593, + "startLine": 439, + "startColumn": 5, + "endLine": 439, "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ApiGatewaySnsRole904B65D6' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewaySnsRole904B65D6", + "logicalId": "WidgetswidgetsapiidPOSTApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTidF1C29E62", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 777, - "startColumn": 7, - "endLine": 777, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/pat-the-dynamo-streamer--TheDynamoStreamerStack.template.json": { - "filePath": "cdk/pat-the-dynamo-streamer--TheDynamoStreamerStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 17, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 2, - "informational": 26, - "debug": 0 + "startLine": 445, + "startColumn": 5, + "endLine": 445, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "dynamoStreamSubscriberLambdaHandlerD2AAE139", + "logicalId": "WidgetswidgetsapiidPOSTApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTidF1C29E62", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 152, - "startColumn": 9, - "endLine": 152, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "propertyPath": "Properties.SourceArn", + "category": "Best Practice", + "startLine": 446, + "startColumn": 5, + "endLine": 446, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/test-invoke-stage/POST/*)" } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AssetParametersdea71d0871b06cc6149d538db9f3627c5e43599da253f86c0ab81528b3ccf675ArtifactHashCA4FFEF8' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AssetParametersdea71d0871b06cc6149d538db9f3627c5e43599da253f86c0ab81528b3ccf675ArtifactHashCA4FFEF8", - "entityType": "Parameter" + "logicalId": "WidgetswidgetsapiidPOST60B9DB49", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Parameters/AssetParametersdea71d0871b06cc6149d538db9f3627c5e43599da253f86c0ab81528b3ccf675ArtifactHashCA4FFEF8", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 527, + "startLine": 479, "startColumn": 5, - "endLine": 527, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "endLine": 479, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'dynamoStreamSubscriberLambdaHandlerServiceRole70DB8A47' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "dynamoStreamSubscriberLambdaHandlerD2AAE139", + "logicalId": "WidgetswidgetsapiidPOST60B9DB49", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 154, - "startColumn": 7, - "endLine": 154, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 507, + "startColumn": 5, + "endLine": 507, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'WidgetswidgetsapiidAA19CFA8'" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheDynamoStreamer641C5E5B", + "logicalId": "WidgetswidgetsapiidPOST60B9DB49", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 6, - "startColumn": 9, - "endLine": 6, - "endColumn": 19, + "startLine": 510, + "startColumn": 5, + "endLine": 510, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Widgetswidgetsapi72353315'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "dynamoStreamSubscriberLambdaHandlerDynamoDBEventSourceTheDynamoStreamerStackTheDynamoStreamerB472C427C1D10245", + "logicalId": "WidgetswidgetsapiidGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid8E6C9CDF", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.EventSourceArn", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 171, - "startColumn": 9, - "endLine": 171, - "endColumn": 24, + "startLine": 521, + "startColumn": 5, + "endLine": 521, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt TheDynamoStreamer641C5E5B.StreamArn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StartingPosition' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "dynamoStreamSubscriberLambdaHandlerDynamoDBEventSourceTheDynamoStreamerStackTheDynamoStreamerB472C427C1D10245", + "logicalId": "WidgetswidgetsapiidGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid8E6C9CDF", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.StartingPosition", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 177, - "startColumn": 9, - "endLine": 177, - "endColumn": 26, + "startLine": 522, + "startColumn": 5, + "endLine": 522, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoStreamerAPIDeployment8F20C3E380de34421a04eed5e7cc4a28266c5690", + "logicalId": "WidgetswidgetsapiidGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid8E6C9CDF", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 246, - "startColumn": 9, - "endLine": 246, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 528, + "startColumn": 5, + "endLine": 528, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'DynamoStreamerAPICA573C81'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoStreamerAPIDeploymentStageprod0700648B", + "logicalId": "WidgetswidgetsapiidGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid8E6C9CDF", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 264, - "startColumn": 9, - "endLine": 264, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 529, + "startColumn": 5, + "endLine": 529, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'DynamoStreamerAPICA573C81'" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/{ref:WidgetswidgetsapiDeploymentStageprod0D8CD1B7}/GET/*)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoStreamerAPIDeploymentStageprod0700648B", + "logicalId": "WidgetswidgetsapiidGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid5E1031AB", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 279, - "startColumn": 9, - "endLine": 279, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 565, + "startColumn": 5, + "endLine": 565, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -43546,44 +41694,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoStreamerAPIInsertItemACBD0A97", + "logicalId": "WidgetswidgetsapiidGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid5E1031AB", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 288, - "startColumn": 9, - "endLine": 288, + "startLine": 566, + "startColumn": 5, + "endLine": 566, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt DynamoStreamerAPICA573C81.RootResourceId" + "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoStreamerAPIInsertItemACBD0A97", + "logicalId": "WidgetswidgetsapiidGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid5E1031AB", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 294, - "startColumn": 9, - "endLine": 294, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 572, + "startColumn": 5, + "endLine": 572, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -43593,25 +41739,24 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoStreamerAPIInsertItemACBD0A97", + "logicalId": "WidgetswidgetsapiidGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid5E1031AB", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 295, - "startColumn": 9, - "endLine": 295, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 573, + "startColumn": 5, + "endLine": 573, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'DynamoStreamerAPICA573C81'" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/test-invoke-stage/GET/*)" } }, { @@ -43620,16 +41765,16 @@ "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoStreamerAPIInsertItemPOSTCDE209E1", + "logicalId": "WidgetswidgetsapiidGETABE1C648", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 306, - "startColumn": 9, - "endLine": 306, - "endColumn": 20, + "startLine": 606, + "startColumn": 5, + "endLine": 606, + "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -43643,22 +41788,22 @@ "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoStreamerAPIInsertItemPOSTCDE209E1", + "logicalId": "WidgetswidgetsapiidGETABE1C648", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 307, - "startColumn": 9, - "endLine": 307, - "endColumn": 20, + "startLine": 634, + "startColumn": 5, + "endLine": 634, + "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'DynamoStreamerAPIInsertItemACBD0A97'" + "resolutionSource": "Ref to 'WidgetswidgetsapiidAA19CFA8'" } }, { @@ -43667,65 +41812,85 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoStreamerAPIInsertItemPOSTCDE209E1", + "logicalId": "WidgetswidgetsapiidGETABE1C648", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 310, - "startColumn": 9, - "endLine": 310, - "endColumn": 19, + "startLine": 637, + "startColumn": 5, + "endLine": 637, + "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'DynamoStreamerAPICA573C81'" + "resolutionSource": "Ref to 'Widgetswidgetsapi72353315'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoStreamerAPIResponseModel5C9A2FF6", + "logicalId": "WidgetswidgetsapiidDELETEApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid2BAC56B6", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 396, - "startColumn": 9, - "endLine": 396, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 648, + "startColumn": 5, + "endLine": 648, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "WidgetswidgetsapiidDELETEApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid2BAC56B6", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 649, + "startColumn": 5, + "endLine": 649, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'DynamoStreamerAPICA573C81'" + "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoStreamerAPIResponseModel5C9A2FF6", + "logicalId": "WidgetswidgetsapiidDELETEApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid2BAC56B6", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ContentType", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 399, - "startColumn": 9, - "endLine": 399, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 655, + "startColumn": 5, + "endLine": 655, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -43735,20 +41900,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoStreamerAPIResponseModel5C9A2FF6", + "logicalId": "WidgetswidgetsapiidDELETEApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid2BAC56B6", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 400, - "startColumn": 9, - "endLine": 400, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 656, + "startColumn": 5, + "endLine": 656, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/{ref:WidgetswidgetsapiDeploymentStageprod0D8CD1B7}/DELETE/*)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "WidgetswidgetsapiidDELETEApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid4096AFEF", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 692, + "startColumn": 5, + "endLine": 692, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -43758,44 +41945,88 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoStreamerAPIErrorResponseModelEB962BDA", + "logicalId": "WidgetswidgetsapiidDELETEApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid4096AFEF", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 693, + "startColumn": 5, + "endLine": 693, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt WidgetsWidgetHandler1BC9DB34.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "WidgetswidgetsapiidDELETEApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid4096AFEF", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 699, + "startColumn": 5, + "endLine": 699, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "WidgetswidgetsapiidDELETEApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid4096AFEF", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 419, - "startColumn": 9, - "endLine": 419, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 700, + "startColumn": 5, + "endLine": 700, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'DynamoStreamerAPICA573C81'" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:Widgetswidgetsapi72353315}/test-invoke-stage/DELETE/*)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoStreamerAPIErrorResponseModelEB962BDA", + "logicalId": "WidgetswidgetsapiidDELETEE81619C6", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.ContentType", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 422, - "startColumn": 9, - "endLine": 422, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 733, + "startColumn": 5, + "endLine": 733, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -43805,198 +42036,183 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoStreamerAPIErrorResponseModelEB962BDA", + "logicalId": "WidgetswidgetsapiidDELETEE81619C6", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 423, - "startColumn": 9, - "endLine": 423, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 761, + "startColumn": 5, + "endLine": 761, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'WidgetswidgetsapiidAA19CFA8'" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TheDynamoStreamer641C5E5B' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheDynamoStreamer641C5E5B", + "logicalId": "WidgetswidgetsapiidDELETEE81619C6", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 764, + "startColumn": 5, + "endLine": 764, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Widgetswidgetsapi72353315'" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'dynamoStreamSubscriberLambdaHandlerServiceRole70DB8A47' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'WidgetsWidgetStore0ED7FDB7' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "dynamoStreamSubscriberLambdaHandlerServiceRole70DB8A47", + "logicalId": "WidgetsWidgetStore0ED7FDB7", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 34, - "startColumn": 7, - "endLine": 34, - "endColumn": 18, + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 30, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'dynamoStreamSubscriberLambdaHandlerD2AAE139' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'WidgetsWidgetHandlerServiceRole8C2B589C' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "dynamoStreamSubscriberLambdaHandlerD2AAE139", + "logicalId": "WidgetsWidgetHandlerServiceRole8C2B589C", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 106, - "startColumn": 7, - "endLine": 106, - "endColumn": 18, + "startLine": 13, + "startColumn": 4, + "endLine": 13, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'dynamoStreamSubscriberLambdaHandlerDynamoDBEventSourceTheDynamoStreamerStackTheDynamoStreamerB472C427C1D10245' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", + "message": "Resource 'WidgetsWidgetHandler1BC9DB34' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "dynamoStreamSubscriberLambdaHandlerDynamoDBEventSourceTheDynamoStreamerStackTheDynamoStreamerB472C427C1D10245", + "logicalId": "WidgetsWidgetHandler1BC9DB34", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 166, - "startColumn": 7, - "endLine": 166, - "endColumn": 18, + "startLine": 103, + "startColumn": 4, + "endLine": 103, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DynamoStreamerAPICA573C81' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Resource 'Widgetswidgetsapi72353315' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DynamoStreamerAPICA573C81", + "logicalId": "Widgetswidgetsapi72353315", "entityType": "Resource", "resourceType": "AWS::ApiGateway::RestApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 185, - "startColumn": 7, - "endLine": 185, - "endColumn": 18, + "startLine": 139, + "startColumn": 4, + "endLine": 139, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DynamoStreamerAPICloudWatchRoleEF2543E3' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'WidgetswidgetsapiCloudWatchRole8C2A5801' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DynamoStreamerAPICloudWatchRoleEF2543E3", + "logicalId": "WidgetswidgetsapiCloudWatchRole8C2A5801", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 194, - "startColumn": 7, - "endLine": 194, - "endColumn": 18, + "startLine": 149, + "startColumn": 4, + "endLine": 149, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DynamoStreamerAPIDeploymentStageprod0700648B' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Resource 'WidgetswidgetsapiDeploymentStageprod0D8CD1B7' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DynamoStreamerAPIDeploymentStageprod0700648B", + "logicalId": "WidgetswidgetsapiDeploymentStageprod0D8CD1B7", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 263, - "startColumn": 7, - "endLine": 263, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DefaultLambdaHanderRoleA44A3BA8' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "DefaultLambdaHanderRoleA44A3BA8", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 444, - "startColumn": 7, - "endLine": 444, - "endColumn": 18, + "startLine": 224, + "startColumn": 4, + "endLine": 224, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/pat-the-eventbridge-atm--TheEventbridgeAtmStack.template.json": { - "filePath": "cdk/pat-the-eventbridge-atm--TheEventbridgeAtmStack.template.json", + "cdk/pat-the-big-fan--TheBigFanStack.template.json": { + "filePath": "cdk/pat-the-big-fan--TheBigFanStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 28, + "resourcesScanned": 27, "counts": { "fatal": 0, - "errors": 4, - "warnings": 6, - "informational": 54, + "errors": 2, + "warnings": 3, + "informational": 44, "debug": 0 }, "suppressed": 0, @@ -44010,15 +42226,15 @@ "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "atmProducerLambda71029F8F", + "logicalId": "SQSCreatedStatusSubscribeLambdaHandler0467DB95", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 109, + "startLine": 277, "startColumn": 9, - "endLine": 109, + "endLine": 277, "endColumn": 17, "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", @@ -44033,15 +42249,15 @@ "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "atmConsumer1LambdaC3C4DA46", + "logicalId": "SQSAnyOtherStatusSubscribeLambdaHandler4037E293", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 203, + "startLine": 423, "startColumn": 9, - "endLine": 203, + "endLine": 423, "endColumn": 17, "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", @@ -44051,183 +42267,307 @@ } }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParameters18833649a477f0511316387314562906099cb212342be772321cf1075727e8d8ArtifactHash3D36986C' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "atmConsumer2LambdaB7E263A7", + "logicalId": "AssetParameters18833649a477f0511316387314562906099cb212342be772321cf1075727e8d8ArtifactHash3D36986C", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/AssetParameters18833649a477f0511316387314562906099cb212342be772321cf1075727e8d8ArtifactHash3D36986C", + "category": "Best Practice", + "startLine": 780, + "startColumn": 5, + "endLine": 780, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'SQSCreatedStatusSubscribeLambdaHandlerServiceRole36576A8A' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SQSCreatedStatusSubscribeLambdaHandler0467DB95", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 352, - "startColumn": 9, - "endLine": 352, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 279, + "startColumn": 7, + "endLine": 279, "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" - } + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "ruleId": "W3005", + "severity": "WARN", + "message": "'SQSAnyOtherStatusSubscribeLambdaHandlerServiceRole395E81EB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "atmConsumer3Lambda880BEEDF", + "logicalId": "SQSAnyOtherStatusSubscribeLambdaHandler4037E293", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 502, - "startColumn": 9, - "endLine": 502, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 425, + "startColumn": 7, + "endLine": 425, "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" - } + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AssetParameters9e5a75b7255f8eb613b34870191414422d068cd4c7a85e389d57bef239df88e2ArtifactHash4CB2B431' is not referenced anywhere in the template", + "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": "AssetParameters9e5a75b7255f8eb613b34870191414422d068cd4c7a85e389d57bef239df88e2ArtifactHash4CB2B431", - "entityType": "Parameter" + "logicalId": "BigFanTopicStatusCreatedSubscriberQueue589E974E", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Parameters/AssetParameters9e5a75b7255f8eb613b34870191414422d068cd4c7a85e389d57bef239df88e2ArtifactHash4CB2B431", "category": "Best Practice", - "startLine": 957, + "startLine": 12, "startColumn": 5, - "endLine": 957, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", + "endLine": 12, + "endColumn": 53, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AssetParameters0e0f30ed3f1938ea2f79b237fca2e084bafedb8d899074223167739de6f64fd8ArtifactHash62E19501' is not referenced anywhere in the template", + "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": "AssetParameters0e0f30ed3f1938ea2f79b237fca2e084bafedb8d899074223167739de6f64fd8ArtifactHash62E19501", - "entityType": "Parameter" + "logicalId": "BigFanTopicStatusCreatedSubscriberQueue589E974E", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Parameters/AssetParameters0e0f30ed3f1938ea2f79b237fca2e084bafedb8d899074223167739de6f64fd8ArtifactHash62E19501", "category": "Best Practice", - "startLine": 969, + "startLine": 12, "startColumn": 5, - "endLine": 969, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", + "endLine": 12, + "endColumn": 53, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'atmProducerLambdaServiceRoleEF3D6079' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "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": "atmProducerLambda71029F8F", + "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 111, - "startColumn": 7, - "endLine": 111, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 84, + "startColumn": 5, + "endLine": 84, + "endColumn": 54, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'atmConsumer1LambdaServiceRole70132707' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "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": "atmConsumer1LambdaC3C4DA46", + "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 205, - "startColumn": 7, - "endLine": 205, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 84, + "startColumn": 5, + "endLine": 84, + "endColumn": 54, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'atmConsumer2LambdaServiceRole130B888D' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "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": "atmConsumer2LambdaB7E263A7", + "logicalId": "BigFanTopicStatusCreatedSubscriberQueue589E974E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 354, + "startLine": 14, "startColumn": 7, - "endLine": 354, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 14, + "endColumn": 18, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'atmConsumer3LambdaServiceRoleCF9BAEA7' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "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": "atmConsumer3Lambda880BEEDF", + "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 504, + "startLine": 86, "startColumn": 7, - "endLine": 504, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 86, + "endColumn": 18, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "BigFanTopicStatusCreatedSubscriberQueue589E974E", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.QueueName", + "category": "Best Practice", + "startLine": 15, + "startColumn": 9, + "endLine": 15, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "BigFanTopicStatusCreatedSubscriberQueueTheBigFanStacktheBigFanTopicCC7EBE3B39DDDB95", + "entityType": "Resource", + "resourceType": "AWS::SNS::Subscription" + }, + "propertyPath": "Properties.Protocol", + "category": "Best Practice", + "startLine": 63, + "startColumn": 9, + "endLine": 63, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "BigFanTopicStatusCreatedSubscriberQueueTheBigFanStacktheBigFanTopicCC7EBE3B39DDDB95", + "entityType": "Resource", + "resourceType": "AWS::SNS::Subscription" + }, + "propertyPath": "Properties.TopicArn", + "category": "Best Practice", + "startLine": 64, + "startColumn": 9, + "endLine": 64, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'theBigFanTopicF96567DE'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "BigFanTopicStatusCreatedSubscriberQueueTheBigFanStacktheBigFanTopicCC7EBE3B39DDDB95", + "entityType": "Resource", + "resourceType": "AWS::SNS::Subscription" + }, + "propertyPath": "Properties.Endpoint", + "category": "Best Practice", + "startLine": 67, + "startColumn": 9, + "endLine": 67, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt BigFanTopicStatusCreatedSubscriberQueue589E974E.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.QueueName", + "category": "Best Practice", + "startLine": 87, + "startColumn": 9, + "endLine": 87, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer1LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer1LambdaRuleEB0F67E45F2D141B", + "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueueTheBigFanStacktheBigFanTopicCC7EBE3B9905847D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 251, + "startLine": 135, "startColumn": 9, - "endLine": 251, - "endColumn": 16, + "endLine": 135, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -44237,273 +42577,284 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer1LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer1LambdaRuleEB0F67E45F2D141B", + "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueueTheBigFanStacktheBigFanTopicCC7EBE3B9905847D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.TopicArn", "category": "Best Practice", - "startLine": 252, + "startLine": 136, "startColumn": 9, - "endLine": 252, - "endColumn": 22, + "endLine": 136, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt atmConsumer1LambdaC3C4DA46.Arn" + "resolutionSource": "Ref to 'theBigFanTopicF96567DE'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer1LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer1LambdaRuleEB0F67E45F2D141B", + "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueueTheBigFanStacktheBigFanTopicCC7EBE3B9905847D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Endpoint", "category": "Best Practice", - "startLine": 258, + "startLine": 139, "startColumn": 9, - "endLine": 258, - "endColumn": 19, + "endLine": 139, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer1LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer1LambdaRuleEB0F67E45F2D141B", + "logicalId": "SQSCreatedStatusSubscribeLambdaHandlerSqsEventSourceTheBigFanStackBigFanTopicStatusCreatedSubscriberQueueF8927E4802E7770C", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.EventSourceArn", "category": "Best Practice", - "startLine": 259, + "startLine": 295, "startColumn": 9, - "endLine": 259, - "endColumn": 19, + "endLine": 295, + "endColumn": 24, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt atmConsumer1LambdaRuleC1D6BC2F.Arn" + "resolutionSource": "GetAtt BigFanTopicStatusCreatedSubscriberQueue589E974E.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer2LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer2LambdaRuleF5729F59774A4AE8", + "logicalId": "SQSAnyOtherStatusSubscribeLambdaHandlerSqsEventSourceTheBigFanStackBigFanTopicAnyOtherStatusSubscriberQueue08FB964013A92B5B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.EventSourceArn", "category": "Best Practice", - "startLine": 401, + "startLine": 441, "startColumn": 9, - "endLine": 401, - "endColumn": 16, + "endLine": 441, + "endColumn": 24, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer2LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer2LambdaRuleF5729F59774A4AE8", + "logicalId": "theBigFanAPIDeployment0A3D40CC3de72833f42963bffb25d554063d867d", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 402, + "startLine": 515, "startColumn": 9, - "endLine": 402, - "endColumn": 22, + "endLine": 515, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt atmConsumer2LambdaB7E263A7.Arn" + "resolutionSource": "Ref to 'theBigFanAPI6E21715A'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer2LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer2LambdaRuleF5729F59774A4AE8", + "logicalId": "theBigFanAPIDeploymentStageprod1F15C9DC", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 408, + "startLine": 533, "startColumn": 9, - "endLine": 408, + "endLine": 533, "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'theBigFanAPI6E21715A'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer2LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer2LambdaRuleF5729F59774A4AE8", + "logicalId": "theBigFanAPIDeploymentStageprod1F15C9DC", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 409, + "startLine": 548, "startColumn": 9, - "endLine": 409, + "endLine": 548, "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt atmConsumer2LambdaRule5894DC8E.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer3LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer3LambdaRuleC926722A1B0365D4", + "logicalId": "theBigFanAPISendEventD29495C2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 551, + "startLine": 557, "startColumn": 9, - "endLine": 551, - "endColumn": 16, + "endLine": 557, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt theBigFanAPI6E21715A.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer3LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer3LambdaRuleC926722A1B0365D4", + "logicalId": "theBigFanAPISendEventD29495C2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 552, + "startLine": 563, "startColumn": 9, - "endLine": 552, - "endColumn": 22, + "endLine": 563, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt atmConsumer3Lambda880BEEDF.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer3LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer3LambdaRuleC926722A1B0365D4", + "logicalId": "theBigFanAPISendEventD29495C2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 558, + "startLine": 564, "startColumn": 9, - "endLine": 558, + "endLine": 564, "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'theBigFanAPI6E21715A'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer3LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer3LambdaRuleC926722A1B0365D4", + "logicalId": "theBigFanAPISendEventPOSTBC493093", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 559, + "startLine": 575, "startColumn": 9, - "endLine": 559, - "endColumn": 19, + "endLine": 575, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt atmConsumer3LambdaRule41A00643.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointDeployment318525DA98cf1fe46f6a8379cb8241a5e412a297", + "logicalId": "theBigFanAPISendEventPOSTBC493093", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 633, + "startLine": 576, "startColumn": 9, - "endLine": 633, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 576, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'EndpointEEF1FD8F'" + "resolutionSource": "Ref to 'theBigFanAPISendEventD29495C2'" } }, { @@ -44512,87 +42863,87 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointDeploymentStageprodB78BEEA0", + "logicalId": "theBigFanAPISendEventPOSTBC493093", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 650, + "startLine": 579, "startColumn": 9, - "endLine": 650, + "endLine": 579, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'EndpointEEF1FD8F'" + "resolutionSource": "Ref to 'theBigFanAPI6E21715A'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointDeploymentStageprodB78BEEA0", + "logicalId": "theBigFanAPIResponseModelD06A5A7F", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 656, + "startLine": 668, "startColumn": 9, - "endLine": 656, + "endLine": 668, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'theBigFanAPI6E21715A'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Endpointproxy39E2174E", + "logicalId": "theBigFanAPIResponseModelD06A5A7F", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.ContentType", "category": "Best Practice", - "startLine": 665, + "startLine": 671, "startColumn": 9, - "endLine": 665, - "endColumn": 18, + "endLine": 671, + "endColumn": 21, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt EndpointEEF1FD8F.RootResourceId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Endpointproxy39E2174E", + "logicalId": "theBigFanAPIResponseModelD06A5A7F", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 671, + "startLine": 672, "startColumn": 9, - "endLine": 671, - "endColumn": 18, + "endLine": 672, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -44606,40 +42957,41 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Endpointproxy39E2174E", + "logicalId": "theBigFanAPIErrorResponseModel11E9FBC4", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::ApiGateway::Model" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 672, + "startLine": 691, "startColumn": 9, - "endLine": 672, + "endLine": 691, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'EndpointEEF1FD8F'" + "resolutionSource": "Ref to 'theBigFanAPI6E21715A'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANYproxyC2C9F151", + "logicalId": "theBigFanAPIErrorResponseModel11E9FBC4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.ContentType", "category": "Best Practice", - "startLine": 683, + "startLine": 694, "startColumn": 9, - "endLine": 683, - "endColumn": 16, + "endLine": 694, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -44649,230 +43001,408 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANYproxyC2C9F151", + "logicalId": "theBigFanAPIErrorResponseModel11E9FBC4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 684, + "startLine": 695, "startColumn": 9, - "endLine": 684, - "endColumn": 22, + "endLine": 695, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt atmProducerLambda71029F8F.Arn" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Resource 'theBigFanTopicF96567DE' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANYproxyC2C9F151", + "logicalId": "theBigFanTopicF96567DE", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 690, - "startColumn": 9, - "endLine": 690, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BigFanTopicStatusCreatedSubscriberQueue589E974E' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "BigFanTopicStatusCreatedSubscriberQueue589E974E", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 86, + "startColumn": 7, + "endLine": 86, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SQSCreatedStatusSubscribeLambdaHandlerServiceRole36576A8A' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SQSCreatedStatusSubscribeLambdaHandlerServiceRole36576A8A", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 162, + "startColumn": 7, + "endLine": 162, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SQSCreatedStatusSubscribeLambdaHandler0467DB95' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SQSCreatedStatusSubscribeLambdaHandler0467DB95", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 231, + "startColumn": 7, + "endLine": 231, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SQSCreatedStatusSubscribeLambdaHandlerSqsEventSourceTheBigFanStackBigFanTopicStatusCreatedSubscriberQueueF8927E4802E7770C' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SQSCreatedStatusSubscribeLambdaHandlerSqsEventSourceTheBigFanStackBigFanTopicStatusCreatedSubscriberQueueF8927E4802E7770C", + "entityType": "Resource", + "resourceType": "AWS::Lambda::EventSourceMapping" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 291, + "startColumn": 7, + "endLine": 291, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SQSAnyOtherStatusSubscribeLambdaHandlerServiceRole395E81EB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SQSAnyOtherStatusSubscribeLambdaHandlerServiceRole395E81EB", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 308, + "startColumn": 7, + "endLine": 308, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SQSAnyOtherStatusSubscribeLambdaHandler4037E293' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SQSAnyOtherStatusSubscribeLambdaHandler4037E293", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 377, + "startColumn": 7, + "endLine": 377, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SQSAnyOtherStatusSubscribeLambdaHandlerSqsEventSourceTheBigFanStackBigFanTopicAnyOtherStatusSubscriberQueue08FB964013A92B5B' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SQSAnyOtherStatusSubscribeLambdaHandlerSqsEventSourceTheBigFanStackBigFanTopicAnyOtherStatusSubscriberQueue08FB964013A92B5B", + "entityType": "Resource", + "resourceType": "AWS::Lambda::EventSourceMapping" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 437, + "startColumn": 7, + "endLine": 437, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'theBigFanAPI6E21715A' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANYproxyC2C9F151", + "logicalId": "theBigFanAPI6E21715A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::RestApi" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 691, - "startColumn": 9, - "endLine": 691, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/{ref:EndpointDeploymentStageprodB78BEEA0}/*/*)" - } + "startLine": 454, + "startColumn": 7, + "endLine": 454, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Resource 'theBigFanAPICloudWatchRoleD603B41E' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYproxy14296A4D", + "logicalId": "theBigFanAPICloudWatchRoleD603B41E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 727, - "startColumn": 9, - "endLine": 727, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 463, + "startColumn": 7, + "endLine": 463, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'theBigFanAPIDeploymentStageprod1F15C9DC' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYproxy14296A4D", + "logicalId": "theBigFanAPIDeploymentStageprod1F15C9DC", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 728, - "startColumn": 9, - "endLine": 728, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt atmProducerLambda71029F8F.Arn" - } + "startLine": 532, + "startColumn": 7, + "endLine": 532, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Resource 'DefaultLambdaHanderRoleA44A3BA8' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYproxy14296A4D", + "logicalId": "DefaultLambdaHanderRoleA44A3BA8", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 734, - "startColumn": 9, - "endLine": 734, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 716, + "startColumn": 7, + "endLine": 716, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/pat-the-cloudwatch-dashboard--TheCloudwatchDashboardStack.template.json": { + "filePath": "cdk/pat-the-cloudwatch-dashboard--TheCloudwatchDashboardStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 20, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 2, + "informational": 25, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "EndpointproxyANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYproxy14296A4D", + "logicalId": "DynamoLambdaHandlerFB6EB814", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 735, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 160, "startColumn": 9, - "endLine": 735, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 160, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/test-invoke-stage/*/*)" + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParameters2e2fb63cef5de8866986a28a524c8f97b58a2ec13b66aa5753892cafdd7dbe46ArtifactHash18C20B66' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "EndpointproxyANYC09721C5", + "logicalId": "AssetParameters2e2fb63cef5de8866986a28a524c8f97b58a2ec13b66aa5753892cafdd7dbe46ArtifactHash18C20B66", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/AssetParameters2e2fb63cef5de8866986a28a524c8f97b58a2ec13b66aa5753892cafdd7dbe46ArtifactHash18C20B66", + "category": "Best Practice", + "startLine": 1058, + "startColumn": 5, + "endLine": 1058, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'DynamoLambdaHandlerServiceRole4C867B01' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "DynamoLambdaHandlerFB6EB814", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 767, - "startColumn": 9, - "endLine": 767, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 162, + "startColumn": 7, + "endLine": 162, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYC09721C5", + "logicalId": "HitsFF5AF8CD", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 768, + "startLine": 6, "startColumn": 9, - "endLine": 768, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 6, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Endpointproxy39E2174E'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'ProtocolType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYC09721C5", + "logicalId": "HttpAPI8D545486", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ApiGatewayV2::Api" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.ProtocolType", "category": "Best Practice", - "startLine": 771, + "startLine": 176, "startColumn": 9, - "endLine": 771, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 176, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'EndpointEEF1FD8F'" + "lifecycle": "create-only" } }, { @@ -44881,15 +43411,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANY2B0F1701", + "logicalId": "HttpAPIDefaultRouteTheCloudwatchDashboardStackHttpAPIDefaultRoute851EEAB4Permission3852997E", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 810, + "startLine": 185, "startColumn": 9, - "endLine": 810, + "endLine": 185, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -44903,21 +43433,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANY2B0F1701", + "logicalId": "HttpAPIDefaultRouteTheCloudwatchDashboardStackHttpAPIDefaultRoute851EEAB4Permission3852997E", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 811, + "startLine": 186, "startColumn": 9, - "endLine": 811, + "endLine": 186, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt atmProducerLambda71029F8F.Arn" + "resolutionSource": "GetAtt DynamoLambdaHandlerFB6EB814.Arn" } }, { @@ -44926,15 +43456,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANY2B0F1701", + "logicalId": "HttpAPIDefaultRouteTheCloudwatchDashboardStackHttpAPIDefaultRoute851EEAB4Permission3852997E", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 817, + "startLine": 192, "startColumn": 9, - "endLine": 817, + "endLine": 192, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -44948,130 +43478,112 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANY2B0F1701", + "logicalId": "HttpAPIDefaultRouteTheCloudwatchDashboardStackHttpAPIDefaultRoute851EEAB4Permission3852997E", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 818, + "startLine": 193, "startColumn": 9, - "endLine": 818, + "endLine": 193, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/{ref:EndpointDeploymentStageprodB78BEEA0}/*/)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "EndpointANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYFFED7414", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 854, - "startColumn": 9, - "endLine": 854, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:HttpAPI8D545486}/*/*)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYFFED7414", + "logicalId": "HttpAPIDefaultRouteDefaultRouteIntegration9F0AC785", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGatewayV2::Integration" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 855, + "startLine": 225, "startColumn": 9, - "endLine": 855, - "endColumn": 22, + "endLine": 225, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt atmProducerLambda71029F8F.Arn" + "resolutionSource": "Ref to 'HttpAPI8D545486'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYFFED7414", + "logicalId": "HttpAPIDefaultRouteF9949FE6", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGatewayV2::Route" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 861, + "startLine": 244, "startColumn": 9, - "endLine": 861, - "endColumn": 19, + "endLine": 244, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'HttpAPI8D545486'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYFFED7414", + "logicalId": "HttpAPIDefaultStage1BC7D78F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGatewayV2::Stage" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 862, + "startLine": 267, "startColumn": 9, - "endLine": 862, - "endColumn": 19, + "endLine": 267, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/test-invoke-stage/*/)" + "resolutionSource": "Ref to 'HttpAPI8D545486'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANY485C938B", + "logicalId": "HttpAPIDefaultStage1BC7D78F", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ApiGatewayV2::Stage" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 894, + "startLine": 270, "startColumn": 9, - "endLine": 894, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 270, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -45079,69 +43591,41 @@ } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "EndpointANY485C938B", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.ResourceId", - "category": "Best Practice", - "startLine": 895, - "startColumn": 9, - "endLine": 895, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt EndpointEEF1FD8F.RootResourceId" - } - }, - { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'HitsFF5AF8CD' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EndpointANY485C938B", + "logicalId": "HitsFF5AF8CD", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 901, - "startColumn": 9, - "endLine": 901, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'EndpointEEF1FD8F'" - } + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'atmProducerLambdaServiceRoleEF3D6079' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'DynamoLambdaHandlerServiceRole4C867B01' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "atmProducerLambdaServiceRoleEF3D6079", + "logicalId": "DynamoLambdaHandlerServiceRole4C867B01", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 28, "startColumn": 7, - "endLine": 5, + "endLine": 28, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -45149,19 +43633,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'atmProducerLambda71029F8F' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'DynamoLambdaHandlerFB6EB814' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "atmProducerLambda71029F8F", + "logicalId": "DynamoLambdaHandlerFB6EB814", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 63, + "startLine": 107, "startColumn": 7, - "endLine": 63, + "endLine": 107, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -45169,19 +43653,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'atmConsumer1LambdaServiceRole70132707' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'HttpAPI8D545486' of type 'AWS::ApiGatewayV2::Api' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer1LambdaServiceRole70132707", + "logicalId": "HttpAPI8D545486", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGatewayV2::Api" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 123, + "startLine": 174, "startColumn": 7, - "endLine": 123, + "endLine": 174, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -45189,19 +43673,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'atmConsumer1LambdaC3C4DA46' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'HttpAPIDefaultStage1BC7D78F' of type 'AWS::ApiGatewayV2::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer1LambdaC3C4DA46", + "logicalId": "HttpAPIDefaultStage1BC7D78F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGatewayV2::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 157, + "startLine": 266, "startColumn": 7, - "endLine": 157, + "endLine": 266, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -45209,39 +43693,39 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'atmConsumer1LambdaRuleC1D6BC2F' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Resource 'errorTopicE59AB483' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer1LambdaRuleC1D6BC2F", + "logicalId": "errorTopicE59AB483", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 216, - "startColumn": 7, - "endLine": 216, - "endColumn": 18, + "startLine": 277, + "startColumn": 5, + "endLine": 277, + "endColumn": 24, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'atmConsumer2LambdaServiceRole130B888D' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'APIGateway4XXErrors1647FE3DB' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer2LambdaServiceRole130B888D", + "logicalId": "APIGateway4XXErrors1647FE3DB", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::CloudWatch::Alarm" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 272, + "startLine": 285, "startColumn": 7, - "endLine": 272, + "endLine": 285, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -45249,19 +43733,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'atmConsumer2LambdaB7E263A7' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'APIGateway5XXErrors0A91D7B4E' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer2LambdaB7E263A7", + "logicalId": "APIGateway5XXErrors0A91D7B4E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::CloudWatch::Alarm" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 306, + "startLine": 354, "startColumn": 7, - "endLine": 306, + "endLine": 354, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -45269,19 +43753,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'atmConsumer2LambdaRule5894DC8E' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Resource 'APIp99latencyalarm1s67095ACE' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer2LambdaRule5894DC8E", + "logicalId": "APIp99latencyalarm1s67095ACE", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::CloudWatch::Alarm" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 365, + "startLine": 385, "startColumn": 7, - "endLine": 365, + "endLine": 385, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -45289,19 +43773,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'atmConsumer3LambdaServiceRoleCF9BAEA7' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'DynamoLambda2ErrorDE3BEB2F' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer3LambdaServiceRoleCF9BAEA7", + "logicalId": "DynamoLambda2ErrorDE3BEB2F", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::CloudWatch::Alarm" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 422, + "startLine": 416, "startColumn": 7, - "endLine": 422, + "endLine": 416, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -45309,19 +43793,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'atmConsumer3Lambda880BEEDF' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'DynamoLambdap99LongDuration1s739ED568' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer3Lambda880BEEDF", + "logicalId": "DynamoLambdap99LongDuration1s739ED568", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::CloudWatch::Alarm" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 456, + "startLine": 481, "startColumn": 7, - "endLine": 456, + "endLine": 481, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -45329,19 +43813,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'atmConsumer3LambdaRule41A00643' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Resource 'DynamoLambda2Throttled090CFA4C' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "atmConsumer3LambdaRule41A00643", + "logicalId": "DynamoLambda2Throttled090CFA4C", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::CloudWatch::Alarm" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 515, + "startLine": 511, "startColumn": 7, - "endLine": 515, + "endLine": 511, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -45349,19 +43833,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EndpointEEF1FD8F' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Resource 'DynamoDBTableReadsWritesThrottled13F6F2AE' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EndpointEEF1FD8F", + "logicalId": "DynamoDBTableReadsWritesThrottled13F6F2AE", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::CloudWatch::Alarm" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 572, + "startLine": 576, "startColumn": 7, - "endLine": 572, + "endLine": 576, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -45369,19 +43853,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EndpointCloudWatchRoleC3C64E0F' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'DynamoDBErrors0FA6C66C9' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EndpointCloudWatchRoleC3C64E0F", + "logicalId": "DynamoDBErrors0FA6C66C9", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::CloudWatch::Alarm" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 581, + "startLine": 641, "startColumn": 7, - "endLine": 581, + "endLine": 641, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -45389,35 +43873,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EndpointDeploymentStageprodB78BEEA0' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Resource 'CloudWatchDashBoard043C60B6' of type 'AWS::CloudWatch::Dashboard' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EndpointDeploymentStageprodB78BEEA0", + "logicalId": "CloudWatchDashBoard043C60B6", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::CloudWatch::Dashboard" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 649, + "startLine": 900, "startColumn": 7, - "endLine": 649, + "endLine": 900, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/pat-the-eventbridge-circuit-breaker--TheEventbridgeCircuitBreakerStack.template.json": { - "filePath": "cdk/pat-the-eventbridge-circuit-breaker--TheEventbridgeCircuitBreakerStack.template.json", + "cdk/pat-the-destined-lambda--TheDestinedLambdaStack.template.json": { + "filePath": "cdk/pat-the-destined-lambda--TheDestinedLambdaStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 22, + "resourcesScanned": 28, "counts": { "fatal": 0, - "errors": 2, + "errors": 3, "warnings": 4, - "informational": 42, + "informational": 49, "debug": 0 }, "suppressed": 0, @@ -45431,15 +43915,15 @@ "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "WebserviceIntegrationLambdaHandler5E349AB7", + "logicalId": "destinedLambda8DF776BB", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 213, + "startLine": 127, "startColumn": 9, - "endLine": 213, + "endLine": 127, "endColumn": 17, "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", @@ -45454,15 +43938,15 @@ "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "ErrorLambdaHandler4224322A", + "logicalId": "SuccessLambdaHandler0E2CD797", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 365, + "startLine": 289, "startColumn": 9, - "endLine": 365, + "endLine": 289, "endColumn": 17, "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", @@ -45472,37 +43956,42 @@ } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AssetParameters0641c2be6bec286d59c7c75ed1e4ce6e7dc5be0e4a14b52b1088d92b3977f68eArtifactHash7779B76D' is not referenced anywhere in the template", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "AssetParameters0641c2be6bec286d59c7c75ed1e4ce6e7dc5be0e4a14b52b1088d92b3977f68eArtifactHash7779B76D", - "entityType": "Parameter" + "logicalId": "FailureLambdaHandlerBB58C051", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/AssetParameters0641c2be6bec286d59c7c75ed1e4ce6e7dc5be0e4a14b52b1088d92b3977f68eArtifactHash7779B76D", - "category": "Best Practice", - "startLine": 821, - "startColumn": 5, - "endLine": 821, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 446, + "startColumn": 9, + "endLine": 446, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'AssetParameters73ddeceb533c98a62d83046532b46a5c3457eefa2ea3fc5c6816dfd09424e4a2ArtifactHash5AB686F1' is not referenced anywhere in the template", + "message": "Parameter 'AssetParameters46d205b682091147559b63b9f28b2b0fcfd0b5f3e873a3b40a905e1f82d2001aArtifactHashE6B80060' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "AssetParameters73ddeceb533c98a62d83046532b46a5c3457eefa2ea3fc5c6816dfd09424e4a2ArtifactHash5AB686F1", + "logicalId": "AssetParameters46d205b682091147559b63b9f28b2b0fcfd0b5f3e873a3b40a905e1f82d2001aArtifactHashE6B80060", "entityType": "Parameter" }, - "propertyPath": "Parameters/AssetParameters73ddeceb533c98a62d83046532b46a5c3457eefa2ea3fc5c6816dfd09424e4a2ArtifactHash5AB686F1", + "propertyPath": "Parameters/AssetParameters46d205b682091147559b63b9f28b2b0fcfd0b5f3e873a3b40a905e1f82d2001aArtifactHashE6B80060", "category": "Best Practice", - "startLine": 833, + "startLine": 841, "startColumn": 5, - "endLine": 833, + "endLine": 841, "endColumn": 105, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -45510,19 +43999,19 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'WebserviceIntegrationLambdaHandlerServiceRole851361F8' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'destinedLambdaServiceRole87608B6F' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "WebserviceIntegrationLambdaHandler5E349AB7", + "logicalId": "destinedLambda8DF776BB", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 216, + "startLine": 129, "startColumn": 7, - "endLine": 216, + "endLine": 129, "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -45530,61 +44019,60 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'ErrorLambdaHandlerServiceRole5D9F8D61' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'SuccessLambdaHandlerServiceRole77BD70C4' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "ErrorLambdaHandler4224322A", + "logicalId": "SuccessLambdaHandler0E2CD797", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 368, + "startLine": 292, "startColumn": 7, - "endLine": 368, + "endLine": 292, "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'FailureLambdaHandlerServiceRole7E0414CB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "CircuitBreaker4FAEA3DB", + "logicalId": "FailureLambdaHandlerBB58C051", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 6, - "startColumn": 9, - "endLine": 6, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 449, + "startColumn": 7, + "endLine": 449, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "webserviceErrorRuleAllowEventRuleTheEventbridgeCircuitBreakerStackwebserviceErrorRule5CA5849AC9CE1102", + "logicalId": "DestinedEventBus14820B65", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Events::EventBus" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 415, + "startLine": 6, "startColumn": 9, - "endLine": 415, - "endColumn": 16, + "endLine": 6, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-events", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -45597,225 +44085,62 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "webserviceErrorRuleAllowEventRuleTheEventbridgeCircuitBreakerStackwebserviceErrorRule5CA5849AC9CE1102", + "logicalId": "destinedLambdaEventInvokeConfig3CA2AF7E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::EventInvokeConfig" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 416, + "startLine": 142, "startColumn": 9, - "endLine": 416, + "endLine": 142, "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ErrorLambdaHandler4224322A.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "webserviceErrorRuleAllowEventRuleTheEventbridgeCircuitBreakerStackwebserviceErrorRule5CA5849AC9CE1102", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 422, - "startColumn": 9, - "endLine": 422, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "webserviceErrorRuleAllowEventRuleTheEventbridgeCircuitBreakerStackwebserviceErrorRule5CA5849AC9CE1102", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 423, - "startColumn": 9, - "endLine": 423, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt webserviceErrorRuleCE293636.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CircuitBreakerGatewayDeployment9F2A82FA10260421dc831e654354d72baa60bfb0", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 497, - "startColumn": 9, - "endLine": 497, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CircuitBreakerGatewayDeploymentStageprod84F6B9E5", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 514, - "startColumn": 9, - "endLine": 514, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" + "resolutionSource": "Ref to 'destinedLambda8DF776BB'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'Qualifier' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayDeploymentStageprod84F6B9E5", + "logicalId": "destinedLambdaEventInvokeConfig3CA2AF7E", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::EventInvokeConfig" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.Qualifier", "category": "Best Practice", - "startLine": 520, + "startLine": 145, "startColumn": 9, - "endLine": 520, + "endLine": 145, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CircuitBreakerGatewayproxy1147E2CF", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" - }, - "propertyPath": "Properties.ParentId", - "category": "Best Practice", - "startLine": 529, - "startColumn": 9, - "endLine": 529, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt CircuitBreakerGateway122B123C.RootResourceId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CircuitBreakerGatewayproxy1147E2CF", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" - }, - "propertyPath": "Properties.PathPart", - "category": "Best Practice", - "startLine": 535, - "startColumn": 9, - "endLine": 535, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CircuitBreakerGatewayproxy1147E2CF", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 536, - "startColumn": 9, - "endLine": 536, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" - } - }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxy584EF780", + "logicalId": "destinedLambdaAllowInvokeTheDestinedLambdaStacktheDestinedLambdaTopic8CE84AB4D93BC799", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 547, + "startLine": 173, "startColumn": 9, - "endLine": 547, + "endLine": 173, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -45829,21 +44154,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxy584EF780", + "logicalId": "destinedLambdaAllowInvokeTheDestinedLambdaStacktheDestinedLambdaTopic8CE84AB4D93BC799", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 548, + "startLine": 174, "startColumn": 9, - "endLine": 548, + "endLine": 174, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt WebserviceIntegrationLambdaHandler5E349AB7.Arn" + "resolutionSource": "GetAtt destinedLambda8DF776BB.Arn" } }, { @@ -45852,15 +44177,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxy584EF780", + "logicalId": "destinedLambdaAllowInvokeTheDestinedLambdaStacktheDestinedLambdaTopic8CE84AB4D93BC799", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 554, + "startLine": 180, "startColumn": 9, - "endLine": 554, + "endLine": 180, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -45874,84 +44199,40 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxy584EF780", + "logicalId": "destinedLambdaAllowInvokeTheDestinedLambdaStacktheDestinedLambdaTopic8CE84AB4D93BC799", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 555, + "startLine": 181, "startColumn": 9, - "endLine": 555, + "endLine": 181, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:CircuitBreakerGateway122B123C}/{ref:CircuitBreakerGatewayDeploymentStageprod84F6B9E5}/*/*)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxyE09D3DF2", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 591, - "startColumn": 9, - "endLine": 591, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxyE09D3DF2", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 592, - "startColumn": 9, - "endLine": 592, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt WebserviceIntegrationLambdaHandler5E349AB7.Arn" + "resolutionSource": "Ref to 'theDestinedLambdaTopic8F2C8FB6'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxyE09D3DF2", + "logicalId": "destinedLambdatheDestinedLambdaTopic8E937C7F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 598, + "startLine": 192, "startColumn": 9, - "endLine": 598, - "endColumn": 19, + "endLine": 192, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -45961,95 +44242,72 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxyE09D3DF2", + "logicalId": "destinedLambdatheDestinedLambdaTopic8E937C7F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.TopicArn", "category": "Best Practice", - "startLine": 599, + "startLine": 193, "startColumn": 9, - "endLine": 599, - "endColumn": 19, + "endLine": 193, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:CircuitBreakerGateway122B123C}/test-invoke-stage/*/*)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CircuitBreakerGatewayproxyANY759880DB", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.HttpMethod", - "category": "Best Practice", - "startLine": 631, - "startColumn": 9, - "endLine": 631, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" + "resolutionSource": "Ref to 'theDestinedLambdaTopic8F2C8FB6'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayproxyANY759880DB", + "logicalId": "destinedLambdatheDestinedLambdaTopic8E937C7F", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.Endpoint", "category": "Best Practice", - "startLine": 632, + "startLine": 196, "startColumn": 9, - "endLine": 632, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 196, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'CircuitBreakerGatewayproxy1147E2CF'" + "resolutionSource": "GetAtt destinedLambda8DF776BB.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'EventBusName' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayproxyANY759880DB", + "logicalId": "successRuleE9E88056", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.EventBusName", "category": "Best Practice", - "startLine": 635, + "startLine": 305, "startColumn": 9, - "endLine": 635, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 305, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'DestinedEventBus14820B65'" } }, { @@ -46058,15 +44316,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY2D2F06E0", + "logicalId": "successRuleAllowEventRuleTheDestinedLambdaStacksuccessRuleDD139E31353F8BE2", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 674, + "startLine": 345, "startColumn": 9, - "endLine": 674, + "endLine": 345, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -46080,21 +44338,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY2D2F06E0", + "logicalId": "successRuleAllowEventRuleTheDestinedLambdaStacksuccessRuleDD139E31353F8BE2", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 675, + "startLine": 346, "startColumn": 9, - "endLine": 675, + "endLine": 346, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt WebserviceIntegrationLambdaHandler5E349AB7.Arn" + "resolutionSource": "GetAtt SuccessLambdaHandler0E2CD797.Arn" } }, { @@ -46103,15 +44361,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY2D2F06E0", + "logicalId": "successRuleAllowEventRuleTheDestinedLambdaStacksuccessRuleDD139E31353F8BE2", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 681, + "startLine": 352, "startColumn": 9, - "endLine": 681, + "endLine": 352, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -46125,21 +44383,44 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY2D2F06E0", + "logicalId": "successRuleAllowEventRuleTheDestinedLambdaStacksuccessRuleDD139E31353F8BE2", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 682, + "startLine": 353, "startColumn": 9, - "endLine": 682, + "endLine": 353, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:CircuitBreakerGateway122B123C}/{ref:CircuitBreakerGatewayDeploymentStageprod84F6B9E5}/*/)" + "resolutionSource": "GetAtt successRuleE9E88056.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'EventBusName' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "failureRule10D0B2E4", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.EventBusName", + "category": "Best Practice", + "startLine": 462, + "startColumn": 9, + "endLine": 462, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'DestinedEventBus14820B65'" } }, { @@ -46148,15 +44429,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY33532EB9", + "logicalId": "failureRuleAllowEventRuleTheDestinedLambdaStackfailureRule39380610D37AD724", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 718, + "startLine": 494, "startColumn": 9, - "endLine": 718, + "endLine": 494, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -46170,21 +44451,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY33532EB9", + "logicalId": "failureRuleAllowEventRuleTheDestinedLambdaStackfailureRule39380610D37AD724", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 719, + "startLine": 495, "startColumn": 9, - "endLine": 719, + "endLine": 495, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt WebserviceIntegrationLambdaHandler5E349AB7.Arn" + "resolutionSource": "GetAtt FailureLambdaHandlerBB58C051.Arn" } }, { @@ -46193,15 +44474,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY33532EB9", + "logicalId": "failureRuleAllowEventRuleTheDestinedLambdaStackfailureRule39380610D37AD724", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 725, + "startLine": 501, "startColumn": 9, - "endLine": 725, + "endLine": 501, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -46215,975 +44496,962 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY33532EB9", + "logicalId": "failureRuleAllowEventRuleTheDestinedLambdaStackfailureRule39380610D37AD724", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 726, + "startLine": 502, "startColumn": 9, - "endLine": 726, + "endLine": 502, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:CircuitBreakerGateway122B123C}/test-invoke-stage/*/)" + "resolutionSource": "GetAtt failureRule10D0B2E4.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayANYE076316B", + "logicalId": "theDestinedLambdaAPIDeploymentC364859Eae40584f53d9b7bb31907a57bb781ad3", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 758, + "startLine": 576, "startColumn": 9, - "endLine": 758, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 576, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'theDestinedLambdaAPIBAB2789B'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayANYE076316B", + "logicalId": "theDestinedLambdaAPIDeploymentStageprodD67BDFB2", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 759, + "startLine": 594, "startColumn": 9, - "endLine": 759, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 594, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt CircuitBreakerGateway122B123C.RootResourceId" + "resolutionSource": "Ref to 'theDestinedLambdaAPIBAB2789B'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayANYE076316B", + "logicalId": "theDestinedLambdaAPIDeploymentStageprodD67BDFB2", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 765, + "startLine": 609, "startColumn": 9, - "endLine": 765, + "endLine": 609, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CircuitBreaker4FAEA3DB' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CircuitBreaker4FAEA3DB", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'WebserviceIntegrationLambdaHandlerServiceRole851361F8' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebserviceIntegrationLambdaHandlerServiceRole851361F8", + "logicalId": "theDestinedLambdaAPISendEventC20585CF", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 69, - "startColumn": 7, - "endLine": 69, + "startLine": 618, + "startColumn": 9, + "endLine": 618, "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt theDestinedLambdaAPIBAB2789B.RootResourceId" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'WebserviceIntegrationLambdaHandler5E349AB7' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebserviceIntegrationLambdaHandler5E349AB7", + "logicalId": "theDestinedLambdaAPISendEventC20585CF", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 160, - "startColumn": 7, - "endLine": 160, + "startLine": 624, + "startColumn": 9, + "endLine": 624, "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ErrorLambdaHandlerServiceRole5D9F8D61' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ErrorLambdaHandlerServiceRole5D9F8D61", + "logicalId": "theDestinedLambdaAPISendEventC20585CF", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 228, - "startColumn": 7, - "endLine": 228, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 625, + "startColumn": 9, + "endLine": 625, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'theDestinedLambdaAPIBAB2789B'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ErrorLambdaHandler4224322A' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ErrorLambdaHandler4224322A", + "logicalId": "theDestinedLambdaAPISendEventGETC3F11CCE", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 312, - "startColumn": 7, - "endLine": 312, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 636, + "startColumn": 9, + "endLine": 636, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'webserviceErrorRuleCE293636' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "webserviceErrorRuleCE293636", + "logicalId": "theDestinedLambdaAPISendEventGETC3F11CCE", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 380, - "startColumn": 7, - "endLine": 380, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 637, + "startColumn": 9, + "endLine": 637, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'theDestinedLambdaAPISendEventC20585CF'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CircuitBreakerGateway122B123C' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGateway122B123C", + "logicalId": "theDestinedLambdaAPISendEventGETC3F11CCE", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 436, - "startColumn": 7, - "endLine": 436, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 640, + "startColumn": 9, + "endLine": 640, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'theDestinedLambdaAPIBAB2789B'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CircuitBreakerGatewayCloudWatchRole934DF897' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayCloudWatchRole934DF897", + "logicalId": "theDestinedLambdaAPIResponseModel7D59062C", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 445, - "startColumn": 7, - "endLine": 445, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 729, + "startColumn": 9, + "endLine": 729, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'theDestinedLambdaAPIBAB2789B'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CircuitBreakerGatewayDeploymentStageprod84F6B9E5' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayDeploymentStageprod84F6B9E5", + "logicalId": "theDestinedLambdaAPIResponseModel7D59062C", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContentType", "category": "Best Practice", - "startLine": 513, - "startColumn": 7, - "endLine": 513, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/pat-the-eventbridge-etl--TheEventbridgeEtlStack.template.json": { - "filePath": "cdk/pat-the-eventbridge-etl--TheEventbridgeEtlStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 57, - "counts": { - "fatal": 0, - "errors": 5, - "warnings": 10, - "informational": 86, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs10.x' was deprecated on '2021-07-30'. Creation was disabled on '2021-07-30', and updates were disabled on '2022-02-14'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 199, + "startLine": 732, "startColumn": 9, - "endLine": 199, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "endLine": 732, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs10.x", - "lifecycle": "end-of-life" + "lifecycle": "create-only" } }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "extractLambdaHandlerD06B8F09", + "logicalId": "theDestinedLambdaAPIResponseModel7D59062C", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 1089, + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 733, "startColumn": 9, - "endLine": 1089, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "endLine": 733, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" + "lifecycle": "create-only" } }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "TransformLambdaHandler60ABE8EE", + "logicalId": "theDestinedLambdaAPIErrorResponseModel5F76D2FC", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 1225, + "propertyPath": "Properties.RestApiId", + "category": "Best Practice", + "startLine": 752, "startColumn": 9, - "endLine": 1225, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "endLine": 752, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'theDestinedLambdaAPIBAB2789B'" } }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LoadLambdaHandlerFDA03D53", + "logicalId": "theDestinedLambdaAPIErrorResponseModel5F76D2FC", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 1434, + "propertyPath": "Properties.ContentType", + "category": "Best Practice", + "startLine": 755, "startColumn": 9, - "endLine": 1434, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "endLine": 755, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" + "lifecycle": "create-only" } }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ObserveLambdaHandler685FFDBB", + "logicalId": "theDestinedLambdaAPIErrorResponseModel5F76D2FC", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 1585, + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 756, "startColumn": 9, - "endLine": 1585, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "endLine": 756, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" + "lifecycle": "create-only" } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AssetParameters63e74618e2833e3346e7223ed172c961dfc5f22e47a02bfd8e38e313b20b30dfArtifactHash20D89EF6' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DestinedEventBus14820B65' of type 'AWS::Events::EventBus' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "AssetParameters63e74618e2833e3346e7223ed172c961dfc5f22e47a02bfd8e38e313b20b30dfArtifactHash20D89EF6", - "entityType": "Parameter" + "logicalId": "DestinedEventBus14820B65", + "entityType": "Resource", + "resourceType": "AWS::Events::EventBus" }, - "propertyPath": "Parameters/AssetParameters63e74618e2833e3346e7223ed172c961dfc5f22e47a02bfd8e38e313b20b30dfArtifactHash20D89EF6", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1665, - "startColumn": 5, - "endLine": 1665, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AssetParametersa20da5839df7117061434d7118e435f02499368b8c588c15b84f94ecfb7732f2ArtifactHash202B02F0' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'theDestinedLambdaTopic8F2C8FB6' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "AssetParametersa20da5839df7117061434d7118e435f02499368b8c588c15b84f94ecfb7732f2ArtifactHash202B02F0", - "entityType": "Parameter" + "logicalId": "theDestinedLambdaTopic8F2C8FB6", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Parameters/AssetParametersa20da5839df7117061434d7118e435f02499368b8c588c15b84f94ecfb7732f2ArtifactHash202B02F0", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1677, - "startColumn": 5, - "endLine": 1677, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AssetParameters7239a648a454455008a419ce89d65c3755bf0e160fd4f91f8d3b4d16c5598d41ArtifactHash40B763DF' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'destinedLambdaServiceRole87608B6F' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "AssetParameters7239a648a454455008a419ce89d65c3755bf0e160fd4f91f8d3b4d16c5598d41ArtifactHash40B763DF", - "entityType": "Parameter" + "logicalId": "destinedLambdaServiceRole87608B6F", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Parameters/AssetParameters7239a648a454455008a419ce89d65c3755bf0e160fd4f91f8d3b4d16c5598d41ArtifactHash40B763DF", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1689, - "startColumn": 5, - "endLine": 1689, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AssetParameters21981f2afd308d5c462488a4129b87ce9d6ca2227128358b2d6e11e7d9f1c4b6ArtifactHashD80D6D6D' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'destinedLambda8DF776BB' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "AssetParameters21981f2afd308d5c462488a4129b87ce9d6ca2227128358b2d6e11e7d9f1c4b6ArtifactHashD80D6D6D", - "entityType": "Parameter" + "logicalId": "destinedLambda8DF776BB", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/AssetParameters21981f2afd308d5c462488a4129b87ce9d6ca2227128358b2d6e11e7d9f1c4b6ArtifactHashD80D6D6D", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1701, - "startColumn": 5, - "endLine": 1701, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", + "startLine": 81, + "startColumn": 7, + "endLine": 81, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'newObjectInLandingBucketEventQueue67CBE2F2' dependency already enforced by a 'GetAtt' at 'Properties.NotificationConfiguration.QueueConfigurations.0.QueueArn'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SuccessLambdaHandlerServiceRole77BD70C4' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "LandingBucketNotificationsEF1634C6", + "logicalId": "SuccessLambdaHandlerServiceRole77BD70C4", "entityType": "Resource", - "resourceType": "Custom::S3BucketNotifications" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 65, + "startLine": 209, "startColumn": 7, - "endLine": 65, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 209, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SuccessLambdaHandler0E2CD797' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", + "logicalId": "SuccessLambdaHandler0E2CD797", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 202, + "startLine": 243, "startColumn": 7, - "endLine": 202, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 243, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'extractLambdaHandlerServiceRole8A50F829' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'successRuleE9E88056' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "extractLambdaHandlerD06B8F09", + "logicalId": "successRuleE9E88056", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1091, + "startLine": 303, "startColumn": 7, - "endLine": 1091, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 303, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'TransformLambdaHandlerServiceRole710C039E' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FailureLambdaHandlerServiceRole7E0414CB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "TransformLambdaHandler60ABE8EE", + "logicalId": "FailureLambdaHandlerServiceRole7E0414CB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1228, + "startLine": 366, "startColumn": 7, - "endLine": 1228, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 366, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LoadLambdaHandlerServiceRole83E61748' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FailureLambdaHandlerBB58C051' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "LoadLambdaHandlerFDA03D53", + "logicalId": "FailureLambdaHandlerBB58C051", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1437, + "startLine": 400, "startColumn": 7, - "endLine": 1437, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 400, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ObserveLambdaHandlerServiceRole040C69BA' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'failureRule10D0B2E4' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ObserveLambdaHandler685FFDBB", + "logicalId": "failureRule10D0B2E4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1588, + "startLine": 460, "startColumn": 7, - "endLine": 1588, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 460, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'theDestinedLambdaAPIBAB2789B' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "newObjectInLandingBucketEventQueue67CBE2F2", + "logicalId": "theDestinedLambdaAPIBAB2789B", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ApiGateway::RestApi" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 73, - "startColumn": 5, - "endLine": 73, - "endColumn": 48, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 515, + "startColumn": 7, + "endLine": 515, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'theDestinedLambdaAPICloudWatchRoleCDF408DA' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "newObjectInLandingBucketEventQueue67CBE2F2", + "logicalId": "theDestinedLambdaAPICloudWatchRoleCDF408DA", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::IAM::Role" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 73, - "startColumn": 5, - "endLine": 73, - "endColumn": 48, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 524, + "startColumn": 7, + "endLine": 524, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "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", + "message": "Resource 'theDestinedLambdaAPIDeploymentStageprodD67BDFB2' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "newObjectInLandingBucketEventQueue67CBE2F2", + "logicalId": "theDestinedLambdaAPIDeploymentStageprodD67BDFB2", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 75, + "startLine": 593, "startColumn": 7, - "endLine": 75, + "endLine": 593, "endColumn": 18, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'ApiGatewaySnsRole904B65D6' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TransformedDataB0572681", + "logicalId": "ApiGatewaySnsRole904B65D6", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, - "startColumn": 9, - "endLine": 6, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 777, + "startColumn": 7, + "endLine": 777, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/pat-the-dynamo-streamer--TheDynamoStreamerStack.template.json": { + "filePath": "cdk/pat-the-dynamo-streamer--TheDynamoStreamerStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 17, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 2, + "informational": 26, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "Vpc8378EB38", + "logicalId": "dynamoStreamSubscriberLambdaHandlerD2AAE139", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 213, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 152, "startColumn": 9, - "endLine": 213, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 152, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParametersdea71d0871b06cc6149d538db9f3627c5e43599da253f86c0ab81528b3ccf675ArtifactHashCA4FFEF8' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "Vpc8378EB38", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "logicalId": "AssetParametersdea71d0871b06cc6149d538db9f3627c5e43599da253f86c0ab81528b3ccf675ArtifactHashCA4FFEF8", + "entityType": "Parameter" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Parameters/AssetParametersdea71d0871b06cc6149d538db9f3627c5e43599da253f86c0ab81528b3ccf675ArtifactHashCA4FFEF8", "category": "Best Practice", - "startLine": 216, - "startColumn": 9, - "endLine": 216, - "endColumn": 25, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 527, + "startColumn": 5, + "endLine": 527, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'dynamoStreamSubscriberLambdaHandlerServiceRole70DB8A47' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "dynamoStreamSubscriberLambdaHandlerD2AAE139", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 231, - "startColumn": 9, - "endLine": 231, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 154, + "startColumn": 7, + "endLine": 154, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "TheDynamoStreamer641C5E5B", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 232, + "startLine": 6, "startColumn": 9, - "endLine": 232, - "endColumn": 15, + "endLine": 6, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "dynamoStreamSubscriberLambdaHandlerDynamoDBEventSourceTheDynamoStreamerStackTheDynamoStreamerB472C427C1D10245", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.EventSourceArn", "category": "Best Practice", - "startLine": 235, + "startLine": 171, "startColumn": 9, - "endLine": 235, - "endColumn": 26, + "endLine": 171, + "endColumn": 24, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt TheDynamoStreamer641C5E5B.StreamArn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'StartingPosition' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTable6C95E38E", + "logicalId": "dynamoStreamSubscriberLambdaHandlerDynamoDBEventSourceTheDynamoStreamerStackTheDynamoStreamerB472C427C1D10245", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.StartingPosition", "category": "Best Practice", - "startLine": 266, + "startLine": 177, "startColumn": 9, - "endLine": 266, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 177, + "endColumn": 26, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", + "logicalId": "DynamoStreamerAPIDeployment8F20C3E380de34421a04eed5e7cc4a28266c5690", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 283, + "startLine": 246, "startColumn": 9, - "endLine": 283, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 246, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "Ref to 'DynamoStreamerAPICA573C81'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", + "logicalId": "DynamoStreamerAPIDeploymentStageprod0700648B", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 286, + "startLine": 264, "startColumn": 9, - "endLine": 286, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 264, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "Ref to 'DynamoStreamerAPICA573C81'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", + "logicalId": "DynamoStreamerAPIDeploymentStageprod0700648B", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 297, + "startLine": 279, "startColumn": 9, - "endLine": 297, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 279, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", + "logicalId": "DynamoStreamerAPIInsertItemACBD0A97", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 300, + "startLine": 288, "startColumn": 9, - "endLine": 300, - "endColumn": 30, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 288, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt DynamoStreamerAPICA573C81.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", + "logicalId": "DynamoStreamerAPIInsertItemACBD0A97", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 330, + "startLine": 294, "startColumn": 9, - "endLine": 330, - "endColumn": 22, + "endLine": 294, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcPublicSubnet1EIPD7E02669.AllocationId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", + "logicalId": "DynamoStreamerAPIInsertItemACBD0A97", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 336, + "startLine": 295, "startColumn": 9, - "endLine": 336, - "endColumn": 18, + "endLine": 295, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'" + "resolutionSource": "Ref to 'DynamoStreamerAPICA573C81'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "DynamoStreamerAPIInsertItemPOSTCDE209E1", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 353, + "startLine": 306, "startColumn": 9, - "endLine": 353, - "endColumn": 19, + "endLine": 306, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -47193,167 +45461,162 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "DynamoStreamerAPIInsertItemPOSTCDE209E1", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 354, + "startLine": 307, "startColumn": 9, - "endLine": 354, - "endColumn": 15, + "endLine": 307, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'DynamoStreamerAPIInsertItemACBD0A97'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "DynamoStreamerAPIInsertItemPOSTCDE209E1", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 357, + "startLine": 310, "startColumn": 9, - "endLine": 357, - "endColumn": 26, + "endLine": 310, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'DynamoStreamerAPICA573C81'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTable94F7E489", + "logicalId": "DynamoStreamerAPIResponseModel5C9A2FF6", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 388, + "startLine": 396, "startColumn": 9, - "endLine": 388, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 396, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'DynamoStreamerAPICA573C81'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "logicalId": "DynamoStreamerAPIResponseModel5C9A2FF6", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.ContentType", "category": "Best Practice", - "startLine": 405, + "startLine": 399, "startColumn": 9, - "endLine": 405, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 399, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "logicalId": "DynamoStreamerAPIResponseModel5C9A2FF6", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 408, + "startLine": 400, "startColumn": 9, - "endLine": 408, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 400, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", + "logicalId": "DynamoStreamerAPIErrorResponseModelEB962BDA", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", "startLine": 419, "startColumn": 9, "endLine": 419, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'" + "resolutionSource": "Ref to 'DynamoStreamerAPICA573C81'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", + "logicalId": "DynamoStreamerAPIErrorResponseModelEB962BDA", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.ContentType", "category": "Best Practice", "startLine": 422, "startColumn": 9, "endLine": 422, - "endColumn": 30, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -47363,500 +45626,564 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2NATGateway9182C01D", + "logicalId": "DynamoStreamerAPIErrorResponseModelEB962BDA", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 452, + "startLine": 423, "startColumn": 9, - "endLine": 452, - "endColumn": 22, + "endLine": 423, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcPublicSubnet2EIP3C605A87.AllocationId" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'TheDynamoStreamer641C5E5B' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2NATGateway9182C01D", + "logicalId": "TheDynamoStreamer641C5E5B", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 458, - "startColumn": 9, - "endLine": 458, + "startLine": 5, + "startColumn": 7, + "endLine": 5, "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'dynamoStreamSubscriberLambdaHandlerServiceRole70DB8A47' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "dynamoStreamSubscriberLambdaHandlerServiceRole70DB8A47", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 475, - "startColumn": 9, - "endLine": 475, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 34, + "startColumn": 7, + "endLine": 34, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'dynamoStreamSubscriberLambdaHandlerD2AAE139' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "dynamoStreamSubscriberLambdaHandlerD2AAE139", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 476, - "startColumn": 9, - "endLine": 476, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } + "startLine": 106, + "startColumn": 7, + "endLine": 106, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Resource 'dynamoStreamSubscriberLambdaHandlerDynamoDBEventSourceTheDynamoStreamerStackTheDynamoStreamerB472C427C1D10245' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "dynamoStreamSubscriberLambdaHandlerDynamoDBEventSourceTheDynamoStreamerStackTheDynamoStreamerB472C427C1D10245", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 479, - "startColumn": 9, - "endLine": 479, - "endColumn": 26, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 166, + "startColumn": 7, + "endLine": 166, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'DynamoStreamerAPICA573C81' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableB2C5B500", + "logicalId": "DynamoStreamerAPICA573C81", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::ApiGateway::RestApi" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 510, + "startLine": 185, + "startColumn": 7, + "endLine": 185, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DynamoStreamerAPICloudWatchRoleEF2543E3' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "DynamoStreamerAPICloudWatchRoleEF2543E3", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 194, + "startColumn": 7, + "endLine": 194, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DynamoStreamerAPIDeploymentStageprod0700648B' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "DynamoStreamerAPIDeploymentStageprod0700648B", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Stage" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 263, + "startColumn": 7, + "endLine": 263, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DefaultLambdaHanderRoleA44A3BA8' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "DefaultLambdaHanderRoleA44A3BA8", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 444, + "startColumn": 7, + "endLine": 444, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/pat-the-eventbridge-atm--TheEventbridgeAtmStack.template.json": { + "filePath": "cdk/pat-the-eventbridge-atm--TheEventbridgeAtmStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 28, + "counts": { + "fatal": 0, + "errors": 4, + "warnings": 6, + "informational": 54, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "atmProducerLambda71029F8F", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 109, "startColumn": 9, - "endLine": 510, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 109, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", + "logicalId": "atmConsumer1LambdaC3C4DA46", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 527, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 203, "startColumn": 9, - "endLine": 527, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 203, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", + "logicalId": "atmConsumer2LambdaB7E263A7", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 530, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 352, "startColumn": 9, - "endLine": 530, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 352, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1Subnet536B997A'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "logicalId": "atmConsumer3Lambda880BEEDF", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 541, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 502, "startColumn": 9, - "endLine": 541, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 502, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'" + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParameters9e5a75b7255f8eb613b34870191414422d068cd4c7a85e389d57bef239df88e2ArtifactHash4CB2B431' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "logicalId": "AssetParameters9e5a75b7255f8eb613b34870191414422d068cd4c7a85e389d57bef239df88e2ArtifactHash4CB2B431", + "entityType": "Parameter" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Parameters/AssetParameters9e5a75b7255f8eb613b34870191414422d068cd4c7a85e389d57bef239df88e2ArtifactHash4CB2B431", "category": "Best Practice", - "startLine": 544, - "startColumn": 9, - "endLine": 544, - "endColumn": 30, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 957, + "startColumn": 5, + "endLine": 957, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParameters0e0f30ed3f1938ea2f79b237fca2e084bafedb8d899074223167739de6f64fd8ArtifactHash62E19501' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "AssetParameters0e0f30ed3f1938ea2f79b237fca2e084bafedb8d899074223167739de6f64fd8ArtifactHash62E19501", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/AssetParameters0e0f30ed3f1938ea2f79b237fca2e084bafedb8d899074223167739de6f64fd8ArtifactHash62E19501", + "category": "Best Practice", + "startLine": 969, + "startColumn": 5, + "endLine": 969, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'atmProducerLambdaServiceRoleEF3D6079' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "atmProducerLambda71029F8F", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 556, - "startColumn": 9, - "endLine": 556, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 111, + "startColumn": 7, + "endLine": 111, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'atmConsumer1LambdaServiceRole70132707' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "atmConsumer1LambdaC3C4DA46", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 557, - "startColumn": 9, - "endLine": 557, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } + "startLine": 205, + "startColumn": 7, + "endLine": 205, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'atmConsumer2LambdaServiceRole130B888D' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "atmConsumer2LambdaB7E263A7", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 560, - "startColumn": 9, - "endLine": 560, - "endColumn": 26, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 354, + "startColumn": 7, + "endLine": 354, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'atmConsumer3LambdaServiceRoleCF9BAEA7' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableA678073B", + "logicalId": "atmConsumer3Lambda880BEEDF", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 591, - "startColumn": 9, - "endLine": 591, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } + "startLine": 504, + "startColumn": 7, + "endLine": 504, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", + "logicalId": "atmConsumer1LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer1LambdaRuleEB0F67E45F2D141B", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 608, + "startLine": 251, "startColumn": 9, - "endLine": 608, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 251, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", + "logicalId": "atmConsumer1LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer1LambdaRuleEB0F67E45F2D141B", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 611, + "startLine": 252, "startColumn": 9, - "endLine": 611, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 252, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2Subnet3788AAA1'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt atmConsumer1LambdaC3C4DA46.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", + "logicalId": "atmConsumer1LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer1LambdaRuleEB0F67E45F2D141B", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 622, + "startLine": 258, "startColumn": 9, - "endLine": 622, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 258, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", + "logicalId": "atmConsumer1LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer1LambdaRuleEB0F67E45F2D141B", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 625, + "startLine": 259, "startColumn": 9, - "endLine": 625, - "endColumn": 30, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 259, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt atmConsumer1LambdaRuleC1D6BC2F.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcVPCGWBF912B6E", + "logicalId": "atmConsumer2LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer2LambdaRuleF5729F59774A4AE8", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 651, + "startLine": 401, "startColumn": 9, - "endLine": 651, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "endLine": 401, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefinition8E3B365E", + "logicalId": "atmConsumer2LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer2LambdaRuleF5729F59774A4AE8", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 745, + "startLine": 402, "startColumn": 9, - "endLine": 745, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 402, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt atmConsumer2LambdaB7E263A7.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefinition8E3B365E", + "logicalId": "atmConsumer2LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer2LambdaRuleF5729F59774A4AE8", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 794, + "startLine": 408, "startColumn": 9, - "endLine": 794, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 408, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -47866,44 +46193,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefinition8E3B365E", + "logicalId": "atmConsumer2LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer2LambdaRuleF5729F59774A4AE8", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ExecutionRoleArn", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 795, + "startLine": 409, "startColumn": 9, - "endLine": 795, - "endColumn": 26, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 409, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateTaskDefinitionExecutionRoleE69A8E33.Arn" + "resolutionSource": "GetAtt atmConsumer2LambdaRule5894DC8E.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefinition8E3B365E", + "logicalId": "atmConsumer3LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer3LambdaRuleC926722A1B0365D4", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 801, + "startLine": 551, "startColumn": 9, - "endLine": 801, + "endLine": 551, "endColumn": 16, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -47913,43 +46238,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefinition8E3B365E", + "logicalId": "atmConsumer3LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer3LambdaRuleC926722A1B0365D4", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 802, + "startLine": 552, "startColumn": 9, - "endLine": 802, - "endColumn": 16, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 552, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt atmConsumer3Lambda880BEEDF.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefinition8E3B365E", + "logicalId": "atmConsumer3LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer3LambdaRuleC926722A1B0365D4", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 803, + "startLine": 558, "startColumn": 9, - "endLine": 803, - "endColumn": 21, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 558, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -47959,89 +46283,91 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefinition8E3B365E", + "logicalId": "atmConsumer3LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer3LambdaRuleC926722A1B0365D4", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 804, + "startLine": 559, "startColumn": 9, - "endLine": 804, - "endColumn": 33, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 559, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt atmConsumer3LambdaRule41A00643.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateTaskDefinition8E3B365E", + "logicalId": "EndpointDeployment318525DA98cf1fe46f6a8379cb8241a5e412a297", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.TaskRoleArn", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 807, + "startLine": 633, "startColumn": 9, - "endLine": 807, - "endColumn": 21, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 633, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateTaskDefinitionTaskRoleE3C2BCAA.Arn" + "resolutionSource": "Ref to 'EndpointEEF1FD8F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "extractLambdaHandlerSqsEventSourceTheEventbridgeEtlStacknewObjectInLandingBucketEventQueueA6103BFC894EEFC5", + "logicalId": "EndpointDeploymentStageprodB78BEEA0", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.EventSourceArn", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 1107, + "startLine": 650, "startColumn": 9, - "endLine": 1107, - "endColumn": 24, + "endLine": 650, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt newObjectInLandingBucketEventQueue67CBE2F2.Arn" + "resolutionSource": "Ref to 'EndpointEEF1FD8F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "transformRuleAllowEventRuleTheEventbridgeEtlStacktransformRuleF338DDCD2082D030", + "logicalId": "EndpointDeploymentStageprodB78BEEA0", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 1275, + "startLine": 656, "startColumn": 9, - "endLine": 1275, - "endColumn": 16, + "endLine": 656, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -48051,42 +46377,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "transformRuleAllowEventRuleTheEventbridgeEtlStacktransformRuleF338DDCD2082D030", + "logicalId": "Endpointproxy39E2174E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 1276, + "startLine": 665, "startColumn": 9, - "endLine": 1276, - "endColumn": 22, + "endLine": 665, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt TransformLambdaHandler60ABE8EE.Arn" + "resolutionSource": "GetAtt EndpointEEF1FD8F.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "transformRuleAllowEventRuleTheEventbridgeEtlStacktransformRuleF338DDCD2082D030", + "logicalId": "Endpointproxy39E2174E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 1282, + "startLine": 671, "startColumn": 9, - "endLine": 1282, - "endColumn": 19, + "endLine": 671, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -48096,24 +46424,25 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "transformRuleAllowEventRuleTheEventbridgeEtlStacktransformRuleF338DDCD2082D030", + "logicalId": "Endpointproxy39E2174E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 1283, + "startLine": 672, "startColumn": 9, - "endLine": 1283, + "endLine": 672, "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt transformRuleFEA34632.Arn" + "resolutionSource": "Ref to 'EndpointEEF1FD8F'" } }, { @@ -48122,15 +46451,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "loadRuleAllowEventRuleTheEventbridgeEtlStackloadRuleE4CE7871DBE863BA", + "logicalId": "EndpointproxyANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANYproxyC2C9F151", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 1484, + "startLine": 683, "startColumn": 9, - "endLine": 1484, + "endLine": 683, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -48144,21 +46473,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "loadRuleAllowEventRuleTheEventbridgeEtlStackloadRuleE4CE7871DBE863BA", + "logicalId": "EndpointproxyANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANYproxyC2C9F151", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 1485, + "startLine": 684, "startColumn": 9, - "endLine": 1485, + "endLine": 684, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt LoadLambdaHandlerFDA03D53.Arn" + "resolutionSource": "GetAtt atmProducerLambda71029F8F.Arn" } }, { @@ -48167,15 +46496,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "loadRuleAllowEventRuleTheEventbridgeEtlStackloadRuleE4CE7871DBE863BA", + "logicalId": "EndpointproxyANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANYproxyC2C9F151", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 1491, + "startLine": 690, "startColumn": 9, - "endLine": 1491, + "endLine": 690, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -48189,21 +46518,21 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "loadRuleAllowEventRuleTheEventbridgeEtlStackloadRuleE4CE7871DBE863BA", + "logicalId": "EndpointproxyANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANYproxyC2C9F151", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 1492, + "startLine": 691, "startColumn": 9, - "endLine": 1492, + "endLine": 691, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt loadRuleF0FAF418.Arn" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/{ref:EndpointDeploymentStageprodB78BEEA0}/*/*)" } }, { @@ -48212,15 +46541,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "observeRuleAllowEventRuleTheEventbridgeEtlStackobserveRuleDD299C278D51D81A", + "logicalId": "EndpointproxyANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYproxy14296A4D", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 1626, + "startLine": 727, "startColumn": 9, - "endLine": 1626, + "endLine": 727, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -48234,21 +46563,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "observeRuleAllowEventRuleTheEventbridgeEtlStackobserveRuleDD299C278D51D81A", + "logicalId": "EndpointproxyANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYproxy14296A4D", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 1627, + "startLine": 728, "startColumn": 9, - "endLine": 1627, + "endLine": 728, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ObserveLambdaHandler685FFDBB.Arn" + "resolutionSource": "GetAtt atmProducerLambda71029F8F.Arn" } }, { @@ -48257,15 +46586,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "observeRuleAllowEventRuleTheEventbridgeEtlStackobserveRuleDD299C278D51D81A", + "logicalId": "EndpointproxyANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYproxy14296A4D", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 1633, + "startLine": 734, "startColumn": 9, - "endLine": 1633, + "endLine": 734, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -48279,585 +46608,182 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "observeRuleAllowEventRuleTheEventbridgeEtlStackobserveRuleDD299C278D51D81A", + "logicalId": "EndpointproxyANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYproxy14296A4D", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 1634, + "startLine": 735, "startColumn": 9, - "endLine": 1634, + "endLine": 735, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt observeRule9CF2E16C.Arn" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/test-invoke-stage/*/*)" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TransformedDataB0572681' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TransformedDataB0572681", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LandingBucket23FE90FB' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "LandingBucket23FE90FB", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 29, - "startColumn": 5, - "endLine": 29, - "endColumn": 27, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'newObjectInLandingBucketEventQueue67CBE2F2' of type 'AWS::SQS::Queue' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "newObjectInLandingBucketEventQueue67CBE2F2", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 75, - "startColumn": 7, - "endLine": 75, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 129, - "startColumn": 7, - "endLine": 129, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 187, - "startColumn": 7, - "endLine": 187, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Ec2ClusterEE43E89D' of type 'AWS::ECS::Cluster' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Ec2ClusterEE43E89D", - "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 662, - "startColumn": 5, - "endLine": 662, - "endColumn": 24, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FargateTaskDefinitionTaskRoleE3C2BCAA' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FargateTaskDefinitionTaskRoleE3C2BCAA", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 670, - "startColumn": 7, - "endLine": 670, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FargateTaskDefinition8E3B365E' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FargateTaskDefinition8E3B365E", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 744, - "startColumn": 7, - "endLine": 744, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FargateTaskDefinitionAppContainerLogGroup20407D7C' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FargateTaskDefinitionAppContainerLogGroup20407D7C", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 820, - "startColumn": 7, - "endLine": 820, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FargateTaskDefinitionExecutionRoleE69A8E33' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FargateTaskDefinitionExecutionRoleE69A8E33", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 831, - "startColumn": 7, - "endLine": 831, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'extractLambdaHandlerServiceRole8A50F829' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "extractLambdaHandlerServiceRole8A50F829", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 916, - "startColumn": 7, - "endLine": 916, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'extractLambdaHandlerD06B8F09' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "extractLambdaHandlerD06B8F09", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1015, - "startColumn": 7, - "endLine": 1015, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'extractLambdaHandlerSqsEventSourceTheEventbridgeEtlStacknewObjectInLandingBucketEventQueueA6103BFC894EEFC5' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "extractLambdaHandlerSqsEventSourceTheEventbridgeEtlStacknewObjectInLandingBucketEventQueueA6103BFC894EEFC5", - "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1103, - "startColumn": 7, - "endLine": 1103, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TransformLambdaHandlerServiceRole710C039E' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TransformLambdaHandlerServiceRole710C039E", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1120, - "startColumn": 7, - "endLine": 1120, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TransformLambdaHandler60ABE8EE' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TransformLambdaHandler60ABE8EE", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1178, - "startColumn": 7, - "endLine": 1178, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'transformRuleFEA34632' of type 'AWS::Events::Rule' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "transformRuleFEA34632", - "entityType": "Resource", - "resourceType": "AWS::Events::Rule" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1240, - "startColumn": 7, - "endLine": 1240, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LoadLambdaHandlerServiceRole83E61748' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "LoadLambdaHandlerServiceRole83E61748", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1296, - "startColumn": 7, - "endLine": 1296, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LoadLambdaHandlerFDA03D53' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "LoadLambdaHandlerFDA03D53", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1380, - "startColumn": 7, - "endLine": 1380, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'loadRuleF0FAF418' of type 'AWS::Events::Rule' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "loadRuleF0FAF418", - "entityType": "Resource", - "resourceType": "AWS::Events::Rule" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1449, - "startColumn": 7, - "endLine": 1449, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ObserveLambdaHandlerServiceRole040C69BA' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ObserveLambdaHandlerServiceRole040C69BA", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1505, - "startColumn": 7, - "endLine": 1505, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ObserveLambdaHandler685FFDBB' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ObserveLambdaHandler685FFDBB", + "logicalId": "EndpointproxyANYC09721C5", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 1539, - "startColumn": 7, - "endLine": 1539, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 767, + "startColumn": 9, + "endLine": 767, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'observeRule9CF2E16C' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "observeRule9CF2E16C", + "logicalId": "EndpointproxyANYC09721C5", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 1599, - "startColumn": 7, - "endLine": 1599, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/pat-the-lambda-circuit-breaker--TheLambdaCircuitBreakerStack.template.json": { - "filePath": "cdk/pat-the-lambda-circuit-breaker--TheLambdaCircuitBreakerStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 10, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 2, - "informational": 15, - "debug": 0 + "startLine": 768, + "startColumn": 9, + "endLine": 768, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Endpointproxy39E2174E'" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "UnreliableLambdaHandlerD4A4DED9", + "logicalId": "EndpointproxyANYC09721C5", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 163, + "propertyPath": "Properties.RestApiId", + "category": "Best Practice", + "startLine": 771, "startColumn": 9, - "endLine": 163, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "endLine": 771, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'EndpointEEF1FD8F'" } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AssetParameters10055657af1eff76a705caf565ca43f7d08fe1e63f74c33f37aedad342e3f011ArtifactHash90D8A3A6' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AssetParameters10055657af1eff76a705caf565ca43f7d08fe1e63f74c33f37aedad342e3f011ArtifactHash90D8A3A6", - "entityType": "Parameter" + "logicalId": "EndpointANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANY2B0F1701", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Parameters/AssetParameters10055657af1eff76a705caf565ca43f7d08fe1e63f74c33f37aedad342e3f011ArtifactHash90D8A3A6", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 300, - "startColumn": 5, - "endLine": 300, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 810, + "startColumn": 9, + "endLine": 810, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'UnreliableLambdaHandlerServiceRole955A5CFD' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "UnreliableLambdaHandlerD4A4DED9", + "logicalId": "EndpointANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANY2B0F1701", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 165, - "startColumn": 7, - "endLine": 165, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 811, + "startColumn": 9, + "endLine": 811, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt atmProducerLambda71029F8F.Arn" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerTable02DAD2B8", + "logicalId": "EndpointANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANY2B0F1701", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 6, + "startLine": 817, "startColumn": 9, - "endLine": 6, + "endLine": 817, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ProtocolType' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGateway122B123C", + "logicalId": "EndpointANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANY2B0F1701", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Api" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ProtocolType", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 179, + "startLine": 818, "startColumn": 9, - "endLine": 179, - "endColumn": 22, + "endLine": 818, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/{ref:EndpointDeploymentStageprodB78BEEA0}/*/)" } }, { @@ -48866,15 +46792,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayDefaultRouteTheLambdaCircuitBreakerStackCircuitBreakerGatewayDefaultRoute883D7748Permission8BF71621", + "logicalId": "EndpointANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYFFED7414", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 188, + "startLine": 854, "startColumn": 9, - "endLine": 188, + "endLine": 854, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -48888,21 +46814,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayDefaultRouteTheLambdaCircuitBreakerStackCircuitBreakerGatewayDefaultRoute883D7748Permission8BF71621", + "logicalId": "EndpointANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYFFED7414", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 189, + "startLine": 855, "startColumn": 9, - "endLine": 189, + "endLine": 855, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt UnreliableLambdaHandlerD4A4DED9.Arn" + "resolutionSource": "GetAtt atmProducerLambda71029F8F.Arn" } }, { @@ -48911,15 +46837,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayDefaultRouteTheLambdaCircuitBreakerStackCircuitBreakerGatewayDefaultRoute883D7748Permission8BF71621", + "logicalId": "EndpointANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYFFED7414", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 195, + "startLine": 861, "startColumn": 9, - "endLine": 195, + "endLine": 861, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -48933,134 +46859,130 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayDefaultRouteTheLambdaCircuitBreakerStackCircuitBreakerGatewayDefaultRoute883D7748Permission8BF71621", + "logicalId": "EndpointANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYFFED7414", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 196, + "startLine": 862, "startColumn": 9, - "endLine": 196, + "endLine": 862, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:CircuitBreakerGateway122B123C}/*/*)" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/test-invoke-stage/*/)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayDefaultRouteDefaultRouteIntegrationF55AEBDB", + "logicalId": "EndpointANY485C938B", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Integration" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 228, + "startLine": 894, "startColumn": 9, - "endLine": 228, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 894, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayDefaultRouteCB8326BD", + "logicalId": "EndpointANY485C938B", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Route" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 247, + "startLine": 895, "startColumn": 9, - "endLine": 247, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", + "endLine": 895, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" + "resolutionSource": "GetAtt EndpointEEF1FD8F.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayDefaultStageC51956FB", + "logicalId": "EndpointANY485C938B", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Stage" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 270, + "startLine": 901, "startColumn": 9, - "endLine": 270, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", + "endLine": 901, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" + "resolutionSource": "Ref to 'EndpointEEF1FD8F'" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Resource 'atmProducerLambdaServiceRoleEF3D6079' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayDefaultStageC51956FB", + "logicalId": "atmProducerLambdaServiceRoleEF3D6079", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Stage" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 273, - "startColumn": 9, - "endLine": 273, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CircuitBreakerTable02DAD2B8' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'atmProducerLambda71029F8F' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerTable02DAD2B8", + "logicalId": "atmProducerLambda71029F8F", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 63, "startColumn": 7, - "endLine": 5, + "endLine": 63, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -49068,19 +46990,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'UnreliableLambdaHandlerServiceRole955A5CFD' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'atmConsumer1LambdaServiceRole70132707' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UnreliableLambdaHandlerServiceRole955A5CFD", + "logicalId": "atmConsumer1LambdaServiceRole70132707", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 31, + "startLine": 123, "startColumn": 7, - "endLine": 31, + "endLine": 123, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -49088,19 +47010,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'UnreliableLambdaHandlerD4A4DED9' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'atmConsumer1LambdaC3C4DA46' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UnreliableLambdaHandlerD4A4DED9", + "logicalId": "atmConsumer1LambdaC3C4DA46", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 110, + "startLine": 157, "startColumn": 7, - "endLine": 110, + "endLine": 157, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -49108,19 +47030,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CircuitBreakerGateway122B123C' of type 'AWS::ApiGatewayV2::Api' supports Tags but none are configured", + "message": "Resource 'atmConsumer1LambdaRuleC1D6BC2F' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGateway122B123C", + "logicalId": "atmConsumer1LambdaRuleC1D6BC2F", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Api" + "resourceType": "AWS::Events::Rule" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 177, + "startLine": 216, "startColumn": 7, - "endLine": 177, + "endLine": 216, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -49128,218 +47050,217 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CircuitBreakerGatewayDefaultStageC51956FB' of type 'AWS::ApiGatewayV2::Stage' supports Tags but none are configured", + "message": "Resource 'atmConsumer2LambdaServiceRole130B888D' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CircuitBreakerGatewayDefaultStageC51956FB", + "logicalId": "atmConsumer2LambdaServiceRole130B888D", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Stage" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 269, + "startLine": 272, "startColumn": 7, - "endLine": 269, + "endLine": 272, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "cdk/pat-the-saga-stepfunction--TheSagaStepfunctionSingleTableStack.template.json": { - "filePath": "cdk/pat-the-saga-stepfunction--TheSagaStepfunctionSingleTableStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 44, - "counts": { - "fatal": 0, - "errors": 9, - "warnings": 11, - "informational": 53, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'atmConsumer2LambdaB7E263A7' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "reserveFlightLambdaHandler3C75473D", + "logicalId": "atmConsumer2LambdaB7E263A7", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 171, - "startColumn": 9, - "endLine": 171, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 306, + "startColumn": 7, + "endLine": 306, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'atmConsumer2LambdaRule5894DC8E' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "confirmFlightLambdaHandler96C3663F", + "logicalId": "atmConsumer2LambdaRule5894DC8E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 317, - "startColumn": 9, - "endLine": 317, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 365, + "startColumn": 7, + "endLine": 365, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'atmConsumer3LambdaServiceRoleCF9BAEA7' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "cancelFlightLambdaHandler437EEC76", + "logicalId": "atmConsumer3LambdaServiceRoleCF9BAEA7", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 463, - "startColumn": 9, - "endLine": 463, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 422, + "startColumn": 7, + "endLine": 422, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'atmConsumer3Lambda880BEEDF' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "reserveHotelLambdaHandler020AE24A", + "logicalId": "atmConsumer3Lambda880BEEDF", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 609, - "startColumn": 9, - "endLine": 609, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 456, + "startColumn": 7, + "endLine": 456, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'atmConsumer3LambdaRule41A00643' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "confirmHotelLambdaHandler882ACF2D", + "logicalId": "atmConsumer3LambdaRule41A00643", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 755, - "startColumn": 9, - "endLine": 755, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 515, + "startColumn": 7, + "endLine": 515, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'EndpointEEF1FD8F' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "EndpointEEF1FD8F", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 572, + "startColumn": 7, + "endLine": 572, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'EndpointCloudWatchRoleC3C64E0F' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "cancelHotelLambdaHandler09F13EF6", + "logicalId": "EndpointCloudWatchRoleC3C64E0F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 901, - "startColumn": 9, - "endLine": 901, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 581, + "startColumn": 7, + "endLine": 581, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'EndpointDeploymentStageprodB78BEEA0' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "takePaymentLambdaHandlerB96529D4", + "logicalId": "EndpointDeploymentStageprodB78BEEA0", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 1047, - "startColumn": 9, - "endLine": 1047, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 649, + "startColumn": 7, + "endLine": 649, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/pat-the-eventbridge-circuit-breaker--TheEventbridgeCircuitBreakerStack.template.json": { + "filePath": "cdk/pat-the-eventbridge-circuit-breaker--TheEventbridgeCircuitBreakerStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 22, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 4, + "informational": 42, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "E2533", "severity": "ERROR", "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "refundPaymentLambdaHandler932D11D5", + "logicalId": "WebserviceIntegrationLambdaHandler5E349AB7", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 1193, + "startLine": 213, "startColumn": 9, - "endLine": 1193, + "endLine": 213, "endColumn": 17, "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", @@ -49354,15 +47275,15 @@ "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "sagaLambdaHandlerFC24742F", + "logicalId": "ErrorLambdaHandler4224322A", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 1540, + "startLine": 365, "startColumn": 9, - "endLine": 1540, + "endLine": 365, "endColumn": 17, "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", @@ -49374,117 +47295,55 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'AssetParameters4278db4a1a47077b6c8d42c246c4d59d434f12973a4fcecd1a62b809ce2aed1eArtifactHash48F8E85F' is not referenced anywhere in the template", + "message": "Parameter 'AssetParameters0641c2be6bec286d59c7c75ed1e4ce6e7dc5be0e4a14b52b1088d92b3977f68eArtifactHash7779B76D' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "AssetParameters4278db4a1a47077b6c8d42c246c4d59d434f12973a4fcecd1a62b809ce2aed1eArtifactHash48F8E85F", + "logicalId": "AssetParameters0641c2be6bec286d59c7c75ed1e4ce6e7dc5be0e4a14b52b1088d92b3977f68eArtifactHash7779B76D", "entityType": "Parameter" }, - "propertyPath": "Parameters/AssetParameters4278db4a1a47077b6c8d42c246c4d59d434f12973a4fcecd1a62b809ce2aed1eArtifactHash48F8E85F", + "propertyPath": "Parameters/AssetParameters0641c2be6bec286d59c7c75ed1e4ce6e7dc5be0e4a14b52b1088d92b3977f68eArtifactHash7779B76D", "category": "Best Practice", - "startLine": 1939, + "startLine": 821, "startColumn": 5, - "endLine": 1939, + "endLine": 821, "endColumn": 105, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'reserveFlightLambdaHandlerServiceRole985C586D' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "reserveFlightLambdaHandler3C75473D", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 173, - "startColumn": 7, - "endLine": 173, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'confirmFlightLambdaHandlerServiceRole45F91B6E' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "confirmFlightLambdaHandler96C3663F", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 319, - "startColumn": 7, - "endLine": 319, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'cancelFlightLambdaHandlerServiceRole7F2439CB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "cancelFlightLambdaHandler437EEC76", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 465, - "startColumn": 7, - "endLine": 465, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", + "ruleId": "W2001", "severity": "WARN", - "message": "'reserveHotelLambdaHandlerServiceRole452F23B7' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "Parameter 'AssetParameters73ddeceb533c98a62d83046532b46a5c3457eefa2ea3fc5c6816dfd09424e4a2ArtifactHash5AB686F1' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "reserveHotelLambdaHandler020AE24A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "logicalId": "AssetParameters73ddeceb533c98a62d83046532b46a5c3457eefa2ea3fc5c6816dfd09424e4a2ArtifactHash5AB686F1", + "entityType": "Parameter" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Parameters/AssetParameters73ddeceb533c98a62d83046532b46a5c3457eefa2ea3fc5c6816dfd09424e4a2ArtifactHash5AB686F1", "category": "Best Practice", - "startLine": 611, - "startColumn": 7, - "endLine": 611, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 833, + "startColumn": 5, + "endLine": 833, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W3005", "severity": "WARN", - "message": "'confirmHotelLambdaHandlerServiceRoleD5F8F90E' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'WebserviceIntegrationLambdaHandlerServiceRole851361F8' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "confirmHotelLambdaHandler882ACF2D", + "logicalId": "WebserviceIntegrationLambdaHandler5E349AB7", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 757, + "startLine": 216, "startColumn": 7, - "endLine": 757, + "endLine": 216, "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -49492,123 +47351,133 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'cancelHotelLambdaHandlerServiceRole4815D152' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'ErrorLambdaHandlerServiceRole5D9F8D61' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "cancelHotelLambdaHandler09F13EF6", + "logicalId": "ErrorLambdaHandler4224322A", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 903, + "startLine": 368, "startColumn": 7, - "endLine": 903, + "endLine": 368, "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'takePaymentLambdaHandlerServiceRole56CA2808' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "takePaymentLambdaHandlerB96529D4", + "logicalId": "CircuitBreaker4FAEA3DB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 1049, - "startColumn": 7, - "endLine": 1049, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 6, + "startColumn": 9, + "endLine": 6, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'refundPaymentLambdaHandlerServiceRole62F72F0D' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "refundPaymentLambdaHandler932D11D5", + "logicalId": "webserviceErrorRuleAllowEventRuleTheEventbridgeCircuitBreakerStackwebserviceErrorRule5CA5849AC9CE1102", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 1195, - "startColumn": 7, - "endLine": 1195, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 415, + "startColumn": 9, + "endLine": 415, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'BookingSagaRole82982544' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BookingSagaFA991213", + "logicalId": "webserviceErrorRuleAllowEventRuleTheEventbridgeCircuitBreakerStackwebserviceErrorRule5CA5849AC9CE1102", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 1417, - "startColumn": 7, - "endLine": 1417, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 416, + "startColumn": 9, + "endLine": 416, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt ErrorLambdaHandler4224322A.Arn" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'sagaLambdaHandlerServiceRole7EB685BD' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "sagaLambdaHandlerFC24742F", + "logicalId": "webserviceErrorRuleAllowEventRuleTheEventbridgeCircuitBreakerStackwebserviceErrorRule5CA5849AC9CE1102", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 1542, - "startColumn": 7, - "endLine": 1542, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 422, + "startColumn": 9, + "endLine": 422, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BookingsB1C24132", + "logicalId": "webserviceErrorRuleAllowEventRuleTheEventbridgeCircuitBreakerStackwebserviceErrorRule5CA5849AC9CE1102", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 6, + "startLine": 423, "startColumn": 9, - "endLine": 6, + "endLine": 423, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt webserviceErrorRuleCE293636.Arn" } }, { @@ -49617,22 +47486,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableDeployment96972FE77ef5b9d25f9d7a35316435e48684bb49", + "logicalId": "CircuitBreakerGatewayDeployment9F2A82FA10260421dc831e654354d72baa60bfb0", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Deployment" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 1615, + "startLine": 497, "startColumn": 9, - "endLine": 1615, + "endLine": 497, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SagaPatternSingleTable288D85B3'" + "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" } }, { @@ -49641,22 +47510,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableDeploymentStageprod92F0690D", + "logicalId": "CircuitBreakerGatewayDeploymentStageprod84F6B9E5", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 1632, + "startLine": 514, "startColumn": 9, - "endLine": 1632, + "endLine": 514, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SagaPatternSingleTable288D85B3'" + "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" } }, { @@ -49665,15 +47534,15 @@ "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableDeploymentStageprod92F0690D", + "logicalId": "CircuitBreakerGatewayDeploymentStageprod84F6B9E5", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 1638, + "startLine": 520, "startColumn": 9, - "endLine": 1638, + "endLine": 520, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -49688,22 +47557,22 @@ "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableproxy9F7D6084", + "logicalId": "CircuitBreakerGatewayproxy1147E2CF", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Resource" }, "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 1647, + "startLine": 529, "startColumn": 9, - "endLine": 1647, + "endLine": 529, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt SagaPatternSingleTable288D85B3.RootResourceId" + "resolutionSource": "GetAtt CircuitBreakerGateway122B123C.RootResourceId" } }, { @@ -49712,15 +47581,15 @@ "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableproxy9F7D6084", + "logicalId": "CircuitBreakerGatewayproxy1147E2CF", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Resource" }, "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 1653, + "startLine": 535, "startColumn": 9, - "endLine": 1653, + "endLine": 535, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -49735,22 +47604,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableproxy9F7D6084", + "logicalId": "CircuitBreakerGatewayproxy1147E2CF", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Resource" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 1654, + "startLine": 536, "startColumn": 9, - "endLine": 1654, + "endLine": 536, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SagaPatternSingleTable288D85B3'" + "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" } }, { @@ -49759,15 +47628,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyCC0ED567", + "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxy584EF780", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 1665, + "startLine": 547, "startColumn": 9, - "endLine": 1665, + "endLine": 547, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -49781,21 +47650,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyCC0ED567", + "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxy584EF780", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 1666, + "startLine": 548, "startColumn": 9, - "endLine": 1666, + "endLine": 548, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt sagaLambdaHandlerFC24742F.Arn" + "resolutionSource": "GetAtt WebserviceIntegrationLambdaHandler5E349AB7.Arn" } }, { @@ -49804,15 +47673,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyCC0ED567", + "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxy584EF780", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 1672, + "startLine": 554, "startColumn": 9, - "endLine": 1672, + "endLine": 554, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -49826,21 +47695,21 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyCC0ED567", + "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxy584EF780", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 1673, + "startLine": 555, "startColumn": 9, - "endLine": 1673, + "endLine": 555, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:SagaPatternSingleTable288D85B3}/{ref:SagaPatternSingleTableDeploymentStageprod92F0690D}/*/*)" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:CircuitBreakerGateway122B123C}/{ref:CircuitBreakerGatewayDeploymentStageprod84F6B9E5}/*/*)" } }, { @@ -49849,15 +47718,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyFFAFB063", + "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxyE09D3DF2", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 1709, + "startLine": 591, "startColumn": 9, - "endLine": 1709, + "endLine": 591, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -49871,21 +47740,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyFFAFB063", + "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxyE09D3DF2", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 1710, + "startLine": 592, "startColumn": 9, - "endLine": 1710, + "endLine": 592, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt sagaLambdaHandlerFC24742F.Arn" + "resolutionSource": "GetAtt WebserviceIntegrationLambdaHandler5E349AB7.Arn" } }, { @@ -49894,15 +47763,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyFFAFB063", + "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxyE09D3DF2", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 1716, + "startLine": 598, "startColumn": 9, - "endLine": 1716, + "endLine": 598, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -49916,21 +47785,21 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyFFAFB063", + "logicalId": "CircuitBreakerGatewayproxyANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxyE09D3DF2", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 1717, + "startLine": 599, "startColumn": 9, - "endLine": 1717, + "endLine": 599, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:SagaPatternSingleTable288D85B3}/test-invoke-stage/*/*)" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:CircuitBreakerGateway122B123C}/test-invoke-stage/*/*)" } }, { @@ -49939,15 +47808,15 @@ "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableproxyANY8778A55C", + "logicalId": "CircuitBreakerGatewayproxyANY759880DB", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 1749, + "startLine": 631, "startColumn": 9, - "endLine": 1749, + "endLine": 631, "endColumn": 20, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -49962,22 +47831,22 @@ "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableproxyANY8778A55C", + "logicalId": "CircuitBreakerGatewayproxyANY759880DB", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 1750, + "startLine": 632, "startColumn": 9, - "endLine": 1750, + "endLine": 632, "endColumn": 20, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SagaPatternSingleTableproxy9F7D6084'" + "resolutionSource": "Ref to 'CircuitBreakerGatewayproxy1147E2CF'" } }, { @@ -49986,22 +47855,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableproxyANY8778A55C", + "logicalId": "CircuitBreakerGatewayproxyANY759880DB", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 1753, + "startLine": 635, "startColumn": 9, - "endLine": 1753, + "endLine": 635, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SagaPatternSingleTable288D85B3'" + "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" } }, { @@ -50010,15 +47879,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYF602862D", + "logicalId": "CircuitBreakerGatewayANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY2D2F06E0", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 1792, + "startLine": 674, "startColumn": 9, - "endLine": 1792, + "endLine": 674, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -50032,21 +47901,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYF602862D", + "logicalId": "CircuitBreakerGatewayANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY2D2F06E0", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 1793, + "startLine": 675, "startColumn": 9, - "endLine": 1793, + "endLine": 675, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt sagaLambdaHandlerFC24742F.Arn" + "resolutionSource": "GetAtt WebserviceIntegrationLambdaHandler5E349AB7.Arn" } }, { @@ -50055,15 +47924,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYF602862D", + "logicalId": "CircuitBreakerGatewayANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY2D2F06E0", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 1799, + "startLine": 681, "startColumn": 9, - "endLine": 1799, + "endLine": 681, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -50077,21 +47946,21 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYF602862D", + "logicalId": "CircuitBreakerGatewayANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY2D2F06E0", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 1800, + "startLine": 682, "startColumn": 9, - "endLine": 1800, + "endLine": 682, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:SagaPatternSingleTable288D85B3}/{ref:SagaPatternSingleTableDeploymentStageprod92F0690D}/*/)" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:CircuitBreakerGateway122B123C}/{ref:CircuitBreakerGatewayDeploymentStageprod84F6B9E5}/*/)" } }, { @@ -50100,15 +47969,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANY8FD1CF02", + "logicalId": "CircuitBreakerGatewayANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY33532EB9", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 1836, + "startLine": 718, "startColumn": 9, - "endLine": 1836, + "endLine": 718, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -50122,21 +47991,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANY8FD1CF02", + "logicalId": "CircuitBreakerGatewayANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY33532EB9", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 1837, + "startLine": 719, "startColumn": 9, - "endLine": 1837, + "endLine": 719, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt sagaLambdaHandlerFC24742F.Arn" + "resolutionSource": "GetAtt WebserviceIntegrationLambdaHandler5E349AB7.Arn" } }, { @@ -50145,15 +48014,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANY8FD1CF02", + "logicalId": "CircuitBreakerGatewayANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY33532EB9", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 1843, + "startLine": 725, "startColumn": 9, - "endLine": 1843, + "endLine": 725, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -50167,21 +48036,21 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANY8FD1CF02", + "logicalId": "CircuitBreakerGatewayANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY33532EB9", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 1844, + "startLine": 726, "startColumn": 9, - "endLine": 1844, + "endLine": 726, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:SagaPatternSingleTable288D85B3}/test-invoke-stage/*/)" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:CircuitBreakerGateway122B123C}/test-invoke-stage/*/)" } }, { @@ -50190,15 +48059,15 @@ "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableANYFE1A7CB0", + "logicalId": "CircuitBreakerGatewayANYE076316B", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 1876, + "startLine": 758, "startColumn": 9, - "endLine": 1876, + "endLine": 758, "endColumn": 20, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -50213,22 +48082,22 @@ "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableANYFE1A7CB0", + "logicalId": "CircuitBreakerGatewayANYE076316B", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 1877, + "startLine": 759, "startColumn": 9, - "endLine": 1877, + "endLine": 759, "endColumn": 20, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt SagaPatternSingleTable288D85B3.RootResourceId" + "resolutionSource": "GetAtt CircuitBreakerGateway122B123C.RootResourceId" } }, { @@ -50237,31 +48106,31 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SagaPatternSingleTableANYFE1A7CB0", + "logicalId": "CircuitBreakerGatewayANYE076316B", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 1883, + "startLine": 765, "startColumn": 9, - "endLine": 1883, + "endLine": 765, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SagaPatternSingleTable288D85B3'" + "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BookingsB1C24132' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'CircuitBreaker4FAEA3DB' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BookingsB1C24132", + "logicalId": "CircuitBreaker4FAEA3DB", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, @@ -50278,19 +48147,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'reserveFlightLambdaHandlerServiceRole985C586D' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'WebserviceIntegrationLambdaHandlerServiceRole851361F8' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "reserveFlightLambdaHandlerServiceRole985C586D", + "logicalId": "WebserviceIntegrationLambdaHandlerServiceRole851361F8", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 39, + "startLine": 69, "startColumn": 7, - "endLine": 39, + "endLine": 69, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -50298,19 +48167,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'reserveFlightLambdaHandler3C75473D' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'WebserviceIntegrationLambdaHandler5E349AB7' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "reserveFlightLambdaHandler3C75473D", + "logicalId": "WebserviceIntegrationLambdaHandler5E349AB7", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 118, + "startLine": 160, "startColumn": 7, - "endLine": 118, + "endLine": 160, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -50318,19 +48187,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'confirmFlightLambdaHandlerServiceRole45F91B6E' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'ErrorLambdaHandlerServiceRole5D9F8D61' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "confirmFlightLambdaHandlerServiceRole45F91B6E", + "logicalId": "ErrorLambdaHandlerServiceRole5D9F8D61", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 185, + "startLine": 228, "startColumn": 7, - "endLine": 185, + "endLine": 228, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -50338,19 +48207,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'confirmFlightLambdaHandler96C3663F' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'ErrorLambdaHandler4224322A' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "confirmFlightLambdaHandler96C3663F", + "logicalId": "ErrorLambdaHandler4224322A", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 264, + "startLine": 312, "startColumn": 7, - "endLine": 264, + "endLine": 312, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -50358,19 +48227,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'cancelFlightLambdaHandlerServiceRole7F2439CB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'webserviceErrorRuleCE293636' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "cancelFlightLambdaHandlerServiceRole7F2439CB", + "logicalId": "webserviceErrorRuleCE293636", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Events::Rule" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 331, + "startLine": 380, "startColumn": 7, - "endLine": 331, + "endLine": 380, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -50378,19 +48247,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'cancelFlightLambdaHandler437EEC76' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'CircuitBreakerGateway122B123C' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "cancelFlightLambdaHandler437EEC76", + "logicalId": "CircuitBreakerGateway122B123C", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::RestApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 410, + "startLine": 436, "startColumn": 7, - "endLine": 410, + "endLine": 436, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -50398,39 +48267,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'reserveHotelLambdaHandlerServiceRole452F23B7' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'CircuitBreakerGatewayCloudWatchRole934DF897' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "reserveHotelLambdaHandlerServiceRole452F23B7", + "logicalId": "CircuitBreakerGatewayCloudWatchRole934DF897", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 477, - "startColumn": 7, - "endLine": 477, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'reserveHotelLambdaHandler020AE24A' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "reserveHotelLambdaHandler020AE24A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 556, + "startLine": 445, "startColumn": 7, - "endLine": 556, + "endLine": 445, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -50438,420 +48287,325 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'confirmHotelLambdaHandlerServiceRoleD5F8F90E' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'CircuitBreakerGatewayDeploymentStageprod84F6B9E5' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "confirmHotelLambdaHandlerServiceRoleD5F8F90E", + "logicalId": "CircuitBreakerGatewayDeploymentStageprod84F6B9E5", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 623, + "startLine": 513, "startColumn": 7, - "endLine": 623, + "endLine": 513, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "cdk/pat-the-eventbridge-etl--TheEventbridgeEtlStack.template.json": { + "filePath": "cdk/pat-the-eventbridge-etl--TheEventbridgeEtlStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 57, + "counts": { + "fatal": 0, + "errors": 5, + "warnings": 10, + "informational": 86, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'confirmHotelLambdaHandler882ACF2D' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs10.x' was deprecated on '2021-07-30'. Creation was disabled on '2021-07-30', and updates were disabled on '2022-02-14'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "confirmHotelLambdaHandler882ACF2D", + "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 702, - "startColumn": 7, - "endLine": 702, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'cancelHotelLambdaHandlerServiceRole4815D152' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "cancelHotelLambdaHandlerServiceRole4815D152", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 769, - "startColumn": 7, - "endLine": 769, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 199, + "startColumn": 9, + "endLine": 199, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs10.x", + "lifecycle": "end-of-life" + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'cancelHotelLambdaHandler09F13EF6' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "cancelHotelLambdaHandler09F13EF6", + "logicalId": "extractLambdaHandlerD06B8F09", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 848, - "startColumn": 7, - "endLine": 848, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'takePaymentLambdaHandlerServiceRole56CA2808' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "takePaymentLambdaHandlerServiceRole56CA2808", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 915, - "startColumn": 7, - "endLine": 915, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1089, + "startColumn": 9, + "endLine": 1089, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'takePaymentLambdaHandlerB96529D4' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "takePaymentLambdaHandlerB96529D4", + "logicalId": "TransformLambdaHandler60ABE8EE", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 994, - "startColumn": 7, - "endLine": 994, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'refundPaymentLambdaHandlerServiceRole62F72F0D' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "refundPaymentLambdaHandlerServiceRole62F72F0D", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1061, - "startColumn": 7, - "endLine": 1061, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1225, + "startColumn": 9, + "endLine": 1225, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'refundPaymentLambdaHandler932D11D5' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "refundPaymentLambdaHandler932D11D5", + "logicalId": "LoadLambdaHandlerFDA03D53", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1140, - "startColumn": 7, - "endLine": 1140, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BookingSagaRole82982544' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BookingSagaRole82982544", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1207, - "startColumn": 7, - "endLine": 1207, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BookingSagaFA991213' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BookingSagaFA991213", - "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1337, - "startColumn": 7, - "endLine": 1337, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1434, + "startColumn": 9, + "endLine": 1434, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'sagaLambdaHandlerServiceRole7EB685BD' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "sagaLambdaHandlerServiceRole7EB685BD", + "logicalId": "ObserveLambdaHandler685FFDBB", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1427, - "startColumn": 7, - "endLine": 1427, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1585, + "startColumn": 9, + "endLine": 1585, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'sagaLambdaHandlerFC24742F' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParameters63e74618e2833e3346e7223ed172c961dfc5f22e47a02bfd8e38e313b20b30dfArtifactHash20D89EF6' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "sagaLambdaHandlerFC24742F", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "logicalId": "AssetParameters63e74618e2833e3346e7223ed172c961dfc5f22e47a02bfd8e38e313b20b30dfArtifactHash20D89EF6", + "entityType": "Parameter" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Parameters/AssetParameters63e74618e2833e3346e7223ed172c961dfc5f22e47a02bfd8e38e313b20b30dfArtifactHash20D89EF6", "category": "Best Practice", - "startLine": 1487, - "startColumn": 7, - "endLine": 1487, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", + "startLine": 1665, + "startColumn": 5, + "endLine": 1665, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SagaPatternSingleTable288D85B3' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParametersa20da5839df7117061434d7118e435f02499368b8c588c15b84f94ecfb7732f2ArtifactHash202B02F0' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "SagaPatternSingleTable288D85B3", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "logicalId": "AssetParametersa20da5839df7117061434d7118e435f02499368b8c588c15b84f94ecfb7732f2ArtifactHash202B02F0", + "entityType": "Parameter" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Parameters/AssetParametersa20da5839df7117061434d7118e435f02499368b8c588c15b84f94ecfb7732f2ArtifactHash202B02F0", "category": "Best Practice", - "startLine": 1554, - "startColumn": 7, - "endLine": 1554, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", + "startLine": 1677, + "startColumn": 5, + "endLine": 1677, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SagaPatternSingleTableCloudWatchRole130684F0' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParameters7239a648a454455008a419ce89d65c3755bf0e160fd4f91f8d3b4d16c5598d41ArtifactHash40B763DF' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "SagaPatternSingleTableCloudWatchRole130684F0", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "logicalId": "AssetParameters7239a648a454455008a419ce89d65c3755bf0e160fd4f91f8d3b4d16c5598d41ArtifactHash40B763DF", + "entityType": "Parameter" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Parameters/AssetParameters7239a648a454455008a419ce89d65c3755bf0e160fd4f91f8d3b4d16c5598d41ArtifactHash40B763DF", "category": "Best Practice", - "startLine": 1563, - "startColumn": 7, - "endLine": 1563, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", + "startLine": 1689, + "startColumn": 5, + "endLine": 1689, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SagaPatternSingleTableDeploymentStageprod92F0690D' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParameters21981f2afd308d5c462488a4129b87ce9d6ca2227128358b2d6e11e7d9f1c4b6ArtifactHashD80D6D6D' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "SagaPatternSingleTableDeploymentStageprod92F0690D", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "logicalId": "AssetParameters21981f2afd308d5c462488a4129b87ce9d6ca2227128358b2d6e11e7d9f1c4b6ArtifactHashD80D6D6D", + "entityType": "Parameter" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1631, - "startColumn": 7, - "endLine": 1631, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Parameters/AssetParameters21981f2afd308d5c462488a4129b87ce9d6ca2227128358b2d6e11e7d9f1c4b6ArtifactHashD80D6D6D", + "category": "Best Practice", + "startLine": 1701, + "startColumn": 5, + "endLine": 1701, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" - } - ] - }, - "cdk/pat-the-scalable-webhook--TheScalableWebhookStack.template.json": { - "filePath": "cdk/pat-the-scalable-webhook--TheScalableWebhookStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 22, - "counts": { - "fatal": 0, - "errors": 2, - "warnings": 4, - "informational": 43, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "ruleId": "W3005", + "severity": "WARN", + "message": "'newObjectInLandingBucketEventQueue67CBE2F2' dependency already enforced by a 'GetAtt' at 'Properties.NotificationConfiguration.QueueConfigurations.0.QueueArn'", "source": "CFN_LINT", "entity": { - "logicalId": "SQSPublishLambdaHandler51EE31BE", + "logicalId": "LandingBucketNotificationsEF1634C6", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "Custom::S3BucketNotifications" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 160, - "startColumn": 9, - "endLine": 160, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 65, + "startColumn": 7, + "endLine": 65, "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" - } + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "ruleId": "W3005", + "severity": "WARN", + "message": "'BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "SQSSubscribeLambdaHandlerBBB58615", + "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 326, - "startColumn": 9, - "endLine": 326, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 202, + "startColumn": 7, + "endLine": 202, "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" - } + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "W2001", + "ruleId": "W3005", "severity": "WARN", - "message": "Parameter 'AssetParameterscd03efd5e3dbce0aea763ea8c5588ad4d6461d50c589e8809f87413cbe5203e9ArtifactHash5CFE4D33' is not referenced anywhere in the template", + "message": "'extractLambdaHandlerServiceRole8A50F829' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "AssetParameterscd03efd5e3dbce0aea763ea8c5588ad4d6461d50c589e8809f87413cbe5203e9ArtifactHash5CFE4D33", - "entityType": "Parameter" + "logicalId": "extractLambdaHandlerD06B8F09", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/AssetParameterscd03efd5e3dbce0aea763ea8c5588ad4d6461d50c589e8809f87413cbe5203e9ArtifactHash5CFE4D33", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 742, - "startColumn": 5, - "endLine": 742, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", + "startLine": 1091, + "startColumn": 7, + "endLine": 1091, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "W2001", + "ruleId": "W3005", "severity": "WARN", - "message": "Parameter 'AssetParametersf0094c070470b05f97252ebe03e67953eb53b4659ffb3c5e01faea04951f5958ArtifactHashB6117B67' is not referenced anywhere in the template", + "message": "'TransformLambdaHandlerServiceRole710C039E' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "AssetParametersf0094c070470b05f97252ebe03e67953eb53b4659ffb3c5e01faea04951f5958ArtifactHashB6117B67", - "entityType": "Parameter" + "logicalId": "TransformLambdaHandler60ABE8EE", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/AssetParametersf0094c070470b05f97252ebe03e67953eb53b4659ffb3c5e01faea04951f5958ArtifactHashB6117B67", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 754, - "startColumn": 5, - "endLine": 754, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", + "startLine": 1228, + "startColumn": 7, + "endLine": 1228, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { "ruleId": "W3005", "severity": "WARN", - "message": "'SQSPublishLambdaHandlerServiceRole4F9A1044' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'LoadLambdaHandlerServiceRole83E61748' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "SQSPublishLambdaHandler51EE31BE", + "logicalId": "LoadLambdaHandlerFDA03D53", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 162, + "startLine": 1437, "startColumn": 7, - "endLine": 162, + "endLine": 1437, "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -50859,19 +48613,19 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'SQSSubscribeLambdaHandlerServiceRoleB6261F09' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'ObserveLambdaHandlerServiceRole040C69BA' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "SQSSubscribeLambdaHandlerBBB58615", + "logicalId": "ObserveLambdaHandler685FFDBB", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 328, + "startLine": 1588, "startColumn": 7, - "endLine": 328, + "endLine": 1588, "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -50882,15 +48636,15 @@ "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": "RDSPublishQueue2BEA1A7F", + "logicalId": "newObjectInLandingBucketEventQueue67CBE2F2", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, "category": "Best Practice", - "startLine": 29, + "startLine": 73, "startColumn": 5, - "endLine": 29, - "endColumn": 29, + "endLine": 73, + "endColumn": 48, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -50900,15 +48654,15 @@ "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": "RDSPublishQueue2BEA1A7F", + "logicalId": "newObjectInLandingBucketEventQueue67CBE2F2", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, "category": "Best Practice", - "startLine": 29, + "startLine": 73, "startColumn": 5, - "endLine": 29, - "endColumn": 29, + "endLine": 73, + "endColumn": 48, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -50918,15 +48672,15 @@ "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": "RDSPublishQueue2BEA1A7F", + "logicalId": "newObjectInLandingBucketEventQueue67CBE2F2", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, "propertyPath": "Properties", "category": "Best Practice", - "startLine": 31, + "startLine": 75, "startColumn": 7, - "endLine": 31, + "endLine": 75, "endColumn": 18, "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" @@ -50937,7 +48691,7 @@ "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Messages804FA4EB", + "logicalId": "TransformedDataB0572681", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, @@ -50956,91 +48710,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SQSSubscribeLambdaHandlerSqsEventSourceTheScalableWebhookStackRDSPublishQueue119E6E347AD14066", - "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" - }, - "propertyPath": "Properties.EventSourceArn", - "category": "Best Practice", - "startLine": 344, - "startColumn": 9, - "endLine": 344, - "endColumn": 24, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt RDSPublishQueue2BEA1A7F.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "EndpointDeployment318525DAd36b722f04bf6c9ce03a896415e5529d", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 418, - "startColumn": 9, - "endLine": 418, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'EndpointEEF1FD8F'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "EndpointDeploymentStageprodB78BEEA0", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 435, - "startColumn": 9, - "endLine": 435, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'EndpointEEF1FD8F'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointDeploymentStageprodB78BEEA0", + "logicalId": "Vpc8378EB38", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 441, + "startLine": 213, "startColumn": 9, - "endLine": 441, + "endLine": 213, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -51050,90 +48732,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Endpointproxy39E2174E", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" - }, - "propertyPath": "Properties.ParentId", - "category": "Best Practice", - "startLine": 450, - "startColumn": 9, - "endLine": 450, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt EndpointEEF1FD8F.RootResourceId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Endpointproxy39E2174E", + "logicalId": "Vpc8378EB38", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 456, + "startLine": 216, "startColumn": 9, - "endLine": 456, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 216, + "endColumn": 25, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Endpointproxy39E2174E", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 457, + "startLine": 231, "startColumn": 9, - "endLine": 457, + "endLine": 231, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'EndpointEEF1FD8F'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "EndpointproxyANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYproxy6224F0D7", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 468, - "startColumn": 9, - "endLine": 468, - "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -51143,42 +48776,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYproxy6224F0D7", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 469, + "startLine": 232, "startColumn": 9, - "endLine": 469, - "endColumn": 22, + "endLine": 232, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt SQSPublishLambdaHandler51EE31BE.Arn" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYproxy6224F0D7", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 475, + "startLine": 235, "startColumn": 9, - "endLine": 475, - "endColumn": 19, + "endLine": 235, + "endColumn": 26, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -51188,293 +48821,190 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYproxy6224F0D7", + "logicalId": "VpcPublicSubnet1RouteTable6C95E38E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 476, + "startLine": 266, "startColumn": 9, - "endLine": 476, - "endColumn": 19, + "endLine": 266, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/{ref:EndpointDeploymentStageprodB78BEEA0}/*/*)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "EndpointproxyANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANYproxy171AE875", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 512, - "startColumn": 9, - "endLine": 512, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANYproxy171AE875", + "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 513, + "startLine": 283, "startColumn": 9, - "endLine": 513, + "endLine": 283, "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt SQSPublishLambdaHandler51EE31BE.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "EndpointproxyANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANYproxy171AE875", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 519, - "startColumn": 9, - "endLine": 519, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "EndpointproxyANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANYproxy171AE875", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 520, - "startColumn": 9, - "endLine": 520, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/test-invoke-stage/*/*)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "EndpointproxyANYC09721C5", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.HttpMethod", - "category": "Best Practice", - "startLine": 552, - "startColumn": 9, - "endLine": 552, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "EndpointproxyANYC09721C5", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.ResourceId", - "category": "Best Practice", - "startLine": 553, - "startColumn": 9, - "endLine": 553, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Endpointproxy39E2174E'" + "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointproxyANYC09721C5", + "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 556, + "startLine": 286, "startColumn": 9, - "endLine": 556, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 286, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'EndpointEEF1FD8F'" + "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYA4DEC70E", + "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 595, + "startLine": 297, "startColumn": 9, - "endLine": 595, - "endColumn": 16, + "endLine": 297, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYA4DEC70E", + "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 596, + "startLine": 300, "startColumn": 9, - "endLine": 596, - "endColumn": 22, + "endLine": 300, + "endColumn": 30, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt SQSPublishLambdaHandler51EE31BE.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYA4DEC70E", + "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 602, + "startLine": 330, "startColumn": 9, - "endLine": 602, - "endColumn": 19, + "endLine": 330, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt VpcPublicSubnet1EIPD7E02669.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYA4DEC70E", + "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 603, + "startLine": 336, "startColumn": 9, - "endLine": 603, - "endColumn": 19, + "endLine": 336, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/{ref:EndpointDeploymentStageprodB78BEEA0}/*/)" + "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANY6F14FF34", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 639, + "startLine": 353, "startColumn": 9, - "endLine": 639, - "endColumn": 16, + "endLine": 353, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -51484,42 +49014,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANY6F14FF34", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 640, + "startLine": 354, "startColumn": 9, - "endLine": 640, - "endColumn": 22, + "endLine": 354, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt SQSPublishLambdaHandler51EE31BE.Arn" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANY6F14FF34", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 646, + "startLine": 357, "startColumn": 9, - "endLine": 646, - "endColumn": 19, + "endLine": 357, + "endColumn": 26, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -51529,415 +49059,427 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANY6F14FF34", + "logicalId": "VpcPublicSubnet2RouteTable94F7E489", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 647, + "startLine": 388, "startColumn": 9, - "endLine": 647, - "endColumn": 19, + "endLine": 388, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/test-invoke-stage/*/)" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANY485C938B", + "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 679, + "startLine": 405, "startColumn": 9, - "endLine": 679, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 405, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANY485C938B", + "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 680, + "startLine": 408, "startColumn": 9, - "endLine": 680, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 408, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt EndpointEEF1FD8F.RootResourceId" + "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointANY485C938B", + "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 686, + "startLine": 419, "startColumn": 9, - "endLine": 686, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 419, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'EndpointEEF1FD8F'" + "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Messages804FA4EB' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Messages804FA4EB", + "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 422, + "startColumn": 9, + "endLine": 422, + "endColumn": 30, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'RDSPublishQueue2BEA1A7F' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RDSPublishQueue2BEA1A7F", + "logicalId": "VpcPublicSubnet2NATGateway9182C01D", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 31, - "startColumn": 7, - "endLine": 31, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 452, + "startColumn": 9, + "endLine": 452, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt VpcPublicSubnet2EIP3C605A87.AllocationId" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SQSPublishLambdaHandlerServiceRole4F9A1044' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SQSPublishLambdaHandlerServiceRole4F9A1044", + "logicalId": "VpcPublicSubnet2NATGateway9182C01D", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 40, - "startColumn": 7, - "endLine": 40, + "startLine": 458, + "startColumn": 9, + "endLine": 458, "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SQSPublishLambdaHandler51EE31BE' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SQSPublishLambdaHandler51EE31BE", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 107, - "startColumn": 7, - "endLine": 107, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 475, + "startColumn": 9, + "endLine": 475, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SQSSubscribeLambdaHandlerServiceRoleB6261F09' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SQSSubscribeLambdaHandlerServiceRoleB6261F09", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 174, - "startColumn": 7, - "endLine": 174, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 476, + "startColumn": 9, + "endLine": 476, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SQSSubscribeLambdaHandlerBBB58615' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SQSSubscribeLambdaHandlerBBB58615", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 269, - "startColumn": 7, - "endLine": 269, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 479, + "startColumn": 9, + "endLine": 479, + "endColumn": 26, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SQSSubscribeLambdaHandlerSqsEventSourceTheScalableWebhookStackRDSPublishQueue119E6E347AD14066' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SQSSubscribeLambdaHandlerSqsEventSourceTheScalableWebhookStackRDSPublishQueue119E6E347AD14066", + "logicalId": "VpcPrivateSubnet1RouteTableB2C5B500", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 340, - "startColumn": 7, - "endLine": 340, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 510, + "startColumn": 9, + "endLine": 510, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'EndpointEEF1FD8F' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointEEF1FD8F", + "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 357, - "startColumn": 7, - "endLine": 357, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 527, + "startColumn": 9, + "endLine": 527, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'EndpointCloudWatchRoleC3C64E0F' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointCloudWatchRoleC3C64E0F", + "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 366, - "startColumn": 7, - "endLine": 366, + "startLine": 530, + "startColumn": 9, + "endLine": 530, "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet1Subnet536B997A'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'EndpointDeploymentStageprodB78BEEA0' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointDeploymentStageprodB78BEEA0", + "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 434, - "startColumn": 7, - "endLine": 434, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/pat-the-scheduled-lambda--TheScheduledLambdaStack.template.json": { - "filePath": "cdk/pat-the-scheduled-lambda--TheScheduledLambdaStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 2, - "informational": 9, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "scheduledLambda8A84450D", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 157, + "startLine": 541, "startColumn": 9, - "endLine": 157, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "endLine": 541, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'" } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AssetParametersfccd72c2ce1888b6c8217fce01f0e35905d3c065025a088dfaf338bfa934ab6aArtifactHash79DE4220' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AssetParametersfccd72c2ce1888b6c8217fce01f0e35905d3c065025a088dfaf338bfa934ab6aArtifactHash79DE4220", - "entityType": "Parameter" + "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Parameters/AssetParametersfccd72c2ce1888b6c8217fce01f0e35905d3c065025a088dfaf338bfa934ab6aArtifactHash79DE4220", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 232, - "startColumn": 5, - "endLine": 232, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 544, + "startColumn": 9, + "endLine": 544, + "endColumn": 30, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'scheduledLambdaServiceRoleB98DFEFD' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "scheduledLambda8A84450D", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 159, - "startColumn": 7, - "endLine": 159, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 556, + "startColumn": 9, + "endLine": 556, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RequestTableC81DB378", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 6, + "startLine": 557, "startColumn": 9, - "endLine": 6, - "endColumn": 19, + "endLine": 557, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "scheduledLambdascheduleAllowEventRuleTheScheduledLambdaStackscheduledLambdaschedule2517ED8826359872", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 193, + "startLine": 560, "startColumn": 9, - "endLine": 193, - "endColumn": 16, + "endLine": 560, + "endColumn": 26, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -51947,365 +49489,380 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "scheduledLambdascheduleAllowEventRuleTheScheduledLambdaStackscheduledLambdaschedule2517ED8826359872", + "logicalId": "VpcPrivateSubnet2RouteTableA678073B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 194, + "startLine": 591, "startColumn": 9, - "endLine": 194, - "endColumn": 22, + "endLine": 591, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt scheduledLambda8A84450D.Arn" + "resolutionSource": "Ref to 'Vpc8378EB38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "scheduledLambdascheduleAllowEventRuleTheScheduledLambdaStackscheduledLambdaschedule2517ED8826359872", + "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 200, + "startLine": 608, "startColumn": 9, - "endLine": 200, - "endColumn": 19, + "endLine": 608, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "scheduledLambdascheduleAllowEventRuleTheScheduledLambdaStackscheduledLambdaschedule2517ED8826359872", + "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 201, + "startLine": 611, "startColumn": 9, - "endLine": 201, - "endColumn": 19, + "endLine": 611, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt scheduledLambdaschedule99960653.Arn" + "resolutionSource": "Ref to 'VpcPrivateSubnet2Subnet3788AAA1'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'RequestTableC81DB378' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RequestTableC81DB378", + "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 622, + "startColumn": 9, + "endLine": 622, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'scheduledLambdaServiceRoleB98DFEFD' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "scheduledLambdaServiceRoleB98DFEFD", + "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 31, - "startColumn": 7, - "endLine": 31, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 625, + "startColumn": 9, + "endLine": 625, + "endColumn": 30, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'scheduledLambda8A84450D' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "scheduledLambda8A84450D", + "logicalId": "VpcVPCGWBF912B6E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 104, - "startColumn": 7, - "endLine": 104, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 651, + "startColumn": 9, + "endLine": 651, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'scheduledLambdaschedule99960653' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "scheduledLambdaschedule99960653", + "logicalId": "FargateTaskDefinition8E3B365E", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 171, - "startColumn": 7, - "endLine": 171, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/pat-the-simple-graphql-service--TheSimpleGraphqlServiceStack.template.json": { - "filePath": "cdk/pat-the-simple-graphql-service--TheSimpleGraphqlServiceStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 22, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 2, - "informational": 36, - "debug": 0 + "startLine": 745, + "startColumn": 9, + "endLine": 745, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LoyaltyLambdaHandler5918F0DA", + "logicalId": "FargateTaskDefinition8E3B365E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 549, + "propertyPath": "Properties.Cpu", + "category": "Best Practice", + "startLine": 794, "startColumn": 9, - "endLine": 549, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "endLine": 794, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" + "lifecycle": "create-only" } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AssetParametersb25d8c2ed9aaae99613538bc392d450ea9e3929b481ed8fb98a0442b719dcf43ArtifactHashDE7AA66F' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AssetParametersb25d8c2ed9aaae99613538bc392d450ea9e3929b481ed8fb98a0442b719dcf43ArtifactHashDE7AA66F", - "entityType": "Parameter" + "logicalId": "FargateTaskDefinition8E3B365E", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Parameters/AssetParametersb25d8c2ed9aaae99613538bc392d450ea9e3929b481ed8fb98a0442b719dcf43ArtifactHashDE7AA66F", + "propertyPath": "Properties.ExecutionRoleArn", "category": "Best Practice", - "startLine": 580, - "startColumn": 5, - "endLine": 580, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 795, + "startColumn": 9, + "endLine": 795, + "endColumn": 26, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FargateTaskDefinitionExecutionRoleE69A8E33.Arn" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LoyaltyLambdaHandlerServiceRole62E814E8' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LoyaltyLambdaHandler5918F0DA", + "logicalId": "FargateTaskDefinition8E3B365E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 551, - "startColumn": 7, - "endLine": 551, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 801, + "startColumn": 9, + "endLine": 801, + "endColumn": 16, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiSchema510EECD7", + "logicalId": "FargateTaskDefinition8E3B365E", "entityType": "Resource", - "resourceType": "AWS::AppSync::GraphQLSchema" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 59, + "startLine": 802, "startColumn": 9, - "endLine": 59, - "endColumn": 15, + "endLine": 802, + "endColumn": 16, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiF70053CD.ApiId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiDefaultApiKeyF991C37B", + "logicalId": "FargateTaskDefinition8E3B365E", "entityType": "Resource", - "resourceType": "AWS::AppSync::ApiKey" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 74, + "startLine": 803, "startColumn": 9, - "endLine": 74, - "endColumn": 15, + "endLine": 803, + "endColumn": 21, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiF70053CD.ApiId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiCustomerFEDF5079", + "logicalId": "FargateTaskDefinition8E3B365E", "entityType": "Resource", - "resourceType": "AWS::AppSync::DataSource" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 156, + "startLine": 804, "startColumn": 9, - "endLine": 156, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", + "endLine": 804, + "endColumn": 33, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiF70053CD.ApiId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiCustomerFEDF5079", + "logicalId": "FargateTaskDefinition8E3B365E", "entityType": "Resource", - "resourceType": "AWS::AppSync::DataSource" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 162, + "startLine": 807, "startColumn": 9, - "endLine": 162, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", + "endLine": 807, + "endColumn": 21, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt FargateTaskDefinitionTaskRoleE3C2BCAA.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiQuerygetCustomersResolver522EE433", + "logicalId": "extractLambdaHandlerSqsEventSourceTheEventbridgeEtlStacknewObjectInLandingBucketEventQueueA6103BFC894EEFC5", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.EventSourceArn", "category": "Best Practice", - "startLine": 186, + "startLine": 1107, "startColumn": 9, - "endLine": 186, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 1107, + "endColumn": 24, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiF70053CD.ApiId" + "resolutionSource": "GetAtt newObjectInLandingBucketEventQueue67CBE2F2.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiQuerygetCustomersResolver522EE433", + "logicalId": "transformRuleAllowEventRuleTheEventbridgeEtlStacktransformRuleF338DDCD2082D030", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.FieldName", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 192, + "startLine": 1275, "startColumn": 9, - "endLine": 192, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 1275, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -52315,90 +49872,87 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiQuerygetCustomersResolver522EE433", + "logicalId": "transformRuleAllowEventRuleTheEventbridgeEtlStacktransformRuleF338DDCD2082D030", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.TypeName", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 193, + "startLine": 1276, "startColumn": 9, - "endLine": 193, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 1276, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt TransformLambdaHandler60ABE8EE.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiQuerygetCustomerResolver007520DC", + "logicalId": "transformRuleAllowEventRuleTheEventbridgeEtlStacktransformRuleF338DDCD2082D030", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 210, + "startLine": 1282, "startColumn": 9, - "endLine": 210, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 1282, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiF70053CD.ApiId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiQuerygetCustomerResolver007520DC", + "logicalId": "transformRuleAllowEventRuleTheEventbridgeEtlStacktransformRuleF338DDCD2082D030", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.FieldName", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 216, + "startLine": 1283, "startColumn": 9, - "endLine": 216, + "endLine": 1283, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt transformRuleFEA34632.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiQuerygetCustomerResolver007520DC", + "logicalId": "loadRuleAllowEventRuleTheEventbridgeEtlStackloadRuleE4CE7871DBE863BA", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.TypeName", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 217, + "startLine": 1484, "startColumn": 9, - "endLine": 217, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 1484, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -52408,44 +49962,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiMutationaddCustomerResolver53321A05", + "logicalId": "loadRuleAllowEventRuleTheEventbridgeEtlStackloadRuleE4CE7871DBE863BA", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 234, + "startLine": 1485, "startColumn": 9, - "endLine": 234, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 1485, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiF70053CD.ApiId" + "resolutionSource": "GetAtt LoadLambdaHandlerFDA03D53.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiMutationaddCustomerResolver53321A05", + "logicalId": "loadRuleAllowEventRuleTheEventbridgeEtlStackloadRuleE4CE7871DBE863BA", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.FieldName", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 240, + "startLine": 1491, "startColumn": 9, - "endLine": 240, + "endLine": 1491, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -52455,90 +50007,87 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiMutationaddCustomerResolver53321A05", + "logicalId": "loadRuleAllowEventRuleTheEventbridgeEtlStackloadRuleE4CE7871DBE863BA", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.TypeName", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 241, + "startLine": 1492, "startColumn": 9, - "endLine": 241, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 1492, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt loadRuleF0FAF418.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiMutationsaveCustomerResolver85516C23", + "logicalId": "observeRuleAllowEventRuleTheEventbridgeEtlStackobserveRuleDD299C278D51D81A", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 258, + "startLine": 1626, "startColumn": 9, - "endLine": 258, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 1626, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiF70053CD.ApiId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiMutationsaveCustomerResolver85516C23", + "logicalId": "observeRuleAllowEventRuleTheEventbridgeEtlStackobserveRuleDD299C278D51D81A", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.FieldName", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 264, + "startLine": 1627, "startColumn": 9, - "endLine": 264, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 1627, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt ObserveLambdaHandler685FFDBB.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiMutationsaveCustomerResolver85516C23", + "logicalId": "observeRuleAllowEventRuleTheEventbridgeEtlStackobserveRuleDD299C278D51D81A", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.TypeName", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 265, + "startLine": 1633, "startColumn": 9, - "endLine": 265, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 1633, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -52548,321 +50097,322 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiMutationsaveCustomerWithFirstOrderResolver66DBDFD0", + "logicalId": "observeRuleAllowEventRuleTheEventbridgeEtlStackobserveRuleDD299C278D51D81A", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 282, + "startLine": 1634, "startColumn": 9, - "endLine": 282, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "endLine": 1634, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiF70053CD.ApiId" + "resolutionSource": "GetAtt observeRule9CF2E16C.Arn" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", + "message": "Resource 'TransformedDataB0572681' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiMutationsaveCustomerWithFirstOrderResolver66DBDFD0", + "logicalId": "TransformedDataB0572681", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.FieldName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 288, - "startColumn": 9, - "endLine": 288, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", + "message": "Resource 'LandingBucket23FE90FB' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiMutationsaveCustomerWithFirstOrderResolver66DBDFD0", + "logicalId": "LandingBucket23FE90FB", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.TypeName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 289, - "startColumn": 9, - "endLine": 289, + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 27, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'newObjectInLandingBucketEventQueue67CBE2F2' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "newObjectInLandingBucketEventQueue67CBE2F2", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 75, + "startColumn": 7, + "endLine": 75, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiMutationremoveCustomerResolver8435F803", + "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 306, - "startColumn": 9, - "endLine": 306, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiF70053CD.ApiId" - } + "startLine": 129, + "startColumn": 7, + "endLine": 129, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", + "message": "Resource 'BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiMutationremoveCustomerResolver8435F803", + "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.FieldName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 312, - "startColumn": 9, - "endLine": 312, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 187, + "startColumn": 7, + "endLine": 187, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", + "message": "Resource 'Ec2ClusterEE43E89D' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiMutationremoveCustomerResolver8435F803", + "logicalId": "Ec2ClusterEE43E89D", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::ECS::Cluster" }, - "propertyPath": "Properties.TypeName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 313, - "startColumn": 9, - "endLine": 313, + "startLine": 662, + "startColumn": 5, + "endLine": 662, + "endColumn": 24, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FargateTaskDefinitionTaskRoleE3C2BCAA' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FargateTaskDefinitionTaskRoleE3C2BCAA", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 670, + "startColumn": 7, + "endLine": 670, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'FargateTaskDefinition8E3B365E' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiLoyaltyE1BE9BB1", + "logicalId": "FargateTaskDefinition8E3B365E", "entityType": "Resource", - "resourceType": "AWS::AppSync::DataSource" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 379, - "startColumn": 9, - "endLine": 379, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiF70053CD.ApiId" - } + "startLine": 744, + "startColumn": 7, + "endLine": 744, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Resource 'FargateTaskDefinitionAppContainerLogGroup20407D7C' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiLoyaltyE1BE9BB1", + "logicalId": "FargateTaskDefinitionAppContainerLogGroup20407D7C", "entityType": "Resource", - "resourceType": "AWS::AppSync::DataSource" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 385, - "startColumn": 9, - "endLine": 385, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 820, + "startColumn": 7, + "endLine": 820, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'FargateTaskDefinitionExecutionRoleE69A8E33' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiQuerygetLoyaltyLevelResolverC862DCEF", + "logicalId": "FargateTaskDefinitionExecutionRoleE69A8E33", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 409, - "startColumn": 9, - "endLine": 409, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiF70053CD.ApiId" - } + "startLine": 831, + "startColumn": 7, + "endLine": 831, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", + "message": "Resource 'extractLambdaHandlerServiceRole8A50F829' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiQuerygetLoyaltyLevelResolverC862DCEF", + "logicalId": "extractLambdaHandlerServiceRole8A50F829", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.FieldName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 415, - "startColumn": 9, - "endLine": 415, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 916, + "startColumn": 7, + "endLine": 916, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", + "message": "Resource 'extractLambdaHandlerD06B8F09' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiQuerygetLoyaltyLevelResolverC862DCEF", + "logicalId": "extractLambdaHandlerD06B8F09", "entityType": "Resource", - "resourceType": "AWS::AppSync::Resolver" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.TypeName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 416, - "startColumn": 9, - "endLine": 416, + "startLine": 1015, + "startColumn": 7, + "endLine": 1015, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'extractLambdaHandlerSqsEventSourceTheEventbridgeEtlStacknewObjectInLandingBucketEventQueueA6103BFC894EEFC5' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "thesimplegraphqlserviceapikey", + "logicalId": "extractLambdaHandlerSqsEventSourceTheEventbridgeEtlStacknewObjectInLandingBucketEventQueueA6103BFC894EEFC5", "entityType": "Resource", - "resourceType": "AWS::AppSync::ApiKey" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 433, - "startColumn": 9, - "endLine": 433, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiF70053CD.ApiId" - } + "startLine": 1103, + "startColumn": 7, + "endLine": 1103, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'TransformLambdaHandlerServiceRole710C039E' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomerTable260DCC08", + "logicalId": "TransformLambdaHandlerServiceRole710C039E", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 447, - "startColumn": 9, - "endLine": 447, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 1120, + "startColumn": 7, + "endLine": 1120, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ApiApiLogsRole90293F72' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'TransformLambdaHandler60ABE8EE' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiApiLogsRole90293F72", + "logicalId": "TransformLambdaHandler60ABE8EE", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 1178, "startColumn": 7, - "endLine": 5, + "endLine": 1178, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -52870,19 +50420,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ApiF70053CD' of type 'AWS::AppSync::GraphQLApi' supports Tags but none are configured", + "message": "Resource 'transformRuleFEA34632' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiF70053CD", + "logicalId": "transformRuleFEA34632", "entityType": "Resource", - "resourceType": "AWS::AppSync::GraphQLApi" + "resourceType": "AWS::Events::Rule" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 39, + "startLine": 1240, "startColumn": 7, - "endLine": 39, + "endLine": 1240, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -52890,19 +50440,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ApiCustomerServiceRole28709567' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'LoadLambdaHandlerServiceRole83E61748' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiCustomerServiceRole28709567", + "logicalId": "LoadLambdaHandlerServiceRole83E61748", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 90, + "startLine": 1296, "startColumn": 7, - "endLine": 90, + "endLine": 1296, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -52910,19 +50460,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ApiLoyaltyServiceRole2B487CD2' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'LoadLambdaHandlerFDA03D53' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiLoyaltyServiceRole2B487CD2", + "logicalId": "LoadLambdaHandlerFDA03D53", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 329, + "startLine": 1380, "startColumn": 7, - "endLine": 329, + "endLine": 1380, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -52930,19 +50480,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CustomerTable260DCC08' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'loadRuleF0FAF418' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomerTable260DCC08", + "logicalId": "loadRuleF0FAF418", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Events::Rule" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 446, + "startLine": 1449, "startColumn": 7, - "endLine": 446, + "endLine": 1449, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -52950,19 +50500,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LoyaltyLambdaHandlerServiceRole62E814E8' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'ObserveLambdaHandlerServiceRole040C69BA' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LoyaltyLambdaHandlerServiceRole62E814E8", + "logicalId": "ObserveLambdaHandlerServiceRole040C69BA", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 469, + "startLine": 1505, "startColumn": 7, - "endLine": 469, + "endLine": 1505, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -52970,27 +50520,47 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LoyaltyLambdaHandler5918F0DA' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'ObserveLambdaHandler685FFDBB' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LoyaltyLambdaHandler5918F0DA", + "logicalId": "ObserveLambdaHandler685FFDBB", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 503, + "startLine": 1539, "startColumn": 7, - "endLine": 503, + "endLine": 1539, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'observeRule9CF2E16C' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "observeRule9CF2E16C", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1599, + "startColumn": 7, + "endLine": 1599, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/pat-the-simple-webservice--TheSimpleWebserviceStack.template.json": { - "filePath": "cdk/pat-the-simple-webservice--TheSimpleWebserviceStack.template.json", + "cdk/pat-the-lambda-circuit-breaker--TheLambdaCircuitBreakerStack.template.json": { + "filePath": "cdk/pat-the-lambda-circuit-breaker--TheLambdaCircuitBreakerStack.template.json", "status": "OK", "metadata": { "resourcesScanned": 10, @@ -53012,7 +50582,7 @@ "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "DynamoLambdaHandlerFB6EB814", + "logicalId": "UnreliableLambdaHandlerD4A4DED9", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, @@ -53032,13 +50602,13 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'AssetParameters2e2fb63cef5de8866986a28a524c8f97b58a2ec13b66aa5753892cafdd7dbe46ArtifactHash18C20B66' is not referenced anywhere in the template", + "message": "Parameter 'AssetParameters10055657af1eff76a705caf565ca43f7d08fe1e63f74c33f37aedad342e3f011ArtifactHash90D8A3A6' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "AssetParameters2e2fb63cef5de8866986a28a524c8f97b58a2ec13b66aa5753892cafdd7dbe46ArtifactHash18C20B66", + "logicalId": "AssetParameters10055657af1eff76a705caf565ca43f7d08fe1e63f74c33f37aedad342e3f011ArtifactHash90D8A3A6", "entityType": "Parameter" }, - "propertyPath": "Parameters/AssetParameters2e2fb63cef5de8866986a28a524c8f97b58a2ec13b66aa5753892cafdd7dbe46ArtifactHash18C20B66", + "propertyPath": "Parameters/AssetParameters10055657af1eff76a705caf565ca43f7d08fe1e63f74c33f37aedad342e3f011ArtifactHash90D8A3A6", "category": "Best Practice", "startLine": 300, "startColumn": 5, @@ -53050,10 +50620,10 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'DynamoLambdaHandlerServiceRole4C867B01' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'UnreliableLambdaHandlerServiceRole955A5CFD' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "DynamoLambdaHandlerFB6EB814", + "logicalId": "UnreliableLambdaHandlerD4A4DED9", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, @@ -53073,7 +50643,7 @@ "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HitsFF5AF8CD", + "logicalId": "CircuitBreakerTable02DAD2B8", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, @@ -53095,7 +50665,7 @@ "message": "Property 'ProtocolType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointEEF1FD8F", + "logicalId": "CircuitBreakerGateway122B123C", "entityType": "Resource", "resourceType": "AWS::ApiGatewayV2::Api" }, @@ -53117,7 +50687,7 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointDefaultRouteTheSimpleWebserviceStackEndpointDefaultRouteC99962AAPermission4BC0F1E3", + "logicalId": "CircuitBreakerGatewayDefaultRouteTheLambdaCircuitBreakerStackCircuitBreakerGatewayDefaultRoute883D7748Permission8BF71621", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, @@ -53139,7 +50709,7 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointDefaultRouteTheSimpleWebserviceStackEndpointDefaultRouteC99962AAPermission4BC0F1E3", + "logicalId": "CircuitBreakerGatewayDefaultRouteTheLambdaCircuitBreakerStackCircuitBreakerGatewayDefaultRoute883D7748Permission8BF71621", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, @@ -53153,7 +50723,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt DynamoLambdaHandlerFB6EB814.Arn" + "resolutionSource": "GetAtt UnreliableLambdaHandlerD4A4DED9.Arn" } }, { @@ -53162,7 +50732,7 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointDefaultRouteTheSimpleWebserviceStackEndpointDefaultRouteC99962AAPermission4BC0F1E3", + "logicalId": "CircuitBreakerGatewayDefaultRouteTheLambdaCircuitBreakerStackCircuitBreakerGatewayDefaultRoute883D7748Permission8BF71621", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, @@ -53184,7 +50754,7 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointDefaultRouteTheSimpleWebserviceStackEndpointDefaultRouteC99962AAPermission4BC0F1E3", + "logicalId": "CircuitBreakerGatewayDefaultRouteTheLambdaCircuitBreakerStackCircuitBreakerGatewayDefaultRoute883D7748Permission8BF71621", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, @@ -53198,7 +50768,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/*/*)" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:CircuitBreakerGateway122B123C}/*/*)" } }, { @@ -53207,7 +50777,7 @@ "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointDefaultRouteDefaultRouteIntegration4584A785", + "logicalId": "CircuitBreakerGatewayDefaultRouteDefaultRouteIntegrationF55AEBDB", "entityType": "Resource", "resourceType": "AWS::ApiGatewayV2::Integration" }, @@ -53222,7 +50792,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'EndpointEEF1FD8F'" + "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" } }, { @@ -53231,7 +50801,7 @@ "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointDefaultRouteB7B22F2B", + "logicalId": "CircuitBreakerGatewayDefaultRouteCB8326BD", "entityType": "Resource", "resourceType": "AWS::ApiGatewayV2::Route" }, @@ -53246,7 +50816,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'EndpointEEF1FD8F'" + "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" } }, { @@ -53255,7 +50825,7 @@ "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointDefaultStage0AD21F27", + "logicalId": "CircuitBreakerGatewayDefaultStageC51956FB", "entityType": "Resource", "resourceType": "AWS::ApiGatewayV2::Stage" }, @@ -53270,7 +50840,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'EndpointEEF1FD8F'" + "resolutionSource": "Ref to 'CircuitBreakerGateway122B123C'" } }, { @@ -53279,7 +50849,7 @@ "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EndpointDefaultStage0AD21F27", + "logicalId": "CircuitBreakerGatewayDefaultStageC51956FB", "entityType": "Resource", "resourceType": "AWS::ApiGatewayV2::Stage" }, @@ -53299,10 +50869,10 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'HitsFF5AF8CD' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'CircuitBreakerTable02DAD2B8' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "HitsFF5AF8CD", + "logicalId": "CircuitBreakerTable02DAD2B8", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, @@ -53319,10 +50889,10 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DynamoLambdaHandlerServiceRole4C867B01' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'UnreliableLambdaHandlerServiceRole955A5CFD' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambdaHandlerServiceRole4C867B01", + "logicalId": "UnreliableLambdaHandlerServiceRole955A5CFD", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, @@ -53339,10 +50909,10 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DynamoLambdaHandlerFB6EB814' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'UnreliableLambdaHandlerD4A4DED9' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambdaHandlerFB6EB814", + "logicalId": "UnreliableLambdaHandlerD4A4DED9", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, @@ -53359,10 +50929,10 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EndpointEEF1FD8F' of type 'AWS::ApiGatewayV2::Api' supports Tags but none are configured", + "message": "Resource 'CircuitBreakerGateway122B123C' of type 'AWS::ApiGatewayV2::Api' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EndpointEEF1FD8F", + "logicalId": "CircuitBreakerGateway122B123C", "entityType": "Resource", "resourceType": "AWS::ApiGatewayV2::Api" }, @@ -53379,99 +50949,443 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EndpointDefaultStage0AD21F27' of type 'AWS::ApiGatewayV2::Stage' supports Tags but none are configured", + "message": "Resource 'CircuitBreakerGatewayDefaultStageC51956FB' of type 'AWS::ApiGatewayV2::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EndpointDefaultStage0AD21F27", + "logicalId": "CircuitBreakerGatewayDefaultStageC51956FB", "entityType": "Resource", "resourceType": "AWS::ApiGatewayV2::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 269, + "startLine": 269, + "startColumn": 7, + "endLine": 269, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/pat-the-saga-stepfunction--TheSagaStepfunctionSingleTableStack.template.json": { + "filePath": "cdk/pat-the-saga-stepfunction--TheSagaStepfunctionSingleTableStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 44, + "counts": { + "fatal": 0, + "errors": 9, + "warnings": 11, + "informational": 53, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "reserveFlightLambdaHandler3C75473D", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 171, + "startColumn": 9, + "endLine": 171, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } + }, + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "confirmFlightLambdaHandler96C3663F", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 317, + "startColumn": 9, + "endLine": 317, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } + }, + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "cancelFlightLambdaHandler437EEC76", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 463, + "startColumn": 9, + "endLine": 463, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } + }, + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "reserveHotelLambdaHandler020AE24A", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 609, + "startColumn": 9, + "endLine": 609, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } + }, + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "confirmHotelLambdaHandler882ACF2D", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 755, + "startColumn": 9, + "endLine": 755, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } + }, + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "cancelHotelLambdaHandler09F13EF6", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 901, + "startColumn": 9, + "endLine": 901, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } + }, + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "takePaymentLambdaHandlerB96529D4", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1047, + "startColumn": 9, + "endLine": 1047, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } + }, + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "refundPaymentLambdaHandler932D11D5", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1193, + "startColumn": 9, + "endLine": 1193, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } + }, + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "sagaLambdaHandlerFC24742F", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1540, + "startColumn": 9, + "endLine": 1540, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParameters4278db4a1a47077b6c8d42c246c4d59d434f12973a4fcecd1a62b809ce2aed1eArtifactHash48F8E85F' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "AssetParameters4278db4a1a47077b6c8d42c246c4d59d434f12973a4fcecd1a62b809ce2aed1eArtifactHash48F8E85F", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/AssetParameters4278db4a1a47077b6c8d42c246c4d59d434f12973a4fcecd1a62b809ce2aed1eArtifactHash48F8E85F", + "category": "Best Practice", + "startLine": 1939, + "startColumn": 5, + "endLine": 1939, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'reserveFlightLambdaHandlerServiceRole985C586D' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "reserveFlightLambdaHandler3C75473D", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 173, + "startColumn": 7, + "endLine": 173, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'confirmFlightLambdaHandlerServiceRole45F91B6E' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "confirmFlightLambdaHandler96C3663F", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 319, + "startColumn": 7, + "endLine": 319, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'cancelFlightLambdaHandlerServiceRole7F2439CB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "cancelFlightLambdaHandler437EEC76", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 465, + "startColumn": 7, + "endLine": 465, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'reserveHotelLambdaHandlerServiceRole452F23B7' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "reserveHotelLambdaHandler020AE24A", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 611, + "startColumn": 7, + "endLine": 611, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'confirmHotelLambdaHandlerServiceRoleD5F8F90E' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "confirmHotelLambdaHandler882ACF2D", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 757, + "startColumn": 7, + "endLine": 757, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'cancelHotelLambdaHandlerServiceRole4815D152' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "cancelHotelLambdaHandler09F13EF6", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 903, "startColumn": 7, - "endLine": 269, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", + "endLine": 903, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" - } - ] - }, - "cdk/pat-the-state-machine--TheStateMachineStack.template.json": { - "filePath": "cdk/pat-the-state-machine--TheStateMachineStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 11, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 3, - "informational": 13, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "ruleId": "W3005", + "severity": "WARN", + "message": "'takePaymentLambdaHandlerServiceRole56CA2808' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "pineappleCheckLambdaHandlerFDB742D5", + "logicalId": "takePaymentLambdaHandlerB96529D4", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 85, - "startColumn": 9, - "endLine": 85, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1049, + "startColumn": 7, + "endLine": 1049, "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" - } + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "W2001", + "ruleId": "W3005", "severity": "WARN", - "message": "Parameter 'AssetParameters86bbf54b0bd4ccecf85d2ecc5cb12563bcd092af45115fa1898ee6b4bcfaf6c4ArtifactHashB08CD707' is not referenced anywhere in the template", + "message": "'refundPaymentLambdaHandlerServiceRole62F72F0D' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "AssetParameters86bbf54b0bd4ccecf85d2ecc5cb12563bcd092af45115fa1898ee6b4bcfaf6c4ArtifactHashB08CD707", - "entityType": "Parameter" + "logicalId": "refundPaymentLambdaHandler932D11D5", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/AssetParameters86bbf54b0bd4ccecf85d2ecc5cb12563bcd092af45115fa1898ee6b4bcfaf6c4ArtifactHashB08CD707", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 334, - "startColumn": 5, - "endLine": 334, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", + "startLine": 1195, + "startColumn": 7, + "endLine": 1195, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { "ruleId": "W3005", "severity": "WARN", - "message": "'pineappleCheckLambdaHandlerServiceRoleFC4E3211' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'BookingSagaRole82982544' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", "source": "CFN_LINT", "entity": { - "logicalId": "pineappleCheckLambdaHandlerFDB742D5", + "logicalId": "BookingSagaFA991213", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::StepFunctions::StateMachine" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 87, + "startLine": 1417, "startColumn": 7, - "endLine": 87, + "endLine": 1417, "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -53479,19 +51393,19 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'StateMachineRoleB840431D' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", + "message": "'sagaLambdaHandlerServiceRole7EB685BD' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "StateMachine2E01A3A5", + "logicalId": "sagaLambdaHandlerFC24742F", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 195, + "startLine": 1542, "startColumn": 7, - "endLine": 195, + "endLine": 1542, "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -53499,70 +51413,71 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StateMachineType' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StateMachine2E01A3A5", + "logicalId": "BookingsB1C24132", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.StateMachineType", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 190, + "startLine": 6, "startColumn": 9, - "endLine": 190, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-stepfunctions.git", + "endLine": 6, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ProtocolType' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "thestatemachineapi69C81CC4", + "logicalId": "SagaPatternSingleTableDeployment96972FE77ef5b9d25f9d7a35316435e48684bb49", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Api" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.ProtocolType", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 244, + "startLine": 1615, "startColumn": 9, - "endLine": 244, - "endColumn": 22, + "endLine": 1615, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SagaPatternSingleTable288D85B3'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "thestatemachineapiDefaultStageE23A2C15", + "logicalId": "SagaPatternSingleTableDeploymentStageprod92F0690D", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Stage" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 253, + "startLine": 1632, "startColumn": 9, - "endLine": 253, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", + "endLine": 1632, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'thestatemachineapi69C81CC4'" + "resolutionSource": "Ref to 'SagaPatternSingleTable288D85B3'" } }, { @@ -53571,17 +51486,17 @@ "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "thestatemachineapiDefaultStageE23A2C15", + "logicalId": "SagaPatternSingleTableDeploymentStageprod92F0690D", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Stage" + "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 256, + "startLine": 1638, "startColumn": 9, - "endLine": 256, + "endLine": 1638, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -53591,387 +51506,299 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Integ", + "logicalId": "SagaPatternSingleTableproxy9F7D6084", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Integration" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 266, + "startLine": 1647, "startColumn": 9, - "endLine": 266, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 1647, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'thestatemachineapi69C81CC4'" + "resolutionSource": "GetAtt SagaPatternSingleTable288D85B3.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DefaultRoute", + "logicalId": "SagaPatternSingleTableproxy9F7D6084", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Route" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 294, + "startLine": 1653, "startColumn": 9, - "endLine": 294, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", + "endLine": 1653, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'thestatemachineapi69C81CC4'" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'pineappleCheckLambdaHandlerServiceRoleFC4E3211' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "pineappleCheckLambdaHandlerServiceRoleFC4E3211", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'pineappleCheckLambdaHandlerFDB742D5' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "pineappleCheckLambdaHandlerFDB742D5", + "logicalId": "SagaPatternSingleTableproxy9F7D6084", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 39, - "startColumn": 7, - "endLine": 39, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1654, + "startColumn": 9, + "endLine": 1654, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SagaPatternSingleTable288D85B3'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'StateMachineRoleB840431D' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StateMachineRoleB840431D", + "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyCC0ED567", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 98, - "startColumn": 7, - "endLine": 98, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1665, + "startColumn": 9, + "endLine": 1665, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'StateMachine2E01A3A5' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StateMachine2E01A3A5", + "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyCC0ED567", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 168, - "startColumn": 7, - "endLine": 168, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1666, + "startColumn": 9, + "endLine": 1666, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt sagaLambdaHandlerFC24742F.Arn" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'HttpApiRole79B5C31A' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HttpApiRole79B5C31A", + "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyCC0ED567", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 205, - "startColumn": 7, - "endLine": 205, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1672, + "startColumn": 9, + "endLine": 1672, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'thestatemachineapi69C81CC4' of type 'AWS::ApiGatewayV2::Api' supports Tags but none are configured", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "thestatemachineapi69C81CC4", + "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyCC0ED567", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Api" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 242, - "startColumn": 7, - "endLine": 242, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1673, + "startColumn": 9, + "endLine": 1673, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:SagaPatternSingleTable288D85B3}/{ref:SagaPatternSingleTableDeploymentStageprod92F0690D}/*/*)" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'thestatemachineapiDefaultStageE23A2C15' of type 'AWS::ApiGatewayV2::Stage' supports Tags but none are configured", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "thestatemachineapiDefaultStageE23A2C15", + "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyFFAFB063", "entityType": "Resource", - "resourceType": "AWS::ApiGatewayV2::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 252, - "startColumn": 7, - "endLine": 252, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/pat-the-waf-apigateway--APIGatewayStack.template.json": { - "filePath": "cdk/pat-the-waf-apigateway--APIGatewayStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 12, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 2, - "informational": 22, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "HelloWorldHandler30C22324", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 85, + "startLine": 1709, "startColumn": 9, - "endLine": 85, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "endLine": 1709, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" + "lifecycle": "create-only" } }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AssetParametersdbbf200867db4bc38eadd4ce5f5b75dce1049f40752e3c690ec4f6b17c996a69ArtifactHash53F25514' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "AssetParametersdbbf200867db4bc38eadd4ce5f5b75dce1049f40752e3c690ec4f6b17c996a69ArtifactHash53F25514", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/AssetParametersdbbf200867db4bc38eadd4ce5f5b75dce1049f40752e3c690ec4f6b17c996a69ArtifactHash53F25514", - "category": "Best Practice", - "startLine": 388, - "startColumn": 5, - "endLine": 388, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'HelloWorldHandlerServiceRole56E6BFBA' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "HelloWorldHandler30C22324", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 87, - "startColumn": 7, - "endLine": 87, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIDeploymentDDF5787C50cd54e1b820c67ddfe6e24991b1dd3f", + "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyFFAFB063", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 164, + "startLine": 1710, "startColumn": 9, - "endLine": 164, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 1710, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'WafGatewayAPI5BA7C2CE'" + "resolutionSource": "GetAtt sagaLambdaHandlerFC24742F.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIDeploymentStageprodEF5FA49F", + "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyFFAFB063", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 180, + "startLine": 1716, "startColumn": 9, - "endLine": 180, + "endLine": 1716, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'WafGatewayAPI5BA7C2CE'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIDeploymentStageprodEF5FA49F", + "logicalId": "SagaPatternSingleTableproxyANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyFFAFB063", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 201, + "startLine": 1717, "startColumn": 9, - "endLine": 201, + "endLine": 1717, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:SagaPatternSingleTable288D85B3}/test-invoke-stage/*/*)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIhelloworldC628BF91", + "logicalId": "SagaPatternSingleTableproxyANY8778A55C", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 210, + "startLine": 1749, "startColumn": 9, - "endLine": 210, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 1749, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt WafGatewayAPI5BA7C2CE.RootResourceId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIhelloworldC628BF91", + "logicalId": "SagaPatternSingleTableproxyANY8778A55C", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 216, + "startLine": 1750, "startColumn": 9, - "endLine": 216, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 1750, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SagaPatternSingleTableproxy9F7D6084'" } }, { @@ -53980,22 +51807,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIhelloworldC628BF91", + "logicalId": "SagaPatternSingleTableproxyANY8778A55C", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 217, + "startLine": 1753, "startColumn": 9, - "endLine": 217, + "endLine": 1753, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'WafGatewayAPI5BA7C2CE'" + "resolutionSource": "Ref to 'SagaPatternSingleTable288D85B3'" } }, { @@ -54004,15 +51831,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIhelloworldGETApiPermissionAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworldC704FF2F", + "logicalId": "SagaPatternSingleTableANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYF602862D", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 228, + "startLine": 1792, "startColumn": 9, - "endLine": 228, + "endLine": 1792, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -54026,21 +51853,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIhelloworldGETApiPermissionAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworldC704FF2F", + "logicalId": "SagaPatternSingleTableANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYF602862D", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 229, + "startLine": 1793, "startColumn": 9, - "endLine": 229, + "endLine": 1793, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt HelloWorldHandler30C22324.Arn" + "resolutionSource": "GetAtt sagaLambdaHandlerFC24742F.Arn" } }, { @@ -54049,15 +51876,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIhelloworldGETApiPermissionAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworldC704FF2F", + "logicalId": "SagaPatternSingleTableANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYF602862D", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 235, + "startLine": 1799, "startColumn": 9, - "endLine": 235, + "endLine": 1799, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -54071,21 +51898,21 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIhelloworldGETApiPermissionAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworldC704FF2F", + "logicalId": "SagaPatternSingleTableANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYF602862D", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 236, + "startLine": 1800, "startColumn": 9, - "endLine": 236, + "endLine": 1800, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:WafGatewayAPI5BA7C2CE}/{ref:WafGatewayAPIDeploymentStageprodEF5FA49F}/GET/helloworld)" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:SagaPatternSingleTable288D85B3}/{ref:SagaPatternSingleTableDeploymentStageprod92F0690D}/*/)" } }, { @@ -54094,15 +51921,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIhelloworldGETApiPermissionTestAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworld3D2EE2D0", + "logicalId": "SagaPatternSingleTableANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANY8FD1CF02", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 272, + "startLine": 1836, "startColumn": 9, - "endLine": 272, + "endLine": 1836, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -54116,21 +51943,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIhelloworldGETApiPermissionTestAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworld3D2EE2D0", + "logicalId": "SagaPatternSingleTableANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANY8FD1CF02", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 273, + "startLine": 1837, "startColumn": 9, - "endLine": 273, + "endLine": 1837, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt HelloWorldHandler30C22324.Arn" + "resolutionSource": "GetAtt sagaLambdaHandlerFC24742F.Arn" } }, { @@ -54139,15 +51966,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIhelloworldGETApiPermissionTestAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworld3D2EE2D0", + "logicalId": "SagaPatternSingleTableANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANY8FD1CF02", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 279, + "startLine": 1843, "startColumn": 9, - "endLine": 279, + "endLine": 1843, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -54161,21 +51988,21 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIhelloworldGETApiPermissionTestAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworld3D2EE2D0", + "logicalId": "SagaPatternSingleTableANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANY8FD1CF02", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 280, + "startLine": 1844, "startColumn": 9, - "endLine": 280, + "endLine": 1844, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:WafGatewayAPI5BA7C2CE}/test-invoke-stage/GET/helloworld)" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:SagaPatternSingleTable288D85B3}/test-invoke-stage/*/)" } }, { @@ -54184,15 +52011,15 @@ "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIhelloworldGET802399FF", + "logicalId": "SagaPatternSingleTableANYFE1A7CB0", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 312, + "startLine": 1876, "startColumn": 9, - "endLine": 312, + "endLine": 1876, "endColumn": 20, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54207,22 +52034,22 @@ "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIhelloworldGET802399FF", + "logicalId": "SagaPatternSingleTableANYFE1A7CB0", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 313, + "startLine": 1877, "startColumn": 9, - "endLine": 313, + "endLine": 1877, "endColumn": 20, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'WafGatewayAPIhelloworldC628BF91'" + "resolutionSource": "GetAtt SagaPatternSingleTable288D85B3.RootResourceId" } }, { @@ -54231,33 +52058,33 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIhelloworldGET802399FF", + "logicalId": "SagaPatternSingleTableANYFE1A7CB0", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 316, + "startLine": 1883, "startColumn": 9, - "endLine": 316, + "endLine": 1883, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'WafGatewayAPI5BA7C2CE'" + "resolutionSource": "Ref to 'SagaPatternSingleTable288D85B3'" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'HelloWorldHandlerServiceRole56E6BFBA' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'BookingsB1C24132' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "HelloWorldHandlerServiceRole56E6BFBA", + "logicalId": "BookingsB1C24132", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -54272,12 +52099,12 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'HelloWorldHandler30C22324' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'reserveFlightLambdaHandlerServiceRole985C586D' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "HelloWorldHandler30C22324", + "logicalId": "reserveFlightLambdaHandlerServiceRole985C586D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -54292,19 +52119,399 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'WafGatewayAPI5BA7C2CE' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Resource 'reserveFlightLambdaHandler3C75473D' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPI5BA7C2CE", + "logicalId": "reserveFlightLambdaHandler3C75473D", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 118, + "startColumn": 7, + "endLine": 118, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'confirmFlightLambdaHandlerServiceRole45F91B6E' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "confirmFlightLambdaHandlerServiceRole45F91B6E", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 185, + "startColumn": 7, + "endLine": 185, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'confirmFlightLambdaHandler96C3663F' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "confirmFlightLambdaHandler96C3663F", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 264, + "startColumn": 7, + "endLine": 264, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'cancelFlightLambdaHandlerServiceRole7F2439CB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "cancelFlightLambdaHandlerServiceRole7F2439CB", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 331, + "startColumn": 7, + "endLine": 331, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'cancelFlightLambdaHandler437EEC76' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "cancelFlightLambdaHandler437EEC76", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 410, + "startColumn": 7, + "endLine": 410, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'reserveHotelLambdaHandlerServiceRole452F23B7' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "reserveHotelLambdaHandlerServiceRole452F23B7", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 477, + "startColumn": 7, + "endLine": 477, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'reserveHotelLambdaHandler020AE24A' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "reserveHotelLambdaHandler020AE24A", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 556, + "startColumn": 7, + "endLine": 556, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'confirmHotelLambdaHandlerServiceRoleD5F8F90E' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "confirmHotelLambdaHandlerServiceRoleD5F8F90E", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 623, + "startColumn": 7, + "endLine": 623, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'confirmHotelLambdaHandler882ACF2D' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "confirmHotelLambdaHandler882ACF2D", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 702, + "startColumn": 7, + "endLine": 702, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'cancelHotelLambdaHandlerServiceRole4815D152' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "cancelHotelLambdaHandlerServiceRole4815D152", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 769, + "startColumn": 7, + "endLine": 769, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'cancelHotelLambdaHandler09F13EF6' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "cancelHotelLambdaHandler09F13EF6", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 848, + "startColumn": 7, + "endLine": 848, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'takePaymentLambdaHandlerServiceRole56CA2808' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "takePaymentLambdaHandlerServiceRole56CA2808", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 915, + "startColumn": 7, + "endLine": 915, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'takePaymentLambdaHandlerB96529D4' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "takePaymentLambdaHandlerB96529D4", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 994, + "startColumn": 7, + "endLine": 994, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'refundPaymentLambdaHandlerServiceRole62F72F0D' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "refundPaymentLambdaHandlerServiceRole62F72F0D", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1061, + "startColumn": 7, + "endLine": 1061, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'refundPaymentLambdaHandler932D11D5' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "refundPaymentLambdaHandler932D11D5", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1140, + "startColumn": 7, + "endLine": 1140, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BookingSagaRole82982544' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "BookingSagaRole82982544", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1207, + "startColumn": 7, + "endLine": 1207, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BookingSagaFA991213' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "BookingSagaFA991213", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1337, + "startColumn": 7, + "endLine": 1337, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'sagaLambdaHandlerServiceRole7EB685BD' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "sagaLambdaHandlerServiceRole7EB685BD", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1427, + "startColumn": 7, + "endLine": 1427, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'sagaLambdaHandlerFC24742F' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "sagaLambdaHandlerFC24742F", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1487, + "startColumn": 7, + "endLine": 1487, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SagaPatternSingleTable288D85B3' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SagaPatternSingleTable288D85B3", "entityType": "Resource", "resourceType": "AWS::ApiGateway::RestApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 98, + "startLine": 1554, "startColumn": 7, - "endLine": 98, + "endLine": 1554, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -54312,19 +52519,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'WafGatewayAPICloudWatchRoleEE79D232' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'SagaPatternSingleTableCloudWatchRole130684F0' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPICloudWatchRoleEE79D232", + "logicalId": "SagaPatternSingleTableCloudWatchRole130684F0", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 112, + "startLine": 1563, "startColumn": 7, - "endLine": 112, + "endLine": 1563, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -54332,35 +52539,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'WafGatewayAPIDeploymentStageprodEF5FA49F' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Resource 'SagaPatternSingleTableDeploymentStageprod92F0690D' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WafGatewayAPIDeploymentStageprodEF5FA49F", + "logicalId": "SagaPatternSingleTableDeploymentStageprod92F0690D", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 179, + "startLine": 1631, "startColumn": 7, - "endLine": 179, + "endLine": 1631, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/pat-the-waf-apigateway--TheWafStack.template.json": { - "filePath": "cdk/pat-the-waf-apigateway--TheWafStack.template.json", + "cdk/pat-the-scalable-webhook--TheScalableWebhookStack.template.json": { + "filePath": "cdk/pat-the-scalable-webhook--TheScalableWebhookStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 22, "counts": { "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 4, + "errors": 2, + "warnings": 4, + "informational": 43, "debug": 0 }, "suppressed": 0, @@ -54369,130 +52576,43 @@ }, "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Scope' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "WebACL", - "entityType": "Resource", - "resourceType": "AWS::WAFv2::WebACL" - }, - "propertyPath": "Properties.Scope", - "category": "Best Practice", - "startLine": 9, - "startColumn": 9, - "endLine": 9, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-wafv2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "WebACLAssociation", - "entityType": "Resource", - "resourceType": "AWS::WAFv2::WebACLAssociation" - }, - "propertyPath": "Properties.ResourceArn", - "category": "Best Practice", - "startLine": 105, - "startColumn": 9, - "endLine": 105, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-wafv2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:apigateway:us-east-1::/restapis/{dynamic}/stages/{dynamic})" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'WebACLArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "WebACLAssociation", + "logicalId": "SQSPublishLambdaHandler51EE31BE", "entityType": "Resource", - "resourceType": "AWS::WAFv2::WebACLAssociation" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.WebACLArn", - "category": "Best Practice", - "startLine": 124, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 160, "startColumn": 9, - "endLine": 124, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-wafv2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 160, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt WebACL.Arn" + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" } }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'WebACL' of type 'AWS::WAFv2::WebACL' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "WebACL", - "entityType": "Resource", - "resourceType": "AWS::WAFv2::WebACL" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/pat-the-xray-tracer--TheXrayDynamoFlow.template.json": { - "filePath": "cdk/pat-the-xray-tracer--TheXrayDynamoFlow.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 2, - "informational": 12, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "E2533", "severity": "ERROR", "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "DynamoLambdaHandlerFB6EB814", + "logicalId": "SQSSubscribeLambdaHandlerBBB58615", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 171, + "startLine": 326, "startColumn": 9, - "endLine": 171, + "endLine": 326, "endColumn": 17, "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", @@ -54504,17 +52624,35 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903' is not referenced anywhere in the template", + "message": "Parameter 'AssetParameterscd03efd5e3dbce0aea763ea8c5588ad4d6461d50c589e8809f87413cbe5203e9ArtifactHash5CFE4D33' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", + "logicalId": "AssetParameterscd03efd5e3dbce0aea763ea8c5588ad4d6461d50c589e8809f87413cbe5203e9ArtifactHash5CFE4D33", "entityType": "Parameter" }, - "propertyPath": "Parameters/AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", + "propertyPath": "Parameters/AssetParameterscd03efd5e3dbce0aea763ea8c5588ad4d6461d50c589e8809f87413cbe5203e9ArtifactHash5CFE4D33", "category": "Best Practice", - "startLine": 256, + "startLine": 742, "startColumn": 5, - "endLine": 256, + "endLine": 742, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParametersf0094c070470b05f97252ebe03e67953eb53b4659ffb3c5e01faea04951f5958ArtifactHashB6117B67' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "AssetParametersf0094c070470b05f97252ebe03e67953eb53b4659ffb3c5e01faea04951f5958ArtifactHashB6117B67", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/AssetParametersf0094c070470b05f97252ebe03e67953eb53b4659ffb3c5e01faea04951f5958ArtifactHashB6117B67", + "category": "Best Practice", + "startLine": 754, + "startColumn": 5, + "endLine": 754, "endColumn": 105, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -54522,369 +52660,284 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'DynamoLambdaHandlerServiceRole4C867B01' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'SQSPublishLambdaHandlerServiceRole4F9A1044' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "DynamoLambdaHandlerFB6EB814", + "logicalId": "SQSPublishLambdaHandler51EE31BE", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 176, + "startLine": 162, "startColumn": 7, - "endLine": 176, + "endLine": 162, "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'SQSSubscribeLambdaHandlerServiceRoleB6261F09' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "HitsFF5AF8CD", + "logicalId": "SQSSubscribeLambdaHandlerBBB58615", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 6, - "startColumn": 9, - "endLine": 6, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 328, + "startColumn": 7, + "endLine": 328, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "DynamoLambdaHandlerAllowInvokeTheXrayDynamoFlowSNSTopicCD4F86C04F3B929A", + "logicalId": "RDSPublishQueue2BEA1A7F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 189, - "startColumn": 9, - "endLine": 189, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 29, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "DynamoLambdaHandlerAllowInvokeTheXrayDynamoFlowSNSTopicCD4F86C04F3B929A", + "logicalId": "RDSPublishQueue2BEA1A7F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 190, - "startColumn": 9, - "endLine": 190, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt DynamoLambdaHandlerFB6EB814.Arn" - } + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 29, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "DynamoLambdaHandlerAllowInvokeTheXrayDynamoFlowSNSTopicCD4F86C04F3B929A", + "logicalId": "RDSPublishQueue2BEA1A7F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 196, - "startColumn": 9, - "endLine": 196, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 31, + "startColumn": 7, + "endLine": 31, + "endColumn": 18, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambdaHandlerAllowInvokeTheXrayDynamoFlowSNSTopicCD4F86C04F3B929A", + "logicalId": "Messages804FA4EB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 197, + "startLine": 6, "startColumn": 9, - "endLine": 197, + "endLine": 6, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambdaHandlerSNSTopic27AC0D9B", + "logicalId": "SQSSubscribeLambdaHandlerSqsEventSourceTheScalableWebhookStackRDSPublishQueue119E6E347AD14066", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.EventSourceArn", "category": "Best Practice", - "startLine": 208, + "startLine": 344, "startColumn": 9, - "endLine": 208, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 344, + "endColumn": 24, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt RDSPublishQueue2BEA1A7F.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambdaHandlerSNSTopic27AC0D9B", + "logicalId": "EndpointDeployment318525DAd36b722f04bf6c9ce03a896415e5529d", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.TopicArn", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 209, + "startLine": 418, "startColumn": 9, - "endLine": 209, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 418, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" + "resolutionSource": "Ref to 'EndpointEEF1FD8F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambdaHandlerSNSTopic27AC0D9B", + "logicalId": "EndpointDeploymentStageprodB78BEEA0", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.Endpoint", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 212, + "startLine": 435, "startColumn": 9, - "endLine": 212, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 435, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt DynamoLambdaHandlerFB6EB814.Arn" + "resolutionSource": "Ref to 'EndpointEEF1FD8F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Region' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambdaHandlerSNSTopic27AC0D9B", + "logicalId": "EndpointDeploymentStageprodB78BEEA0", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.Region", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 218, + "startLine": 441, "startColumn": 9, - "endLine": 218, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 441, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Select with unresolvable arguments)" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'HitsFF5AF8CD' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "HitsFF5AF8CD", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DynamoLambdaHandlerServiceRole4C867B01' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambdaHandlerServiceRole4C867B01", + "logicalId": "Endpointproxy39E2174E", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 31, - "startColumn": 7, - "endLine": 31, + "startLine": 450, + "startColumn": 9, + "endLine": 450, "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt EndpointEEF1FD8F.RootResourceId" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DynamoLambdaHandlerFB6EB814' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamoLambdaHandlerFB6EB814", + "logicalId": "Endpointproxy39E2174E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 118, - "startColumn": 7, - "endLine": 118, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/pat-the-xray-tracer--TheXrayHttpFlow.template.json": { - "filePath": "cdk/pat-the-xray-tracer--TheXrayHttpFlow.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 6, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 2, - "informational": 10, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "httpLambdaHandler66D9C9A8", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 112, + "startLine": 456, "startColumn": 9, - "endLine": 112, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "endLine": 456, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" - } - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", - "category": "Best Practice", - "startLine": 197, - "startColumn": 5, - "endLine": 197, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'httpLambdaHandlerServiceRole01D49A7D' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "httpLambdaHandler66D9C9A8", + "logicalId": "Endpointproxy39E2174E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 117, - "startColumn": 7, - "endLine": 117, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 457, + "startColumn": 9, + "endLine": 457, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'EndpointEEF1FD8F'" + } }, { "ruleId": "I9001", @@ -54892,15 +52945,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "httpLambdaHandlerAllowInvokeTheXrayHttpFlowSNSTopic4903AFE806D4343B", + "logicalId": "EndpointproxyANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYproxy6224F0D7", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 130, + "startLine": 468, "startColumn": 9, - "endLine": 130, + "endLine": 468, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -54914,21 +52967,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "httpLambdaHandlerAllowInvokeTheXrayHttpFlowSNSTopic4903AFE806D4343B", + "logicalId": "EndpointproxyANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYproxy6224F0D7", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 131, + "startLine": 469, "startColumn": 9, - "endLine": 131, + "endLine": 469, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt httpLambdaHandler66D9C9A8.Arn" + "resolutionSource": "GetAtt SQSPublishLambdaHandler51EE31BE.Arn" } }, { @@ -54937,15 +52990,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "httpLambdaHandlerAllowInvokeTheXrayHttpFlowSNSTopic4903AFE806D4343B", + "logicalId": "EndpointproxyANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYproxy6224F0D7", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 137, + "startLine": 475, "startColumn": 9, - "endLine": 137, + "endLine": 475, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -54959,40 +53012,39 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "httpLambdaHandlerAllowInvokeTheXrayHttpFlowSNSTopic4903AFE806D4343B", + "logicalId": "EndpointproxyANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYproxy6224F0D7", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 138, + "startLine": 476, "startColumn": 9, - "endLine": 138, + "endLine": 476, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/{ref:EndpointDeploymentStageprodB78BEEA0}/*/*)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "httpLambdaHandlerSNSTopicEE70E0D4", + "logicalId": "EndpointproxyANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANYproxy171AE875", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 149, + "startLine": 512, "startColumn": 9, - "endLine": 149, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 512, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -55002,292 +53054,231 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "httpLambdaHandlerSNSTopicEE70E0D4", + "logicalId": "EndpointproxyANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANYproxy171AE875", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.TopicArn", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 150, + "startLine": 513, "startColumn": 9, - "endLine": 150, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 513, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" + "resolutionSource": "GetAtt SQSPublishLambdaHandler51EE31BE.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "httpLambdaHandlerSNSTopicEE70E0D4", + "logicalId": "EndpointproxyANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANYproxy171AE875", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Endpoint", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 153, + "startLine": 519, "startColumn": 9, - "endLine": 153, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 519, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt httpLambdaHandler66D9C9A8.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Region' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "httpLambdaHandlerSNSTopicEE70E0D4", + "logicalId": "EndpointproxyANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANYproxy171AE875", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Region", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 159, + "startLine": 520, "startColumn": 9, - "endLine": 159, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 520, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Select with unresolvable arguments)" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/test-invoke-stage/*/*)" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'httpLambdaHandlerServiceRole01D49A7D' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "httpLambdaHandlerServiceRole01D49A7D", + "logicalId": "EndpointproxyANYC09721C5", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 552, + "startColumn": 9, + "endLine": 552, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'httpLambdaHandler66D9C9A8' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "httpLambdaHandler66D9C9A8", + "logicalId": "EndpointproxyANYC09721C5", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 66, - "startColumn": 7, - "endLine": 66, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/pat-the-xray-tracer--TheXraySQSFlow.template.json": { - "filePath": "cdk/pat-the-xray-tracer--TheXraySQSFlow.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 11, - "counts": { - "fatal": 0, - "errors": 2, - "warnings": 3, - "informational": 18, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "sqsLambdaHandler0DD5DF9B", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 142, + "startLine": 553, "startColumn": 9, - "endLine": 142, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "endLine": 553, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Endpointproxy39E2174E'" } }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "sqsSubscribeLambdaHandlerD66392B8", + "logicalId": "EndpointproxyANYC09721C5", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 332, + "propertyPath": "Properties.RestApiId", + "category": "Best Practice", + "startLine": 556, "startColumn": 9, - "endLine": 332, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "endLine": 556, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'EndpointEEF1FD8F'" } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", - "category": "Best Practice", - "startLine": 384, - "startColumn": 5, - "endLine": 384, - "endColumn": 105, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'sqsLambdaHandlerServiceRole2F57B7B5' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "sqsLambdaHandler0DD5DF9B", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 147, - "startColumn": 7, - "endLine": 147, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'sqsSubscribeLambdaHandlerServiceRole8F070FD3' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "sqsSubscribeLambdaHandlerD66392B8", + "logicalId": "EndpointANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYA4DEC70E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 337, - "startColumn": 7, - "endLine": 337, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 595, + "startColumn": 9, + "endLine": 595, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Queue4A7E3555", + "logicalId": "EndpointANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYA4DEC70E", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::Lambda::Permission" }, + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 3, - "startColumn": 5, - "endLine": 3, - "endColumn": 19, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 596, + "startColumn": 9, + "endLine": 596, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt SQSPublishLambdaHandler51EE31BE.Arn" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Queue4A7E3555", + "logicalId": "EndpointANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYA4DEC70E", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::Lambda::Permission" }, + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 3, - "startColumn": 5, - "endLine": 3, + "startLine": 602, + "startColumn": 9, + "endLine": 602, "endColumn": 19, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "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", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Queue4A7E3555", + "logicalId": "EndpointANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYA4DEC70E", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "startLine": 603, + "startColumn": 9, + "endLine": 603, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/{ref:EndpointDeploymentStageprodB78BEEA0}/*/)" + } }, { "ruleId": "I9001", @@ -55295,15 +53286,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sqsLambdaHandlerAllowInvokeTheXraySQSFlowSNSTopicA671E652005D4F97", + "logicalId": "EndpointANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANY6F14FF34", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 160, + "startLine": 639, "startColumn": 9, - "endLine": 160, + "endLine": 639, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -55317,21 +53308,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sqsLambdaHandlerAllowInvokeTheXraySQSFlowSNSTopicA671E652005D4F97", + "logicalId": "EndpointANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANY6F14FF34", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 161, + "startLine": 640, "startColumn": 9, - "endLine": 161, + "endLine": 640, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt sqsLambdaHandler0DD5DF9B.Arn" + "resolutionSource": "GetAtt SQSPublishLambdaHandler51EE31BE.Arn" } }, { @@ -55340,15 +53331,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sqsLambdaHandlerAllowInvokeTheXraySQSFlowSNSTopicA671E652005D4F97", + "logicalId": "EndpointANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANY6F14FF34", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 167, + "startLine": 646, "startColumn": 9, - "endLine": 167, + "endLine": 646, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -55362,40 +53353,40 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sqsLambdaHandlerAllowInvokeTheXraySQSFlowSNSTopicA671E652005D4F97", + "logicalId": "EndpointANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANY6F14FF34", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 168, + "startLine": 647, "startColumn": 9, - "endLine": 168, + "endLine": 647, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/test-invoke-stage/*/)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sqsLambdaHandlerSNSTopicC33599CE", + "logicalId": "EndpointANY485C938B", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 179, + "startLine": 679, "startColumn": 9, - "endLine": 179, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 679, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -55405,114 +53396,147 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sqsLambdaHandlerSNSTopicC33599CE", + "logicalId": "EndpointANY485C938B", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.TopicArn", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 180, + "startLine": 680, "startColumn": 9, - "endLine": 180, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 680, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" + "resolutionSource": "GetAtt EndpointEEF1FD8F.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sqsLambdaHandlerSNSTopicC33599CE", + "logicalId": "EndpointANY485C938B", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Endpoint", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 183, + "startLine": 686, "startColumn": 9, - "endLine": 183, + "endLine": 686, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'EndpointEEF1FD8F'" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Messages804FA4EB' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Messages804FA4EB", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'RDSPublishQueue2BEA1A7F' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "RDSPublishQueue2BEA1A7F", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 31, + "startColumn": 7, + "endLine": 31, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt sqsLambdaHandler0DD5DF9B.Arn" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Region' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'SQSPublishLambdaHandlerServiceRole4F9A1044' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sqsLambdaHandlerSNSTopicC33599CE", + "logicalId": "SQSPublishLambdaHandlerServiceRole4F9A1044", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Region", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 189, - "startColumn": 9, - "endLine": 189, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Select with unresolvable arguments)" - } + "startLine": 40, + "startColumn": 7, + "endLine": 40, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'SQSPublishLambdaHandler51EE31BE' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sqsSubscribeLambdaHandlerSqsEventSourceTheXraySQSFlowQueue7994C13E559DCA00", + "logicalId": "SQSPublishLambdaHandler51EE31BE", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.EventSourceArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 353, - "startColumn": 9, - "endLine": 353, - "endColumn": 24, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt Queue4A7E3555.Arn" - } + "startLine": 107, + "startColumn": 7, + "endLine": 107, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Queue4A7E3555' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Resource 'SQSSubscribeLambdaHandlerServiceRoleB6261F09' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Queue4A7E3555", + "logicalId": "SQSSubscribeLambdaHandlerServiceRoleB6261F09", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 174, "startColumn": 7, - "endLine": 5, + "endLine": 174, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -55520,19 +53544,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sqsLambdaHandlerServiceRole2F57B7B5' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'SQSSubscribeLambdaHandlerBBB58615' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sqsLambdaHandlerServiceRole2F57B7B5", + "logicalId": "SQSSubscribeLambdaHandlerBBB58615", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 14, + "startLine": 269, "startColumn": 7, - "endLine": 14, + "endLine": 269, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -55540,19 +53564,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sqsLambdaHandler0DD5DF9B' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'SQSSubscribeLambdaHandlerSqsEventSourceTheScalableWebhookStackRDSPublishQueue119E6E347AD14066' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sqsLambdaHandler0DD5DF9B", + "logicalId": "SQSSubscribeLambdaHandlerSqsEventSourceTheScalableWebhookStackRDSPublishQueue119E6E347AD14066", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::EventSourceMapping" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 89, + "startLine": 340, "startColumn": 7, - "endLine": 89, + "endLine": 340, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -55560,19 +53584,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sqsSubscribeLambdaHandlerServiceRole8F070FD3' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'EndpointEEF1FD8F' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sqsSubscribeLambdaHandlerServiceRole8F070FD3", + "logicalId": "EndpointEEF1FD8F", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::RestApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 209, + "startLine": 357, "startColumn": 7, - "endLine": 209, + "endLine": 357, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -55580,19 +53604,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sqsSubscribeLambdaHandlerD66392B8' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'EndpointCloudWatchRoleC3C64E0F' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sqsSubscribeLambdaHandlerD66392B8", + "logicalId": "EndpointCloudWatchRoleC3C64E0F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 286, + "startLine": 366, "startColumn": 7, - "endLine": 286, + "endLine": 366, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -55600,35 +53624,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sqsSubscribeLambdaHandlerSqsEventSourceTheXraySQSFlowQueue7994C13E559DCA00' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", + "message": "Resource 'EndpointDeploymentStageprodB78BEEA0' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sqsSubscribeLambdaHandlerSqsEventSourceTheXraySQSFlowQueue7994C13E559DCA00", + "logicalId": "EndpointDeploymentStageprodB78BEEA0", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 349, + "startLine": 434, "startColumn": 7, - "endLine": 349, + "endLine": 434, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/pat-the-xray-tracer--TheXraySnsFlow.template.json": { - "filePath": "cdk/pat-the-xray-tracer--TheXraySnsFlow.template.json", + "cdk/pat-the-scheduled-lambda--TheScheduledLambdaStack.template.json": { + "filePath": "cdk/pat-the-scheduled-lambda--TheScheduledLambdaStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 12, + "resourcesScanned": 7, "counts": { "fatal": 0, - "errors": 2, - "warnings": 3, - "informational": 20, + "errors": 1, + "warnings": 2, + "informational": 9, "debug": 0 }, "suppressed": 0, @@ -55642,38 +53666,15 @@ "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "snsLambdaHandlerE7B0ABE3", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 135, - "startColumn": 9, - "endLine": 135, - "endColumn": 17, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs12.x", - "lifecycle": "end-of-life" - } - }, - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "snsSubscriptionLambdaHandler68619CD8", + "logicalId": "scheduledLambda8A84450D", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 309, + "startLine": 157, "startColumn": 9, - "endLine": 309, + "endLine": 157, "endColumn": 17, "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", @@ -55685,17 +53686,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903' is not referenced anywhere in the template", + "message": "Parameter 'AssetParametersfccd72c2ce1888b6c8217fce01f0e35905d3c065025a088dfaf338bfa934ab6aArtifactHash79DE4220' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", + "logicalId": "AssetParametersfccd72c2ce1888b6c8217fce01f0e35905d3c065025a088dfaf338bfa934ab6aArtifactHash79DE4220", "entityType": "Parameter" }, - "propertyPath": "Parameters/AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", + "propertyPath": "Parameters/AssetParametersfccd72c2ce1888b6c8217fce01f0e35905d3c065025a088dfaf338bfa934ab6aArtifactHash79DE4220", "category": "Best Practice", - "startLine": 381, + "startLine": 232, "startColumn": 5, - "endLine": 381, + "endLine": 232, "endColumn": 105, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -55703,42 +53704,44 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'snsLambdaHandlerServiceRole7F428B88' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'scheduledLambdaServiceRoleB98DFEFD' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "snsLambdaHandlerE7B0ABE3", + "logicalId": "scheduledLambda8A84450D", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 140, + "startLine": 159, "startColumn": 7, - "endLine": 140, + "endLine": 159, "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'snsSubscriptionLambdaHandlerServiceRole215E543C' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "snsSubscriptionLambdaHandler68619CD8", + "logicalId": "RequestTableC81DB378", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 314, - "startColumn": 7, - "endLine": 314, - "endColumn": 17, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 6, + "startColumn": 9, + "endLine": 6, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9001", @@ -55746,15 +53749,15 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsLambdaHandlerAllowInvokeTheXraySnsFlowSNSTopic80B9595935AF18F0", + "logicalId": "scheduledLambdascheduleAllowEventRuleTheScheduledLambdaStackscheduledLambdaschedule2517ED8826359872", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 153, + "startLine": 193, "startColumn": 9, - "endLine": 153, + "endLine": 193, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -55768,21 +53771,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsLambdaHandlerAllowInvokeTheXraySnsFlowSNSTopic80B9595935AF18F0", + "logicalId": "scheduledLambdascheduleAllowEventRuleTheScheduledLambdaStackscheduledLambdaschedule2517ED8826359872", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 154, + "startLine": 194, "startColumn": 9, - "endLine": 154, + "endLine": 194, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt snsLambdaHandlerE7B0ABE3.Arn" + "resolutionSource": "GetAtt scheduledLambda8A84450D.Arn" } }, { @@ -55791,15 +53794,15 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsLambdaHandlerAllowInvokeTheXraySnsFlowSNSTopic80B9595935AF18F0", + "logicalId": "scheduledLambdascheduleAllowEventRuleTheScheduledLambdaStackscheduledLambdaschedule2517ED8826359872", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 160, + "startLine": 200, "startColumn": 9, - "endLine": 160, + "endLine": 200, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -55813,179 +53816,270 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsLambdaHandlerAllowInvokeTheXraySnsFlowSNSTopic80B9595935AF18F0", + "logicalId": "scheduledLambdascheduleAllowEventRuleTheScheduledLambdaStackscheduledLambdaschedule2517ED8826359872", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 161, + "startLine": 201, "startColumn": 9, - "endLine": 161, + "endLine": 201, "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" + "resolutionSource": "GetAtt scheduledLambdaschedule99960653.Arn" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Resource 'RequestTableC81DB378' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "snsLambdaHandlerSNSTopic3B2CFF1D", + "logicalId": "RequestTableC81DB378", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 172, - "startColumn": 9, - "endLine": 172, + "startLine": 5, + "startColumn": 7, + "endLine": 5, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'scheduledLambdaServiceRoleB98DFEFD' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "snsLambdaHandlerSNSTopic3B2CFF1D", + "logicalId": "scheduledLambdaServiceRoleB98DFEFD", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.TopicArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 173, - "startColumn": 9, - "endLine": 173, + "startLine": 31, + "startColumn": 7, + "endLine": 31, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", + "message": "Resource 'scheduledLambda8A84450D' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "snsLambdaHandlerSNSTopic3B2CFF1D", + "logicalId": "scheduledLambda8A84450D", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Endpoint", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 176, - "startColumn": 9, - "endLine": 176, + "startLine": 104, + "startColumn": 7, + "endLine": 104, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'scheduledLambdaschedule99960653' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "scheduledLambdaschedule99960653", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 171, + "startColumn": 7, + "endLine": 171, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/pat-the-simple-graphql-service--TheSimpleGraphqlServiceStack.template.json": { + "filePath": "cdk/pat-the-simple-graphql-service--TheSimpleGraphqlServiceStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 22, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 2, + "informational": 36, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "LoyaltyLambdaHandler5918F0DA", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 549, + "startColumn": 9, + "endLine": 549, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt snsLambdaHandlerE7B0ABE3.Arn" + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" } }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParametersb25d8c2ed9aaae99613538bc392d450ea9e3929b481ed8fb98a0442b719dcf43ArtifactHashDE7AA66F' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "AssetParametersb25d8c2ed9aaae99613538bc392d450ea9e3929b481ed8fb98a0442b719dcf43ArtifactHashDE7AA66F", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/AssetParametersb25d8c2ed9aaae99613538bc392d450ea9e3929b481ed8fb98a0442b719dcf43ArtifactHashDE7AA66F", + "category": "Best Practice", + "startLine": 580, + "startColumn": 5, + "endLine": 580, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'LoyaltyLambdaHandlerServiceRole62E814E8' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "LoyaltyLambdaHandler5918F0DA", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 551, + "startColumn": 7, + "endLine": 551, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Region' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsLambdaHandlerSNSTopic3B2CFF1D", + "logicalId": "ApiSchema510EECD7", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::AppSync::GraphQLSchema" }, - "propertyPath": "Properties.Region", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 182, + "startLine": 59, "startColumn": 9, - "endLine": 182, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 59, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Select with unresolvable arguments)" + "lifecycle": "create-only", + "resolutionSource": "GetAtt ApiF70053CD.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsSubscriptionLambdaHandlerAllowInvokeTheXraySnsFlowTheXRayTracerSnsTopic86AE60703F758919", + "logicalId": "ApiDefaultApiKeyF991C37B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AppSync::ApiKey" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 327, + "startLine": 74, "startColumn": 9, - "endLine": 327, - "endColumn": 16, + "endLine": 74, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt ApiF70053CD.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsSubscriptionLambdaHandlerAllowInvokeTheXraySnsFlowTheXRayTracerSnsTopic86AE60703F758919", + "logicalId": "ApiCustomerFEDF5079", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AppSync::DataSource" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 328, + "startLine": 156, "startColumn": 9, - "endLine": 328, - "endColumn": 22, + "endLine": 156, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt snsSubscriptionLambdaHandler68619CD8.Arn" + "resolutionSource": "GetAtt ApiF70053CD.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsSubscriptionLambdaHandlerAllowInvokeTheXraySnsFlowTheXRayTracerSnsTopic86AE60703F758919", + "logicalId": "ApiCustomerFEDF5079", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AppSync::DataSource" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 334, + "startLine": 162, "startColumn": 9, - "endLine": 334, - "endColumn": 19, + "endLine": 162, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -55995,43 +54089,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsSubscriptionLambdaHandlerAllowInvokeTheXraySnsFlowTheXRayTracerSnsTopic86AE60703F758919", + "logicalId": "ApiQuerygetCustomersResolver522EE433", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 335, + "startLine": 186, "startColumn": 9, - "endLine": 335, - "endColumn": 19, + "endLine": 186, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheXRayTracerSnsTopicCCE2005E'" + "resolutionSource": "GetAtt ApiF70053CD.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsSubscriptionLambdaHandlerTheXRayTracerSnsTopic6FDB75DD", + "logicalId": "ApiQuerygetCustomersResolver522EE433", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.FieldName", "category": "Best Practice", - "startLine": 346, + "startLine": 192, "startColumn": 9, - "endLine": 346, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 192, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -56041,235 +54136,207 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", + "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsSubscriptionLambdaHandlerTheXRayTracerSnsTopic6FDB75DD", + "logicalId": "ApiQuerygetCustomersResolver522EE433", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.TopicArn", + "propertyPath": "Properties.TypeName", "category": "Best Practice", - "startLine": 347, + "startLine": 193, "startColumn": 9, - "endLine": 347, + "endLine": 193, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheXRayTracerSnsTopicCCE2005E'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsSubscriptionLambdaHandlerTheXRayTracerSnsTopic6FDB75DD", + "logicalId": "ApiQuerygetCustomerResolver007520DC", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.Endpoint", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 350, + "startLine": 210, "startColumn": 9, - "endLine": 350, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 210, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt snsSubscriptionLambdaHandler68619CD8.Arn" + "resolutionSource": "GetAtt ApiF70053CD.ApiId" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TheXRayTracerSnsTopicCCE2005E' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TheXRayTracerSnsTopicCCE2005E", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'snsLambdaHandlerServiceRole7F428B88' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsLambdaHandlerServiceRole7F428B88", + "logicalId": "ApiQuerygetCustomerResolver007520DC", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FieldName", "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 216, + "startColumn": 9, + "endLine": 216, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'snsLambdaHandlerE7B0ABE3' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsLambdaHandlerE7B0ABE3", + "logicalId": "ApiQuerygetCustomerResolver007520DC", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.TypeName", "category": "Best Practice", - "startLine": 82, - "startColumn": 7, - "endLine": 82, + "startLine": 217, + "startColumn": 9, + "endLine": 217, "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'snsSubscriptionLambdaHandlerServiceRole215E543C' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsSubscriptionLambdaHandlerServiceRole215E543C", + "logicalId": "ApiMutationaddCustomerResolver53321A05", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 202, - "startColumn": 7, - "endLine": 202, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 234, + "startColumn": 9, + "endLine": 234, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt ApiF70053CD.ApiId" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'snsSubscriptionLambdaHandler68619CD8' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "snsSubscriptionLambdaHandler68619CD8", + "logicalId": "ApiMutationaddCustomerResolver53321A05", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FieldName", "category": "Best Practice", - "startLine": 263, - "startColumn": 7, - "endLine": 263, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/pat-the-xray-tracer--TheXrayTracerStack.template.json": { - "filePath": "cdk/pat-the-xray-tracer--TheXrayTracerStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 14, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 23, - "debug": 0 + "startLine": 240, + "startColumn": 9, + "endLine": 240, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIDeploymentB3CB89A0a689bf68bef2302d0715c2d1a50794fc", + "logicalId": "ApiMutationaddCustomerResolver53321A05", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.TypeName", "category": "Best Practice", - "startLine": 75, + "startLine": 241, "startColumn": 9, - "endLine": 75, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 241, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'xrayTracerAPIA84CAE80'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIDeploymentStageprod85442A48", + "logicalId": "ApiMutationsaveCustomerResolver85516C23", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 94, + "startLine": 258, "startColumn": 9, - "endLine": 94, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 258, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'xrayTracerAPIA84CAE80'" + "resolutionSource": "GetAtt ApiF70053CD.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIDeploymentStageprod85442A48", + "logicalId": "ApiMutationsaveCustomerResolver85516C23", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.FieldName", "category": "Best Practice", - "startLine": 109, + "startLine": 264, "startColumn": 9, - "endLine": 109, + "endLine": 264, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -56279,20 +54346,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIGET7490A366", + "logicalId": "ApiMutationsaveCustomerResolver85516C23", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.TypeName", "category": "Best Practice", - "startLine": 119, + "startLine": 265, "startColumn": 9, - "endLine": 119, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 265, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -56302,139 +54369,137 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIGET7490A366", + "logicalId": "ApiMutationsaveCustomerWithFirstOrderResolver66DBDFD0", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 120, + "startLine": 282, "startColumn": 9, - "endLine": 120, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 282, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt xrayTracerAPIA84CAE80.RootResourceId" + "resolutionSource": "GetAtt ApiF70053CD.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIGET7490A366", + "logicalId": "ApiMutationsaveCustomerWithFirstOrderResolver66DBDFD0", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.FieldName", "category": "Best Practice", - "startLine": 126, + "startLine": 288, "startColumn": 9, - "endLine": 126, + "endLine": 288, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'xrayTracerAPIA84CAE80'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIproxy719DA214", + "logicalId": "ApiMutationsaveCustomerWithFirstOrderResolver66DBDFD0", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.TypeName", "category": "Best Practice", - "startLine": 215, + "startLine": 289, "startColumn": 9, - "endLine": 215, + "endLine": 289, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt xrayTracerAPIA84CAE80.RootResourceId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIproxy719DA214", + "logicalId": "ApiMutationremoveCustomerResolver8435F803", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 221, + "startLine": 306, "startColumn": 9, - "endLine": 221, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 306, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt ApiF70053CD.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIproxy719DA214", + "logicalId": "ApiMutationremoveCustomerResolver8435F803", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.FieldName", "category": "Best Practice", - "startLine": 222, + "startLine": 312, "startColumn": 9, - "endLine": 222, + "endLine": 312, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'xrayTracerAPIA84CAE80'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIproxyGET4E348609", + "logicalId": "ApiMutationremoveCustomerResolver8435F803", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.TypeName", "category": "Best Practice", - "startLine": 233, + "startLine": 313, "startColumn": 9, - "endLine": 233, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 313, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -56444,92 +54509,91 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIproxyGET4E348609", + "logicalId": "ApiLoyaltyE1BE9BB1", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::AppSync::DataSource" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 234, + "startLine": 379, "startColumn": 9, - "endLine": 234, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 379, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'xrayTracerAPIproxy719DA214'" + "resolutionSource": "GetAtt ApiF70053CD.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIproxyGET4E348609", + "logicalId": "ApiLoyaltyE1BE9BB1", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::AppSync::DataSource" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 237, + "startLine": 385, "startColumn": 9, - "endLine": 237, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 385, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'xrayTracerAPIA84CAE80'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIResponseModel2591E14E", + "logicalId": "ApiQuerygetLoyaltyLevelResolverC862DCEF", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 326, + "startLine": 409, "startColumn": 9, - "endLine": 326, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 409, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'xrayTracerAPIA84CAE80'" + "resolutionSource": "GetAtt ApiF70053CD.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", + "message": "Property 'FieldName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIResponseModel2591E14E", + "logicalId": "ApiQuerygetLoyaltyLevelResolverC862DCEF", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.ContentType", + "propertyPath": "Properties.FieldName", "category": "Best Practice", - "startLine": 329, + "startLine": 415, "startColumn": 9, - "endLine": 329, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 415, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -56539,20 +54603,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'TypeName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIResponseModel2591E14E", + "logicalId": "ApiQuerygetLoyaltyLevelResolverC862DCEF", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::AppSync::Resolver" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.TypeName", "category": "Best Practice", - "startLine": 330, + "startLine": 416, "startColumn": 9, - "endLine": 330, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 416, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appsync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -56562,89 +54626,104 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIErrorResponseModel24719E91", + "logicalId": "thesimplegraphqlserviceapikey", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::AppSync::ApiKey" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 349, + "startLine": 433, "startColumn": 9, - "endLine": 349, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 433, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'xrayTracerAPIA84CAE80'" + "resolutionSource": "GetAtt ApiF70053CD.ApiId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIErrorResponseModel24719E91", + "logicalId": "CustomerTable260DCC08", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ContentType", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 352, + "startLine": 447, "startColumn": 9, - "endLine": 352, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 447, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Resource 'ApiApiLogsRole90293F72' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIErrorResponseModel24719E91", + "logicalId": "ApiApiLogsRole90293F72", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 353, - "startColumn": 9, - "endLine": 353, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ApiF70053CD' of type 'AWS::AppSync::GraphQLApi' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ApiF70053CD", + "entityType": "Resource", + "resourceType": "AWS::AppSync::GraphQLApi" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 39, + "startColumn": 7, + "endLine": 39, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TheXRayTracerSnsFanOutTopicDE7E70F8' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'ApiCustomerServiceRole28709567' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TheXRayTracerSnsFanOutTopicDE7E70F8", + "logicalId": "ApiCustomerServiceRole28709567", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 90, "startColumn": 7, - "endLine": 5, + "endLine": 90, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -56652,19 +54731,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'xrayTracerAPIA84CAE80' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Resource 'ApiLoyaltyServiceRole2B487CD2' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIA84CAE80", + "logicalId": "ApiLoyaltyServiceRole2B487CD2", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 14, + "startLine": 329, "startColumn": 7, - "endLine": 14, + "endLine": 329, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -56672,19 +54751,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'xrayTracerAPICloudWatchRoleCCB113F4' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'CustomerTable260DCC08' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPICloudWatchRoleCCB113F4", + "logicalId": "CustomerTable260DCC08", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 23, + "startLine": 446, "startColumn": 7, - "endLine": 23, + "endLine": 446, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -56692,19 +54771,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'xrayTracerAPIDeploymentStageprod85442A48' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Resource 'LoyaltyLambdaHandlerServiceRole62E814E8' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "xrayTracerAPIDeploymentStageprod85442A48", + "logicalId": "LoyaltyLambdaHandlerServiceRole62E814E8", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 93, + "startLine": 469, "startColumn": 7, - "endLine": 93, + "endLine": 469, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -56712,35 +54791,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ApiGatewaySNSRole1BAAAE75' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'LoyaltyLambdaHandler5918F0DA' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewaySNSRole1BAAAE75", + "logicalId": "LoyaltyLambdaHandler5918F0DA", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 374, + "startLine": 503, "startColumn": 7, - "endLine": 374, + "endLine": 503, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/py-api-cors-lambda--ApiCorsLambdaStack.template.json": { - "filePath": "cdk/py-api-cors-lambda--ApiCorsLambdaStack.template.json", + "cdk/pat-the-simple-webservice--TheSimpleWebserviceStack.template.json": { + "filePath": "cdk/pat-the-simple-webservice--TheSimpleWebserviceStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 13, + "resourcesScanned": 10, "counts": { "fatal": 0, "errors": 1, - "warnings": 1, - "informational": 25, + "warnings": 2, + "informational": 15, "debug": 0 }, "suppressed": 0, @@ -56749,277 +54828,126 @@ }, "diagnostics": [ { - "ruleId": "E2531", + "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'python3.7' was deprecated on '2023-12-04'. Creation was disabled on '2024-01-09', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "ApiCorsLambda5083F55F", + "logicalId": "DynamoLambdaHandlerFB6EB814", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 53, - "startColumn": 5, - "endLine": 53, - "endColumn": 13, - "ruleDescription": "Check if Lambda Function Runtimes are blocked for create", + "startLine": 163, + "startColumn": 9, + "endLine": 163, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "actualValue": "python3.7", - "lifecycle": "create-blocked" + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" } }, { - "ruleId": "W3005", + "ruleId": "W2001", "severity": "WARN", - "message": "'ApiCorsLambdaServiceRole0DB39061' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "Parameter 'AssetParameters2e2fb63cef5de8866986a28a524c8f97b58a2ec13b66aa5753892cafdd7dbe46ArtifactHash18C20B66' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "ApiCorsLambda5083F55F", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 55, - "startColumn": 4, - "endLine": 55, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ApiGatewayWithCorsDeployment248C0700a88c9b4f7fb5eae343fa3265f3ea5ffe", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 133, - "startColumn": 5, - "endLine": 133, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ApiGatewayWithCors6DE4076F'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ApiGatewayWithCorsDeploymentStageprod7F1DD875", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 153, - "startColumn": 5, - "endLine": 153, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ApiGatewayWithCors6DE4076F'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ApiGatewayWithCorsDeploymentStageprod7F1DD875", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" - }, - "propertyPath": "Properties.StageName", - "category": "Best Practice", - "startLine": 156, - "startColumn": 5, - "endLine": 156, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ApiGatewayWithCorsexample5AE32A3C", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "logicalId": "AssetParameters2e2fb63cef5de8866986a28a524c8f97b58a2ec13b66aa5753892cafdd7dbe46ArtifactHash18C20B66", + "entityType": "Parameter" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Parameters/AssetParameters2e2fb63cef5de8866986a28a524c8f97b58a2ec13b66aa5753892cafdd7dbe46ArtifactHash18C20B66", "category": "Best Practice", - "startLine": 168, + "startLine": 300, "startColumn": 5, - "endLine": 168, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiGatewayWithCors6DE4076F.RootResourceId" - } + "endLine": 300, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'DynamoLambdaHandlerServiceRole4C867B01' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "ApiGatewayWithCorsexample5AE32A3C", + "logicalId": "DynamoLambdaHandlerFB6EB814", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 174, - "startColumn": 5, - "endLine": 174, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 165, + "startColumn": 7, + "endLine": 165, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsexample5AE32A3C", + "logicalId": "HitsFF5AF8CD", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 175, - "startColumn": 5, - "endLine": 175, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 6, + "startColumn": 9, + "endLine": 6, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ApiGatewayWithCors6DE4076F'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'ProtocolType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsexampleOPTIONS2F5D9F4D", + "logicalId": "EndpointEEF1FD8F", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ApiGatewayV2::Api" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.ProtocolType", "category": "Best Practice", - "startLine": 188, - "startColumn": 5, - "endLine": 188, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "startLine": 179, + "startColumn": 9, + "endLine": 179, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ApiGatewayWithCorsexampleOPTIONS2F5D9F4D", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.ResourceId", - "category": "Best Practice", - "startLine": 215, - "startColumn": 5, - "endLine": 215, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ApiGatewayWithCorsexample5AE32A3C'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ApiGatewayWithCorsexampleOPTIONS2F5D9F4D", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 218, - "startColumn": 5, - "endLine": 218, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ApiGatewayWithCors6DE4076F'" - } - }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample83B6C89A", + "logicalId": "EndpointDefaultRouteTheSimpleWebserviceStackEndpointDefaultRouteC99962AAPermission4BC0F1E3", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 229, - "startColumn": 5, - "endLine": 229, - "endColumn": 12, + "startLine": 188, + "startColumn": 9, + "endLine": 188, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -57032,21 +54960,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample83B6C89A", + "logicalId": "EndpointDefaultRouteTheSimpleWebserviceStackEndpointDefaultRouteC99962AAPermission4BC0F1E3", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 230, - "startColumn": 5, - "endLine": 230, - "endColumn": 18, + "startLine": 189, + "startColumn": 9, + "endLine": 189, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiCorsLambda5083F55F.Arn" + "resolutionSource": "GetAtt DynamoLambdaHandlerFB6EB814.Arn" } }, { @@ -57055,16 +54983,16 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample83B6C89A", + "logicalId": "EndpointDefaultRouteTheSimpleWebserviceStackEndpointDefaultRouteC99962AAPermission4BC0F1E3", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 236, - "startColumn": 5, - "endLine": 236, - "endColumn": 15, + "startLine": 195, + "startColumn": 9, + "endLine": 195, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -57077,296 +55005,230 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample83B6C89A", + "logicalId": "EndpointDefaultRouteTheSimpleWebserviceStackEndpointDefaultRouteC99962AAPermission4BC0F1E3", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 237, - "startColumn": 5, - "endLine": 237, - "endColumn": 15, + "startLine": 196, + "startColumn": 9, + "endLine": 196, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:ApiGatewayWithCors6DE4076F}/{ref:ApiGatewayWithCorsDeploymentStageprod7F1DD875}/GET/example)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionTestApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample07A026FD", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 273, - "startColumn": 5, - "endLine": 273, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:EndpointEEF1FD8F}/*/*)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionTestApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample07A026FD", + "logicalId": "EndpointDefaultRouteDefaultRouteIntegration4584A785", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGatewayV2::Integration" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 274, - "startColumn": 5, - "endLine": 274, - "endColumn": 18, + "startLine": 228, + "startColumn": 9, + "endLine": 228, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiCorsLambda5083F55F.Arn" + "resolutionSource": "Ref to 'EndpointEEF1FD8F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionTestApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample07A026FD", + "logicalId": "EndpointDefaultRouteB7B22F2B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGatewayV2::Route" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 280, - "startColumn": 5, - "endLine": 280, + "startLine": 247, + "startColumn": 9, + "endLine": 247, "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'EndpointEEF1FD8F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionTestApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample07A026FD", + "logicalId": "EndpointDefaultStage0AD21F27", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGatewayV2::Stage" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 281, - "startColumn": 5, - "endLine": 281, + "startLine": 270, + "startColumn": 9, + "endLine": 270, "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:ApiGatewayWithCors6DE4076F}/test-invoke-stage/GET/example)" + "resolutionSource": "Ref to 'EndpointEEF1FD8F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsexampleGETCC962CB3", + "logicalId": "EndpointDefaultStage0AD21F27", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ApiGatewayV2::Stage" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 314, - "startColumn": 5, - "endLine": 314, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "startLine": 273, + "startColumn": 9, + "endLine": 273, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ApiGatewayWithCorsexampleGETCC962CB3", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.ResourceId", - "category": "Best Practice", - "startLine": 358, - "startColumn": 5, - "endLine": 358, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ApiGatewayWithCorsexample5AE32A3C'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ApiGatewayWithCorsexampleGETCC962CB3", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 361, - "startColumn": 5, - "endLine": 361, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ApiGatewayWithCors6DE4076F'" - } - }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ApiCorsLambdaServiceRole0DB39061' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'HitsFF5AF8CD' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiCorsLambdaServiceRole0DB39061", + "logicalId": "HitsFF5AF8CD", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 5, - "startColumn": 4, + "startColumn": 7, "endLine": 5, - "endColumn": 15, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ApiCorsLambda5083F55F' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'DynamoLambdaHandlerServiceRole4C867B01' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiCorsLambda5083F55F", + "logicalId": "DynamoLambdaHandlerServiceRole4C867B01", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 39, - "startColumn": 4, - "endLine": 39, - "endColumn": 15, + "startLine": 31, + "startColumn": 7, + "endLine": 31, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ApiGatewayWithCors6DE4076F' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Resource 'DynamoLambdaHandlerFB6EB814' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCors6DE4076F", + "logicalId": "DynamoLambdaHandlerFB6EB814", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 67, - "startColumn": 4, - "endLine": 67, - "endColumn": 15, + "startLine": 110, + "startColumn": 7, + "endLine": 110, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ApiGatewayWithCorsCloudWatchRole9C3700F0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'EndpointEEF1FD8F' of type 'AWS::ApiGatewayV2::Api' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsCloudWatchRole9C3700F0", + "logicalId": "EndpointEEF1FD8F", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGatewayV2::Api" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 76, - "startColumn": 4, - "endLine": 76, - "endColumn": 15, + "startLine": 177, + "startColumn": 7, + "endLine": 177, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ApiGatewayWithCorsDeploymentStageprod7F1DD875' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Resource 'EndpointDefaultStage0AD21F27' of type 'AWS::ApiGatewayV2::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiGatewayWithCorsDeploymentStageprod7F1DD875", + "logicalId": "EndpointDefaultStage0AD21F27", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::ApiGatewayV2::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 149, - "startColumn": 4, - "endLine": 149, - "endColumn": 15, + "startLine": 269, + "startColumn": 7, + "endLine": 269, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/py-api-eventbridge-lambda--ApiEventBridgeLambdaStack.template.json": { - "filePath": "cdk/py-api-eventbridge-lambda--ApiEventBridgeLambdaStack.template.json", + "cdk/pat-the-state-machine--TheStateMachineStack.template.json": { + "filePath": "cdk/pat-the-state-machine--TheStateMachineStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 28, + "resourcesScanned": 11, "counts": { "fatal": 0, - "errors": 0, - "warnings": 6, - "informational": 41, + "errors": 1, + "warnings": 3, + "informational": 13, "debug": 0 }, "suppressed": 0, @@ -57375,150 +55237,125 @@ }, "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", - "entity": { - "logicalId": "eventProducerLambda100D549C", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 77, - "startColumn": 5, - "endLine": 77, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" - } - }, - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "eventConsumer1Lambda4AF2292E", + "logicalId": "pineappleCheckLambdaHandlerFDB742D5", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 140, - "startColumn": 5, - "endLine": 140, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "startLine": 85, + "startColumn": 9, + "endLine": 85, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" } }, { - "ruleId": "W2531", + "ruleId": "W2001", "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Parameter 'AssetParameters86bbf54b0bd4ccecf85d2ecc5cb12563bcd092af45115fa1898ee6b4bcfaf6c4ArtifactHashB08CD707' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "eventConsumer2Lambda1631C47A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "logicalId": "AssetParameters86bbf54b0bd4ccecf85d2ecc5cb12563bcd092af45115fa1898ee6b4bcfaf6c4ArtifactHashB08CD707", + "entityType": "Parameter" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 250, + "propertyPath": "Parameters/AssetParameters86bbf54b0bd4ccecf85d2ecc5cb12563bcd092af45115fa1898ee6b4bcfaf6c4ArtifactHashB08CD707", + "category": "Best Practice", + "startLine": 334, "startColumn": 5, - "endLine": 250, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" - } + "endLine": 334, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { "ruleId": "W3005", "severity": "WARN", - "message": "'eventProducerLambdaServiceRoleD019EB99' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'pineappleCheckLambdaHandlerServiceRoleFC4E3211' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "eventProducerLambda100D549C", + "logicalId": "pineappleCheckLambdaHandlerFDB742D5", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 79, - "startColumn": 4, - "endLine": 79, - "endColumn": 14, + "startLine": 87, + "startColumn": 7, + "endLine": 87, + "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { "ruleId": "W3005", "severity": "WARN", - "message": "'eventConsumer1LambdaServiceRoleC8CCBFC5' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'StateMachineRoleB840431D' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", "source": "CFN_LINT", "entity": { - "logicalId": "eventConsumer1Lambda4AF2292E", + "logicalId": "StateMachine2E01A3A5", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::StepFunctions::StateMachine" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 142, - "startColumn": 4, - "endLine": 142, - "endColumn": 14, + "startLine": 195, + "startColumn": 7, + "endLine": 195, + "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'eventConsumer2LambdaServiceRole6B878884' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StateMachineType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "eventConsumer2Lambda1631C47A", + "logicalId": "StateMachine2E01A3A5", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.StateMachineType", "category": "Best Practice", - "startLine": 252, - "startColumn": 4, - "endLine": 252, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 190, + "startColumn": 9, + "endLine": 190, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-stepfunctions.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'ProtocolType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "eventConsumer1LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer1Lambda3A2F7294318BC23E", + "logicalId": "thestatemachineapi69C81CC4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGatewayV2::Api" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.ProtocolType", "category": "Best Practice", - "startLine": 181, - "startColumn": 5, - "endLine": 181, - "endColumn": 12, + "startLine": 244, + "startColumn": 9, + "endLine": 244, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -57528,42 +55365,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "eventConsumer1LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer1Lambda3A2F7294318BC23E", + "logicalId": "thestatemachineapiDefaultStageE23A2C15", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGatewayV2::Stage" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 182, - "startColumn": 5, - "endLine": 182, - "endColumn": 18, + "startLine": 253, + "startColumn": 9, + "endLine": 253, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt eventConsumer1Lambda4AF2292E.Arn" + "resolutionSource": "Ref to 'thestatemachineapi69C81CC4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "eventConsumer1LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer1Lambda3A2F7294318BC23E", + "logicalId": "thestatemachineapiDefaultStageE23A2C15", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGatewayV2::Stage" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 188, - "startColumn": 5, - "endLine": 188, - "endColumn": 15, + "startLine": 256, + "startColumn": 9, + "endLine": 256, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2/tree/master/aws-apigatewayv2-stage.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -57573,115 +55412,270 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "eventConsumer1LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer1Lambda3A2F7294318BC23E", + "logicalId": "Integ", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGatewayV2::Integration" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 189, - "startColumn": 5, - "endLine": 189, + "startLine": 266, + "startColumn": 9, + "endLine": 266, "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt eventConsumer1LambdaRule288E5FF9.Arn" + "resolutionSource": "Ref to 'thestatemachineapi69C81CC4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "eventConsumer2LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer2LambdaB60B781EECB58ACF", + "logicalId": "DefaultRoute", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGatewayV2::Route" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 291, - "startColumn": 5, - "endLine": 291, - "endColumn": 12, + "startLine": 294, + "startColumn": 9, + "endLine": 294, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigatewayv2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'thestatemachineapi69C81CC4'" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'pineappleCheckLambdaHandlerServiceRoleFC4E3211' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "eventConsumer2LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer2LambdaB60B781EECB58ACF", + "logicalId": "pineappleCheckLambdaHandlerServiceRoleFC4E3211", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 292, - "startColumn": 5, - "endLine": 292, + "startLine": 5, + "startColumn": 7, + "endLine": 5, "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt eventConsumer2Lambda1631C47A.Arn" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Resource 'pineappleCheckLambdaHandlerFDB742D5' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "eventConsumer2LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer2LambdaB60B781EECB58ACF", + "logicalId": "pineappleCheckLambdaHandlerFDB742D5", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 298, - "startColumn": 5, - "endLine": 298, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", + "startLine": 39, + "startColumn": 7, + "endLine": 39, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'StateMachineRoleB840431D' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "StateMachineRoleB840431D", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 98, + "startColumn": 7, + "endLine": 98, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'StateMachine2E01A3A5' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "StateMachine2E01A3A5", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 168, + "startColumn": 7, + "endLine": 168, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'HttpApiRole79B5C31A' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "HttpApiRole79B5C31A", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 205, + "startColumn": 7, + "endLine": 205, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'thestatemachineapi69C81CC4' of type 'AWS::ApiGatewayV2::Api' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "thestatemachineapi69C81CC4", + "entityType": "Resource", + "resourceType": "AWS::ApiGatewayV2::Api" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 242, + "startColumn": 7, + "endLine": 242, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'thestatemachineapiDefaultStageE23A2C15' of type 'AWS::ApiGatewayV2::Stage' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "thestatemachineapiDefaultStageE23A2C15", + "entityType": "Resource", + "resourceType": "AWS::ApiGatewayV2::Stage" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 252, + "startColumn": 7, + "endLine": 252, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/pat-the-waf-apigateway--APIGatewayStack.template.json": { + "filePath": "cdk/pat-the-waf-apigateway--APIGatewayStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 12, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 2, + "informational": 22, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "HelloWorldHandler30C22324", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 85, + "startColumn": 9, + "endLine": 85, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParametersdbbf200867db4bc38eadd4ce5f5b75dce1049f40752e3c690ec4f6b17c996a69ArtifactHash53F25514' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "eventConsumer2LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer2LambdaB60B781EECB58ACF", + "logicalId": "AssetParametersdbbf200867db4bc38eadd4ce5f5b75dce1049f40752e3c690ec4f6b17c996a69ArtifactHash53F25514", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/AssetParametersdbbf200867db4bc38eadd4ce5f5b75dce1049f40752e3c690ec4f6b17c996a69ArtifactHash53F25514", + "category": "Best Practice", + "startLine": 388, + "startColumn": 5, + "endLine": 388, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'HelloWorldHandlerServiceRole56E6BFBA' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "HelloWorldHandler30C22324", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 299, - "startColumn": 5, - "endLine": 299, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt eventConsumer2LambdaRule54312CB1.Arn" - } + "startLine": 87, + "startColumn": 7, + "endLine": 87, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", @@ -57689,22 +55683,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumerDeploymentD1A021868a8af37caaafdc0f762b784f7555ad86", + "logicalId": "WafGatewayAPIDeploymentDDF5787C50cd54e1b820c67ddfe6e24991b1dd3f", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Deployment" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 551, - "startColumn": 5, - "endLine": 551, - "endColumn": 15, + "startLine": 164, + "startColumn": 9, + "endLine": 164, + "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SampleAPIEventBridgeMultiConsumer52DC1403'" + "resolutionSource": "Ref to 'WafGatewayAPI5BA7C2CE'" } }, { @@ -57713,22 +55707,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumerDeploymentStageprodDE087A58", + "logicalId": "WafGatewayAPIDeploymentStageprodEF5FA49F", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 570, - "startColumn": 5, - "endLine": 570, - "endColumn": 15, + "startLine": 180, + "startColumn": 9, + "endLine": 180, + "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SampleAPIEventBridgeMultiConsumer52DC1403'" + "resolutionSource": "Ref to 'WafGatewayAPI5BA7C2CE'" } }, { @@ -57737,16 +55731,16 @@ "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumerDeploymentStageprodDE087A58", + "logicalId": "WafGatewayAPIDeploymentStageprodEF5FA49F", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 573, - "startColumn": 5, - "endLine": 573, - "endColumn": 15, + "startLine": 201, + "startColumn": 9, + "endLine": 201, + "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -57760,22 +55754,22 @@ "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumeritems997C90A7", + "logicalId": "WafGatewayAPIhelloworldC628BF91", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Resource" }, "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 585, - "startColumn": 5, - "endLine": 585, - "endColumn": 14, + "startLine": 210, + "startColumn": 9, + "endLine": 210, + "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt SampleAPIEventBridgeMultiConsumer52DC1403.RootResourceId" + "resolutionSource": "GetAtt WafGatewayAPI5BA7C2CE.RootResourceId" } }, { @@ -57784,16 +55778,16 @@ "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumeritems997C90A7", + "logicalId": "WafGatewayAPIhelloworldC628BF91", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Resource" }, "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 591, - "startColumn": 5, - "endLine": 591, - "endColumn": 14, + "startLine": 216, + "startColumn": 9, + "endLine": 216, + "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -57807,22 +55801,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumeritems997C90A7", + "logicalId": "WafGatewayAPIhelloworldC628BF91", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Resource" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 592, - "startColumn": 5, - "endLine": 592, - "endColumn": 15, + "startLine": 217, + "startColumn": 9, + "endLine": 217, + "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SampleAPIEventBridgeMultiConsumer52DC1403'" + "resolutionSource": "Ref to 'WafGatewayAPI5BA7C2CE'" } }, { @@ -57831,16 +55825,16 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitemsA86E071B", + "logicalId": "WafGatewayAPIhelloworldGETApiPermissionAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworldC704FF2F", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 603, - "startColumn": 5, - "endLine": 603, - "endColumn": 12, + "startLine": 228, + "startColumn": 9, + "endLine": 228, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -57853,21 +55847,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitemsA86E071B", + "logicalId": "WafGatewayAPIhelloworldGETApiPermissionAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworldC704FF2F", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 604, - "startColumn": 5, - "endLine": 604, - "endColumn": 18, + "startLine": 229, + "startColumn": 9, + "endLine": 229, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt eventProducerLambda100D549C.Arn" + "resolutionSource": "GetAtt HelloWorldHandler30C22324.Arn" } }, { @@ -57876,16 +55870,16 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitemsA86E071B", + "logicalId": "WafGatewayAPIhelloworldGETApiPermissionAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworldC704FF2F", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 610, - "startColumn": 5, - "endLine": 610, - "endColumn": 15, + "startLine": 235, + "startColumn": 9, + "endLine": 235, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -57898,21 +55892,21 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitemsA86E071B", + "logicalId": "WafGatewayAPIhelloworldGETApiPermissionAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworldC704FF2F", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 611, - "startColumn": 5, - "endLine": 611, - "endColumn": 15, + "startLine": 236, + "startColumn": 9, + "endLine": 236, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:SampleAPIEventBridgeMultiConsumer52DC1403}/{ref:SampleAPIEventBridgeMultiConsumerDeploymentStageprodDE087A58}/POST/items)" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:WafGatewayAPI5BA7C2CE}/{ref:WafGatewayAPIDeploymentStageprodEF5FA49F}/GET/helloworld)" } }, { @@ -57921,16 +55915,16 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionTestApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitems910D1EE7", + "logicalId": "WafGatewayAPIhelloworldGETApiPermissionTestAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworld3D2EE2D0", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 647, - "startColumn": 5, - "endLine": 647, - "endColumn": 12, + "startLine": 272, + "startColumn": 9, + "endLine": 272, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -57943,21 +55937,21 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionTestApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitems910D1EE7", + "logicalId": "WafGatewayAPIhelloworldGETApiPermissionTestAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworld3D2EE2D0", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 648, - "startColumn": 5, - "endLine": 648, - "endColumn": 18, + "startLine": 273, + "startColumn": 9, + "endLine": 273, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt eventProducerLambda100D549C.Arn" + "resolutionSource": "GetAtt HelloWorldHandler30C22324.Arn" } }, { @@ -57966,16 +55960,16 @@ "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionTestApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitems910D1EE7", + "logicalId": "WafGatewayAPIhelloworldGETApiPermissionTestAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworld3D2EE2D0", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 654, - "startColumn": 5, - "endLine": 654, - "endColumn": 15, + "startLine": 279, + "startColumn": 9, + "endLine": 279, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -57988,21 +55982,21 @@ "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionTestApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitems910D1EE7", + "logicalId": "WafGatewayAPIhelloworldGETApiPermissionTestAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworld3D2EE2D0", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 655, - "startColumn": 5, - "endLine": 655, - "endColumn": 15, + "startLine": 280, + "startColumn": 9, + "endLine": 280, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:SampleAPIEventBridgeMultiConsumer52DC1403}/test-invoke-stage/POST/items)" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:WafGatewayAPI5BA7C2CE}/test-invoke-stage/GET/helloworld)" } }, { @@ -58011,16 +56005,16 @@ "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTD2DFDA56", + "logicalId": "WafGatewayAPIhelloworldGET802399FF", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 688, - "startColumn": 5, - "endLine": 688, - "endColumn": 16, + "startLine": 312, + "startColumn": 9, + "endLine": 312, + "endColumn": 20, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -58034,22 +56028,22 @@ "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTD2DFDA56", + "logicalId": "WafGatewayAPIhelloworldGET802399FF", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 716, - "startColumn": 5, - "endLine": 716, - "endColumn": 16, + "startLine": 313, + "startColumn": 9, + "endLine": 313, + "endColumn": 20, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SampleAPIEventBridgeMultiConsumeritems997C90A7'" + "resolutionSource": "Ref to 'WafGatewayAPIhelloworldC628BF91'" } }, { @@ -58058,31 +56052,31 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTD2DFDA56", + "logicalId": "WafGatewayAPIhelloworldGET802399FF", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 719, - "startColumn": 5, - "endLine": 719, - "endColumn": 15, + "startLine": 316, + "startColumn": 9, + "endLine": 316, + "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SampleAPIEventBridgeMultiConsumer52DC1403'" + "resolutionSource": "Ref to 'WafGatewayAPI5BA7C2CE'" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'eventProducerLambdaServiceRoleD019EB99' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'HelloWorldHandlerServiceRole56E6BFBA' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "eventProducerLambdaServiceRoleD019EB99", + "logicalId": "HelloWorldHandlerServiceRole56E6BFBA", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, @@ -58090,324 +56084,214 @@ "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 5, - "startColumn": 4, + "startColumn": 7, "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'eventProducerLambda100D549C' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "eventProducerLambda100D549C", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 63, - "startColumn": 4, - "endLine": 63, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'eventConsumer1LambdaServiceRoleC8CCBFC5' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "eventConsumer1LambdaServiceRoleC8CCBFC5", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 92, - "startColumn": 4, - "endLine": 92, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'eventConsumer1Lambda4AF2292E' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "eventConsumer1Lambda4AF2292E", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 126, - "startColumn": 4, - "endLine": 126, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'eventConsumer1LambdaRule288E5FF9' of type 'AWS::Events::Rule' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "eventConsumer1LambdaRule288E5FF9", - "entityType": "Resource", - "resourceType": "AWS::Events::Rule" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 154, - "startColumn": 4, - "endLine": 154, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'eventConsumer2LambdaServiceRole6B878884' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "eventConsumer2LambdaServiceRole6B878884", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 202, - "startColumn": 4, - "endLine": 202, - "endColumn": 15, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'eventConsumer2Lambda1631C47A' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'HelloWorldHandler30C22324' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "eventConsumer2Lambda1631C47A", + "logicalId": "HelloWorldHandler30C22324", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 236, - "startColumn": 4, - "endLine": 236, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'eventConsumer2LambdaRule54312CB1' of type 'AWS::Events::Rule' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "eventConsumer2LambdaRule54312CB1", - "entityType": "Resource", - "resourceType": "AWS::Events::Rule" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 264, - "startColumn": 4, - "endLine": 264, - "endColumn": 15, + "startLine": 39, + "startColumn": 7, + "endLine": 39, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'testngestbucketD7155299' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'WafGatewayAPI5BA7C2CE' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "testngestbucketD7155299", + "logicalId": "WafGatewayAPI5BA7C2CE", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ApiGateway::RestApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 310, - "startColumn": 3, - "endLine": 310, - "endColumn": 27, + "startLine": 98, + "startColumn": 7, + "endLine": 98, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myRoleE60D68E8' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'WafGatewayAPICloudWatchRoleEE79D232' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myRoleE60D68E8", + "logicalId": "WafGatewayAPICloudWatchRoleEE79D232", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 320, - "startColumn": 4, - "endLine": 320, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'consumer3firehose' of type 'AWS::KinesisFirehose::DeliveryStream' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "consumer3firehose", - "entityType": "Resource", - "resourceType": "AWS::KinesisFirehose::DeliveryStream" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 375, - "startColumn": 4, - "endLine": 375, - "endColumn": 15, + "startLine": 112, + "startColumn": 7, + "endLine": 112, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'consumer3firehoseEventsRoleECB13871' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'WafGatewayAPIDeploymentStageprodEF5FA49F' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "consumer3firehoseEventsRoleECB13871", + "logicalId": "WafGatewayAPIDeploymentStageprodEF5FA49F", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 401, - "startColumn": 4, - "endLine": 401, - "endColumn": 15, + "startLine": 179, + "startColumn": 7, + "endLine": 179, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "cdk/pat-the-waf-apigateway--TheWafStack.template.json": { + "filePath": "cdk/pat-the-waf-apigateway--TheWafStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 4, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'eventConsumer3KinesisRuleB8D02F6F' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Property 'Scope' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "eventConsumer3KinesisRuleB8D02F6F", + "logicalId": "WebACL", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::WAFv2::WebACL" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Scope", "category": "Best Practice", - "startLine": 453, - "startColumn": 4, - "endLine": 453, + "startLine": 9, + "startColumn": 9, + "endLine": 9, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-wafv2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SampleAPIEventBridgeMultiConsumer52DC1403' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Property 'ResourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumer52DC1403", + "logicalId": "WebACLAssociation", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::WAFv2::WebACLAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ResourceArn", "category": "Best Practice", - "startLine": 485, - "startColumn": 4, - "endLine": 485, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 105, + "startColumn": 9, + "endLine": 105, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-wafv2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:apigateway:us-east-1::/restapis/{dynamic}/stages/{dynamic})" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SampleAPIEventBridgeMultiConsumerCloudWatchRoleE43B891E' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'WebACLArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumerCloudWatchRoleE43B891E", + "logicalId": "WebACLAssociation", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::WAFv2::WebACLAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.WebACLArn", "category": "Best Practice", - "startLine": 494, - "startColumn": 4, - "endLine": 494, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 124, + "startColumn": 9, + "endLine": 124, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-wafv2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt WebACL.Arn" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SampleAPIEventBridgeMultiConsumerDeploymentStageprodDE087A58' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Resource 'WebACL' of type 'AWS::WAFv2::WebACL' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SampleAPIEventBridgeMultiConsumerDeploymentStageprodDE087A58", + "logicalId": "WebACL", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::WAFv2::WebACL" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 566, - "startColumn": 4, - "endLine": 566, - "endColumn": 15, + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/py-api-sqs-lambda--ApiSqsLambdaStack.template.json": { - "filePath": "cdk/py-api-sqs-lambda--ApiSqsLambdaStack.template.json", + "cdk/pat-the-xray-tracer--TheXrayDynamoFlow.template.json": { + "filePath": "cdk/pat-the-xray-tracer--TheXrayDynamoFlow.template.json", "status": "OK", "metadata": { - "resourcesScanned": 15, + "resourcesScanned": 7, "counts": { "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 22, + "errors": 1, + "warnings": 2, + "informational": 12, "debug": 0 }, "suppressed": 0, @@ -58416,132 +56300,149 @@ }, "diagnostics": [ { - "ruleId": "W3005", - "severity": "WARN", - "message": "'SQSTriggerLambdaServiceRole0C427DE8' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "SQSTriggerLambda99F71FB3", + "logicalId": "DynamoLambdaHandlerFB6EB814", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 171, + "startColumn": 9, + "endLine": 171, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" + } + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", "category": "Best Practice", - "startLine": 344, - "startColumn": 4, - "endLine": 344, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 256, + "startColumn": 5, + "endLine": 256, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", "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)", + "ruleId": "W3005", + "severity": "WARN", + "message": "'DynamoLambdaHandlerServiceRole4C867B01' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "SQSQueue7674CD17", + "logicalId": "DynamoLambdaHandlerFB6EB814", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 20, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "startLine": 176, + "startColumn": 7, + "endLine": 176, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGWDeployment621CA0B04c89657aa92ebebc2018c4cd4a761ecd", + "logicalId": "HitsFF5AF8CD", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 113, - "startColumn": 5, - "endLine": 113, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 6, + "startColumn": 9, + "endLine": 6, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ApiGW45519054'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGWDeploymentStageprodDFD8EC11", + "logicalId": "DynamoLambdaHandlerAllowInvokeTheXrayDynamoFlowSNSTopicCD4F86C04F3B929A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 133, - "startColumn": 5, - "endLine": 133, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 189, + "startColumn": 9, + "endLine": 189, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ApiGW45519054'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGWDeploymentStageprodDFD8EC11", + "logicalId": "DynamoLambdaHandlerAllowInvokeTheXrayDynamoFlowSNSTopicCD4F86C04F3B929A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 136, - "startColumn": 5, - "endLine": 136, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 190, + "startColumn": 9, + "endLine": 190, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt DynamoLambdaHandlerFB6EB814.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGWANYD1FA3A5F", + "logicalId": "DynamoLambdaHandlerAllowInvokeTheXrayDynamoFlowSNSTopicCD4F86C04F3B929A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 149, - "startColumn": 5, - "endLine": 149, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "startLine": 196, + "startColumn": 9, + "endLine": 196, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -58551,388 +56452,498 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGWANYD1FA3A5F", + "logicalId": "DynamoLambdaHandlerAllowInvokeTheXrayDynamoFlowSNSTopicCD4F86C04F3B929A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 153, - "startColumn": 5, - "endLine": 153, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "startLine": 197, + "startColumn": 9, + "endLine": 197, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiGW45519054.RootResourceId" + "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGWANYD1FA3A5F", + "logicalId": "DynamoLambdaHandlerSNSTopic27AC0D9B", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 159, - "startColumn": 5, - "endLine": 159, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "startLine": 208, + "startColumn": 9, + "endLine": 208, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ApiGW45519054'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGWexampleDE4620AC", + "logicalId": "DynamoLambdaHandlerSNSTopic27AC0D9B", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.TopicArn", "category": "Best Practice", - "startLine": 170, - "startColumn": 5, - "endLine": 170, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 209, + "startColumn": 9, + "endLine": 209, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ApiGW45519054.RootResourceId" + "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGWexampleDE4620AC", + "logicalId": "DynamoLambdaHandlerSNSTopic27AC0D9B", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.Endpoint", "category": "Best Practice", - "startLine": 176, - "startColumn": 5, - "endLine": 176, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 212, + "startColumn": 9, + "endLine": 212, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt DynamoLambdaHandlerFB6EB814.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Region' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGWexampleDE4620AC", + "logicalId": "DynamoLambdaHandlerSNSTopic27AC0D9B", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Region", "category": "Best Practice", - "startLine": 177, - "startColumn": 5, - "endLine": 177, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "startLine": 218, + "startColumn": 9, + "endLine": 218, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ApiGW45519054'" + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Select with unresolvable arguments)" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Resource 'HitsFF5AF8CD' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiGWexamplePOST6CAE6201", + "logicalId": "HitsFF5AF8CD", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 189, - "startColumn": 5, - "endLine": 189, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Resource 'DynamoLambdaHandlerServiceRole4C867B01' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ApiGWexamplePOST6CAE6201", + "logicalId": "DynamoLambdaHandlerServiceRole4C867B01", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 246, - "startColumn": 5, - "endLine": 246, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "startLine": 31, + "startColumn": 7, + "endLine": 31, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DynamoLambdaHandlerFB6EB814' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "DynamoLambdaHandlerFB6EB814", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 118, + "startColumn": 7, + "endLine": 118, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/pat-the-xray-tracer--TheXrayHttpFlow.template.json": { + "filePath": "cdk/pat-the-xray-tracer--TheXrayHttpFlow.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 6, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 2, + "informational": 10, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "httpLambdaHandler66D9C9A8", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 112, + "startColumn": 9, + "endLine": 112, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ApiGWexampleDE4620AC'" + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" } }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", + "category": "Best Practice", + "startLine": 197, + "startColumn": 5, + "endLine": 197, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'httpLambdaHandlerServiceRole01D49A7D' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "httpLambdaHandler66D9C9A8", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 117, + "startColumn": 7, + "endLine": 117, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGWexamplePOST6CAE6201", + "logicalId": "httpLambdaHandlerAllowInvokeTheXrayHttpFlowSNSTopic4903AFE806D4343B", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 249, - "startColumn": 5, - "endLine": 249, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "startLine": 130, + "startColumn": 9, + "endLine": 130, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ApiGW45519054'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SQSTriggerLambdaSqsEventSourceApiSqsLambdaStackSQSQueue975096D28FB9A750", + "logicalId": "httpLambdaHandlerAllowInvokeTheXrayHttpFlowSNSTopic4903AFE806D4343B", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.EventSourceArn", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 358, - "startColumn": 5, - "endLine": 358, - "endColumn": 20, + "startLine": 131, + "startColumn": 9, + "endLine": 131, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt SQSQueue7674CD17.Arn" + "resolutionSource": "GetAtt httpLambdaHandler66D9C9A8.Arn" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SQSQueue7674CD17' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SQSQueue7674CD17", + "logicalId": "httpLambdaHandlerAllowInvokeTheXrayHttpFlowSNSTopic4903AFE806D4343B", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 20, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 137, + "startColumn": 9, + "endLine": 137, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'RestAPIRoleA3B4EFA3' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RestAPIRoleA3B4EFA3", + "logicalId": "httpLambdaHandlerAllowInvokeTheXrayHttpFlowSNSTopic4903AFE806D4343B", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 13, - "startColumn": 4, - "endLine": 13, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 138, + "startColumn": 9, + "endLine": 138, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ApiGW45519054' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGW45519054", + "logicalId": "httpLambdaHandlerSNSTopicEE70E0D4", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 47, - "startColumn": 4, - "endLine": 47, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 149, + "startColumn": 9, + "endLine": 149, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ApiGWCloudWatchRole51A9A431' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGWCloudWatchRole51A9A431", + "logicalId": "httpLambdaHandlerSNSTopicEE70E0D4", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.TopicArn", "category": "Best Practice", - "startLine": 56, - "startColumn": 4, - "endLine": 56, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 150, + "startColumn": 9, + "endLine": 150, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ApiGWDeploymentStageprodDFD8EC11' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiGWDeploymentStageprodDFD8EC11", + "logicalId": "httpLambdaHandlerSNSTopicEE70E0D4", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Endpoint", "category": "Best Practice", - "startLine": 129, - "startColumn": 4, - "endLine": 129, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 153, + "startColumn": 9, + "endLine": 153, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt httpLambdaHandler66D9C9A8.Arn" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SQSTriggerLambdaServiceRole0C427DE8' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Region' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SQSTriggerLambdaServiceRole0C427DE8", + "logicalId": "httpLambdaHandlerSNSTopicEE70E0D4", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Region", "category": "Best Practice", - "startLine": 259, - "startColumn": 4, - "endLine": 259, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 159, + "startColumn": 9, + "endLine": 159, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Select with unresolvable arguments)" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SQSTriggerLambda99F71FB3' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'httpLambdaHandlerServiceRole01D49A7D' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SQSTriggerLambda99F71FB3", + "logicalId": "httpLambdaHandlerServiceRole01D49A7D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 328, - "startColumn": 4, - "endLine": 328, - "endColumn": 15, + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SQSTriggerLambdaSqsEventSourceApiSqsLambdaStackSQSQueue975096D28FB9A750' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", + "message": "Resource 'httpLambdaHandler66D9C9A8' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SQSTriggerLambdaSqsEventSourceApiSqsLambdaStackSQSQueue975096D28FB9A750", + "logicalId": "httpLambdaHandler66D9C9A8", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 357, - "startColumn": 4, - "endLine": 357, - "endColumn": 15, + "startLine": 66, + "startColumn": 7, + "endLine": 66, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/py-athena-s3-glue--DemoAthenaS3GlueStack.template.json": { - "filePath": "cdk/py-athena-s3-glue--DemoAthenaS3GlueStack.template.json", + "cdk/pat-the-xray-tracer--TheXraySQSFlow.template.json": { + "filePath": "cdk/pat-the-xray-tracer--TheXraySQSFlow.template.json", "status": "OK", "metadata": { - "resourcesScanned": 21, + "resourcesScanned": 11, "counts": { "fatal": 0, - "errors": 0, - "warnings": 4, - "informational": 23, + "errors": 2, + "warnings": 3, + "informational": 18, "debug": 0 }, "suppressed": 0, @@ -58941,106 +56952,179 @@ }, "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "logicalId": "sqsLambdaHandler0DD5DF9B", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 158, - "startColumn": 5, - "endLine": 158, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "startLine": 142, + "startColumn": 9, + "endLine": 142, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", + "logicalId": "sqsSubscribeLambdaHandlerD66392B8", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 502, - "startColumn": 5, - "endLine": 502, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "startLine": 332, + "startColumn": 9, + "endLine": 332, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "actualValue": "python3.9", - "lifecycle": "deprecated" + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" } }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", + "category": "Best Practice", + "startLine": 384, + "startColumn": 5, + "endLine": 384, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, { "ruleId": "W3005", "severity": "WARN", - "message": "'CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'sqsLambdaHandlerServiceRole2F57B7B5' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "logicalId": "sqsLambdaHandler0DD5DF9B", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 172, - "startColumn": 4, - "endLine": 172, - "endColumn": 14, + "startLine": 147, + "startColumn": 7, + "endLine": 147, + "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { "ruleId": "W3005", "severity": "WARN", - "message": "'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'sqsSubscribeLambdaHandlerServiceRole8F070FD3' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", + "logicalId": "sqsSubscribeLambdaHandlerD66392B8", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 511, - "startColumn": 4, - "endLine": 511, - "endColumn": 14, + "startLine": 337, + "startColumn": 7, + "endLine": 337, + "endColumn": 17, "ruleDescription": "Check obsolete DependsOn configuration for 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": "Queue4A7E3555", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 19, + "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": "Queue4A7E3555", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 19, + "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": "Queue4A7E3555", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "logsbucketE18563D9", + "logicalId": "sqsLambdaHandlerAllowInvokeTheXraySQSFlowSNSTopicA671E652005D4F97", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, + "startLine": 160, + "startColumn": 9, + "endLine": 160, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -59051,42 +57135,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "logsbucketPolicy6C60198C", + "logicalId": "sqsLambdaHandlerAllowInvokeTheXraySQSFlowSNSTopicA671E652005D4F97", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 41, - "startColumn": 5, - "endLine": 41, - "endColumn": 12, + "startLine": 161, + "startColumn": 9, + "endLine": 161, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'logsbucketE18563D9'" + "resolutionSource": "GetAtt sqsLambdaHandler0DD5DF9B.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "queryoutputbucket3DDDB997", + "logicalId": "sqsLambdaHandlerAllowInvokeTheXraySQSFlowSNSTopicA671E652005D4F97", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 184, - "startColumn": 5, - "endLine": 184, - "endColumn": 16, + "startLine": 167, + "startColumn": 9, + "endLine": 167, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -59096,227 +57180,403 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "queryoutputbucketPolicy2BC02580", + "logicalId": "sqsLambdaHandlerAllowInvokeTheXraySQSFlowSNSTopicA671E652005D4F97", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 215, - "startColumn": 5, - "endLine": 215, - "endColumn": 12, + "startLine": 168, + "startColumn": 9, + "endLine": 168, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'queryoutputbucket3DDDB997'" + "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "sqsLambdaHandlerSNSTopicC33599CE", + "entityType": "Resource", + "resourceType": "AWS::SNS::Subscription" + }, + "propertyPath": "Properties.Protocol", + "category": "Best Practice", + "startLine": 179, + "startColumn": 9, + "endLine": 179, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "sqsLambdaHandlerSNSTopicC33599CE", + "entityType": "Resource", + "resourceType": "AWS::SNS::Subscription" + }, + "propertyPath": "Properties.TopicArn", + "category": "Best Practice", + "startLine": 180, + "startColumn": 9, + "endLine": 180, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "sqsLambdaHandlerSNSTopicC33599CE", + "entityType": "Resource", + "resourceType": "AWS::SNS::Subscription" + }, + "propertyPath": "Properties.Endpoint", + "category": "Best Practice", + "startLine": 183, + "startColumn": 9, + "endLine": 183, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt sqsLambdaHandler0DD5DF9B.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Region' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "sqsLambdaHandlerSNSTopicC33599CE", + "entityType": "Resource", + "resourceType": "AWS::SNS::Subscription" + }, + "propertyPath": "Properties.Region", + "category": "Best Practice", + "startLine": 189, + "startColumn": 9, + "endLine": 189, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Select with unresolvable arguments)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Content' is create-only; updating it will cause resource replacement", + "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "sqsSubscribeLambdaHandlerSqsEventSourceTheXraySQSFlowQueue7994C13E559DCA00", + "entityType": "Resource", + "resourceType": "AWS::Lambda::EventSourceMapping" + }, + "propertyPath": "Properties.EventSourceArn", + "category": "Best Practice", + "startLine": 353, + "startColumn": 9, + "endLine": 353, + "endColumn": 24, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt Queue4A7E3555.Arn" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Queue4A7E3555' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Queue4A7E3555", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'sqsLambdaHandlerServiceRole2F57B7B5' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "sqsLambdaHandlerServiceRole2F57B7B5", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'sqsLambdaHandler0DD5DF9B' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "samplefilesAwsCliLayerCFFFB375", + "logicalId": "sqsLambdaHandler0DD5DF9B", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Content", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 292, - "startColumn": 5, - "endLine": 292, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 89, + "startColumn": 7, + "endLine": 89, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "message": "Resource 'sqsSubscribeLambdaHandlerServiceRole8F070FD3' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "samplefilesAwsCliLayerCFFFB375", + "logicalId": "sqsSubscribeLambdaHandlerServiceRole8F070FD3", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Description", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 298, - "startColumn": 5, - "endLine": 298, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 209, + "startColumn": 7, + "endLine": 209, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", + "message": "Resource 'sqsSubscribeLambdaHandlerD66392B8' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "gluecrawlerroleB13EEB29", + "logicalId": "sqsSubscribeLambdaHandlerD66392B8", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 555, - "startColumn": 5, - "endLine": 555, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 286, + "startColumn": 7, + "endLine": 286, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Resource 'sqsSubscribeLambdaHandlerSqsEventSourceTheXraySQSFlowQueue7994C13E559DCA00' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "logscrawler", + "logicalId": "sqsSubscribeLambdaHandlerSqsEventSourceTheXraySQSFlowQueue7994C13E559DCA00", "entityType": "Resource", - "resourceType": "AWS::Glue::Crawler" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 571, - "startColumn": 5, - "endLine": 571, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-glue.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "startLine": 349, + "startColumn": 7, + "endLine": 349, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/pat-the-xray-tracer--TheXraySnsFlow.template.json": { + "filePath": "cdk/pat-the-xray-tracer--TheXraySnsFlow.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 12, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 3, + "informational": 20, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "snsLambdaHandlerE7B0ABE3", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 135, + "startColumn": 9, + "endLine": 135, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs12.x' was deprecated on '2023-03-31'. Creation was disabled on '2023-03-31', and updates were disabled on '2023-04-30'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "logauditingworkgroup", + "logicalId": "snsSubscriptionLambdaHandler68619CD8", "entityType": "Resource", - "resourceType": "AWS::Athena::WorkGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 618, - "startColumn": 5, - "endLine": 618, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 309, + "startColumn": 9, + "endLine": 309, + "endColumn": 17, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs12.x", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Database' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "producteventsbydatequery", - "entityType": "Resource", - "resourceType": "AWS::Athena::NamedQuery" + "logicalId": "AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", + "entityType": "Parameter" }, - "propertyPath": "Properties.Database", + "propertyPath": "Parameters/AssetParameters6c980a02477a1c6c644813cd50d311a281699acee6b9b3e9ffab9dc61f4fda90ArtifactHashF2E5D903", "category": "Best Practice", - "startLine": 651, + "startLine": 381, "startColumn": 5, - "endLine": 651, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 381, + "endColumn": 105, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'snsLambdaHandlerServiceRole7F428B88' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "producteventsbydatequery", + "logicalId": "snsLambdaHandlerE7B0ABE3", "entityType": "Resource", - "resourceType": "AWS::Athena::NamedQuery" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Name", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 652, - "startColumn": 5, - "endLine": 652, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 140, + "startColumn": 7, + "endLine": 140, + "endColumn": 17, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'QueryString' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'snsSubscriptionLambdaHandlerServiceRole215E543C' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "producteventsbydatequery", + "logicalId": "snsSubscriptionLambdaHandler68619CD8", "entityType": "Resource", - "resourceType": "AWS::Athena::NamedQuery" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.QueryString", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 653, - "startColumn": 5, - "endLine": 653, + "startLine": 314, + "startColumn": 7, + "endLine": 314, "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'WorkGroup' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "producteventsbydatequery", + "logicalId": "snsLambdaHandlerAllowInvokeTheXraySnsFlowSNSTopic80B9595935AF18F0", "entityType": "Resource", - "resourceType": "AWS::Athena::NamedQuery" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.WorkGroup", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 654, - "startColumn": 5, - "endLine": 654, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "startLine": 153, + "startColumn": 9, + "endLine": 153, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -59326,43 +57586,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Database' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "usereventsbydatequery", + "logicalId": "snsLambdaHandlerAllowInvokeTheXraySnsFlowSNSTopic80B9595935AF18F0", "entityType": "Resource", - "resourceType": "AWS::Athena::NamedQuery" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Database", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 666, - "startColumn": 5, - "endLine": 666, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "startLine": 154, + "startColumn": 9, + "endLine": 154, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt snsLambdaHandlerE7B0ABE3.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "usereventsbydatequery", + "logicalId": "snsLambdaHandlerAllowInvokeTheXraySnsFlowSNSTopic80B9595935AF18F0", "entityType": "Resource", - "resourceType": "AWS::Athena::NamedQuery" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 667, - "startColumn": 5, - "endLine": 667, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "startLine": 160, + "startColumn": 9, + "endLine": 160, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -59372,43 +57631,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'QueryString' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "usereventsbydatequery", + "logicalId": "snsLambdaHandlerAllowInvokeTheXraySnsFlowSNSTopic80B9595935AF18F0", "entityType": "Resource", - "resourceType": "AWS::Athena::NamedQuery" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.QueryString", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 668, - "startColumn": 5, - "endLine": 668, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "startLine": 161, + "startColumn": 9, + "endLine": 161, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'WorkGroup' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "usereventsbydatequery", + "logicalId": "snsLambdaHandlerSNSTopic3B2CFF1D", "entityType": "Resource", - "resourceType": "AWS::Athena::NamedQuery" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.WorkGroup", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 669, - "startColumn": 5, - "endLine": 669, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "startLine": 172, + "startColumn": 9, + "endLine": 172, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -59418,194 +57677,136 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Database' is create-only; updating it will cause resource replacement", + "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "alleventsbyuserIdquery", + "logicalId": "snsLambdaHandlerSNSTopic3B2CFF1D", "entityType": "Resource", - "resourceType": "AWS::Athena::NamedQuery" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.Database", + "propertyPath": "Properties.TopicArn", "category": "Best Practice", - "startLine": 681, - "startColumn": 5, - "endLine": 681, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "startLine": 173, + "startColumn": 9, + "endLine": 173, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import: TheXrayTracerStack:ExportsOutputRefTheXRayTracerSnsFanOutTopicDE7E70F8D479F0D6)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "alleventsbyuserIdquery", + "logicalId": "snsLambdaHandlerSNSTopic3B2CFF1D", "entityType": "Resource", - "resourceType": "AWS::Athena::NamedQuery" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.Endpoint", "category": "Best Practice", - "startLine": 682, - "startColumn": 5, - "endLine": 682, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "startLine": 176, + "startColumn": 9, + "endLine": 176, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt snsLambdaHandlerE7B0ABE3.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'QueryString' is create-only; updating it will cause resource replacement", + "message": "Property 'Region' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "alleventsbyuserIdquery", + "logicalId": "snsLambdaHandlerSNSTopic3B2CFF1D", "entityType": "Resource", - "resourceType": "AWS::Athena::NamedQuery" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.QueryString", + "propertyPath": "Properties.Region", "category": "Best Practice", - "startLine": 683, - "startColumn": 5, - "endLine": 683, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "startLine": 182, + "startColumn": 9, + "endLine": 182, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Select with unresolvable arguments)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'WorkGroup' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "alleventsbyuserIdquery", + "logicalId": "snsSubscriptionLambdaHandlerAllowInvokeTheXraySnsFlowTheXRayTracerSnsTopic86AE60703F758919", "entityType": "Resource", - "resourceType": "AWS::Athena::NamedQuery" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.WorkGroup", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 684, - "startColumn": 5, - "endLine": 684, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "startLine": 327, + "startColumn": 9, + "endLine": 327, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 117, - "startColumn": 4, - "endLine": 117, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 142, - "startColumn": 4, - "endLine": 142, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/py-datasync-s3--cdk-datasync-s3-to-s3-iam.template.json": { - "filePath": "cdk/py-datasync-s3--cdk-datasync-s3-to-s3-iam.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 8, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CDKDataSyncS3AccessRole0C49AEBFA", + "logicalId": "snsSubscriptionLambdaHandlerAllowInvokeTheXraySnsFlowTheXRayTracerSnsTopic86AE60703F758919", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 19, - "startColumn": 5, - "endLine": 19, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "startLine": 328, + "startColumn": 9, + "endLine": 328, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt snsSubscriptionLambdaHandler68619CD8.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CDKDataSyncS3Policy034C77CD2", + "logicalId": "snsSubscriptionLambdaHandlerAllowInvokeTheXraySnsFlowTheXRayTracerSnsTopic86AE60703F758919", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Description", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 55, - "startColumn": 5, - "endLine": 55, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", + "startLine": 334, + "startColumn": 9, + "endLine": 334, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -59615,43 +57816,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CDKDataSyncS3Policy034C77CD2", + "logicalId": "snsSubscriptionLambdaHandlerAllowInvokeTheXraySnsFlowTheXRayTracerSnsTopic86AE60703F758919", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 56, - "startColumn": 5, - "endLine": 56, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", + "startLine": 335, + "startColumn": 9, + "endLine": 335, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'TheXRayTracerSnsTopicCCE2005E'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CDKDataSyncS3AccessRole18E349368", + "logicalId": "snsSubscriptionLambdaHandlerTheXRayTracerSnsTopic6FDB75DD", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 83, - "startColumn": 5, - "endLine": 83, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "startLine": 346, + "startColumn": 9, + "endLine": 346, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -59661,101 +57862,163 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CDKDataSyncS3Policy1E7D7BFA5", + "logicalId": "snsSubscriptionLambdaHandlerTheXRayTracerSnsTopic6FDB75DD", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.Description", + "propertyPath": "Properties.TopicArn", "category": "Best Practice", - "startLine": 119, - "startColumn": 5, - "endLine": 119, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", + "startLine": 347, + "startColumn": 9, + "endLine": 347, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'TheXRayTracerSnsTopicCCE2005E'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CDKDataSyncS3Policy1E7D7BFA5", + "logicalId": "snsSubscriptionLambdaHandlerTheXRayTracerSnsTopic6FDB75DD", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.Endpoint", "category": "Best Practice", - "startLine": 120, - "startColumn": 5, - "endLine": 120, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", + "startLine": 350, + "startColumn": 9, + "endLine": 350, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt snsSubscriptionLambdaHandler68619CD8.Arn" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CDKDataSyncS3AccessRole0C49AEBFA' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'TheXRayTracerSnsTopicCCE2005E' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CDKDataSyncS3AccessRole0C49AEBFA", + "logicalId": "TheXRayTracerSnsTopicCCE2005E", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 5, - "startColumn": 4, + "startColumn": 7, "endLine": 5, - "endColumn": 15, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CDKDataSyncS3AccessRole18E349368' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'snsLambdaHandlerServiceRole7F428B88' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CDKDataSyncS3AccessRole18E349368", + "logicalId": "snsLambdaHandlerServiceRole7F428B88", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 69, - "startColumn": 4, - "endLine": 69, - "endColumn": 15, + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'snsLambdaHandlerE7B0ABE3' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "snsLambdaHandlerE7B0ABE3", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 82, + "startColumn": 7, + "endLine": 82, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'snsSubscriptionLambdaHandlerServiceRole215E543C' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "snsSubscriptionLambdaHandlerServiceRole215E543C", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 202, + "startColumn": 7, + "endLine": 202, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'snsSubscriptionLambdaHandler68619CD8' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "snsSubscriptionLambdaHandler68619CD8", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 263, + "startColumn": 7, + "endLine": 263, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/py-datasync-s3--cdk-datasync-s3-to-s3.template.json": { - "filePath": "cdk/py-datasync-s3--cdk-datasync-s3-to-s3.template.json", + "cdk/pat-the-xray-tracer--TheXrayTracerStack.template.json": { + "filePath": "cdk/pat-the-xray-tracer--TheXrayTracerStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 4, + "resourcesScanned": 14, "counts": { "fatal": 0, "errors": 0, - "warnings": 2, - "informational": 7, + "warnings": 0, + "informational": 23, "debug": 0 }, "suppressed": 0, @@ -59764,60 +58027,70 @@ }, "diagnostics": [ { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'S3BucketArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DataSyncS3Location0", + "logicalId": "xrayTracerAPIDeploymentB3CB89A0a689bf68bef2302d0715c2d1a50794fc", "entityType": "Resource", - "resourceType": "AWS::DataSync::LocationS3" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.S3BucketArn", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 11, - "startColumn": 5, - "endLine": 11, - "endColumn": 17, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" + "startLine": 75, + "startColumn": 9, + "endLine": 75, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'xrayTracerAPIA84CAE80'" + } }, { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'S3BucketArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DataSyncS3Location1", + "logicalId": "xrayTracerAPIDeploymentStageprod85442A48", "entityType": "Resource", - "resourceType": "AWS::DataSync::LocationS3" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.S3BucketArn", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 26, - "startColumn": 5, - "endLine": 26, - "endColumn": 17, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" + "startLine": 94, + "startColumn": 9, + "endLine": 94, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'xrayTracerAPIA84CAE80'" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'S3BucketArn' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DataSyncS3Location0", + "logicalId": "xrayTracerAPIDeploymentStageprod85442A48", "entityType": "Resource", - "resourceType": "AWS::DataSync::LocationS3" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.S3BucketArn", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 11, - "startColumn": 5, - "endLine": 11, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", + "startLine": 109, + "startColumn": 9, + "endLine": 109, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -59827,20 +58100,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'S3BucketArn' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DataSyncS3Location1", + "logicalId": "xrayTracerAPIGET7490A366", "entityType": "Resource", - "resourceType": "AWS::DataSync::LocationS3" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.S3BucketArn", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 26, - "startColumn": 5, - "endLine": 26, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", + "startLine": 119, + "startColumn": 9, + "endLine": 119, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -59850,211 +58123,234 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationLocationArn' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DataSyncS3toS3Task", + "logicalId": "xrayTracerAPIGET7490A366", "entityType": "Resource", - "resourceType": "AWS::DataSync::Task" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.DestinationLocationArn", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 37, - "startColumn": 5, - "endLine": 37, - "endColumn": 28, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", + "startLine": 120, + "startColumn": 9, + "endLine": 120, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt DataSyncS3Location0.LocationArn" + "resolutionSource": "GetAtt xrayTracerAPIA84CAE80.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceLocationArn' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DataSyncS3toS3Task", + "logicalId": "xrayTracerAPIGET7490A366", "entityType": "Resource", - "resourceType": "AWS::DataSync::Task" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.SourceLocationArn", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 43, - "startColumn": 5, - "endLine": 43, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", + "startLine": 126, + "startColumn": 9, + "endLine": 126, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt DataSyncS3Location1.LocationArn" + "resolutionSource": "Ref to 'xrayTracerAPIA84CAE80'" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DataSyncS3Location0' of type 'AWS::DataSync::LocationS3' supports Tags but none are configured", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DataSyncS3Location0", + "logicalId": "xrayTracerAPIproxy719DA214", "entityType": "Resource", - "resourceType": "AWS::DataSync::LocationS3" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 215, + "startColumn": 9, + "endLine": 215, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt xrayTracerAPIA84CAE80.RootResourceId" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DataSyncS3Location1' of type 'AWS::DataSync::LocationS3' supports Tags but none are configured", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DataSyncS3Location1", + "logicalId": "xrayTracerAPIproxy719DA214", "entityType": "Resource", - "resourceType": "AWS::DataSync::LocationS3" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 20, - "startColumn": 4, - "endLine": 20, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 221, + "startColumn": 9, + "endLine": 221, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DataSyncS3toS3Task' of type 'AWS::DataSync::Task' supports Tags but none are configured", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DataSyncS3toS3Task", + "logicalId": "xrayTracerAPIproxy719DA214", "entityType": "Resource", - "resourceType": "AWS::DataSync::Task" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 36, - "startColumn": 4, - "endLine": 36, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/py-docker-app-with-asg-alb--ASGStack.template.json": { - "filePath": "cdk/py-docker-app-with-asg-alb--ASGStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 13, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 38, - "debug": 0 + "startLine": 222, + "startColumn": 9, + "endLine": 222, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'xrayTracerAPIA84CAE80'" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W3697", - "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "appasgLaunchConfig9EFFB3A3", + "logicalId": "xrayTracerAPIproxyGET4E348609", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::ApiGateway::Method" }, - "category": "Deprecation", - "startLine": 91, - "startColumn": 3, - "endLine": 91, - "endColumn": 30, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" + "propertyPath": "Properties.HttpMethod", + "category": "Best Practice", + "startLine": 233, + "startColumn": 9, + "endLine": 233, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "appasgInstanceSecurityGroup8B8185FA", + "logicalId": "xrayTracerAPIproxyGET4E348609", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 22, + "startLine": 234, + "startColumn": 9, + "endLine": 234, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'xrayTracerAPIproxy719DA214'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "appasgInstanceSecurityGroup8B8185FA", + "logicalId": "xrayTracerAPIproxyGET4E348609", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 11, + "startLine": 237, + "startColumn": 9, + "endLine": 237, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'xrayTracerAPIA84CAE80'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "xrayTracerAPIResponseModel2591E14E", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Model" + }, + "propertyPath": "Properties.RestApiId", + "category": "Best Practice", + "startLine": 326, + "startColumn": 9, + "endLine": 326, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: NetworkStack:ExportsOutputRefTheVPC92636AB00B2A4A70)" + "resolutionSource": "Ref to 'xrayTracerAPIA84CAE80'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "appasgInstanceSecurityGroupfromASGStacksgalb85F2758980805783DB9D", + "logicalId": "xrayTracerAPIResponseModel2591E14E", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.ContentType", "category": "Best Practice", - "startLine": 32, - "startColumn": 5, - "endLine": 32, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 329, + "startColumn": 9, + "endLine": 329, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -60064,91 +58360,90 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "appasgInstanceSecurityGroupfromASGStacksgalb85F2758980805783DB9D", + "logicalId": "xrayTracerAPIResponseModel2591E14E", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 33, - "startColumn": 5, - "endLine": 33, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 330, + "startColumn": 9, + "endLine": 330, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt appasgInstanceSecurityGroup8B8185FA.GroupId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "appasgInstanceSecurityGroupfromASGStacksgalb85F2758980805783DB9D", + "logicalId": "xrayTracerAPIErrorResponseModel24719E91", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 39, - "startColumn": 5, - "endLine": 39, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 349, + "startColumn": 9, + "endLine": 349, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'xrayTracerAPIA84CAE80'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "appasgInstanceSecurityGroupfromASGStacksgalb85F2758980805783DB9D", + "logicalId": "xrayTracerAPIErrorResponseModel24719E91", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.SourceSecurityGroupId", + "propertyPath": "Properties.ContentType", "category": "Best Practice", - "startLine": 40, - "startColumn": 5, - "endLine": 40, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 352, + "startColumn": 9, + "endLine": 352, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt sgalbE4BDB11E.GroupId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "appasgInstanceSecurityGroupfromASGStacksgalb85F2758980805783DB9D", + "logicalId": "xrayTracerAPIErrorResponseModel24719E91", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 46, - "startColumn": 5, - "endLine": 46, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 353, + "startColumn": 9, + "endLine": 353, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -60156,205 +58451,232 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", + "message": "Resource 'TheXRayTracerSnsFanOutTopicDE7E70F8' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "appasgLaunchConfig9EFFB3A3", + "logicalId": "TheXRayTracerSnsFanOutTopicDE7E70F8", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.IamInstanceProfile", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 94, - "startColumn": 5, - "endLine": 94, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'appasgInstanceProfile55323240'" - } + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Resource 'xrayTracerAPIA84CAE80' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "appasgLaunchConfig9EFFB3A3", + "logicalId": "xrayTracerAPIA84CAE80", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::ApiGateway::RestApi" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 97, - "startColumn": 5, - "endLine": 97, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "message": "Resource 'xrayTracerAPICloudWatchRoleCCB113F4' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "appasgLaunchConfig9EFFB3A3", + "logicalId": "xrayTracerAPICloudWatchRoleCCB113F4", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 100, - "startColumn": 5, - "endLine": 100, + "startLine": 23, + "startColumn": 7, + "endLine": 23, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "message": "Resource 'xrayTracerAPIDeploymentStageprod85442A48' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "appasgLaunchConfig9EFFB3A3", + "logicalId": "xrayTracerAPIDeploymentStageprod85442A48", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.KeyName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 101, - "startColumn": 5, - "endLine": 101, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 93, + "startColumn": 7, + "endLine": 93, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", + "message": "Resource 'ApiGatewaySNSRole1BAAAE75' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "appasgLaunchConfig9EFFB3A3", + "logicalId": "ApiGatewaySNSRole1BAAAE75", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.SecurityGroups", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 102, + "startLine": 374, + "startColumn": 7, + "endLine": 374, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/py-api-cors-lambda--ApiCorsLambdaStack.template.json": { + "filePath": "cdk/py-api-cors-lambda--ApiCorsLambdaStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 13, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 1, + "informational": 25, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E2531", + "severity": "ERROR", + "message": "Runtime 'python3.7' was deprecated on '2023-12-04'. Creation was disabled on '2024-01-09', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ApiCorsLambda5083F55F", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 53, "startColumn": 5, - "endLine": 102, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 53, + "endColumn": 13, + "ruleDescription": "Check if Lambda Function Runtimes are blocked for create", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "python3.7", + "lifecycle": "create-blocked" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'ApiCorsLambdaServiceRole0DB39061' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "appasgLaunchConfig9EFFB3A3", + "logicalId": "ApiCorsLambda5083F55F", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.UserData", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 116, - "startColumn": 5, - "endLine": 116, + "startLine": 55, + "startColumn": 4, + "endLine": 55, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "appasgASGE5B53758", + "logicalId": "ApiGatewayWithCorsDeployment248C0700a88c9b4f7fb5eae343fa3265f3ea5ffe", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.LaunchConfigurationName", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 130, + "startLine": 133, "startColumn": 5, - "endLine": 130, - "endColumn": 29, + "endLine": 133, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'appasgLaunchConfig9EFFB3A3'" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ApiGatewayWithCors6DE4076F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "appasgASGE5B53758", + "logicalId": "ApiGatewayWithCorsDeploymentStageprod7F1DD875", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.VPCZoneIdentifier", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 147, + "startLine": 153, "startColumn": 5, - "endLine": 147, - "endColumn": 23, + "endLine": 153, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ApiGatewayWithCors6DE4076F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgnextcloud40AB2A88", + "logicalId": "ApiGatewayWithCorsDeploymentStageprod7F1DD875", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 168, + "startLine": 156, "startColumn": 5, - "endLine": 168, - "endColumn": 22, + "endLine": 156, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -60364,159 +58686,161 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgnextcloud40AB2A88", + "logicalId": "ApiGatewayWithCorsexample5AE32A3C", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.GroupName", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 169, + "startLine": 168, "startColumn": 5, - "endLine": 169, - "endColumn": 15, + "endLine": 168, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt ApiGatewayWithCors6DE4076F.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgnextcloud40AB2A88", + "logicalId": "ApiGatewayWithCorsexample5AE32A3C", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 186, + "startLine": 174, "startColumn": 5, - "endLine": 186, - "endColumn": 11, + "endLine": 174, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: NetworkStack:ExportsOutputRefTheVPC92636AB00B2A4A70)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgnextcloudfromASGStacksgalb85F275898080011A1DCA", + "logicalId": "ApiGatewayWithCorsexample5AE32A3C", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 198, + "startLine": 175, "startColumn": 5, - "endLine": 198, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 175, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ApiGatewayWithCors6DE4076F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgnextcloudfromASGStacksgalb85F275898080011A1DCA", + "logicalId": "ApiGatewayWithCorsexampleOPTIONS2F5D9F4D", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 199, + "startLine": 188, "startColumn": 5, - "endLine": 199, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 188, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt sgnextcloud40AB2A88.GroupId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgnextcloudfromASGStacksgalb85F275898080011A1DCA", + "logicalId": "ApiGatewayWithCorsexampleOPTIONS2F5D9F4D", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 205, + "startLine": 215, "startColumn": 5, - "endLine": 205, + "endLine": 215, "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ApiGatewayWithCorsexample5AE32A3C'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgnextcloudfromASGStacksgalb85F275898080011A1DCA", + "logicalId": "ApiGatewayWithCorsexampleOPTIONS2F5D9F4D", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.SourceSecurityGroupId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 206, + "startLine": 218, "startColumn": 5, - "endLine": 206, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 218, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt sgalbE4BDB11E.GroupId" + "resolutionSource": "Ref to 'ApiGatewayWithCors6DE4076F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgnextcloudfromASGStacksgalb85F275898080011A1DCA", + "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample83B6C89A", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 212, + "startLine": 229, "startColumn": 5, - "endLine": 212, + "endLine": 229, "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -60526,40 +58850,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgalbE4BDB11E", + "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample83B6C89A", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 221, + "startLine": 230, "startColumn": 5, - "endLine": 221, - "endColumn": 22, + "endLine": 230, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt ApiCorsLambda5083F55F.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgalbE4BDB11E", + "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample83B6C89A", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.GroupName", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 222, + "startLine": 236, "startColumn": 5, - "endLine": 222, + "endLine": 236, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -60570,43 +58895,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgalbE4BDB11E", + "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample83B6C89A", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 239, + "startLine": 237, "startColumn": 5, - "endLine": 239, - "endColumn": 11, + "endLine": 237, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: NetworkStack:ExportsOutputRefTheVPC92636AB00B2A4A70)" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:ApiGatewayWithCors6DE4076F}/{ref:ApiGatewayWithCorsDeploymentStageprod7F1DD875}/GET/example)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ALBAEE750D2", + "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionTestApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample07A026FD", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Scheme", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 256, + "startLine": 273, "startColumn": 5, - "endLine": 256, + "endLine": 273, "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -60616,88 +58940,88 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ALBAEE750D2", + "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionTestApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample07A026FD", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 273, + "startLine": 274, "startColumn": 5, - "endLine": 273, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endLine": 274, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt ApiCorsLambda5083F55F.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ALBListener3B99FF85", + "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionTestApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample07A026FD", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.LoadBalancerArn", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 290, + "startLine": 280, "startColumn": 5, - "endLine": 290, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", + "endLine": 280, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ALBAEE750D2'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ALBListenerTargetGroupD5D64FBA", + "logicalId": "ApiGatewayWithCorsexampleGETApiPermissionTestApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample07A026FD", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 303, + "startLine": 281, "startColumn": 5, - "endLine": 303, - "endColumn": 10, + "endLine": 281, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:ApiGatewayWithCors6DE4076F}/test-invoke-stage/GET/example)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ALBListenerTargetGroupD5D64FBA", + "logicalId": "ApiGatewayWithCorsexampleGETCC962CB3", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 304, + "startLine": 314, "startColumn": 5, - "endLine": 304, - "endColumn": 14, + "endLine": 314, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -60707,64 +59031,67 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ALBListenerTargetGroupD5D64FBA", + "logicalId": "ApiGatewayWithCorsexampleGETCC962CB3", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.TargetType", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 311, + "startLine": 358, "startColumn": 5, - "endLine": 311, + "endLine": 358, "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ApiGatewayWithCorsexample5AE32A3C'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ALBListenerTargetGroupD5D64FBA", + "logicalId": "ApiGatewayWithCorsexampleGETCC962CB3", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 312, + "startLine": 361, "startColumn": 5, - "endLine": 312, - "endColumn": 11, + "endLine": 361, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: NetworkStack:ExportsOutputRefTheVPC92636AB00B2A4A70)" + "resolutionSource": "Ref to 'ApiGatewayWithCors6DE4076F'" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sgnextcloud40AB2A88' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'ApiCorsLambdaServiceRole0DB39061' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sgnextcloud40AB2A88", + "logicalId": "ApiCorsLambdaServiceRole0DB39061", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 167, + "startLine": 5, "startColumn": 4, - "endLine": 167, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -60772,19 +59099,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sgalbE4BDB11E' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'ApiCorsLambda5083F55F' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sgalbE4BDB11E", + "logicalId": "ApiCorsLambda5083F55F", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 220, + "startLine": 39, "startColumn": 4, - "endLine": 220, + "endLine": 39, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -60792,19 +59119,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ALBAEE750D2' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "message": "Resource 'ApiGatewayWithCors6DE4076F' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ALBAEE750D2", + "logicalId": "ApiGatewayWithCors6DE4076F", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::ApiGateway::RestApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 249, + "startLine": 67, "startColumn": 4, - "endLine": 249, + "endLine": 67, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -60812,19 +59139,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ALBListener3B99FF85' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", + "message": "Resource 'ApiGatewayWithCorsCloudWatchRole9C3700F0' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ALBListener3B99FF85", + "logicalId": "ApiGatewayWithCorsCloudWatchRole9C3700F0", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 281, + "startLine": 76, "startColumn": 4, - "endLine": 281, + "endLine": 76, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -60832,35 +59159,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ALBListenerTargetGroupD5D64FBA' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "message": "Resource 'ApiGatewayWithCorsDeploymentStageprod7F1DD875' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ALBListenerTargetGroupD5D64FBA", + "logicalId": "ApiGatewayWithCorsDeploymentStageprod7F1DD875", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 302, + "startLine": 149, "startColumn": 4, - "endLine": 302, + "endLine": 149, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/py-docker-app-with-asg-alb--NetworkStack.template.json": { - "filePath": "cdk/py-docker-app-with-asg-alb--NetworkStack.template.json", + "cdk/py-api-eventbridge-lambda--ApiEventBridgeLambdaStack.template.json": { + "filePath": "cdk/py-api-eventbridge-lambda--ApiEventBridgeLambdaStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 22, + "resourcesScanned": 28, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 37, + "warnings": 6, + "informational": 41, "debug": 0 }, "suppressed": 0, @@ -60869,303 +59196,150 @@ }, "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TheVPC92636AB0", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TheVPC92636AB0", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.InstanceTenancy", - "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TheVPCPublicSubnet1Subnet770D4FF2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 24, - "startColumn": 5, - "endLine": 24, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TheVPCPublicSubnet1Subnet770D4FF2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 32, - "startColumn": 5, - "endLine": 32, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "TheVPCPublicSubnet1Subnet770D4FF2", + "logicalId": "eventProducerLambda100D549C", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 48, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 77, "startColumn": 5, - "endLine": 48, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 77, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPC92636AB0'" + "actualValue": "python3.8", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "TheVPCPublicSubnet1RouteTable17DA183D", + "logicalId": "eventConsumer1Lambda4AF2292E", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 65, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 140, "startColumn": 5, - "endLine": 65, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 140, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPC92636AB0'" + "actualValue": "python3.8", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "TheVPCPublicSubnet1RouteTableAssociationE5186D77", + "logicalId": "eventConsumer2Lambda1631C47A", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 76, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 250, "startColumn": 5, - "endLine": 76, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 250, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPCPublicSubnet1RouteTable17DA183D'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "actualValue": "python3.8", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'eventProducerLambdaServiceRoleD019EB99' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "TheVPCPublicSubnet1RouteTableAssociationE5186D77", + "logicalId": "eventProducerLambda100D549C", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", "startLine": 79, - "startColumn": 5, + "startColumn": 4, "endLine": 79, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPCPublicSubnet1Subnet770D4FF2'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TheVPCPublicSubnet1DefaultRoute6D26543F", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.DestinationCidrBlock", - "category": "Best Practice", - "startLine": 90, - "startColumn": 5, - "endLine": 90, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TheVPCPublicSubnet1DefaultRoute6D26543F", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 94, - "startColumn": 5, - "endLine": 94, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPCPublicSubnet1RouteTable17DA183D'" - } + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'eventConsumer1LambdaServiceRoleC8CCBFC5' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "TheVPCPublicSubnet1NATGatewayC61D892B", + "logicalId": "eventConsumer1Lambda4AF2292E", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 123, - "startColumn": 5, - "endLine": 123, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt TheVPCPublicSubnet1EIP4412F690.AllocationId" - } + "startLine": 142, + "startColumn": 4, + "endLine": 142, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'eventConsumer2LambdaServiceRole6B878884' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "TheVPCPublicSubnet1NATGatewayC61D892B", + "logicalId": "eventConsumer2Lambda1631C47A", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 129, - "startColumn": 5, - "endLine": 129, + "startLine": 252, + "startColumn": 4, + "endLine": 252, "endColumn": 14, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPCPublicSubnet1Subnet770D4FF2'" - } + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPublicSubnet2Subnet73F96DA9", + "logicalId": "eventConsumer1LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer1Lambda3A2F7294318BC23E", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 150, + "startLine": 181, "startColumn": 5, - "endLine": 150, - "endColumn": 22, + "endLine": 181, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -61175,143 +59349,132 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPublicSubnet2Subnet73F96DA9", + "logicalId": "eventConsumer1LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer1Lambda3A2F7294318BC23E", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 158, + "startLine": 182, "startColumn": 5, - "endLine": 158, - "endColumn": 15, + "endLine": 182, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt eventConsumer1Lambda4AF2292E.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPublicSubnet2Subnet73F96DA9", + "logicalId": "eventConsumer1LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer1Lambda3A2F7294318BC23E", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 174, + "startLine": 188, "startColumn": 5, - "endLine": 174, - "endColumn": 11, + "endLine": 188, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPC92636AB0'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPublicSubnet2RouteTable3609F42C", + "logicalId": "eventConsumer1LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer1Lambda3A2F7294318BC23E", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 191, + "startLine": 189, "startColumn": 5, - "endLine": 191, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 189, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPC92636AB0'" + "resolutionSource": "GetAtt eventConsumer1LambdaRule288E5FF9.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPublicSubnet2RouteTableAssociationB4B0A733", + "logicalId": "eventConsumer2LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer2LambdaB60B781EECB58ACF", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 202, + "startLine": 291, "startColumn": 5, - "endLine": 202, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 291, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPCPublicSubnet2RouteTable3609F42C'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPublicSubnet2RouteTableAssociationB4B0A733", + "logicalId": "eventConsumer2LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer2LambdaB60B781EECB58ACF", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 205, + "startLine": 292, "startColumn": 5, - "endLine": 205, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 292, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPCPublicSubnet2Subnet73F96DA9'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt eventConsumer2Lambda1631C47A.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPublicSubnet2DefaultRouteFEB062B2", + "logicalId": "eventConsumer2LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer2LambdaB60B781EECB58ACF", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 216, + "startLine": 298, "startColumn": 5, - "endLine": 216, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 298, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -61321,189 +59484,184 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPublicSubnet2DefaultRouteFEB062B2", + "logicalId": "eventConsumer2LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer2LambdaB60B781EECB58ACF", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 220, + "startLine": 299, "startColumn": 5, - "endLine": 220, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 299, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPCPublicSubnet2RouteTable3609F42C'" + "resolutionSource": "GetAtt eventConsumer2LambdaRule54312CB1.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet1Subnet571D3690", + "logicalId": "SampleAPIEventBridgeMultiConsumerDeploymentD1A021868a8af37caaafdc0f762b784f7555ad86", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 234, + "startLine": 551, "startColumn": 5, - "endLine": 234, - "endColumn": 22, + "endLine": 551, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SampleAPIEventBridgeMultiConsumer52DC1403'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet1Subnet571D3690", + "logicalId": "SampleAPIEventBridgeMultiConsumerDeploymentStageprodDE087A58", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 242, + "startLine": 570, "startColumn": 5, - "endLine": 242, + "endLine": 570, "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SampleAPIEventBridgeMultiConsumer52DC1403'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet1Subnet571D3690", + "logicalId": "SampleAPIEventBridgeMultiConsumerDeploymentStageprodDE087A58", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 258, + "startLine": 573, "startColumn": 5, - "endLine": 258, - "endColumn": 11, + "endLine": 573, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPC92636AB0'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet1RouteTableF6513BC2", + "logicalId": "SampleAPIEventBridgeMultiConsumeritems997C90A7", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 275, + "startLine": 585, "startColumn": 5, - "endLine": 275, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 585, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPC92636AB0'" + "resolutionSource": "GetAtt SampleAPIEventBridgeMultiConsumer52DC1403.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet1RouteTableAssociation46F1FFFC", + "logicalId": "SampleAPIEventBridgeMultiConsumeritems997C90A7", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 286, + "startLine": 591, "startColumn": 5, - "endLine": 286, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 591, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPCPrivateSubnet1RouteTableF6513BC2'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet1RouteTableAssociation46F1FFFC", + "logicalId": "SampleAPIEventBridgeMultiConsumeritems997C90A7", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 289, + "startLine": 592, "startColumn": 5, - "endLine": 289, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 592, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPCPrivateSubnet1Subnet571D3690'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "Ref to 'SampleAPIEventBridgeMultiConsumer52DC1403'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet1DefaultRouteD1B9E467", + "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitemsA86E071B", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 300, + "startLine": 603, "startColumn": 5, - "endLine": 300, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 603, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -61513,43 +59671,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet1DefaultRouteD1B9E467", + "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitemsA86E071B", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 304, + "startLine": 604, "startColumn": 5, - "endLine": 304, + "endLine": 604, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPCPrivateSubnet1RouteTableF6513BC2'" + "resolutionSource": "GetAtt eventProducerLambda100D549C.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet2SubnetCC3D7013", + "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitemsA86E071B", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 315, + "startLine": 610, "startColumn": 5, - "endLine": 315, - "endColumn": 22, + "endLine": 610, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -61559,143 +59716,133 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet2SubnetCC3D7013", + "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitemsA86E071B", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 323, + "startLine": 611, "startColumn": 5, - "endLine": 323, + "endLine": 611, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:SampleAPIEventBridgeMultiConsumer52DC1403}/{ref:SampleAPIEventBridgeMultiConsumerDeploymentStageprodDE087A58}/POST/items)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet2SubnetCC3D7013", + "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionTestApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitems910D1EE7", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 339, + "startLine": 647, "startColumn": 5, - "endLine": 339, - "endColumn": 11, + "endLine": 647, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPC92636AB0'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet2RouteTable9AC81FAC", + "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionTestApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitems910D1EE7", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 356, + "startLine": 648, "startColumn": 5, - "endLine": 356, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 648, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPC92636AB0'" + "resolutionSource": "GetAtt eventProducerLambda100D549C.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet2RouteTableAssociation336D47D1", + "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionTestApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitems910D1EE7", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 367, + "startLine": 654, "startColumn": 5, - "endLine": 367, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 654, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPCPrivateSubnet2RouteTable9AC81FAC'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet2RouteTableAssociation336D47D1", + "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionTestApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitems910D1EE7", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 370, + "startLine": 655, "startColumn": 5, - "endLine": 370, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 655, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPCPrivateSubnet2SubnetCC3D7013'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:123456789012:{ref:SampleAPIEventBridgeMultiConsumer52DC1403}/test-invoke-stage/POST/items)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet2DefaultRoute52A1F245", + "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTD2DFDA56", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 381, + "startLine": 688, "startColumn": 5, - "endLine": 381, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 688, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -61705,317 +59852,307 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCPrivateSubnet2DefaultRoute52A1F245", + "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTD2DFDA56", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 385, + "startLine": 716, "startColumn": 5, - "endLine": 385, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 716, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPCPrivateSubnet2RouteTable9AC81FAC'" + "resolutionSource": "Ref to 'SampleAPIEventBridgeMultiConsumeritems997C90A7'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TheVPCVPCGWC9B93E30", + "logicalId": "SampleAPIEventBridgeMultiConsumeritemsPOSTD2DFDA56", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 413, + "startLine": 719, "startColumn": 5, - "endLine": 413, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "endLine": 719, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'TheVPC92636AB0'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "Ref to 'SampleAPIEventBridgeMultiConsumer52DC1403'" } - } - ] - }, - "cdk/py-docker-app-with-asg-alb--RDSStack.template.json": { - "filePath": "cdk/py-docker-app-with-asg-alb--RDSStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 6, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 1, - "informational": 13, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3062", - "severity": "ERROR", - "message": "DBInstanceClass 'db.r4.large' is not valid for Engine 'mysql' EngineVersion '8.0.16'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'eventProducerLambdaServiceRoleD019EB99' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "RDSE0E96D00", + "logicalId": "eventProducerLambdaServiceRoleD019EB99", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.DBInstanceClass", - "category": "Resource", - "startLine": 96, - "startColumn": 5, - "endLine": 96, - "endColumn": 21, - "ruleDescription": "Validates RDS DB Instance Class based on Engine and EngineVersion", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'eventProducerLambda100D549C' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "eventProducerLambda100D549C", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 63, + "startColumn": 4, + "endLine": 63, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'eventConsumer1LambdaServiceRoleC8CCBFC5' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "eventConsumer1LambdaServiceRoleC8CCBFC5", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 92, + "startColumn": 4, + "endLine": 92, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'eventConsumer1Lambda4AF2292E' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RDSE0E96D00", + "logicalId": "eventConsumer1Lambda4AF2292E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 93, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 126, "startColumn": 4, - "endLine": 93, + "endLine": 126, "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'eventConsumer1LambdaRule288E5FF9' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "RDSE0E96D00", + "logicalId": "eventConsumer1LambdaRule288E5FF9", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 93, + "startLine": 154, "startColumn": 4, - "endLine": 93, + "endLine": 154, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Resource 'eventConsumer2LambdaServiceRole6B878884' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sgrds6871B7A8", + "logicalId": "eventConsumer2LambdaServiceRole6B878884", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 202, + "startColumn": 4, + "endLine": 202, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", + "message": "Resource 'eventConsumer2Lambda1631C47A' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sgrds6871B7A8", + "logicalId": "eventConsumer2Lambda1631C47A", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.GroupName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, + "startLine": 236, + "startColumn": 4, + "endLine": 236, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'eventConsumer2LambdaRule54312CB1' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sgrds6871B7A8", + "logicalId": "eventConsumer2LambdaRule54312CB1", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 24, - "startColumn": 5, - "endLine": 24, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: NetworkStack:ExportsOutputRefTheVPC92636AB00B2A4A70)" - } + "startLine": 264, + "startColumn": 4, + "endLine": 264, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SecretId' is create-only; updating it will cause resource replacement", + "message": "Resource 'testngestbucketD7155299' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RDSSecretAttachment39FC3A79", + "logicalId": "testngestbucketD7155299", "entityType": "Resource", - "resourceType": "AWS::SecretsManager::SecretTargetAttachment" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.SecretId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 79, - "startColumn": 5, - "endLine": 79, - "endColumn": 14, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'RDSSecret3683CA93'" - } + "startLine": 310, + "startColumn": 3, + "endLine": 310, + "endColumn": 27, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'DBSubnetGroupName' is create-only; updating it will cause resource replacement", + "message": "Resource 'myRoleE60D68E8' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RDSE0E96D00", + "logicalId": "myRoleE60D68E8", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.DBSubnetGroupName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 97, - "startColumn": 5, - "endLine": 97, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'RDSSubnetGroup3527AC04'" - } + "startLine": 320, + "startColumn": 4, + "endLine": 320, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'consumer3firehose' of type 'AWS::KinesisFirehose::DeliveryStream' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RDSE0E96D00", + "logicalId": "consumer3firehose", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::KinesisFirehose::DeliveryStream" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 100, - "startColumn": 5, - "endLine": 100, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 375, + "startColumn": 4, + "endLine": 375, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", + "message": "Resource 'consumer3firehoseEventsRoleECB13871' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RDSE0E96D00", + "logicalId": "consumer3firehoseEventsRoleECB13871", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.MasterUsername", - "category": "Best Practice", - "startLine": 114, - "startColumn": 5, - "endLine": 114, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:{dynamic}{ref:RDSSecret3683CA93}:SecretString:username::}})" - } - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "startLine": 401, + "startColumn": 4, + "endLine": 401, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sgrds6871B7A8' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'eventConsumer3KinesisRuleB8D02F6F' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sgrds6871B7A8", + "logicalId": "eventConsumer3KinesisRuleB8D02F6F", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Events::Rule" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 453, "startColumn": 4, - "endLine": 5, + "endLine": 453, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -62023,19 +60160,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'RDSSubnetGroup3527AC04' of type 'AWS::RDS::DBSubnetGroup' supports Tags but none are configured", + "message": "Resource 'SampleAPIEventBridgeMultiConsumer52DC1403' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RDSSubnetGroup3527AC04", + "logicalId": "SampleAPIEventBridgeMultiConsumer52DC1403", "entityType": "Resource", - "resourceType": "AWS::RDS::DBSubnetGroup" + "resourceType": "AWS::ApiGateway::RestApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 34, + "startLine": 485, "startColumn": 4, - "endLine": 34, + "endLine": 485, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -62043,19 +60180,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'RDSSecret3683CA93' of type 'AWS::SecretsManager::Secret' supports Tags but none are configured", + "message": "Resource 'SampleAPIEventBridgeMultiConsumerCloudWatchRoleE43B891E' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RDSSecret3683CA93", + "logicalId": "SampleAPIEventBridgeMultiConsumerCloudWatchRoleE43B891E", "entityType": "Resource", - "resourceType": "AWS::SecretsManager::Secret" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 51, + "startLine": 494, "startColumn": 4, - "endLine": 51, + "endLine": 494, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -62063,35 +60200,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'RDSE0E96D00' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Resource 'SampleAPIEventBridgeMultiConsumerDeploymentStageprodDE087A58' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RDSE0E96D00", + "logicalId": "SampleAPIEventBridgeMultiConsumerDeploymentStageprodDE087A58", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 93, + "startLine": 566, "startColumn": 4, - "endLine": 93, + "endLine": 566, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/py-docker-app-with-asg-alb--StorageStack.template.json": { - "filePath": "cdk/py-docker-app-with-asg-alb--StorageStack.template.json", + "cdk/py-api-sqs-lambda--ApiSqsLambdaStack.template.json": { + "filePath": "cdk/py-api-sqs-lambda--ApiSqsLambdaStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 15, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 7, + "warnings": 1, + "informational": 22, "debug": 0 }, "suppressed": 0, @@ -62100,102 +60237,109 @@ }, "diagnostics": [ { - "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)", + "ruleId": "W3005", + "severity": "WARN", + "message": "'SQSTriggerLambdaServiceRole0C427DE8' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "efsstorage", + "logicalId": "SQSTriggerLambda99F71FB3", "entityType": "Resource", - "resourceType": "AWS::EFS::FileSystem" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, + "startLine": 344, + "startColumn": 4, + "endLine": 344, "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I3013", "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)", + "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": "efsstorage", + "logicalId": "SQSQueue7674CD17", "entityType": "Resource", - "resourceType": "AWS::EFS::FileSystem" + "resourceType": "AWS::SQS::Queue" }, + "propertyPath": "Properties", "category": "Best Practice", "startLine": 3, "startColumn": 3, "endLine": 3, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endColumn": 20, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Encrypted' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "efsstorage", + "logicalId": "ApiGWDeployment621CA0B04c89657aa92ebebc2018c4cd4a761ecd", "entityType": "Resource", - "resourceType": "AWS::EFS::FileSystem" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.Encrypted", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 6, + "startLine": 113, "startColumn": 5, - "endLine": 6, + "endLine": 113, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ApiGW45519054'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgefs8B17F90D", + "logicalId": "ApiGWDeploymentStageprodDFD8EC11", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 15, + "startLine": 133, "startColumn": 5, - "endLine": 15, - "endColumn": 22, + "endLine": 133, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ApiGW45519054'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgefs8B17F90D", + "logicalId": "ApiGWDeploymentStageprodDFD8EC11", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.GroupName", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 16, + "startLine": 136, "startColumn": 5, - "endLine": 16, + "endLine": 136, "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -62205,234 +60349,115 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgefs8B17F90D", + "logicalId": "ApiGWANYD1FA3A5F", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 33, + "startLine": 149, "startColumn": 5, - "endLine": 33, - "endColumn": 11, + "endLine": 149, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: NetworkStack:ExportsOutputRefTheVPC92636AB00B2A4A70)" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'sgefs8B17F90D' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "sgefs8B17F90D", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 14, - "startColumn": 4, - "endLine": 14, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/py-dynamodb-lambda--dynamodb-lambda.template.json": { - "filePath": "cdk/py-dynamodb-lambda--dynamodb-lambda.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 11, - "counts": { - "fatal": 0, - "errors": 2, - "warnings": 2, - "informational": 15, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", - "entity": { - "logicalId": "producerlambdafunctionCE724CE7", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 123, - "startColumn": 5, - "endLine": 123, - "endColumn": 13, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.6", - "lifecycle": "end-of-life" - } - }, - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", - "entity": { - "logicalId": "consumerlambdafunction40710347", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 246, - "startColumn": 5, - "endLine": 246, - "endColumn": 13, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.6", - "lifecycle": "end-of-life" + "lifecycle": "create-only" } }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'producerlambdafunctionServiceRole5400FE21' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "producerlambdafunctionCE724CE7", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 125, - "startColumn": 4, - "endLine": 125, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'consumerlambdafunctionServiceRole116B0746' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "consumerlambdafunction40710347", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 248, - "startColumn": 4, - "endLine": 248, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "demotable002BE91A", + "logicalId": "ApiGWANYD1FA3A5F", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 12, + "startLine": 153, "startColumn": 5, - "endLine": 12, - "endColumn": 15, + "endLine": 153, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt ApiGW45519054.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "oneminuteruleAllowEventRuledynamodblambdaproducerlambdafunction1E7146624783D604", + "logicalId": "ApiGWANYD1FA3A5F", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 292, + "startLine": 159, "startColumn": 5, - "endLine": 292, - "endColumn": 12, + "endLine": 159, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ApiGW45519054'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "oneminuteruleAllowEventRuledynamodblambdaproducerlambdafunction1E7146624783D604", + "logicalId": "ApiGWexampleDE4620AC", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 293, + "startLine": 170, "startColumn": 5, - "endLine": 293, - "endColumn": 18, + "endLine": 170, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt producerlambdafunctionCE724CE7.Arn" + "resolutionSource": "GetAtt ApiGW45519054.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "oneminuteruleAllowEventRuledynamodblambdaproducerlambdafunction1E7146624783D604", + "logicalId": "ApiGWexampleDE4620AC", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 299, + "startLine": 176, "startColumn": 5, - "endLine": 299, - "endColumn": 15, + "endLine": 176, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -62442,42 +60467,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "oneminuteruleAllowEventRuledynamodblambdaproducerlambdafunction1E7146624783D604", + "logicalId": "ApiGWexampleDE4620AC", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 300, + "startLine": 177, "startColumn": 5, - "endLine": 300, + "endLine": 177, "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt oneminuteruleE9168CE5.Arn" + "resolutionSource": "Ref to 'ApiGW45519054'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "oneminuteruleAllowEventRuledynamodblambdaconsumerlambdafunction1EF0C7D6888AA909", + "logicalId": "ApiGWexamplePOST6CAE6201", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 314, + "startLine": 189, "startColumn": 5, - "endLine": 314, - "endColumn": 12, + "endLine": 189, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -62487,87 +60514,110 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "oneminuteruleAllowEventRuledynamodblambdaconsumerlambdafunction1EF0C7D6888AA909", + "logicalId": "ApiGWexamplePOST6CAE6201", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 315, + "startLine": 246, "startColumn": 5, - "endLine": 315, - "endColumn": 18, + "endLine": 246, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt consumerlambdafunction40710347.Arn" + "resolutionSource": "Ref to 'ApiGWexampleDE4620AC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "oneminuteruleAllowEventRuledynamodblambdaconsumerlambdafunction1EF0C7D6888AA909", + "logicalId": "ApiGWexamplePOST6CAE6201", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 321, + "startLine": 249, "startColumn": 5, - "endLine": 321, + "endLine": 249, "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ApiGW45519054'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "oneminuteruleAllowEventRuledynamodblambdaconsumerlambdafunction1EF0C7D6888AA909", + "logicalId": "SQSTriggerLambdaSqsEventSourceApiSqsLambdaStackSQSQueue975096D28FB9A750", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.EventSourceArn", "category": "Best Practice", - "startLine": 322, + "startLine": 358, "startColumn": 5, - "endLine": 322, - "endColumn": 15, + "endLine": 358, + "endColumn": 20, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt oneminuteruleE9168CE5.Arn" + "resolutionSource": "GetAtt SQSQueue7674CD17.Arn" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'demotable002BE91A' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'SQSQueue7674CD17' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "demotable002BE91A", + "logicalId": "SQSQueue7674CD17", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::SQS::Queue" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 20, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'RestAPIRoleA3B4EFA3' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "RestAPIRoleA3B4EFA3", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 13, "startColumn": 4, - "endLine": 5, + "endLine": 13, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -62575,19 +60625,39 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'producerlambdafunctionServiceRole5400FE21' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'ApiGW45519054' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "producerlambdafunctionServiceRole5400FE21", + "logicalId": "ApiGW45519054", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 47, + "startColumn": 4, + "endLine": 47, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ApiGWCloudWatchRole51A9A431' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ApiGWCloudWatchRole51A9A431", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 31, + "startLine": 56, "startColumn": 4, - "endLine": 31, + "endLine": 56, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -62595,19 +60665,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'producerlambdafunctionCE724CE7' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'ApiGWDeploymentStageprodDFD8EC11' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "producerlambdafunctionCE724CE7", + "logicalId": "ApiGWDeploymentStageprodDFD8EC11", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 102, + "startLine": 129, "startColumn": 4, - "endLine": 102, + "endLine": 129, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -62615,19 +60685,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'consumerlambdafunctionServiceRole116B0746' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'SQSTriggerLambdaServiceRole0C427DE8' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "consumerlambdafunctionServiceRole116B0746", + "logicalId": "SQSTriggerLambdaServiceRole0C427DE8", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 138, + "startLine": 259, "startColumn": 4, - "endLine": 138, + "endLine": 259, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -62635,19 +60705,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'consumerlambdafunction40710347' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'SQSTriggerLambda99F71FB3' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "consumerlambdafunction40710347", + "logicalId": "SQSTriggerLambda99F71FB3", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 225, + "startLine": 328, "startColumn": 4, - "endLine": 225, + "endLine": 328, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -62655,35 +60725,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'oneminuteruleE9168CE5' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Resource 'SQSTriggerLambdaSqsEventSourceApiSqsLambdaStackSQSQueue975096D28FB9A750' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "oneminuteruleE9168CE5", + "logicalId": "SQSTriggerLambdaSqsEventSourceApiSqsLambdaStackSQSQueue975096D28FB9A750", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::Lambda::EventSourceMapping" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 261, + "startLine": 357, "startColumn": 4, - "endLine": 261, + "endLine": 357, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/py-ec2-cloudwatch--ec2-cloudwatch.template.json": { - "filePath": "cdk/py-ec2-cloudwatch--ec2-cloudwatch.template.json", + "cdk/py-athena-s3-glue--DemoAthenaS3GlueStack.template.json": { + "filePath": "cdk/py-athena-s3-glue--DemoAthenaS3GlueStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 43, + "resourcesScanned": 21, "counts": { "fatal": 0, - "errors": 1, - "warnings": 3, - "informational": 74, + "errors": 0, + "warnings": 4, + "informational": 23, "debug": 0 }, "suppressed": 0, @@ -62692,100 +60762,152 @@ }, "diagnostics": [ { - "ruleId": "E3628", - "severity": "ERROR", - "message": "'Write a EC2 instance type' is not valid in any region", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "WebInstanceF774E10D", + "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.InstanceType", - "category": "Resource", - "startLine": 758, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 158, "startColumn": 5, - "endLine": 758, - "endColumn": 18, - "ruleDescription": "Validate EC2 instance types based on region", - "phase": "LINT" + "endLine": 158, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 502, + "startColumn": 5, + "endLine": 502, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.9", + "lifecycle": "deprecated" + } }, { "ruleId": "W3005", "severity": "WARN", - "message": "'AWSb4cf1abd4e4f4bc699441af7ccd9ec37ServiceRole9FFE9C50' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "AWSb4cf1abd4e4f4bc699441af7ccd9ec371511E620", + "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 925, + "startLine": 172, "startColumn": 4, - "endLine": 925, + "endLine": 172, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "W9003", + "ruleId": "W3005", "severity": "WARN", - "message": "'30' is not of type 'integer' - automatically coerced (string to integer)", + "message": "'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "WebInstanceF774E10D", + "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.VolumeSize", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 746, - "startColumn": 8, - "endLine": 746, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 511, + "startColumn": 4, + "endLine": 511, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WebInstanceF774E10D", + "logicalId": "logsbucketE18563D9", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.DeleteOnTermination", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 748, - "startColumn": 8, - "endLine": 748, - "endColumn": 28, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKAC02ED99", + "logicalId": "logsbucketPolicy6C60198C", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 6, + "startLine": 41, "startColumn": 5, - "endLine": 6, - "endColumn": 15, + "endLine": 41, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'logsbucketE18563D9'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "queryoutputbucket3DDDB997", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.BucketName", + "category": "Best Practice", + "startLine": 184, + "startColumn": 5, + "endLine": 184, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -62795,41 +60917,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKAC02ED99", + "logicalId": "queryoutputbucketPolicy2BC02580", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 9, + "startLine": 215, "startColumn": 5, - "endLine": 9, - "endColumn": 21, + "endLine": 215, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'queryoutputbucket3DDDB997'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'Content' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet1SubnetE7F939D2", + "logicalId": "samplefilesAwsCliLayerCFFFB375", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Content", "category": "Best Practice", - "startLine": 24, + "startLine": 292, "startColumn": 5, - "endLine": 24, - "endColumn": 22, + "endLine": 292, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -62839,19 +60963,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet1SubnetE7F939D2", + "logicalId": "samplefilesAwsCliLayerCFFFB375", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 32, + "startLine": 298, "startColumn": 5, - "endLine": 32, - "endColumn": 15, + "endLine": 298, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -62861,121 +60986,112 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet1SubnetE7F939D2", + "logicalId": "gluecrawlerroleB13EEB29", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 48, + "startLine": 555, "startColumn": 5, - "endLine": 48, - "endColumn": 11, + "endLine": 555, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet1RouteTable0BDD81D8", + "logicalId": "logscrawler", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::Glue::Crawler" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 65, + "startLine": 571, "startColumn": 5, - "endLine": 65, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 571, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-glue.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet1RouteTableAssociation616E7197", + "logicalId": "logauditingworkgroup", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Athena::WorkGroup" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 76, + "startLine": 618, "startColumn": 5, - "endLine": 76, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 618, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet1RouteTable0BDD81D8'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'Database' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet1RouteTableAssociation616E7197", + "logicalId": "producteventsbydatequery", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Athena::NamedQuery" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Database", "category": "Best Practice", - "startLine": 79, + "startLine": 651, "startColumn": 5, - "endLine": 79, + "endLine": 651, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet1SubnetE7F939D2'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet1DefaultRoute1FF73EA6", + "logicalId": "producteventsbydatequery", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Athena::NamedQuery" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 90, + "startLine": 652, "startColumn": 5, - "endLine": 90, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 652, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -62985,89 +61101,89 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'QueryString' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet1DefaultRoute1FF73EA6", + "logicalId": "producteventsbydatequery", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Athena::NamedQuery" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.QueryString", "category": "Best Practice", - "startLine": 94, + "startLine": 653, "startColumn": 5, - "endLine": 94, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 653, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet1RouteTable0BDD81D8'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Property 'WorkGroup' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet1NATGateway291FE40B", + "logicalId": "producteventsbydatequery", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::Athena::NamedQuery" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.WorkGroup", "category": "Best Practice", - "startLine": 123, + "startLine": 654, "startColumn": 5, - "endLine": 123, - "endColumn": 18, + "endLine": 654, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcFromCDKPublicSubnet1EIP637D1D3D.AllocationId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'Database' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet1NATGateway291FE40B", + "logicalId": "usereventsbydatequery", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::Athena::NamedQuery" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Database", "category": "Best Practice", - "startLine": 129, + "startLine": 666, "startColumn": 5, - "endLine": 129, + "endLine": 666, "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet1SubnetE7F939D2'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet2SubnetBDC76372", + "logicalId": "usereventsbydatequery", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Athena::NamedQuery" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 150, + "startLine": 667, "startColumn": 5, - "endLine": 150, - "endColumn": 22, + "endLine": 667, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -63077,19 +61193,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'QueryString' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet2SubnetBDC76372", + "logicalId": "usereventsbydatequery", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Athena::NamedQuery" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.QueryString", "category": "Best Practice", - "startLine": 158, + "startLine": 668, "startColumn": 5, - "endLine": 158, - "endColumn": 15, + "endLine": 668, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -63099,121 +61216,112 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'WorkGroup' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet2SubnetBDC76372", + "logicalId": "usereventsbydatequery", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Athena::NamedQuery" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.WorkGroup", "category": "Best Practice", - "startLine": 174, + "startLine": 669, "startColumn": 5, - "endLine": 174, - "endColumn": 11, + "endLine": 669, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Database' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet2RouteTableF7A722BD", + "logicalId": "alleventsbyuserIdquery", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::Athena::NamedQuery" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Database", "category": "Best Practice", - "startLine": 191, + "startLine": 681, "startColumn": 5, - "endLine": 191, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 681, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet2RouteTableAssociation163F9AFA", + "logicalId": "alleventsbyuserIdquery", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Athena::NamedQuery" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 202, + "startLine": 682, "startColumn": 5, - "endLine": 202, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 682, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet2RouteTableF7A722BD'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'QueryString' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet2RouteTableAssociation163F9AFA", + "logicalId": "alleventsbyuserIdquery", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Athena::NamedQuery" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.QueryString", "category": "Best Practice", - "startLine": 205, + "startLine": 683, "startColumn": 5, - "endLine": 205, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 683, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet2SubnetBDC76372'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'WorkGroup' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet2DefaultRouteC022B913", + "logicalId": "alleventsbyuserIdquery", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Athena::NamedQuery" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.WorkGroup", "category": "Best Practice", - "startLine": 216, + "startLine": 684, "startColumn": 5, - "endLine": 216, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 684, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -63221,91 +61329,104 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet2DefaultRouteC022B913", + "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 220, - "startColumn": 5, - "endLine": 220, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet2RouteTableF7A722BD'" - } + "startLine": 117, + "startColumn": 4, + "endLine": 117, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Resource 'CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet2NATGateway3450887A", + "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 249, - "startColumn": 5, - "endLine": 249, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcFromCDKPublicSubnet2EIP09D8D9CE.AllocationId" - } + "startLine": 142, + "startColumn": 4, + "endLine": 142, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/py-datasync-s3--cdk-datasync-s3-to-s3-iam.template.json": { + "filePath": "cdk/py-datasync-s3--cdk-datasync-s3-to-s3-iam.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 8, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPublicSubnet2NATGateway3450887A", + "logicalId": "CDKDataSyncS3AccessRole0C49AEBFA", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 255, + "startLine": 19, "startColumn": 5, - "endLine": 255, + "endLine": 19, "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet2SubnetBDC76372'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet1SubnetE081A3F6", + "logicalId": "CDKDataSyncS3Policy034C77CD2", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 276, + "startLine": 55, "startColumn": 5, - "endLine": 276, - "endColumn": 22, + "endLine": 55, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -63315,19 +61436,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet1SubnetE081A3F6", + "logicalId": "CDKDataSyncS3Policy034C77CD2", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 284, + "startLine": 56, "startColumn": 5, - "endLine": 284, - "endColumn": 15, + "endLine": 56, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -63337,167 +61459,186 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet1SubnetE081A3F6", + "logicalId": "CDKDataSyncS3AccessRole18E349368", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 300, + "startLine": 83, "startColumn": 5, - "endLine": 300, - "endColumn": 11, + "endLine": 83, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet1RouteTableB5578A45", + "logicalId": "CDKDataSyncS3Policy1E7D7BFA5", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 317, + "startLine": 119, "startColumn": 5, - "endLine": 317, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 119, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet1RouteTableAssociation7F2E7FF7", + "logicalId": "CDKDataSyncS3Policy1E7D7BFA5", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 328, + "startLine": 120, "startColumn": 5, - "endLine": 328, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 120, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPrivateSubnet1RouteTableB5578A45'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'CDKDataSyncS3AccessRole0C49AEBFA' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet1RouteTableAssociation7F2E7FF7", + "logicalId": "CDKDataSyncS3AccessRole0C49AEBFA", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 331, - "startColumn": 5, - "endLine": 331, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPrivateSubnet1SubnetE081A3F6'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'CDKDataSyncS3AccessRole18E349368' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet1DefaultRoute3081953E", + "logicalId": "CDKDataSyncS3AccessRole18E349368", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 342, + "startLine": 69, + "startColumn": 4, + "endLine": 69, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/py-datasync-s3--cdk-datasync-s3-to-s3.template.json": { + "filePath": "cdk/py-datasync-s3--cdk-datasync-s3-to-s3.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 7, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'S3BucketArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", + "entity": { + "logicalId": "DataSyncS3Location0", + "entityType": "Resource", + "resourceType": "AWS::DataSync::LocationS3" + }, + "propertyPath": "Properties.S3BucketArn", + "category": "Best Practice", + "startLine": 11, "startColumn": 5, - "endLine": 342, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 11, + "endColumn": 17, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'S3BucketArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet1DefaultRoute3081953E", + "logicalId": "DataSyncS3Location1", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::DataSync::LocationS3" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.S3BucketArn", "category": "Best Practice", - "startLine": 346, + "startLine": 26, "startColumn": 5, - "endLine": 346, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPrivateSubnet1RouteTableB5578A45'" - } + "endLine": 26, + "endColumn": 17, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'S3BucketArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet2Subnet6D9A025D", + "logicalId": "DataSyncS3Location0", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DataSync::LocationS3" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.S3BucketArn", "category": "Best Practice", - "startLine": 357, + "startLine": 11, "startColumn": 5, - "endLine": 357, - "endColumn": 22, + "endLine": 11, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -63507,19 +61648,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'S3BucketArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet2Subnet6D9A025D", + "logicalId": "DataSyncS3Location1", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DataSync::LocationS3" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.S3BucketArn", "category": "Best Practice", - "startLine": 365, + "startLine": 26, "startColumn": 5, - "endLine": 365, - "endColumn": 15, + "endLine": 26, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -63529,194 +61671,258 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationLocationArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet2Subnet6D9A025D", + "logicalId": "DataSyncS3toS3Task", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DataSync::Task" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.DestinationLocationArn", "category": "Best Practice", - "startLine": 381, + "startLine": 37, "startColumn": 5, - "endLine": 381, - "endColumn": 11, + "endLine": 37, + "endColumn": 28, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" + "resolutionSource": "GetAtt DataSyncS3Location0.LocationArn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceLocationArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet2RouteTable5CB16C6C", + "logicalId": "DataSyncS3toS3Task", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::DataSync::Task" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.SourceLocationArn", "category": "Best Practice", - "startLine": 398, + "startLine": 43, "startColumn": 5, - "endLine": 398, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 43, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-datasync.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" + "resolutionSource": "GetAtt DataSyncS3Location1.LocationArn" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'DataSyncS3Location0' of type 'AWS::DataSync::LocationS3' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet2RouteTableAssociation68ADF807", + "logicalId": "DataSyncS3Location0", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::DataSync::LocationS3" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 409, - "startColumn": 5, - "endLine": 409, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPrivateSubnet2RouteTable5CB16C6C'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DataSyncS3Location1' of type 'AWS::DataSync::LocationS3' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "DataSyncS3Location1", + "entityType": "Resource", + "resourceType": "AWS::DataSync::LocationS3" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 20, + "startColumn": 4, + "endLine": 20, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DataSyncS3toS3Task' of type 'AWS::DataSync::Task' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "DataSyncS3toS3Task", + "entityType": "Resource", + "resourceType": "AWS::DataSync::Task" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 36, + "startColumn": 4, + "endLine": 36, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/py-docker-app-with-asg-alb--ASGStack.template.json": { + "filePath": "cdk/py-docker-app-with-asg-alb--ASGStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 13, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 38, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "appasgLaunchConfig9EFFB3A3", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "category": "Deprecation", + "startLine": 91, + "startColumn": 3, + "endLine": 91, + "endColumn": 30, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet2RouteTableAssociation68ADF807", + "logicalId": "appasgInstanceSecurityGroup8B8185FA", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 412, + "startLine": 6, "startColumn": 5, - "endLine": 412, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 6, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPrivateSubnet2Subnet6D9A025D'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet2DefaultRoute0D482744", + "logicalId": "appasgInstanceSecurityGroup8B8185FA", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 423, + "startLine": 20, "startColumn": 5, - "endLine": 423, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 20, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import: NetworkStack:ExportsOutputRefTheVPC92636AB00B2A4A70)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKPrivateSubnet2DefaultRoute0D482744", + "logicalId": "appasgInstanceSecurityGroupfromASGStacksgalb85F2758980805783DB9D", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 427, + "startLine": 32, "startColumn": 5, - "endLine": 427, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 32, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPrivateSubnet2RouteTable5CB16C6C'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKVPCGW6C4E6589", + "logicalId": "appasgInstanceSecurityGroupfromASGStacksgalb85F2758980805783DB9D", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 455, + "startLine": 33, "startColumn": 5, - "endLine": 455, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "endLine": 33, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt appasgInstanceSecurityGroup8B8185FA.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ServiceName' is create-only; updating it will cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKS3EndpointF02E5219", + "logicalId": "appasgInstanceSecurityGroupfromASGStacksgalb85F2758980805783DB9D", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCEndpoint" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.ServiceName", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 474, + "startLine": 39, "startColumn": 5, - "endLine": 474, - "endColumn": 17, + "endLine": 39, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -63726,110 +61932,114 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcEndpointType' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKS3EndpointF02E5219", + "logicalId": "appasgInstanceSecurityGroupfromASGStacksgalb85F2758980805783DB9D", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCEndpoint" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.VpcEndpointType", + "propertyPath": "Properties.SourceSecurityGroupId", "category": "Best Practice", - "startLine": 492, + "startLine": 40, "startColumn": 5, - "endLine": 492, - "endColumn": 21, + "endLine": 40, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt sgalbE4BDB11E.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcFromCDKS3EndpointF02E5219", + "logicalId": "appasgInstanceSecurityGroupfromASGStacksgalb85F2758980805783DB9D", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCEndpoint" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 493, + "startLine": 46, "startColumn": 5, - "endLine": 493, - "endColumn": 11, + "endLine": 46, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BastionHostInstanceSecurityGroupE75D4274", + "logicalId": "appasgLaunchConfig9EFFB3A3", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.IamInstanceProfile", "category": "Best Practice", - "startLine": 504, + "startLine": 94, "startColumn": 5, - "endLine": 504, - "endColumn": 22, + "endLine": 94, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'appasgInstanceProfile55323240'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BastionHostInstanceSecurityGroupE75D4274", + "logicalId": "appasgLaunchConfig9EFFB3A3", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 527, + "startLine": 97, "startColumn": 5, - "endLine": 527, - "endColumn": 11, + "endLine": 97, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BastionHost30F9ED05", + "logicalId": "appasgLaunchConfig9EFFB3A3", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 605, + "startLine": 100, "startColumn": 5, - "endLine": 605, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 100, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -63839,20 +62049,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BastionHost30F9ED05", + "logicalId": "appasgLaunchConfig9EFFB3A3", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.KeyName", "category": "Best Practice", - "startLine": 616, + "startLine": 101, "startColumn": 5, - "endLine": 616, + "endLine": 101, "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -63862,90 +62072,88 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BastionHost30F9ED05", + "logicalId": "appasgLaunchConfig9EFFB3A3", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.SecurityGroups", "category": "Best Practice", - "startLine": 619, + "startLine": 102, "startColumn": 5, - "endLine": 619, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 102, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'UserData' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BastionHost30F9ED05", + "logicalId": "appasgLaunchConfig9EFFB3A3", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.SecurityGroupIds", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 620, + "startLine": 116, "startColumn": 5, - "endLine": 620, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 116, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BastionHost30F9ED05", + "logicalId": "appasgASGE5B53758", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.LaunchConfigurationName", "category": "Best Practice", - "startLine": 628, + "startLine": 130, "startColumn": 5, - "endLine": 628, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 130, + "endColumn": 29, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet1SubnetE7F939D2'" + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'appasgLaunchConfig9EFFB3A3'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BastionHost30F9ED05", + "logicalId": "appasgASGE5B53758", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.VPCZoneIdentifier", "category": "Best Practice", - "startLine": 637, + "startLine": 147, "startColumn": 5, - "endLine": 637, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 147, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -63958,15 +62166,15 @@ "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroupDD263621", + "logicalId": "sgnextcloud40AB2A88", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 652, + "startLine": 168, "startColumn": 5, - "endLine": 652, + "endLine": 168, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -63980,15 +62188,15 @@ "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroupDD263621", + "logicalId": "sgnextcloud40AB2A88", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.GroupName", "category": "Best Practice", - "startLine": 653, + "startLine": 169, "startColumn": 5, - "endLine": 653, + "endLine": 169, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -64002,39 +62210,39 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroupDD263621", + "logicalId": "sgnextcloud40AB2A88", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 684, + "startLine": 186, "startColumn": 5, - "endLine": 684, + "endLine": 186, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" + "resolutionSource": "dynamic (cross-stack import: NetworkStack:ExportsOutputRefTheVPC92636AB00B2A4A70)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebInstanceF774E10D", + "logicalId": "sgnextcloudfromASGStacksgalb85F275898080011A1DCA", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 734, + "startLine": 198, "startColumn": 5, - "endLine": 734, - "endColumn": 22, + "endLine": 198, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -64045,42 +62253,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebInstanceF774E10D", + "logicalId": "sgnextcloudfromASGStacksgalb85F275898080011A1DCA", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.BlockDeviceMappings", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 742, + "startLine": 199, "startColumn": 5, - "endLine": 742, - "endColumn": 25, + "endLine": 199, + "endColumn": 13, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt sgnextcloud40AB2A88.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebInstanceF774E10D", + "logicalId": "sgnextcloudfromASGStacksgalb85F275898080011A1DCA", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 755, + "startLine": 205, "startColumn": 5, - "endLine": 755, - "endColumn": 13, + "endLine": 205, + "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -64091,42 +62300,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebInstanceF774E10D", + "logicalId": "sgnextcloudfromASGStacksgalb85F275898080011A1DCA", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.SourceSecurityGroupId", "category": "Best Practice", - "startLine": 758, + "startLine": 206, "startColumn": 5, - "endLine": 758, - "endColumn": 18, + "endLine": 206, + "endColumn": 27, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt sgalbE4BDB11E.GroupId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebInstanceF774E10D", + "logicalId": "sgnextcloudfromASGStacksgalb85F275898080011A1DCA", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.KeyName", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 759, + "startLine": 212, "startColumn": 5, - "endLine": 759, - "endColumn": 13, + "endLine": 212, + "endColumn": 12, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -64137,89 +62347,87 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebInstanceF774E10D", + "logicalId": "sgalbE4BDB11E", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.SecurityGroupIds", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 760, + "startLine": 221, "startColumn": 5, - "endLine": 760, + "endLine": 221, "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebInstanceF774E10D", + "logicalId": "sgalbE4BDB11E", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.GroupName", "category": "Best Practice", - "startLine": 768, + "startLine": 222, "startColumn": 5, - "endLine": 768, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 222, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet1SubnetE7F939D2'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebInstanceF774E10D", + "logicalId": "sgalbE4BDB11E", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 777, + "startLine": 239, "startColumn": 5, - "endLine": 777, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 239, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import: NetworkStack:ExportsOutputRefTheVPC92636AB00B2A4A70)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ScheduleRuleAllowEventRuleec2cloudwatchScheduleRuleScheduleRuleTarget0Handler5EF9EBA726A6C94B", + "logicalId": "ALBAEE750D2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Scheme", "category": "Best Practice", - "startLine": 828, + "startLine": 256, "startColumn": 5, - "endLine": 828, + "endLine": 256, "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -64229,88 +62437,88 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ScheduleRuleAllowEventRuleec2cloudwatchScheduleRuleScheduleRuleTarget0Handler5EF9EBA726A6C94B", + "logicalId": "ALBAEE750D2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 829, + "startLine": 273, "startColumn": 5, - "endLine": 829, - "endColumn": 18, + "endLine": 273, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt AWSb4cf1abd4e4f4bc699441af7ccd9ec371511E620.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ScheduleRuleAllowEventRuleec2cloudwatchScheduleRuleScheduleRuleTarget0Handler5EF9EBA726A6C94B", + "logicalId": "ALBListener3B99FF85", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.LoadBalancerArn", "category": "Best Practice", - "startLine": 835, + "startLine": 290, "startColumn": 5, - "endLine": 835, - "endColumn": 15, + "endLine": 290, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ALBAEE750D2'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ScheduleRuleAllowEventRuleec2cloudwatchScheduleRuleScheduleRuleTarget0Handler5EF9EBA726A6C94B", + "logicalId": "ALBListenerTargetGroupD5D64FBA", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 836, + "startLine": 303, "startColumn": 5, - "endLine": 836, - "endColumn": 15, + "endLine": 303, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ScheduleRuleDA5BD877.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BackupVaultName' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackupVault3A9C5852", + "logicalId": "ALBListenerTargetGroupD5D64FBA", "entityType": "Resource", - "resourceType": "AWS::Backup::BackupVault" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.BackupVaultName", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 939, + "startLine": 304, "startColumn": 5, - "endLine": 939, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 304, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -64320,75 +62528,64 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BackupPlanId' is create-only; updating it will cause resource replacement", + "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AWSBackupPlanSelectionAF95B30F", + "logicalId": "ALBListenerTargetGroupD5D64FBA", "entityType": "Resource", - "resourceType": "AWS::Backup::BackupSelection" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.BackupPlanId", + "propertyPath": "Properties.TargetType", "category": "Best Practice", - "startLine": 1011, + "startLine": 311, "startColumn": 5, - "endLine": 1011, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 311, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt AWSBackupPlanD181A800.BackupPlanId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BackupSelection' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AWSBackupPlanSelectionAF95B30F", + "logicalId": "ALBListenerTargetGroupD5D64FBA", "entityType": "Resource", - "resourceType": "AWS::Backup::BackupSelection" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.BackupSelection", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1017, + "startLine": 312, "startColumn": 5, - "endLine": 1017, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 312, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import: NetworkStack:ExportsOutputRefTheVPC92636AB00B2A4A70)" } }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SecurityGroupDD263621' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'sgnextcloud40AB2A88' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroupDD263621", + "logicalId": "sgnextcloud40AB2A88", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 651, + "startLine": 167, "startColumn": 4, - "endLine": 651, + "endLine": 167, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -64396,19 +62593,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ScheduleRuleDA5BD877' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Resource 'sgalbE4BDB11E' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ScheduleRuleDA5BD877", + "logicalId": "sgalbE4BDB11E", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 790, + "startLine": 220, "startColumn": 4, - "endLine": 790, + "endLine": 220, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -64416,19 +62613,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'AWSb4cf1abd4e4f4bc699441af7ccd9ec37ServiceRole9FFE9C50' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'ALBAEE750D2' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AWSb4cf1abd4e4f4bc699441af7ccd9ec37ServiceRole9FFE9C50", + "logicalId": "ALBAEE750D2", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 849, + "startLine": 249, "startColumn": 4, - "endLine": 849, + "endLine": 249, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -64436,19 +62633,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'AWSb4cf1abd4e4f4bc699441af7ccd9ec371511E620' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'ALBListener3B99FF85' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AWSb4cf1abd4e4f4bc699441af7ccd9ec371511E620", + "logicalId": "ALBListener3B99FF85", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 907, + "startLine": 281, "startColumn": 4, - "endLine": 907, + "endLine": 281, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -64456,35 +62653,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'AWSBackupPlanSelectionRole2A44F724' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'ALBListenerTargetGroupD5D64FBA' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AWSBackupPlanSelectionRole2A44F724", + "logicalId": "ALBListenerTargetGroupD5D64FBA", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 976, + "startLine": 302, "startColumn": 4, - "endLine": 976, + "endLine": 302, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStack.template.json": { - "filePath": "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStack.template.json", + "cdk/py-docker-app-with-asg-alb--NetworkStack.template.json": { + "filePath": "cdk/py-docker-app-with-asg-alb--NetworkStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 29, + "resourcesScanned": 22, "counts": { "fatal": 0, "errors": 0, - "warnings": 1, - "informational": 43, + "warnings": 0, + "informational": 37, "debug": 0 }, "suppressed": 0, @@ -64492,33 +62689,13 @@ "severityLevel": "DEBUG" }, "diagnostics": [ - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 589, - "startColumn": 4, - "endLine": 589, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCD8B6F71D", + "logicalId": "TheVPC92636AB0", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, @@ -64540,7 +62717,7 @@ "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCD8B6F71D", + "logicalId": "TheVPC92636AB0", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, @@ -64562,7 +62739,7 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet1Subnet2B93B79E", + "logicalId": "TheVPCPublicSubnet1Subnet770D4FF2", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -64584,7 +62761,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet1Subnet2B93B79E", + "logicalId": "TheVPCPublicSubnet1Subnet770D4FF2", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -64606,7 +62783,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet1Subnet2B93B79E", + "logicalId": "TheVPCPublicSubnet1Subnet770D4FF2", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -64620,7 +62797,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" + "resolutionSource": "Ref to 'TheVPC92636AB0'" } }, { @@ -64629,7 +62806,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet1RouteTableC0F77754", + "logicalId": "TheVPCPublicSubnet1RouteTable17DA183D", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, @@ -64644,7 +62821,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" + "resolutionSource": "Ref to 'TheVPC92636AB0'" } }, { @@ -64653,7 +62830,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet1RouteTableAssociation902A4A27", + "logicalId": "TheVPCPublicSubnet1RouteTableAssociationE5186D77", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -64668,7 +62845,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet1RouteTableC0F77754'", + "resolutionSource": "Ref to 'TheVPCPublicSubnet1RouteTable17DA183D'", "extra": { "replacement_strategy": "delete_then_create" } @@ -64680,7 +62857,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet1RouteTableAssociation902A4A27", + "logicalId": "TheVPCPublicSubnet1RouteTableAssociationE5186D77", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -64695,7 +62872,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet1Subnet2B93B79E'", + "resolutionSource": "Ref to 'TheVPCPublicSubnet1Subnet770D4FF2'", "extra": { "replacement_strategy": "delete_then_create" } @@ -64707,7 +62884,7 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet1DefaultRoute1092379D", + "logicalId": "TheVPCPublicSubnet1DefaultRoute6D26543F", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -64730,7 +62907,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet1DefaultRoute1092379D", + "logicalId": "TheVPCPublicSubnet1DefaultRoute6D26543F", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, @@ -64745,7 +62922,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet1RouteTableC0F77754'" + "resolutionSource": "Ref to 'TheVPCPublicSubnet1RouteTable17DA183D'" } }, { @@ -64754,7 +62931,7 @@ "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet1NATGatewayBD9137E7", + "logicalId": "TheVPCPublicSubnet1NATGatewayC61D892B", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, @@ -64768,7 +62945,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ServiceConnectVPCPublicSubnet1EIPB85E54D1.AllocationId" + "resolutionSource": "GetAtt TheVPCPublicSubnet1EIP4412F690.AllocationId" } }, { @@ -64777,7 +62954,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet1NATGatewayBD9137E7", + "logicalId": "TheVPCPublicSubnet1NATGatewayC61D892B", "entityType": "Resource", "resourceType": "AWS::EC2::NatGateway" }, @@ -64791,7 +62968,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet1Subnet2B93B79E'" + "resolutionSource": "Ref to 'TheVPCPublicSubnet1Subnet770D4FF2'" } }, { @@ -64800,7 +62977,7 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet2Subnet285316DC", + "logicalId": "TheVPCPublicSubnet2Subnet73F96DA9", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -64822,7 +62999,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet2Subnet285316DC", + "logicalId": "TheVPCPublicSubnet2Subnet73F96DA9", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -64844,7 +63021,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet2Subnet285316DC", + "logicalId": "TheVPCPublicSubnet2Subnet73F96DA9", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -64858,7 +63035,199 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" + "resolutionSource": "Ref to 'TheVPC92636AB0'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "TheVPCPublicSubnet2RouteTable3609F42C", + "entityType": "Resource", + "resourceType": "AWS::EC2::RouteTable" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 191, + "startColumn": 5, + "endLine": 191, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'TheVPC92636AB0'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "TheVPCPublicSubnet2RouteTableAssociationB4B0A733", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 202, + "startColumn": 5, + "endLine": 202, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'TheVPCPublicSubnet2RouteTable3609F42C'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "TheVPCPublicSubnet2RouteTableAssociationB4B0A733", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 205, + "startColumn": 5, + "endLine": 205, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'TheVPCPublicSubnet2Subnet73F96DA9'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "TheVPCPublicSubnet2DefaultRouteFEB062B2", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" + }, + "propertyPath": "Properties.DestinationCidrBlock", + "category": "Best Practice", + "startLine": 216, + "startColumn": 5, + "endLine": 216, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "TheVPCPublicSubnet2DefaultRouteFEB062B2", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 220, + "startColumn": 5, + "endLine": 220, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'TheVPCPublicSubnet2RouteTable3609F42C'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "TheVPCPrivateSubnet1Subnet571D3690", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 234, + "startColumn": 5, + "endLine": 234, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "TheVPCPrivateSubnet1Subnet571D3690", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 242, + "startColumn": 5, + "endLine": 242, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "TheVPCPrivateSubnet1Subnet571D3690", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 258, + "startColumn": 5, + "endLine": 258, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'TheVPC92636AB0'" } }, { @@ -64867,22 +63236,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet2RouteTable5A43F858", + "logicalId": "TheVPCPrivateSubnet1RouteTableF6513BC2", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 191, + "startLine": 275, "startColumn": 5, - "endLine": 191, + "endLine": 275, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" + "resolutionSource": "Ref to 'TheVPC92636AB0'" } }, { @@ -64891,22 +63260,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet2RouteTableAssociation4EB0B814", + "logicalId": "TheVPCPrivateSubnet1RouteTableAssociation46F1FFFC", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 202, + "startLine": 286, "startColumn": 5, - "endLine": 202, + "endLine": 286, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet2RouteTable5A43F858'", + "resolutionSource": "Ref to 'TheVPCPrivateSubnet1RouteTableF6513BC2'", "extra": { "replacement_strategy": "delete_then_create" } @@ -64918,22 +63287,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet2RouteTableAssociation4EB0B814", + "logicalId": "TheVPCPrivateSubnet1RouteTableAssociation46F1FFFC", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 205, + "startLine": 289, "startColumn": 5, - "endLine": 205, + "endLine": 289, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet2Subnet285316DC'", + "resolutionSource": "Ref to 'TheVPCPrivateSubnet1Subnet571D3690'", "extra": { "replacement_strategy": "delete_then_create" } @@ -64945,15 +63314,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet2DefaultRoute5E2EBF45", + "logicalId": "TheVPCPrivateSubnet1DefaultRouteD1B9E467", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 216, + "startLine": 300, "startColumn": 5, - "endLine": 216, + "endLine": 300, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64968,68 +63337,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet2DefaultRoute5E2EBF45", + "logicalId": "TheVPCPrivateSubnet1DefaultRouteD1B9E467", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 220, + "startLine": 304, "startColumn": 5, - "endLine": 220, + "endLine": 304, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet2RouteTable5A43F858'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet2NATGatewayCDA3DB43", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.AllocationId", - "category": "Best Practice", - "startLine": 249, - "startColumn": 5, - "endLine": 249, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ServiceConnectVPCPublicSubnet2EIP04E6F20C.AllocationId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ServiceConnectVPCPublicSubnet2NATGatewayCDA3DB43", - "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 255, - "startColumn": 5, - "endLine": 255, - "endColumn": 14, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet2Subnet285316DC'" + "resolutionSource": "Ref to 'TheVPCPrivateSubnet1RouteTableF6513BC2'" } }, { @@ -65038,15 +63361,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet1SubnetD04D043D", + "logicalId": "TheVPCPrivateSubnet2SubnetCC3D7013", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 276, + "startLine": 315, "startColumn": 5, - "endLine": 276, + "endLine": 315, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -65060,15 +63383,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet1SubnetD04D043D", + "logicalId": "TheVPCPrivateSubnet2SubnetCC3D7013", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 284, + "startLine": 323, "startColumn": 5, - "endLine": 284, + "endLine": 323, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -65082,21 +63405,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet1SubnetD04D043D", + "logicalId": "TheVPCPrivateSubnet2SubnetCC3D7013", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 300, + "startLine": 339, "startColumn": 5, - "endLine": 300, + "endLine": 339, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" + "resolutionSource": "Ref to 'TheVPC92636AB0'" } }, { @@ -65105,22 +63428,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet1RouteTable3887499F", + "logicalId": "TheVPCPrivateSubnet2RouteTable9AC81FAC", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 317, + "startLine": 356, "startColumn": 5, - "endLine": 317, + "endLine": 356, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" + "resolutionSource": "Ref to 'TheVPC92636AB0'" } }, { @@ -65129,22 +63452,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet1RouteTableAssociation843B9F02", + "logicalId": "TheVPCPrivateSubnet2RouteTableAssociation336D47D1", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 328, + "startLine": 367, "startColumn": 5, - "endLine": 328, + "endLine": 367, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCPrivateSubnet1RouteTable3887499F'", + "resolutionSource": "Ref to 'TheVPCPrivateSubnet2RouteTable9AC81FAC'", "extra": { "replacement_strategy": "delete_then_create" } @@ -65156,22 +63479,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet1RouteTableAssociation843B9F02", + "logicalId": "TheVPCPrivateSubnet2RouteTableAssociation336D47D1", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 331, + "startLine": 370, "startColumn": 5, - "endLine": 331, + "endLine": 370, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCPrivateSubnet1SubnetD04D043D'", + "resolutionSource": "Ref to 'TheVPCPrivateSubnet2SubnetCC3D7013'", "extra": { "replacement_strategy": "delete_then_create" } @@ -65183,15 +63506,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet1DefaultRouteCFD77CC9", + "logicalId": "TheVPCPrivateSubnet2DefaultRoute52A1F245", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 342, + "startLine": 381, "startColumn": 5, - "endLine": 342, + "endLine": 381, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65206,62 +63529,144 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet1DefaultRouteCFD77CC9", + "logicalId": "TheVPCPrivateSubnet2DefaultRoute52A1F245", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 346, + "startLine": 385, "startColumn": 5, - "endLine": 346, + "endLine": 385, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCPrivateSubnet1RouteTable3887499F'" + "resolutionSource": "Ref to 'TheVPCPrivateSubnet2RouteTable9AC81FAC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet2Subnet5FF59B97", + "logicalId": "TheVPCVPCGWC9B93E30", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 357, + "startLine": 413, "startColumn": 5, - "endLine": 357, - "endColumn": 22, + "endLine": 413, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'TheVPC92636AB0'", + "extra": { + "replacement_strategy": "delete_then_create" + } } + } + ] + }, + "cdk/py-docker-app-with-asg-alb--RDSStack.template.json": { + "filePath": "cdk/py-docker-app-with-asg-alb--RDSStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 6, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 1, + "informational": 13, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3062", + "severity": "ERROR", + "message": "DBInstanceClass 'db.r4.large' is not valid for Engine 'mysql' EngineVersion '8.0.16'", + "source": "CFN_LINT", + "entity": { + "logicalId": "RDSE0E96D00", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.DBInstanceClass", + "category": "Resource", + "startLine": 96, + "startColumn": 5, + "endLine": 96, + "endColumn": 21, + "ruleDescription": "Validates RDS DB Instance Class based on Engine and EngineVersion", + "phase": "LINT" + }, + { + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", + "entity": { + "logicalId": "RDSE0E96D00", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 93, + "startColumn": 4, + "endLine": 93, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "RDSE0E96D00", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 93, + "startColumn": 4, + "endLine": 93, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet2Subnet5FF59B97", + "logicalId": "sgrds6871B7A8", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 365, + "startLine": 6, "startColumn": 5, - "endLine": 365, - "endColumn": 15, + "endLine": 6, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -65271,24 +63676,23 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet2Subnet5FF59B97", + "logicalId": "sgrds6871B7A8", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.GroupName", "category": "Best Practice", - "startLine": 381, + "startLine": 7, "startColumn": 5, - "endLine": 381, - "endColumn": 11, + "endLine": 7, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" + "lifecycle": "create-only" } }, { @@ -65297,168 +63701,142 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet2RouteTable30EC1F5C", + "logicalId": "sgrds6871B7A8", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 398, + "startLine": 24, "startColumn": 5, - "endLine": 398, + "endLine": 24, "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" + "resolutionSource": "dynamic (cross-stack import: NetworkStack:ExportsOutputRefTheVPC92636AB00B2A4A70)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'SecretId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet2RouteTableAssociationFF89750A", + "logicalId": "RDSSecretAttachment39FC3A79", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::SecretsManager::SecretTargetAttachment" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.SecretId", "category": "Best Practice", - "startLine": 409, + "startLine": 79, "startColumn": 5, - "endLine": 409, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 79, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCPrivateSubnet2RouteTable30EC1F5C'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "Ref to 'RDSSecret3683CA93'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'DBSubnetGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet2RouteTableAssociationFF89750A", + "logicalId": "RDSE0E96D00", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.DBSubnetGroupName", "category": "Best Practice", - "startLine": 412, + "startLine": 97, "startColumn": 5, - "endLine": 412, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 97, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCPrivateSubnet2Subnet5FF59B97'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "Ref to 'RDSSubnetGroup3527AC04'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet2DefaultRoute85237B46", + "logicalId": "RDSE0E96D00", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 423, + "startLine": 100, "startColumn": 5, - "endLine": 423, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 100, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ServiceConnectVPCPrivateSubnet2DefaultRoute85237B46", + "logicalId": "RDSE0E96D00", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 427, + "startLine": 114, "startColumn": 5, - "endLine": 427, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 114, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCPrivateSubnet2RouteTable30EC1F5C'" + "resolutionSource": "dynamic (Join:{dynamic}{ref:RDSSecret3683CA93}:SecretString:username::}})" } }, { - "ruleId": "I9001", + "ruleId": "I9003", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", "source": "ENGINE", - "entity": { - "logicalId": "ServiceConnectVPCVPCGW60A84FEA", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" - }, - "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 455, - "startColumn": 5, - "endLine": 455, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'sgrds6871B7A8' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0", + "logicalId": "sgrds6871B7A8", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 490, + "startLine": 5, "startColumn": 4, - "endLine": 490, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -65466,19 +63844,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'RDSSubnetGroup3527AC04' of type 'AWS::RDS::DBSubnetGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", + "logicalId": "RDSSubnetGroup3527AC04", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBSubnetGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 562, + "startLine": 34, "startColumn": 4, - "endLine": 562, + "endLine": 34, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -65486,19 +63864,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EcrStackNestedStackEcrStackNestedStackResource706AA777' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Resource 'RDSSecret3683CA93' of type 'AWS::SecretsManager::Secret' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EcrStackNestedStackEcrStackNestedStackResource706AA777", + "logicalId": "RDSSecret3683CA93", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::SecretsManager::Secret" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 600, + "startLine": 51, "startColumn": 4, - "endLine": 600, + "endLine": 51, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -65506,35 +63884,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EcsStackNestedStackEcsStackNestedStackResource48283A58' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Resource 'RDSE0E96D00' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EcsStackNestedStackEcsStackNestedStackResource48283A58", + "logicalId": "RDSE0E96D00", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 632, + "startLine": 93, "startColumn": 4, - "endLine": 632, + "endLine": 93, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStackEcrStack6B6F0F99.nested.template.json": { - "filePath": "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStackEcrStack6B6F0F99.nested.template.json", + "cdk/py-docker-app-with-asg-alb--StorageStack.template.json": { + "filePath": "cdk/py-docker-app-with-asg-alb--StorageStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 8, + "resourcesScanned": 3, "counts": { "fatal": 0, "errors": 0, - "warnings": 1, - "informational": 6, + "warnings": 0, + "informational": 7, "debug": 0 }, "suppressed": 0, @@ -65543,65 +63921,58 @@ }, "diagnostics": [ { - "ruleId": "W3005", - "severity": "WARN", - "message": "'CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiBServiceRole8C8B0491' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "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": "CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiB28EAD8E4", + "logicalId": "efsstorage", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EFS::FileSystem" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 163, - "startColumn": 4, - "endLine": 163, + "startLine": 3, + "startColumn": 3, + "endLine": 3, "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'RepositoryName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "FrontendRepository7D714FA2", + "logicalId": "efsstorage", "entityType": "Resource", - "resourceType": "AWS::ECR::Repository" + "resourceType": "AWS::EFS::FileSystem" }, - "propertyPath": "Properties.RepositoryName", "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ecr.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RepositoryName' is create-only; updating it will cause resource replacement", + "message": "Property 'Encrypted' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendDataRepositoryD361813E", + "logicalId": "efsstorage", "entityType": "Resource", - "resourceType": "AWS::ECR::Repository" + "resourceType": "AWS::EFS::FileSystem" }, - "propertyPath": "Properties.RepositoryName", + "propertyPath": "Properties.Encrypted", "category": "Best Practice", - "startLine": 17, + "startLine": 6, "startColumn": 5, - "endLine": 17, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ecr.git", + "endLine": 6, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -65609,97 +63980,104 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FrontendRepository7D714FA2' of type 'AWS::ECR::Repository' supports Tags but none are configured", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendRepository7D714FA2", + "logicalId": "sgefs8B17F90D", "entityType": "Resource", - "resourceType": "AWS::ECR::Repository" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BackendDataRepositoryD361813E' of type 'AWS::ECR::Repository' supports Tags but none are configured", + "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendDataRepositoryD361813E", + "logicalId": "sgefs8B17F90D", "entityType": "Resource", - "resourceType": "AWS::ECR::Repository" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.GroupName", "category": "Best Practice", "startLine": 16, - "startColumn": 4, + "startColumn": 5, "endLine": 16, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiBServiceRole8C8B0491' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiBServiceRole8C8B0491", + "logicalId": "sgefs8B17F90D", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 70, - "startColumn": 4, - "endLine": 70, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 33, + "startColumn": 5, + "endLine": 33, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import: NetworkStack:ExportsOutputRefTheVPC92636AB00B2A4A70)" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiB28EAD8E4' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'sgefs8B17F90D' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiB28EAD8E4", + "logicalId": "sgefs8B17F90D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 144, + "startLine": 14, "startColumn": 4, - "endLine": 144, + "endLine": 14, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStackEcsStack19C526D0.nested.template.json": { - "filePath": "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStackEcsStack19C526D0.nested.template.json", + "cdk/py-dynamodb-lambda--dynamodb-lambda.template.json": { + "filePath": "cdk/py-dynamodb-lambda--dynamodb-lambda.template.json", "status": "OK", "metadata": { - "resourcesScanned": 20, + "resourcesScanned": 11, "counts": { "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 61, + "errors": 2, + "warnings": 2, + "informational": 15, "debug": 0 }, "suppressed": 0, @@ -65708,112 +64086,129 @@ }, "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "ECSCluster7D463CD4", + "logicalId": "producerlambdafunctionCE724CE7", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ClusterName", - "category": "Best Practice", - "startLine": 6, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 123, "startColumn": 5, - "endLine": 6, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 123, + "endColumn": 13, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "python3.6", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "ECSClusterDefaultServiceDiscoveryNamespace5AC2D2BE", + "logicalId": "consumerlambdafunction40710347", "entityType": "Resource", - "resourceType": "AWS::ServiceDiscovery::PrivateDnsNamespace" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 29, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 246, "startColumn": 5, - "endLine": 29, - "endColumn": 10, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 246, + "endColumn": 13, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "python3.6", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Vpc' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'producerlambdafunctionServiceRole5400FE21' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "ECSClusterDefaultServiceDiscoveryNamespace5AC2D2BE", + "logicalId": "producerlambdafunctionCE724CE7", "entityType": "Resource", - "resourceType": "AWS::ServiceDiscovery::PrivateDnsNamespace" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Vpc", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 30, - "startColumn": 5, - "endLine": 30, - "endColumn": 9, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'referencetoCdkExamplesServiceConnectStackServiceConnectVPCE46B65DFRef' (type String)" - } + "startLine": 125, + "startColumn": 4, + "endLine": 125, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'consumerlambdafunctionServiceRole116B0746' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "consumerlambdafunction40710347", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 248, + "startColumn": 4, + "endLine": 248, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ECSServiceLogGroupD961AA4E", + "logicalId": "demotable002BE91A", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 41, + "startLine": 12, "startColumn": 5, - "endLine": 41, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "endLine": 12, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:{ref:ECSCluster7D463CD4}-service)" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ECSSecurityGroupA14DBE7D", + "logicalId": "oneminuteruleAllowEventRuledynamodblambdaproducerlambdafunction1E7146624783D604", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 219, + "startLine": 292, "startColumn": 5, - "endLine": 219, - "endColumn": 22, + "endLine": 292, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -65823,43 +64218,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ECSSecurityGroupA14DBE7D", + "logicalId": "oneminuteruleAllowEventRuledynamodblambdaproducerlambdafunction1E7146624783D604", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 238, + "startLine": 293, "startColumn": 5, - "endLine": 238, - "endColumn": 11, + "endLine": 293, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "parameter 'referencetoCdkExamplesServiceConnectStackServiceConnectVPCE46B65DFRef' (type String)" + "resolutionSource": "GetAtt producerlambdafunctionCE724CE7.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", + "logicalId": "oneminuteruleAllowEventRuledynamodblambdaproducerlambdafunction1E7146624783D604", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 250, + "startLine": 299, "startColumn": 5, - "endLine": 250, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 299, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -65869,44 +64263,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", + "logicalId": "oneminuteruleAllowEventRuledynamodblambdaproducerlambdafunction1E7146624783D604", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 251, + "startLine": 300, "startColumn": 5, - "endLine": 251, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 300, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ECSSecurityGroupA14DBE7D.GroupId" + "resolutionSource": "GetAtt oneminuteruleE9168CE5.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", + "logicalId": "oneminuteruleAllowEventRuledynamodblambdaconsumerlambdafunction1EF0C7D6888AA909", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 257, + "startLine": 314, "startColumn": 5, - "endLine": 257, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 314, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -65916,44 +64308,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", + "logicalId": "oneminuteruleAllowEventRuledynamodblambdaconsumerlambdafunction1EF0C7D6888AA909", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.SourceSecurityGroupId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 258, + "startLine": 315, "startColumn": 5, - "endLine": 258, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 315, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt PublicLBSG963B1ACE.GroupId" + "resolutionSource": "GetAtt consumerlambdafunction40710347.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", + "logicalId": "oneminuteruleAllowEventRuledynamodblambdaconsumerlambdafunction1EF0C7D6888AA909", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 264, + "startLine": 321, "startColumn": 5, - "endLine": 264, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 321, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -65963,229 +64353,260 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendTaskDefinition6CBC2B00", + "logicalId": "oneminuteruleAllowEventRuledynamodblambdaconsumerlambdafunction1EF0C7D6888AA909", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 273, + "startLine": 322, "startColumn": 5, - "endLine": 273, - "endColumn": 26, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 322, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt oneminuteruleE9168CE5.Arn" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Resource 'demotable002BE91A' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FrontendTaskDefinition6CBC2B00", + "logicalId": "demotable002BE91A", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 302, - "startColumn": 5, - "endLine": 302, - "endColumn": 9, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'producerlambdafunctionServiceRole5400FE21' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FrontendTaskDefinition6CBC2B00", + "logicalId": "producerlambdafunctionServiceRole5400FE21", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.ExecutionRoleArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 303, - "startColumn": 5, - "endLine": 303, - "endColumn": 22, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ECSTaskIamRole84EB0A02.Arn" - } + "startLine": 31, + "startColumn": 4, + "endLine": 31, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Resource 'producerlambdafunctionCE724CE7' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FrontendTaskDefinition6CBC2B00", + "logicalId": "producerlambdafunctionCE724CE7", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 309, - "startColumn": 5, - "endLine": 309, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 102, + "startColumn": 4, + "endLine": 102, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Resource 'consumerlambdafunctionServiceRole116B0746' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FrontendTaskDefinition6CBC2B00", + "logicalId": "consumerlambdafunctionServiceRole116B0746", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 310, - "startColumn": 5, - "endLine": 310, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 138, + "startColumn": 4, + "endLine": 138, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Resource 'consumerlambdafunction40710347' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FrontendTaskDefinition6CBC2B00", + "logicalId": "consumerlambdafunction40710347", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 311, + "startLine": 225, + "startColumn": 4, + "endLine": 225, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'oneminuteruleE9168CE5' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "oneminuteruleE9168CE5", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 261, + "startColumn": 4, + "endLine": 261, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/py-ec2-cloudwatch--ec2-cloudwatch.template.json": { + "filePath": "cdk/py-ec2-cloudwatch--ec2-cloudwatch.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 43, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 3, + "informational": 74, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3628", + "severity": "ERROR", + "message": "'Write a EC2 instance type' is not valid in any region", + "source": "CFN_LINT", + "entity": { + "logicalId": "WebInstanceF774E10D", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.InstanceType", + "category": "Resource", + "startLine": 758, "startColumn": 5, - "endLine": 311, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 758, + "endColumn": 18, + "ruleDescription": "Validate EC2 instance types based on region", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'AWSb4cf1abd4e4f4bc699441af7ccd9ec37ServiceRole9FFE9C50' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "FrontendTaskDefinition6CBC2B00", + "logicalId": "AWSb4cf1abd4e4f4bc699441af7ccd9ec371511E620", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 312, - "startColumn": 5, - "endLine": 312, - "endColumn": 29, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 925, + "startColumn": 4, + "endLine": 925, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "'30' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", "entity": { - "logicalId": "FrontendTaskDefinition6CBC2B00", + "logicalId": "WebInstanceF774E10D", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.TaskRoleArn", + "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.VolumeSize", "category": "Best Practice", - "startLine": 315, - "startColumn": 5, - "endLine": 315, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt TaskexecutionRole978012CD.Arn" - } + "startLine": 746, + "startColumn": 8, + "endLine": 746, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", "entity": { - "logicalId": "BackendTaskDefinitionEC224DE6", + "logicalId": "WebInstanceF774E10D", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.DeleteOnTermination", "category": "Best Practice", - "startLine": 337, - "startColumn": 5, - "endLine": 337, - "endColumn": 26, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 748, + "startColumn": 8, + "endLine": 748, + "endColumn": 28, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendTaskDefinitionEC224DE6", + "logicalId": "VpcFromCDKAC02ED99", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 366, + "startLine": 6, "startColumn": 5, - "endLine": 366, - "endColumn": 9, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 6, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -66195,44 +64616,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendTaskDefinitionEC224DE6", + "logicalId": "VpcFromCDKAC02ED99", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.ExecutionRoleArn", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 367, + "startLine": 9, "startColumn": 5, - "endLine": 367, - "endColumn": 22, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 9, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ECSTaskIamRole84EB0A02.Arn" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendTaskDefinitionEC224DE6", + "logicalId": "VpcFromCDKPublicSubnet1SubnetE7F939D2", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 373, + "startLine": 24, "startColumn": 5, - "endLine": 373, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 24, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -66242,20 +64660,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendTaskDefinitionEC224DE6", + "logicalId": "VpcFromCDKPublicSubnet1SubnetE7F939D2", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 374, + "startLine": 32, "startColumn": 5, - "endLine": 374, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 32, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -66265,201 +64682,213 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendTaskDefinitionEC224DE6", + "logicalId": "VpcFromCDKPublicSubnet1SubnetE7F939D2", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 375, + "startLine": 48, "startColumn": 5, - "endLine": 375, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 48, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendTaskDefinitionEC224DE6", + "logicalId": "VpcFromCDKPublicSubnet1RouteTable0BDD81D8", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 376, + "startLine": 65, "startColumn": 5, - "endLine": 376, - "endColumn": 29, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 65, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendTaskDefinitionEC224DE6", + "logicalId": "VpcFromCDKPublicSubnet1RouteTableAssociation616E7197", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.TaskRoleArn", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 379, + "startLine": 76, "startColumn": 5, - "endLine": 379, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 76, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt TaskexecutionRole978012CD.Arn" + "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet1RouteTable0BDD81D8'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendServiceBC94BA93", + "logicalId": "VpcFromCDKPublicSubnet1RouteTableAssociation616E7197", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Cluster", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 401, + "startLine": 79, "startColumn": 5, - "endLine": 401, - "endColumn": 13, + "endLine": 79, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ECSCluster7D463CD4'" + "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet1SubnetE7F939D2'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendServiceBC94BA93", + "logicalId": "VpcFromCDKPublicSubnet1DefaultRoute1FF73EA6", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.LaunchType", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 411, + "startLine": 90, "startColumn": 5, - "endLine": 411, - "endColumn": 16, + "endLine": 90, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ServiceName' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendServiceBC94BA93", + "logicalId": "VpcFromCDKPublicSubnet1DefaultRoute1FF73EA6", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.ServiceName", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 456, + "startLine": 94, "startColumn": 5, - "endLine": 456, - "endColumn": 17, + "endLine": 94, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet1RouteTable0BDD81D8'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendService7A4224EE", + "logicalId": "VpcFromCDKPublicSubnet1NATGateway291FE40B", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Cluster", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 473, + "startLine": 123, "startColumn": 5, - "endLine": 473, - "endColumn": 13, + "endLine": 123, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ECSCluster7D463CD4'" + "resolutionSource": "GetAtt VpcFromCDKPublicSubnet1EIP637D1D3D.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendService7A4224EE", + "logicalId": "VpcFromCDKPublicSubnet1NATGateway291FE40B", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.LaunchType", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 482, + "startLine": 129, "startColumn": 5, - "endLine": 482, - "endColumn": 16, + "endLine": 129, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet1SubnetE7F939D2'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ServiceName' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendService7A4224EE", + "logicalId": "VpcFromCDKPublicSubnet2SubnetBDC76372", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ServiceName", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 518, + "startLine": 150, "startColumn": 5, - "endLine": 518, - "endColumn": 17, + "endLine": 150, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -66469,19 +64898,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublicLBSG963B1ACE", + "logicalId": "VpcFromCDKPublicSubnet2SubnetBDC76372", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 533, + "startLine": 158, "startColumn": 5, - "endLine": 533, - "endColumn": 22, + "endLine": 158, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -66494,105 +64923,118 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublicLBSG963B1ACE", + "logicalId": "VpcFromCDKPublicSubnet2SubnetBDC76372", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 550, + "startLine": 174, "startColumn": 5, - "endLine": 550, + "endLine": 174, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "parameter 'referencetoCdkExamplesServiceConnectStackServiceConnectVPCE46B65DFRef' (type String)" + "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup3D7CD9B8", + "logicalId": "VpcFromCDKPublicSubnet2RouteTableF7A722BD", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 566, + "startLine": 191, "startColumn": 5, - "endLine": 566, - "endColumn": 10, + "endLine": 191, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup3D7CD9B8", + "logicalId": "VpcFromCDKPublicSubnet2RouteTableAssociation163F9AFA", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 567, + "startLine": 202, "startColumn": 5, - "endLine": 567, - "endColumn": 10, + "endLine": 202, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet2RouteTableF7A722BD'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup3D7CD9B8", + "logicalId": "VpcFromCDKPublicSubnet2RouteTableAssociation163F9AFA", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 568, + "startLine": 205, "startColumn": 5, - "endLine": 568, + "endLine": 205, "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet2SubnetBDC76372'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup3D7CD9B8", + "logicalId": "VpcFromCDKPublicSubnet2DefaultRouteC022B913", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.TargetType", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 579, + "startLine": 216, "startColumn": 5, - "endLine": 579, - "endColumn": 16, + "endLine": 216, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -66602,531 +65044,567 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup3D7CD9B8", + "logicalId": "VpcFromCDKPublicSubnet2DefaultRouteC022B913", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 581, + "startLine": 220, "startColumn": 5, - "endLine": 581, - "endColumn": 11, + "endLine": 220, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "parameter 'referencetoCdkExamplesServiceConnectStackServiceConnectVPCE46B65DFRef' (type String)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FrontendLB2FA80AC2", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" - }, - "propertyPath": "Properties.Scheme", - "category": "Best Practice", - "startLine": 602, - "startColumn": 5, - "endLine": 602, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" + "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet2RouteTableF7A722BD'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendLB2FA80AC2", + "logicalId": "VpcFromCDKPublicSubnet2NATGateway3450887A", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 619, + "startLine": 249, "startColumn": 5, - "endLine": 619, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endLine": 249, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt VpcFromCDKPublicSubnet2EIP09D8D9CE.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendLBListener230479D8", + "logicalId": "VpcFromCDKPublicSubnet2NATGateway3450887A", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.LoadBalancerArn", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 636, + "startLine": 255, "startColumn": 5, - "endLine": 636, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", + "endLine": 255, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'FrontendLB2FA80AC2'" + "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet2SubnetBDC76372'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ListenerArn' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ListenerRule73F9AC5E", + "logicalId": "VpcFromCDKPrivateSubnet1SubnetE081A3F6", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::ListenerRule" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ListenerArn", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 667, + "startLine": 276, "startColumn": 5, - "endLine": 667, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2", + "endLine": 276, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'FrontendLBListener230479D8'" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ECSCluster7D463CD4' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ECSCluster7D463CD4", + "logicalId": "VpcFromCDKPrivateSubnet1SubnetE081A3F6", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, + "startLine": 284, + "startColumn": 5, + "endLine": 284, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ECSClusterDefaultServiceDiscoveryNamespace5AC2D2BE' of type 'AWS::ServiceDiscovery::PrivateDnsNamespace' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ECSClusterDefaultServiceDiscoveryNamespace5AC2D2BE", + "logicalId": "VpcFromCDKPrivateSubnet1SubnetE081A3F6", "entityType": "Resource", - "resourceType": "AWS::ServiceDiscovery::PrivateDnsNamespace" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 28, - "startColumn": 4, - "endLine": 28, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 300, + "startColumn": 5, + "endLine": 300, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ECSServiceLogGroupD961AA4E' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ECSServiceLogGroupD961AA4E", + "logicalId": "VpcFromCDKPrivateSubnet1RouteTableB5578A45", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 40, - "startColumn": 4, - "endLine": 40, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 317, + "startColumn": 5, + "endLine": 317, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ECSTaskIamRole84EB0A02' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ECSTaskIamRole84EB0A02", + "logicalId": "VpcFromCDKPrivateSubnet1RouteTableAssociation7F2E7FF7", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 62, - "startColumn": 4, - "endLine": 62, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 328, + "startColumn": 5, + "endLine": 328, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKPrivateSubnet1RouteTableB5578A45'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TaskexecutionRole978012CD' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskexecutionRole978012CD", + "logicalId": "VpcFromCDKPrivateSubnet1RouteTableAssociation7F2E7FF7", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 172, - "startColumn": 4, - "endLine": 172, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 331, + "startColumn": 5, + "endLine": 331, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKPrivateSubnet1SubnetE081A3F6'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ECSSecurityGroupA14DBE7D' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ECSSecurityGroupA14DBE7D", + "logicalId": "VpcFromCDKPrivateSubnet1DefaultRoute3081953E", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 218, - "startColumn": 4, - "endLine": 218, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 342, + "startColumn": 5, + "endLine": 342, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FrontendTaskDefinition6CBC2B00' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendTaskDefinition6CBC2B00", + "logicalId": "VpcFromCDKPrivateSubnet1DefaultRoute3081953E", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 272, - "startColumn": 4, - "endLine": 272, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 346, + "startColumn": 5, + "endLine": 346, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKPrivateSubnet1RouteTableB5578A45'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FrontendTaskDefinitionFrontendContainerLogGroup994ED50C' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendTaskDefinitionFrontendContainerLogGroup994ED50C", + "logicalId": "VpcFromCDKPrivateSubnet2Subnet6D9A025D", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 326, - "startColumn": 3, - "endLine": 326, - "endColumn": 59, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 357, + "startColumn": 5, + "endLine": 357, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BackendTaskDefinitionEC224DE6' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendTaskDefinitionEC224DE6", + "logicalId": "VpcFromCDKPrivateSubnet2Subnet6D9A025D", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 336, - "startColumn": 4, - "endLine": 336, + "startLine": 365, + "startColumn": 5, + "endLine": 365, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BackendTaskDefinitionBackendContainerLogGroup5E30F6E8' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendTaskDefinitionBackendContainerLogGroup5E30F6E8", + "logicalId": "VpcFromCDKPrivateSubnet2Subnet6D9A025D", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 390, - "startColumn": 3, - "endLine": 390, - "endColumn": 57, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 381, + "startColumn": 5, + "endLine": 381, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FrontendServiceBC94BA93' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendServiceBC94BA93", + "logicalId": "VpcFromCDKPrivateSubnet2RouteTable5CB16C6C", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 400, - "startColumn": 4, - "endLine": 400, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 398, + "startColumn": 5, + "endLine": 398, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BackendService7A4224EE' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BackendService7A4224EE", + "logicalId": "VpcFromCDKPrivateSubnet2RouteTableAssociation68ADF807", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 472, - "startColumn": 4, - "endLine": 472, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 409, + "startColumn": 5, + "endLine": 409, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKPrivateSubnet2RouteTable5CB16C6C'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'PublicLBSG963B1ACE' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublicLBSG963B1ACE", + "logicalId": "VpcFromCDKPrivateSubnet2RouteTableAssociation68ADF807", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 532, - "startColumn": 4, - "endLine": 532, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 412, + "startColumn": 5, + "endLine": 412, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKPrivateSubnet2Subnet6D9A025D'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TargetGroup3D7CD9B8' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup3D7CD9B8", + "logicalId": "VpcFromCDKPrivateSubnet2DefaultRoute0D482744", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 560, - "startColumn": 4, - "endLine": 560, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 423, + "startColumn": 5, + "endLine": 423, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FrontendLB2FA80AC2' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendLB2FA80AC2", + "logicalId": "VpcFromCDKPrivateSubnet2DefaultRoute0D482744", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 591, - "startColumn": 4, - "endLine": 591, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 427, + "startColumn": 5, + "endLine": 427, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKPrivateSubnet2RouteTable5CB16C6C'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FrontendLBListener230479D8' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FrontendLBListener230479D8", + "logicalId": "VpcFromCDKVPCGW6C4E6589", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 627, - "startColumn": 4, - "endLine": 627, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 455, + "startColumn": 5, + "endLine": 455, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ListenerRule73F9AC5E' of type 'AWS::ElasticLoadBalancingV2::ListenerRule' supports Tags but none are configured", + "message": "Property 'ServiceName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ListenerRule73F9AC5E", + "logicalId": "VpcFromCDKS3EndpointF02E5219", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::ListenerRule" + "resourceType": "AWS::EC2::VPCEndpoint" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ServiceName", "category": "Best Practice", - "startLine": 648, - "startColumn": 4, - "endLine": 648, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/py-emr--emr-cluster.template.json": { - "filePath": "cdk/py-emr--emr-cluster.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 16, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 33, - "debug": 0 + "startLine": 474, + "startColumn": 5, + "endLine": 474, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcEndpointType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "emrcluster", + "logicalId": "VpcFromCDKS3EndpointF02E5219", "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" + "resourceType": "AWS::EC2::VPCEndpoint" }, + "propertyPath": "Properties.VpcEndpointType", "category": "Best Practice", - "startLine": 314, - "startColumn": 3, - "endLine": 314, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 492, + "startColumn": 5, + "endLine": 492, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "emrcluster", + "logicalId": "VpcFromCDKS3EndpointF02E5219", "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" + "resourceType": "AWS::EC2::VPCEndpoint" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 314, - "startColumn": 3, - "endLine": 314, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 493, + "startColumn": 5, + "endLine": 493, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcA2121C38", + "logicalId": "BastionHostInstanceSecurityGroupE75D4274", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 6, + "startLine": 504, "startColumn": 5, - "endLine": 6, - "endColumn": 15, + "endLine": 504, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -67136,23 +65614,24 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcA2121C38", + "logicalId": "BastionHostInstanceSecurityGroupE75D4274", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 9, + "startLine": 527, "startColumn": 5, - "endLine": 9, - "endColumn": 21, + "endLine": 527, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" } }, { @@ -67161,16 +65640,17 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet1SubnetA635257E", + "logicalId": "BastionHost30F9ED05", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 24, + "startLine": 605, "startColumn": 5, - "endLine": 24, + "endLine": 605, "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -67180,19 +65660,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet1SubnetA635257E", + "logicalId": "BastionHost30F9ED05", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 32, + "startLine": 616, "startColumn": 5, - "endLine": 32, - "endColumn": 15, + "endLine": 616, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -67202,121 +65683,112 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet1SubnetA635257E", + "logicalId": "BastionHost30F9ED05", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 48, + "startLine": 619, "startColumn": 5, - "endLine": 48, - "endColumn": 11, + "endLine": 619, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcA2121C38'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet1RouteTableA38152FE", + "logicalId": "BastionHost30F9ED05", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.SecurityGroupIds", "category": "Best Practice", - "startLine": 65, + "startLine": 620, "startColumn": 5, - "endLine": 65, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 620, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcA2121C38'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet1RouteTableAssociationB46101B8", + "logicalId": "BastionHost30F9ED05", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 76, + "startLine": 628, "startColumn": 5, - "endLine": 76, - "endColumn": 18, + "endLine": 628, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcpublicSubnet1RouteTableA38152FE'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet1SubnetE7F939D2'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet1RouteTableAssociationB46101B8", + "logicalId": "BastionHost30F9ED05", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 79, + "startLine": 637, "startColumn": 5, - "endLine": 79, + "endLine": 637, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcpublicSubnet1SubnetA635257E'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet1DefaultRouteF0973989", + "logicalId": "SecurityGroupDD263621", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 90, + "startLine": 652, "startColumn": 5, - "endLine": 90, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 652, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -67326,65 +65798,65 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet1DefaultRouteF0973989", + "logicalId": "SecurityGroupDD263621", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.GroupName", "category": "Best Practice", - "startLine": 94, + "startLine": 653, "startColumn": 5, - "endLine": 94, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 653, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcpublicSubnet1RouteTableA38152FE'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet2Subnet027D165B", + "logicalId": "SecurityGroupDD263621", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 108, + "startLine": 684, "startColumn": 5, - "endLine": 108, - "endColumn": 22, + "endLine": 684, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcFromCDKAC02ED99'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet2Subnet027D165B", + "logicalId": "WebInstanceF774E10D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 116, + "startLine": 734, "startColumn": 5, - "endLine": 116, - "endColumn": 15, + "endLine": 734, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -67394,194 +65866,181 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet2Subnet027D165B", + "logicalId": "WebInstanceF774E10D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.BlockDeviceMappings", "category": "Best Practice", - "startLine": 132, + "startLine": 742, "startColumn": 5, - "endLine": 132, - "endColumn": 11, + "endLine": 742, + "endColumn": 25, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcA2121C38'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet2RouteTableA6135437", + "logicalId": "WebInstanceF774E10D", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 149, + "startLine": 755, "startColumn": 5, - "endLine": 149, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 755, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcA2121C38'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet2RouteTableAssociation73F6478A", + "logicalId": "WebInstanceF774E10D", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 160, + "startLine": 758, "startColumn": 5, - "endLine": 160, + "endLine": 758, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcpublicSubnet2RouteTableA6135437'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet2RouteTableAssociation73F6478A", + "logicalId": "WebInstanceF774E10D", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.KeyName", "category": "Best Practice", - "startLine": 163, + "startLine": 759, "startColumn": 5, - "endLine": 163, - "endColumn": 14, + "endLine": 759, + "endColumn": 13, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcpublicSubnet2Subnet027D165B'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet2DefaultRoute13685A07", + "logicalId": "WebInstanceF774E10D", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.SecurityGroupIds", "category": "Best Practice", - "startLine": 174, + "startLine": 760, "startColumn": 5, - "endLine": 174, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 760, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcpublicSubnet2DefaultRoute13685A07", + "logicalId": "WebInstanceF774E10D", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 178, + "startLine": 768, "startColumn": 5, - "endLine": 178, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 768, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcpublicSubnet2RouteTableA6135437'" + "resolutionSource": "Ref to 'VpcFromCDKPublicSubnet1SubnetE7F939D2'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "vpcVPCGW7984C166", + "logicalId": "WebInstanceF774E10D", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 209, + "startLine": 777, "startColumn": 5, - "endLine": 209, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "endLine": 777, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcA2121C38'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceProfileName' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "emrjobflowprofile", + "logicalId": "ScheduleRuleAllowEventRuleec2cloudwatchScheduleRuleScheduleRuleTarget0Handler5EF9EBA726A6C94B", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.InstanceProfileName", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 303, + "startLine": 828, "startColumn": 5, - "endLine": 303, - "endColumn": 25, + "endLine": 828, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -67591,41 +66050,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Applications' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "emrcluster", + "logicalId": "ScheduleRuleAllowEventRuleec2cloudwatchScheduleRuleScheduleRuleTarget0Handler5EF9EBA726A6C94B", "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Applications", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 317, + "startLine": 829, "startColumn": 5, - "endLine": 317, + "endLine": 829, "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt AWSb4cf1abd4e4f4bc699441af7ccd9ec371511E620.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Configurations' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "emrcluster", + "logicalId": "ScheduleRuleAllowEventRuleec2cloudwatchScheduleRuleScheduleRuleTarget0Handler5EF9EBA726A6C94B", "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Configurations", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 322, + "startLine": 835, "startColumn": 5, - "endLine": 322, - "endColumn": 20, + "endLine": 835, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -67635,41 +66095,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'JobFlowRole' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "emrcluster", + "logicalId": "ScheduleRuleAllowEventRuleec2cloudwatchScheduleRuleScheduleRuleTarget0Handler5EF9EBA726A6C94B", "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.JobFlowRole", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 365, + "startLine": 836, "startColumn": 5, - "endLine": 365, - "endColumn": 17, + "endLine": 836, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt ScheduleRuleDA5BD877.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogUri' is create-only; updating it will cause resource replacement", + "message": "Property 'BackupVaultName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "emrcluster", + "logicalId": "BackupVault3A9C5852", "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" + "resourceType": "AWS::Backup::BackupVault" }, - "propertyPath": "Properties.LogUri", + "propertyPath": "Properties.BackupVaultName", "category": "Best Practice", - "startLine": 366, + "startLine": 939, "startColumn": 5, - "endLine": 366, - "endColumn": 12, + "endLine": 939, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -67679,41 +66141,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'BackupPlanId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "emrcluster", + "logicalId": "AWSBackupPlanSelectionAF95B30F", "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" + "resourceType": "AWS::Backup::BackupSelection" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.BackupPlanId", "category": "Best Practice", - "startLine": 378, + "startLine": 1011, "startColumn": 5, - "endLine": 378, - "endColumn": 10, + "endLine": 1011, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt AWSBackupPlanD181A800.BackupPlanId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ReleaseLabel' is create-only; updating it will cause resource replacement", + "message": "Property 'BackupSelection' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "emrcluster", + "logicalId": "AWSBackupPlanSelectionAF95B30F", "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" + "resourceType": "AWS::Backup::BackupSelection" }, - "propertyPath": "Properties.ReleaseLabel", + "propertyPath": "Properties.BackupSelection", "category": "Best Practice", - "startLine": 379, + "startLine": 1017, "startColumn": 5, - "endLine": 379, - "endColumn": 18, + "endLine": 1017, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -67721,66 +66186,70 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9003", "severity": "INFO", - "message": "Property 'ServiceRole' is create-only; updating it will cause resource replacement", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SecurityGroupDD263621' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "emrcluster", + "logicalId": "SecurityGroupDD263621", "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ServiceRole", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 380, - "startColumn": 5, - "endLine": 380, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'emrservicerole3BE5EDAF'" - } + "startLine": 651, + "startColumn": 4, + "endLine": 651, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Steps' is create-only; updating it will cause resource replacement", + "message": "Resource 'ScheduleRuleDA5BD877' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "emrcluster", + "logicalId": "ScheduleRuleDA5BD877", "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.Steps", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 383, - "startColumn": 5, - "endLine": 383, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 790, + "startColumn": 4, + "endLine": 790, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'emrservicerole3BE5EDAF' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'AWSb4cf1abd4e4f4bc699441af7ccd9ec37ServiceRole9FFE9C50' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "emrservicerole3BE5EDAF", + "logicalId": "AWSb4cf1abd4e4f4bc699441af7ccd9ec37ServiceRole9FFE9C50", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 219, + "startLine": 849, "startColumn": 4, - "endLine": 219, + "endLine": 849, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -67788,19 +66257,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'emrjobflowrole15D4DAE5' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'AWSb4cf1abd4e4f4bc699441af7ccd9ec371511E620' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "emrjobflowrole15D4DAE5", + "logicalId": "AWSb4cf1abd4e4f4bc699441af7ccd9ec371511E620", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 268, + "startLine": 907, "startColumn": 4, - "endLine": 268, + "endLine": 907, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -67808,35 +66277,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'emrcluster' of type 'AWS::EMR::Cluster' supports Tags but none are configured", + "message": "Resource 'AWSBackupPlanSelectionRole2A44F724' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "emrcluster", + "logicalId": "AWSBackupPlanSelectionRole2A44F724", "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 316, + "startLine": 976, "startColumn": 4, - "endLine": 316, + "endLine": 976, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/py-iotcore--CdkIotThingStack.template.json": { - "filePath": "cdk/py-iotcore--CdkIotThingStack.template.json", + "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStack.template.json": { + "filePath": "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 19, + "resourcesScanned": 29, "counts": { "fatal": 0, "errors": 0, - "warnings": 5, - "informational": 22, + "warnings": 1, + "informational": 43, "debug": 0 }, "suppressed": 0, @@ -67845,185 +66314,231 @@ }, "diagnostics": [ { - "ruleId": "W2531", + "ruleId": "W3005", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 189, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 589, + "startColumn": 4, + "endLine": 589, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ServiceConnectVPCD8B6F71D", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 6, "startColumn": 5, - "endLine": 189, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "IoTCertProviderframeworkonEvent8FF1476F", + "logicalId": "ServiceConnectVPCD8B6F71D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 321, + "propertyPath": "Properties.InstanceTenancy", + "category": "Best Practice", + "startLine": 9, "startColumn": 5, - "endLine": 321, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 9, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'CdkThing001LambdaRoleD7EE5CD3' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CertHandler220363A9", + "logicalId": "ServiceConnectVPCPublicSubnet1Subnet2B93B79E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 87, - "startColumn": 4, - "endLine": 87, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 24, + "startColumn": 5, + "endLine": 24, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "logicalId": "ServiceConnectVPCPublicSubnet1Subnet2B93B79E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 204, - "startColumn": 4, - "endLine": 204, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 32, + "startColumn": 5, + "endLine": 32, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'IoTCertProviderframeworkonEventServiceRole80DDBEA7' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "IoTCertProviderframeworkonEvent8FF1476F", + "logicalId": "ServiceConnectVPCPublicSubnet1Subnet2B93B79E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 324, - "startColumn": 4, - "endLine": 324, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 48, + "startColumn": 5, + "endLine": 48, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CfnLogGroup", + "logicalId": "ServiceConnectVPCPublicSubnet1RouteTableC0F77754", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::EC2::RouteTable" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 516, - "startColumn": 3, - "endLine": 516, - "endColumn": 15, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 65, + "startColumn": 5, + "endLine": 65, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CfnLogGroup", + "logicalId": "ServiceConnectVPCPublicSubnet1RouteTableAssociation902A4A27", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 516, - "startColumn": 3, - "endLine": 516, - "endColumn": 15, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 76, + "startColumn": 5, + "endLine": 76, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet1RouteTableC0F77754'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ThingName' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyCdkThing", + "logicalId": "ServiceConnectVPCPublicSubnet1RouteTableAssociation902A4A27", "entityType": "Resource", - "resourceType": "AWS::IoT::Thing" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.ThingName", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 6, + "startLine": 79, "startColumn": 5, - "endLine": 6, - "endColumn": 15, + "endLine": 79, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet1Subnet2B93B79E'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CertHandler220363A9", + "logicalId": "ServiceConnectVPCPublicSubnet1DefaultRoute1092379D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 76, + "startLine": 90, "startColumn": 5, - "endLine": 76, - "endColumn": 18, + "endLine": 90, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -68033,441 +66548,473 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "IoTCertCustomResource", + "logicalId": "ServiceConnectVPCPublicSubnet1DefaultRoute1092379D", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::CustomResource" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.ServiceToken", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 338, + "startLine": 94, "startColumn": 5, - "endLine": 338, + "endLine": 94, "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt IoTCertProviderframeworkonEvent8FF1476F.Arn" + "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet1RouteTableC0F77754'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CfnPolicy", + "logicalId": "ServiceConnectVPCPublicSubnet1NATGatewayBD9137E7", "entityType": "Resource", - "resourceType": "AWS::IoT::Policy" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.PolicyName", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 407, + "startLine": 123, "startColumn": 5, - "endLine": 407, - "endColumn": 16, + "endLine": 123, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt ServiceConnectVPCPublicSubnet1EIPB85E54D1.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CdkThing001PolicyPrincipalAttachment", + "logicalId": "ServiceConnectVPCPublicSubnet1NATGatewayBD9137E7", "entityType": "Resource", - "resourceType": "AWS::IoT::PolicyPrincipalAttachment" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.PolicyName", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 416, + "startLine": 129, "startColumn": 5, - "endLine": 416, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 129, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet1Subnet2B93B79E'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CdkThing001PolicyPrincipalAttachment", + "logicalId": "ServiceConnectVPCPublicSubnet2Subnet285316DC", "entityType": "Resource", - "resourceType": "AWS::IoT::PolicyPrincipalAttachment" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 417, + "startLine": 150, "startColumn": 5, - "endLine": 417, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 150, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:iot:us-east-1:123456789012:cert/{ref:IoTCertCustomResource})" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CdkThing001ThingPrincipalAttachment", + "logicalId": "ServiceConnectVPCPublicSubnet2Subnet285316DC", "entityType": "Resource", - "resourceType": "AWS::IoT::ThingPrincipalAttachment" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 447, + "startLine": 158, "startColumn": 5, - "endLine": 447, + "endLine": 158, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:iot:us-east-1:123456789012:cert/{ref:IoTCertCustomResource})" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ThingName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CdkThing001ThingPrincipalAttachment", + "logicalId": "ServiceConnectVPCPublicSubnet2Subnet285316DC", "entityType": "Resource", - "resourceType": "AWS::IoT::ThingPrincipalAttachment" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ThingName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 469, + "startLine": 174, "startColumn": 5, - "endLine": 469, - "endColumn": 15, + "endLine": 174, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CfnRole", + "logicalId": "ServiceConnectVPCPublicSubnet2RouteTable5A43F858", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 510, + "startLine": 191, "startColumn": 5, - "endLine": 510, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 191, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CfnLogGroup", + "logicalId": "ServiceConnectVPCPublicSubnet2RouteTableAssociation4EB0B814", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 519, + "startLine": 202, "startColumn": 5, - "endLine": 519, + "endLine": 202, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet2RouteTable5A43F858'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CdkThing001LambdaRoleD7EE5CD3' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CdkThing001LambdaRoleD7EE5CD3", + "logicalId": "ServiceConnectVPCPublicSubnet2RouteTableAssociation4EB0B814", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 14, - "startColumn": 4, - "endLine": 14, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 205, + "startColumn": 5, + "endLine": 205, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet2Subnet285316DC'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CertHandler220363A9' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CertHandler220363A9", + "logicalId": "ServiceConnectVPCPublicSubnet2DefaultRoute5E2EBF45", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 69, - "startColumn": 4, - "endLine": 69, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 216, + "startColumn": 5, + "endLine": 216, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + "logicalId": "ServiceConnectVPCPublicSubnet2DefaultRoute5E2EBF45", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 126, - "startColumn": 4, - "endLine": 126, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 220, + "startColumn": 5, + "endLine": 220, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet2RouteTable5A43F858'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "logicalId": "ServiceConnectVPCPublicSubnet2NATGatewayCDA3DB43", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 187, - "startColumn": 4, - "endLine": 187, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 249, + "startColumn": 5, + "endLine": 249, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt ServiceConnectVPCPublicSubnet2EIP04E6F20C.AllocationId" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'IoTCertProviderframeworkonEventServiceRole80DDBEA7' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "IoTCertProviderframeworkonEventServiceRole80DDBEA7", + "logicalId": "ServiceConnectVPCPublicSubnet2NATGatewayCDA3DB43", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 217, - "startColumn": 4, - "endLine": 217, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 255, + "startColumn": 5, + "endLine": 255, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCPublicSubnet2Subnet285316DC'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'IoTCertProviderframeworkonEvent8FF1476F' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "IoTCertProviderframeworkonEvent8FF1476F", + "logicalId": "ServiceConnectVPCPrivateSubnet1SubnetD04D043D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 296, - "startColumn": 4, - "endLine": 296, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 276, + "startColumn": 5, + "endLine": 276, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CfnPolicy' of type 'AWS::IoT::Policy' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CfnPolicy", + "logicalId": "ServiceConnectVPCPrivateSubnet1SubnetD04D043D", "entityType": "Resource", - "resourceType": "AWS::IoT::Policy" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 353, - "startColumn": 4, - "endLine": 353, + "startLine": 284, + "startColumn": 5, + "endLine": 284, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CfnRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CfnRole", + "logicalId": "ServiceConnectVPCPrivateSubnet1SubnetD04D043D", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 477, - "startColumn": 4, - "endLine": 477, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 300, + "startColumn": 5, + "endLine": 300, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CfnLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CfnLogGroup", + "logicalId": "ServiceConnectVPCPrivateSubnet1RouteTable3887499F", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 518, - "startColumn": 4, - "endLine": 518, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 317, + "startColumn": 5, + "endLine": 317, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CdkIoTCoreRule' of type 'AWS::IoT::TopicRule' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CdkIoTCoreRule", + "logicalId": "ServiceConnectVPCPrivateSubnet1RouteTableAssociation843B9F02", "entityType": "Resource", - "resourceType": "AWS::IoT::TopicRule" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 528, - "startColumn": 4, - "endLine": 528, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/py-lambda-cron--LambdaCronExample.template.json": { - "filePath": "cdk/py-lambda-cron--LambdaCronExample.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 7, - "debug": 0 + "startLine": 328, + "startColumn": 5, + "endLine": 328, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCPrivateSubnet1RouteTable3887499F'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W3005", - "severity": "WARN", - "message": "'SingletonServiceRoleDDD815CD' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Singleton8C7B99F3", + "logicalId": "ServiceConnectVPCPrivateSubnet1RouteTableAssociation843B9F02", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 53, - "startColumn": 4, - "endLine": 53, + "startLine": 331, + "startColumn": 5, + "endLine": 331, "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCPrivateSubnet1SubnetD04D043D'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", + "logicalId": "ServiceConnectVPCPrivateSubnet1DefaultRouteCFD77CC9", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 84, + "startLine": 342, "startColumn": 5, - "endLine": 84, - "endColumn": 12, + "endLine": 342, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -68477,42 +67024,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", + "logicalId": "ServiceConnectVPCPrivateSubnet1DefaultRouteCFD77CC9", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 85, + "startLine": 346, "startColumn": 5, - "endLine": 85, + "endLine": 346, "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt Singleton8C7B99F3.Arn" + "resolutionSource": "Ref to 'ServiceConnectVPCPrivateSubnet1RouteTable3887499F'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", + "logicalId": "ServiceConnectVPCPrivateSubnet2Subnet5FF59B97", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 91, + "startLine": 357, "startColumn": 5, - "endLine": 91, - "endColumn": 15, + "endLine": 357, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -68522,141 +67070,143 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", + "logicalId": "ServiceConnectVPCPrivateSubnet2Subnet5FF59B97", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 92, + "startLine": 365, "startColumn": 5, - "endLine": 92, + "endLine": 365, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt Rule4C995B7F.Arn" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SingletonServiceRoleDDD815CD' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SingletonServiceRoleDDD815CD", + "logicalId": "ServiceConnectVPCPrivateSubnet2Subnet5FF59B97", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 381, + "startColumn": 5, + "endLine": 381, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Singleton8C7B99F3' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Singleton8C7B99F3", + "logicalId": "ServiceConnectVPCPrivateSubnet2RouteTable30EC1F5C", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 39, - "startColumn": 4, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 398, + "startColumn": 5, + "endLine": 398, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Rule4C995B7F' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Rule4C995B7F", + "logicalId": "ServiceConnectVPCPrivateSubnet2RouteTableAssociationFF89750A", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 62, - "startColumn": 4, - "endLine": 62, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/py-lambda-from-container--LambdaContainerFunctionStack.template.json": { - "filePath": "cdk/py-lambda-from-container--LambdaContainerFunctionStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 4, - "debug": 0 + "startLine": 409, + "startColumn": 5, + "endLine": 409, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCPrivateSubnet2RouteTable30EC1F5C'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W3005", - "severity": "WARN", - "message": "'lambdaContainerFunctionServiceRole5E36DB3C' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "lambdaContainerFunction5815FD88", + "logicalId": "ServiceConnectVPCPrivateSubnet2RouteTableAssociationFF89750A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 63, - "startColumn": 4, - "endLine": 63, + "startLine": 412, + "startColumn": 5, + "endLine": 412, "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCPrivateSubnet2Subnet5FF59B97'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "lambdaContainerFunction5815FD88", + "logicalId": "ServiceConnectVPCPrivateSubnet2DefaultRoute85237B46", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 51, + "startLine": 423, "startColumn": 5, - "endLine": 51, - "endColumn": 18, + "endLine": 423, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -68666,41 +67216,70 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PackageType' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ServiceConnectVPCPrivateSubnet2DefaultRoute85237B46", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 427, + "startColumn": 5, + "endLine": 427, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCPrivateSubnet2RouteTable30EC1F5C'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "lambdaContainerFunction5815FD88", + "logicalId": "ServiceConnectVPCVPCGW60A84FEA", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.PackageType", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 53, + "startLine": 455, "startColumn": 5, - "endLine": 53, - "endColumn": 17, + "endLine": 455, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ServiceConnectVPCD8B6F71D'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'lambdaContainerFunctionServiceRole5E36DB3C' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "lambdaContainerFunctionServiceRole5E36DB3C", + "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 490, "startColumn": 4, - "endLine": 5, + "endLine": 490, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -68708,35 +67287,75 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'lambdaContainerFunction5815FD88' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "lambdaContainerFunction5815FD88", + "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 39, + "startLine": 562, "startColumn": 4, - "endLine": 39, + "endLine": 562, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'EcrStackNestedStackEcrStackNestedStackResource706AA777' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "EcrStackNestedStackEcrStackNestedStackResource706AA777", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 600, + "startColumn": 4, + "endLine": 600, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'EcsStackNestedStackEcsStackNestedStackResource48283A58' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "EcsStackNestedStackEcsStackNestedStackResource48283A58", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 632, + "startColumn": 4, + "endLine": 632, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/py-lambda-layer--LambdaLayerExample.template.json": { - "filePath": "cdk/py-lambda-layer--LambdaLayerExample.template.json", + "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStackEcrStack6B6F0F99.nested.template.json": { + "filePath": "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStackEcrStack6B6F0F99.nested.template.json", "status": "OK", "metadata": { - "resourcesScanned": 4, + "resourcesScanned": 8, "counts": { "fatal": 0, "errors": 0, - "warnings": 2, - "informational": 5, + "warnings": 1, + "informational": 6, "debug": 0 }, "suppressed": 0, @@ -68744,45 +67363,22 @@ "severityLevel": "DEBUG" }, "diagnostics": [ - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", - "entity": { - "logicalId": "lambdafunction45C982D3", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 83, - "startColumn": 5, - "endLine": 83, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" - } - }, { "ruleId": "W3005", "severity": "WARN", - "message": "'lambdafunctionServiceRole85538ADB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiBServiceRole8C8B0491' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "lambdafunction45C982D3", + "logicalId": "CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiB28EAD8E4", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 85, + "startLine": 163, "startColumn": 4, - "endLine": 85, + "endLine": 163, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -68790,20 +67386,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CompatibleRuntimes' is create-only; updating it will cause resource replacement", + "message": "Property 'RepositoryName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helperlayerC2FA2F58", + "logicalId": "FrontendRepository7D714FA2", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::ECR::Repository" }, - "propertyPath": "Properties.CompatibleRuntimes", + "propertyPath": "Properties.RepositoryName", "category": "Best Practice", "startLine": 6, "startColumn": 5, "endLine": 6, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ecr.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -68813,20 +67409,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Content' is create-only; updating it will cause resource replacement", + "message": "Property 'RepositoryName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "helperlayerC2FA2F58", + "logicalId": "BackendDataRepositoryD361813E", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::ECR::Repository" }, - "propertyPath": "Properties.Content", + "propertyPath": "Properties.RepositoryName", "category": "Best Practice", - "startLine": 11, + "startLine": 17, "startColumn": 5, - "endLine": 11, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "endLine": 17, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ecr.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -68834,44 +67430,61 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "message": "Resource 'FrontendRepository7D714FA2' of type 'AWS::ECR::Repository' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "helperlayerC2FA2F58", + "logicalId": "FrontendRepository7D714FA2", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::ECR::Repository" }, - "propertyPath": "Properties.Description", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'lambdafunctionServiceRole85538ADB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'BackendDataRepositoryD361813E' of type 'AWS::ECR::Repository' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "lambdafunctionServiceRole85538ADB", + "logicalId": "BackendDataRepositoryD361813E", + "entityType": "Resource", + "resourceType": "AWS::ECR::Repository" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 16, + "startColumn": 4, + "endLine": 16, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiBServiceRole8C8B0491' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiBServiceRole8C8B0491", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 30, + "startLine": 70, "startColumn": 4, - "endLine": 30, + "endLine": 70, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -68879,35 +67492,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'lambdafunction45C982D3' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiB28EAD8E4' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "lambdafunction45C982D3", + "logicalId": "CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiB28EAD8E4", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 64, + "startLine": 144, "startColumn": 4, - "endLine": 64, + "endLine": 144, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/py-stepfunctions--aws-stepfunctions-integ.template.json": { - "filePath": "cdk/py-stepfunctions--aws-stepfunctions-integ.template.json", + "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStackEcsStack19C526D0.nested.template.json": { + "filePath": "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStackEcsStack19C526D0.nested.template.json", "status": "OK", "metadata": { - "resourcesScanned": 8, + "resourcesScanned": 20, "counts": { "fatal": 0, "errors": 0, - "warnings": 5, - "informational": 6, + "warnings": 0, + "informational": 61, "debug": 0 }, "suppressed": 0, @@ -68916,417 +67529,345 @@ }, "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "submitLambda3C32AFD4", + "logicalId": "ECSCluster7D463CD4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::Cluster" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 53, + "propertyPath": "Properties.ClusterName", + "category": "Best Practice", + "startLine": 6, "startColumn": 5, - "endLine": 53, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 6, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.9", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "statusLambdaCF47B86D", + "logicalId": "ECSClusterDefaultServiceDiscoveryNamespace5AC2D2BE", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ServiceDiscovery::PrivateDnsNamespace" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 115, + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 29, "startColumn": 5, - "endLine": 115, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 29, + "endColumn": 10, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.9", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'submitLambdaServiceRole576DCA8F' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "submitLambda3C32AFD4", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 55, - "startColumn": 4, - "endLine": 55, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'statusLambdaServiceRoleD1132168' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "statusLambdaCF47B86D", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 117, - "startColumn": 4, - "endLine": 117, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'StateMachineRoleB840431D' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", - "source": "CFN_LINT", - "entity": { - "logicalId": "StateMachine2E01A3A5", - "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 258, - "startColumn": 4, - "endLine": 258, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'submitLambdaServiceRole576DCA8F' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "submitLambdaServiceRole576DCA8F", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'submitLambda3C32AFD4' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'Vpc' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "submitLambda3C32AFD4", + "logicalId": "ECSClusterDefaultServiceDiscoveryNamespace5AC2D2BE", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ServiceDiscovery::PrivateDnsNamespace" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Vpc", "category": "Best Practice", - "startLine": 39, - "startColumn": 4, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 30, + "startColumn": 5, + "endLine": 30, + "endColumn": 9, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'referencetoCdkExamplesServiceConnectStackServiceConnectVPCE46B65DFRef' (type String)" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'statusLambdaServiceRoleD1132168' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "statusLambdaServiceRoleD1132168", + "logicalId": "ECSServiceLogGroupD961AA4E", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 67, - "startColumn": 4, - "endLine": 67, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 41, + "startColumn": 5, + "endLine": 41, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:{ref:ECSCluster7D463CD4}-service)" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'statusLambdaCF47B86D' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "statusLambdaCF47B86D", + "logicalId": "ECSSecurityGroupA14DBE7D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 101, - "startColumn": 4, - "endLine": 101, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 219, + "startColumn": 5, + "endLine": 219, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'StateMachineRoleB840431D' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StateMachineRoleB840431D", + "logicalId": "ECSSecurityGroupA14DBE7D", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 129, - "startColumn": 4, - "endLine": 129, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 238, + "startColumn": 5, + "endLine": 238, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'referencetoCdkExamplesServiceConnectStackServiceConnectVPCE46B65DFRef' (type String)" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'StateMachine2E01A3A5' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StateMachine2E01A3A5", + "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 220, - "startColumn": 4, - "endLine": 220, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/py-url-shortener--urlshort-app.template.json": { - "filePath": "cdk/py-url-shortener--urlshort-app.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 20, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 3, - "informational": 39, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E2531", - "severity": "ERROR", - "message": "Runtime 'python3.7' was deprecated on '2023-12-04'. Creation was disabled on '2024-01-09', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "startLine": 250, + "startColumn": 5, + "endLine": 250, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerFunctionB5E87AC1", + "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 141, + "propertyPath": "Properties.GroupId", + "category": "Best Practice", + "startLine": 251, "startColumn": 5, - "endLine": 141, + "endLine": 251, "endColumn": 13, - "ruleDescription": "Check if Lambda Function Runtimes are blocked for create", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.7", - "lifecycle": "create-blocked" + "lifecycle": "create-only", + "resolutionSource": "GetAtt ECSSecurityGroupA14DBE7D.GroupId" } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'UrlShortenerFunctionServiceRole2FBF9CDA' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerFunctionB5E87AC1", + "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 144, - "startColumn": 4, - "endLine": 144, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 257, + "startColumn": 5, + "endLine": 257, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'RegionalCertificateArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiDomain85D0CE65", + "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::DomainName" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.RegionalCertificateArn", + "propertyPath": "Properties.SourceSecurityGroupId", "category": "Best Practice", - "startLine": 499, + "startLine": 258, "startColumn": 5, - "endLine": 499, - "endColumn": 28, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" + "endLine": 258, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt PublicLBSG963B1ACE.GroupId" + } }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiDomain85D0CE65", + "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::DomainName" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "category": "Security", - "startLine": 490, - "startColumn": 3, - "endLine": 490, - "endColumn": 33, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "propertyPath": "Properties.ToPort", + "category": "Best Practice", + "startLine": 264, + "startColumn": 5, + "endLine": 264, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TableCD117FA1", + "logicalId": "FrontendTaskDefinition6CBC2B00", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 12, + "startLine": 273, "startColumn": 5, - "endLine": 12, - "endColumn": 15, + "endLine": 273, + "endColumn": 26, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiDeployment97FF782966d8a7a27285a49d048d420aab9f3106", + "logicalId": "FrontendTaskDefinition6CBC2B00", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 223, + "startLine": 302, "startColumn": 5, - "endLine": 223, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 302, + "endColumn": 9, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiDeploymentStageprod9A3CCA44", + "logicalId": "FrontendTaskDefinition6CBC2B00", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.ExecutionRoleArn", "category": "Best Practice", - "startLine": 243, + "startLine": 303, "startColumn": 5, - "endLine": 243, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 303, + "endColumn": 22, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" + "resolutionSource": "GetAtt ECSTaskIamRole84EB0A02.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiDeploymentStageprod9A3CCA44", + "logicalId": "FrontendTaskDefinition6CBC2B00", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 246, + "startLine": 309, "startColumn": 5, - "endLine": 246, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 309, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -69336,44 +67877,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiproxy991A3B5C", + "logicalId": "FrontendTaskDefinition6CBC2B00", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 258, + "startLine": 310, "startColumn": 5, - "endLine": 258, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 310, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt UrlShortenerApi1FE619BE.RootResourceId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiproxy991A3B5C", + "logicalId": "FrontendTaskDefinition6CBC2B00", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 264, + "startLine": 311, "startColumn": 5, - "endLine": 264, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 311, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -69383,88 +67923,90 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiproxy991A3B5C", + "logicalId": "FrontendTaskDefinition6CBC2B00", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 265, + "startLine": 312, "startColumn": 5, - "endLine": 265, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 312, + "endColumn": 29, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiproxyANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYproxy8ED41C08", + "logicalId": "FrontendTaskDefinition6CBC2B00", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 276, + "startLine": 315, "startColumn": 5, - "endLine": 276, - "endColumn": 12, + "endLine": 315, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt TaskexecutionRole978012CD.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiproxyANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYproxy8ED41C08", + "logicalId": "BackendTaskDefinitionEC224DE6", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 277, + "startLine": 337, "startColumn": 5, - "endLine": 277, - "endColumn": 18, + "endLine": 337, + "endColumn": 26, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt UrlShortenerFunctionB5E87AC1.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiproxyANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYproxy8ED41C08", + "logicalId": "BackendTaskDefinitionEC224DE6", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 283, + "startLine": 366, "startColumn": 5, - "endLine": 283, - "endColumn": 15, + "endLine": 366, + "endColumn": 9, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -69474,42 +68016,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiproxyANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYproxy8ED41C08", + "logicalId": "BackendTaskDefinitionEC224DE6", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.ExecutionRoleArn", "category": "Best Practice", - "startLine": 284, + "startLine": 367, "startColumn": 5, - "endLine": 284, - "endColumn": 15, + "endLine": 367, + "endColumn": 22, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:111111111111:{ref:UrlShortenerApi1FE619BE}/{ref:UrlShortenerApiDeploymentStageprod9A3CCA44}/*/*)" + "resolutionSource": "GetAtt ECSTaskIamRole84EB0A02.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiproxyANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYproxy1B61094D", + "logicalId": "BackendTaskDefinitionEC224DE6", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 312, + "startLine": 373, "startColumn": 5, - "endLine": 312, + "endLine": 373, "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -69519,42 +68063,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiproxyANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYproxy1B61094D", + "logicalId": "BackendTaskDefinitionEC224DE6", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 313, + "startLine": 374, "startColumn": 5, - "endLine": 313, - "endColumn": 18, + "endLine": 374, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt UrlShortenerFunctionB5E87AC1.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiproxyANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYproxy1B61094D", + "logicalId": "BackendTaskDefinitionEC224DE6", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 319, + "startLine": 375, "startColumn": 5, - "endLine": 319, - "endColumn": 15, + "endLine": 375, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -69564,113 +68109,111 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiproxyANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYproxy1B61094D", + "logicalId": "BackendTaskDefinitionEC224DE6", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 320, + "startLine": 376, "startColumn": 5, - "endLine": 320, - "endColumn": 15, + "endLine": 376, + "endColumn": 29, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:111111111111:{ref:UrlShortenerApi1FE619BE}/test-invoke-stage/*/*)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiproxyANY05B511A9", + "logicalId": "BackendTaskDefinitionEC224DE6", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 345, + "startLine": 379, "startColumn": 5, - "endLine": 345, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 379, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt TaskexecutionRole978012CD.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiproxyANY05B511A9", + "logicalId": "FrontendServiceBC94BA93", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 369, + "startLine": 401, "startColumn": 5, - "endLine": 369, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 401, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'UrlShortenerApiproxy991A3B5C'" + "resolutionSource": "Ref to 'ECSCluster7D463CD4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiproxyANY05B511A9", + "logicalId": "FrontendServiceBC94BA93", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 372, + "startLine": 411, "startColumn": 5, - "endLine": 372, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 411, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'ServiceName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYB5D53F00", + "logicalId": "FrontendServiceBC94BA93", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.ServiceName", "category": "Best Practice", - "startLine": 383, + "startLine": 456, "startColumn": 5, - "endLine": 383, - "endColumn": 12, + "endLine": 456, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -69680,42 +68223,64 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYB5D53F00", + "logicalId": "BackendService7A4224EE", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 384, + "startLine": 473, "startColumn": 5, - "endLine": 384, - "endColumn": 18, + "endLine": 473, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt UrlShortenerFunctionB5E87AC1.Arn" + "resolutionSource": "Ref to 'ECSCluster7D463CD4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYB5D53F00", + "logicalId": "BackendService7A4224EE", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 390, + "startLine": 482, "startColumn": 5, - "endLine": 390, - "endColumn": 15, + "endLine": 482, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ServiceName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "BackendService7A4224EE", + "entityType": "Resource", + "resourceType": "AWS::ECS::Service" + }, + "propertyPath": "Properties.ServiceName", + "category": "Best Practice", + "startLine": 518, + "startColumn": 5, + "endLine": 518, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -69725,87 +68290,86 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYB5D53F00", + "logicalId": "PublicLBSG963B1ACE", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 391, + "startLine": 533, "startColumn": 5, - "endLine": 391, - "endColumn": 15, + "endLine": 533, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:111111111111:{ref:UrlShortenerApi1FE619BE}/{ref:UrlShortenerApiDeploymentStageprod9A3CCA44}/*/)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYD47A7EFF", + "logicalId": "PublicLBSG963B1ACE", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 419, + "startLine": 550, "startColumn": 5, - "endLine": 419, - "endColumn": 12, + "endLine": 550, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter 'referencetoCdkExamplesServiceConnectStackServiceConnectVPCE46B65DFRef' (type String)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYD47A7EFF", + "logicalId": "TargetGroup3D7CD9B8", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 420, + "startLine": 566, "startColumn": 5, - "endLine": 420, - "endColumn": 18, + "endLine": 566, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt UrlShortenerFunctionB5E87AC1.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYD47A7EFF", + "logicalId": "TargetGroup3D7CD9B8", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 426, + "startLine": 567, "startColumn": 5, - "endLine": 426, - "endColumn": 15, + "endLine": 567, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -69815,43 +68379,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYD47A7EFF", + "logicalId": "TargetGroup3D7CD9B8", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 427, + "startLine": 568, "startColumn": 5, - "endLine": 427, - "endColumn": 15, + "endLine": 568, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:111111111111:{ref:UrlShortenerApi1FE619BE}/test-invoke-stage/*/)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiANY5994BD69", + "logicalId": "TargetGroup3D7CD9B8", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.TargetType", "category": "Best Practice", - "startLine": 452, + "startLine": 579, "startColumn": 5, - "endLine": 452, + "endLine": 579, "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -69861,68 +68423,66 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiANY5994BD69", + "logicalId": "TargetGroup3D7CD9B8", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 476, + "startLine": 581, "startColumn": 5, - "endLine": 476, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 581, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt UrlShortenerApi1FE619BE.RootResourceId" + "resolutionSource": "parameter 'referencetoCdkExamplesServiceConnectStackServiceConnectVPCE46B65DFRef' (type String)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiANY5994BD69", + "logicalId": "FrontendLB2FA80AC2", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Scheme", "category": "Best Practice", - "startLine": 482, + "startLine": 602, "startColumn": 5, - "endLine": 482, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 602, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DomainName' is create-only; updating it will cause resource replacement", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiDomain85D0CE65", + "logicalId": "FrontendLB2FA80AC2", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::DomainName" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.DomainName", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 493, + "startLine": 619, "startColumn": 5, - "endLine": 493, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 619, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -69932,59 +68492,60 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DomainName' is create-only; updating it will cause resource replacement", + "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiDomainMapurlshortappUrlShortenerApiB1BAB0CD7C6BCC1C", + "logicalId": "FrontendLBListener230479D8", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::BasePathMapping" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "Properties.DomainName", + "propertyPath": "Properties.LoadBalancerArn", "category": "Best Practice", - "startLine": 508, + "startLine": 636, "startColumn": 5, - "endLine": 508, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 636, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'UrlShortenerApiDomain85D0CE65'" + "resolutionSource": "Ref to 'FrontendLB2FA80AC2'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", + "message": "Property 'ListenerArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerDomain9F16453F", + "logicalId": "ListenerRule73F9AC5E", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::ElasticLoadBalancingV2::ListenerRule" }, - "propertyPath": "Properties.HostedZoneId", + "propertyPath": "Properties.ListenerArn", "category": "Best Practice", - "startLine": 539, + "startLine": 667, "startColumn": 5, - "endLine": 539, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "endLine": 667, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'FrontendLBListener230479D8'" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TableCD117FA1' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'ECSCluster7D463CD4' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TableCD117FA1", + "logicalId": "ECSCluster7D463CD4", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ECS::Cluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -69999,19 +68560,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'UrlShortenerFunctionServiceRole2FBF9CDA' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'ECSClusterDefaultServiceDiscoveryNamespace5AC2D2BE' of type 'AWS::ServiceDiscovery::PrivateDnsNamespace' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerFunctionServiceRole2FBF9CDA", + "logicalId": "ECSClusterDefaultServiceDiscoveryNamespace5AC2D2BE", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ServiceDiscovery::PrivateDnsNamespace" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 31, + "startLine": 28, "startColumn": 4, - "endLine": 31, + "endLine": 28, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -70019,19 +68580,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'UrlShortenerFunctionB5E87AC1' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'ECSServiceLogGroupD961AA4E' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerFunctionB5E87AC1", + "logicalId": "ECSServiceLogGroupD961AA4E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Logs::LogGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 122, + "startLine": 40, "startColumn": 4, - "endLine": 122, + "endLine": 40, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -70039,19 +68600,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'UrlShortenerApi1FE619BE' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Resource 'ECSTaskIamRole84EB0A02' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApi1FE619BE", + "logicalId": "ECSTaskIamRole84EB0A02", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 157, + "startLine": 62, "startColumn": 4, - "endLine": 157, + "endLine": 62, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -70059,19 +68620,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'UrlShortenerApiCloudWatchRole28577D98' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'TaskexecutionRole978012CD' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiCloudWatchRole28577D98", + "logicalId": "TaskexecutionRole978012CD", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 166, + "startLine": 172, "startColumn": 4, - "endLine": 166, + "endLine": 172, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -70079,19 +68640,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'UrlShortenerApiDeploymentStageprod9A3CCA44' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Resource 'ECSSecurityGroupA14DBE7D' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiDeploymentStageprod9A3CCA44", + "logicalId": "ECSSecurityGroupA14DBE7D", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 239, + "startLine": 218, "startColumn": 4, - "endLine": 239, + "endLine": 218, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -70099,353 +68660,139 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'UrlShortenerApiDomain85D0CE65' of type 'AWS::ApiGateway::DomainName' supports Tags but none are configured", + "message": "Resource 'FrontendTaskDefinition6CBC2B00' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UrlShortenerApiDomain85D0CE65", + "logicalId": "FrontendTaskDefinition6CBC2B00", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::DomainName" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 492, + "startLine": 272, "startColumn": 4, - "endLine": 492, + "endLine": 272, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "cdk/py-url-shortener--urlshort-load-test.template.json": { - "filePath": "cdk/py-url-shortener--urlshort-load-test.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 8, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 18, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "generatorPingTask1D3C2E79", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 32, - "startColumn": 5, - "endLine": 32, - "endColumn": 26, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "generatorPingTask1D3C2E79", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Cpu", - "category": "Best Practice", - "startLine": 47, - "startColumn": 5, - "endLine": 47, - "endColumn": 9, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "generatorPingTask1D3C2E79", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.ExecutionRoleArn", - "category": "Best Practice", - "startLine": 48, - "startColumn": 5, - "endLine": 48, - "endColumn": 22, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt generatorPingTaskExecutionRoleA7BE7F8B.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "generatorPingTask1D3C2E79", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Family", - "category": "Best Practice", - "startLine": 54, - "startColumn": 5, - "endLine": 54, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "generatorPingTask1D3C2E79", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Memory", - "category": "Best Practice", - "startLine": 55, - "startColumn": 5, - "endLine": 55, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "generatorPingTask1D3C2E79", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 56, - "startColumn": 5, - "endLine": 56, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Resource 'FrontendTaskDefinitionFrontendContainerLogGroup994ED50C' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "generatorPingTask1D3C2E79", + "logicalId": "FrontendTaskDefinitionFrontendContainerLogGroup994ED50C", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 57, - "startColumn": 5, - "endLine": 57, - "endColumn": 29, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 326, + "startColumn": 3, + "endLine": 326, + "endColumn": 59, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'BackendTaskDefinitionEC224DE6' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "generatorPingTask1D3C2E79", + "logicalId": "BackendTaskDefinitionEC224DE6", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.TaskRoleArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 60, - "startColumn": 5, - "endLine": 60, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt generatorPingTaskTaskRoleA4886BE8.Arn" - } + "startLine": 336, + "startColumn": 4, + "endLine": 336, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", + "message": "Resource 'BackendTaskDefinitionBackendContainerLogGroup5E30F6E8' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "generatorserviceServiceA6AC5079", + "logicalId": "BackendTaskDefinitionBackendContainerLogGroup5E30F6E8", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.Cluster", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 138, - "startColumn": 5, - "endLine": 138, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'generatorcluster9804CB70'" - } + "startLine": 390, + "startColumn": 3, + "endLine": 390, + "endColumn": 57, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'FrontendServiceBC94BA93' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "generatorserviceServiceA6AC5079", + "logicalId": "FrontendServiceBC94BA93", "entityType": "Resource", "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.LaunchType", - "category": "Best Practice", - "startLine": 152, - "startColumn": 5, - "endLine": 152, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "generatorserviceSecurityGroup3D8BECF8", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 185, - "startColumn": 5, - "endLine": 185, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "generatorserviceSecurityGroup3D8BECF8", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 193, - "startColumn": 5, - "endLine": 193, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 400, + "startColumn": 4, + "endLine": 400, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'generatorcluster9804CB70' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Resource 'BackendService7A4224EE' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "generatorcluster9804CB70", + "logicalId": "BackendService7A4224EE", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 28, + "startLine": 472, + "startColumn": 4, + "endLine": 472, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'generatorPingTaskTaskRoleA4886BE8' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'PublicLBSG963B1ACE' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "generatorPingTaskTaskRoleA4886BE8", + "logicalId": "PublicLBSG963B1ACE", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 11, + "startLine": 532, "startColumn": 4, - "endLine": 11, + "endLine": 532, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -70453,19 +68800,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'generatorPingTask1D3C2E79' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'TargetGroup3D7CD9B8' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "generatorPingTask1D3C2E79", + "logicalId": "TargetGroup3D7CD9B8", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 31, + "startLine": 560, "startColumn": 4, - "endLine": 31, + "endLine": 560, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -70473,19 +68820,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'generatorPingTaskExecutionRoleA7BE7F8B' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'FrontendLB2FA80AC2' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "generatorPingTaskExecutionRoleA7BE7F8B", + "logicalId": "FrontendLB2FA80AC2", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 73, + "startLine": 591, "startColumn": 4, - "endLine": 73, + "endLine": 591, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -70493,19 +68840,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'generatorserviceServiceA6AC5079' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Resource 'FrontendLBListener230479D8' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "generatorserviceServiceA6AC5079", + "logicalId": "FrontendLBListener230479D8", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 137, + "startLine": 627, "startColumn": 4, - "endLine": 137, + "endLine": 627, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -70513,34 +68860,34 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'generatorserviceSecurityGroup3D8BECF8' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'ListenerRule73F9AC5E' of type 'AWS::ElasticLoadBalancingV2::ListenerRule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "generatorserviceSecurityGroup3D8BECF8", + "logicalId": "ListenerRule73F9AC5E", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ElasticLoadBalancingV2::ListenerRule" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 184, + "startLine": 648, "startColumn": 4, - "endLine": 184, + "endLine": 648, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/r53-resolver--R53ResolverStack.template.json": { - "filePath": "cdk/r53-resolver--R53ResolverStack.template.json", + "cdk/py-emr--emr-cluster.template.json": { + "filePath": "cdk/py-emr--emr-cluster.template.json", "status": "OK", "metadata": { - "resourcesScanned": 18, + "resourcesScanned": 16, "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 0, "informational": 33, "debug": 0 }, @@ -70550,23 +68897,39 @@ }, "diagnostics": [ { - "ruleId": "W3005", - "severity": "WARN", - "message": "'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "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": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EMR::Cluster" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 271, - "startColumn": 4, - "endLine": 271, + "startLine": 314, + "startColumn": 3, + "endLine": 314, "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "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": "emrcluster", + "entityType": "Resource", + "resourceType": "AWS::EMR::Cluster" + }, + "category": "Best Practice", + "startLine": 314, + "startColumn": 3, + "endLine": 314, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { @@ -70575,7 +68938,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPC9B993306", + "logicalId": "vpcA2121C38", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, @@ -70597,7 +68960,7 @@ "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPC9B993306", + "logicalId": "vpcA2121C38", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, @@ -70619,7 +68982,7 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet1Subnet5DBB6B2C", + "logicalId": "vpcpublicSubnet1SubnetA635257E", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -70641,7 +69004,7 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet1Subnet5DBB6B2C", + "logicalId": "vpcpublicSubnet1SubnetA635257E", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -70663,7 +69026,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet1Subnet5DBB6B2C", + "logicalId": "vpcpublicSubnet1SubnetA635257E", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, @@ -70677,7 +69040,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" + "resolutionSource": "Ref to 'vpcA2121C38'" } }, { @@ -70686,7 +69049,7 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet1RouteTable6E169019", + "logicalId": "vpcpublicSubnet1RouteTableA38152FE", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, @@ -70701,7 +69064,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" + "resolutionSource": "Ref to 'vpcA2121C38'" } }, { @@ -70710,7 +69073,7 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet1RouteTableAssociation41B46D9B", + "logicalId": "vpcpublicSubnet1RouteTableAssociationB46101B8", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -70725,7 +69088,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPCPrivateSubnet1RouteTable6E169019'", + "resolutionSource": "Ref to 'vpcpublicSubnet1RouteTableA38152FE'", "extra": { "replacement_strategy": "delete_then_create" } @@ -70737,7 +69100,7 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet1RouteTableAssociation41B46D9B", + "logicalId": "vpcpublicSubnet1RouteTableAssociationB46101B8", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, @@ -70752,7 +69115,7 @@ "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPCPrivateSubnet1Subnet5DBB6B2C'", + "resolutionSource": "Ref to 'vpcpublicSubnet1SubnetA635257E'", "extra": { "replacement_strategy": "delete_then_create" } @@ -70761,92 +69124,24 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet2Subnet495784E7", + "logicalId": "vpcpublicSubnet1DefaultRouteF0973989", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", "startLine": 90, "startColumn": 5, "endLine": 90, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet2Subnet495784E7", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 98, - "startColumn": 5, - "endLine": 98, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet2Subnet495784E7", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 114, - "startColumn": 5, - "endLine": 114, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet2RouteTable0899A697", - "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 131, - "startColumn": 5, - "endLine": 131, - "endColumn": 11, + "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" + "lifecycle": "create-only" } }, { @@ -70855,625 +69150,259 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet2RouteTableAssociation53E27A3B", + "logicalId": "vpcpublicSubnet1DefaultRouteF0973989", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 142, + "startLine": 94, "startColumn": 5, - "endLine": 142, + "endLine": 94, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPCPrivateSubnet2RouteTable0899A697'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet2RouteTableAssociation53E27A3B", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 145, - "startColumn": 5, - "endLine": 145, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPCPrivateSubnet2Subnet495784E7'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FirewallRuleGroupId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BlockListRuleGroupDirectBlockListRuleGroupAssociation40E90DB0", - "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" - }, - "propertyPath": "Properties.FirewallRuleGroupId", - "category": "Best Practice", - "startLine": 316, - "startColumn": 5, - "endLine": 316, - "endColumn": 25, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt BlockListRuleGroup55F6B55D.Id" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BlockListRuleGroupDirectBlockListRuleGroupAssociation40E90DB0", - "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 323, - "startColumn": 5, - "endLine": 323, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "sgoutboundendpointEC0509A3", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 334, - "startColumn": 5, - "endLine": 334, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "sgoutboundendpointEC0509A3", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 396, - "startColumn": 5, - "endLine": 396, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Direction' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OutboundEndpoint", - "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverEndpoint" - }, - "propertyPath": "Properties.Direction", - "category": "Best Practice", - "startLine": 407, - "startColumn": 5, - "endLine": 407, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53resolver", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SecurityGroupIds' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OutboundEndpoint", - "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverEndpoint" - }, - "propertyPath": "Properties.SecurityGroupIds", - "category": "Best Practice", - "startLine": 420, - "startColumn": 5, - "endLine": 420, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53resolver", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "sginboundendpoint32081788", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 436, - "startColumn": 5, - "endLine": 436, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "sginboundendpoint32081788", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 460, - "startColumn": 5, - "endLine": 460, - "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Direction' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "InboundEndpoint", - "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverEndpoint" - }, - "propertyPath": "Properties.Direction", - "category": "Best Practice", - "startLine": 471, - "startColumn": 5, - "endLine": 471, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53resolver", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" + "resolutionSource": "Ref to 'vpcpublicSubnet1RouteTableA38152FE'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SecurityGroupIds' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "InboundEndpoint", + "logicalId": "vpcpublicSubnet2Subnet027D165B", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverEndpoint" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.SecurityGroupIds", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 484, + "startLine": 108, "startColumn": 5, - "endLine": 484, + "endLine": 108, "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53resolver", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 180, - "startColumn": 4, - "endLine": 180, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 252, - "startColumn": 4, - "endLine": 252, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BlockListC03D0423' of type 'AWS::Route53Resolver::FirewallDomainList' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BlockListC03D0423", - "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallDomainList" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 282, - "startColumn": 4, - "endLine": 282, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BlockListRuleGroup55F6B55D' of type 'AWS::Route53Resolver::FirewallRuleGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BlockListRuleGroup55F6B55D", - "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallRuleGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 294, - "startColumn": 4, - "endLine": 294, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BlockListRuleGroupDirectBlockListRuleGroupAssociation40E90DB0' of type 'AWS::Route53Resolver::FirewallRuleGroupAssociation' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BlockListRuleGroupDirectBlockListRuleGroupAssociation40E90DB0", - "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 315, - "startColumn": 4, - "endLine": 315, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'sgoutboundendpointEC0509A3' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "sgoutboundendpointEC0509A3", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 333, - "startColumn": 4, - "endLine": 333, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'OutboundEndpoint' of type 'AWS::Route53Resolver::ResolverEndpoint' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OutboundEndpoint", + "logicalId": "vpcpublicSubnet2Subnet027D165B", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverEndpoint" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 406, - "startColumn": 4, - "endLine": 406, + "startLine": 116, + "startColumn": 5, + "endLine": 116, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'sginboundendpoint32081788' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sginboundendpoint32081788", + "logicalId": "vpcpublicSubnet2Subnet027D165B", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 435, - "startColumn": 4, - "endLine": 435, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 132, + "startColumn": 5, + "endLine": 132, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'vpcA2121C38'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'InboundEndpoint' of type 'AWS::Route53Resolver::ResolverEndpoint' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "InboundEndpoint", + "logicalId": "vpcpublicSubnet2RouteTableA6135437", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverEndpoint" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 470, - "startColumn": 4, - "endLine": 470, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/rekognition-lambda-s3-trigger--RekognitionLambdaS3TriggerStack.template.json": { - "filePath": "cdk/rekognition-lambda-s3-trigger--RekognitionLambdaS3TriggerStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 15, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 4, - "informational": 14, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "RekFunction9837D13D", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 310, + "startLine": 149, "startColumn": 5, - "endLine": 310, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 149, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs20.x", - "lifecycle": "deprecated" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'vpcA2121C38'" } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'RekFunctionServiceRole3947AEF4' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "RekFunction9837D13D", + "logicalId": "vpcpublicSubnet2RouteTableAssociation73F6478A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 312, - "startColumn": 4, - "endLine": 312, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 160, + "startColumn": 5, + "endLine": 160, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'vpcpublicSubnet2RouteTableA6135437'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", + "logicalId": "vpcpublicSubnet2RouteTableAssociation73F6478A", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 428, - "startColumn": 4, - "endLine": 428, + "startLine": 163, + "startColumn": 5, + "endLine": 163, "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'vpcpublicSubnet2Subnet027D165B'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "logicalId": "vpcpublicSubnet2DefaultRoute13685A07", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 516, - "startColumn": 4, - "endLine": 516, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 174, + "startColumn": 5, + "endLine": 174, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", + "logicalId": "vpcpublicSubnet2DefaultRoute13685A07", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 103, + "startLine": 178, "startColumn": 5, - "endLine": 103, - "endColumn": 12, + "endLine": 178, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'vpcpublicSubnet2RouteTableA6135437'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", + "logicalId": "vpcVPCGW7984C166", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 104, + "startLine": 209, "startColumn": 5, - "endLine": 104, - "endColumn": 18, + "endLine": 209, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt RekFunction9837D13D.Arn" + "resolutionSource": "Ref to 'vpcA2121C38'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceProfileName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", + "logicalId": "emrjobflowprofile", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.InstanceProfileName", "category": "Best Practice", - "startLine": 110, + "startLine": 303, "startColumn": 5, - "endLine": 110, - "endColumn": 15, + "endLine": 303, + "endColumn": 25, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -71483,19 +69412,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceAccount' is create-only; updating it will cause resource replacement", + "message": "Property 'Applications' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EMR::Cluster" }, - "propertyPath": "Properties.SourceAccount", + "propertyPath": "Properties.Applications", "category": "Best Practice", - "startLine": 111, + "startLine": 317, "startColumn": 5, - "endLine": 111, - "endColumn": 19, + "endLine": 317, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -71505,164 +69434,174 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'Configurations' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EMR::Cluster" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Configurations", "category": "Best Practice", - "startLine": 114, + "startLine": 322, "startColumn": 5, - "endLine": 114, - "endColumn": 15, + "endLine": 322, + "endColumn": 20, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt Bucket83908E77.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'JobFlowRole' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Classifications0C921F6C", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EMR::Cluster" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.JobFlowRole", "category": "Best Practice", - "startLine": 134, + "startLine": 365, "startColumn": 5, - "endLine": 134, - "endColumn": 15, + "endLine": 365, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Bucket83908E77' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'LogUri' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket83908E77", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EMR::Cluster" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.LogUri", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 366, + "startColumn": 5, + "endLine": 366, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Classifications0C921F6C' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Classifications0C921F6C", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EMR::Cluster" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 127, - "startColumn": 4, - "endLine": 127, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 378, + "startColumn": 5, + "endLine": 378, + "endColumn": 10, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'RekFunctionServiceRole3947AEF4' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'ReleaseLabel' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RekFunctionServiceRole3947AEF4", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EMR::Cluster" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ReleaseLabel", "category": "Best Practice", - "startLine": 153, - "startColumn": 4, - "endLine": 153, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 379, + "startColumn": 5, + "endLine": 379, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'RekFunction9837D13D' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'ServiceRole' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RekFunction9837D13D", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EMR::Cluster" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ServiceRole", "category": "Best Practice", - "startLine": 286, - "startColumn": 4, - "endLine": 286, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 380, + "startColumn": 5, + "endLine": 380, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'emrservicerole3BE5EDAF'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Steps' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EMR::Cluster" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Steps", "category": "Best Practice", - "startLine": 350, - "startColumn": 4, - "endLine": 350, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 383, + "startColumn": 5, + "endLine": 383, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'emrservicerole3BE5EDAF' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", + "logicalId": "emrservicerole3BE5EDAF", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 413, + "startLine": 219, "startColumn": 4, - "endLine": 413, + "endLine": 219, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -71670,19 +69609,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'emrjobflowrole15D4DAE5' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + "logicalId": "emrjobflowrole15D4DAE5", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 438, + "startLine": 268, "startColumn": 4, - "endLine": 438, + "endLine": 268, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -71690,35 +69629,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'emrcluster' of type 'AWS::EMR::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EMR::Cluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 499, + "startLine": 316, "startColumn": 4, - "endLine": 499, + "endLine": 316, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/resource-overrides--resource-overrides.template.json": { - "filePath": "cdk/resource-overrides--resource-overrides.template.json", + "cdk/py-iotcore--CdkIotThingStack.template.json": { + "filePath": "cdk/py-iotcore--CdkIotThingStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 21, + "resourcesScanned": 19, "counts": { - "fatal": 2, - "errors": 2, - "warnings": 4, - "informational": 31, + "fatal": 0, + "errors": 0, + "warnings": 5, + "informational": 22, "debug": 0 }, "suppressed": 0, @@ -71727,128 +69666,67 @@ }, "diagnostics": [ { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('Foo' was unexpected)", - "source": "SCHEMA", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Foo", - "category": "Schema", - "startLine": 418, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 189, "startColumn": 5, - "endLine": 418, - "endColumn": 9, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Additional properties are not allowed", - "phase": "SCHEMA", - "context": { - "property": "Foo", - "extra": { - "allowed_properties": [ - "AssociatePublicIpAddress", - "BlockDeviceMappings", - "ClassicLinkVPCId", - "ClassicLinkVPCSecurityGroups", - "EbsOptimized", - "IamInstanceProfile", - "ImageId", - "InstanceId", - "InstanceMonitoring", - "InstanceType", - "KernelId", - "KeyName", - "LaunchConfigurationName", - "MetadataOptions", - "PlacementTenancy", - "RamDiskId", - "SecurityGroups", - "SpotPrice", - "UserData" - ] - } - } - }, - { - "ruleId": "F3006", - "severity": "FATAL", - "message": "Unknown resource type 'AWS::S3::Bucketeer'", - "source": "SCHEMA", - "entity": { - "logicalId": "MyBucketF68F3FF0", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucketeer" - }, - "category": "Schema", - "startLine": 11, - "startColumn": 3, - "endLine": 11, - "endColumn": 20, - "ruleDescription": "AWS resource type must be recognized and available in the configured region", + "endLine": 189, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", - "context": { - "extra": { - "resource_type": "AWS::S3::Bucketeer" - } - } - }, - { - "ruleId": "E3001", - "severity": "ERROR", - "message": "Resource 'MyBucketF68F3FF0' has invalid property 'Transform'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyBucketF68F3FF0", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucketeer" - }, - "category": "Resource", - "startLine": 78, - "startColumn": 4, - "endLine": 78, - "endColumn": 14, - "ruleDescription": "Basic CloudFormation Resource Check", - "phase": "PARSE" + "context": { + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" + } }, { - "ruleId": "E3016", - "severity": "ERROR", - "message": "UpdatePolicy is not supported on resource type 'AWS::S3::Bucketeer'", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "MyBucketF68F3FF0", + "logicalId": "IoTCertProviderframeworkonEvent8FF1476F", "entityType": "Resource", - "resourceType": "AWS::S3::Bucketeer" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "UpdatePolicy", - "suggestedFix": "Remove UpdatePolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::ElastiCache::ReplicationGroup, AWS::Elasticsearch::Domain, AWS::Lambda::Alias, AWS::OpenSearchService::Domain", - "category": "Resource", - "startLine": 71, - "startColumn": 4, - "endLine": 71, - "endColumn": 17, - "ruleDescription": "Check UpdatePolicy values for Resources", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 321, + "startColumn": 5, + "endLine": 321, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" + } }, { "ruleId": "W3005", "severity": "WARN", - "message": "'Other34654A52' dependency already enforced by a 'GetAtt' at 'Properties.AnalyticsConfigurations.0.StorageClassAnalysis.DataExport.Destination.BucketArn'", + "message": "'CdkThing001LambdaRoleD7EE5CD3' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "MyBucketF68F3FF0", + "logicalId": "CertHandler220363A9", "entityType": "Resource", - "resourceType": "AWS::S3::Bucketeer" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 68, + "startLine": 87, "startColumn": 4, - "endLine": 68, + "endLine": 87, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -71856,19 +69734,19 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'Other34654A52' dependency already enforced by a 'GetAtt' at 'Properties.Token'", + "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "MyBucketF68F3FF0", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "entityType": "Resource", - "resourceType": "AWS::S3::Bucketeer" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 68, + "startLine": 204, "startColumn": 4, - "endLine": 68, + "endLine": 204, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -71876,57 +69754,74 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'Other34654A52' dependency already enforced by a 'Ref' at 'Properties.LoggingConfiguration.DestinationBucketName'", + "message": "'IoTCertProviderframeworkonEventServiceRole80DDBEA7' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "MyBucketF68F3FF0", + "logicalId": "IoTCertProviderframeworkonEvent8FF1476F", "entityType": "Resource", - "resourceType": "AWS::S3::Bucketeer" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 68, + "startLine": 324, "startColumn": 4, - "endLine": 68, + "endLine": 324, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "W3697", - "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "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": "ASGLaunchConfigC00AF12B", + "logicalId": "CfnLogGroup", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Logs::LogGroup" }, - "category": "Deprecation", - "startLine": 397, + "category": "Best Practice", + "startLine": 516, "startColumn": 3, - "endLine": 397, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" + "endLine": 516, + "endColumn": 15, + "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": "CfnLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "category": "Best Practice", + "startLine": 516, + "startColumn": 3, + "endLine": 516, + "endColumn": 15, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ThingName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCB9E5F0B4", + "logicalId": "MyCdkThing", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::IoT::Thing" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.ThingName", "category": "Best Practice", - "startLine": 83, + "startLine": 6, "startColumn": 5, - "endLine": 83, + "endLine": 6, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -71937,63 +69832,64 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCB9E5F0B4", + "logicalId": "CertHandler220363A9", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 86, + "startLine": 76, "startColumn": 5, - "endLine": 86, - "endColumn": 21, + "endLine": 76, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1SubnetB4246D30", + "logicalId": "IoTCertCustomResource", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::CloudFormation::CustomResource" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.ServiceToken", "category": "Best Practice", - "startLine": 101, + "startLine": 338, "startColumn": 5, - "endLine": 101, - "endColumn": 22, + "endLine": 338, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt IoTCertProviderframeworkonEvent8FF1476F.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1SubnetB4246D30", + "logicalId": "CfnPolicy", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IoT::Policy" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.PolicyName", "category": "Best Practice", - "startLine": 109, + "startLine": 407, "startColumn": 5, - "endLine": 109, - "endColumn": 15, + "endLine": 407, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -72003,121 +69899,112 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1SubnetB4246D30", + "logicalId": "CdkThing001PolicyPrincipalAttachment", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IoT::PolicyPrincipalAttachment" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.PolicyName", "category": "Best Practice", - "startLine": 125, + "startLine": 416, "startColumn": 5, - "endLine": 125, - "endColumn": 11, + "endLine": 416, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1RouteTableFEE4B781", + "logicalId": "CdkThing001PolicyPrincipalAttachment", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::IoT::PolicyPrincipalAttachment" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 142, + "startLine": 417, "startColumn": 5, - "endLine": 142, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 417, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "dynamic (Join:arn:aws:iot:us-east-1:123456789012:cert/{ref:IoTCertCustomResource})" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", + "logicalId": "CdkThing001ThingPrincipalAttachment", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::IoT::ThingPrincipalAttachment" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 153, + "startLine": 447, "startColumn": 5, - "endLine": 153, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 447, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "dynamic (Join:arn:aws:iot:us-east-1:123456789012:cert/{ref:IoTCertCustomResource})" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'ThingName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", + "logicalId": "CdkThing001ThingPrincipalAttachment", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::IoT::ThingPrincipalAttachment" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.ThingName", "category": "Best Practice", - "startLine": 156, + "startLine": 469, "startColumn": 5, - "endLine": 156, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 469, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", + "logicalId": "CfnRole", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 167, + "startLine": 510, "startColumn": 5, - "endLine": 167, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 510, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -72127,111 +70014,281 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", + "logicalId": "CfnLogGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 171, + "startLine": 519, "startColumn": 5, - "endLine": 171, + "endLine": 519, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Resource 'CdkThing001LambdaRoleD7EE5CD3' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1NATGatewayE0556630", + "logicalId": "CdkThing001LambdaRoleD7EE5CD3", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 200, - "startColumn": 5, - "endLine": 200, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt VPCPublicSubnet1EIP6AD938E8.AllocationId" - } + "startLine": 14, + "startColumn": 4, + "endLine": 14, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'CertHandler220363A9' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1NATGatewayE0556630", + "logicalId": "CertHandler220363A9", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 206, - "startColumn": 5, - "endLine": 206, - "endColumn": 14, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'" - } + "startLine": 69, + "startColumn": 4, + "endLine": 69, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 227, - "startColumn": 5, - "endLine": 227, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 126, + "startColumn": 4, + "endLine": 126, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 187, + "startColumn": 4, + "endLine": 187, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'IoTCertProviderframeworkonEventServiceRole80DDBEA7' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "IoTCertProviderframeworkonEventServiceRole80DDBEA7", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 217, + "startColumn": 4, + "endLine": 217, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'IoTCertProviderframeworkonEvent8FF1476F' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "IoTCertProviderframeworkonEvent8FF1476F", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 296, + "startColumn": 4, + "endLine": 296, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CfnPolicy' of type 'AWS::IoT::Policy' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "CfnPolicy", + "entityType": "Resource", + "resourceType": "AWS::IoT::Policy" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 353, + "startColumn": 4, + "endLine": 353, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CfnRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "CfnRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 477, + "startColumn": 4, + "endLine": 477, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CfnLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "CfnLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 518, + "startColumn": 4, + "endLine": 518, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CdkIoTCoreRule' of type 'AWS::IoT::TopicRule' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "CdkIoTCoreRule", + "entityType": "Resource", + "resourceType": "AWS::IoT::TopicRule" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 528, + "startColumn": 4, + "endLine": 528, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/py-lambda-cron--LambdaCronExample.template.json": { + "filePath": "cdk/py-lambda-cron--LambdaCronExample.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 7, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'SingletonServiceRoleDDD815CD' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Singleton8C7B99F3", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 53, + "startColumn": 4, + "endLine": 53, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", + "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 235, + "startLine": 84, "startColumn": 5, - "endLine": 235, - "endColumn": 15, + "endLine": 84, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -72241,194 +70298,186 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", + "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 251, + "startLine": 85, "startColumn": 5, - "endLine": 251, - "endColumn": 11, + "endLine": 85, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "GetAtt Singleton8C7B99F3.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1RouteTableBE8A6027", + "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 268, + "startLine": 91, "startColumn": 5, - "endLine": 268, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 91, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1RouteTableAssociation347902D1", + "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 279, + "startLine": 92, "startColumn": 5, - "endLine": 279, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 92, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet1RouteTableBE8A6027'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt Rule4C995B7F.Arn" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'SingletonServiceRoleDDD815CD' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1RouteTableAssociation347902D1", + "logicalId": "SingletonServiceRoleDDD815CD", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 282, - "startColumn": 5, - "endLine": 282, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet1Subnet8BCA10E0'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'Singleton8C7B99F3' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1DefaultRouteAE1D6490", + "logicalId": "Singleton8C7B99F3", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 293, - "startColumn": 5, - "endLine": 293, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 39, + "startColumn": 4, + "endLine": 39, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Rule4C995B7F' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1DefaultRouteAE1D6490", + "logicalId": "Rule4C995B7F", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 297, - "startColumn": 5, - "endLine": 297, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet1RouteTableBE8A6027'" - } + "startLine": 62, + "startColumn": 4, + "endLine": 62, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/py-lambda-from-container--LambdaContainerFunctionStack.template.json": { + "filePath": "cdk/py-lambda-from-container--LambdaContainerFunctionStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 4, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'lambdaContainerFunctionServiceRole5E36DB3C' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "VPCVPCGW99B986DC", + "logicalId": "lambdaContainerFunction5815FD88", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 325, - "startColumn": 5, - "endLine": 325, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 63, + "startColumn": 4, + "endLine": 63, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroup0525485D", + "logicalId": "lambdaContainerFunction5815FD88", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 336, + "startLine": 51, "startColumn": 5, - "endLine": 336, - "endColumn": 22, + "endLine": 51, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -72438,113 +70487,144 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'PackageType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroup0525485D", + "logicalId": "lambdaContainerFunction5815FD88", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.PackageType", "category": "Best Practice", - "startLine": 350, + "startLine": 53, "startColumn": 5, - "endLine": 350, - "endColumn": 11, + "endLine": 53, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", + "message": "Resource 'lambdaContainerFunctionServiceRole5E36DB3C' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "lambdaContainerFunctionServiceRole5E36DB3C", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.IamInstanceProfile", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 400, - "startColumn": 5, - "endLine": 400, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ASGInstanceProfile0A2834D7'" - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Resource 'lambdaContainerFunction5815FD88' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "lambdaContainerFunction5815FD88", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 403, + "startLine": 39, + "startColumn": 4, + "endLine": 39, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/py-lambda-layer--LambdaLayerExample.template.json": { + "filePath": "cdk/py-lambda-layer--LambdaLayerExample.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 5, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "lambdafunction45C982D3", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 83, "startColumn": 5, - "endLine": 403, + "endLine": 83, "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "python3.8", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'lambdafunctionServiceRole85538ADB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "lambdafunction45C982D3", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 406, - "startColumn": 5, - "endLine": 406, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 85, + "startColumn": 4, + "endLine": 85, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", + "message": "Property 'CompatibleRuntimes' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "helperlayerC2FA2F58", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.SecurityGroups", + "propertyPath": "Properties.CompatibleRuntimes", "category": "Best Practice", - "startLine": 407, + "startLine": 6, "startColumn": 5, - "endLine": 407, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 6, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -72554,20 +70634,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is create-only; updating it will cause resource replacement", + "message": "Property 'Content' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "helperlayerC2FA2F58", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.Content", "category": "Best Practice", - "startLine": 415, + "startLine": 11, "startColumn": 5, - "endLine": 415, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 11, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -72577,80 +70657,78 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASG46ED3070", + "logicalId": "helperlayerC2FA2F58", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.LaunchConfigurationName", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 432, + "startLine": 17, "startColumn": 5, - "endLine": 432, - "endColumn": 29, + "endLine": 17, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'ASGLaunchConfigC00AF12B'" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'lambdafunctionServiceRole85538ADB' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ASG46ED3070", + "logicalId": "lambdafunctionServiceRole85538ADB", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.VPCZoneIdentifier", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 444, - "startColumn": 5, - "endLine": 444, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 30, + "startColumn": 4, + "endLine": 30, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Other34654A52' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'lambdafunction45C982D3' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Other34654A52", + "logicalId": "lambdafunction45C982D3", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 17, + "startLine": 64, + "startColumn": 4, + "endLine": 64, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/route53-resolver-dns-firewall--Route53ResolverDnsFirewallStack.template.json": { - "filePath": "cdk/route53-resolver-dns-firewall--Route53ResolverDnsFirewallStack.template.json", + "cdk/py-stepfunctions--aws-stepfunctions-integ.template.json": { + "filePath": "cdk/py-stepfunctions--aws-stepfunctions-integ.template.json", "status": "OK", "metadata": { - "resourcesScanned": 31, + "resourcesScanned": 8, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 55, + "warnings": 5, + "informational": 6, "debug": 0 }, "suppressed": 0, @@ -72659,541 +70737,464 @@ }, "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Vpc8378EB38", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Vpc8378EB38", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.InstanceTenancy", - "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "submitLambda3C32AFD4", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 24, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 53, "startColumn": 5, - "endLine": 24, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 53, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "python3.9", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "statusLambdaCF47B86D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 32, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 115, "startColumn": 5, - "endLine": 32, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 115, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "python3.9", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'submitLambdaServiceRole576DCA8F' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "submitLambda3C32AFD4", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 48, - "startColumn": 5, - "endLine": 48, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } + "startLine": 55, + "startColumn": 4, + "endLine": 55, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'statusLambdaServiceRoleD1132168' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcPublicSubnet1RouteTable6C95E38E", + "logicalId": "statusLambdaCF47B86D", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 65, - "startColumn": 5, - "endLine": 65, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } + "startLine": 117, + "startColumn": 4, + "endLine": 117, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'StateMachineRoleB840431D' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", + "logicalId": "StateMachine2E01A3A5", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 76, - "startColumn": 5, - "endLine": 76, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 258, + "startColumn": 4, + "endLine": 258, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'submitLambdaServiceRole576DCA8F' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", + "logicalId": "submitLambdaServiceRole576DCA8F", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 79, - "startColumn": 5, - "endLine": 79, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'submitLambda3C32AFD4' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", + "logicalId": "submitLambda3C32AFD4", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 90, - "startColumn": 5, - "endLine": 90, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 39, + "startColumn": 4, + "endLine": 39, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'statusLambdaServiceRoleD1132168' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", + "logicalId": "statusLambdaServiceRoleD1132168", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 94, - "startColumn": 5, - "endLine": 94, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'" - } + "startLine": 67, + "startColumn": 4, + "endLine": 67, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Resource 'statusLambdaCF47B86D' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", + "logicalId": "statusLambdaCF47B86D", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 123, - "startColumn": 5, - "endLine": 123, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcPublicSubnet1EIPD7E02669.AllocationId" - } + "startLine": 101, + "startColumn": 4, + "endLine": 101, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'StateMachineRoleB840431D' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", + "logicalId": "StateMachineRoleB840431D", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 129, - "startColumn": 5, + "startColumn": 4, "endLine": 129, - "endColumn": 14, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'" - } + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Resource 'StateMachine2E01A3A5' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "StateMachine2E01A3A5", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 150, - "startColumn": 5, - "endLine": 150, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 220, + "startColumn": 4, + "endLine": 220, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/py-url-shortener--urlshort-app.template.json": { + "filePath": "cdk/py-url-shortener--urlshort-app.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 20, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 3, + "informational": 39, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2531", + "severity": "ERROR", + "message": "Runtime 'python3.7' was deprecated on '2023-12-04'. Creation was disabled on '2024-01-09', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "UrlShortenerFunctionB5E87AC1", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 158, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 141, "startColumn": 5, - "endLine": 158, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 141, + "endColumn": 13, + "ruleDescription": "Check if Lambda Function Runtimes are blocked for create", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "python3.7", + "lifecycle": "create-blocked" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'UrlShortenerFunctionServiceRole2FBF9CDA' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "UrlShortenerFunctionB5E87AC1", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 174, - "startColumn": 5, - "endLine": 174, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } + "startLine": 144, + "startColumn": 4, + "endLine": 144, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'RegionalCertificateArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTable94F7E489", + "logicalId": "UrlShortenerApiDomain85D0CE65", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::ApiGateway::DomainName" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.RegionalCertificateArn", "category": "Best Practice", - "startLine": 191, + "startLine": 499, "startColumn": 5, - "endLine": 191, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } + "endLine": 499, + "endColumn": 28, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "logicalId": "UrlShortenerApiDomain85D0CE65", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ApiGateway::DomainName" }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 202, - "startColumn": 5, - "endLine": 202, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "category": "Security", + "startLine": 490, + "startColumn": 3, + "endLine": 490, + "endColumn": 33, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "logicalId": "TableCD117FA1", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 205, + "startLine": 12, "startColumn": 5, - "endLine": 205, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 12, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", + "logicalId": "UrlShortenerApiDeployment97FF782966d8a7a27285a49d048d420aab9f3106", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 216, + "startLine": 223, "startColumn": 5, - "endLine": 216, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 223, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", + "logicalId": "UrlShortenerApiDeploymentStageprod9A3CCA44", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 220, + "startLine": 243, "startColumn": 5, - "endLine": 220, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 243, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'" + "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2NATGateway9182C01D", + "logicalId": "UrlShortenerApiDeploymentStageprod9A3CCA44", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 249, + "startLine": 246, "startColumn": 5, - "endLine": 249, - "endColumn": 18, + "endLine": 246, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcPublicSubnet2EIP3C605A87.AllocationId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2NATGateway9182C01D", + "logicalId": "UrlShortenerApiproxy991A3B5C", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 255, + "startLine": 258, "startColumn": 5, - "endLine": 255, + "endLine": 258, "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'" + "resolutionSource": "GetAtt UrlShortenerApi1FE619BE.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "UrlShortenerApiproxy991A3B5C", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 276, + "startLine": 264, "startColumn": 5, - "endLine": 276, - "endColumn": 22, + "endLine": 264, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -73203,143 +71204,133 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "UrlShortenerApiproxy991A3B5C", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 284, + "startLine": 265, "startColumn": 5, - "endLine": 284, + "endLine": 265, "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "UrlShortenerApiproxyANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYproxy8ED41C08", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 300, + "startLine": 276, "startColumn": 5, - "endLine": 300, - "endColumn": 11, + "endLine": 276, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableB2C5B500", + "logicalId": "UrlShortenerApiproxyANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYproxy8ED41C08", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 317, + "startLine": 277, "startColumn": 5, - "endLine": 317, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 277, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "GetAtt UrlShortenerFunctionB5E87AC1.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", + "logicalId": "UrlShortenerApiproxyANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYproxy8ED41C08", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 328, + "startLine": 283, "startColumn": 5, - "endLine": 328, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 283, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", + "logicalId": "UrlShortenerApiproxyANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYproxy8ED41C08", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 331, + "startLine": 284, "startColumn": 5, - "endLine": 331, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 284, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1Subnet536B997A'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:111111111111:{ref:UrlShortenerApi1FE619BE}/{ref:UrlShortenerApiDeploymentStageprod9A3CCA44}/*/*)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "logicalId": "UrlShortenerApiproxyANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYproxy1B61094D", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 342, + "startLine": 312, "startColumn": 5, - "endLine": 342, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 312, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -73349,43 +71340,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "logicalId": "UrlShortenerApiproxyANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYproxy1B61094D", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 346, + "startLine": 313, "startColumn": 5, - "endLine": 346, + "endLine": 313, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'" + "resolutionSource": "GetAtt UrlShortenerFunctionB5E87AC1.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "UrlShortenerApiproxyANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYproxy1B61094D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 357, + "startLine": 319, "startColumn": 5, - "endLine": 357, - "endColumn": 22, + "endLine": 319, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -73395,217 +71385,203 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "UrlShortenerApiproxyANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYproxy1B61094D", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 365, + "startLine": 320, "startColumn": 5, - "endLine": 365, + "endLine": 320, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:111111111111:{ref:UrlShortenerApi1FE619BE}/test-invoke-stage/*/*)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "UrlShortenerApiproxyANY05B511A9", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 381, + "startLine": 345, "startColumn": 5, - "endLine": 381, - "endColumn": 11, + "endLine": 345, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableA678073B", + "logicalId": "UrlShortenerApiproxyANY05B511A9", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 398, + "startLine": 369, "startColumn": 5, - "endLine": 398, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 369, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "resolutionSource": "Ref to 'UrlShortenerApiproxy991A3B5C'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", + "logicalId": "UrlShortenerApiproxyANY05B511A9", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 409, + "startLine": 372, "startColumn": 5, - "endLine": 409, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 372, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", + "logicalId": "UrlShortenerApiANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYB5D53F00", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 412, + "startLine": 383, "startColumn": 5, - "endLine": 412, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 383, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2Subnet3788AAA1'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", + "logicalId": "UrlShortenerApiANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYB5D53F00", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 423, + "startLine": 384, "startColumn": 5, - "endLine": 423, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 384, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt UrlShortenerFunctionB5E87AC1.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", + "logicalId": "UrlShortenerApiANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYB5D53F00", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 427, + "startLine": 390, "startColumn": 5, - "endLine": 427, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 390, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcVPCGWBF912B6E", + "logicalId": "UrlShortenerApiANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYB5D53F00", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 455, + "startLine": 391, "startColumn": 5, - "endLine": 455, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "endLine": 391, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:111111111111:{ref:UrlShortenerApi1FE619BE}/{ref:UrlShortenerApiDeploymentStageprod9A3CCA44}/*/)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DNSFirewallLogGroupF0EEB7D4", + "logicalId": "UrlShortenerApiANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYD47A7EFF", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 466, + "startLine": 419, "startColumn": 5, - "endLine": 466, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "endLine": 419, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -73615,42 +71591,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationArn' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DNSLogsConfig", + "logicalId": "UrlShortenerApiANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYD47A7EFF", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfig" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.DestinationArn", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 478, + "startLine": 420, "startColumn": 5, - "endLine": 478, - "endColumn": 20, + "endLine": 420, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt DNSFirewallLogGroupF0EEB7D4.Arn" + "resolutionSource": "GetAtt UrlShortenerFunctionB5E87AC1.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DNSLogsConfig", + "logicalId": "UrlShortenerApiANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYD47A7EFF", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfig" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 484, + "startLine": 426, "startColumn": 5, - "endLine": 484, - "endColumn": 10, + "endLine": 426, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -73660,109 +71636,114 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResolverQueryLogConfigId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DNSLogAssoc", + "logicalId": "UrlShortenerApiANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYD47A7EFF", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ResolverQueryLogConfigId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 493, + "startLine": 427, "startColumn": 5, - "endLine": 493, - "endColumn": 30, + "endLine": 427, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'DNSLogsConfig'" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:111111111111:{ref:UrlShortenerApi1FE619BE}/test-invoke-stage/*/)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DNSLogAssoc", + "logicalId": "UrlShortenerApiANY5994BD69", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 496, + "startLine": 452, "startColumn": 5, - "endLine": 496, + "endLine": 452, "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AllowedDomainList", + "logicalId": "UrlShortenerApiANY5994BD69", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallDomainList" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 510, + "startLine": 476, "startColumn": 5, - "endLine": 510, - "endColumn": 10, + "endLine": 476, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt UrlShortenerApi1FE619BE.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BlockedDomainList", + "logicalId": "UrlShortenerApiANY5994BD69", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallDomainList" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 523, + "startLine": 482, "startColumn": 5, - "endLine": 523, - "endColumn": 10, + "endLine": 482, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'DomainName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DNSRuleGroup", + "logicalId": "UrlShortenerApiDomain85D0CE65", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallRuleGroup" + "resourceType": "AWS::ApiGateway::DomainName" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.DomainName", "category": "Best Practice", - "startLine": 549, + "startLine": 493, "startColumn": 5, - "endLine": 549, - "endColumn": 10, + "endLine": 493, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -73772,65 +71753,66 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FirewallRuleGroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'DomainName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FirewallRuleGroupAssociation", + "logicalId": "UrlShortenerApiDomainMapurlshortappUrlShortenerApiB1BAB0CD7C6BCC1C", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" + "resourceType": "AWS::ApiGateway::BasePathMapping" }, - "propertyPath": "Properties.FirewallRuleGroupId", + "propertyPath": "Properties.DomainName", "category": "Best Practice", - "startLine": 558, + "startLine": 508, "startColumn": 5, - "endLine": 558, - "endColumn": 25, + "endLine": 508, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'DNSRuleGroup'" + "resolutionSource": "Ref to 'UrlShortenerApiDomain85D0CE65'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FirewallRuleGroupAssociation", + "logicalId": "UrlShortenerDomain9F16453F", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "startLine": 563, + "startLine": 539, "startColumn": 5, - "endLine": 563, - "endColumn": 11, + "endLine": 539, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "lifecycle": "create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DNSFirewallLogGroupF0EEB7D4' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Resource 'TableCD117FA1' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DNSFirewallLogGroupF0EEB7D4", + "logicalId": "TableCD117FA1", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 465, + "startLine": 5, "startColumn": 4, - "endLine": 465, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -73838,19 +71820,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DNSLogsConfig' of type 'AWS::Route53Resolver::ResolverQueryLoggingConfig' supports Tags but none are configured", + "message": "Resource 'UrlShortenerFunctionServiceRole2FBF9CDA' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DNSLogsConfig", + "logicalId": "UrlShortenerFunctionServiceRole2FBF9CDA", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfig" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 477, + "startLine": 31, "startColumn": 4, - "endLine": 477, + "endLine": 31, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -73858,19 +71840,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'AllowedDomainList' of type 'AWS::Route53Resolver::FirewallDomainList' supports Tags but none are configured", + "message": "Resource 'UrlShortenerFunctionB5E87AC1' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AllowedDomainList", + "logicalId": "UrlShortenerFunctionB5E87AC1", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallDomainList" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 506, + "startLine": 122, "startColumn": 4, - "endLine": 506, + "endLine": 122, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -73878,19 +71860,39 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BlockedDomainList' of type 'AWS::Route53Resolver::FirewallDomainList' supports Tags but none are configured", + "message": "Resource 'UrlShortenerApi1FE619BE' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BlockedDomainList", + "logicalId": "UrlShortenerApi1FE619BE", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallDomainList" + "resourceType": "AWS::ApiGateway::RestApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 518, + "startLine": 157, "startColumn": 4, - "endLine": 518, + "endLine": 157, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'UrlShortenerApiCloudWatchRole28577D98' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "UrlShortenerApiCloudWatchRole28577D98", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 166, + "startColumn": 4, + "endLine": 166, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -73898,19 +71900,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DNSRuleGroup' of type 'AWS::Route53Resolver::FirewallRuleGroup' supports Tags but none are configured", + "message": "Resource 'UrlShortenerApiDeploymentStageprod9A3CCA44' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DNSRuleGroup", + "logicalId": "UrlShortenerApiDeploymentStageprod9A3CCA44", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallRuleGroup" + "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 531, + "startLine": 239, "startColumn": 4, - "endLine": 531, + "endLine": 239, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -73918,19 +71920,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FirewallRuleGroupAssociation' of type 'AWS::Route53Resolver::FirewallRuleGroupAssociation' supports Tags but none are configured", + "message": "Resource 'UrlShortenerApiDomain85D0CE65' of type 'AWS::ApiGateway::DomainName' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FirewallRuleGroupAssociation", + "logicalId": "UrlShortenerApiDomain85D0CE65", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" + "resourceType": "AWS::ApiGateway::DomainName" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 557, + "startLine": 492, "startColumn": 4, - "endLine": 557, + "endLine": 492, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" diff --git a/src/resources/expected/validation_reports5.json b/src/resources/expected/validation_reports5.json index 4a7bc1e5..2c1c14d6 100644 --- a/src/resources/expected/validation_reports5.json +++ b/src/resources/expected/validation_reports5.json @@ -1,14 +1,14 @@ { - "cdk/s3-object-lambda--S3ObjectLambdaStack.template.json": { - "filePath": "cdk/s3-object-lambda--S3ObjectLambdaStack.template.json", + "cdk/py-url-shortener--urlshort-load-test.template.json": { + "filePath": "cdk/py-url-shortener--urlshort-load-test.template.json", "status": "OK", "metadata": { - "resourcesScanned": 9, + "resourcesScanned": 8, "counts": { "fatal": 0, "errors": 0, - "warnings": 3, - "informational": 12, + "warnings": 0, + "informational": 18, "debug": 0 }, "suppressed": 0, @@ -17,110 +17,115 @@ }, "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "retrieveTransformedObjectLambdaD5D6532C", + "logicalId": "generatorPingTask1D3C2E79", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 155, + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 32, "startColumn": 5, - "endLine": 155, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 32, + "endColumn": 26, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs20.x", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'retrieveTransformedObjectLambdaServiceRole27FF342E' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "retrieveTransformedObjectLambdaD5D6532C", + "logicalId": "generatorPingTask1D3C2E79", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 157, - "startColumn": 4, - "endLine": 157, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 47, + "startColumn": 5, + "endLine": 47, + "endColumn": 9, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3045", - "severity": "WARN", - "message": "AccessControl property is deprecated. Use bucket policies instead", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "examplebucketC9DFA43E", + "logicalId": "generatorPingTask1D3C2E79", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.AccessControl", - "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", - "category": "Deprecation", - "startLine": 6, + "propertyPath": "Properties.ExecutionRoleArn", + "category": "Best Practice", + "startLine": 48, "startColumn": 5, - "endLine": 6, - "endColumn": 19, - "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", - "phase": "LINT", + "endLine": 48, + "endColumn": 22, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { - "actualValue": "BucketOwnerFullControl" + "lifecycle": "create-only", + "resolutionSource": "GetAtt generatorPingTaskExecutionRoleA7BE7F8B.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "examplebucketPolicyE09B485E", + "logicalId": "generatorPingTask1D3C2E79", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 32, + "startLine": 54, "startColumn": 5, - "endLine": 32, + "endLine": 54, "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'examplebucketC9DFA43E'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "retrieveTransformedObjectLambdainvocationRestrictionD58B0218", + "logicalId": "generatorPingTask1D3C2E79", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 171, + "startLine": 55, "startColumn": 5, - "endLine": 171, + "endLine": 55, "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -130,42 +135,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "retrieveTransformedObjectLambdainvocationRestrictionD58B0218", + "logicalId": "generatorPingTask1D3C2E79", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 172, + "startLine": 56, "startColumn": 5, - "endLine": 172, - "endColumn": 18, + "endLine": 56, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt retrieveTransformedObjectLambdaD5D6532C.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "retrieveTransformedObjectLambdainvocationRestrictionD58B0218", + "logicalId": "generatorPingTask1D3C2E79", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 178, + "startLine": 57, "startColumn": 5, - "endLine": 178, - "endColumn": 15, + "endLine": 57, + "endColumn": 29, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -175,66 +181,88 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceAccount' is create-only; updating it will cause resource replacement", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "retrieveTransformedObjectLambdainvocationRestrictionD58B0218", + "logicalId": "generatorPingTask1D3C2E79", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.SourceAccount", + "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 181, + "startLine": 60, "startColumn": 5, - "endLine": 181, - "endColumn": 19, + "endLine": 60, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt generatorPingTaskTaskRoleA4886BE8.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "exampleBucketAP", + "logicalId": "generatorserviceServiceA6AC5079", "entityType": "Resource", - "resourceType": "AWS::S3::AccessPoint" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 192, + "startLine": 138, "startColumn": 5, - "endLine": 192, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-s3", + "endLine": 138, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'examplebucketC9DFA43E'" + "resolutionSource": "Ref to 'generatorcluster9804CB70'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "exampleBucketAP", + "logicalId": "generatorserviceServiceA6AC5079", "entityType": "Resource", - "resourceType": "AWS::S3::AccessPoint" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 195, + "startLine": 152, "startColumn": 5, - "endLine": 195, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-s3", + "endLine": 152, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "generatorserviceSecurityGroup3D8BECF8", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 185, + "startColumn": 5, + "endLine": 185, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -244,20 +272,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "s3ObjectLambdaAP", + "logicalId": "generatorserviceSecurityGroup3D8BECF8", "entityType": "Resource", - "resourceType": "AWS::S3ObjectLambda::AccessPoint" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 238, + "startLine": 193, "startColumn": 5, - "endLine": 238, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 193, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -267,39 +294,39 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'examplebucketC9DFA43E' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'generatorcluster9804CB70' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "examplebucketC9DFA43E", + "logicalId": "generatorcluster9804CB70", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECS::Cluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 28, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'retrieveTransformedObjectLambdaServiceRole27FF342E' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'generatorPingTaskTaskRoleA4886BE8' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "retrieveTransformedObjectLambdaServiceRole27FF342E", + "logicalId": "generatorPingTaskTaskRoleA4886BE8", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 83, + "startLine": 11, "startColumn": 4, - "endLine": 83, + "endLine": 11, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -307,19 +334,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'retrieveTransformedObjectLambdaD5D6532C' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'generatorPingTask1D3C2E79' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "retrieveTransformedObjectLambdaD5D6532C", + "logicalId": "generatorPingTask1D3C2E79", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 141, + "startLine": 31, "startColumn": 4, - "endLine": 141, + "endLine": 31, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -327,35 +354,75 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'exampleBucketAP' of type 'AWS::S3::AccessPoint' supports Tags but none are configured", + "message": "Resource 'generatorPingTaskExecutionRoleA7BE7F8B' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "exampleBucketAP", + "logicalId": "generatorPingTaskExecutionRoleA7BE7F8B", "entityType": "Resource", - "resourceType": "AWS::S3::AccessPoint" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 191, + "startLine": 73, "startColumn": 4, - "endLine": 191, + "endLine": 73, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'generatorserviceServiceA6AC5079' of type 'AWS::ECS::Service' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "generatorserviceServiceA6AC5079", + "entityType": "Resource", + "resourceType": "AWS::ECS::Service" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 137, + "startColumn": 4, + "endLine": 137, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'generatorserviceSecurityGroup3D8BECF8' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "generatorserviceSecurityGroup3D8BECF8", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 184, + "startColumn": 4, + "endLine": 184, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/ssm-document-association--SsmDocumentAssociationStack.template.json": { - "filePath": "cdk/ssm-document-association--SsmDocumentAssociationStack.template.json", + "cdk/r53-resolver--R53ResolverStack.template.json": { + "filePath": "cdk/r53-resolver--R53ResolverStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 17, + "resourcesScanned": 18, "counts": { "fatal": 0, "errors": 0, "warnings": 1, - "informational": 28, + "informational": 33, "debug": 0 }, "suppressed": 0, @@ -376,97 +443,28 @@ "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 316, + "startLine": 271, "startColumn": 4, - "endLine": 316, + "endLine": 271, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Content' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TimeWriterDocument", - "entityType": "Resource", - "resourceType": "AWS::SSM::Document" - }, - "propertyPath": "Properties.Content", - "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DocumentType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TimeWriterDocument", - "entityType": "Resource", - "resourceType": "AWS::SSM::Document" - }, - "propertyPath": "Properties.DocumentType", - "category": "Best Practice", - "startLine": 36, - "startColumn": 5, - "endLine": 36, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TimeWriterDocument", - "entityType": "Resource", - "resourceType": "AWS::SSM::Document" - }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 37, - "startColumn": 5, - "endLine": 37, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpc2979FA29", + "logicalId": "R53ResolverTestVPC9B993306", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 71, + "startLine": 6, "startColumn": 5, - "endLine": 71, + "endLine": 6, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -480,15 +478,15 @@ "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpc2979FA29", + "logicalId": "R53ResolverTestVPC9B993306", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 74, + "startLine": 9, "startColumn": 5, - "endLine": 74, + "endLine": 9, "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -502,15 +500,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E", + "logicalId": "R53ResolverTestVPCPrivateSubnet1Subnet5DBB6B2C", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 89, + "startLine": 24, "startColumn": 5, - "endLine": 89, + "endLine": 24, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -524,15 +522,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E", + "logicalId": "R53ResolverTestVPCPrivateSubnet1Subnet5DBB6B2C", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 97, + "startLine": 32, "startColumn": 5, - "endLine": 97, + "endLine": 32, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -546,21 +544,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E", + "logicalId": "R53ResolverTestVPCPrivateSubnet1Subnet5DBB6B2C", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 113, + "startLine": 48, "startColumn": 5, - "endLine": 113, + "endLine": 48, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SSMDocumentTestVpc2979FA29'" + "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" } }, { @@ -569,22 +567,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpcpublicSubnet1RouteTable4C0F352E", + "logicalId": "R53ResolverTestVPCPrivateSubnet1RouteTable6E169019", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 130, + "startLine": 65, "startColumn": 5, - "endLine": 130, + "endLine": 65, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SSMDocumentTestVpc2979FA29'" + "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" } }, { @@ -593,22 +591,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpcpublicSubnet1RouteTableAssociation3C51BE77", + "logicalId": "R53ResolverTestVPCPrivateSubnet1RouteTableAssociation41B46D9B", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 141, + "startLine": 76, "startColumn": 5, - "endLine": 141, + "endLine": 76, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SSMDocumentTestVpcpublicSubnet1RouteTable4C0F352E'", + "resolutionSource": "Ref to 'R53ResolverTestVPCPrivateSubnet1RouteTable6E169019'", "extra": { "replacement_strategy": "delete_then_create" } @@ -620,22 +618,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpcpublicSubnet1RouteTableAssociation3C51BE77", + "logicalId": "R53ResolverTestVPCPrivateSubnet1RouteTableAssociation41B46D9B", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 144, + "startLine": 79, "startColumn": 5, - "endLine": 144, + "endLine": 79, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E'", + "resolutionSource": "Ref to 'R53ResolverTestVPCPrivateSubnet1Subnet5DBB6B2C'", "extra": { "replacement_strategy": "delete_then_create" } @@ -644,20 +642,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpcpublicSubnet1DefaultRouteE60C709F", + "logicalId": "R53ResolverTestVPCPrivateSubnet2Subnet495784E7", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 155, + "startLine": 90, "startColumn": 5, - "endLine": 155, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 90, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -667,25 +664,23 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpcpublicSubnet1DefaultRouteE60C709F", + "logicalId": "R53ResolverTestVPCPrivateSubnet2Subnet495784E7", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 159, + "startLine": 98, "startColumn": 5, - "endLine": 159, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 98, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'SSMDocumentTestVpcpublicSubnet1RouteTable4C0F352E'" + "lifecycle": "create-only" } }, { @@ -694,112 +689,163 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpcVPCGW7C58FC59", + "logicalId": "R53ResolverTestVPCPrivateSubnet2Subnet495784E7", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 190, + "startLine": 114, "startColumn": 5, - "endLine": 190, + "endLine": 114, "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SSMDocumentTestVpc2979FA29'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMTestInstanceInstanceSecurityGroup68B5BAFB", + "logicalId": "R53ResolverTestVPCPrivateSubnet2RouteTable0899A697", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 362, + "startLine": 131, "startColumn": 5, - "endLine": 362, - "endColumn": 22, + "endLine": 131, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMTestInstanceInstanceSecurityGroup68B5BAFB", + "logicalId": "R53ResolverTestVPCPrivateSubnet2RouteTableAssociation53E27A3B", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 380, + "startLine": 142, "startColumn": 5, - "endLine": 380, - "endColumn": 11, + "endLine": 142, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SSMDocumentTestVpc2979FA29'" + "resolutionSource": "Ref to 'R53ResolverTestVPCPrivateSubnet2RouteTable0899A697'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMTestInstanceA55C9969", + "logicalId": "R53ResolverTestVPCPrivateSubnet2RouteTableAssociation53E27A3B", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 404, + "startLine": 145, "startColumn": 5, - "endLine": 404, - "endColumn": 22, + "endLine": 145, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" - } - }, - { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'R53ResolverTestVPCPrivateSubnet2Subnet495784E7'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'FirewallRuleGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMTestInstanceA55C9969", + "logicalId": "BlockListRuleGroupDirectBlockListRuleGroupAssociation40E90DB0", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.FirewallRuleGroupId", "category": "Best Practice", - "startLine": 415, + "startLine": 316, "startColumn": 5, - "endLine": 415, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 316, + "endColumn": 25, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt BlockListRuleGroup55F6B55D.Id" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "BlockListRuleGroupDirectBlockListRuleGroupAssociation40E90DB0", + "entityType": "Resource", + "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 323, + "startColumn": 5, + "endLine": 323, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "sgoutboundendpointEC0509A3", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 334, + "startColumn": 5, + "endLine": 334, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -809,121 +855,179 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMTestInstanceA55C9969", + "logicalId": "sgoutboundendpointEC0509A3", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 418, + "startLine": 396, "startColumn": 5, - "endLine": 418, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 396, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Direction' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMTestInstanceA55C9969", + "logicalId": "OutboundEndpoint", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Route53Resolver::ResolverEndpoint" + }, + "propertyPath": "Properties.Direction", + "category": "Best Practice", + "startLine": 407, + "startColumn": 5, + "endLine": 407, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53resolver", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SecurityGroupIds' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OutboundEndpoint", + "entityType": "Resource", + "resourceType": "AWS::Route53Resolver::ResolverEndpoint" }, "propertyPath": "Properties.SecurityGroupIds", "category": "Best Practice", - "startLine": 419, + "startLine": 420, "startColumn": 5, - "endLine": 419, + "endLine": 420, "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53resolver", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMTestInstanceA55C9969", + "logicalId": "sginboundendpoint32081788", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 427, + "startLine": 436, "startColumn": 5, - "endLine": 427, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 436, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "sginboundendpoint32081788", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 460, + "startColumn": 5, + "endLine": 460, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E'" + "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Direction' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMTestInstanceA55C9969", + "logicalId": "InboundEndpoint", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Route53Resolver::ResolverEndpoint" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.Direction", "category": "Best Practice", - "startLine": 440, + "startLine": 471, "startColumn": 5, - "endLine": 440, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 471, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53resolver", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { - "ruleId": "I9003", + "ruleId": "I9001", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "message": "Property 'SecurityGroupIds' is create-only; updating it will cause resource replacement", "source": "ENGINE", + "entity": { + "logicalId": "InboundEndpoint", + "entityType": "Resource", + "resourceType": "AWS::Route53Resolver::ResolverEndpoint" + }, + "propertyPath": "Properties.SecurityGroupIds", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" + "startLine": 484, + "startColumn": 5, + "endLine": 484, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53resolver", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TimeWriterDocument' of type 'AWS::SSM::Document' supports Tags but none are configured", + "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TimeWriterDocument", + "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0", "entityType": "Resource", - "resourceType": "AWS::SSM::Document" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 180, "startColumn": 4, - "endLine": 5, + "endLine": 180, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -931,19 +1035,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DocumentAssociation' of type 'AWS::SSM::Association' supports Tags but none are configured", + "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DocumentAssociation", + "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", "entityType": "Resource", - "resourceType": "AWS::SSM::Association" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 45, + "startLine": 252, "startColumn": 4, - "endLine": 45, + "endLine": 252, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -951,19 +1055,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'BlockListC03D0423' of type 'AWS::Route53Resolver::FirewallDomainList' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0", + "logicalId": "BlockListC03D0423", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Route53Resolver::FirewallDomainList" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 225, + "startLine": 282, "startColumn": 4, - "endLine": 225, + "endLine": 282, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -971,19 +1075,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'BlockListRuleGroup55F6B55D' of type 'AWS::Route53Resolver::FirewallRuleGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", + "logicalId": "BlockListRuleGroup55F6B55D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Route53Resolver::FirewallRuleGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 297, + "startLine": 294, "startColumn": 4, - "endLine": 297, + "endLine": 294, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -991,167 +1095,79 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EC2SSMRole1C0EBD7B' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'BlockListRuleGroupDirectBlockListRuleGroupAssociation40E90DB0' of type 'AWS::Route53Resolver::FirewallRuleGroupAssociation' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EC2SSMRole1C0EBD7B", + "logicalId": "BlockListRuleGroupDirectBlockListRuleGroupAssociation40E90DB0", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 327, + "startLine": 315, "startColumn": 4, - "endLine": 327, + "endLine": 315, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "cdk/static-site-basic--MyStaticSite.template.json": { - "filePath": "cdk/static-site-basic--MyStaticSite.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 11, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 7, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W3005", - "severity": "WARN", - "message": "'CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'sgoutboundendpointEC0509A3' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "logicalId": "sgoutboundendpointEC0509A3", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 235, + "startLine": 333, "startColumn": 4, - "endLine": 235, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 333, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'OutboundEndpoint' of type 'AWS::Route53Resolver::ResolverEndpoint' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", + "logicalId": "OutboundEndpoint", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Route53Resolver::ResolverEndpoint" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 404, + "startLine": 406, "startColumn": 4, - "endLine": 404, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 406, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Resource 'sginboundendpoint32081788' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StaticSiteBasicWebsiteBucketPolicy8E799A1F", + "logicalId": "sginboundendpoint32081788", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" - }, - "propertyPath": "Properties.Bucket", - "category": "Best Practice", - "startLine": 35, - "startColumn": 5, - "endLine": 35, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'StaticSiteBasicWebsiteBucket3BB70B77'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Content' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "StaticSiteBasicDeployWebsiteAwsCliLayer198D4134", - "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" - }, - "propertyPath": "Properties.Content", - "category": "Best Practice", - "startLine": 133, - "startColumn": 5, - "endLine": 133, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "StaticSiteBasicDeployWebsiteAwsCliLayer198D4134", - "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" - }, - "propertyPath": "Properties.Description", - "category": "Best Practice", - "startLine": 139, - "startColumn": 5, - "endLine": 139, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 180, + "startLine": 435, "startColumn": 4, - "endLine": 180, + "endLine": 435, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -1159,98 +1175,121 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'InboundEndpoint' of type 'AWS::Route53Resolver::ResolverEndpoint' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "logicalId": "InboundEndpoint", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Route53Resolver::ResolverEndpoint" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 205, + "startLine": 470, "startColumn": 4, - "endLine": 205, + "endLine": 470, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "cdk/rekognition-lambda-s3-trigger--RekognitionLambdaS3TriggerStack.template.json": { + "filePath": "cdk/rekognition-lambda-s3-trigger--RekognitionLambdaS3TriggerStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 15, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 4, + "informational": 14, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", + "logicalId": "RekFunction9837D13D", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 310, + "startColumn": 5, + "endLine": 310, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs20.x", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'RekFunctionServiceRole3947AEF4' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "RekFunction9837D13D", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 246, + "startLine": 312, "startColumn": 4, - "endLine": 246, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endLine": 312, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", + "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 377, + "startLine": 428, "startColumn": 4, - "endLine": 377, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endLine": 428, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" - } - ] - }, - "cdk/stepfunction-external-definition--StepfunctionExternalDefinitionStack.template.json": { - "filePath": "cdk/stepfunction-external-definition--StepfunctionExternalDefinitionStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 12, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 17, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "W3005", "severity": "WARN", - "message": "'MyStateMachineRoleD59FFEBC' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", + "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "MyStateMachine6C968CA5", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 109, + "startLine": 516, "startColumn": 4, - "endLine": 109, + "endLine": 516, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -1258,20 +1297,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyStateMachineLogGroup9955D1FE", + "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 6, + "startLine": 103, "startColumn": 5, - "endLine": 6, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "endLine": 103, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -1281,255 +1319,171 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StateMachineType' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyStateMachine6C968CA5", + "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.StateMachineType", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 107, + "startLine": 104, "startColumn": 5, - "endLine": 107, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-stepfunctions.git", + "endLine": 104, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt RekFunction9837D13D.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiDeployment77C863276f473a57d5bd4cb772b382f83651c7a2", + "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 138, + "startLine": 110, "startColumn": 5, - "endLine": 138, + "endLine": 110, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'StepFuncApiE896FCA7'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceAccount' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiDeploymentStageprod5FF8FD8E", + "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.SourceAccount", "category": "Best Practice", - "startLine": 157, + "startLine": 111, "startColumn": 5, - "endLine": 157, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 111, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'StepFuncApiE896FCA7'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiDeploymentStageprod5FF8FD8E", + "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 160, + "startLine": 114, "startColumn": 5, - "endLine": 160, + "endLine": 114, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt Bucket83908E77.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiorders391C1FA5", + "logicalId": "Classifications0C921F6C", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 169, - "startColumn": 5, - "endLine": 169, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt StepFuncApiE896FCA7.RootResourceId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "StepFuncApiorders391C1FA5", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" - }, - "propertyPath": "Properties.PathPart", - "category": "Best Practice", - "startLine": 175, - "startColumn": 5, - "endLine": 175, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "StepFuncApiorders391C1FA5", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 176, + "startLine": 134, "startColumn": 5, - "endLine": 176, + "endLine": 134, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'StepFuncApiE896FCA7'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "StepFuncApiordersGET0318ABB9", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.HttpMethod", - "category": "Best Practice", - "startLine": 234, - "startColumn": 5, - "endLine": 234, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Bucket83908E77' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiordersGET0318ABB9", + "logicalId": "Bucket83908E77", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 318, - "startColumn": 5, - "endLine": 318, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'StepFuncApiorders391C1FA5'" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Classifications0C921F6C' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiordersGET0318ABB9", + "logicalId": "Classifications0C921F6C", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 321, - "startColumn": 5, - "endLine": 321, + "startLine": 127, + "startColumn": 4, + "endLine": 127, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'StepFuncApiE896FCA7'" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyStateMachineLogGroup9955D1FE' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Resource 'RekFunctionServiceRole3947AEF4' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyStateMachineLogGroup9955D1FE", + "logicalId": "RekFunctionServiceRole3947AEF4", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 153, "startColumn": 4, - "endLine": 5, + "endLine": 153, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -1537,19 +1491,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyStateMachineRoleD59FFEBC' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'RekFunction9837D13D' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyStateMachineRoleD59FFEBC", + "logicalId": "RekFunction9837D13D", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, + "startLine": 286, "startColumn": 4, - "endLine": 17, + "endLine": 286, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -1557,19 +1511,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyStateMachine6C968CA5' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "message": "Resource 'BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyStateMachine6C968CA5", + "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 83, + "startLine": 350, "startColumn": 4, - "endLine": 83, + "endLine": 350, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -1577,19 +1531,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'StepFuncApiE896FCA7' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Resource 'BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiE896FCA7", + "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 121, + "startLine": 413, "startColumn": 4, - "endLine": 121, + "endLine": 413, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -1597,19 +1551,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'StepFuncApiDeploymentStageprod5FF8FD8E' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiDeploymentStageprod5FF8FD8E", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 153, + "startLine": 438, "startColumn": 4, - "endLine": 153, + "endLine": 438, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -1617,35 +1571,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'StepFuncApiordersGETStartSyncExecutionRole90998151' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiordersGETStartSyncExecutionRole90998151", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 186, + "startLine": 499, "startColumn": 4, - "endLine": 186, + "endLine": 499, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/stepfunctions-job-poller--aws-stepfunctions-integ.template.json": { - "filePath": "cdk/stepfunctions-job-poller--aws-stepfunctions-integ.template.json", + "cdk/resource-overrides--resource-overrides.template.json": { + "filePath": "cdk/resource-overrides--resource-overrides.template.json", "status": "OK", "metadata": { - "resourcesScanned": 11, + "resourcesScanned": 21, "counts": { - "fatal": 0, - "errors": 0, - "warnings": 5, - "informational": 8, + "fatal": 2, + "errors": 2, + "warnings": 4, + "informational": 31, "debug": 0 }, "suppressed": 0, @@ -1654,87 +1608,128 @@ }, "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "F3002", + "severity": "FATAL", + "message": "Additional properties are not allowed ('Foo' was unexpected)", + "source": "SCHEMA", "entity": { - "logicalId": "CheckLambda9CBBF9BA", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 50, + "propertyPath": "Properties.Foo", + "category": "Schema", + "startLine": 418, "startColumn": 5, - "endLine": 50, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 418, + "endColumn": 9, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Additional properties are not allowed", "phase": "SCHEMA", "context": { - "actualValue": "python3.9", - "lifecycle": "deprecated" + "property": "Foo", + "extra": { + "allowed_properties": [ + "AssociatePublicIpAddress", + "BlockDeviceMappings", + "ClassicLinkVPCId", + "ClassicLinkVPCSecurityGroups", + "EbsOptimized", + "IamInstanceProfile", + "ImageId", + "InstanceId", + "InstanceMonitoring", + "InstanceType", + "KernelId", + "KeyName", + "LaunchConfigurationName", + "MetadataOptions", + "PlacementTenancy", + "RamDiskId", + "SecurityGroups", + "SpotPrice", + "UserData" + ] + } } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "F3006", + "severity": "FATAL", + "message": "Unknown resource type 'AWS::S3::Bucketeer'", + "source": "SCHEMA", "entity": { - "logicalId": "SubmitLambda8054545E", + "logicalId": "MyBucketF68F3FF0", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucketeer" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 107, - "startColumn": 5, - "endLine": 107, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "category": "Schema", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 20, + "ruleDescription": "AWS resource type must be recognized and available in the configured region", "phase": "SCHEMA", "context": { - "actualValue": "python3.9", - "lifecycle": "deprecated" + "extra": { + "resource_type": "AWS::S3::Bucketeer" + } } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'CheckLambdaServiceRole74B86E23' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "ruleId": "E3001", + "severity": "ERROR", + "message": "Resource 'MyBucketF68F3FF0' has invalid property 'Transform'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", "source": "CFN_LINT", "entity": { - "logicalId": "CheckLambda9CBBF9BA", + "logicalId": "MyBucketF68F3FF0", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucketeer" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 53, + "category": "Resource", + "startLine": 78, "startColumn": 4, - "endLine": 53, + "endLine": 78, "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "ruleDescription": "Basic CloudFormation Resource Check", + "phase": "PARSE" + }, + { + "ruleId": "E3016", + "severity": "ERROR", + "message": "UpdatePolicy is not supported on resource type 'AWS::S3::Bucketeer'", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyBucketF68F3FF0", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucketeer" + }, + "propertyPath": "UpdatePolicy", + "suggestedFix": "Remove UpdatePolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::ElastiCache::ReplicationGroup, AWS::Elasticsearch::Domain, AWS::Lambda::Alias, AWS::OpenSearchService::Domain", + "category": "Resource", + "startLine": 71, + "startColumn": 4, + "endLine": 71, + "endColumn": 17, + "ruleDescription": "Check UpdatePolicy values for Resources", "phase": "LINT" }, { "ruleId": "W3005", "severity": "WARN", - "message": "'SubmitLambdaServiceRole98C85C39' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'Other34654A52' dependency already enforced by a 'GetAtt' at 'Properties.AnalyticsConfigurations.0.StorageClassAnalysis.DataExport.Destination.BucketArn'", "source": "CFN_LINT", "entity": { - "logicalId": "SubmitLambda8054545E", + "logicalId": "MyBucketF68F3FF0", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucketeer" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 110, + "startLine": 68, "startColumn": 4, - "endLine": 110, + "endLine": 68, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" @@ -1742,274 +1737,268 @@ { "ruleId": "W3005", "severity": "WARN", - "message": "'CronStateMachineRoleFE85923B' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", + "message": "'Other34654A52' dependency already enforced by a 'GetAtt' at 'Properties.Token'", "source": "CFN_LINT", "entity": { - "logicalId": "CronStateMachine7E50955B", + "logicalId": "MyBucketF68F3FF0", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::S3::Bucketeer" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 259, + "startLine": 68, "startColumn": 4, - "endLine": 259, + "endLine": 68, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CheckLambdaServiceRole74B86E23' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'Other34654A52' dependency already enforced by a 'Ref' at 'Properties.LoggingConfiguration.DestinationBucketName'", + "source": "CFN_LINT", "entity": { - "logicalId": "CheckLambdaServiceRole74B86E23", + "logicalId": "MyBucketF68F3FF0", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::S3::Bucketeer" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 5, + "startLine": 68, "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endLine": 68, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "ASGLaunchConfigC00AF12B", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "category": "Deprecation", + "startLine": 397, + "startColumn": 3, + "endLine": 397, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" + }, + { + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CheckLambda9CBBF9BA' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CheckLambda9CBBF9BA", + "logicalId": "VPCB9E5F0B4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 39, - "startColumn": 4, - "endLine": 39, + "startLine": 83, + "startColumn": 5, + "endLine": 83, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SubmitLambdaServiceRole98C85C39' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubmitLambdaServiceRole98C85C39", + "logicalId": "VPCB9E5F0B4", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 62, - "startColumn": 4, - "endLine": 62, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 86, + "startColumn": 5, + "endLine": 86, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SubmitLambda8054545E' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubmitLambda8054545E", + "logicalId": "VPCPublicSubnet1SubnetB4246D30", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 96, - "startColumn": 4, - "endLine": 96, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 101, + "startColumn": 5, + "endLine": 101, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CronStateMachineRoleFE85923B' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CronStateMachineRoleFE85923B", + "logicalId": "VPCPublicSubnet1SubnetB4246D30", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 119, - "startColumn": 4, - "endLine": 119, + "startLine": 109, + "startColumn": 5, + "endLine": 109, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CronStateMachine7E50955B' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CronStateMachine7E50955B", + "logicalId": "VPCPublicSubnet1SubnetB4246D30", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 210, - "startColumn": 4, - "endLine": 210, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 125, + "startColumn": 5, + "endLine": 125, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CronStateMachineEventsRoleA3F136B0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CronStateMachineEventsRoleA3F136B0", + "logicalId": "VPCPublicSubnet1RouteTableFEE4B781", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 271, - "startColumn": 4, - "endLine": 271, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 142, + "startColumn": 5, + "endLine": 142, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Rule4C995B7F' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Rule4C995B7F", + "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 317, - "startColumn": 4, - "endLine": 317, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "empty.yaml": { - "filePath": "empty.yaml", - "status": "ERROR", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 + "startLine": 153, + "startColumn": 5, + "endLine": 153, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F1101", - "severity": "FATAL", - "message": "Empty YAML document", - "source": "SCHEMA", - "category": "Structure", - "startLine": 1, - "startColumn": 1, - "endLine": 1, - "endColumn": 1, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" - } - ] - }, - "gh-issues/issue-144.yaml": { - "filePath": "gh-issues/issue-144.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Flow", + "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", "entityType": "Resource", - "resourceType": "AWS::MediaConnect::Flow" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-mediaconnect.git", + "startLine": 156, + "startColumn": 5, + "endLine": 156, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Source.Name' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Flow", + "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", "entityType": "Resource", - "resourceType": "AWS::MediaConnect::Flow" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Source.Name", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 13, - "startColumn": 9, - "endLine": 13, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-mediaconnect.git", + "startLine": 167, + "startColumn": 5, + "endLine": 167, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2017,159 +2006,113 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Flow' of type 'AWS::MediaConnect::Flow' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Flow", + "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", "entityType": "Resource", - "resourceType": "AWS::MediaConnect::Flow" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 10, + "startLine": 171, "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "gh-issues/issue-183.yaml": { - "filePath": "gh-issues/issue-183.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 4, - "informational": 9, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F3031", - "severity": "FATAL", - "message": "'arn:aws:sqs:us-east-1:1111111111:MyQueue' does not match pattern '^arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:((eusc-)?[a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)$'", - "source": "SCHEMA", - "entity": { - "logicalId": "PermissionInvalidAccountId", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Schema", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 16, - "ruleDescription": "Value does not match pattern", + "endLine": 171, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "arn:aws:sqs:us-east-1:1111111111:MyQueue", - "expectedConstraint": "^arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:((eusc-)?[a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)$" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'" } }, { - "ruleId": "W3663", - "severity": "WARN", - "message": "Lambda Permission with a SourceArn that has no account id should also specify SourceAccount", - "source": "CFN_LINT", - "entity": { - "logicalId": "PermissionInvalidAccountId", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties", - "suggestedFix": "Add SourceAccount property", - "category": "Security", - "startLine": 31, - "startColumn": 5, - "endLine": 31, - "endColumn": 15, - "ruleDescription": "Validate SourceAccount is required property", - "phase": "LINT" - }, - { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'SourceArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionWithAccountId", + "logicalId": "VPCPublicSubnet1NATGatewayE0556630", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 25, - "startColumn": 7, - "endLine": 25, - "endColumn": 16, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" + "startLine": 200, + "startColumn": 5, + "endLine": 200, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt VPCPublicSubnet1EIP6AD938E8.AllocationId" + } }, { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'SourceArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionInvalidAccountId", + "logicalId": "VPCPublicSubnet1NATGatewayE0556630", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 16, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" + "startLine": 206, + "startColumn": 5, + "endLine": 206, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'" + } }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionWithAccountId", + "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "category": "Security", - "startLine": 19, - "startColumn": 3, - "endLine": 19, - "endColumn": 26, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 227, + "startColumn": 5, + "endLine": 227, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionWithAccountId", + "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 22, - "startColumn": 7, - "endLine": 22, - "endColumn": 13, + "startLine": 235, + "startColumn": 5, + "endLine": 235, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2179,359 +2122,333 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionWithAccountId", + "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 19, + "startLine": 251, + "startColumn": 5, + "endLine": 251, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt MyLambda.Arn" + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionWithAccountId", + "logicalId": "VPCPrivateSubnet1RouteTableBE8A6027", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 24, - "startColumn": 7, - "endLine": 24, - "endColumn": 16, + "startLine": 268, + "startColumn": 5, + "endLine": 268, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionWithAccountId", + "logicalId": "VPCPrivateSubnet1RouteTableAssociation347902D1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 25, - "startColumn": 7, - "endLine": 25, - "endColumn": 16, + "startLine": 279, + "startColumn": 5, + "endLine": 279, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPrivateSubnet1RouteTableBE8A6027'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionInvalidAccountId", + "logicalId": "VPCPrivateSubnet1RouteTableAssociation347902D1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 32, - "startColumn": 7, - "endLine": 32, - "endColumn": 13, + "startLine": 282, + "startColumn": 5, + "endLine": 282, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPrivateSubnet1Subnet8BCA10E0'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionInvalidAccountId", + "logicalId": "VPCPrivateSubnet1DefaultRouteAE1D6490", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 19, + "startLine": 293, + "startColumn": 5, + "endLine": 293, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt MyLambda.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionInvalidAccountId", + "logicalId": "VPCPrivateSubnet1DefaultRouteAE1D6490", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 34, - "startColumn": 7, - "endLine": 34, - "endColumn": 16, + "startLine": 297, + "startColumn": 5, + "endLine": 297, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPrivateSubnet1RouteTableBE8A6027'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionInvalidAccountId", + "logicalId": "VPCVPCGW99B986DC", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 16, + "startLine": 325, + "startColumn": 5, + "endLine": 325, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyLambda", + "logicalId": "ASGInstanceSecurityGroup0525485D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 12, + "startLine": 336, "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "gh-issues/issue-184.yaml": { - "filePath": "gh-issues/issue-184.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 5, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3025", - "severity": "ERROR", - "message": "'db.m5.large' is not one of ['db.r3.2xlarge', 'db.r3.4xlarge', 'db.r3.8xlarge', 'db.r3.large', 'db.r3.xlarge', 'db.r4.16xlarge', 'db.r4.2xlarge', 'db.r4.4xlarge', 'db.r4.8xlarge', 'db.r4.large', 'db.r4.xlarge', 'db.r5.12xlarge', 'db.r5.16xlarge', 'db.r5.24xlarge', 'db.r5.2xlarge', 'db.r5.4xlarge', 'db.r5.8xlarge', 'db.r5.large', 'db.r5.xlarge', 'db.r6g.12xlarge', 'db.r6g.16xlarge', 'db.r6g.2xlarge', 'db.r6g.4xlarge', 'db.r6g.8xlarge', 'db.r6g.large', 'db.r6g.xlarge', 'db.r6i.12xlarge', 'db.r6i.16xlarge', 'db.r6i.24xlarge', 'db.r6i.2xlarge', 'db.r6i.32xlarge', 'db.r6i.4xlarge', 'db.r6i.8xlarge', 'db.r6i.large', 'db.r6i.xlarge', 'db.r7g.12xlarge', 'db.r7g.16xlarge', 'db.r7g.2xlarge', 'db.r7g.4xlarge', 'db.r7g.8xlarge', 'db.r7g.large', 'db.r7g.xlarge', 'db.r7i.12xlarge', 'db.r7i.16xlarge', 'db.r7i.24xlarge', 'db.r7i.2xlarge', 'db.r7i.48xlarge', 'db.r7i.4xlarge', 'db.r7i.8xlarge', 'db.r7i.large', 'db.r7i.xlarge', 'db.r8g.12xlarge', 'db.r8g.16xlarge', 'db.r8g.24xlarge', 'db.r8g.2xlarge', 'db.r8g.48xlarge', 'db.r8g.4xlarge', 'db.r8g.8xlarge', 'db.r8g.large', 'db.r8g.xlarge', 'db.serverless', 'db.t2.medium', 'db.t2.small', 'db.t3.large', 'db.t3.medium', 'db.t3.small', 'db.t4g.large', 'db.t4g.medium', 'db.x2g.12xlarge', 'db.x2g.16xlarge', 'db.x2g.2xlarge', 'db.x2g.4xlarge', 'db.x2g.8xlarge', 'db.x2g.large', 'db.x2g.xlarge'] when Engine is 'aurora-mysql' in any region", - "source": "CFN_LINT", - "entity": { - "logicalId": "AuroraInstance", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.DBInstanceClass", - "category": "Resource", - "startLine": 5, - "startColumn": 7, - "endLine": 5, + "endLine": 336, "endColumn": 22, - "ruleDescription": "Validates RDS DB Instance Class", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AuroraInstance", + "logicalId": "ASGInstanceSecurityGroup0525485D", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 2, - "startColumn": 3, - "endLine": 2, - "endColumn": 17, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 350, + "startColumn": 5, + "endLine": 350, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AuroraInstance", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, + "propertyPath": "Properties.IamInstanceProfile", "category": "Best Practice", - "startLine": 2, - "startColumn": 3, - "endLine": 2, - "endColumn": 17, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 400, + "startColumn": 5, + "endLine": 400, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ASGInstanceProfile0A2834D7'" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AuroraInstance", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, + "startLine": 403, + "startColumn": 5, + "endLine": 403, "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { - "ruleId": "I9003", + "ruleId": "I9001", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", "source": "ENGINE", + "entity": { + "logicalId": "ASGLaunchConfigC00AF12B", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" + "startLine": 406, + "startColumn": 5, + "endLine": 406, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'AuroraInstance' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AuroraInstance", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SecurityGroups", "category": "Best Practice", - "startLine": 4, + "startLine": 407, "startColumn": 5, - "endLine": 4, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "gh-issues/issue-185.yaml": { - "filePath": "gh-issues/issue-185.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "gh-issues/issue-186-clb.json": { - "filePath": "gh-issues/issue-186-clb.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 + "endLine": 407, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", + "message": "Property 'UserData' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CLBA83A883E", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Scheme", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 15, + "startLine": 415, "startColumn": 5, - "endLine": 15, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "endLine": 415, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2541,38 +2458,80 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Subnets' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CLBA83A883E", + "logicalId": "ASG46ED3070", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.Subnets", + "propertyPath": "Properties.LaunchConfigurationName", "category": "Best Practice", - "startLine": 19, + "startLine": 432, "startColumn": 5, - "endLine": 19, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "endLine": 432, + "endColumn": 29, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'ASGLaunchConfigC00AF12B'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ASG46ED3070", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Properties.VPCZoneIdentifier", + "category": "Best Practice", + "startLine": 444, + "startColumn": 5, + "endLine": 444, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "conditional-create-only" } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Other34654A52' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Other34654A52", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "gh-issues/issue-186-imagebuilder.json": { - "filePath": "gh-issues/issue-186-imagebuilder.json", + "cdk/route53-resolver-dns-firewall--Route53ResolverDnsFirewallStack.template.json": { + "filePath": "cdk/route53-resolver-dns-firewall--Route53ResolverDnsFirewallStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 31, "counts": { "fatal": 0, "errors": 0, - "warnings": 1, - "informational": 1, + "warnings": 0, + "informational": 55, "debug": 0 }, "suppressed": 0, @@ -2581,239 +2540,211 @@ }, "diagnostics": [ { - "ruleId": "W3030", - "severity": "WARN", - "message": "'Abort' is not one of ['CONTINUE', 'ABORT']", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ImagePipeline7DDDE57F", + "logicalId": "Vpc8378EB38", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::ImagePipeline" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Workflows.0.OnFailure", - "category": "Schema", - "startLine": 31, - "startColumn": 7, - "endLine": 31, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", - "ruleDescription": "Value not in allowed enum", + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "Abort" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ImagePipeline7DDDE57F", + "logicalId": "Vpc8378EB38", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::ImagePipeline" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.InstanceTenancy", + "category": "Best Practice", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", "startLine": 24, "startColumn": 5, "endLine": 24, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } - } - ] - }, - "gh-issues/issue-194.json": { - "filePath": "gh-issues/issue-194.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'SomeParameter': Default must be a string", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SomeParameter", - "entityType": "Parameter" + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Parameters/SomeParameter/Default", - "category": "Parameter", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 12, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" - } - ] - }, - "gh-issues/issue-201.json": { - "filePath": "gh-issues/issue-201.json", - "status": "OK", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 2, - "errors": 0, - "warnings": 1, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 32, + "startColumn": 5, + "endLine": 32, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F2002", - "severity": "FATAL", - "message": "Parameter 'MyParam' has invalid Type 'Blimp'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyParam", - "entityType": "Parameter" + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Parameters/MyParam/Type", - "category": "Parameter", - "startLine": 4, - "startColumn": 7, - "endLine": 4, - "endColumn": 12, - "ruleDescription": "Parameter Type must be valid", - "phase": "SCHEMA" + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 48, + "startColumn": 5, + "endLine": 48, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'MyParam' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyParam", - "entityType": "Parameter" + "logicalId": "VpcPublicSubnet1RouteTable6C95E38E", + "entityType": "Resource", + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Parameters/MyParam", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 3, + "startLine": 65, "startColumn": 5, - "endLine": 3, - "endColumn": 13, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - } - ] - }, - "gh-issues/issue-226.yaml": { - "filePath": "gh-issues/issue-226.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 4, - "debug": 0 + "endLine": 65, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E9002", - "severity": "ERROR", - "message": "FromPort 443 is greater than ToPort 80", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "InvertedRangeSecurityGroup", + "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.SecurityGroupIngress.0", - "suggestedFix": "Set FromPort to a value less than or equal to ToPort", - "category": "Resource", - "startLine": 26, - "startColumn": 17, - "endLine": 26, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 76, + "startColumn": 5, + "endLine": 76, "endColumn": 18, - "ruleDescription": "SecurityGroup FromPort must be <= ToPort for the TCP and UDP protocols", - "phase": "LINT", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { - "actualValue": [ - { - "CidrIp": "10.0.0.0/8", - "IpProtocol": "tcp", - "FromPort": 443, - "ToPort": 80 - } - ] + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PingSecurityGroup", + "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 23, + "startLine": 79, + "startColumn": 5, + "endLine": 79, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "InvertedRangeSecurityGroup", + "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 24, - "startColumn": 7, - "endLine": 24, - "endColumn": 23, + "startLine": 90, + "startColumn": 5, + "endLine": 90, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2821,2849 +2752,3498 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'PingSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PingSecurityGroup", + "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 10, + "startLine": 94, "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 94, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'InvertedRangeSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "InvertedRangeSecurityGroup", + "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 23, + "startLine": 123, "startColumn": 5, - "endLine": 23, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "gh-issues/issue-235.yaml": { - "filePath": "gh-issues/issue-235.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 38, - "counts": { - "fatal": 2, - "errors": 0, - "warnings": 20, - "informational": 208, - "debug": 0 + "endLine": 123, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt VpcPublicSubnet1EIPD7E02669.AllocationId" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'StorageEncrypted' is a required property (from extension)", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "KmsKeyWithoutEncryption", + "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties", - "suggestedFix": "Add 'StorageEncrypted'", - "category": "Schema", - "startLine": 37, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 129, "startColumn": 5, - "endLine": 37, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "endLine": 129, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'" + } }, { - "ruleId": "F3012", - "severity": "FATAL", - "message": "'invalid' is not of type 'boolean'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "InvalidEncryptionValue", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.StorageEncrypted", - "category": "Schema", - "startLine": 128, - "startColumn": 7, - "endLine": 128, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property type mismatch", + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 150, + "startColumn": 5, + "endLine": 150, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "invalid", - "expectedConstraint": "boolean" + "lifecycle": "create-only" } }, { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'SourceDBInstanceAutomatedBackupsArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AutomatedBackupRestore", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.SourceDBInstanceAutomatedBackupsArn", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 191, - "startColumn": 7, - "endLine": 191, - "endColumn": 42, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" + "startLine": 158, + "startColumn": 5, + "endLine": 158, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'false' is not of type 'boolean' - automatically coerced (string to boolean)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "StringFalseEncryption", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 51, - "startColumn": 7, - "endLine": 51, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 174, + "startColumn": 5, + "endLine": 174, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'false' is not of type 'boolean' - automatically coerced (string to boolean)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CustomStringFalseEncryption", + "logicalId": "VpcPublicSubnet2RouteTable94F7E489", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 92, - "startColumn": 7, - "endLine": 92, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 191, + "startColumn": 5, + "endLine": 191, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "StringTrueEncryption", + "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 104, - "startColumn": 7, - "endLine": 104, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 202, + "startColumn": 5, + "endLine": 202, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "Parameter type 'String' may not be compatible with expected type 'boolean'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DynamicEncryptionValue", + "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 116, - "startColumn": 7, - "endLine": 116, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property type coercion warning", + "startLine": 205, + "startColumn": 5, + "endLine": 205, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "resolutionSource": "parameter 'DynamicEncryption' (type String)" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "Parameter type 'String' may not be compatible with expected type 'boolean'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DynamicReferenceEncryption", + "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 122, - "startColumn": 7, - "endLine": 122, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property type coercion warning", + "startLine": 216, + "startColumn": 5, + "endLine": 216, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "resolutionSource": "dynamic (dynamic reference: {{resolve:ssm:/rds/storage-encrypted}})" + "lifecycle": "create-only" } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MissingEncryption", + "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 32, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 220, "startColumn": 5, - "endLine": 32, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "endLine": 220, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "KmsKeyWithoutEncryption", + "logicalId": "VpcPublicSubnet2NATGateway9182C01D", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 37, + "propertyPath": "Properties.AllocationId", + "category": "Best Practice", + "startLine": 249, "startColumn": 5, - "endLine": 37, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "endLine": 249, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt VpcPublicSubnet2EIP3C605A87.AllocationId" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FalseEncryption", + "logicalId": "VpcPublicSubnet2NATGateway9182C01D", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 45, - "startColumn": 7, - "endLine": 45, - "endColumn": 23, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 255, + "startColumn": 5, + "endLine": 255, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StringFalseEncryption", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 51, - "startColumn": 7, - "endLine": 51, - "endColumn": 23, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 276, + "startColumn": 5, + "endLine": 276, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalFalseEncryption", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 57, - "startColumn": 7, - "endLine": 57, - "endColumn": 23, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 284, + "startColumn": 5, + "endLine": 284, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalNoValueEncryption", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 63, - "startColumn": 7, - "endLine": 63, - "endColumn": 23, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 300, + "startColumn": 5, + "endLine": 300, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AllowedValuesEncryption", + "logicalId": "VpcPrivateSubnet1RouteTableB2C5B500", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 69, - "startColumn": 7, - "endLine": 69, - "endColumn": 23, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 317, + "startColumn": 5, + "endLine": 317, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EngineAllowedValuesMissingEncryption", + "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 73, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 328, "startColumn": 5, - "endLine": 73, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "endLine": 328, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalClusterOrStandalone", + "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 78, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 331, "startColumn": 5, - "endLine": 78, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "endLine": 331, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet1Subnet536B997A'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CustomFalseEncryption", + "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 86, - "startColumn": 7, - "endLine": 86, - "endColumn": 23, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "propertyPath": "Properties.DestinationCidrBlock", + "category": "Best Practice", + "startLine": 342, + "startColumn": 5, + "endLine": 342, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CustomStringFalseEncryption", + "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 92, - "startColumn": 7, - "endLine": 92, - "endColumn": 23, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 346, + "startColumn": 5, + "endLine": 346, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EmptySnapshotIdentifier", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 159, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 357, "startColumn": 5, - "endLine": 159, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "endLine": 357, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WholePropertiesFalseEncryption", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 241, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 365, "startColumn": 5, - "endLine": 241, + "endLine": 365, "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AutomatedBackupRestore", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "category": "Security", - "startLine": 187, - "startColumn": 3, - "endLine": 187, - "endColumn": 25, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 381, + "startColumn": 5, + "endLine": 381, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "VpcPrivateSubnet2RouteTableA678073B", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::RouteTable" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 24, - "startColumn": 3, - "endLine": 24, - "endColumn": 10, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 398, + "startColumn": 5, + "endLine": 398, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 24, - "startColumn": 3, - "endLine": 24, - "endColumn": 10, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 409, + "startColumn": 5, + "endLine": 409, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MissingEncryption", + "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 30, - "startColumn": 3, - "endLine": 30, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 412, + "startColumn": 5, + "endLine": 412, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet2Subnet3788AAA1'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MissingEncryption", + "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Route" }, + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 30, - "startColumn": 3, - "endLine": 30, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 423, + "startColumn": 5, + "endLine": 423, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "KmsKeyWithoutEncryption", + "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Route" }, + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 35, - "startColumn": 3, - "endLine": 35, - "endColumn": 26, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 427, + "startColumn": 5, + "endLine": 427, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "KmsKeyWithoutEncryption", + "logicalId": "VpcVPCGWBF912B6E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 35, - "startColumn": 3, - "endLine": 35, - "endColumn": 26, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 455, + "startColumn": 5, + "endLine": 455, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FalseEncryption", + "logicalId": "DNSFirewallLogGroupF0EEB7D4", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Logs::LogGroup" }, + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 41, - "startColumn": 3, - "endLine": 41, + "startLine": 466, + "startColumn": 5, + "endLine": 466, "endColumn": 18, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'DestinationArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FalseEncryption", + "logicalId": "DNSLogsConfig", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfig" }, + "propertyPath": "Properties.DestinationArn", "category": "Best Practice", - "startLine": 41, - "startColumn": 3, - "endLine": 41, - "endColumn": 18, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 478, + "startColumn": 5, + "endLine": 478, + "endColumn": 20, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt DNSFirewallLogGroupF0EEB7D4.Arn" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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": "StringFalseEncryption", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "DNSLogsConfig", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfig" }, + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 47, - "startColumn": 3, - "endLine": 47, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 484, + "startColumn": 5, + "endLine": 484, + "endColumn": 10, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'ResolverQueryLogConfigId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "StringFalseEncryption", + "logicalId": "DNSLogAssoc", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation" }, + "propertyPath": "Properties.ResolverQueryLogConfigId", "category": "Best Practice", - "startLine": 47, - "startColumn": 3, - "endLine": 47, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 493, + "startColumn": 5, + "endLine": 493, + "endColumn": 30, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'DNSLogsConfig'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalFalseEncryption", + "logicalId": "DNSLogAssoc", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation" }, + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 53, - "startColumn": 3, - "endLine": 53, - "endColumn": 29, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 496, + "startColumn": 5, + "endLine": 496, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalFalseEncryption", + "logicalId": "AllowedDomainList", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::FirewallDomainList" }, + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 53, - "startColumn": 3, - "endLine": 53, - "endColumn": 29, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 510, + "startColumn": 5, + "endLine": 510, + "endColumn": 10, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalNoValueEncryption", + "logicalId": "BlockedDomainList", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::FirewallDomainList" }, + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 59, - "startColumn": 3, - "endLine": 59, - "endColumn": 31, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 523, + "startColumn": 5, + "endLine": 523, + "endColumn": 10, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalNoValueEncryption", + "logicalId": "DNSRuleGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::FirewallRuleGroup" }, + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 59, - "startColumn": 3, - "endLine": 59, - "endColumn": 31, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 549, + "startColumn": 5, + "endLine": 549, + "endColumn": 10, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'FirewallRuleGroupId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AllowedValuesEncryption", + "logicalId": "FirewallRuleGroupAssociation", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" }, + "propertyPath": "Properties.FirewallRuleGroupId", "category": "Best Practice", - "startLine": 65, - "startColumn": 3, - "endLine": 65, - "endColumn": 26, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 558, + "startColumn": 5, + "endLine": 558, + "endColumn": 25, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'DNSRuleGroup'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AllowedValuesEncryption", + "logicalId": "FirewallRuleGroupAssociation", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 65, - "startColumn": 3, - "endLine": 65, - "endColumn": 26, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 563, + "startColumn": 5, + "endLine": 563, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'DNSFirewallLogGroupF0EEB7D4' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "EngineAllowedValuesMissingEncryption", + "logicalId": "DNSFirewallLogGroupF0EEB7D4", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Logs::LogGroup" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 71, - "startColumn": 3, - "endLine": 71, - "endColumn": 39, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 465, + "startColumn": 4, + "endLine": 465, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'DNSLogsConfig' of type 'AWS::Route53Resolver::ResolverQueryLoggingConfig' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "EngineAllowedValuesMissingEncryption", + "logicalId": "DNSLogsConfig", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfig" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 71, - "startColumn": 3, - "endLine": 71, - "endColumn": 39, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 477, + "startColumn": 4, + "endLine": 477, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'AllowedDomainList' of type 'AWS::Route53Resolver::FirewallDomainList' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalClusterOrStandalone", + "logicalId": "AllowedDomainList", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::FirewallDomainList" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 76, - "startColumn": 3, - "endLine": 76, - "endColumn": 33, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 506, + "startColumn": 4, + "endLine": 506, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'BlockedDomainList' of type 'AWS::Route53Resolver::FirewallDomainList' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalClusterOrStandalone", + "logicalId": "BlockedDomainList", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::FirewallDomainList" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 76, - "startColumn": 3, - "endLine": 76, - "endColumn": 33, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 518, + "startColumn": 4, + "endLine": 518, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'DNSRuleGroup' of type 'AWS::Route53Resolver::FirewallRuleGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "CustomFalseEncryption", + "logicalId": "DNSRuleGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::FirewallRuleGroup" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 82, - "startColumn": 3, - "endLine": 82, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 531, + "startColumn": 4, + "endLine": 531, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'FirewallRuleGroupAssociation' of type 'AWS::Route53Resolver::FirewallRuleGroupAssociation' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "CustomFalseEncryption", + "logicalId": "FirewallRuleGroupAssociation", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 82, - "startColumn": 3, - "endLine": 82, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 557, + "startColumn": 4, + "endLine": 557, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "cdk/s3-object-lambda--S3ObjectLambdaStack.template.json": { + "filePath": "cdk/s3-object-lambda--S3ObjectLambdaStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 9, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 3, + "informational": 12, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "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)", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "CustomStringFalseEncryption", + "logicalId": "retrieveTransformedObjectLambdaD5D6532C", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "category": "Best Practice", - "startLine": 88, - "startColumn": 3, - "endLine": 88, - "endColumn": 30, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 155, + "startColumn": 5, + "endLine": 155, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs20.x", + "lifecycle": "deprecated" + } }, { - "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)", + "ruleId": "W3005", + "severity": "WARN", + "message": "'retrieveTransformedObjectLambdaServiceRole27FF342E' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "CustomStringFalseEncryption", + "logicalId": "retrieveTransformedObjectLambdaD5D6532C", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 88, - "startColumn": 3, - "endLine": 88, - "endColumn": 30, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 157, + "startColumn": 4, + "endLine": 157, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for 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)", + "ruleId": "W3045", + "severity": "WARN", + "message": "AccessControl property is deprecated. Use bucket policies instead", "source": "CFN_LINT", "entity": { - "logicalId": "TrueEncryption", + "logicalId": "examplebucketC9DFA43E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucket" }, - "category": "Best Practice", - "startLine": 94, - "startColumn": 3, - "endLine": 94, - "endColumn": 17, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Properties.AccessControl", + "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", + "category": "Deprecation", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 19, + "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", + "phase": "LINT", + "context": { + "actualValue": "BucketOwnerFullControl" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "TrueEncryption", + "logicalId": "examplebucketPolicyE09B485E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::BucketPolicy" }, + "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 94, - "startColumn": 3, - "endLine": 94, - "endColumn": 17, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 32, + "startColumn": 5, + "endLine": 32, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'examplebucketC9DFA43E'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "StringTrueEncryption", + "logicalId": "retrieveTransformedObjectLambdainvocationRestrictionD58B0218", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 100, - "startColumn": 3, - "endLine": 100, - "endColumn": 23, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 171, + "startColumn": 5, + "endLine": 171, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "StringTrueEncryption", + "logicalId": "retrieveTransformedObjectLambdainvocationRestrictionD58B0218", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 100, - "startColumn": 3, - "endLine": 100, - "endColumn": 23, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 172, + "startColumn": 5, + "endLine": 172, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt retrieveTransformedObjectLambdaD5D6532C.Arn" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalTrueEncryption", + "logicalId": "retrieveTransformedObjectLambdainvocationRestrictionD58B0218", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 106, - "startColumn": 3, - "endLine": 106, - "endColumn": 28, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 178, + "startColumn": 5, + "endLine": 178, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'SourceAccount' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalTrueEncryption", + "logicalId": "retrieveTransformedObjectLambdainvocationRestrictionD58B0218", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, + "propertyPath": "Properties.SourceAccount", "category": "Best Practice", - "startLine": 106, - "startColumn": 3, - "endLine": 106, - "endColumn": 28, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 181, + "startColumn": 5, + "endLine": 181, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DynamicEncryptionValue", + "logicalId": "exampleBucketAP", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::AccessPoint" }, + "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 112, - "startColumn": 3, - "endLine": 112, - "endColumn": 25, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 192, + "startColumn": 5, + "endLine": 192, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-s3", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'examplebucketC9DFA43E'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DynamicEncryptionValue", + "logicalId": "exampleBucketAP", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::AccessPoint" }, + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 112, - "startColumn": 3, - "endLine": 112, - "endColumn": 25, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 195, + "startColumn": 5, + "endLine": 195, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-s3", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DynamicReferenceEncryption", + "logicalId": "s3ObjectLambdaAP", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3ObjectLambda::AccessPoint" }, + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 118, - "startColumn": 3, - "endLine": 118, - "endColumn": 29, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 238, + "startColumn": 5, + "endLine": 238, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'examplebucketC9DFA43E' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DynamicReferenceEncryption", + "logicalId": "examplebucketC9DFA43E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucket" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 118, - "startColumn": 3, - "endLine": 118, - "endColumn": 29, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'retrieveTransformedObjectLambdaServiceRole27FF342E' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "InvalidEncryptionValue", + "logicalId": "retrieveTransformedObjectLambdaServiceRole27FF342E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 124, - "startColumn": 3, - "endLine": 124, - "endColumn": 25, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 83, + "startColumn": 4, + "endLine": 83, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'retrieveTransformedObjectLambdaD5D6532C' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "InvalidEncryptionValue", + "logicalId": "retrieveTransformedObjectLambdaD5D6532C", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 124, - "startColumn": 3, - "endLine": 124, - "endColumn": 25, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 141, + "startColumn": 4, + "endLine": 141, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'exampleBucketAP' of type 'AWS::S3::AccessPoint' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DynamicEngineValue", + "logicalId": "exampleBucketAP", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::AccessPoint" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 130, - "startColumn": 3, - "endLine": 130, - "endColumn": 21, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 191, + "startColumn": 4, + "endLine": 191, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "cdk/ssm-document-association--SsmDocumentAssociationStack.template.json": { + "filePath": "cdk/ssm-document-association--SsmDocumentAssociationStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 17, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 28, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "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)", + "ruleId": "W3005", + "severity": "WARN", + "message": "'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "DynamicEngineValue", + "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 130, - "startColumn": 3, - "endLine": 130, - "endColumn": 21, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 316, + "startColumn": 4, + "endLine": 316, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Content' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AuroraEngine", + "logicalId": "TimeWriterDocument", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::SSM::Document" }, + "propertyPath": "Properties.Content", "category": "Best Practice", - "startLine": 135, - "startColumn": 3, - "endLine": 135, - "endColumn": 15, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'DocumentType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AuroraEngine", + "logicalId": "TimeWriterDocument", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::SSM::Document" }, + "propertyPath": "Properties.DocumentType", "category": "Best Practice", - "startLine": 135, - "startColumn": 3, - "endLine": 135, - "endColumn": 15, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 36, + "startColumn": 5, + "endLine": 36, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AuroraAllowedValues", + "logicalId": "TimeWriterDocument", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::SSM::Document" }, + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 140, - "startColumn": 3, - "endLine": 140, - "endColumn": 22, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 37, + "startColumn": 5, + "endLine": 37, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AuroraAllowedValues", + "logicalId": "SSMDocumentTestVpc2979FA29", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::VPC" }, + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 140, - "startColumn": 3, - "endLine": 140, - "endColumn": 22, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 71, + "startColumn": 5, + "endLine": 71, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ClusterMember", + "logicalId": "SSMDocumentTestVpc2979FA29", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::VPC" }, + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 145, - "startColumn": 3, - "endLine": 145, - "endColumn": 16, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 74, + "startColumn": 5, + "endLine": 74, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ClusterMember", + "logicalId": "SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 145, - "startColumn": 3, - "endLine": 145, - "endColumn": 16, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 89, + "startColumn": 5, + "endLine": 89, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SnapshotRestore", + "logicalId": "SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 151, - "startColumn": 3, - "endLine": 151, - "endColumn": 18, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 97, + "startColumn": 5, + "endLine": 97, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SnapshotRestore", + "logicalId": "SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 151, - "startColumn": 3, - "endLine": 151, - "endColumn": 18, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 113, + "startColumn": 5, + "endLine": 113, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SSMDocumentTestVpc2979FA29'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "EmptySnapshotIdentifier", + "logicalId": "SSMDocumentTestVpcpublicSubnet1RouteTable4C0F352E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::RouteTable" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 157, - "startColumn": 3, - "endLine": 157, - "endColumn": 26, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 130, + "startColumn": 5, + "endLine": 130, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SSMDocumentTestVpc2979FA29'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "EmptySnapshotIdentifier", + "logicalId": "SSMDocumentTestVpcpublicSubnet1RouteTableAssociation3C51BE77", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 157, - "startColumn": 3, - "endLine": 157, - "endColumn": 26, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 141, + "startColumn": 5, + "endLine": 141, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SSMDocumentTestVpcpublicSubnet1RouteTable4C0F352E'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ClusterSnapshotRestore", + "logicalId": "SSMDocumentTestVpcpublicSubnet1RouteTableAssociation3C51BE77", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 163, - "startColumn": 3, - "endLine": 163, - "endColumn": 25, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 144, + "startColumn": 5, + "endLine": 144, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ClusterSnapshotRestore", + "logicalId": "SSMDocumentTestVpcpublicSubnet1DefaultRouteE60C709F", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Route" }, + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 163, - "startColumn": 3, - "endLine": 163, - "endColumn": 25, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 155, + "startColumn": 5, + "endLine": 155, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "EncryptedSource", + "logicalId": "SSMDocumentTestVpcpublicSubnet1DefaultRouteE60C709F", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Route" }, + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 169, - "startColumn": 3, - "endLine": 169, + "startLine": 159, + "startColumn": 5, + "endLine": 159, "endColumn": 18, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SSMDocumentTestVpcpublicSubnet1RouteTable4C0F352E'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "EncryptedSource", + "logicalId": "SSMDocumentTestVpcVPCGW7C58FC59", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 169, - "startColumn": 3, - "endLine": 169, - "endColumn": 18, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 190, + "startColumn": 5, + "endLine": 190, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SSMDocumentTestVpc2979FA29'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SourceInstanceReplica", + "logicalId": "SSMTestInstanceInstanceSecurityGroup68B5BAFB", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 175, - "startColumn": 3, - "endLine": 175, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 362, + "startColumn": 5, + "endLine": 362, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SourceInstanceReplica", + "logicalId": "SSMTestInstanceInstanceSecurityGroup68B5BAFB", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 175, - "startColumn": 3, - "endLine": 175, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 380, + "startColumn": 5, + "endLine": 380, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SSMDocumentTestVpc2979FA29'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SourceResourceRestore", + "logicalId": "SSMTestInstanceA55C9969", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 181, - "startColumn": 3, - "endLine": 181, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 404, + "startColumn": 5, + "endLine": 404, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SourceResourceRestore", + "logicalId": "SSMTestInstanceA55C9969", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 181, - "startColumn": 3, - "endLine": 181, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 415, + "startColumn": 5, + "endLine": 415, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AutomatedBackupRestore", + "logicalId": "SSMTestInstanceA55C9969", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 187, - "startColumn": 3, - "endLine": 187, - "endColumn": 25, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 418, + "startColumn": 5, + "endLine": 418, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AutomatedBackupRestore", + "logicalId": "SSMTestInstanceA55C9969", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.SecurityGroupIds", "category": "Best Practice", - "startLine": 187, - "startColumn": 3, - "endLine": 187, - "endColumn": 25, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 419, + "startColumn": 5, + "endLine": 419, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SourceClusterReplica", + "logicalId": "SSMTestInstanceA55C9969", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 193, - "startColumn": 3, - "endLine": 193, - "endColumn": 23, - "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": "SourceClusterReplica", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "category": "Best Practice", - "startLine": 193, - "startColumn": 3, - "endLine": 193, - "endColumn": 23, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 427, + "startColumn": 5, + "endLine": 427, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CustomImplicitEncryption", + "logicalId": "SSMTestInstanceA55C9969", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 199, - "startColumn": 3, - "endLine": 199, - "endColumn": 27, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 440, + "startColumn": 5, + "endLine": 440, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9003", "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": "CustomImplicitEncryption", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", "category": "Best Practice", - "startLine": 199, - "startColumn": 3, - "endLine": 199, - "endColumn": 27, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'TimeWriterDocument' of type 'AWS::SSM::Document' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "CustomTrueEncryption", + "logicalId": "TimeWriterDocument", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::SSM::Document" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 204, - "startColumn": 3, - "endLine": 204, - "endColumn": 23, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'DocumentAssociation' of type 'AWS::SSM::Association' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "CustomTrueEncryption", + "logicalId": "DocumentAssociation", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::SSM::Association" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 204, - "startColumn": 3, - "endLine": 204, - "endColumn": 23, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 45, + "startColumn": 4, + "endLine": 45, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "LegacySecurityGroups", + "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 210, - "startColumn": 3, - "endLine": 210, - "endColumn": 23, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 225, + "startColumn": 4, + "endLine": 225, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "LegacySecurityGroups", + "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 210, - "startColumn": 3, - "endLine": 210, - "endColumn": 23, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 297, + "startColumn": 4, + "endLine": 297, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'EC2SSMRole1C0EBD7B' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "CorrelatedClusterOrEncryptedStandalone", + "logicalId": "EC2SSMRole1C0EBD7B", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 216, - "startColumn": 3, - "endLine": 216, - "endColumn": 41, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 327, + "startColumn": 4, + "endLine": 327, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "cdk/static-site-basic--MyStaticSite.template.json": { + "filePath": "cdk/static-site-basic--MyStaticSite.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 11, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 7, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "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)", + "ruleId": "W3005", + "severity": "WARN", + "message": "'CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "CorrelatedClusterOrEncryptedStandalone", + "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 216, - "startColumn": 3, - "endLine": 216, - "endColumn": 41, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 235, + "startColumn": 4, + "endLine": 235, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for 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)", + "ruleId": "W3005", + "severity": "WARN", + "message": "'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "ConditionalSnapshotOrEncryptedStandalone", + "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 223, - "startColumn": 3, - "endLine": 223, - "endColumn": 43, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 404, + "startColumn": 4, + "endLine": 404, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalSnapshotOrEncryptedStandalone", + "logicalId": "StaticSiteBasicWebsiteBucketPolicy8E799A1F", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::BucketPolicy" }, + "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 223, - "startColumn": 3, - "endLine": 223, - "endColumn": 43, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 35, + "startColumn": 5, + "endLine": 35, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'StaticSiteBasicWebsiteBucket3BB70B77'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Content' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WholePropertiesCorrelated", + "logicalId": "StaticSiteBasicDeployWebsiteAwsCliLayer198D4134", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::LayerVersion" }, + "propertyPath": "Properties.Content", "category": "Best Practice", - "startLine": 230, - "startColumn": 3, - "endLine": 230, - "endColumn": 28, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 133, + "startColumn": 5, + "endLine": 133, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WholePropertiesCorrelated", + "logicalId": "StaticSiteBasicDeployWebsiteAwsCliLayer198D4134", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::LayerVersion" }, + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 230, - "startColumn": 3, - "endLine": 230, - "endColumn": 28, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 139, + "startColumn": 5, + "endLine": 139, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "WholePropertiesFalseEncryption", + "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 239, - "startColumn": 3, - "endLine": 239, - "endColumn": 33, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 180, + "startColumn": 4, + "endLine": 180, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "WholePropertiesFalseEncryption", + "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 239, - "startColumn": 3, - "endLine": 239, - "endColumn": 33, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 205, + "startColumn": 4, + "endLine": 205, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DynamicProperties", + "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 248, - "startColumn": 3, - "endLine": 248, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 246, + "startColumn": 4, + "endLine": 246, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DynamicProperties", + "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 248, - "startColumn": 3, - "endLine": 248, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 377, + "startColumn": 4, + "endLine": 377, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "cdk/stepfunction-external-definition--StepfunctionExternalDefinitionStack.template.json": { + "filePath": "cdk/stepfunction-external-definition--StepfunctionExternalDefinitionStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 12, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 17, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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)", + "ruleId": "W3005", + "severity": "WARN", + "message": "'MyStateMachineRoleD59FFEBC' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", "source": "CFN_LINT", "entity": { - "logicalId": "Cluster", + "logicalId": "MyStateMachine6C968CA5", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 26, - "startColumn": 5, - "endLine": 26, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "startLine": 109, + "startColumn": 4, + "endLine": 109, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MissingEncryption", + "logicalId": "MyStateMachineLogGroup9955D1FE", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties", + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 32, + "startLine": 6, "startColumn": 5, - "endLine": 32, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "endLine": 6, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'StateMachineType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "KmsKeyWithoutEncryption", + "logicalId": "MyStateMachine6C968CA5", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties", + "propertyPath": "Properties.StateMachineType", "category": "Best Practice", - "startLine": 37, + "startLine": 107, "startColumn": 5, - "endLine": 37, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "endLine": 107, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-stepfunctions.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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": "FalseEncryption", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "StepFuncApiDeployment77C863276f473a57d5bd4cb772b382f83651c7a2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 43, + "startLine": 138, "startColumn": 5, - "endLine": 43, + "endLine": 138, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'StepFuncApiE896FCA7'" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "StringFalseEncryption", + "logicalId": "StepFuncApiDeploymentStageprod5FF8FD8E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 49, + "startLine": 157, "startColumn": 5, - "endLine": 49, + "endLine": 157, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'StepFuncApiE896FCA7'" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalFalseEncryption", + "logicalId": "StepFuncApiDeploymentStageprod5FF8FD8E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 55, + "startLine": 160, "startColumn": 5, - "endLine": 55, + "endLine": 160, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalNoValueEncryption", + "logicalId": "StepFuncApiorders391C1FA5", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 61, + "startLine": 169, "startColumn": 5, - "endLine": 61, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "endLine": 169, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt StepFuncApiE896FCA7.RootResourceId" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AllowedValuesEncryption", + "logicalId": "StepFuncApiorders391C1FA5", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 67, + "startLine": 175, "startColumn": 5, - "endLine": 67, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "endLine": 175, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalClusterOrStandalone", + "logicalId": "StepFuncApiorders391C1FA5", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 78, + "startLine": 176, "startColumn": 5, - "endLine": 78, + "endLine": 176, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'StepFuncApiE896FCA7'" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CustomFalseEncryption", + "logicalId": "StepFuncApiordersGET0318ABB9", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 84, + "startLine": 234, "startColumn": 5, - "endLine": 84, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "endLine": 234, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CustomStringFalseEncryption", + "logicalId": "StepFuncApiordersGET0318ABB9", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 90, + "startLine": 318, "startColumn": 5, - "endLine": 90, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "endLine": 318, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'StepFuncApiorders391C1FA5'" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "TrueEncryption", + "logicalId": "StepFuncApiordersGET0318ABB9", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 96, + "startLine": 321, "startColumn": 5, - "endLine": 96, + "endLine": 321, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'StepFuncApiE896FCA7'" + } }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'MyStateMachineLogGroup9955D1FE' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "StringTrueEncryption", + "logicalId": "MyStateMachineLogGroup9955D1FE", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 102, - "startColumn": 5, - "endLine": 102, + "startLine": 5, + "startColumn": 4, + "endLine": 5, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'MyStateMachineRoleD59FFEBC' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalTrueEncryption", + "logicalId": "MyStateMachineRoleD59FFEBC", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 108, - "startColumn": 5, - "endLine": 108, + "startLine": 17, + "startColumn": 4, + "endLine": 17, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'MyStateMachine6C968CA5' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DynamicEncryptionValue", + "logicalId": "MyStateMachine6C968CA5", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 114, - "startColumn": 5, - "endLine": 114, + "startLine": 83, + "startColumn": 4, + "endLine": 83, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'StepFuncApiE896FCA7' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DynamicReferenceEncryption", + "logicalId": "StepFuncApiE896FCA7", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ApiGateway::RestApi" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 120, - "startColumn": 5, - "endLine": 120, + "startLine": 121, + "startColumn": 4, + "endLine": 121, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'StepFuncApiDeploymentStageprod5FF8FD8E' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "InvalidEncryptionValue", + "logicalId": "StepFuncApiDeploymentStageprod5FF8FD8E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 126, - "startColumn": 5, - "endLine": 126, + "startLine": 153, + "startColumn": 4, + "endLine": 153, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'StepFuncApiordersGETStartSyncExecutionRole90998151' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "SnapshotRestore", + "logicalId": "StepFuncApiordersGETStartSyncExecutionRole90998151", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 153, - "startColumn": 5, - "endLine": 153, + "startLine": 186, + "startColumn": 4, + "endLine": 186, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "cdk/stepfunctions-job-poller--aws-stepfunctions-integ.template.json": { + "filePath": "cdk/stepfunctions-job-poller--aws-stepfunctions-integ.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 11, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 5, + "informational": 8, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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)", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "EmptySnapshotIdentifier", + "logicalId": "CheckLambda9CBBF9BA", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 159, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 50, "startColumn": 5, - "endLine": 159, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "endLine": 50, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.9", + "lifecycle": "deprecated" + } }, { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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)", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "ClusterSnapshotRestore", + "logicalId": "SubmitLambda8054545E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 165, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 107, "startColumn": 5, - "endLine": 165, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "endLine": 107, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.9", + "lifecycle": "deprecated" + } }, { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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)", + "ruleId": "W3005", + "severity": "WARN", + "message": "'CheckLambdaServiceRole74B86E23' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "EncryptedSource", + "logicalId": "CheckLambda9CBBF9BA", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 171, - "startColumn": 5, - "endLine": 171, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "startLine": 53, + "startColumn": 4, + "endLine": 53, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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)", + "ruleId": "W3005", + "severity": "WARN", + "message": "'SubmitLambdaServiceRole98C85C39' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "SourceResourceRestore", + "logicalId": "SubmitLambda8054545E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 183, - "startColumn": 5, - "endLine": 183, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "startLine": 110, + "startColumn": 4, + "endLine": 110, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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)", + "ruleId": "W3005", + "severity": "WARN", + "message": "'CronStateMachineRoleFE85923B' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", "source": "CFN_LINT", "entity": { - "logicalId": "AutomatedBackupRestore", + "logicalId": "CronStateMachine7E50955B", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 189, - "startColumn": 5, - "endLine": 189, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "startLine": 259, + "startColumn": 4, + "endLine": 259, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'CheckLambdaServiceRole74B86E23' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "SourceClusterReplica", + "logicalId": "CheckLambdaServiceRole74B86E23", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 195, - "startColumn": 5, - "endLine": 195, + "startLine": 5, + "startColumn": 4, + "endLine": 5, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'CheckLambda9CBBF9BA' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "CustomImplicitEncryption", + "logicalId": "CheckLambda9CBBF9BA", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 201, - "startColumn": 5, - "endLine": 201, + "startLine": 39, + "startColumn": 4, + "endLine": 39, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'SubmitLambdaServiceRole98C85C39' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "CustomTrueEncryption", + "logicalId": "SubmitLambdaServiceRole98C85C39", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 206, - "startColumn": 5, - "endLine": 206, + "startLine": 62, + "startColumn": 4, + "endLine": 62, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'SubmitLambda8054545E' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "LegacySecurityGroups", + "logicalId": "SubmitLambda8054545E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 212, - "startColumn": 5, - "endLine": 212, + "startLine": 96, + "startColumn": 4, + "endLine": 96, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'CronStateMachineRoleFE85923B' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "CorrelatedClusterOrEncryptedStandalone", + "logicalId": "CronStateMachineRoleFE85923B", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 218, - "startColumn": 5, - "endLine": 218, + "startLine": 119, + "startColumn": 4, + "endLine": 119, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'CronStateMachine7E50955B' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalSnapshotOrEncryptedStandalone", + "logicalId": "CronStateMachine7E50955B", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 225, - "startColumn": 5, - "endLine": 225, + "startLine": 210, + "startColumn": 4, + "endLine": 210, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'CronStateMachineEventsRoleA3F136B0' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "CronStateMachineEventsRoleA3F136B0", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 27, - "startColumn": 7, - "endLine": 27, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 271, + "startColumn": 4, + "endLine": 271, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Resource 'Rule4C995B7F' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "Rule4C995B7F", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 317, + "startColumn": 4, + "endLine": 317, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "empty.yaml": { + "filePath": "empty.yaml", + "status": "ERROR", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F1101", + "severity": "FATAL", + "message": "Empty YAML document", + "source": "SCHEMA", + "category": "Structure", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 1, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" + } + ] + }, + "gh-issues/issue-144.yaml": { + "filePath": "gh-issues/issue-144.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MissingEncryption", + "logicalId": "Flow", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::MediaConnect::Flow" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 33, + "startLine": 11, "startColumn": 7, - "endLine": 33, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 11, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-mediaconnect.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Source.Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "KmsKeyWithoutEncryption", + "logicalId": "Flow", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::MediaConnect::Flow" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Source.Name", "category": "Best Practice", - "startLine": 38, - "startColumn": 7, - "endLine": 38, + "startLine": 13, + "startColumn": 9, + "endLine": 13, "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-mediaconnect.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'KmsKeyId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Flow' of type 'AWS::MediaConnect::Flow' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "KmsKeyWithoutEncryption", + "logicalId": "Flow", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::MediaConnect::Flow" }, - "propertyPath": "Properties.KmsKeyId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 39, - "startColumn": 7, - "endLine": 39, + "startLine": 10, + "startColumn": 5, + "endLine": 10, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-183.yaml": { + "filePath": "gh-issues/issue-183.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 4, + "informational": 9, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3031", + "severity": "FATAL", + "message": "'arn:aws:sqs:us-east-1:1111111111:MyQueue' does not match pattern '^arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:((eusc-)?[a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)$'", + "source": "SCHEMA", + "entity": { + "logicalId": "PermissionInvalidAccountId", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.SourceArn", + "category": "Schema", + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 16, + "ruleDescription": "Value does not match pattern", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "arn:aws:sqs:us-east-1:1111111111:MyQueue", + "expectedConstraint": "^arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:((eusc-)?[a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)$" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "ruleId": "W3663", + "severity": "WARN", + "message": "Lambda Permission with a SourceArn that has no account id should also specify SourceAccount", + "source": "CFN_LINT", + "entity": { + "logicalId": "PermissionInvalidAccountId", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties", + "suggestedFix": "Add SourceAccount property", + "category": "Security", + "startLine": 31, + "startColumn": 5, + "endLine": 31, + "endColumn": 15, + "ruleDescription": "Validate SourceAccount is required property", + "phase": "LINT" + }, + { + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'SourceArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", "source": "ENGINE", "entity": { - "logicalId": "FalseEncryption", + "logicalId": "PermissionWithAccountId", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 44, + "startLine": 25, "startColumn": 7, - "endLine": 44, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 25, + "endColumn": 16, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'SourceArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", "source": "ENGINE", "entity": { - "logicalId": "FalseEncryption", + "logicalId": "PermissionInvalidAccountId", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 45, + "startLine": 35, "startColumn": 7, - "endLine": 45, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 35, + "endColumn": 16, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "PermissionWithAccountId", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "category": "Security", + "startLine": 19, + "startColumn": 3, + "endLine": 19, + "endColumn": 26, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StringFalseEncryption", + "logicalId": "PermissionWithAccountId", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 50, + "startLine": 22, "startColumn": 7, - "endLine": 50, + "endLine": 22, "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StringFalseEncryption", + "logicalId": "PermissionWithAccountId", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 51, + "startLine": 23, "startColumn": 7, - "endLine": 51, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 23, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt MyLambda.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalFalseEncryption", + "logicalId": "PermissionWithAccountId", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 56, + "startLine": 24, "startColumn": 7, - "endLine": 56, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 24, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalFalseEncryption", + "logicalId": "PermissionWithAccountId", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 57, + "startLine": 25, "startColumn": 7, - "endLine": 57, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 25, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseClusterCondition'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalNoValueEncryption", + "logicalId": "PermissionInvalidAccountId", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 62, + "startLine": 32, "startColumn": 7, - "endLine": 62, + "endLine": 32, "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalNoValueEncryption", + "logicalId": "PermissionInvalidAccountId", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 63, + "startLine": 33, "startColumn": 7, - "endLine": 63, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 33, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseClusterCondition'" + "resolutionSource": "GetAtt MyLambda.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AllowedValuesEncryption", + "logicalId": "PermissionInvalidAccountId", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 68, + "startLine": 34, "startColumn": 7, - "endLine": 68, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 34, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AllowedValuesEncryption", + "logicalId": "PermissionInvalidAccountId", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 69, + "startLine": 35, "startColumn": 7, - "endLine": 69, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 35, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'MyLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EngineAllowedValuesMissingEncryption", + "logicalId": "MyLambda", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 74, + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-184.yaml": { + "filePath": "gh-issues/issue-184.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 5, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3025", + "severity": "ERROR", + "message": "'db.m5.large' is not one of ['db.r3.2xlarge', 'db.r3.4xlarge', 'db.r3.8xlarge', 'db.r3.large', 'db.r3.xlarge', 'db.r4.16xlarge', 'db.r4.2xlarge', 'db.r4.4xlarge', 'db.r4.8xlarge', 'db.r4.large', 'db.r4.xlarge', 'db.r5.12xlarge', 'db.r5.16xlarge', 'db.r5.24xlarge', 'db.r5.2xlarge', 'db.r5.4xlarge', 'db.r5.8xlarge', 'db.r5.large', 'db.r5.xlarge', 'db.r6g.12xlarge', 'db.r6g.16xlarge', 'db.r6g.2xlarge', 'db.r6g.4xlarge', 'db.r6g.8xlarge', 'db.r6g.large', 'db.r6g.xlarge', 'db.r6i.12xlarge', 'db.r6i.16xlarge', 'db.r6i.24xlarge', 'db.r6i.2xlarge', 'db.r6i.32xlarge', 'db.r6i.4xlarge', 'db.r6i.8xlarge', 'db.r6i.large', 'db.r6i.xlarge', 'db.r7g.12xlarge', 'db.r7g.16xlarge', 'db.r7g.2xlarge', 'db.r7g.4xlarge', 'db.r7g.8xlarge', 'db.r7g.large', 'db.r7g.xlarge', 'db.r7i.12xlarge', 'db.r7i.16xlarge', 'db.r7i.24xlarge', 'db.r7i.2xlarge', 'db.r7i.48xlarge', 'db.r7i.4xlarge', 'db.r7i.8xlarge', 'db.r7i.large', 'db.r7i.xlarge', 'db.r8g.12xlarge', 'db.r8g.16xlarge', 'db.r8g.24xlarge', 'db.r8g.2xlarge', 'db.r8g.48xlarge', 'db.r8g.4xlarge', 'db.r8g.8xlarge', 'db.r8g.large', 'db.r8g.xlarge', 'db.serverless', 'db.t2.medium', 'db.t2.small', 'db.t3.large', 'db.t3.medium', 'db.t3.small', 'db.t4g.large', 'db.t4g.medium', 'db.x2g.12xlarge', 'db.x2g.16xlarge', 'db.x2g.2xlarge', 'db.x2g.4xlarge', 'db.x2g.8xlarge', 'db.x2g.large', 'db.x2g.xlarge'] when Engine is 'aurora-mysql' in any region", + "source": "CFN_LINT", + "entity": { + "logicalId": "AuroraInstance", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.DBInstanceClass", + "category": "Resource", + "startLine": 5, "startColumn": 7, - "endLine": 74, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "parameter with AllowedValues" - } + "endLine": 5, + "endColumn": 22, + "ruleDescription": "Validates RDS DB Instance Class", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "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": "ConditionalClusterOrStandalone", + "logicalId": "AuroraInstance", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 79, - "startColumn": 7, - "endLine": 79, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 17, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "ConditionalClusterOrStandalone", + "logicalId": "AuroraInstance", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.DBClusterIdentifier", "category": "Best Practice", - "startLine": 80, - "startColumn": 7, - "endLine": 80, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseClusterCondition'" - } + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 17, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", @@ -5671,15 +6251,15 @@ "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CustomFalseEncryption", + "logicalId": "AuroraInstance", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 85, + "startLine": 6, "startColumn": 7, - "endLine": 85, + "endLine": 6, "endColumn": 13, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -5689,68 +6269,88 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9003", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", "source": "ENGINE", - "entity": { - "logicalId": "CustomFalseEncryption", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 86, - "startColumn": 7, - "endLine": 86, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'AuroraInstance' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomStringFalseEncryption", + "logicalId": "AuroraInstance", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 91, - "startColumn": 7, - "endLine": 91, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-185.yaml": { + "filePath": "gh-issues/issue-185.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "gh-issues/issue-186-clb.json": { + "filePath": "gh-issues/issue-186-clb.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CustomStringFalseEncryption", + "logicalId": "CLBA83A883E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.Scheme", "category": "Best Practice", - "startLine": 92, - "startColumn": 7, - "endLine": 92, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5760,89 +6360,257 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Subnets' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TrueEncryption", + "logicalId": "CLBA83A883E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Subnets", "category": "Best Practice", - "startLine": 97, - "startColumn": 7, - "endLine": 97, + "startLine": 19, + "startColumn": 5, + "endLine": 19, "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "conditional-create-only" } + } + ] + }, + "gh-issues/issue-186-imagebuilder.json": { + "filePath": "gh-issues/issue-186-imagebuilder.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3030", + "severity": "WARN", + "message": "'Abort' is not one of ['CONTINUE', 'ABORT']", + "source": "CFN_LINT", "entity": { - "logicalId": "TrueEncryption", + "logicalId": "ImagePipeline7DDDE57F", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ImageBuilder::ImagePipeline" }, - "propertyPath": "Properties.StorageEncrypted", - "category": "Best Practice", - "startLine": 98, + "propertyPath": "Properties.Workflows.0.OnFailure", + "category": "Schema", + "startLine": 31, "startColumn": 7, - "endLine": 98, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 31, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", + "ruleDescription": "Value not in allowed enum", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "Abort" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StringTrueEncryption", + "logicalId": "ImagePipeline7DDDE57F", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ImageBuilder::ImagePipeline" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 103, - "startColumn": 7, - "endLine": 103, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 24, + "startColumn": 5, + "endLine": 24, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" + } + } + ] + }, + "gh-issues/issue-194.json": { + "filePath": "gh-issues/issue-194.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'SomeParameter': Default must be a string", + "source": "CFN_LINT", + "entity": { + "logicalId": "SomeParameter", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/SomeParameter/Default", + "category": "Parameter", + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 12, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" + } + ] + }, + "gh-issues/issue-201.json": { + "filePath": "gh-issues/issue-201.json", + "status": "OK", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 2, + "errors": 0, + "warnings": 1, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" + }, + { + "ruleId": "F2002", + "severity": "FATAL", + "message": "Parameter 'MyParam' has invalid Type 'Blimp'", + "source": "SCHEMA", + "entity": { + "logicalId": "MyParam", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/MyParam/Type", + "category": "Parameter", + "startLine": 4, + "startColumn": 7, + "endLine": 4, + "endColumn": 12, + "ruleDescription": "Parameter Type must be valid", + "phase": "SCHEMA" + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'MyParam' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyParam", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/MyParam", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 13, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-226.yaml": { + "filePath": "gh-issues/issue-226.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 4, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E9002", + "severity": "ERROR", + "message": "FromPort 443 is greater than ToPort 80", + "source": "ENGINE", + "entity": { + "logicalId": "InvertedRangeSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0", + "suggestedFix": "Set FromPort to a value less than or equal to ToPort", + "category": "Resource", + "startLine": 26, + "startColumn": 17, + "endLine": 26, + "endColumn": 18, + "ruleDescription": "SecurityGroup FromPort must be <= ToPort for the TCP and UDP protocols", + "phase": "LINT", + "context": { + "actualValue": [ + { + "CidrIp": "10.0.0.0/8", + "IpProtocol": "tcp", + "FromPort": 443, + "ToPort": 80 + } + ] } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StringTrueEncryption", + "logicalId": "PingSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 104, + "startLine": 11, "startColumn": 7, - "endLine": 104, + "endLine": 11, "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5852,3061 +6620,2491 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalTrueEncryption", + "logicalId": "InvertedRangeSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 109, + "startLine": 24, "startColumn": 7, - "endLine": 109, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 24, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Resource 'PingSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConditionalTrueEncryption", + "logicalId": "PingSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 110, - "startColumn": 7, - "endLine": 110, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseClusterCondition'" - } + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'InvertedRangeSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DynamicEncryptionValue", + "logicalId": "InvertedRangeSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 115, - "startColumn": 7, - "endLine": 115, - "endColumn": 13, + "startLine": 23, + "startColumn": 5, + "endLine": 23, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-235.yaml": { + "filePath": "gh-issues/issue-235.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 38, + "counts": { + "fatal": 2, + "errors": 0, + "warnings": 20, + "informational": 208, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3003", + "severity": "FATAL", + "message": "'StorageEncrypted' is a required property (from extension)", + "source": "SCHEMA", + "entity": { + "logicalId": "KmsKeyWithoutEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "suggestedFix": "Add 'StorageEncrypted'", + "category": "Schema", + "startLine": 37, + "startColumn": 5, + "endLine": 37, + "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3012", + "severity": "FATAL", + "message": "'invalid' is not of type 'boolean'", + "source": "SCHEMA", "entity": { - "logicalId": "DynamicEncryptionValue", + "logicalId": "InvalidEncryptionValue", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.StorageEncrypted", - "category": "Best Practice", - "startLine": 116, + "category": "Schema", + "startLine": 128, "startColumn": 7, - "endLine": 116, + "endLine": 128, "endColumn": 23, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "ruleDescription": "Property type mismatch", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'DynamicEncryption' (type String)" + "actualValue": "invalid", + "expectedConstraint": "boolean" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'SourceDBInstanceAutomatedBackupsArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", "source": "ENGINE", "entity": { - "logicalId": "DynamicReferenceEncryption", + "logicalId": "AutomatedBackupRestore", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.SourceDBInstanceAutomatedBackupsArn", "category": "Best Practice", - "startLine": 121, + "startLine": 191, "startColumn": 7, - "endLine": 121, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 191, + "endColumn": 42, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "'false' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", "entity": { - "logicalId": "DynamicReferenceEncryption", + "logicalId": "StringFalseEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 122, + "startLine": 51, "startColumn": 7, - "endLine": 122, + "endLine": 51, "endColumn": 23, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (dynamic reference: {{resolve:ssm:/rds/storage-encrypted}})" - } + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "'false' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", "entity": { - "logicalId": "InvalidEncryptionValue", + "logicalId": "CustomStringFalseEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 127, + "startLine": 92, "startColumn": 7, - "endLine": 127, - "endColumn": 13, + "endLine": 92, + "endColumn": 23, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", "entity": { - "logicalId": "InvalidEncryptionValue", + "logicalId": "StringTrueEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 128, + "startLine": 104, "startColumn": 7, - "endLine": 128, + "endLine": 104, "endColumn": 23, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "Parameter type 'String' may not be compatible with expected type 'boolean'", + "source": "CFN_LINT", "entity": { - "logicalId": "DynamicEngineValue", + "logicalId": "DynamicEncryptionValue", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 133, + "startLine": 116, "startColumn": 7, - "endLine": 133, - "endColumn": 13, + "endLine": 116, + "endColumn": 23, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "ruleDescription": "Property type coercion warning", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "parameter 'DynamicEngine' (type String)" + "resolutionSource": "parameter 'DynamicEncryption' (type String)" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "Parameter type 'String' may not be compatible with expected type 'boolean'", + "source": "CFN_LINT", "entity": { - "logicalId": "AuroraEngine", + "logicalId": "DynamicReferenceEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 138, + "startLine": 122, "startColumn": 7, - "endLine": 138, - "endColumn": 13, + "endLine": 122, + "endColumn": 23, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "ruleDescription": "Property type coercion warning", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "resolutionSource": "dynamic (dynamic reference: {{resolve:ssm:/rds/storage-encrypted}})" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", "entity": { - "logicalId": "AuroraAllowedValues", + "logicalId": "MissingEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 143, - "startColumn": 7, - "endLine": 143, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "parameter with AllowedValues" - } + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 32, + "startColumn": 5, + "endLine": 32, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "ClusterMember", + "logicalId": "KmsKeyWithoutEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 148, - "startColumn": 7, - "endLine": 148, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 37, + "startColumn": 5, + "endLine": 37, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "ClusterMember", + "logicalId": "FalseEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.DBClusterIdentifier", - "category": "Best Practice", - "startLine": 149, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 45, "startColumn": 7, - "endLine": 149, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Cluster'" - } + "endLine": 45, + "endColumn": 23, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "SnapshotRestore", + "logicalId": "StringFalseEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 154, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 51, "startColumn": 7, - "endLine": 154, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 51, + "endColumn": 23, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DBSnapshotIdentifier' is conditionally create-only; updating it may cause resource replacement", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "SnapshotRestore", + "logicalId": "ConditionalFalseEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.DBSnapshotIdentifier", - "category": "Best Practice", - "startLine": 155, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 57, "startColumn": 7, - "endLine": 155, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "parameter 'SnapshotName' (type String)" - } + "endLine": 57, + "endColumn": 23, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "EmptySnapshotIdentifier", + "logicalId": "ConditionalNoValueEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 160, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 63, "startColumn": 7, - "endLine": 160, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 63, + "endColumn": 23, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DBSnapshotIdentifier' is conditionally create-only; updating it may cause resource replacement", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "EmptySnapshotIdentifier", + "logicalId": "AllowedValuesEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.DBSnapshotIdentifier", - "category": "Best Practice", - "startLine": 161, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 69, "startColumn": 7, - "endLine": 161, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 69, + "endColumn": 23, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "ClusterSnapshotRestore", + "logicalId": "EngineAllowedValuesMissingEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 166, - "startColumn": 7, - "endLine": 166, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 73, + "startColumn": 5, + "endLine": 73, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DBClusterSnapshotIdentifier' is conditionally create-only; updating it may cause resource replacement", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "ClusterSnapshotRestore", + "logicalId": "ConditionalClusterOrStandalone", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.DBClusterSnapshotIdentifier", - "category": "Best Practice", - "startLine": 167, - "startColumn": 7, - "endLine": 167, - "endColumn": 34, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 78, + "startColumn": 5, + "endLine": 78, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", "entity": { - "logicalId": "EncryptedSource", + "logicalId": "CustomFalseEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 172, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 86, "startColumn": 7, - "endLine": 172, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 86, + "endColumn": 23, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "EncryptedSource", + "logicalId": "CustomStringFalseEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.StorageEncrypted", - "category": "Best Practice", - "startLine": 173, + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 92, "startColumn": 7, - "endLine": 173, + "endLine": 92, "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "SourceInstanceReplica", + "logicalId": "EmptySnapshotIdentifier", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 178, - "startColumn": 7, - "endLine": 178, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 159, + "startColumn": 5, + "endLine": 159, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceDBInstanceIdentifier' is conditionally create-only; updating it may cause resource replacement", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "SourceInstanceReplica", + "logicalId": "WholePropertiesFalseEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SourceDBInstanceIdentifier", - "category": "Best Practice", - "startLine": 179, - "startColumn": 7, - "endLine": 179, - "endColumn": 33, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'EncryptedSource'" - } + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 241, + "startColumn": 5, + "endLine": 241, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "SourceResourceRestore", + "logicalId": "AutomatedBackupRestore", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 184, - "startColumn": 7, - "endLine": 184, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "category": "Security", + "startLine": 187, + "startColumn": 3, + "endLine": 187, + "endColumn": 25, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'SourceDbiResourceId' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "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": "SourceResourceRestore", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.SourceDbiResourceId", "category": "Best Practice", - "startLine": 185, - "startColumn": 7, - "endLine": 185, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 10, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "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": "AutomatedBackupRestore", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 190, - "startColumn": 7, - "endLine": 190, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 10, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'SourceDBInstanceAutomatedBackupsArn' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "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": "AutomatedBackupRestore", + "logicalId": "MissingEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SourceDBInstanceAutomatedBackupsArn", "category": "Best Practice", - "startLine": 191, - "startColumn": 7, - "endLine": 191, - "endColumn": 42, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 30, + "startColumn": 3, + "endLine": 30, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "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": "SourceClusterReplica", + "logicalId": "MissingEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 196, - "startColumn": 7, - "endLine": 196, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 30, + "startColumn": 3, + "endLine": 30, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'SourceDBClusterIdentifier' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "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": "SourceClusterReplica", + "logicalId": "KmsKeyWithoutEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SourceDBClusterIdentifier", "category": "Best Practice", - "startLine": 197, - "startColumn": 7, - "endLine": 197, - "endColumn": 32, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'Cluster'" - } + "startLine": 35, + "startColumn": 3, + "endLine": 35, + "endColumn": 26, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "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": "CustomImplicitEncryption", + "logicalId": "KmsKeyWithoutEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 202, - "startColumn": 7, - "endLine": 202, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 35, + "startColumn": 3, + "endLine": 35, + "endColumn": 26, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "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": "CustomTrueEncryption", + "logicalId": "FalseEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 207, - "startColumn": 7, - "endLine": 207, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 41, + "startColumn": 3, + "endLine": 41, + "endColumn": 18, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "CustomTrueEncryption", + "logicalId": "FalseEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 208, - "startColumn": 7, - "endLine": 208, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 41, + "startColumn": 3, + "endLine": 41, + "endColumn": 18, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "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": "LegacySecurityGroups", + "logicalId": "StringFalseEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 213, - "startColumn": 7, - "endLine": 213, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 47, + "startColumn": 3, + "endLine": 47, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "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": "CorrelatedClusterOrEncryptedStandalone", + "logicalId": "StringFalseEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 219, - "startColumn": 7, - "endLine": 219, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 47, + "startColumn": 3, + "endLine": 47, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "CorrelatedClusterOrEncryptedStandalone", + "logicalId": "ConditionalFalseEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.DBClusterIdentifier", "category": "Best Practice", - "startLine": 220, - "startColumn": 7, - "endLine": 220, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseClusterCondition'" - } + "startLine": 53, + "startColumn": 3, + "endLine": 53, + "endColumn": 29, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "CorrelatedClusterOrEncryptedStandalone", + "logicalId": "ConditionalFalseEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 221, - "startColumn": 7, - "endLine": 221, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseClusterCondition'" - } + "startLine": 53, + "startColumn": 3, + "endLine": 53, + "endColumn": 29, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "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": "ConditionalSnapshotOrEncryptedStandalone", + "logicalId": "ConditionalNoValueEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 226, - "startColumn": 7, - "endLine": 226, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 59, + "startColumn": 3, + "endLine": 59, + "endColumn": 31, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'DBSnapshotIdentifier' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "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": "ConditionalSnapshotOrEncryptedStandalone", + "logicalId": "ConditionalNoValueEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.DBSnapshotIdentifier", "category": "Best Practice", - "startLine": 227, - "startColumn": 7, - "endLine": 227, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Fn::If on condition 'UseClusterCondition'" - } + "startLine": 59, + "startColumn": 3, + "endLine": 59, + "endColumn": 31, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "ConditionalSnapshotOrEncryptedStandalone", + "logicalId": "AllowedValuesEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 228, - "startColumn": 7, - "endLine": 228, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseClusterCondition'" - } + "startLine": 65, + "startColumn": 3, + "endLine": 65, + "endColumn": 26, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'Cluster' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", - "source": "ENGINE", + "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": "Cluster", + "logicalId": "AllowedValuesEncryption", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 26, - "startColumn": 5, - "endLine": 26, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 65, + "startColumn": 3, + "endLine": 65, + "endColumn": 26, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'MissingEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "MissingEncryption", + "logicalId": "EngineAllowedValuesMissingEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 32, - "startColumn": 5, - "endLine": 32, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 71, + "startColumn": 3, + "endLine": 71, + "endColumn": 39, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'KmsKeyWithoutEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "KmsKeyWithoutEncryption", + "logicalId": "EngineAllowedValuesMissingEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 37, - "startColumn": 5, - "endLine": 37, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 71, + "startColumn": 3, + "endLine": 71, + "endColumn": 39, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'FalseEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "FalseEncryption", + "logicalId": "ConditionalClusterOrStandalone", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 43, - "startColumn": 5, - "endLine": 43, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 76, + "startColumn": 3, + "endLine": 76, + "endColumn": 33, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'StringFalseEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "StringFalseEncryption", + "logicalId": "ConditionalClusterOrStandalone", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 49, - "startColumn": 5, - "endLine": 49, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 76, + "startColumn": 3, + "endLine": 76, + "endColumn": 33, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'ConditionalFalseEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "ConditionalFalseEncryption", + "logicalId": "CustomFalseEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 55, - "startColumn": 5, - "endLine": 55, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 82, + "startColumn": 3, + "endLine": 82, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'ConditionalNoValueEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "ConditionalNoValueEncryption", + "logicalId": "CustomFalseEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 61, - "startColumn": 5, - "endLine": 61, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 82, + "startColumn": 3, + "endLine": 82, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'AllowedValuesEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "AllowedValuesEncryption", + "logicalId": "CustomStringFalseEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 67, - "startColumn": 5, - "endLine": 67, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 88, + "startColumn": 3, + "endLine": 88, + "endColumn": 30, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'EngineAllowedValuesMissingEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "EngineAllowedValuesMissingEncryption", + "logicalId": "CustomStringFalseEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 73, - "startColumn": 5, - "endLine": 73, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 88, + "startColumn": 3, + "endLine": 88, + "endColumn": 30, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'ConditionalClusterOrStandalone' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "ConditionalClusterOrStandalone", + "logicalId": "TrueEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 78, - "startColumn": 5, - "endLine": 78, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 94, + "startColumn": 3, + "endLine": 94, + "endColumn": 17, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'CustomFalseEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "CustomFalseEncryption", + "logicalId": "TrueEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 84, - "startColumn": 5, - "endLine": 84, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 94, + "startColumn": 3, + "endLine": 94, + "endColumn": 17, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'CustomStringFalseEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "CustomStringFalseEncryption", + "logicalId": "StringTrueEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 90, - "startColumn": 5, - "endLine": 90, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 100, + "startColumn": 3, + "endLine": 100, + "endColumn": 23, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'TrueEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "TrueEncryption", + "logicalId": "StringTrueEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 96, - "startColumn": 5, - "endLine": 96, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 100, + "startColumn": 3, + "endLine": 100, + "endColumn": 23, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'StringTrueEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "StringTrueEncryption", + "logicalId": "ConditionalTrueEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 102, - "startColumn": 5, - "endLine": 102, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 106, + "startColumn": 3, + "endLine": 106, + "endColumn": 28, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'ConditionalTrueEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "ConditionalTrueEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 108, - "startColumn": 5, - "endLine": 108, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 106, + "startColumn": 3, + "endLine": 106, + "endColumn": 28, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'DynamicEncryptionValue' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "DynamicEncryptionValue", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 114, - "startColumn": 5, - "endLine": 114, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 112, + "startColumn": 3, + "endLine": 112, + "endColumn": 25, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'DynamicReferenceEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "DynamicReferenceEncryption", + "logicalId": "DynamicEncryptionValue", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 120, - "startColumn": 5, - "endLine": 120, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 112, + "startColumn": 3, + "endLine": 112, + "endColumn": 25, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'InvalidEncryptionValue' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "InvalidEncryptionValue", + "logicalId": "DynamicReferenceEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 126, - "startColumn": 5, - "endLine": 126, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 118, + "startColumn": 3, + "endLine": 118, + "endColumn": 29, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'DynamicEngineValue' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "DynamicEngineValue", + "logicalId": "DynamicReferenceEncryption", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 132, - "startColumn": 5, - "endLine": 132, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 118, + "startColumn": 3, + "endLine": 118, + "endColumn": 29, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'AuroraEngine' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "AuroraEngine", + "logicalId": "InvalidEncryptionValue", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 137, - "startColumn": 5, - "endLine": 137, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 124, + "startColumn": 3, + "endLine": 124, + "endColumn": 25, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'AuroraAllowedValues' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "AuroraAllowedValues", + "logicalId": "InvalidEncryptionValue", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 142, - "startColumn": 5, - "endLine": 142, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 124, + "startColumn": 3, + "endLine": 124, + "endColumn": 25, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'ClusterMember' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "ClusterMember", + "logicalId": "DynamicEngineValue", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 147, - "startColumn": 5, - "endLine": 147, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 130, + "startColumn": 3, + "endLine": 130, + "endColumn": 21, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'SnapshotRestore' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "SnapshotRestore", + "logicalId": "DynamicEngineValue", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 153, - "startColumn": 5, - "endLine": 153, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 130, + "startColumn": 3, + "endLine": 130, + "endColumn": 21, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'EmptySnapshotIdentifier' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "EmptySnapshotIdentifier", + "logicalId": "AuroraEngine", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 159, - "startColumn": 5, - "endLine": 159, + "startLine": 135, + "startColumn": 3, + "endLine": 135, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'ClusterSnapshotRestore' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "ClusterSnapshotRestore", + "logicalId": "AuroraEngine", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 165, - "startColumn": 5, - "endLine": 165, + "startLine": 135, + "startColumn": 3, + "endLine": 135, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'EncryptedSource' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "EncryptedSource", + "logicalId": "AuroraAllowedValues", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 171, - "startColumn": 5, - "endLine": 171, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 140, + "startColumn": 3, + "endLine": 140, + "endColumn": 22, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'SourceInstanceReplica' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "SourceInstanceReplica", + "logicalId": "AuroraAllowedValues", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 177, - "startColumn": 5, - "endLine": 177, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 140, + "startColumn": 3, + "endLine": 140, + "endColumn": 22, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'SourceResourceRestore' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "SourceResourceRestore", + "logicalId": "ClusterMember", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 183, - "startColumn": 5, - "endLine": 183, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 145, + "startColumn": 3, + "endLine": 145, + "endColumn": 16, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'AutomatedBackupRestore' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "AutomatedBackupRestore", + "logicalId": "ClusterMember", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 189, - "startColumn": 5, - "endLine": 189, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 145, + "startColumn": 3, + "endLine": 145, + "endColumn": 16, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'SourceClusterReplica' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "SourceClusterReplica", + "logicalId": "SnapshotRestore", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 195, - "startColumn": 5, - "endLine": 195, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 151, + "startColumn": 3, + "endLine": 151, + "endColumn": 18, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'CustomImplicitEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "CustomImplicitEncryption", + "logicalId": "SnapshotRestore", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 201, - "startColumn": 5, - "endLine": 201, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 151, + "startColumn": 3, + "endLine": 151, + "endColumn": 18, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'CustomTrueEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "CustomTrueEncryption", + "logicalId": "EmptySnapshotIdentifier", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 206, - "startColumn": 5, - "endLine": 206, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 157, + "startColumn": 3, + "endLine": 157, + "endColumn": 26, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'LegacySecurityGroups' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "LegacySecurityGroups", + "logicalId": "EmptySnapshotIdentifier", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 212, - "startColumn": 5, - "endLine": 212, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 157, + "startColumn": 3, + "endLine": 157, + "endColumn": 26, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'CorrelatedClusterOrEncryptedStandalone' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "CorrelatedClusterOrEncryptedStandalone", + "logicalId": "ClusterSnapshotRestore", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 218, - "startColumn": 5, - "endLine": 218, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 163, + "startColumn": 3, + "endLine": 163, + "endColumn": 25, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'ConditionalSnapshotOrEncryptedStandalone' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "ConditionalSnapshotOrEncryptedStandalone", + "logicalId": "ClusterSnapshotRestore", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 225, - "startColumn": 5, - "endLine": 225, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 163, + "startColumn": 3, + "endLine": 163, + "endColumn": 25, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'WholePropertiesCorrelated' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "WholePropertiesCorrelated", + "logicalId": "EncryptedSource", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 232, - "startColumn": 5, - "endLine": 232, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 169, + "startColumn": 3, + "endLine": 169, + "endColumn": 18, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'WholePropertiesFalseEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "WholePropertiesFalseEncryption", + "logicalId": "EncryptedSource", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 241, - "startColumn": 5, - "endLine": 241, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 169, + "startColumn": 3, + "endLine": 169, + "endColumn": 18, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'DynamicProperties' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "DynamicProperties", + "logicalId": "SourceInstanceReplica", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 250, - "startColumn": 5, - "endLine": 250, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 175, + "startColumn": 3, + "endLine": 175, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "gh-issues/issue-246.yaml": { - "filePath": "gh-issues/issue-246.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "HttpsAlias", + "logicalId": "SourceInstanceReplica", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "startLine": 20, - "startColumn": 7, - "endLine": 20, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 175, + "startColumn": 3, + "endLine": 175, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'Distribution' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", - "source": "ENGINE", + "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": "Distribution", + "logicalId": "SourceResourceRestore", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 181, + "startColumn": 3, + "endLine": 181, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "gh-issues/issue-247.json": { - "filePath": "gh-issues/issue-247.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "ALB", + "logicalId": "SourceResourceRestore", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 6, - "startColumn": 9, - "endLine": 6, - "endColumn": 14, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 181, + "startColumn": 3, + "endLine": 181, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'ALB' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", - "source": "ENGINE", + "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": "ALB", + "logicalId": "AutomatedBackupRestore", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", + "startLine": 187, + "startColumn": 3, + "endLine": 187, + "endColumn": 25, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "gh-issues/issue-264.yaml": { - "filePath": "gh-issues/issue-264.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 9, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 9, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "AGetAtt", + "logicalId": "AutomatedBackupRestore", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 187, + "startColumn": 3, + "endLine": 187, + "endColumn": 25, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "AResourceRef", + "logicalId": "SourceClusterReplica", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "startLine": 21, - "startColumn": 7, - "endLine": 21, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 193, + "startColumn": 3, + "endLine": 193, + "endColumn": 23, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "AaaaGetAtt", + "logicalId": "SourceClusterReplica", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "startLine": 30, - "startColumn": 7, - "endLine": 30, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 193, + "startColumn": 3, + "endLine": 193, + "endColumn": 23, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "TxtGetAtt", + "logicalId": "CustomImplicitEncryption", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "startLine": 39, - "startColumn": 7, - "endLine": 39, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 199, + "startColumn": 3, + "endLine": 199, + "endColumn": 27, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "MxGetAtt", + "logicalId": "CustomImplicitEncryption", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "startLine": 48, - "startColumn": 7, - "endLine": 48, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 199, + "startColumn": 3, + "endLine": 199, + "endColumn": 27, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "CaaGetAtt", + "logicalId": "CustomTrueEncryption", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "startLine": 57, - "startColumn": 7, - "endLine": 57, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 204, + "startColumn": 3, + "endLine": 204, + "endColumn": 23, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "DynamicParameter", + "logicalId": "CustomTrueEncryption", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "startLine": 66, - "startColumn": 7, - "endLine": 66, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 204, + "startColumn": 3, + "endLine": 204, + "endColumn": 23, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "Group", + "logicalId": "LegacySecurityGroups", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "startLine": 75, - "startColumn": 7, - "endLine": 75, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 210, + "startColumn": 3, + "endLine": 210, + "endColumn": 23, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'EIP' of type 'AWS::EC2::EIP' supports Tags but none are configured", - "source": "ENGINE", + "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": "EIP", + "logicalId": "LegacySecurityGroups", "entityType": "Resource", - "resourceType": "AWS::EC2::EIP" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 210, + "startColumn": 3, + "endLine": 210, + "endColumn": 23, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "gh-issues/issue-278.yaml": { - "filePath": "gh-issues/issue-278.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'Function' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "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": "Function", + "logicalId": "CorrelatedClusterOrEncryptedStandalone", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 216, + "startColumn": 3, + "endLine": 216, + "endColumn": 41, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "gh-issues/issue-339.yaml": { - "filePath": "gh-issues/issue-339.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "gh-issues/issue-34-w2506-overfire.json": { - "filePath": "gh-issues/issue-34-w2506-overfire.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", + "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": "NotAnImageSlot", + "logicalId": "CorrelatedClusterOrEncryptedStandalone", "entityType": "Resource", - "resourceType": "Custom::Thing" + "resourceType": "AWS::RDS::DBInstance" }, - "category": "Security", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 20, - "ruleDescription": "Hardcoded account ID in ARN", + "category": "Best Practice", + "startLine": 216, + "startColumn": 3, + "endLine": 216, + "endColumn": 41, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "gh-issues/issue-34.json": { - "filePath": "gh-issues/issue-34.json", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 7, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W2506", - "severity": "WARN", - "message": "Parameter 'SsmStringImageParam' is used as an ImageId but has Type 'AWS::SSM::Parameter::Value' - consider using 'AWS::EC2::Image::Id'", + "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": "SsmStringImageParam", - "entityType": "Parameter" + "logicalId": "ConditionalSnapshotOrEncryptedStandalone", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Parameters/SsmStringImageParam", "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 25, - "ruleDescription": "Check if ImageId Parameters have the correct type", + "startLine": 223, + "startColumn": 3, + "endLine": 223, + "endColumn": 43, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "Instance", + "logicalId": "ConditionalSnapshotOrEncryptedStandalone", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 16, - "startColumn": 9, - "endLine": 16, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 223, + "startColumn": 3, + "endLine": 223, + "endColumn": 43, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "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": "Instance", + "logicalId": "WholePropertiesCorrelated", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 17, - "startColumn": 9, - "endLine": 17, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 230, + "startColumn": 3, + "endLine": 230, + "endColumn": 28, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "Instance2", + "logicalId": "WholePropertiesCorrelated", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 23, - "startColumn": 9, - "endLine": 23, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 230, + "startColumn": 3, + "endLine": 230, + "endColumn": 28, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "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": "Instance2", + "logicalId": "WholePropertiesFalseEncryption", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 24, - "startColumn": 9, - "endLine": 24, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 239, + "startColumn": 3, + "endLine": 239, + "endColumn": 33, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9003", + "ruleId": "I3011", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", + "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": "WholePropertiesFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "startLine": 239, + "startColumn": 3, + "endLine": 239, + "endColumn": 33, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", - "source": "ENGINE", + "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": "Instance", + "logicalId": "DynamicProperties", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 15, - "startColumn": 7, - "endLine": 15, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", + "startLine": 248, + "startColumn": 3, + "endLine": 248, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'Instance2' of type 'AWS::EC2::Instance' supports Tags but none are configured", - "source": "ENGINE", + "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": "Instance2", + "logicalId": "DynamicProperties", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 22, - "startColumn": 7, - "endLine": 22, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", + "startLine": 248, + "startColumn": 3, + "endLine": 248, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "gh-issues/issue-35.yaml": { - "filePath": "gh-issues/issue-35.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'ScheduledRule' of type 'AWS::Events::Rule' supports Tags but none are configured", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "ScheduledRule", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 4, + "startLine": 26, "startColumn": 5, - "endLine": 4, + "endLine": 26, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" - } - ] - }, - "gh-issues/issue-357.yaml": { - "filePath": "gh-issues/issue-357.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 2, - "warnings": 0, - "informational": 3, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3019", - "severity": "ERROR", - "message": "Only one AWS::S3::BucketPolicy resource can target a given bucket; resources {'FirstBucketPolicy', 'SecondBucketPolicy'} all target bucket 'Ref(\"CfnBucket\")'", + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "FirstBucketPolicy", + "logicalId": "MissingEncryption", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Bucket", - "category": "Resource", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 13, - "ruleDescription": "Validate that all resources have unique primary identifiers", + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 32, + "startColumn": 5, + "endLine": 32, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "E3019", - "severity": "ERROR", - "message": "Only one AWS::S3::BucketPolicy resource can target a given bucket; resources {'FirstBucketPolicy', 'SecondBucketPolicy'} all target bucket 'Ref(\"CfnBucket\")'", + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "SecondBucketPolicy", + "logicalId": "KmsKeyWithoutEncryption", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Bucket", - "category": "Resource", - "startLine": 18, - "startColumn": 7, - "endLine": 18, - "endColumn": 13, - "ruleDescription": "Validate that all resources have unique primary identifiers", + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 37, + "startColumn": 5, + "endLine": 37, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "FirstBucketPolicy", + "logicalId": "FalseEncryption", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'CfnBucket'" - } + "startLine": 43, + "startColumn": 5, + "endLine": 43, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "SecondBucketPolicy", + "logicalId": "StringFalseEncryption", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 18, - "startColumn": 7, - "endLine": 18, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'CfnBucket'" - } + "startLine": 49, + "startColumn": 5, + "endLine": 49, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'CfnBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "CfnBucket", + "logicalId": "ConditionalFalseEncryption", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 2, - "startColumn": 3, - "endLine": 2, - "endColumn": 12, - "ruleDescription": "Resource should have Tags", + "startLine": 55, + "startColumn": 5, + "endLine": 55, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" - } - ] - }, - "gh-issues/issue-36.yaml": { - "filePath": "gh-issues/issue-36.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'ExecutionRoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", - "source": "ENGINE", + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "TaskDef", + "logicalId": "ConditionalNoValueEncryption", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ExecutionRoleArn", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 23, - "ruleDescription": "Hardcoded ARN property", + "startLine": 61, + "startColumn": 5, + "endLine": 61, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "TaskDef", + "logicalId": "AllowedValuesEncryption", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "category": "Security", - "startLine": 8, - "startColumn": 3, - "endLine": 8, - "endColumn": 10, - "ruleDescription": "Hardcoded account ID in ARN", + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 67, + "startColumn": 5, + "endLine": 67, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "TaskDef", + "logicalId": "ConditionalClusterOrStandalone", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ExecutionRoleArn", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 23, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 78, + "startColumn": 5, + "endLine": 78, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "TaskDef", + "logicalId": "CustomFalseEncryption", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 10, + "startLine": 84, "startColumn": 5, - "endLine": 10, + "endLine": 84, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" - } - ] - }, - "gh-issues/issue-37.yaml": { - "filePath": "gh-issues/issue-37.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 4, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W3010", - "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1a'", + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "MyAsg", + "logicalId": "CustomStringFalseEncryption", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.AvailabilityZones.0", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 15, - "startColumn": 11, - "endLine": 15, - "endColumn": 12, - "ruleDescription": "Availability zone properties should not be hardcoded", + "startLine": 90, + "startColumn": 5, + "endLine": 90, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "W3697", - "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "MyLaunchConfig", + "logicalId": "TrueEncryption", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::RDS::DBInstance" }, - "category": "Deprecation", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 96, + "startColumn": 5, + "endLine": 96, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "MyLaunchConfig", + "logicalId": "StringTrueEncryption", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 102, + "startColumn": 5, + "endLine": 102, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "MyLaunchConfig", + "logicalId": "ConditionalTrueEncryption", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 108, + "startColumn": 5, + "endLine": 108, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "MyAsg", + "logicalId": "DynamicEncryptionValue", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.LaunchConfigurationName", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 30, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'MyLaunchConfig'" - } + "startLine": 114, + "startColumn": 5, + "endLine": 114, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'MyAsg' of type 'AWS::AutoScaling::AutoScalingGroup' supports Tags but none are configured", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "MyAsg", + "logicalId": "DynamicReferenceEncryption", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 10, + "startLine": 120, "startColumn": 5, - "endLine": 10, + "endLine": 120, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" - } - ] - }, - "gh-issues/issue-38.json": { - "filePath": "gh-issues/issue-38.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "Memory", + "logicalId": "InvalidEncryptionValue", "entityType": "Resource", - "resourceType": "AWS::BedrockAgentCore::Memory" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 6, - "startColumn": 9, - "endLine": 6, - "endColumn": 14, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 126, + "startColumn": 5, + "endLine": 126, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'Memory' of type 'AWS::BedrockAgentCore::Memory' supports Tags but none are configured", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "Memory", + "logicalId": "SnapshotRestore", "entityType": "Resource", - "resourceType": "AWS::BedrockAgentCore::Memory" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", + "startLine": 153, + "startColumn": 5, + "endLine": 153, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" - } - ] - }, - "gh-issues/issue-39.json": { - "filePath": "gh-issues/issue-39.json", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 5, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "VPCB9E5F0B4", + "logicalId": "EmptySnapshotIdentifier", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 6, - "startColumn": 9, - "endLine": 6, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 159, + "startColumn": 5, + "endLine": 159, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "VPCEcrEndpointSecurityGroup50ED8BA4", + "logicalId": "ClusterSnapshotRestore", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 12, - "startColumn": 9, - "endLine": 12, - "endColumn": 26, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 165, + "startColumn": 5, + "endLine": 165, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "VPCEcrEndpointSecurityGroup50ED8BA4", + "logicalId": "EncryptedSource", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 34, - "startColumn": 9, - "endLine": 34, + "startLine": 171, + "startColumn": 5, + "endLine": 171, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" - } + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'VPCB9E5F0B4' of type 'AWS::EC2::VPC' supports Tags but none are configured", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "VPCB9E5F0B4", + "logicalId": "SourceResourceRestore", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", + "startLine": 183, + "startColumn": 5, + "endLine": 183, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'VPCEcrEndpointSecurityGroup50ED8BA4' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "VPCEcrEndpointSecurityGroup50ED8BA4", + "logicalId": "AutomatedBackupRestore", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", + "startLine": 189, + "startColumn": 5, + "endLine": 189, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" - } - ] - }, - "gh-issues/issue-40.yaml": { - "filePath": "gh-issues/issue-40.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 4, - "informational": 10, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E1150", - "severity": "ERROR", - "message": "'sg-1' does not match format 'AWS::EC2::SecurityGroup.Id'", + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "DaxConcrete", + "logicalId": "SourceClusterReplica", "entityType": "Resource", - "resourceType": "AWS::DAX::Cluster" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SecurityGroupIds.0", - "category": "Intrinsic Function", - "startLine": 20, - "startColumn": 11, - "endLine": 20, - "endColumn": 12, - "ruleDescription": "Validate security group format", - "phase": "SCHEMA", - "context": { - "actualValue": "sg-1" - } + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 195, + "startColumn": 5, + "endLine": 195, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", - "source": "ENGINE", + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "EksCluster", + "logicalId": "CustomImplicitEncryption", "entityType": "Resource", - "resourceType": "AWS::EKS::Cluster" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.RoleArn", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 14, - "ruleDescription": "Hardcoded ARN property", + "startLine": 201, + "startColumn": 5, + "endLine": 201, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "EksCluster", + "logicalId": "CustomTrueEncryption", "entityType": "Resource", - "resourceType": "AWS::EKS::Cluster" + "resourceType": "AWS::RDS::DBInstance" }, - "category": "Security", - "startLine": 2, - "startColumn": 3, - "endLine": 2, - "endColumn": 13, - "ruleDescription": "Hardcoded account ID in ARN", + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 206, + "startColumn": 5, + "endLine": 206, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "DaxConcrete", + "logicalId": "LegacySecurityGroups", "entityType": "Resource", - "resourceType": "AWS::DAX::Cluster" + "resourceType": "AWS::RDS::DBInstance" }, - "category": "Security", - "startLine": 13, - "startColumn": 3, - "endLine": 13, - "endColumn": 14, - "ruleDescription": "Hardcoded account ID in ARN", + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 212, + "startColumn": 5, + "endLine": 212, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "DaxRef", + "logicalId": "CorrelatedClusterOrEncryptedStandalone", "entityType": "Resource", - "resourceType": "AWS::DAX::Cluster" + "resourceType": "AWS::RDS::DBInstance" }, - "category": "Security", - "startLine": 25, - "startColumn": 3, - "endLine": 25, - "endColumn": 9, - "ruleDescription": "Hardcoded account ID in ARN", + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 218, + "startColumn": 5, + "endLine": 218, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "EksCluster", + "logicalId": "ConditionalSnapshotOrEncryptedStandalone", "entityType": "Resource", - "resourceType": "AWS::EKS::Cluster" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-eks.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 225, + "startColumn": 5, + "endLine": 225, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EksCluster", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::EKS::Cluster" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.RoleArn", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 6, + "startLine": 27, "startColumn": 7, - "endLine": 6, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-eks.git", + "endLine": 27, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IAMRoleARN' is create-only; updating it will cause resource replacement", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DaxConcrete", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::DAX::Cluster" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.IAMRoleARN", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 16, + "startLine": 28, "startColumn": 7, - "endLine": 16, - "endColumn": 17, + "endLine": 28, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -8916,63 +9114,66 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NodeType' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DaxConcrete", + "logicalId": "MissingEncryption", "entityType": "Resource", - "resourceType": "AWS::DAX::Cluster" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.NodeType", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 17, + "startLine": 33, "startColumn": 7, - "endLine": 17, - "endColumn": 15, + "endLine": 33, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IAMRoleARN' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DaxRef", + "logicalId": "KmsKeyWithoutEncryption", "entityType": "Resource", - "resourceType": "AWS::DAX::Cluster" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.IAMRoleARN", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 28, + "startLine": 38, "startColumn": 7, - "endLine": 28, - "endColumn": 17, + "endLine": 38, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NodeType' is create-only; updating it will cause resource replacement", + "message": "Property 'KmsKeyId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DaxRef", + "logicalId": "KmsKeyWithoutEncryption", "entityType": "Resource", - "resourceType": "AWS::DAX::Cluster" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.NodeType", + "propertyPath": "Properties.KmsKeyId", "category": "Best Practice", - "startLine": 29, + "startLine": 39, "startColumn": 7, - "endLine": 29, + "endLine": 39, "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -8980,358 +9181,349 @@ } }, { - "ruleId": "I9003", + "ruleId": "I9001", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", + "entity": { + "logicalId": "FalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" + "startLine": 44, + "startColumn": 7, + "endLine": 44, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'EksCluster' of type 'AWS::EKS::Cluster' supports Tags but none are configured", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EksCluster", + "logicalId": "FalseEncryption", "entityType": "Resource", - "resourceType": "AWS::EKS::Cluster" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 4, - "startColumn": 5, - "endLine": 4, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 45, + "startColumn": 7, + "endLine": 45, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DaxConcrete' of type 'AWS::DAX::Cluster' supports Tags but none are configured", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DaxConcrete", + "logicalId": "StringFalseEncryption", "entityType": "Resource", - "resourceType": "AWS::DAX::Cluster" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 15, - "startColumn": 5, - "endLine": 15, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 50, + "startColumn": 7, + "endLine": 50, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DaxRef' of type 'AWS::DAX::Cluster' supports Tags but none are configured", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DaxRef", + "logicalId": "StringFalseEncryption", "entityType": "Resource", - "resourceType": "AWS::DAX::Cluster" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 27, - "startColumn": 5, - "endLine": 27, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "gh-issues/issue-41.json": { - "filePath": "gh-issues/issue-41.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 3, - "debug": 0 + "startLine": 51, + "startColumn": 7, + "endLine": 51, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyFunction", + "logicalId": "ConditionalFalseEncryption", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 7, - "startColumn": 9, - "endLine": 7, - "endColumn": 17, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 56, + "startColumn": 7, + "endLine": 56, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs20.x", - "lifecycle": "deprecated" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I1022", + "ruleId": "I9001", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyFunction", + "logicalId": "ConditionalFalseEncryption", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Role.Fn::Join", - "category": "Intrinsic Function", - "startLine": 11, - "startColumn": 11, - "endLine": 11, - "endColumn": 20, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 57, + "startColumn": 7, + "endLine": 57, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseClusterCondition'" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyFunction", + "logicalId": "ConditionalNoValueEncryption", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 6, - "startColumn": 9, - "endLine": 6, - "endColumn": 22, + "startLine": 62, + "startColumn": 7, + "endLine": 62, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyFunction", + "logicalId": "ConditionalNoValueEncryption", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 5, + "startLine": 63, "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "gh-issues/issue-42-if.yaml": { - "filePath": "gh-issues/issue-42-if.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 9, - "debug": 0 + "endLine": 63, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseClusterCondition'" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W3049", - "severity": "WARN", - "message": "Container 'web' uses dynamic host port 0, so each task registers on an ephemeral port, but TargetGroup 'TargetGroup' health-checks the fixed port '8080'. The health check will not follow the traffic port unless '8080' is separately served on every target. Use HealthCheckPort 'traffic-port' to health-check the port each target actually receives traffic on", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "TargetGroup", + "logicalId": "AllowedValuesEncryption", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HealthCheckPort", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 31, + "startLine": 68, "startColumn": 7, - "endLine": 31, - "endColumn": 22, - "relatedResources": [ - { - "resource": { - "id": "Service", - "resourceType": "AWS::ECS::Service" - }, - "location": { - "startLine": 37, - "startColumn": 7, - "endLine": 37, - "endColumn": 20 - }, - "message": "Dynamic host port defined here" - } - ], - "ruleDescription": "ELB target group health check uses a fixed port that will not follow an ECS dynamic host port", - "phase": "LINT" + "endLine": 68, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "AllowedValuesEncryption", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 18, + "startLine": 69, "startColumn": 7, - "endLine": 18, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 69, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "EngineAllowedValuesMissingEncryption", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 19, + "startLine": 74, "startColumn": 7, - "endLine": 19, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 74, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only", + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup", + "logicalId": "ConditionalClusterOrStandalone", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 28, + "startLine": 79, "startColumn": 7, - "endLine": 28, - "endColumn": 11, + "endLine": 79, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup", + "logicalId": "ConditionalClusterOrStandalone", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.DBClusterIdentifier", "category": "Best Practice", - "startLine": 29, + "startLine": 80, "startColumn": 7, - "endLine": 29, - "endColumn": 15, + "endLine": 80, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseClusterCondition'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup", + "logicalId": "CustomFalseEncryption", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 30, + "startLine": 85, "startColumn": 7, - "endLine": 30, - "endColumn": 12, + "endLine": 85, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Service", + "logicalId": "CustomFalseEncryption", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Cluster", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 35, + "startLine": 86, "startColumn": 7, - "endLine": 35, - "endColumn": 14, + "endLine": 86, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9339,101 +9531,91 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "CustomStringFalseEncryption", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "startLine": 91, + "startColumn": 7, + "endLine": 91, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TargetGroup' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup", + "logicalId": "CustomStringFalseEncryption", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 27, - "startColumn": 5, - "endLine": 27, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 92, + "startColumn": 7, + "endLine": 92, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Service' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Service", + "logicalId": "TrueEncryption", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 34, - "startColumn": 5, - "endLine": 34, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "gh-issues/issue-42-ref.yaml": { - "filePath": "gh-issues/issue-42-ref.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 9, - "debug": 0 + "startLine": 97, + "startColumn": 7, + "endLine": 97, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "TrueEncryption", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 13, + "startLine": 98, "startColumn": 7, - "endLine": 13, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 98, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9443,42 +9625,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "StringTrueEncryption", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 14, + "startLine": 103, "startColumn": 7, - "endLine": 14, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 103, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup", + "logicalId": "StringTrueEncryption", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 23, + "startLine": 104, "startColumn": 7, - "endLine": 23, - "endColumn": 11, + "endLine": 104, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9488,199 +9671,184 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup", + "logicalId": "ConditionalTrueEncryption", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 24, + "startLine": 109, "startColumn": 7, - "endLine": 24, - "endColumn": 15, + "endLine": 109, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup", + "logicalId": "ConditionalTrueEncryption", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 25, + "startLine": 110, "startColumn": 7, - "endLine": 25, - "endColumn": 12, + "endLine": 110, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseClusterCondition'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Service", + "logicalId": "DynamicEncryptionValue", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Cluster", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 30, + "startLine": 115, "startColumn": 7, - "endLine": 30, - "endColumn": 14, + "endLine": 115, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "DynamicEncryptionValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 116, + "startColumn": 7, + "endLine": 116, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'DynamicEncryption' (type String)" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TargetGroup' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup", + "logicalId": "DynamicReferenceEncryption", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 22, - "startColumn": 5, - "endLine": 22, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 121, + "startColumn": 7, + "endLine": 121, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Service' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Service", + "logicalId": "DynamicReferenceEncryption", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 29, - "startColumn": 5, - "endLine": 29, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "gh-issues/issue-42.yaml": { - "filePath": "gh-issues/issue-42.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 10, - "debug": 0 + "startLine": 122, + "startColumn": 7, + "endLine": 122, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (dynamic reference: {{resolve:ssm:/rds/storage-encrypted}})" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I3049", + "ruleId": "I9001", "severity": "INFO", - "message": "Container 'web' uses dynamic host port 0; TargetGroup 'TargetGroup' omits HealthCheckPort, which defaults to 'traffic-port', so the health check follows each task's ephemeral port - the correct behavior for dynamic port mapping", - "source": "CFN_LINT", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "TargetGroup", + "logicalId": "InvalidEncryptionValue", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HealthCheckPort", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 15, - "startColumn": 5, - "endLine": 15, - "endColumn": 15, - "relatedResources": [ - { - "resource": { - "id": "Service", - "resourceType": "AWS::ECS::Service" - }, - "location": { - "startLine": 25, - "startColumn": 7, - "endLine": 25, - "endColumn": 20 - }, - "message": "Dynamic host port defined here" - } - ], - "ruleDescription": "ELB target group relies on the default traffic-port health check for an ECS dynamic host port", - "phase": "LINT" + "startLine": 127, + "startColumn": 7, + "endLine": 127, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "InvalidEncryptionValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 6, + "startLine": 128, "startColumn": 7, - "endLine": 6, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 128, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9690,310 +9858,300 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "DynamicEngineValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 7, + "startLine": 133, "startColumn": 7, - "endLine": 7, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 133, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only", + "resolutionSource": "parameter 'DynamicEngine' (type String)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup", + "logicalId": "AuroraEngine", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 16, + "startLine": 138, "startColumn": 7, - "endLine": 16, - "endColumn": 11, + "endLine": 138, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup", + "logicalId": "AuroraAllowedValues", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 17, + "startLine": 143, "startColumn": 7, - "endLine": 17, - "endColumn": 15, + "endLine": 143, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only", + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup", + "logicalId": "ClusterMember", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 18, + "startLine": 148, "startColumn": 7, - "endLine": 18, - "endColumn": 12, + "endLine": 148, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", + "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Service", + "logicalId": "ClusterMember", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Cluster", + "propertyPath": "Properties.DBClusterIdentifier", "category": "Best Practice", - "startLine": 23, + "startLine": 149, "startColumn": 7, - "endLine": 23, - "endColumn": 14, + "endLine": 149, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Cluster'" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "SnapshotRestore", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 154, + "startColumn": 7, + "endLine": 154, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TargetGroup' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "message": "Property 'DBSnapshotIdentifier' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup", + "logicalId": "SnapshotRestore", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DBSnapshotIdentifier", "category": "Best Practice", - "startLine": 15, - "startColumn": 5, - "endLine": 15, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 155, + "startColumn": 7, + "endLine": 155, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "parameter 'SnapshotName' (type String)" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Service' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Service", + "logicalId": "EmptySnapshotIdentifier", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 22, - "startColumn": 5, - "endLine": 22, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "gh-issues/issue-44.json": { - "filePath": "gh-issues/issue-44.json", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 + "startLine": 160, + "startColumn": 7, + "endLine": 160, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3014", - "severity": "FATAL", - "message": "Exactly one of ['ArtifactStore', 'ArtifactStores'] must be specified", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DBSnapshotIdentifier' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Pipeline", + "logicalId": "EmptySnapshotIdentifier", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties", - "category": "Schema", - "startLine": 5, + "propertyPath": "Properties.DBSnapshotIdentifier", + "category": "Best Practice", + "startLine": 161, "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", - "ruleDescription": "Exactly one of properties required (requiredXor)", - "phase": "SCHEMA" + "endLine": 161, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Pipeline' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Pipeline", + "logicalId": "ClusterSnapshotRestore", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 5, + "startLine": 166, "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 166, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'PipelineRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'DBClusterSnapshotIdentifier' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PipelineRole", + "logicalId": "ClusterSnapshotRestore", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DBClusterSnapshotIdentifier", "category": "Best Practice", - "startLine": 49, + "startLine": 167, "startColumn": 7, - "endLine": 49, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "gh-issues/issue-45.json": { - "filePath": "gh-issues/issue-45.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 4, - "debug": 0 + "endLine": 167, + "endColumn": 34, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcEndpointType' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "interfaceVpcEndpoint89C99945", + "logicalId": "EncryptedSource", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCEndpoint" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.VpcEndpointType", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 6, - "startColumn": 9, - "endLine": 6, - "endColumn": 25, + "startLine": 172, + "startColumn": 7, + "endLine": 172, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ServiceName' is create-only; updating it will cause resource replacement", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "interfaceVpcEndpoint89C99945", + "logicalId": "EncryptedSource", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCEndpoint" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ServiceName", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 7, - "startColumn": 9, - "endLine": 7, - "endColumn": 21, + "startLine": 173, + "startColumn": 7, + "endLine": 173, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -10003,330 +10161,252 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "interfaceVpcEndpoint89C99945", + "logicalId": "SourceInstanceReplica", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCEndpoint" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 8, - "startColumn": 9, - "endLine": 8, - "endColumn": 15, + "startLine": 178, + "startColumn": 7, + "endLine": 178, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'interfaceVpcEndpoint89C99945' of type 'AWS::EC2::VPCEndpoint' supports Tags but none are configured", + "message": "Property 'SourceDBInstanceIdentifier' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "interfaceVpcEndpoint89C99945", + "logicalId": "SourceInstanceReplica", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCEndpoint" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SourceDBInstanceIdentifier", "category": "Best Practice", - "startLine": 5, + "startLine": 179, "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "gh-issues/issue-46.json": { - "filePath": "gh-issues/issue-46.json", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 3, - "informational": 3, - "debug": 0 + "endLine": 179, + "endColumn": 33, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'EncryptedSource'" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterEB0386A7", + "logicalId": "SourceResourceRestore", "entityType": "Resource", - "resourceType": "AWS::EKS::Cluster" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.RoleArn", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 7, - "startColumn": 9, - "endLine": 7, - "endColumn": 17, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" + "startLine": 184, + "startColumn": 7, + "endLine": 184, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SourceDbiResourceId' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterEB0386A7", + "logicalId": "SourceResourceRestore", "entityType": "Resource", - "resourceType": "AWS::EKS::Cluster" + "resourceType": "AWS::RDS::DBInstance" }, - "category": "Security", - "startLine": 4, - "startColumn": 5, - "endLine": 4, - "endColumn": 21, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "propertyPath": "Properties.SourceDbiResourceId", + "category": "Best Practice", + "startLine": 185, + "startColumn": 7, + "endLine": 185, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterKubectlProviderHandler2E05C68A", + "logicalId": "AutomatedBackupRestore", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "category": "Security", - "startLine": 13, - "startColumn": 5, - "endLine": 13, - "endColumn": 43, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 190, + "startColumn": 7, + "endLine": 190, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceDBInstanceAutomatedBackupsArn' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterEB0386A7", + "logicalId": "AutomatedBackupRestore", "entityType": "Resource", - "resourceType": "AWS::EKS::Cluster" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.RoleArn", + "propertyPath": "Properties.SourceDBInstanceAutomatedBackupsArn", "category": "Best Practice", - "startLine": 7, - "startColumn": 9, - "endLine": 7, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-eks.git", + "startLine": 191, + "startColumn": 7, + "endLine": 191, + "endColumn": 42, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ClusterEB0386A7' of type 'AWS::EKS::Cluster' supports Tags but none are configured", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterEB0386A7", + "logicalId": "SourceClusterReplica", "entityType": "Resource", - "resourceType": "AWS::EKS::Cluster" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 6, + "startLine": 196, "startColumn": 7, - "endLine": 6, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 196, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ClusterKubectlProviderHandler2E05C68A' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'SourceDBClusterIdentifier' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterKubectlProviderHandler2E05C68A", + "logicalId": "SourceClusterReplica", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SourceDBClusterIdentifier", "category": "Best Practice", - "startLine": 15, + "startLine": 197, "startColumn": 7, - "endLine": 15, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "gh-issues/issue-47.json": { - "filePath": "gh-issues/issue-47.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 2, - "informational": 2, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3677", - "severity": "ERROR", - "message": "Runtime 'node99.x' is not supported with Code.ZipFile - use nodejs or python", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "category": "Resource", - "startLine": 3, - "startColumn": 5, - "endLine": 3, - "endColumn": 16, - "ruleDescription": "Lambda ZipFile requires nodejs or python runtime", - "phase": "LINT" + "endLine": 197, + "endColumn": 32, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'Cluster'" + } }, { - "ruleId": "W3030", - "severity": "WARN", - "message": "'node99.x' is not one of ['dotnet10', 'dotnet6', 'dotnet8', 'dotnetcore1.0', 'dotnetcore2.0', 'dotnetcore2.1', 'dotnetcore3.1', 'go1.x', 'java11', 'java11.al2023', 'java17', 'java17.al2023', 'java21', 'java25', 'java8', 'java8.al2', 'java8.al2023', 'nodejs', 'nodejs10.x', 'nodejs12.x', 'nodejs14.x', 'nodejs16.x', 'nodejs18.x', 'nodejs20.x', 'nodejs22.x', 'nodejs24.x', 'nodejs26.x', 'nodejs4.3', 'nodejs4.3-edge', 'nodejs6.10', 'nodejs8.10', 'provided', 'provided.al2', 'provided.al2023', 'python2.7', 'python3.10', 'python3.11', 'python3.12', 'python3.13', 'python3.14', 'python3.15', 'python3.6', 'python3.7', 'python3.8', 'python3.9', 'ruby2.5', 'ruby2.7', 'ruby3.2', 'ruby3.3', 'ruby3.4', 'ruby4.0']", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyFunction", + "logicalId": "CustomImplicitEncryption", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Runtime", - "category": "Schema", - "startLine": 9, - "startColumn": 9, - "endLine": 9, - "endColumn": 17, - "ruleDescription": "Value not in allowed enum", + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 202, + "startColumn": 7, + "endLine": 202, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "node99.x", - "extra": { - "allowed_values": [ - "dotnet10", - "dotnet6", - "dotnet8", - "dotnetcore1.0", - "dotnetcore2.0", - "dotnetcore2.1", - "dotnetcore3.1", - "go1.x", - "java11", - "java11.al2023", - "java17", - "java17.al2023", - "java21", - "java25", - "java8", - "java8.al2", - "java8.al2023", - "nodejs", - "nodejs10.x", - "nodejs12.x", - "nodejs14.x", - "nodejs16.x", - "nodejs18.x", - "nodejs20.x", - "nodejs22.x", - "nodejs24.x", - "nodejs26.x", - "nodejs4.3", - "nodejs4.3-edge", - "nodejs6.10", - "nodejs8.10", - "provided", - "provided.al2", - "provided.al2023", - "python2.7", - "python3.10", - "python3.11", - "python3.12", - "python3.13", - "python3.14", - "python3.15", - "python3.6", - "python3.7", - "python3.8", - "python3.9", - "ruby2.5", - "ruby2.7", - "ruby3.2", - "ruby3.3", - "ruby3.4", - "ruby4.0" - ] - } + "lifecycle": "conditional-create-only" } }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyFunction", + "logicalId": "CustomTrueEncryption", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "category": "Security", - "startLine": 3, - "startColumn": 5, - "endLine": 3, - "endColumn": 16, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 207, + "startColumn": 7, + "endLine": 207, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyFunction", + "logicalId": "CustomTrueEncryption", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 6, - "startColumn": 9, - "endLine": 6, - "endColumn": 22, + "startLine": 208, + "startColumn": 7, + "endLine": 208, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -10334,172 +10414,50 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyFunction", + "logicalId": "LegacySecurityGroups", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "gh-issues/issue-49.yaml": { - "filePath": "gh-issues/issue-49.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 2, - "warnings": 1, - "informational": 11, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3620", - "severity": "ERROR", - "message": "'db.t2.small' is not valid in any region", - "source": "CFN_LINT", - "entity": { - "logicalId": "DocDbInstance", - "entityType": "Resource", - "resourceType": "AWS::DocDB::DBInstance" - }, - "propertyPath": "Properties.DBInstanceClass", - "category": "Resource", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 22, - "ruleDescription": "Validate a DocDB DB Instance class", - "phase": "LINT" - }, - { - "ruleId": "E3652", - "severity": "ERROR", - "message": "'t2.nano.elasticsearch' is not valid in any region", - "source": "CFN_LINT", - "entity": { - "logicalId": "EsDomain", - "entityType": "Resource", - "resourceType": "AWS::Elasticsearch::Domain" - }, - "propertyPath": "Properties.ElasticsearchClusterConfig.InstanceType", - "category": "Resource", - "startLine": 6, - "startColumn": 9, - "endLine": 6, - "endColumn": 21, - "ruleDescription": "Validate Elasticsearch domain cluster instance", - "phase": "LINT" - }, - { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", - "source": "ENGINE", - "entity": { - "logicalId": "Ec2Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 16, + "startLine": 213, "startColumn": 7, - "endLine": 16, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", - "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": "EsDomain", - "entityType": "Resource", - "resourceType": "AWS::Elasticsearch::Domain" - }, - "category": "Best Practice", - "startLine": 2, - "startColumn": 3, - "endLine": 2, - "endColumn": 11, - "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": "EsDomain", - "entityType": "Resource", - "resourceType": "AWS::Elasticsearch::Domain" - }, - "category": "Best Practice", - "startLine": 2, - "startColumn": 3, - "endLine": 2, - "endColumn": 11, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "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": "DocDbInstance", - "entityType": "Resource", - "resourceType": "AWS::DocDB::DBInstance" - }, - "category": "Best Practice", - "startLine": 8, - "startColumn": 3, - "endLine": 8, - "endColumn": 16, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "endLine": 213, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DocDbInstance", + "logicalId": "CorrelatedClusterOrEncryptedStandalone", "entityType": "Resource", - "resourceType": "AWS::DocDB::DBInstance" + "resourceType": "AWS::RDS::DBInstance" }, + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 8, - "startColumn": 3, - "endLine": 8, - "endColumn": 16, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 219, + "startColumn": 7, + "endLine": 219, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9001", @@ -10507,62 +10465,65 @@ "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DocDbInstance", + "logicalId": "CorrelatedClusterOrEncryptedStandalone", "entityType": "Resource", - "resourceType": "AWS::DocDB::DBInstance" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.DBClusterIdentifier", "category": "Best Practice", - "startLine": 11, + "startLine": 220, "startColumn": 7, - "endLine": 11, + "endLine": 220, "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseClusterCondition'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2Instance", + "logicalId": "CorrelatedClusterOrEncryptedStandalone", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 16, + "startLine": 221, "startColumn": 7, - "endLine": 16, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 221, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseClusterCondition'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2Instance", + "logicalId": "ConditionalSnapshotOrEncryptedStandalone", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 17, + "startLine": 226, "startColumn": 7, - "endLine": 17, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 226, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -10570,30 +10531,69 @@ } }, { - "ruleId": "I9003", + "ruleId": "I9001", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "message": "Property 'DBSnapshotIdentifier' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", + "entity": { + "logicalId": "ConditionalSnapshotOrEncryptedStandalone", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.DBSnapshotIdentifier", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" + "startLine": 227, + "startColumn": 7, + "endLine": 227, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "Fn::If on condition 'UseClusterCondition'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalSnapshotOrEncryptedStandalone", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 228, + "startColumn": 7, + "endLine": 228, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseClusterCondition'" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EsDomain' of type 'AWS::Elasticsearch::Domain' supports Tags but none are configured", + "message": "Resource 'Cluster' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EsDomain", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::Elasticsearch::Domain" + "resourceType": "AWS::RDS::DBCluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 4, + "startLine": 26, "startColumn": 5, - "endLine": 4, + "endLine": 26, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -10601,19 +10601,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DocDbInstance' of type 'AWS::DocDB::DBInstance' supports Tags but none are configured", + "message": "Resource 'MissingEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DocDbInstance", + "logicalId": "MissingEncryption", "entityType": "Resource", - "resourceType": "AWS::DocDB::DBInstance" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, + "startLine": 32, "startColumn": 5, - "endLine": 10, + "endLine": 32, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -10621,875 +10621,821 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Ec2Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'KmsKeyWithoutEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Ec2Instance", + "logicalId": "KmsKeyWithoutEncryption", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 15, + "startLine": 37, "startColumn": 5, - "endLine": 15, + "endLine": 37, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "gh-issues/issue-50.json": { - "filePath": "gh-issues/issue-50.json", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyFunctionServiceRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'FalseEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyFunctionServiceRole", + "logicalId": "FalseEncryption", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 18, + "startLine": 43, + "startColumn": 5, + "endLine": 43, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "gh-issues/issue-52.json": { - "filePath": "gh-issues/issue-52.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 4, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'StringFalseEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Nodegroup", + "logicalId": "StringFalseEncryption", "entityType": "Resource", - "resourceType": "AWS::EKS::Nodegroup" + "resourceType": "AWS::RDS::DBInstance" }, - "category": "Security", - "startLine": 3, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 49, "startColumn": 5, - "endLine": 3, + "endLine": 49, "endColumn": 15, - "ruleDescription": "Hardcoded account ID in ARN", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", + "message": "Resource 'ConditionalFalseEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Nodegroup", + "logicalId": "ConditionalFalseEncryption", "entityType": "Resource", - "resourceType": "AWS::EKS::Nodegroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ClusterName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, - "startColumn": 9, - "endLine": 6, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 55, + "startColumn": 5, + "endLine": 55, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'NodeRole' is create-only; updating it will cause resource replacement", + "message": "Resource 'ConditionalNoValueEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Nodegroup", + "logicalId": "ConditionalNoValueEncryption", "entityType": "Resource", - "resourceType": "AWS::EKS::Nodegroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.NodeRole", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 7, - "startColumn": 9, - "endLine": 7, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 61, + "startColumn": 5, + "endLine": 61, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Subnets' is create-only; updating it will cause resource replacement", + "message": "Resource 'AllowedValuesEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Nodegroup", + "logicalId": "AllowedValuesEncryption", "entityType": "Resource", - "resourceType": "AWS::EKS::Nodegroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Subnets", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 8, - "startColumn": 9, - "endLine": 8, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 67, + "startColumn": 5, + "endLine": 67, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Nodegroup' of type 'AWS::EKS::Nodegroup' supports Tags but none are configured", + "message": "Resource 'EngineAllowedValuesMissingEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Nodegroup", + "logicalId": "EngineAllowedValuesMissingEncryption", "entityType": "Resource", - "resourceType": "AWS::EKS::Nodegroup" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, + "startLine": 73, + "startColumn": 5, + "endLine": 73, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "gh-issues/issue-53.json": { - "filePath": "gh-issues/issue-53.json", - "status": "OK", - "metadata": { - "resourcesScanned": 37, - "counts": { - "fatal": 2, - "errors": 0, - "warnings": 6, - "informational": 68, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource ClusterCreationRoleDefaultPolicyE8BDFC7B. Circular dependency with [ClusterCreationRoleDefaultPolicyE8BDFC7B -> ClusterKubectlReadyBarrier200052AF -> ClusterCreationRoleDefaultPolicyE8BDFC7B]", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ConditionalClusterOrStandalone' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ClusterCreationRoleDefaultPolicyE8BDFC7B", + "logicalId": "ConditionalClusterOrStandalone", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Resources/ClusterCreationRoleDefaultPolicyE8BDFC7B", - "category": "Reference", - "startLine": 688, - "startColumn": 3, - "endLine": 688, - "endColumn": 44, - "ruleDescription": "Circular dependency detected", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 78, + "startColumn": 5, + "endLine": 78, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource ClusterKubectlReadyBarrier200052AF. Circular dependency with [ClusterKubectlReadyBarrier200052AF -> ClusterCreationRoleDefaultPolicyE8BDFC7B -> ClusterKubectlReadyBarrier200052AF]", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CustomFalseEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ClusterKubectlReadyBarrier200052AF", + "logicalId": "CustomFalseEncryption", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Resources/ClusterKubectlReadyBarrier200052AF", - "category": "Reference", - "startLine": 880, - "startColumn": 3, - "endLine": 880, - "endColumn": 38, - "ruleDescription": "Circular dependency detected", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 84, + "startColumn": 5, + "endLine": 84, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ClusterCreationRole360249B6' dependency already enforced by a 'GetAtt' at 'Properties.AssumeRoleArn'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CustomStringFalseEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Cluster9EE0221C", + "logicalId": "CustomStringFalseEncryption", "entityType": "Resource", - "resourceType": "Custom::AWSCDK-EKS-Cluster" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 849, - "startColumn": 4, - "endLine": 849, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 90, + "startColumn": 5, + "endLine": 90, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'UserVpcPrivateSubnet1Subnet0B127D2C' dependency already enforced by a 'Ref' at 'Properties.Config.resourcesVpcConfig.subnetIds.2'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TrueEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Cluster9EE0221C", + "logicalId": "TrueEncryption", "entityType": "Resource", - "resourceType": "Custom::AWSCDK-EKS-Cluster" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 849, - "startColumn": 4, - "endLine": 849, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 96, + "startColumn": 5, + "endLine": 96, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'UserVpcPrivateSubnet2SubnetCD612986' dependency already enforced by a 'Ref' at 'Properties.Config.resourcesVpcConfig.subnetIds.3'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'StringTrueEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Cluster9EE0221C", + "logicalId": "StringTrueEncryption", "entityType": "Resource", - "resourceType": "Custom::AWSCDK-EKS-Cluster" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 849, - "startColumn": 4, - "endLine": 849, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 102, + "startColumn": 5, + "endLine": 102, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'UserVpcPublicSubnet1Subnet7A3A7B5D' dependency already enforced by a 'Ref' at 'Properties.Config.resourcesVpcConfig.subnetIds.0'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ConditionalTrueEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Cluster9EE0221C", + "logicalId": "ConditionalTrueEncryption", "entityType": "Resource", - "resourceType": "Custom::AWSCDK-EKS-Cluster" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 849, - "startColumn": 4, - "endLine": 849, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 108, + "startColumn": 5, + "endLine": 108, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'UserVpcPublicSubnet2Subnet42A6D42E' dependency already enforced by a 'Ref' at 'Properties.Config.resourcesVpcConfig.subnetIds.1'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DynamicEncryptionValue' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Cluster9EE0221C", + "logicalId": "DynamicEncryptionValue", "entityType": "Resource", - "resourceType": "Custom::AWSCDK-EKS-Cluster" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 849, - "startColumn": 4, - "endLine": 849, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 114, + "startColumn": 5, + "endLine": 114, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ClusterKubectlHandlerRole94549F93' dependency already enforced by a 'GetAtt' at 'Properties.Parameters.referencetoStackClusterKubectlHandlerRoleD587D45BArn'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DynamicReferenceEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "awscdkawseksKubectlProviderNestedStackawscdkawseksKubectlProviderNestedStackResourceA7AEBA6B", + "logicalId": "DynamicReferenceEncryption", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1099, - "startColumn": 4, - "endLine": 1099, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 120, + "startColumn": 5, + "endLine": 120, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I1022", + "ruleId": "I9040", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Resource 'InvalidEncryptionValue' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ClusterKubectlHandlerRole94549F93", + "logicalId": "InvalidEncryptionValue", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ManagedPolicyArns.0.Fn::Join", - "category": "Intrinsic Function", - "startLine": 489, - "startColumn": 7, - "endLine": 489, - "endColumn": 16, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 126, + "startColumn": 5, + "endLine": 126, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I1022", + "ruleId": "I9040", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Resource 'DynamicEngineValue' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ClusterKubectlHandlerRole94549F93", + "logicalId": "DynamicEngineValue", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ManagedPolicyArns.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 501, - "startColumn": 7, - "endLine": 501, - "endColumn": 16, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 132, + "startColumn": 5, + "endLine": 132, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I1022", + "ruleId": "I9040", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Resource 'AuroraEngine' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ClusterKubectlHandlerRole94549F93", + "logicalId": "AuroraEngine", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ManagedPolicyArns.2.Fn::Join", - "category": "Intrinsic Function", - "startLine": 513, - "startColumn": 7, - "endLine": 513, - "endColumn": 16, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 137, + "startColumn": 5, + "endLine": 137, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I1022", + "ruleId": "I9040", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Resource 'AuroraAllowedValues' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ClusterKubectlHandlerRole94549F93", + "logicalId": "AuroraAllowedValues", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ManagedPolicyArns.3.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 528, - "startColumn": 9, - "endLine": 528, - "endColumn": 18, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 142, + "startColumn": 5, + "endLine": 142, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I1022", + "ruleId": "I9040", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Resource 'ClusterMember' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ClusterNodegroupDefaultCapacityNodeGroupRole55953B04", + "logicalId": "ClusterMember", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ManagedPolicyArns.0.Fn::Join", - "category": "Intrinsic Function", - "startLine": 911, - "startColumn": 7, - "endLine": 911, - "endColumn": 16, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 147, + "startColumn": 5, + "endLine": 147, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I1022", + "ruleId": "I9040", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Resource 'SnapshotRestore' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ClusterNodegroupDefaultCapacityNodeGroupRole55953B04", + "logicalId": "SnapshotRestore", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ManagedPolicyArns.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 923, - "startColumn": 7, - "endLine": 923, - "endColumn": 16, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 153, + "startColumn": 5, + "endLine": 153, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I1022", + "ruleId": "I9040", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Resource 'EmptySnapshotIdentifier' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ClusterNodegroupDefaultCapacityNodeGroupRole55953B04", + "logicalId": "EmptySnapshotIdentifier", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ManagedPolicyArns.2.Fn::Join", - "category": "Intrinsic Function", - "startLine": 935, - "startColumn": 7, - "endLine": 935, - "endColumn": 16, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 159, + "startColumn": 5, + "endLine": 159, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I1022", + "ruleId": "I9040", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Resource 'ClusterSnapshotRestore' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ClusterAwsAuthmanifestFE51F8AE", + "logicalId": "ClusterSnapshotRestore", "entityType": "Resource", - "resourceType": "Custom::AWSCDK-EKS-KubernetesResource" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Manifest.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1001, - "startColumn": 6, - "endLine": 1001, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 165, + "startColumn": 5, + "endLine": 165, "endColumn": 15, - "ruleDescription": "Use Sub instead of Join", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I1022", + "ruleId": "I9040", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Resource 'EncryptedSource' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "awscdkawseksClusterResourceProviderNestedStackawscdkawseksClusterResourceProviderNestedStackResource9827C454", + "logicalId": "EncryptedSource", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.TemplateURL.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1037, - "startColumn": 6, - "endLine": 1037, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 171, + "startColumn": 5, + "endLine": 171, "endColumn": 15, - "ruleDescription": "Use Sub instead of Join", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I1022", + "ruleId": "I9040", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Resource 'SourceInstanceReplica' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "awscdkawseksKubectlProviderNestedStackawscdkawseksKubectlProviderNestedStackResourceA7AEBA6B", + "logicalId": "SourceInstanceReplica", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.TemplateURL.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1083, - "startColumn": 6, - "endLine": 1083, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 177, + "startColumn": 5, + "endLine": 177, "endColumn": 15, - "ruleDescription": "Use Sub instead of Join", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'SourceResourceRestore' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UserVpcFAC913E5", + "logicalId": "SourceResourceRestore", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, + "startLine": 183, "startColumn": 5, - "endLine": 6, + "endLine": 183, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'AutomatedBackupRestore' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UserVpcFAC913E5", + "logicalId": "AutomatedBackupRestore", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, + "startLine": 189, "startColumn": 5, - "endLine": 9, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 189, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Resource 'SourceClusterReplica' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPublicSubnet1Subnet7A3A7B5D", + "logicalId": "SourceClusterReplica", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 21, + "startLine": 195, "startColumn": 5, - "endLine": 21, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 195, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'CustomImplicitEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPublicSubnet1Subnet7A3A7B5D", + "logicalId": "CustomImplicitEncryption", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 29, + "startLine": 201, "startColumn": 5, - "endLine": 29, + "endLine": 201, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'CustomTrueEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPublicSubnet1Subnet7A3A7B5D", + "logicalId": "CustomTrueEncryption", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 49, + "startLine": 206, "startColumn": 5, - "endLine": 49, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserVpcFAC913E5'" - } + "endLine": 206, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'LegacySecurityGroups' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPublicSubnet1RouteTable5F0A6273", + "logicalId": "LegacySecurityGroups", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 67, + "startLine": 212, "startColumn": 5, - "endLine": 67, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserVpcFAC913E5'" - } + "endLine": 212, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'CorrelatedClusterOrEncryptedStandalone' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPublicSubnet1RouteTableAssociation2AB88B08", + "logicalId": "CorrelatedClusterOrEncryptedStandalone", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 75, + "startLine": 218, "startColumn": 5, - "endLine": 75, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserVpcPublicSubnet1RouteTable5F0A6273'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "endLine": 218, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'ConditionalSnapshotOrEncryptedStandalone' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPublicSubnet1RouteTableAssociation2AB88B08", + "logicalId": "ConditionalSnapshotOrEncryptedStandalone", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 78, + "startLine": 225, "startColumn": 5, - "endLine": 78, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserVpcPublicSubnet1Subnet7A3A7B5D'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "endLine": 225, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'WholePropertiesCorrelated' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPublicSubnet1DefaultRoute321532E0", + "logicalId": "WholePropertiesCorrelated", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 86, + "startLine": 232, "startColumn": 5, - "endLine": 86, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 232, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'WholePropertiesFalseEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPublicSubnet1DefaultRoute321532E0", + "logicalId": "WholePropertiesFalseEncryption", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 90, + "startLine": 241, "startColumn": 5, - "endLine": 90, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserVpcPublicSubnet1RouteTable5F0A6273'" - } + "endLine": 241, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Resource 'DynamicProperties' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPublicSubnet1NATGateway7AFB18E6", + "logicalId": "DynamicProperties", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 117, + "startLine": 250, "startColumn": 5, - "endLine": 117, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt UserVpcPublicSubnet1EIP84E63864.AllocationId" - } + "endLine": 250, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-246.yaml": { + "filePath": "gh-issues/issue-246.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPublicSubnet1NATGateway7AFB18E6", + "logicalId": "HttpsAlias", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "startLine": 123, - "startColumn": 5, - "endLine": 123, - "endColumn": 14, + "startLine": 20, + "startColumn": 7, + "endLine": 20, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserVpcPublicSubnet1Subnet7A3A7B5D'" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Resource 'Distribution' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPublicSubnet2Subnet42A6D42E", + "logicalId": "Distribution", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 145, + "startLine": 5, "startColumn": 5, - "endLine": 145, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-247.json": { + "filePath": "gh-issues/issue-247.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPublicSubnet2Subnet42A6D42E", + "logicalId": "ALB", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 153, - "startColumn": 5, - "endLine": 153, - "endColumn": 15, + "startLine": 6, + "startColumn": 9, + "endLine": 6, + "endColumn": 14, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -11497,123 +11443,130 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'ALB' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPublicSubnet2Subnet42A6D42E", + "logicalId": "ALB", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 173, - "startColumn": 5, - "endLine": 173, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserVpcFAC913E5'" - } + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-264.yaml": { + "filePath": "gh-issues/issue-264.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 9, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 9, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPublicSubnet2RouteTableEC6A2C2A", + "logicalId": "AGetAtt", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "startLine": 191, - "startColumn": 5, - "endLine": 191, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserVpcFAC913E5'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPublicSubnet2RouteTableAssociationF7485C52", + "logicalId": "AResourceRef", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "startLine": 199, - "startColumn": 5, - "endLine": 199, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserVpcPublicSubnet2RouteTableEC6A2C2A'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPublicSubnet2RouteTableAssociationF7485C52", + "logicalId": "AaaaGetAtt", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "startLine": 202, - "startColumn": 5, - "endLine": 202, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 30, + "startColumn": 7, + "endLine": 30, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserVpcPublicSubnet2Subnet42A6D42E'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPublicSubnet2DefaultRouteE14C718B", + "logicalId": "TxtGetAtt", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "startLine": 210, - "startColumn": 5, - "endLine": 210, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "startLine": 39, + "startColumn": 7, + "endLine": 39, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -11623,89 +11576,88 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPublicSubnet2DefaultRouteE14C718B", + "logicalId": "MxGetAtt", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "startLine": 214, - "startColumn": 5, - "endLine": 214, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "startLine": 48, + "startColumn": 7, + "endLine": 48, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserVpcPublicSubnet2RouteTableEC6A2C2A'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPublicSubnet2NATGateway5AD59565", + "logicalId": "CaaGetAtt", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "startLine": 241, - "startColumn": 5, - "endLine": 241, - "endColumn": 18, + "startLine": 57, + "startColumn": 7, + "endLine": 57, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt UserVpcPublicSubnet2EIPE859723C.AllocationId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPublicSubnet2NATGateway5AD59565", + "logicalId": "DynamicParameter", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "startLine": 247, - "startColumn": 5, - "endLine": 247, - "endColumn": 14, + "startLine": 66, + "startColumn": 7, + "endLine": 66, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserVpcPublicSubnet2Subnet42A6D42E'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPrivateSubnet1Subnet0B127D2C", + "logicalId": "Group", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "startLine": 269, - "startColumn": 5, - "endLine": 269, - "endColumn": 22, + "startLine": 75, + "startColumn": 7, + "endLine": 75, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -11713,145 +11665,219 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'EIP' of type 'AWS::EC2::EIP' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPrivateSubnet1Subnet0B127D2C", + "logicalId": "EIP", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::EIP" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 277, + "startLine": 8, "startColumn": 5, - "endLine": 277, + "endLine": 8, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-278.yaml": { + "filePath": "gh-issues/issue-278.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Function' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPrivateSubnet1Subnet0B127D2C", + "logicalId": "Function", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 297, + "startLine": 5, "startColumn": 5, - "endLine": 297, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserVpcFAC913E5'" - } + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-339.yaml": { + "filePath": "gh-issues/issue-339.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "gh-issues/issue-34-w2506-overfire.json": { + "filePath": "gh-issues/issue-34-w2506-overfire.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPrivateSubnet1RouteTable886260DA", + "logicalId": "NotAnImageSlot", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "Custom::Thing" }, - "propertyPath": "Properties.VpcId", + "category": "Security", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 20, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-34.json": { + "filePath": "gh-issues/issue-34.json", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 7, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2506", + "severity": "WARN", + "message": "Parameter 'SsmStringImageParam' is used as an ImageId but has Type 'AWS::SSM::Parameter::Value' - consider using 'AWS::EC2::Image::Id'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SsmStringImageParam", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/SsmStringImageParam", "category": "Best Practice", - "startLine": 315, + "startLine": 7, "startColumn": 5, - "endLine": 315, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserVpcFAC913E5'" - } + "endLine": 7, + "endColumn": 25, + "ruleDescription": "Check if ImageId Parameters have the correct type", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPrivateSubnet1RouteTableAssociation0C8C18D3", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 323, - "startColumn": 5, - "endLine": 323, - "endColumn": 18, + "startLine": 16, + "startColumn": 9, + "endLine": 16, + "endColumn": 17, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserVpcPrivateSubnet1RouteTable886260DA'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPrivateSubnet1RouteTableAssociation0C8C18D3", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 326, - "startColumn": 5, - "endLine": 326, - "endColumn": 14, + "startLine": 17, + "startColumn": 9, + "endLine": 17, + "endColumn": 22, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserVpcPrivateSubnet1Subnet0B127D2C'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPrivateSubnet1DefaultRouteB00E5F42", + "logicalId": "Instance2", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 334, - "startColumn": 5, - "endLine": 334, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "startLine": 23, + "startColumn": 9, + "endLine": 23, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -11861,263 +11887,310 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPrivateSubnet1DefaultRouteB00E5F42", + "logicalId": "Instance2", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 338, - "startColumn": 5, - "endLine": 338, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "startLine": 24, + "startColumn": 9, + "endLine": 24, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserVpcPrivateSubnet1RouteTable886260DA'" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9003", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", "source": "ENGINE", - "entity": { - "logicalId": "UserVpcPrivateSubnet2SubnetCD612986", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 346, - "startColumn": 5, - "endLine": 346, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPrivateSubnet2SubnetCD612986", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 354, - "startColumn": 5, - "endLine": 354, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 15, + "startColumn": 7, + "endLine": 15, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Instance2' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPrivateSubnet2SubnetCD612986", + "logicalId": "Instance2", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 374, - "startColumn": 5, - "endLine": 374, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserVpcFAC913E5'" - } + "startLine": 22, + "startColumn": 7, + "endLine": 22, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-35.yaml": { + "filePath": "gh-issues/issue-35.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'ScheduledRule' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPrivateSubnet2RouteTable1EDE83AC", + "logicalId": "ScheduledRule", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 392, + "startLine": 4, "startColumn": 5, - "endLine": 392, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserVpcFAC913E5'" - } + "endLine": 4, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-357.yaml": { + "filePath": "gh-issues/issue-357.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 0, + "informational": 3, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3019", + "severity": "ERROR", + "message": "Only one AWS::S3::BucketPolicy resource can target a given bucket; resources {'FirstBucketPolicy', 'SecondBucketPolicy'} all target bucket 'Ref(\"CfnBucket\")'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FirstBucketPolicy", + "entityType": "Resource", + "resourceType": "AWS::S3::BucketPolicy" + }, + "propertyPath": "Properties.Bucket", + "category": "Resource", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 13, + "ruleDescription": "Validate that all resources have unique primary identifiers", + "phase": "LINT" + }, + { + "ruleId": "E3019", + "severity": "ERROR", + "message": "Only one AWS::S3::BucketPolicy resource can target a given bucket; resources {'FirstBucketPolicy', 'SecondBucketPolicy'} all target bucket 'Ref(\"CfnBucket\")'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SecondBucketPolicy", + "entityType": "Resource", + "resourceType": "AWS::S3::BucketPolicy" + }, + "propertyPath": "Properties.Bucket", + "category": "Resource", + "startLine": 18, + "startColumn": 7, + "endLine": 18, + "endColumn": 13, + "ruleDescription": "Validate that all resources have unique primary identifiers", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPrivateSubnet2RouteTableAssociation1643AB72", + "logicalId": "FirstBucketPolicy", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 400, - "startColumn": 5, - "endLine": 400, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserVpcPrivateSubnet2RouteTable1EDE83AC'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "Ref to 'CfnBucket'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPrivateSubnet2RouteTableAssociation1643AB72", + "logicalId": "SecondBucketPolicy", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 403, - "startColumn": 5, - "endLine": 403, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 18, + "startColumn": 7, + "endLine": 18, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserVpcPrivateSubnet2SubnetCD612986'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "Ref to 'CfnBucket'" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'CfnBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPrivateSubnet2DefaultRoute99CA0CB9", + "logicalId": "CfnBucket", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.DestinationCidrBlock", - "category": "Best Practice", - "startLine": 411, - "startColumn": 5, - "endLine": 411, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-36.yaml": { + "filePath": "gh-issues/issue-36.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'ExecutionRoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", "source": "ENGINE", "entity": { - "logicalId": "UserVpcPrivateSubnet2DefaultRoute99CA0CB9", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.ExecutionRoleArn", "category": "Best Practice", - "startLine": 415, - "startColumn": 5, - "endLine": 415, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserVpcPrivateSubnet2RouteTable1EDE83AC'" - } + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 23, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "UserVpcVPCGWEFD8AF3B", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 437, - "startColumn": 5, - "endLine": 437, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserVpcFAC913E5'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "category": "Security", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 10, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Content' is create-only; updating it will cause resource replacement", + "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "KubectlLayer600207B5", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Content", + "propertyPath": "Properties.ExecutionRoleArn", "category": "Best Practice", - "startLine": 462, - "startColumn": 5, - "endLine": 462, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 23, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -12125,45 +12198,99 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "KubectlLayer600207B5", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Description", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 468, + "startLine": 10, "startColumn": 5, - "endLine": 468, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-37.yaml": { + "filePath": "gh-issues/issue-37.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 4, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W3010", + "severity": "WARN", + "message": "Avoid hardcoding availability zones 'us-east-1a'", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyAsg", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Properties.AvailabilityZones.0", + "category": "Best Practice", + "startLine": 15, + "startColumn": 11, + "endLine": 15, + "endColumn": 12, + "ruleDescription": "Availability zone properties should not be hardcoded", + "phase": "LINT" + }, + { + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyLaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "category": "Deprecation", + "startLine": 3, + "startColumn": 3, + "endLine": 3, "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LicenseInfo' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "KubectlLayer600207B5", + "logicalId": "MyLaunchConfig", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.LicenseInfo", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 469, - "startColumn": 5, - "endLine": 469, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -12173,19 +12300,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterControlPlaneSecurityGroupD274242C", + "logicalId": "MyLaunchConfig", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 596, - "startColumn": 5, - "endLine": 596, - "endColumn": 22, + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -12195,137 +12323,164 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterControlPlaneSecurityGroupD274242C", + "logicalId": "MyAsg", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.LaunchConfigurationName", "category": "Best Practice", - "startLine": 604, - "startColumn": 5, - "endLine": 604, - "endColumn": 11, + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 30, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserVpcFAC913E5'" + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'MyLaunchConfig'" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AmiType' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyAsg' of type 'AWS::AutoScaling::AutoScalingGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ClusterNodegroupDefaultCapacityDA0920A3", + "logicalId": "MyAsg", "entityType": "Resource", - "resourceType": "AWS::EKS::Nodegroup" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.AmiType", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 957, + "startLine": 10, "startColumn": 5, - "endLine": 957, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-38.json": { + "filePath": "gh-issues/issue-38.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterNodegroupDefaultCapacityDA0920A3", + "logicalId": "Memory", "entityType": "Resource", - "resourceType": "AWS::EKS::Nodegroup" + "resourceType": "AWS::BedrockAgentCore::Memory" }, - "propertyPath": "Properties.ClusterName", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 958, - "startColumn": 5, - "endLine": 958, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 6, + "startColumn": 9, + "endLine": 6, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Cluster9EE0221C'" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'InstanceTypes' is create-only; updating it will cause resource replacement", + "message": "Resource 'Memory' of type 'AWS::BedrockAgentCore::Memory' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ClusterNodegroupDefaultCapacityDA0920A3", + "logicalId": "Memory", "entityType": "Resource", - "resourceType": "AWS::EKS::Nodegroup" + "resourceType": "AWS::BedrockAgentCore::Memory" }, - "propertyPath": "Properties.InstanceTypes", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 962, - "startColumn": 5, - "endLine": 962, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-39.json": { + "filePath": "gh-issues/issue-39.json", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 5, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NodeRole' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterNodegroupDefaultCapacityDA0920A3", + "logicalId": "VPCB9E5F0B4", "entityType": "Resource", - "resourceType": "AWS::EKS::Nodegroup" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.NodeRole", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 965, - "startColumn": 5, - "endLine": 965, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 6, + "startColumn": 9, + "endLine": 6, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ClusterNodegroupDefaultCapacityNodeGroupRole55953B04.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Subnets' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterNodegroupDefaultCapacityDA0920A3", + "logicalId": "VPCEcrEndpointSecurityGroup50ED8BA4", "entityType": "Resource", - "resourceType": "AWS::EKS::Nodegroup" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Subnets", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 976, - "startColumn": 5, - "endLine": 976, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 12, + "startColumn": 9, + "endLine": 12, + "endColumn": 26, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -12333,141 +12488,341 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'UserRoleB7C3739B' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UserRoleB7C3739B", + "logicalId": "VPCEcrEndpointSecurityGroup50ED8BA4", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 444, - "startColumn": 4, - "endLine": 444, + "startLine": 34, + "startColumn": 9, + "endLine": 34, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ClusterKubectlHandlerRole94549F93' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'VPCB9E5F0B4' of type 'AWS::EC2::VPC' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ClusterKubectlHandlerRole94549F93", + "logicalId": "VPCB9E5F0B4", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 474, - "startColumn": 4, - "endLine": 474, - "endColumn": 15, + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ClusterControlPlaneSecurityGroupD274242C' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'VPCEcrEndpointSecurityGroup50ED8BA4' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ClusterControlPlaneSecurityGroupD274242C", + "logicalId": "VPCEcrEndpointSecurityGroup50ED8BA4", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 595, - "startColumn": 4, - "endLine": 595, - "endColumn": 15, + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "gh-issues/issue-40.yaml": { + "filePath": "gh-issues/issue-40.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 4, + "informational": 10, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ClusterCreationRole360249B6' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E1150", + "severity": "ERROR", + "message": "'sg-1' does not match format 'AWS::EC2::SecurityGroup.Id'", + "source": "CFN_LINT", "entity": { - "logicalId": "ClusterCreationRole360249B6", + "logicalId": "DaxConcrete", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::DAX::Cluster" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 616, - "startColumn": 4, - "endLine": 616, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.SecurityGroupIds.0", + "category": "Intrinsic Function", + "startLine": 20, + "startColumn": 11, + "endLine": 20, + "endColumn": 12, + "ruleDescription": "Validate security group format", + "phase": "SCHEMA", + "context": { + "actualValue": "sg-1" + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ClusterKubectlReadyBarrier200052AF' of type 'AWS::SSM::Parameter' supports Tags but none are configured", + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", "source": "ENGINE", "entity": { - "logicalId": "ClusterKubectlReadyBarrier200052AF", + "logicalId": "EksCluster", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::EKS::Cluster" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RoleArn", "category": "Best Practice", - "startLine": 882, - "startColumn": 4, - "endLine": 882, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 14, + "ruleDescription": "Hardcoded ARN property", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "EksCluster", + "entityType": "Resource", + "resourceType": "AWS::EKS::Cluster" + }, + "category": "Security", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "DaxConcrete", + "entityType": "Resource", + "resourceType": "AWS::DAX::Cluster" + }, + "category": "Security", + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 14, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "DaxRef", + "entityType": "Resource", + "resourceType": "AWS::DAX::Cluster" + }, + "category": "Security", + "startLine": 25, + "startColumn": 3, + "endLine": 25, + "endColumn": 9, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" + }, + { + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ClusterNodegroupDefaultCapacityNodeGroupRole55953B04' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterNodegroupDefaultCapacityNodeGroupRole55953B04", + "logicalId": "EksCluster", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EKS::Cluster" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 896, - "startColumn": 4, - "endLine": 896, + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-eks.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RoleArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "EksCluster", + "entityType": "Resource", + "resourceType": "AWS::EKS::Cluster" + }, + "propertyPath": "Properties.RoleArn", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-eks.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'IAMRoleARN' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "DaxConcrete", + "entityType": "Resource", + "resourceType": "AWS::DAX::Cluster" + }, + "propertyPath": "Properties.IAMRoleARN", + "category": "Best Practice", + "startLine": 16, + "startColumn": 7, + "endLine": 16, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NodeType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "DaxConcrete", + "entityType": "Resource", + "resourceType": "AWS::DAX::Cluster" + }, + "propertyPath": "Properties.NodeType", + "category": "Best Practice", + "startLine": 17, + "startColumn": 7, + "endLine": 17, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'IAMRoleARN' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "DaxRef", + "entityType": "Resource", + "resourceType": "AWS::DAX::Cluster" + }, + "propertyPath": "Properties.IAMRoleARN", + "category": "Best Practice", + "startLine": 28, + "startColumn": 7, + "endLine": 28, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NodeType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "DaxRef", + "entityType": "Resource", + "resourceType": "AWS::DAX::Cluster" + }, + "propertyPath": "Properties.NodeType", + "category": "Best Practice", + "startLine": 29, + "startColumn": 7, + "endLine": 29, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ClusterNodegroupDefaultCapacityDA0920A3' of type 'AWS::EKS::Nodegroup' supports Tags but none are configured", + "message": "Resource 'EksCluster' of type 'AWS::EKS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ClusterNodegroupDefaultCapacityDA0920A3", + "logicalId": "EksCluster", "entityType": "Resource", - "resourceType": "AWS::EKS::Nodegroup" + "resourceType": "AWS::EKS::Cluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 956, - "startColumn": 4, - "endLine": 956, + "startLine": 4, + "startColumn": 5, + "endLine": 4, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -12475,19 +12830,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'awscdkawseksClusterResourceProviderNestedStackawscdkawseksClusterResourceProviderNestedStackResource9827C454' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Resource 'DaxConcrete' of type 'AWS::DAX::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "awscdkawseksClusterResourceProviderNestedStackawscdkawseksClusterResourceProviderNestedStackResource9827C454", + "logicalId": "DaxConcrete", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::DAX::Cluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1035, - "startColumn": 4, - "endLine": 1035, + "startLine": 15, + "startColumn": 5, + "endLine": 15, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -12495,35 +12850,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'awscdkawseksKubectlProviderNestedStackawscdkawseksKubectlProviderNestedStackResourceA7AEBA6B' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Resource 'DaxRef' of type 'AWS::DAX::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "awscdkawseksKubectlProviderNestedStackawscdkawseksKubectlProviderNestedStackResourceA7AEBA6B", + "logicalId": "DaxRef", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::DAX::Cluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1058, - "startColumn": 4, - "endLine": 1058, + "startLine": 27, + "startColumn": 5, + "endLine": 27, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "gh-issues/issue-54-bare.json": { - "filePath": "gh-issues/issue-54-bare.json", + "gh-issues/issue-41.json": { + "filePath": "gh-issues/issue-41.json", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 1, + "warnings": 1, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -12532,158 +12887,78 @@ }, "diagnostics": [ { - "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": 3, - "startColumn": 5, - "endLine": 3, - "endColumn": 12, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "gh-issues/issue-54-with-ownership.json": { - "filePath": "gh-issues/issue-54-with-ownership.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 1, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W3045", + "ruleId": "W2531", "severity": "WARN", - "message": "AccessControl property is deprecated. Use bucket policies instead", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "Bucket", + "logicalId": "MyFunction", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AccessControl", - "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", + "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 6, + "startLine": 7, "startColumn": 9, - "endLine": 6, - "endColumn": 23, - "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", - "phase": "LINT", + "endLine": 7, + "endColumn": 17, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", "context": { - "actualValue": "PublicRead" + "actualValue": "nodejs20.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9040", + "ruleId": "I1022", "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": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "gh-issues/issue-54.json": { - "filePath": "gh-issues/issue-54.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 1, - "informational": 1, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3045", - "severity": "ERROR", - "message": "A bucket with 'AccessControl' set should also have at least one 'OwnershipControl' configured", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "Bucket", + "logicalId": "MyFunction", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties", - "suggestedFix": "Add OwnershipControls to the bucket when using AccessControl", - "category": "Resource", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Validate AccessControl are set with OwnershipControls", + "propertyPath": "Properties.Role.Fn::Join", + "category": "Intrinsic Function", + "startLine": 11, + "startColumn": 11, + "endLine": 11, + "endColumn": 20, + "ruleDescription": "Use Sub instead of Join", "phase": "LINT" }, { - "ruleId": "W3045", - "severity": "WARN", - "message": "AccessControl property is deprecated. Use bucket policies instead", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "MyFunction", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AccessControl", - "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", - "category": "Deprecation", + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", "startLine": 6, "startColumn": 9, "endLine": 6, - "endColumn": 23, - "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", - "phase": "LINT", + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { - "actualValue": "PublicRead" + "lifecycle": "create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'MyFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "MyFunction", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -12697,16 +12972,16 @@ } ] }, - "gh-issues/issue-55.json": { - "filePath": "gh-issues/issue-55.json", + "gh-issues/issue-42-if.yaml": { + "filePath": "gh-issues/issue-42-if.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 3, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 1, + "warnings": 1, + "informational": 9, "debug": 0 }, "suppressed": 0, @@ -12715,327 +12990,245 @@ }, "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3049", + "severity": "WARN", + "message": "Container 'web' uses dynamic host port 0, so each task registers on an ephemeral port, but TargetGroup 'TargetGroup' health-checks the fixed port '8080'. The health check will not follow the traffic port unless '8080' is separately served on every target. Use HealthCheckPort 'traffic-port' to health-check the port each target actually receives traffic on", + "source": "CFN_LINT", "entity": { - "logicalId": "Bucket", + "logicalId": "TargetGroup", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HealthCheckPort", "category": "Best Practice", - "startLine": 12, + "startLine": 31, "startColumn": 7, - "endLine": 12, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", + "endLine": 31, + "endColumn": 22, + "relatedResources": [ + { + "resource": { + "id": "Service", + "resourceType": "AWS::ECS::Service" + }, + "location": { + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 20 + }, + "message": "Dynamic host port defined here" + } + ], + "ruleDescription": "ELB target group health check uses a fixed port that will not follow an ECS dynamic host port", "phase": "LINT" - } - ] - }, - "gh-issues/issue-56.json": { - "filePath": "gh-issues/issue-56.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WeakConsumer", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.TopicName", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 6, - "startColumn": 9, - "endLine": 6, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "startLine": 18, + "startColumn": 7, + "endLine": 18, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack output: StackName=\"Stack1\", Region=\"us-east-1\", OutputName=\"PublishOutputFnGetAttMyResourceArn8F315E6B\")" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'WeakConsumer' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WeakConsumer", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 5, + "startLine": 19, "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "gh-issues/issue-57.json": { - "filePath": "gh-issues/issue-57.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 + "endLine": 19, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'AReallyAwesomeDistributionWithAMemorableNameThatIWillNeverForget046C0FA9' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AReallyAwesomeDistributionWithAMemorableNameThatIWillNeverForget046C0FA9", + "logicalId": "TargetGroup", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 5, + "startLine": 28, "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "gh-issues/issue-61.json": { - "filePath": "gh-issues/issue-61.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 + "endLine": 28, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3017", - "severity": "FATAL", - "message": "Value is not valid under any of the 5 anyOf schemas for AWS::EC2::Volume (0 branches matched; at least one is required). Required property combinations: ['AvailabilityZone', 'Size'] or ['AvailabilityZone', 'SnapshotId'] or ['AvailabilityZoneId', 'Size'] or ['AvailabilityZoneId', 'SnapshotId'] or ['SourceVolumeId']. Branch failures: branch 1: 'AvailabilityZone' is a required property, 'Size' is a required property; branch 2: 'AvailabilityZone' is a required property, 'SnapshotId' is a required property; branch 3: 'AvailabilityZoneId' is a required property, 'Size' is a required property; branch 4: 'AvailabilityZoneId' is a required property, 'SnapshotId' is a required property; branch 5: 'SourceVolumeId' is a required property.", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Resource", + "logicalId": "TargetGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Volume" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties", - "category": "Schema", - "startLine": 3, - "startColumn": 5, - "endLine": 3, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Value not valid under anyOf", + "propertyPath": "Properties.Protocol", + "category": "Best Practice", + "startLine": 29, + "startColumn": 7, + "endLine": 29, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "expectedConstraint": "at least one anyOf branch", - "extra": { - "branchCount": 5, - "branchFailures": [ - { - "branch": 1, - "reasons": [ - { - "message": "'AvailabilityZone' is a required property", - "propertyPath": "Properties" - }, - { - "message": "'Size' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 2, - "reasons": [ - { - "message": "'AvailabilityZone' is a required property", - "propertyPath": "Properties" - }, - { - "message": "'SnapshotId' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 3, - "reasons": [ - { - "message": "'AvailabilityZoneId' is a required property", - "propertyPath": "Properties" - }, - { - "message": "'Size' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 4, - "reasons": [ - { - "message": "'AvailabilityZoneId' is a required property", - "propertyPath": "Properties" - }, - { - "message": "'SnapshotId' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 5, - "reasons": [ - { - "message": "'SourceVolumeId' is a required property", - "propertyPath": "Properties" - } - ] - } - ], - "compositionKind": "anyOf", - "matchCount": 0, - "matchOutcome": "zeroMatches", - "validPropertyCombinations": [ - [ - "AvailabilityZone", - "Size" - ], - [ - "AvailabilityZone", - "SnapshotId" - ], - [ - "AvailabilityZoneId", - "Size" - ], - [ - "AvailabilityZoneId", - "SnapshotId" - ], - [ - "SourceVolumeId" - ] - ] - } + "lifecycle": "create-only" } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Resource", + "logicalId": "TargetGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Volume" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 3, - "startColumn": 5, - "endLine": 3, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 30, + "startColumn": 7, + "endLine": 30, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Resource", + "logicalId": "Service", "entityType": "Resource", - "resourceType": "AWS::EC2::Volume" + "resourceType": "AWS::ECS::Service" }, + "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 3, - "startColumn": 5, - "endLine": 3, + "startLine": 35, + "startColumn": 7, + "endLine": 35, "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource' of type 'AWS::EC2::Volume' supports Tags but none are configured", + "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::EC2::Volume" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 3, + "startLine": 17, "startColumn": 5, - "endLine": 3, - "endColumn": 14, + "endLine": 17, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TargetGroup' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "TargetGroup", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 27, + "startColumn": 5, + "endLine": 27, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Service' of type 'AWS::ECS::Service' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Service", + "entityType": "Resource", + "resourceType": "AWS::ECS::Service" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 34, + "startColumn": 5, + "endLine": 34, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] }, - "gh-issues/issue-62.json": { - "filePath": "gh-issues/issue-62.json", + "gh-issues/issue-42-ref.yaml": { + "filePath": "gh-issues/issue-42-ref.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 3, "counts": { - "fatal": 1, + "fatal": 0, "errors": 0, - "warnings": 2, - "informational": 3, + "warnings": 0, + "informational": 9, "debug": 0 }, "suppressed": 0, @@ -13044,105 +13237,111 @@ }, "diagnostics": [ { - "ruleId": "F3032", - "severity": "FATAL", - "message": "expected minimum item count: 1, found: 0", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Canary", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::Synthetics::Canary" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ResourcesToReplicateTags", - "category": "Schema", - "startLine": 18, - "startColumn": 9, - "endLine": 18, - "endColumn": 34, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-synthetics", - "ruleDescription": "Array item count out of bounds", + "propertyPath": "Properties.Family", + "category": "Best Practice", + "startLine": 13, + "startColumn": 7, + "endLine": 13, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "extra": { - "actual_count": 0, - "max_items": 1, - "min_items": 1 - } + "lifecycle": "create-only" } }, { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'ExecutionRoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Canary", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::Synthetics::Canary" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ExecutionRoleArn", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 8, - "startColumn": 9, - "endLine": 8, - "endColumn": 26, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Canary", + "logicalId": "TargetGroup", "entityType": "Resource", - "resourceType": "AWS::Synthetics::Canary" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "category": "Security", - "startLine": 3, - "startColumn": 5, - "endLine": 3, - "endColumn": 12, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "propertyPath": "Properties.Port", + "category": "Best Practice", + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'SuccessRetentionPeriod' 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", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Canary", + "logicalId": "TargetGroup", "entityType": "Resource", - "resourceType": "AWS::Synthetics::Canary" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 5, + "startLine": 24, "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "endLine": 24, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Canary", + "logicalId": "TargetGroup", "entityType": "Resource", - "resourceType": "AWS::Synthetics::Canary" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 6, - "startColumn": 9, - "endLine": 6, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-synthetics", + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13150,94 +13349,99 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Canary' of type 'AWS::Synthetics::Canary' supports Tags but none are configured", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Canary", + "logicalId": "Service", "entityType": "Resource", - "resourceType": "AWS::Synthetics::Canary" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "gh-issues/issue-63.json": { - "filePath": "gh-issues/issue-63.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 1, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'SomeParameter': Default must be a string", - "source": "CFN_LINT", - "entity": { - "logicalId": "SomeParameter", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/SomeParameter/Default", - "category": "Parameter", - "startLine": 5, + "startLine": 30, "startColumn": 7, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" + "endLine": 30, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Topic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Topic", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 29, - "startColumn": 7, - "endLine": 29, - "endColumn": 18, + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TargetGroup' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "TargetGroup", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 22, + "startColumn": 5, + "endLine": 22, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Service' of type 'AWS::ECS::Service' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Service", + "entityType": "Resource", + "resourceType": "AWS::ECS::Service" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "gh-issues/issue-65.json": { - "filePath": "gh-issues/issue-65.json", + "gh-issues/issue-42.yaml": { + "filePath": "gh-issues/issue-42.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 3, "counts": { "fatal": 0, "errors": 0, - "warnings": 2, - "informational": 6, + "warnings": 0, + "informational": 10, "debug": 0 }, "suppressed": 0, @@ -13246,62 +13450,79 @@ }, "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "ruleId": "I3049", + "severity": "INFO", + "message": "Container 'web' uses dynamic host port 0; TargetGroup 'TargetGroup' omits HealthCheckPort, which defaults to 'traffic-port', so the health check follows each task's ephemeral port - the correct behavior for dynamic port mapping", "source": "CFN_LINT", "entity": { - "logicalId": "MyLambda", + "logicalId": "TargetGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 7, - "startColumn": 9, - "endLine": 7, - "endColumn": 17, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" - } + "propertyPath": "Properties.HealthCheckPort", + "category": "Best Practice", + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 15, + "relatedResources": [ + { + "resource": { + "id": "Service", + "resourceType": "AWS::ECS::Service" + }, + "location": { + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 20 + }, + "message": "Dynamic host port defined here" + } + ], + "ruleDescription": "ELB target group relies on the default traffic-port health check for an ECS dynamic host port", + "phase": "LINT" }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyLambda", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "category": "Security", - "startLine": 3, - "startColumn": 5, - "endLine": 3, - "endColumn": 14, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "propertyPath": "Properties.Family", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyLambda", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 6, - "startColumn": 9, - "endLine": 6, - "endColumn": 22, + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13311,19 +13532,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "S3Permission", + "logicalId": "TargetGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 18, - "startColumn": 9, - "endLine": 18, - "endColumn": 16, + "startLine": 16, + "startColumn": 7, + "endLine": 16, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13333,42 +13554,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "S3Permission", + "logicalId": "TargetGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 19, - "startColumn": 9, - "endLine": 19, - "endColumn": 22, + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyLambda'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "S3Permission", + "logicalId": "TargetGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 20, - "startColumn": 9, - "endLine": 20, - "endColumn": 19, + "startLine": 18, + "startColumn": 7, + "endLine": 18, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13378,19 +13598,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceAccount' is create-only; updating it will cause resource replacement", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "S3Permission", + "logicalId": "Service", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.SourceAccount", + "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 21, - "startColumn": 9, - "endLine": 21, - "endColumn": 23, + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13400,74 +13620,111 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyLambda", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 5, - "startColumn": 7, + "startColumn": 5, "endLine": 5, - "endColumn": 18, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "gh-issues/issue-67.json": { - "filePath": "gh-issues/issue-67.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "message": "Resource 'TargetGroup' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "PromAlarm", + "logicalId": "TargetGroup", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.AlarmName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, - "startColumn": 9, - "endLine": 6, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'PromAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Resource 'Service' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "PromAlarm", + "logicalId": "Service", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::ECS::Service" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 22, + "startColumn": 5, + "endLine": 22, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-44.json": { + "filePath": "gh-issues/issue-44.json", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3014", + "severity": "FATAL", + "message": "Exactly one of ['ArtifactStore', 'ArtifactStores'] must be specified", + "source": "SCHEMA", + "entity": { + "logicalId": "Pipeline", + "entityType": "Resource", + "resourceType": "AWS::CodePipeline::Pipeline" + }, + "propertyPath": "Properties", + "category": "Schema", + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", + "ruleDescription": "Exactly one of properties required (requiredXor)", + "phase": "SCHEMA" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Pipeline' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Pipeline", + "entityType": "Resource", + "resourceType": "AWS::CodePipeline::Pipeline" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -13478,18 +13735,38 @@ "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'PipelineRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "PipelineRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 49, + "startColumn": 7, + "endLine": 49, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "gh-issues/issue-68.json": { - "filePath": "gh-issues/issue-68.json", + "gh-issues/issue-45.json": { + "filePath": "gh-issues/issue-45.json", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 1, - "warnings": 4, + "errors": 0, + "warnings": 0, "informational": 4, "debug": 0 }, @@ -13499,192 +13776,144 @@ }, "diagnostics": [ { - "ruleId": "E3677", - "severity": "ERROR", - "message": "Runtime 'node99.x' is not supported with Code.ZipFile - use nodejs or python", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcEndpointType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FutureNodeFunc", + "logicalId": "interfaceVpcEndpoint89C99945", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::VPCEndpoint" }, - "category": "Resource", - "startLine": 16, - "startColumn": 5, - "endLine": 16, - "endColumn": 20, - "ruleDescription": "Lambda ZipFile requires nodejs or python runtime", - "phase": "LINT" + "propertyPath": "Properties.VpcEndpointType", + "category": "Best Practice", + "startLine": 6, + "startColumn": 9, + "endLine": 6, + "endColumn": 25, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3030", - "severity": "WARN", - "message": "'nodejs99.x' is not one of ['dotnet10', 'dotnet6', 'dotnet8', 'dotnetcore1.0', 'dotnetcore2.0', 'dotnetcore2.1', 'dotnetcore3.1', 'go1.x', 'java11', 'java11.al2023', 'java17', 'java17.al2023', 'java21', 'java25', 'java8', 'java8.al2', 'java8.al2023', 'nodejs', 'nodejs10.x', 'nodejs12.x', 'nodejs14.x', 'nodejs16.x', 'nodejs18.x', 'nodejs20.x', 'nodejs22.x', 'nodejs24.x', 'nodejs26.x', 'nodejs4.3', 'nodejs4.3-edge', 'nodejs6.10', 'nodejs8.10', 'provided', 'provided.al2', 'provided.al2023', 'python2.7', 'python3.10', 'python3.11', 'python3.12', 'python3.13', 'python3.14', 'python3.15', 'python3.6', 'python3.7', 'python3.8', 'python3.9', 'ruby2.5', 'ruby2.7', 'ruby3.2', 'ruby3.3', 'ruby3.4', 'ruby4.0']", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ServiceName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyFunc", + "logicalId": "interfaceVpcEndpoint89C99945", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::VPCEndpoint" }, - "propertyPath": "Properties.Runtime", - "category": "Schema", - "startLine": 10, + "propertyPath": "Properties.ServiceName", + "category": "Best Practice", + "startLine": 7, "startColumn": 9, - "endLine": 10, - "endColumn": 17, - "ruleDescription": "Value not in allowed enum", + "endLine": 7, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs99.x", - "extra": { - "allowed_values": [ - "dotnet10", - "dotnet6", - "dotnet8", - "dotnetcore1.0", - "dotnetcore2.0", - "dotnetcore2.1", - "dotnetcore3.1", - "go1.x", - "java11", - "java11.al2023", - "java17", - "java17.al2023", - "java21", - "java25", - "java8", - "java8.al2", - "java8.al2023", - "nodejs", - "nodejs10.x", - "nodejs12.x", - "nodejs14.x", - "nodejs16.x", - "nodejs18.x", - "nodejs20.x", - "nodejs22.x", - "nodejs24.x", - "nodejs26.x", - "nodejs4.3", - "nodejs4.3-edge", - "nodejs6.10", - "nodejs8.10", - "provided", - "provided.al2", - "provided.al2023", - "python2.7", - "python3.10", - "python3.11", - "python3.12", - "python3.13", - "python3.14", - "python3.15", - "python3.6", - "python3.7", - "python3.8", - "python3.9", - "ruby2.5", - "ruby2.7", - "ruby3.2", - "ruby3.3", - "ruby3.4", - "ruby4.0" - ] - } + "lifecycle": "create-only" } }, { - "ruleId": "W3030", - "severity": "WARN", - "message": "'node99.x' is not one of ['dotnet10', 'dotnet6', 'dotnet8', 'dotnetcore1.0', 'dotnetcore2.0', 'dotnetcore2.1', 'dotnetcore3.1', 'go1.x', 'java11', 'java11.al2023', 'java17', 'java17.al2023', 'java21', 'java25', 'java8', 'java8.al2', 'java8.al2023', 'nodejs', 'nodejs10.x', 'nodejs12.x', 'nodejs14.x', 'nodejs16.x', 'nodejs18.x', 'nodejs20.x', 'nodejs22.x', 'nodejs24.x', 'nodejs26.x', 'nodejs4.3', 'nodejs4.3-edge', 'nodejs6.10', 'nodejs8.10', 'provided', 'provided.al2', 'provided.al2023', 'python2.7', 'python3.10', 'python3.11', 'python3.12', 'python3.13', 'python3.14', 'python3.15', 'python3.6', 'python3.7', 'python3.8', 'python3.9', 'ruby2.5', 'ruby2.7', 'ruby3.2', 'ruby3.3', 'ruby3.4', 'ruby4.0']", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FutureNodeFunc", + "logicalId": "interfaceVpcEndpoint89C99945", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::VPCEndpoint" }, - "propertyPath": "Properties.Runtime", - "category": "Schema", - "startLine": 22, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 8, "startColumn": 9, - "endLine": 22, - "endColumn": 17, - "ruleDescription": "Value not in allowed enum", + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "node99.x", - "extra": { - "allowed_values": [ - "dotnet10", - "dotnet6", - "dotnet8", - "dotnetcore1.0", - "dotnetcore2.0", - "dotnetcore2.1", - "dotnetcore3.1", - "go1.x", - "java11", - "java11.al2023", - "java17", - "java17.al2023", - "java21", - "java25", - "java8", - "java8.al2", - "java8.al2023", - "nodejs", - "nodejs10.x", - "nodejs12.x", - "nodejs14.x", - "nodejs16.x", - "nodejs18.x", - "nodejs20.x", - "nodejs22.x", - "nodejs24.x", - "nodejs26.x", - "nodejs4.3", - "nodejs4.3-edge", - "nodejs6.10", - "nodejs8.10", - "provided", - "provided.al2", - "provided.al2023", - "python2.7", - "python3.10", - "python3.11", - "python3.12", - "python3.13", - "python3.14", - "python3.15", - "python3.6", - "python3.7", - "python3.8", - "python3.9", - "ruby2.5", - "ruby2.7", - "ruby3.2", - "ruby3.3", - "ruby3.4", - "ruby4.0" - ] - } + "lifecycle": "create-only" } }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'interfaceVpcEndpoint89C99945' of type 'AWS::EC2::VPCEndpoint' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "interfaceVpcEndpoint89C99945", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPCEndpoint" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-46.json": { + "filePath": "gh-issues/issue-46.json", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 3, + "informational": 3, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", + "entity": { + "logicalId": "ClusterEB0386A7", + "entityType": "Resource", + "resourceType": "AWS::EKS::Cluster" + }, + "propertyPath": "Properties.RoleArn", + "category": "Best Practice", + "startLine": 7, + "startColumn": 9, + "endLine": 7, + "endColumn": 17, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" + }, { "ruleId": "W9013", "severity": "WARN", "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "MyFunc", + "logicalId": "ClusterEB0386A7", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EKS::Cluster" }, "category": "Security", "startLine": 4, "startColumn": 5, "endLine": 4, - "endColumn": 12, + "endColumn": 21, "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, @@ -13694,56 +13923,35 @@ "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "FutureNodeFunc", + "logicalId": "ClusterKubectlProviderHandler2E05C68A", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "category": "Security", - "startLine": 16, + "startLine": 13, "startColumn": 5, - "endLine": 16, - "endColumn": 20, + "endLine": 13, + "endColumn": 43, "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'RoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyFunc", + "logicalId": "ClusterEB0386A7", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EKS::Cluster" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.RoleArn", "category": "Best Practice", "startLine": 7, "startColumn": 9, "endLine": 7, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FutureNodeFunc", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 19, - "startColumn": 9, - "endLine": 19, - "endColumn": 22, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-eks.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13753,12 +13961,12 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyFunc' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'ClusterEB0386A7' of type 'AWS::EKS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyFunc", + "logicalId": "ClusterEB0386A7", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EKS::Cluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -13773,35 +13981,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FutureNodeFunc' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'ClusterKubectlProviderHandler2E05C68A' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FutureNodeFunc", + "logicalId": "ClusterKubectlProviderHandler2E05C68A", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 18, + "startLine": 15, "startColumn": 7, - "endLine": 18, + "endLine": 15, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "gh-issues/issue-69.yaml": { - "filePath": "gh-issues/issue-69.yaml", + "gh-issues/issue-47.json": { + "filePath": "gh-issues/issue-47.json", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 2, - "errors": 0, - "warnings": 0, - "informational": 0, + "fatal": 0, + "errors": 1, + "warnings": 2, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -13810,604 +14018,560 @@ }, "diagnostics": [ { - "ruleId": "F3032", - "severity": "FATAL", - "message": "expected maximum item count: 1, found: 2", - "source": "SCHEMA", + "ruleId": "E3677", + "severity": "ERROR", + "message": "Runtime 'node99.x' is not supported with Code.ZipFile - use nodejs or python", + "source": "CFN_LINT", "entity": { - "logicalId": "Profile", + "logicalId": "MyFunction", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Roles", - "category": "Schema", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 12, - "ruleDescription": "Array item count out of bounds", - "phase": "SCHEMA", - "context": { - "extra": { - "actual_count": 2, - "max_items": 1, - "min_items": 0 - } - } + "category": "Resource", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 16, + "ruleDescription": "Lambda ZipFile requires nodejs or python runtime", + "phase": "LINT" }, { - "ruleId": "F3037", - "severity": "FATAL", - "message": "Array items are not unique", - "source": "SCHEMA", + "ruleId": "W3030", + "severity": "WARN", + "message": "'node99.x' is not one of ['dotnet10', 'dotnet6', 'dotnet8', 'dotnetcore1.0', 'dotnetcore2.0', 'dotnetcore2.1', 'dotnetcore3.1', 'go1.x', 'java11', 'java11.al2023', 'java17', 'java17.al2023', 'java21', 'java25', 'java8', 'java8.al2', 'java8.al2023', 'nodejs', 'nodejs10.x', 'nodejs12.x', 'nodejs14.x', 'nodejs16.x', 'nodejs18.x', 'nodejs20.x', 'nodejs22.x', 'nodejs24.x', 'nodejs26.x', 'nodejs4.3', 'nodejs4.3-edge', 'nodejs6.10', 'nodejs8.10', 'provided', 'provided.al2', 'provided.al2023', 'python2.7', 'python3.10', 'python3.11', 'python3.12', 'python3.13', 'python3.14', 'python3.15', 'python3.6', 'python3.7', 'python3.8', 'python3.9', 'ruby2.5', 'ruby2.7', 'ruby3.2', 'ruby3.3', 'ruby3.4', 'ruby4.0']", + "source": "CFN_LINT", "entity": { - "logicalId": "Profile", + "logicalId": "MyFunction", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Roles", + "propertyPath": "Properties.Runtime", "category": "Schema", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 12, - "ruleDescription": "Array items not unique", + "startLine": 9, + "startColumn": 9, + "endLine": 9, + "endColumn": 17, + "ruleDescription": "Value not in allowed enum", "phase": "SCHEMA", "context": { - "actualValue": [ - "arn:aws:iam::012345678901:role/SameRole", - "arn:aws:iam::012345678901:role/SameRole" - ] - } - } - ] - }, - "good/E3019_identity_no_false_positive.yaml": { - "filePath": "good/E3019_identity_no_false_positive.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 10, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BucketA", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 13, - "startColumn": 18, - "endLine": 13, - "endColumn": 28, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'NameA' (type String)" + "actualValue": "node99.x", + "extra": { + "allowed_values": [ + "dotnet10", + "dotnet6", + "dotnet8", + "dotnetcore1.0", + "dotnetcore2.0", + "dotnetcore2.1", + "dotnetcore3.1", + "go1.x", + "java11", + "java11.al2023", + "java17", + "java17.al2023", + "java21", + "java25", + "java8", + "java8.al2", + "java8.al2023", + "nodejs", + "nodejs10.x", + "nodejs12.x", + "nodejs14.x", + "nodejs16.x", + "nodejs18.x", + "nodejs20.x", + "nodejs22.x", + "nodejs24.x", + "nodejs26.x", + "nodejs4.3", + "nodejs4.3-edge", + "nodejs6.10", + "nodejs8.10", + "provided", + "provided.al2", + "provided.al2023", + "python2.7", + "python3.10", + "python3.11", + "python3.12", + "python3.13", + "python3.14", + "python3.15", + "python3.6", + "python3.7", + "python3.8", + "python3.9", + "ruby2.5", + "ruby2.7", + "ruby3.2", + "ruby3.3", + "ruby3.4", + "ruby4.0" + ] + } } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "BucketB", + "logicalId": "MyFunction", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 16, - "startColumn": 18, - "endLine": 16, - "endColumn": 28, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'NameB' (type String)" - } + "category": "Security", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 16, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CompoundSub", + "logicalId": "MyFunction", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 20, - "startColumn": 18, - "endLine": 20, - "endColumn": 28, + "startLine": 6, + "startColumn": 9, + "endLine": 6, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:${NameA}-suffix)" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConditionalLeft", + "logicalId": "MyFunction", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 25, - "startColumn": 18, - "endLine": 25, - "endColumn": 28, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-49.yaml": { + "filePath": "gh-issues/issue-49.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 1, + "informational": 11, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3620", + "severity": "ERROR", + "message": "'db.t2.small' is not valid in any region", + "source": "CFN_LINT", "entity": { - "logicalId": "ConditionalRight", + "logicalId": "DocDbInstance", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::DocDB::DBInstance" }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 29, - "startColumn": 18, - "endLine": 29, - "endColumn": 28, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.DBInstanceClass", + "category": "Resource", + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 22, + "ruleDescription": "Validate a DocDB DB Instance class", + "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BucketA' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3652", + "severity": "ERROR", + "message": "'t2.nano.elasticsearch' is not valid in any region", + "source": "CFN_LINT", "entity": { - "logicalId": "BucketA", + "logicalId": "EsDomain", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Elasticsearch::Domain" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 13, - "startColumn": 5, - "endLine": 13, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.ElasticsearchClusterConfig.InstanceType", + "category": "Resource", + "startLine": 6, + "startColumn": 9, + "endLine": 6, + "endColumn": 21, + "ruleDescription": "Validate Elasticsearch domain cluster instance", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BucketB' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", "source": "ENGINE", "entity": { - "logicalId": "BucketB", + "logicalId": "Ec2Instance", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", + "propertyPath": "Properties.ImageId", + "category": "Security", "startLine": 16, - "startColumn": 5, + "startColumn": 7, "endLine": 16, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'CompoundSub' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CompoundSub", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ConditionalLeft' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "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": "ConditionalLeft", + "logicalId": "EsDomain", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Elasticsearch::Domain" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'ConditionalRight' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "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": "ConditionalRight", + "logicalId": "EsDomain", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Elasticsearch::Domain" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 29, - "startColumn": 5, - "endLine": 29, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "good/E3022_multi_element_join_distinct.yaml": { - "filePath": "good/E3022_multi_element_join_distinct.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 6, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I1022", + "ruleId": "I3011", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "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": "MultiElementJoinA", + "logicalId": "DocDbInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::DocDB::DBInstance" }, - "propertyPath": "Properties.SubnetId.Fn::Join", - "category": "Intrinsic Function", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Use Sub instead of Join", + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 16, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I1022", + "ruleId": "I3011", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "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": "MultiElementJoinB", + "logicalId": "DocDbInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::DocDB::DBInstance" }, - "propertyPath": "Properties.SubnetId.Fn::Join", - "category": "Intrinsic Function", - "startLine": 15, - "startColumn": 7, - "endLine": 15, - "endColumn": 15, - "ruleDescription": "Use Sub instead of Join", + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 16, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MultiElementJoinA", + "logicalId": "DocDbInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::DocDB::DBInstance" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.DBClusterIdentifier", "category": "Best Practice", - "startLine": 9, + "startLine": 11, "startColumn": 7, - "endLine": 9, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 11, + "endColumn": 26, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MultiElementJoinA", + "logicalId": "Ec2Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 10, + "startLine": 16, "startColumn": 7, - "endLine": 10, - "endColumn": 15, + "endLine": 16, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:{dynamic}-a)", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MultiElementJoinB", + "logicalId": "Ec2Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 14, + "startLine": 17, "startColumn": 7, - "endLine": 14, + "endLine": 17, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9003", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", "source": "ENGINE", - "entity": { - "logicalId": "MultiElementJoinB", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 15, - "startColumn": 7, - "endLine": 15, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:{dynamic}-b)", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - } - ] - }, - "good/E3031_cognito_user_pool_domain_pattern.yaml": { - "filePath": "good/E3031_cognito_user_pool_domain_pattern.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 8, - "debug": 0 + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", + "message": "Resource 'EsDomain' of type 'AWS::Elasticsearch::Domain' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "HostedUiPrefix", + "logicalId": "EsDomain", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::Elasticsearch::Domain" }, - "propertyPath": "Properties.UserPoolId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 18, - "startColumn": 7, - "endLine": 18, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserPool'" - } + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Domain' is create-only; updating it will cause resource replacement", + "message": "Resource 'DocDbInstance' of type 'AWS::DocDB::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "HostedUiPrefix", + "logicalId": "DocDbInstance", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::DocDB::DBInstance" }, - "propertyPath": "Properties.Domain", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 19, - "startColumn": 7, - "endLine": 19, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Ec2Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SingleCharacterPrefix", + "logicalId": "Ec2Instance", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserPoolId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserPool'" - } + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-50.json": { + "filePath": "gh-issues/issue-50.json", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Domain' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyFunctionServiceRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SingleCharacterPrefix", + "logicalId": "MyFunctionServiceRole", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Domain", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 24, + "startLine": 8, "startColumn": 7, - "endLine": 24, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 8, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-52.json": { + "filePath": "gh-issues/issue-52.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 4, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "Nodegroup", + "entityType": "Resource", + "resourceType": "AWS::EKS::Nodegroup" + }, + "category": "Security", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 15, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", + "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CustomDomain", + "logicalId": "Nodegroup", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::EKS::Nodegroup" }, - "propertyPath": "Properties.UserPoolId", + "propertyPath": "Properties.ClusterName", "category": "Best Practice", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 17, + "startLine": 6, + "startColumn": 9, + "endLine": 6, + "endColumn": 21, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserPool'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Domain' is create-only; updating it will cause resource replacement", + "message": "Property 'NodeRole' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CustomDomain", + "logicalId": "Nodegroup", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::EKS::Nodegroup" }, - "propertyPath": "Properties.Domain", + "propertyPath": "Properties.NodeRole", "category": "Best Practice", - "startLine": 29, - "startColumn": 7, - "endLine": 29, - "endColumn": 13, + "startLine": 7, + "startColumn": 9, + "endLine": 7, + "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -14418,81 +14582,58 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", + "message": "Property 'Subnets' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionallyCustomDomain", + "logicalId": "Nodegroup", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::EKS::Nodegroup" }, - "propertyPath": "Properties.UserPoolId", + "propertyPath": "Properties.Subnets", "category": "Best Practice", - "startLine": 35, - "startColumn": 7, - "endLine": 35, + "startLine": 8, + "startColumn": 9, + "endLine": 8, "endColumn": 17, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserPool'" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Domain' is create-only; updating it will cause resource replacement", + "message": "Resource 'Nodegroup' of type 'AWS::EKS::Nodegroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConditionallyCustomDomain", + "logicalId": "Nodegroup", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::EKS::Nodegroup" }, - "propertyPath": "Properties.Domain", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 36, + "startLine": 5, "startColumn": 7, - "endLine": 36, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseCustomDomain'" - } + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "good/E3663_custom_environment_key.yaml": { - "filePath": "good/E3663_custom_environment_key.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "good/E3680_alb_subnet_counts.yaml": { - "filePath": "good/E3680_alb_subnet_counts.yaml", + "gh-issues/issue-53.json": { + "filePath": "gh-issues/issue-53.json", "status": "OK", "metadata": { - "resourcesScanned": 9, + "resourcesScanned": 37, "counts": { - "fatal": 0, + "fatal": 2, "errors": 0, - "warnings": 0, - "informational": 19, + "warnings": 6, + "informational": 68, "debug": 0 }, "suppressed": 0, @@ -14501,508 +14642,435 @@ }, "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource ClusterCreationRoleDefaultPolicyE8BDFC7B. Circular dependency with [ClusterCreationRoleDefaultPolicyE8BDFC7B -> ClusterKubectlReadyBarrier200052AF -> ClusterCreationRoleDefaultPolicyE8BDFC7B]", + "source": "SCHEMA", "entity": { - "logicalId": "Vpc", + "logicalId": "ClusterCreationRoleDefaultPolicyE8BDFC7B", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Resources/ClusterCreationRoleDefaultPolicyE8BDFC7B", + "category": "Reference", + "startLine": 688, + "startColumn": 3, + "endLine": 688, + "endColumn": 44, + "ruleDescription": "Circular dependency detected", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource ClusterKubectlReadyBarrier200052AF. Circular dependency with [ClusterKubectlReadyBarrier200052AF -> ClusterCreationRoleDefaultPolicyE8BDFC7B -> ClusterKubectlReadyBarrier200052AF]", + "source": "SCHEMA", "entity": { - "logicalId": "SubnetA", + "logicalId": "ClusterKubectlReadyBarrier200052AF", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SSM::Parameter" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Resources/ClusterKubectlReadyBarrier200052AF", + "category": "Reference", + "startLine": 880, + "startColumn": 3, + "endLine": 880, + "endColumn": 38, + "ruleDescription": "Circular dependency detected", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'ClusterCreationRole360249B6' dependency already enforced by a 'GetAtt' at 'Properties.AssumeRoleArn'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Cluster9EE0221C", + "entityType": "Resource", + "resourceType": "Custom::AWSCDK-EKS-Cluster" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 21, - "startColumn": 7, - "endLine": 21, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" - } + "startLine": 849, + "startColumn": 4, + "endLine": 849, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'UserVpcPrivateSubnet1Subnet0B127D2C' dependency already enforced by a 'Ref' at 'Properties.Config.resourcesVpcConfig.subnetIds.2'", + "source": "CFN_LINT", "entity": { - "logicalId": "SubnetA", + "logicalId": "Cluster9EE0221C", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "Custom::AWSCDK-EKS-Cluster" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 22, - "startColumn": 7, - "endLine": 22, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 849, + "startColumn": 4, + "endLine": 849, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'UserVpcPrivateSubnet2SubnetCD612986' dependency already enforced by a 'Ref' at 'Properties.Config.resourcesVpcConfig.subnetIds.3'", + "source": "CFN_LINT", "entity": { - "logicalId": "SubnetB", + "logicalId": "Cluster9EE0221C", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "Custom::AWSCDK-EKS-Cluster" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 26, - "startColumn": 7, - "endLine": 26, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" - } + "startLine": 849, + "startColumn": 4, + "endLine": 849, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'UserVpcPublicSubnet1Subnet7A3A7B5D' dependency already enforced by a 'Ref' at 'Properties.Config.resourcesVpcConfig.subnetIds.0'", + "source": "CFN_LINT", "entity": { - "logicalId": "SubnetB", + "logicalId": "Cluster9EE0221C", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "Custom::AWSCDK-EKS-Cluster" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 27, - "startColumn": 7, - "endLine": 27, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 849, + "startColumn": 4, + "endLine": 849, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'UserVpcPublicSubnet2Subnet42A6D42E' dependency already enforced by a 'Ref' at 'Properties.Config.resourcesVpcConfig.subnetIds.1'", + "source": "CFN_LINT", "entity": { - "logicalId": "AlbTwoSubnets", + "logicalId": "Cluster9EE0221C", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "Custom::AWSCDK-EKS-Cluster" }, - "propertyPath": "Properties.Type", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 31, - "startColumn": 7, - "endLine": 31, - "endColumn": 11, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 849, + "startColumn": 4, + "endLine": 849, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'ClusterKubectlHandlerRole94549F93' dependency already enforced by a 'GetAtt' at 'Properties.Parameters.referencetoStackClusterKubectlHandlerRoleD587D45BArn'", + "source": "CFN_LINT", "entity": { - "logicalId": "AlbSubnetsFromParameter", + "logicalId": "awscdkawseksKubectlProviderNestedStackawscdkawseksKubectlProviderNestedStackResourceA7AEBA6B", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.Type", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 44, - "startColumn": 7, - "endLine": 44, - "endColumn": 11, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 1099, + "startColumn": 4, + "endLine": 1099, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I1022", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", "entity": { - "logicalId": "NlbOneSubnet", + "logicalId": "ClusterKubectlHandlerRole94549F93", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Type", - "category": "Best Practice", - "startLine": 49, + "propertyPath": "Properties.ManagedPolicyArns.0.Fn::Join", + "category": "Intrinsic Function", + "startLine": 489, "startColumn": 7, - "endLine": 49, - "endColumn": 11, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 489, + "endColumn": 16, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I1022", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", "entity": { - "logicalId": "GatewayOneSubnet", + "logicalId": "ClusterKubectlHandlerRole94549F93", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Type", - "category": "Best Practice", - "startLine": 55, + "propertyPath": "Properties.ManagedPolicyArns.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 501, "startColumn": 7, - "endLine": 55, - "endColumn": 11, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 501, + "endColumn": 16, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I1022", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", "entity": { - "logicalId": "ParameterTypedOneSubnet", + "logicalId": "ClusterKubectlHandlerRole94549F93", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Type", - "category": "Best Practice", - "startLine": 61, + "propertyPath": "Properties.ManagedPolicyArns.2.Fn::Join", + "category": "Intrinsic Function", + "startLine": 513, "startColumn": 7, - "endLine": 61, - "endColumn": 11, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 513, + "endColumn": 16, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I1022", "severity": "INFO", - "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", - "source": "ENGINE", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", "entity": { - "logicalId": "Vpc", + "logicalId": "ClusterKubectlHandlerRole94549F93", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 16, - "startColumn": 5, - "endLine": 16, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.ManagedPolicyArns.3.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 528, + "startColumn": 9, + "endLine": 528, + "endColumn": 18, + "ruleDescription": "Use Sub instead of Join", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I1022", "severity": "INFO", - "message": "Resource 'SubnetA' of type 'AWS::EC2::Subnet' supports Tags but none are configured", - "source": "ENGINE", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", "entity": { - "logicalId": "SubnetA", + "logicalId": "ClusterNodegroupDefaultCapacityNodeGroupRole55953B04", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.ManagedPolicyArns.0.Fn::Join", + "category": "Intrinsic Function", + "startLine": 911, + "startColumn": 7, + "endLine": 911, + "endColumn": 16, + "ruleDescription": "Use Sub instead of Join", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I1022", "severity": "INFO", - "message": "Resource 'SubnetB' of type 'AWS::EC2::Subnet' supports Tags but none are configured", - "source": "ENGINE", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", "entity": { - "logicalId": "SubnetB", + "logicalId": "ClusterNodegroupDefaultCapacityNodeGroupRole55953B04", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.ManagedPolicyArns.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 923, + "startColumn": 7, + "endLine": 923, + "endColumn": 16, + "ruleDescription": "Use Sub instead of Join", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I1022", "severity": "INFO", - "message": "Resource 'AlbTwoSubnets' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", - "source": "ENGINE", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", "entity": { - "logicalId": "AlbTwoSubnets", + "logicalId": "ClusterNodegroupDefaultCapacityNodeGroupRole55953B04", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 30, - "startColumn": 5, - "endLine": 30, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.ManagedPolicyArns.2.Fn::Join", + "category": "Intrinsic Function", + "startLine": 935, + "startColumn": 7, + "endLine": 935, + "endColumn": 16, + "ruleDescription": "Use Sub instead of Join", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I1022", "severity": "INFO", - "message": "Resource 'AlbDefaultTypeTwoSubnetMappings' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", - "source": "ENGINE", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", "entity": { - "logicalId": "AlbDefaultTypeTwoSubnetMappings", + "logicalId": "ClusterAwsAuthmanifestFE51F8AE", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "Custom::AWSCDK-EKS-KubernetesResource" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 37, - "startColumn": 5, - "endLine": 37, + "propertyPath": "Properties.Manifest.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1001, + "startColumn": 6, + "endLine": 1001, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Use Sub instead of Join", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I1022", "severity": "INFO", - "message": "Resource 'AlbSubnetsFromParameter' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", - "source": "ENGINE", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", "entity": { - "logicalId": "AlbSubnetsFromParameter", + "logicalId": "awscdkawseksClusterResourceProviderNestedStackawscdkawseksClusterResourceProviderNestedStackResource9827C454", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 43, - "startColumn": 5, - "endLine": 43, + "propertyPath": "Properties.TemplateURL.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1037, + "startColumn": 6, + "endLine": 1037, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Use Sub instead of Join", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I1022", "severity": "INFO", - "message": "Resource 'NlbOneSubnet' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", - "source": "ENGINE", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", "entity": { - "logicalId": "NlbOneSubnet", + "logicalId": "awscdkawseksKubectlProviderNestedStackawscdkawseksKubectlProviderNestedStackResourceA7AEBA6B", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 48, - "startColumn": 5, - "endLine": 48, + "propertyPath": "Properties.TemplateURL.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1083, + "startColumn": 6, + "endLine": 1083, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Use Sub instead of Join", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'GatewayOneSubnet' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GatewayOneSubnet", + "logicalId": "UserVpcFAC913E5", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 54, + "startLine": 6, "startColumn": 5, - "endLine": 54, + "endLine": 6, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ParameterTypedOneSubnet' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ParameterTypedOneSubnet", + "logicalId": "UserVpcFAC913E5", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 60, + "startLine": 9, "startColumn": 5, - "endLine": 60, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/E9001_aws_cdk_metadata.yaml": { - "filePath": "good/E9001_aws_cdk_metadata.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 + "endLine": 9, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "UserVpcPublicSubnet1Subnet7A3A7B5D", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 18, - "startColumn": 7, - "endLine": 18, - "endColumn": 17, + "startLine": 21, + "startColumn": 5, + "endLine": 21, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } }, - { - "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": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/E9002_port_range_exemptions.yaml": { - "filePath": "good/E9002_port_range_exemptions.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 20, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Vpc", + "logicalId": "UserVpcPublicSubnet1Subnet7A3A7B5D", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 16, + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -15012,23 +15080,24 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "UserVpcPublicSubnet1Subnet7A3A7B5D", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 23, + "startLine": 49, + "startColumn": 5, + "endLine": 49, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcFAC913E5'" } }, { @@ -15037,87 +15106,95 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "UserVpcPublicSubnet1RouteTable5F0A6273", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 15, - "startColumn": 7, - "endLine": 15, - "endColumn": 12, + "startLine": 67, + "startColumn": 5, + "endLine": 67, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" + "resolutionSource": "Ref to 'UserVpcFAC913E5'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpTypeCode", + "logicalId": "UserVpcPublicSubnet1RouteTableAssociation2AB88B08", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 14, + "startLine": 75, + "startColumn": 5, + "endLine": 75, + "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SecurityGroup'" + "resolutionSource": "Ref to 'UserVpcPublicSubnet1RouteTable5F0A6273'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpTypeCode", + "logicalId": "UserVpcPublicSubnet1RouteTableAssociation2AB88B08", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 29, - "startColumn": 7, - "endLine": 29, - "endColumn": 17, + "startLine": 78, + "startColumn": 5, + "endLine": 78, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcPublicSubnet1Subnet7A3A7B5D'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpTypeCode", + "logicalId": "UserVpcPublicSubnet1DefaultRoute321532E0", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 30, - "startColumn": 7, - "endLine": 30, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 86, + "startColumn": 5, + "endLine": 86, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -15127,91 +15204,90 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpTypeCode", + "logicalId": "UserVpcPublicSubnet1DefaultRoute321532E0", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 31, - "startColumn": 7, - "endLine": 31, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 90, + "startColumn": 5, + "endLine": 90, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcPublicSubnet1RouteTable5F0A6273'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpTypeCode", + "logicalId": "UserVpcPublicSubnet1NATGateway7AFB18E6", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.CidrIp", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 32, - "startColumn": 7, - "endLine": 32, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 117, + "startColumn": 5, + "endLine": 117, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt UserVpcPublicSubnet1EIP84E63864.AllocationId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpv6TypeCode", + "logicalId": "UserVpcPublicSubnet1NATGateway7AFB18E6", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 36, - "startColumn": 7, - "endLine": 36, + "startLine": 123, + "startColumn": 5, + "endLine": 123, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SecurityGroup'" + "resolutionSource": "Ref to 'UserVpcPublicSubnet1Subnet7A3A7B5D'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpv6TypeCode", + "logicalId": "UserVpcPublicSubnet2Subnet42A6D42E", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 37, - "startColumn": 7, - "endLine": 37, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "startLine": 145, + "startColumn": 5, + "endLine": 145, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" @@ -15220,20 +15296,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpv6TypeCode", + "logicalId": "UserVpcPublicSubnet2Subnet42A6D42E", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 38, - "startColumn": 7, - "endLine": 38, + "startLine": 153, + "startColumn": 5, + "endLine": 153, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -15243,113 +15318,121 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpv6TypeCode", + "logicalId": "UserVpcPublicSubnet2Subnet42A6D42E", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 39, - "startColumn": 7, - "endLine": 39, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 173, + "startColumn": 5, + "endLine": 173, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcFAC913E5'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrIpv6' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpv6TypeCode", + "logicalId": "UserVpcPublicSubnet2RouteTableEC6A2C2A", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.CidrIpv6", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 40, - "startColumn": 7, - "endLine": 40, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 191, + "startColumn": 5, + "endLine": 191, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcFAC913E5'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneEgressAscendingRange", + "logicalId": "UserVpcPublicSubnet2RouteTableAssociationF7485C52", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 44, - "startColumn": 7, - "endLine": 44, - "endColumn": 14, + "startLine": 199, + "startColumn": 5, + "endLine": 199, + "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SecurityGroup'" + "resolutionSource": "Ref to 'UserVpcPublicSubnet2RouteTableEC6A2C2A'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneEgressAscendingRange", + "logicalId": "UserVpcPublicSubnet2RouteTableAssociationF7485C52", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 45, - "startColumn": 7, - "endLine": 45, - "endColumn": 17, + "startLine": 202, + "startColumn": 5, + "endLine": 202, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcPublicSubnet2Subnet42A6D42E'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneEgressAscendingRange", + "logicalId": "UserVpcPublicSubnet2DefaultRouteE14C718B", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 46, - "startColumn": 7, - "endLine": 46, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 210, + "startColumn": 5, + "endLine": 210, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -15359,619 +15442,569 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneEgressAscendingRange", + "logicalId": "UserVpcPublicSubnet2DefaultRouteE14C718B", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 47, - "startColumn": 7, - "endLine": 47, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 214, + "startColumn": 5, + "endLine": 214, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcPublicSubnet2RouteTableEC6A2C2A'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneEgressAscendingRange", + "logicalId": "UserVpcPublicSubnet2NATGateway5AD59565", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.CidrIp", + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 48, - "startColumn": 7, - "endLine": 48, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 241, + "startColumn": 5, + "endLine": 241, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt UserVpcPublicSubnet2EIPE859723C.AllocationId" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Vpc", + "logicalId": "UserVpcPublicSubnet2NATGateway5AD59565", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 9, + "startLine": 247, "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 247, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcPublicSubnet2Subnet42A6D42E'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "UserVpcPrivateSubnet1Subnet0B127D2C", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 13, + "startLine": 269, "startColumn": 5, - "endLine": 13, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/W1028_pseudo_param_branches_reachable.yaml": { - "filePath": "good/W1028_pseudo_param_branches_reachable.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 + "endLine": 269, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'KubectlHandlerRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "KubectlHandlerRole", + "logicalId": "UserVpcPrivateSubnet1Subnet0B127D2C", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 20, + "startLine": 277, "startColumn": 5, - "endLine": 20, + "endLine": 277, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/W2530_snapstart_unreachable_or_published.yaml": { - "filePath": "good/W2530_snapstart_unreachable_or_published.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 16, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 4, - "informational": 16, - "debug": 0 + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'IsUsEast1' to False from current status True", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "PropertiesBranchExcludedByResourceCondition", + "logicalId": "UserVpcPrivateSubnet1Subnet0B127D2C", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Fn::If.Fn::If.2", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 11, + "startLine": 297, "startColumn": 5, - "endLine": 11, + "endLine": 297, "endColumn": 11, - "ruleDescription": "Check Fn::If has a path that cannot be reached", - "phase": "LINT" - }, - { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'IsUsEast1' to False from current status True", - "source": "CFN_LINT", - "entity": { - "logicalId": "ApplyOnBranchExcludedByResourceCondition", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.SnapStart.ApplyOn.Fn::If.2", - "category": "Best Practice", - "startLine": 38, - "startColumn": 40, - "endLine": 38, - "endColumn": 41, - "ruleDescription": "Check Fn::If has a path that cannot be reached", - "phase": "LINT" - }, - { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'IsUsEast1' to False from current status True", - "source": "CFN_LINT", - "entity": { - "logicalId": "RepeatedConditionExcludesInnerBranch", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.SnapStart.Fn::If.1.ApplyOn.Fn::If.2", - "category": "Best Practice", - "startLine": 50, - "startColumn": 42, - "endLine": 50, - "endColumn": 43, - "ruleDescription": "Check Fn::If has a path that cannot be reached", - "phase": "LINT" - }, - { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 1] is not reachable. When setting condition 'IsUsWest2' to True", - "source": "CFN_LINT", - "entity": { - "logicalId": "ExclusiveConditionsExcludeInnerBranch", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.SnapStart.Fn::If.1.ApplyOn.Fn::If.1", - "category": "Best Practice", - "startLine": 63, - "startColumn": 36, - "endLine": 63, - "endColumn": 37, - "ruleDescription": "Check Fn::If has a path that cannot be reached", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcFAC913E5'" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublishedThroughSubVersion", + "logicalId": "UserVpcPrivateSubnet1RouteTable886260DA", "entityType": "Resource", - "resourceType": "AWS::Lambda::Version" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 92, - "startColumn": 7, - "endLine": 92, - "endColumn": 19, + "startLine": 315, + "startColumn": 5, + "endLine": 315, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:${PublishedThroughSub})" + "resolutionSource": "Ref to 'UserVpcFAC913E5'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublishedFromConditionalPropertiesVersion", + "logicalId": "UserVpcPrivateSubnet1RouteTableAssociation0C8C18D3", "entityType": "Resource", - "resourceType": "AWS::Lambda::Version" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 114, - "startColumn": 7, - "endLine": 114, - "endColumn": 19, + "startLine": 323, + "startColumn": 5, + "endLine": 323, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt PublishedFromConditionalProperties.Arn" + "resolutionSource": "Ref to 'UserVpcPrivateSubnet1RouteTable886260DA'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublishedInMatchingConditionVersion", + "logicalId": "UserVpcPrivateSubnet1RouteTableAssociation0C8C18D3", "entityType": "Resource", - "resourceType": "AWS::Lambda::Version" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 132, - "startColumn": 7, - "endLine": 132, - "endColumn": 19, + "startLine": 326, + "startColumn": 5, + "endLine": 326, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'PublishedInMatchingCondition'" + "resolutionSource": "Ref to 'UserVpcPrivateSubnet1Subnet0B127D2C'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublishedInUsEast1Version", + "logicalId": "UserVpcPrivateSubnet1DefaultRouteB00E5F42", "entityType": "Resource", - "resourceType": "AWS::Lambda::Version" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 148, - "startColumn": 7, - "endLine": 148, - "endColumn": 19, + "startLine": 334, + "startColumn": 5, + "endLine": 334, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'PublishedInEveryDeployment'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublishedElsewhereVersion", + "logicalId": "UserVpcPrivateSubnet1DefaultRouteB00E5F42", "entityType": "Resource", - "resourceType": "AWS::Lambda::Version" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 153, - "startColumn": 7, - "endLine": 153, - "endColumn": 19, + "startLine": 338, + "startColumn": 5, + "endLine": 338, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'PublishedInEveryDeployment'" + "resolutionSource": "Ref to 'UserVpcPrivateSubnet1RouteTable886260DA'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublishedFromMatchingFunctionNameBranchVersion", + "logicalId": "UserVpcPrivateSubnet2SubnetCD612986", "entityType": "Resource", - "resourceType": "AWS::Lambda::Version" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 168, - "startColumn": 7, - "endLine": 168, - "endColumn": 19, + "startLine": 346, + "startColumn": 5, + "endLine": 346, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsUsEast1'" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'PropertiesBranchExcludedByResourceCondition' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PropertiesBranchExcludedByResourceCondition", + "logicalId": "UserVpcPrivateSubnet2SubnetCD612986", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 11, + "startLine": 354, "startColumn": 5, - "endLine": 11, + "endLine": 354, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ApplyOnBranchExcludedByResourceCondition' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApplyOnBranchExcludedByResourceCondition", + "logicalId": "UserVpcPrivateSubnet2SubnetCD612986", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 30, + "startLine": 374, "startColumn": 5, - "endLine": 30, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 374, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcFAC913E5'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'RepeatedConditionExcludesInnerBranch' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RepeatedConditionExcludesInnerBranch", + "logicalId": "UserVpcPrivateSubnet2RouteTable1EDE83AC", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 41, + "startLine": 392, "startColumn": 5, - "endLine": 41, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 392, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcFAC913E5'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ExclusiveConditionsExcludeInnerBranch' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ExclusiveConditionsExcludeInnerBranch", + "logicalId": "UserVpcPrivateSubnet2RouteTableAssociation1643AB72", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 54, + "startLine": 400, "startColumn": 5, - "endLine": 54, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 400, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcPrivateSubnet2RouteTable1EDE83AC'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SnapStartNoValueOrNone' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SnapStartNoValueOrNone", + "logicalId": "UserVpcPrivateSubnet2RouteTableAssociation1643AB72", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 67, + "startLine": 403, "startColumn": 5, - "endLine": 67, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 403, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcPrivateSubnet2SubnetCD612986'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'PublishedThroughSub' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublishedThroughSub", + "logicalId": "UserVpcPrivateSubnet2DefaultRoute99CA0CB9", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 80, + "startLine": 411, "startColumn": 5, - "endLine": 80, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 411, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'PublishedFromConditionalProperties' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublishedFromConditionalProperties", + "logicalId": "UserVpcPrivateSubnet2DefaultRoute99CA0CB9", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 95, + "startLine": 415, "startColumn": 5, - "endLine": 95, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 415, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcPrivateSubnet2RouteTable1EDE83AC'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'PublishedInMatchingCondition' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublishedInMatchingCondition", + "logicalId": "UserVpcVPCGWEFD8AF3B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 117, + "startLine": 437, "startColumn": 5, - "endLine": 117, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 437, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcFAC913E5'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'PublishedInEveryDeployment' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'Content' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublishedInEveryDeployment", + "logicalId": "KubectlLayer600207B5", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Content", "category": "Best Practice", - "startLine": 135, + "startLine": 462, "startColumn": 5, - "endLine": 135, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 462, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'PublishedFromMatchingFunctionNameBranch' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublishedFromMatchingFunctionNameBranch", + "logicalId": "KubectlLayer600207B5", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 156, + "startLine": 468, "startColumn": 5, - "endLine": 156, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/W3010_getazs_not_flagged.yaml": { - "filePath": "good/W3010_getazs_not_flagged.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 6, - "debug": 0 + "endLine": 468, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZones' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'LicenseInfo' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Elb", + "logicalId": "KubectlLayer600207B5", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.AvailabilityZones", + "propertyPath": "Properties.LicenseInfo", "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 24, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "startLine": 469, + "startColumn": 5, + "endLine": 469, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet", + "logicalId": "ClusterControlPlaneSecurityGroupD274242C", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 16, - "startColumn": 7, - "endLine": 16, - "endColumn": 12, + "startLine": 596, + "startColumn": 5, + "endLine": 596, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -15981,195 +16014,137 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet", + "logicalId": "ClusterControlPlaneSecurityGroupD274242C", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 16, + "startLine": 604, + "startColumn": 5, + "endLine": 604, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserVpcFAC913E5'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'AmiType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet", + "logicalId": "ClusterNodegroupDefaultCapacityDA0920A3", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EKS::Nodegroup" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.AmiType", "category": "Best Practice", - "startLine": 18, - "startColumn": 7, - "endLine": 18, - "endColumn": 23, + "startLine": 957, + "startColumn": 5, + "endLine": 957, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Elb' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Elb", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Subnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 15, - "startColumn": 5, - "endLine": 15, - "endColumn": 15, - "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", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 9, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Authorizer1", + "logicalId": "ClusterNodegroupDefaultCapacityDA0920A3", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Authorizer" + "resourceType": "AWS::EKS::Nodegroup" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.ClusterName", "category": "Best Practice", - "startLine": 19, - "startColumn": 7, - "endLine": 19, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "startLine": 958, + "startColumn": 5, + "endLine": 958, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt RestApi1.RestApiId" + "resolutionSource": "Ref to 'Cluster9EE0221C'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceTypes' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Method1", + "logicalId": "ClusterNodegroupDefaultCapacityDA0920A3", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::EKS::Nodegroup" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.InstanceTypes", "category": "Best Practice", - "startLine": 25, - "startColumn": 7, - "endLine": 25, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "startLine": 962, + "startColumn": 5, + "endLine": 962, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'RestApi1'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'NodeRole' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Method1", + "logicalId": "ClusterNodegroupDefaultCapacityDA0920A3", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::EKS::Nodegroup" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.NodeRole", "category": "Best Practice", - "startLine": 26, - "startColumn": 7, - "endLine": 26, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "startLine": 965, + "startColumn": 5, + "endLine": 965, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt RestApi1.RootResourceId" + "resolutionSource": "GetAtt ClusterNodegroupDefaultCapacityNodeGroupRole55953B04.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'Subnets' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Method1", + "logicalId": "ClusterNodegroupDefaultCapacityDA0920A3", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::EKS::Nodegroup" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.Subnets", "category": "Best Practice", - "startLine": 27, - "startColumn": 7, - "endLine": 27, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "startLine": 976, + "startColumn": 5, + "endLine": 976, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16177,92 +16152,81 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'UserRoleB7C3739B' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Deployment1", + "logicalId": "UserRoleB7C3739B", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 36, - "startColumn": 7, - "endLine": 36, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt RestApi1.RestApiId" - } + "startLine": 444, + "startColumn": 4, + "endLine": 444, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'ClusterKubectlHandlerRole94549F93' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Stage1", + "logicalId": "ClusterKubectlHandlerRole94549F93", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 40, - "startColumn": 7, - "endLine": 40, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'RestApi1'" - } + "startLine": 474, + "startColumn": 4, + "endLine": 474, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Resource 'ClusterControlPlaneSecurityGroupD274242C' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Stage1", + "logicalId": "ClusterControlPlaneSecurityGroupD274242C", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 42, - "startColumn": 7, - "endLine": 42, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 595, + "startColumn": 4, + "endLine": 595, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'RestApi1' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Resource 'ClusterCreationRole360249B6' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RestApi1", + "logicalId": "ClusterCreationRole360249B6", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, + "startLine": 616, + "startColumn": 4, + "endLine": 616, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -16270,208 +16234,115 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Stage1' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Resource 'ClusterKubectlReadyBarrier200052AF' of type 'AWS::SSM::Parameter' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Stage1", + "logicalId": "ClusterKubectlReadyBarrier200052AF", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::SSM::Parameter" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 39, - "startColumn": 5, - "endLine": 39, + "startLine": 882, + "startColumn": 4, + "endLine": 882, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/aurora_dbinstance.yaml": { - "filePath": "good/aurora_dbinstance.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 8, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "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": "AuroraDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "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": "AuroraDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AuroraDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", + "message": "Resource 'ClusterNodegroupDefaultCapacityNodeGroupRole55953B04' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AuroraDB", + "logicalId": "ClusterNodegroupDefaultCapacityNodeGroupRole55953B04", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.DBClusterIdentifier", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 896, + "startColumn": 4, + "endLine": 896, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'ClusterNodegroupDefaultCapacityDA0920A3' of type 'AWS::EKS::Nodegroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AuroraDB", + "logicalId": "ClusterNodegroupDefaultCapacityDA0920A3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EKS::Nodegroup" }, - "propertyPath": "Properties.BackupRetentionPeriod", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 28, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 956, + "startColumn": 4, + "endLine": 956, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9002", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' is ignored in this configuration (from extension)", + "message": "Resource 'awscdkawseksClusterResourceProviderNestedStackawscdkawseksClusterResourceProviderNestedStackResource9827C454' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AuroraDB", + "logicalId": "awscdkawseksClusterResourceProviderNestedStackawscdkawseksClusterResourceProviderNestedStackResource9827C454", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.BackupRetentionPeriod", - "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 28, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property is ignored in this configuration (from extension)", - "phase": "SCHEMA" - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "startLine": 1035, + "startColumn": 4, + "endLine": 1035, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'AuroraDB' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Resource 'awscdkawseksKubectlProviderNestedStackawscdkawseksKubectlProviderNestedStackResourceA7AEBA6B' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AuroraDB", + "logicalId": "awscdkawseksKubectlProviderNestedStackawscdkawseksKubectlProviderNestedStackResourceA7AEBA6B", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::CloudFormation::Stack" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, + "startLine": 1058, + "startColumn": 4, + "endLine": 1058, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/both_forms.yaml": { - "filePath": "good/both_forms.yaml", + "gh-issues/issue-54-bare.json": { + "filePath": "gh-issues/issue-54-bare.json", "status": "OK", "metadata": { - "resourcesScanned": 13, + "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, - "warnings": 1, - "informational": 2, + "warnings": 0, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -16480,80 +16351,36 @@ }, "diagnostics": [ { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'Combined' is not used by any resource or Fn::If", - "source": "CFN_LINT", - "entity": { - "logicalId": "Combined", - "entityType": "Condition" - }, - "propertyPath": "Conditions/Combined", - "category": "Best Practice", - "startLine": 12, - "startColumn": 3, - "endLine": 12, - "endColumn": 11, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BucketShort", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 20, - "startColumn": 7, - "endLine": 20, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" - } - }, - { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BucketLong", + "logicalId": "Bucket", "entityType": "Resource", "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 27, - "startColumn": 7, - "endLine": 27, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" - } + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "good/cdk_bootstrap_version_rule.json": { - "filePath": "good/cdk_bootstrap_version_rule.json", + "gh-issues/issue-54-with-ownership.json": { + "filePath": "gh-issues/issue-54-with-ownership.json", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 1, "informational": 1, "debug": 0 }, @@ -16563,36 +16390,59 @@ }, "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3045", + "severity": "WARN", + "message": "AccessControl property is deprecated. Use bucket policies instead", + "source": "CFN_LINT", "entity": { "logicalId": "Bucket", "entityType": "Resource", "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AccessControl", + "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", + "category": "Deprecation", + "startLine": 6, + "startColumn": 9, + "endLine": 6, + "endColumn": 23, + "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", + "phase": "LINT", + "context": { + "actualValue": "PublicRead" + } + }, + { + "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": 13, + "startLine": 5, "startColumn": 7, - "endLine": 13, + "endLine": 5, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/cloudfront_valid.yaml": { - "filePath": "good/cloudfront_valid.yaml", + "gh-issues/issue-54.json": { + "filePath": "gh-issues/issue-54.json", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 0, - "warnings": 0, + "errors": 1, + "warnings": 1, "informational": 1, "debug": 0 }, @@ -16601,37 +16451,80 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "E3045", + "severity": "ERROR", + "message": "A bucket with 'AccessControl' set should also have at least one 'OwnershipControl' configured", + "source": "CFN_LINT", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties", + "suggestedFix": "Add OwnershipControls to the bucket when using AccessControl", + "category": "Resource", + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Validate AccessControl are set with OwnershipControls", + "phase": "LINT" + }, + { + "ruleId": "W3045", + "severity": "WARN", + "message": "AccessControl property is deprecated. Use bucket policies instead", + "source": "CFN_LINT", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.AccessControl", + "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", + "category": "Deprecation", + "startLine": 6, + "startColumn": 9, + "endLine": 6, + "endColumn": 23, + "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", + "phase": "LINT", + "context": { + "actualValue": "PublicRead" + } + }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Distribution' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Distribution", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 5, - "startColumn": 5, + "startColumn": 7, "endLine": 5, - "endColumn": 15, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/codepipeline_artifact_counts.yaml": { - "filePath": "good/codepipeline_artifact_counts.yaml", + "gh-issues/issue-55.json": { + "filePath": "gh-issues/issue-55.json", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 0, "informational": 1, "debug": 0 }, @@ -16640,57 +16533,38 @@ "severityLevel": "DEBUG" }, "diagnostics": [ - { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", - "source": "ENGINE", - "entity": { - "logicalId": "Pipeline", - "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" - }, - "propertyPath": "Properties.RoleArn", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 14, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" - }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Pipeline' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Pipeline", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/complex_conditions.yaml": { - "filePath": "good/complex_conditions.yaml", + "gh-issues/issue-56.json": { + "filePath": "gh-issues/issue-56.json", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, - "warnings": 2, - "informational": 12, + "warnings": 0, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -16698,297 +16572,289 @@ "severityLevel": "DEBUG" }, "diagnostics": [ - { - "ruleId": "W2501", - "severity": "WARN", - "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", - "source": "CFN_LINT", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 38, - "startColumn": 7, - "endLine": 38, - "endColumn": 25, - "ruleDescription": "Check if Password Properties are correctly configured", - "phase": "LINT" - }, - { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'IsNotProd' is not used by any resource or Fn::If", - "source": "CFN_LINT", - "entity": { - "logicalId": "IsNotProd", - "entityType": "Condition" - }, - "propertyPath": "Conditions/IsNotProd", - "category": "Best Practice", - "startLine": 20, - "startColumn": 3, - "endLine": 20, - "endColumn": 12, - "ruleDescription": "Check if Conditions are Used", - "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": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "category": "Best Practice", - "startLine": 31, - "startColumn": 3, - "endLine": 31, - "endColumn": 11, - "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": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "category": "Best Practice", - "startLine": 31, - "startColumn": 3, - "endLine": 31, - "endColumn": 11, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" - }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "WeakConsumer", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.TopicName", "category": "Best Practice", - "startLine": 26, - "startColumn": 7, - "endLine": 26, - "endColumn": 17, + "startLine": 6, + "startColumn": 9, + "endLine": 6, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" + "resolutionSource": "dynamic (cross-stack output: StackName=\"Stack1\", Region=\"us-east-1\", OutputName=\"PublishOutputFnGetAttMyResourceArn8F315E6B\")" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'WeakConsumer' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "WeakConsumer", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 36, + "startLine": 5, "startColumn": 7, - "endLine": 36, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.MasterUsername", - "category": "Best Practice", - "startLine": 37, - "startColumn": 7, - "endLine": 37, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-57.json": { + "filePath": "gh-issues/issue-57.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Resource 'AReallyAwesomeDistributionWithAMemorableNameThatIWillNeverForget046C0FA9' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "AReallyAwesomeDistributionWithAMemorableNameThatIWillNeverForget046C0FA9", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 39, + "startLine": 5, "startColumn": 7, - "endLine": 39, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-61.json": { + "filePath": "gh-issues/issue-61.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "F3017", + "severity": "FATAL", + "message": "Value is not valid under any of the 5 anyOf schemas for AWS::EC2::Volume (0 branches matched; at least one is required). Required property combinations: ['AvailabilityZone', 'Size'] or ['AvailabilityZone', 'SnapshotId'] or ['AvailabilityZoneId', 'Size'] or ['AvailabilityZoneId', 'SnapshotId'] or ['SourceVolumeId']. Branch failures: branch 1: 'AvailabilityZone' is a required property, 'Size' is a required property; branch 2: 'AvailabilityZone' is a required property, 'SnapshotId' is a required property; branch 3: 'AvailabilityZoneId' is a required property, 'Size' is a required property; branch 4: 'AvailabilityZoneId' is a required property, 'SnapshotId' is a required property; branch 5: 'SourceVolumeId' is a required property.", + "source": "SCHEMA", "entity": { - "logicalId": "Database", + "logicalId": "Resource", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Volume" }, - "propertyPath": "Properties.BackupRetentionPeriod", - "category": "Best Practice", - "startLine": 41, - "startColumn": 7, - "endLine": 41, - "endColumn": 28, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "propertyPath": "Properties", + "category": "Schema", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Value not valid under anyOf", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "expectedConstraint": "at least one anyOf branch", + "extra": { + "branchCount": 5, + "branchFailures": [ + { + "branch": 1, + "reasons": [ + { + "message": "'AvailabilityZone' is a required property", + "propertyPath": "Properties" + }, + { + "message": "'Size' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 2, + "reasons": [ + { + "message": "'AvailabilityZone' is a required property", + "propertyPath": "Properties" + }, + { + "message": "'SnapshotId' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 3, + "reasons": [ + { + "message": "'AvailabilityZoneId' is a required property", + "propertyPath": "Properties" + }, + { + "message": "'Size' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 4, + "reasons": [ + { + "message": "'AvailabilityZoneId' is a required property", + "propertyPath": "Properties" + }, + { + "message": "'SnapshotId' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 5, + "reasons": [ + { + "message": "'SourceVolumeId' is a required property", + "propertyPath": "Properties" + } + ] + } + ], + "compositionKind": "anyOf", + "matchCount": 0, + "matchOutcome": "zeroMatches", + "validPropertyCombinations": [ + [ + "AvailabilityZone", + "Size" + ], + [ + "AvailabilityZone", + "SnapshotId" + ], + [ + "AvailabilityZoneId", + "Size" + ], + [ + "AvailabilityZoneId", + "SnapshotId" + ], + [ + "SourceVolumeId" + ] + ] + } } }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "DevBucket", + "logicalId": "Resource", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Volume" }, - "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 46, - "startColumn": 7, - "endLine": 46, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9003", + "ruleId": "I3011", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", + "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": "Resource", + "entityType": "Resource", + "resourceType": "AWS::EC2::Volume" + }, "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'Resource' of type 'AWS::EC2::Volume' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "Resource", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Volume" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Database' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 34, - "startColumn": 5, - "endLine": 34, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DevBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "DevBucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 45, + "startLine": 3, "startColumn": 5, - "endLine": 45, - "endColumn": 15, + "endLine": 3, + "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/conditional_constraints_composite_keys_and_monitoring.yaml": { - "filePath": "good/conditional_constraints_composite_keys_and_monitoring.yaml", + "gh-issues/issue-62.json": { + "filePath": "gh-issues/issue-62.json", "status": "OK", "metadata": { - "resourcesScanned": 7, + "resourcesScanned": 1, "counts": { - "fatal": 0, + "fatal": 1, "errors": 0, - "warnings": 1, - "informational": 18, + "warnings": 2, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -16996,429 +16862,454 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "F3032", + "severity": "FATAL", + "message": "expected minimum item count: 1, found: 0", + "source": "SCHEMA", + "entity": { + "logicalId": "Canary", + "entityType": "Resource", + "resourceType": "AWS::Synthetics::Canary" + }, + "propertyPath": "Properties.ResourcesToReplicateTags", + "category": "Schema", + "startLine": 18, + "startColumn": 9, + "endLine": 18, + "endColumn": 34, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-synthetics", + "ruleDescription": "Array item count out of bounds", + "phase": "SCHEMA", + "context": { + "extra": { + "actual_count": 0, + "max_items": 1, + "min_items": 1 + } + } + }, { "ruleId": "W9002", "severity": "WARN", - "message": "Property 'MonitoringRoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "message": "Property 'ExecutionRoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", "source": "ENGINE", "entity": { - "logicalId": "ClusterWithEnhancedMonitoring", + "logicalId": "Canary", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::Synthetics::Canary" }, - "propertyPath": "Properties.MonitoringRoleArn", + "propertyPath": "Properties.ExecutionRoleArn", "category": "Best Practice", - "startLine": 103, - "startColumn": 7, - "endLine": 103, - "endColumn": 24, + "startLine": 8, + "startColumn": 9, + "endLine": 8, + "endColumn": 26, "ruleDescription": "Hardcoded ARN property", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "TableWithLsiCompositeKey", + "logicalId": "Canary", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Synthetics::Canary" }, - "propertyPath": "Properties.KeySchema", - "category": "Best Practice", - "startLine": 20, - "startColumn": 7, - "endLine": 20, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "category": "Security", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "message": "'SuccessRetentionPeriod' 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": "TableWithoutIndexesSimpleKey", + "logicalId": "Canary", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Synthetics::Canary" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 43, + "startLine": 5, "startColumn": 7, - "endLine": 43, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GlobalTableWithLsiCompositeKey", + "logicalId": "Canary", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::GlobalTable" + "resourceType": "AWS::Synthetics::Canary" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 59, - "startColumn": 7, - "endLine": 59, - "endColumn": 16, + "startLine": 6, + "startColumn": 9, + "endLine": 6, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-synthetics", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'LocalSecondaryIndexes' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'Canary' of type 'AWS::Synthetics::Canary' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "GlobalTableWithLsiCompositeKey", + "logicalId": "Canary", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::GlobalTable" + "resourceType": "AWS::Synthetics::Canary" }, - "propertyPath": "Properties.LocalSecondaryIndexes", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 65, + "startLine": 5, "startColumn": 7, - "endLine": 65, - "endColumn": 28, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-63.json": { + "filePath": "gh-issues/issue-63.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'SomeParameter': Default must be a string", + "source": "CFN_LINT", "entity": { - "logicalId": "MysqlClusterAdminUsername", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "logicalId": "SomeParameter", + "entityType": "Parameter" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 81, + "propertyPath": "Parameters/SomeParameter/Default", + "category": "Parameter", + "startLine": 5, "startColumn": 7, - "endLine": 81, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'Topic' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MysqlClusterAdminUsername", + "logicalId": "Topic", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.MasterUsername", - "category": "Best Practice", - "startLine": 82, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 29, "startColumn": 7, - "endLine": 82, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 29, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-65.json": { + "filePath": "gh-issues/issue-65.json", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 6, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 7, + "startColumn": 9, + "endLine": 7, + "endColumn": 17, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "PostgresClusterOtherUsername", + "logicalId": "MyLambda", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 90, - "startColumn": 7, - "endLine": 90, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "category": "Security", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 14, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PostgresClusterOtherUsername", + "logicalId": "MyLambda", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 91, - "startColumn": 7, - "endLine": 91, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "startLine": 6, + "startColumn": 9, + "endLine": 6, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterWithEnhancedMonitoring", + "logicalId": "S3Permission", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 99, - "startColumn": 7, - "endLine": 99, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "startLine": 18, + "startColumn": 9, + "endLine": 18, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterWithEnhancedMonitoring", + "logicalId": "S3Permission", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 100, - "startColumn": 7, - "endLine": 100, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "startLine": 19, + "startColumn": 9, + "endLine": 19, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyLambda'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterWithoutMonitoring", + "logicalId": "S3Permission", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 110, - "startColumn": 7, - "endLine": 110, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "startLine": 20, + "startColumn": 9, + "endLine": 20, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'SourceAccount' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterWithoutMonitoring", + "logicalId": "S3Permission", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.SourceAccount", "category": "Best Practice", - "startLine": 111, - "startColumn": 7, - "endLine": 111, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "startLine": 21, + "startColumn": 9, + "endLine": 21, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TableWithLsiCompositeKey' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'MyLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TableWithLsiCompositeKey", + "logicalId": "MyLambda", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "gh-issues/issue-67.json": { + "filePath": "gh-issues/issue-67.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TableWithoutIndexesSimpleKey' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TableWithoutIndexesSimpleKey", + "logicalId": "PromAlarm", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::CloudWatch::Alarm" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AlarmName", "category": "Best Practice", - "startLine": 39, - "startColumn": 5, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 6, + "startColumn": 9, + "endLine": 6, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MysqlClusterAdminUsername' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", + "message": "Resource 'PromAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MysqlClusterAdminUsername", + "logicalId": "PromAlarm", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::CloudWatch::Alarm" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 80, - "startColumn": 5, - "endLine": 80, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'PostgresClusterOtherUsername' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "PostgresClusterOtherUsername", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 89, - "startColumn": 5, - "endLine": 89, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ClusterWithEnhancedMonitoring' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ClusterWithEnhancedMonitoring", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 98, - "startColumn": 5, - "endLine": 98, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ClusterWithoutMonitoring' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ClusterWithoutMonitoring", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 109, - "startColumn": 5, - "endLine": 109, - "endColumn": 15, + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/conditional_constraints_within_limits.yaml": { - "filePath": "good/conditional_constraints_within_limits.yaml", + "gh-issues/issue-68.json": { + "filePath": "gh-issues/issue-68.json", "status": "OK", "metadata": { - "resourcesScanned": 11, + "resourcesScanned": 2, "counts": { "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 21, + "errors": 1, + "warnings": 4, + "informational": 4, "debug": 0 }, "suppressed": 0, @@ -17427,545 +17318,306 @@ }, "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TokenAuthorizerAtTheLimit", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Authorizer" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 56, - "startColumn": 7, - "endLine": 56, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'RestApi'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3677", + "severity": "ERROR", + "message": "Runtime 'node99.x' is not supported with Code.ZipFile - use nodejs or python", + "source": "CFN_LINT", "entity": { - "logicalId": "CognitoAuthorizerLongTtl", + "logicalId": "FutureNodeFunc", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Authorizer" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 65, - "startColumn": 7, - "endLine": 65, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'RestApi'" - } + "category": "Resource", + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 20, + "ruleDescription": "Lambda ZipFile requires nodejs or python runtime", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3030", + "severity": "WARN", + "message": "'nodejs99.x' is not one of ['dotnet10', 'dotnet6', 'dotnet8', 'dotnetcore1.0', 'dotnetcore2.0', 'dotnetcore2.1', 'dotnetcore3.1', 'go1.x', 'java11', 'java11.al2023', 'java17', 'java17.al2023', 'java21', 'java25', 'java8', 'java8.al2', 'java8.al2023', 'nodejs', 'nodejs10.x', 'nodejs12.x', 'nodejs14.x', 'nodejs16.x', 'nodejs18.x', 'nodejs20.x', 'nodejs22.x', 'nodejs24.x', 'nodejs26.x', 'nodejs4.3', 'nodejs4.3-edge', 'nodejs6.10', 'nodejs8.10', 'provided', 'provided.al2', 'provided.al2023', 'python2.7', 'python3.10', 'python3.11', 'python3.12', 'python3.13', 'python3.14', 'python3.15', 'python3.6', 'python3.7', 'python3.8', 'python3.9', 'ruby2.5', 'ruby2.7', 'ruby3.2', 'ruby3.3', 'ruby3.4', 'ruby4.0']", + "source": "CFN_LINT", "entity": { - "logicalId": "Deployment", + "logicalId": "MyFunc", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 74, - "startColumn": 7, - "endLine": 74, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", + "propertyPath": "Properties.Runtime", + "category": "Schema", + "startLine": 10, + "startColumn": 9, + "endLine": 10, + "endColumn": 17, + "ruleDescription": "Value not in allowed enum", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'RestApi'" + "actualValue": "nodejs99.x", + "extra": { + "allowed_values": [ + "dotnet10", + "dotnet6", + "dotnet8", + "dotnetcore1.0", + "dotnetcore2.0", + "dotnetcore2.1", + "dotnetcore3.1", + "go1.x", + "java11", + "java11.al2023", + "java17", + "java17.al2023", + "java21", + "java25", + "java8", + "java8.al2", + "java8.al2023", + "nodejs", + "nodejs10.x", + "nodejs12.x", + "nodejs14.x", + "nodejs16.x", + "nodejs18.x", + "nodejs20.x", + "nodejs22.x", + "nodejs24.x", + "nodejs26.x", + "nodejs4.3", + "nodejs4.3-edge", + "nodejs6.10", + "nodejs8.10", + "provided", + "provided.al2", + "provided.al2023", + "python2.7", + "python3.10", + "python3.11", + "python3.12", + "python3.13", + "python3.14", + "python3.15", + "python3.6", + "python3.7", + "python3.8", + "python3.9", + "ruby2.5", + "ruby2.7", + "ruby3.2", + "ruby3.3", + "ruby3.4", + "ruby4.0" + ] + } } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3030", + "severity": "WARN", + "message": "'node99.x' is not one of ['dotnet10', 'dotnet6', 'dotnet8', 'dotnetcore1.0', 'dotnetcore2.0', 'dotnetcore2.1', 'dotnetcore3.1', 'go1.x', 'java11', 'java11.al2023', 'java17', 'java17.al2023', 'java21', 'java25', 'java8', 'java8.al2', 'java8.al2023', 'nodejs', 'nodejs10.x', 'nodejs12.x', 'nodejs14.x', 'nodejs16.x', 'nodejs18.x', 'nodejs20.x', 'nodejs22.x', 'nodejs24.x', 'nodejs26.x', 'nodejs4.3', 'nodejs4.3-edge', 'nodejs6.10', 'nodejs8.10', 'provided', 'provided.al2', 'provided.al2023', 'python2.7', 'python3.10', 'python3.11', 'python3.12', 'python3.13', 'python3.14', 'python3.15', 'python3.6', 'python3.7', 'python3.8', 'python3.9', 'ruby2.5', 'ruby2.7', 'ruby3.2', 'ruby3.3', 'ruby3.4', 'ruby4.0']", + "source": "CFN_LINT", "entity": { - "logicalId": "StageWithAbsolutePaths", + "logicalId": "FutureNodeFunc", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 78, - "startColumn": 7, - "endLine": 78, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", + "propertyPath": "Properties.Runtime", + "category": "Schema", + "startLine": 22, + "startColumn": 9, + "endLine": 22, + "endColumn": 17, + "ruleDescription": "Value not in allowed enum", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'RestApi'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "StageWithAbsolutePaths", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" - }, - "propertyPath": "Properties.StageName", - "category": "Best Practice", - "startLine": 80, - "startColumn": 7, - "endLine": 80, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AuroraLongBackupRetention", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 95, - "startColumn": 7, - "endLine": 95, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AuroraLongBackupRetention", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.DBClusterIdentifier", - "category": "Best Practice", - "startLine": 97, - "startColumn": 7, - "endLine": 97, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AuroraLongBackupRetention", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.BackupRetentionPeriod", - "category": "Best Practice", - "startLine": 98, - "startColumn": 7, - "endLine": 98, - "endColumn": 28, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MysqlBackupRetentionAtTheLimit", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 104, - "startColumn": 7, - "endLine": 104, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MysqlBackupRetentionAtTheLimit", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.MasterUsername", - "category": "Best Practice", - "startLine": 107, - "startColumn": 7, - "endLine": 107, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MysqlBackupRetentionAtTheLimit", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.StorageEncrypted", - "category": "Best Practice", - "startLine": 109, - "startColumn": 7, - "endLine": 109, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MysqlBackupRetentionAtTheLimit", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.BackupRetentionPeriod", - "category": "Best Practice", - "startLine": 110, - "startColumn": 7, - "endLine": 110, - "endColumn": 28, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" + "actualValue": "node99.x", + "extra": { + "allowed_values": [ + "dotnet10", + "dotnet6", + "dotnet8", + "dotnetcore1.0", + "dotnetcore2.0", + "dotnetcore2.1", + "dotnetcore3.1", + "go1.x", + "java11", + "java11.al2023", + "java17", + "java17.al2023", + "java21", + "java25", + "java8", + "java8.al2", + "java8.al2023", + "nodejs", + "nodejs10.x", + "nodejs12.x", + "nodejs14.x", + "nodejs16.x", + "nodejs18.x", + "nodejs20.x", + "nodejs22.x", + "nodejs24.x", + "nodejs26.x", + "nodejs4.3", + "nodejs4.3-edge", + "nodejs6.10", + "nodejs8.10", + "provided", + "provided.al2", + "provided.al2023", + "python2.7", + "python3.10", + "python3.11", + "python3.12", + "python3.13", + "python3.14", + "python3.15", + "python3.6", + "python3.7", + "python3.8", + "python3.9", + "ruby2.5", + "ruby2.7", + "ruby3.2", + "ruby3.3", + "ruby3.4", + "ruby4.0" + ] + } } }, { - "ruleId": "I9002", - "severity": "INFO", - "message": "'BackupRetentionPeriod' is ignored in this configuration (from extension)", - "source": "ENGINE", - "entity": { - "logicalId": "AuroraLongBackupRetention", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.BackupRetentionPeriod", - "category": "Best Practice", - "startLine": 98, - "startColumn": 7, - "endLine": 98, - "endColumn": 28, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property is ignored in this configuration (from extension)", - "phase": "SCHEMA" - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FunctionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FunctionRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 11, - "startColumn": 5, - "endLine": 11, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TimeoutAtTheLimit' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TimeoutAtTheLimit", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 21, - "startColumn": 5, - "endLine": 21, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ManagedInstancesLongTimeout' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "ManagedInstancesLongTimeout", + "logicalId": "MyFunc", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 31, - "startColumn": 5, - "endLine": 31, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'RestApi' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "RestApi", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 50, - "startColumn": 5, - "endLine": 50, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'StageWithAbsolutePaths' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "StageWithAbsolutePaths", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 77, - "startColumn": 5, - "endLine": 77, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'AuroraLongBackupRetention' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "AuroraLongBackupRetention", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 94, - "startColumn": 5, - "endLine": 94, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MysqlBackupRetentionAtTheLimit' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MysqlBackupRetentionAtTheLimit", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 103, + "category": "Security", + "startLine": 4, "startColumn": 5, - "endLine": 103, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endLine": 4, + "endColumn": 12, + "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" - } - ] - }, - "good/conditions.yaml": { - "filePath": "good/conditions.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W9010", + "ruleId": "W9013", "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "FutureNodeFunc", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ImageId", "category": "Security", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 20, + "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "MyFunc", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 7, + "startColumn": 9, + "endLine": 7, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'isProd'" + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FutureNodeFunc", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 19, + "startColumn": 9, + "endLine": 19, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CloudFrontDistribution' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", + "message": "Resource 'MyFunc' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CloudFrontDistribution", + "logicalId": "MyFunc", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 41, - "startColumn": 5, - "endLine": 41, - "endColumn": 15, + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FutureNodeFunc' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FutureNodeFunc", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 18, + "startColumn": 7, + "endLine": 18, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/conditions/and.yaml": { - "filePath": "good/conditions/and.yaml", + "gh-issues/issue-69.yaml": { + "filePath": "gh-issues/issue-69.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 0, + "fatal": 2, "errors": 0, "warnings": 0, "informational": 0, @@ -17975,746 +17627,607 @@ "strict": false, "severityLevel": "DEBUG" }, - "diagnostics": [] - }, - "good/core/conditions.yaml": { - "filePath": "good/core/conditions.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 8, - "counts": { - "fatal": 2, - "errors": 0, - "warnings": 9, - "informational": 18, - "debug": 0 - }, - "suppressed": 2, - "strict": false, - "severityLevel": "DEBUG" - }, "diagnostics": [ { - "ruleId": "F3003", + "ruleId": "F3032", "severity": "FATAL", - "message": "'Role' is a required property", + "message": "expected maximum item count: 1, found: 2", "source": "SCHEMA", "entity": { - "logicalId": "AMIIDLookup", + "logicalId": "Profile", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'Role'", + "propertyPath": "Properties.Roles", "category": "Schema", - "startLine": 101, - "startColumn": 5, - "endLine": 101, - "endColumn": 15, - "conditionScenario": { - "isPrimary": false - }, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 12, + "ruleDescription": "Array item count out of bounds", + "phase": "SCHEMA", + "context": { + "extra": { + "actual_count": 2, + "max_items": 1, + "min_items": 0 + } + } }, { - "ruleId": "F3014", + "ruleId": "F3037", "severity": "FATAL", - "message": "Exactly one of ['VirtualName', 'Ebs', 'NoDevice'] must be specified", + "message": "Array items are not unique", "source": "SCHEMA", "entity": { - "logicalId": "myInstance2", + "logicalId": "Profile", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties.BlockDeviceMappings.{}", + "propertyPath": "Properties.Roles", "category": "Schema", - "startLine": 36, + "startLine": 6, "startColumn": 7, - "endLine": 36, - "endColumn": 26, - "conditionScenario": { - "isPrimary": true, - "isPrimaryAndProduction": true - }, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Exactly one of properties required (requiredXor)", + "endLine": 6, + "endColumn": 12, + "ruleDescription": "Array items not unique", "phase": "SCHEMA", "context": { - "resolutionSource": "Fn::If on condition 'isPrimaryAndProduction'" + "actualValue": [ + "arn:aws:iam::012345678901:role/SameRole", + "arn:aws:iam::012345678901:role/SameRole" + ] } + } + ] + }, + "good/E3019_identity_no_false_positive.yaml": { + "filePath": "good/E3019_identity_no_false_positive.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 10, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'isPrimary' to False. Where existing status for condition 'isPrimaryAndProduction' is True", - "source": "CFN_LINT", - "entity": { - "logicalId": "myInstance2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.BlockDeviceMappings.Fn::If.1.0.VirtualName.Fn::If.2", - "category": "Best Practice", - "startLine": 44, - "startColumn": 19, - "endLine": 44, - "endColumn": 20, - "ruleDescription": "Check Fn::If has a path that cannot be reached", - "phase": "LINT" - }, - { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'isPrimary' to False. Where existing status for condition 'isPrimaryAndProduction' is True", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "myInstance4", + "logicalId": "BucketA", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.InstanceType.Fn::If.1.Fn::If.2", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 74, - "startColumn": 13, - "endLine": 74, - "endColumn": 14, - "ruleDescription": "Check Fn::If has a path that cannot be reached", - "phase": "LINT" - }, - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "AMIIDLookup", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 111, - "startColumn": 7, - "endLine": 111, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "startLine": 13, + "startColumn": 18, + "endLine": 13, + "endColumn": 28, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only", + "resolutionSource": "parameter 'NameA' (type String)" } }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'isNotProduction' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "isNotProduction", - "entityType": "Condition" + "logicalId": "BucketB", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Conditions/isNotProduction", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 17, - "startColumn": 3, - "endLine": 17, - "endColumn": 18, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" + "startLine": 16, + "startColumn": 18, + "endLine": 16, + "endColumn": 28, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'NameB' (type String)" + } }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'isPrimaryAndProdOrStage' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "isPrimaryAndProdOrStage", - "entityType": "Condition" + "logicalId": "CompoundSub", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Conditions/isPrimaryAndProdOrStage", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 19, - "startColumn": 3, - "endLine": 19, - "endColumn": 26, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" + "startLine": 20, + "startColumn": 18, + "endLine": 20, + "endColumn": 28, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:${NameA}-suffix)" + } }, { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance1", + "logicalId": "ConditionalLeft", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 31, - "startColumn": 7, - "endLine": 31, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", - "phase": "LINT" + "propertyPath": "Properties.BucketName", + "category": "Best Practice", + "startLine": 25, + "startColumn": 18, + "endLine": 25, + "endColumn": 28, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance2", + "logicalId": "ConditionalRight", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", - "phase": "LINT" + "propertyPath": "Properties.BucketName", + "category": "Best Practice", + "startLine": 29, + "startColumn": 18, + "endLine": 29, + "endColumn": 28, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BucketA' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myInstance3", + "logicalId": "BucketA", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 53, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 13, "startColumn": 5, - "endLine": 53, + "endLine": 13, "endColumn": 15, - "ruleDescription": "Hardcoded AMI ID", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BucketB' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myInstance4", + "logicalId": "BucketB", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 67, - "startColumn": 7, - "endLine": 67, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'CompoundSub' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySubnet", + "logicalId": "CompoundSub", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 25, - "startColumn": 7, - "endLine": 25, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 20, + "startColumn": 5, + "endLine": 20, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'ConditionalLeft' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySubnet", + "logicalId": "ConditionalLeft", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 26, - "startColumn": 7, - "endLine": 26, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 25, + "startColumn": 5, + "endLine": 25, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'ConditionalRight' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myInstance1", + "logicalId": "ConditionalRight", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 30, - "startColumn": 7, - "endLine": 30, + "startLine": 29, + "startColumn": 5, + "endLine": 29, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'isDevelopment'" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/E3022_multi_element_join_distinct.yaml": { + "filePath": "good/E3022_multi_element_join_distinct.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 6, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I1022", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", "entity": { - "logicalId": "myInstance1", + "logicalId": "MultiElementJoinA", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 31, + "propertyPath": "Properties.SubnetId.Fn::Join", + "category": "Intrinsic Function", + "startLine": 10, "startColumn": 7, - "endLine": 31, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I1022", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", "entity": { - "logicalId": "myInstance2", + "logicalId": "MultiElementJoinB", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 35, + "propertyPath": "Properties.SubnetId.Fn::Join", + "category": "Intrinsic Function", + "startLine": 15, "startColumn": 7, - "endLine": 35, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 15, + "endColumn": 15, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance2", + "logicalId": "MultiElementJoinA", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.BlockDeviceMappings", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 36, + "startLine": 9, "startColumn": 7, - "endLine": 36, - "endColumn": 26, + "endLine": 9, + "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Fn::If on condition 'isPrimaryAndProduction'" + "lifecycle": "create-only", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance4", + "logicalId": "MultiElementJoinA", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 67, + "startLine": 10, "startColumn": 7, - "endLine": 67, - "endColumn": 14, + "endLine": 10, + "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'isProduction'" + "resolutionSource": "dynamic (Join:{dynamic}-a)", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance4", + "logicalId": "MultiElementJoinB", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 68, + "startLine": 14, "startColumn": 7, - "endLine": 68, + "endLine": 14, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Fn::If on condition 'isPrimaryAndProduction'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LambdaExecutionRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Path", - "category": "Best Practice", - "startLine": 91, - "startColumn": 7, - "endLine": 91, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "InstanceProfile", + "logicalId": "MultiElementJoinB", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 96, + "startLine": 15, "startColumn": 7, - "endLine": 96, - "endColumn": 11, + "endLine": 15, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:{dynamic}-b)", + "extra": { + "replacement_strategy": "delete_then_create" + } } + } + ] + }, + "good/E3031_cognito_user_pool_domain_pattern.yaml": { + "filePath": "good/E3031_cognito_user_pool_domain_pattern.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 8, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'mySubnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "mySubnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 24, - "startColumn": 5, - "endLine": 24, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myInstance1' of type 'AWS::EC2::Instance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "myInstance1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 29, - "startColumn": 5, - "endLine": 29, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myInstance2' of type 'AWS::EC2::Instance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "myInstance2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 34, - "startColumn": 5, - "endLine": 34, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myInstance3' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance3", + "logicalId": "HostedUiPrefix", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Cognito::UserPoolDomain" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.UserPoolId", "category": "Best Practice", - "startLine": 53, - "startColumn": 5, - "endLine": 53, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 18, + "startColumn": 7, + "endLine": 18, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserPool'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myInstance4' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Property 'Domain' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance4", + "logicalId": "HostedUiPrefix", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Cognito::UserPoolDomain" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Domain", "category": "Best Practice", - "startLine": 66, - "startColumn": 5, - "endLine": 66, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 19, + "startColumn": 7, + "endLine": 19, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaExecutionRole", + "logicalId": "SingleCharacterPrefix", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Cognito::UserPoolDomain" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.UserPoolId", "category": "Best Practice", - "startLine": 79, - "startColumn": 5, - "endLine": 79, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserPool'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'AMIIDLookup' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'Domain' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AMIIDLookup", + "logicalId": "SingleCharacterPrefix", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Cognito::UserPoolDomain" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Domain", "category": "Best Practice", - "startLine": 101, - "startColumn": 5, - "endLine": 101, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/core/config_cfn_lint.json": { - "filePath": "good/core/config_cfn_lint.json", - "status": "OK", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "startLine": 16, - "startColumn": 2, - "endLine": 16, - "endColumn": 12, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" - } - ] - }, - "good/core/config_cfn_lint.yaml": { - "filePath": "good/core/config_cfn_lint.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "startLine": 11, - "startColumn": 1, - "endLine": 11, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" - } - ] - }, - "good/core/config_default_e3012.yaml": { - "filePath": "good/core/config_default_e3012.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 3, - "debug": 0 + "startLine": 24, + "startColumn": 7, + "endLine": 24, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W9003", - "severity": "WARN", - "message": "'5' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "myTable", + "logicalId": "CustomDomain", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Cognito::UserPoolDomain" }, - "propertyPath": "Properties.ProvisionedThroughput.WriteCapacityUnits", + "propertyPath": "Properties.UserPoolId", "category": "Best Practice", - "startLine": 20, - "startColumn": 9, - "endLine": 20, - "endColumn": 27, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 28, + "startColumn": 7, + "endLine": 28, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserPool'" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "message": "Property 'Domain' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myTable", + "logicalId": "CustomDomain", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Cognito::UserPoolDomain" }, - "propertyPath": "Properties.TableName", + "propertyPath": "Properties.Domain", "category": "Best Practice", - "startLine": 11, + "startLine": 29, "startColumn": 7, - "endLine": 11, - "endColumn": 16, + "endLine": 29, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -18724,54 +18237,60 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myTable", + "logicalId": "ConditionallyCustomDomain", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Cognito::UserPoolDomain" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.UserPoolId", "category": "Best Practice", - "startLine": 15, + "startLine": 35, "startColumn": 7, - "endLine": 15, - "endColumn": 16, + "endLine": 35, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserPool'" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'Domain' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myTable", + "logicalId": "ConditionallyCustomDomain", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Cognito::UserPoolDomain" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Domain", "category": "Best Practice", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 36, + "startColumn": 7, + "endLine": 36, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseCustomDomain'" + } } ] }, - "good/core/config_only_i1002.yaml": { - "filePath": "good/core/config_only_i1002.yaml", + "good/E3663_custom_environment_key.yaml": { + "filePath": "good/E3663_custom_environment_key.yaml", "status": "OK", "metadata": { - "resourcesScanned": 0, + "resourcesScanned": 1, "counts": { - "fatal": 1, + "fatal": 0, "errors": 0, "warnings": 0, "informational": 0, @@ -18781,32 +18300,18 @@ "strict": false, "severityLevel": "DEBUG" }, - "diagnostics": [ - { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "startLine": 8, - "startColumn": 1, - "endLine": 8, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" - } - ] + "diagnostics": [] }, - "good/core/config_only_i1003.yaml": { - "filePath": "good/core/config_only_i1003.yaml", + "good/E3680_alb_subnet_counts.yaml": { + "filePath": "good/E3680_alb_subnet_counts.yaml", "status": "OK", "metadata": { - "resourcesScanned": 0, + "resourcesScanned": 9, "counts": { - "fatal": 1, + "fatal": 0, "errors": 0, "warnings": 0, - "informational": 0, + "informational": 19, "debug": 0 }, "suppressed": 0, @@ -18815,160 +18320,134 @@ }, "diagnostics": [ { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "startLine": 8, - "startColumn": 1, - "endLine": 8, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" - } - ] - }, - "good/core/config_parameters.yaml": { - "filePath": "good/core/config_parameters.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Vpc", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "startLine": 8, - "startColumn": 1, - "endLine": 8, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" - } - ] - }, - "good/core/directives.yaml": { - "filePath": "good/core/directives.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc'" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyKey", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::KMS::Key" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 8, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 22, + "startColumn": 7, + "endLine": 22, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyKey", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::KMS::Key" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 8, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 26, + "startColumn": 7, + "endLine": 26, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyKey' of type 'AWS::KMS::Key' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyKey", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::KMS::Key" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 8, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/core/resource_attributes.yaml": { - "filePath": "good/core/resource_attributes.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 8, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 11, - "debug": 0 + "startLine": 27, + "startColumn": 7, + "endLine": 27, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CommonCfnAttributes", + "logicalId": "AlbTwoSubnets", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 26, + "startLine": 31, "startColumn": 7, - "endLine": 26, - "endColumn": 17, + "endLine": 31, + "endColumn": 11, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -18978,19 +18457,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DependsOnSingleString", + "logicalId": "AlbSubnetsFromParameter", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 33, + "startLine": 44, "startColumn": 7, - "endLine": 33, - "endColumn": 17, + "endLine": 44, + "endColumn": 11, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -19000,19 +18480,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DependsOnList", + "logicalId": "NlbOneSubnet", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 42, + "startLine": 49, "startColumn": 7, - "endLine": 42, - "endColumn": 17, + "endLine": 49, + "endColumn": 11, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -19022,41 +18503,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchTemplate' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AutoScalingGroupWithPolicies", + "logicalId": "GatewayOneSubnet", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.LaunchTemplate", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 63, + "startLine": 55, "startColumn": 7, - "endLine": 63, - "endColumn": 21, + "endLine": 55, + "endColumn": 11, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BucketWithTransform", + "logicalId": "ParameterTypedOneSubnet", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 82, + "startLine": 61, "startColumn": 7, - "endLine": 82, - "endColumn": 17, + "endLine": 61, + "endColumn": 11, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -19066,12 +18549,52 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CommonCfnAttributes' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CommonCfnAttributes", + "logicalId": "Vpc", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SubnetA' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 20, + "startColumn": 5, + "endLine": 20, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SubnetB' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -19086,19 +18609,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DependsOnSingleString' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'AlbTwoSubnets' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DependsOnSingleString", + "logicalId": "AlbTwoSubnets", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 32, + "startLine": 30, "startColumn": 5, - "endLine": 32, + "endLine": 30, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19106,19 +18629,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DependsOnList' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'AlbDefaultTypeTwoSubnetMappings' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DependsOnList", + "logicalId": "AlbDefaultTypeTwoSubnetMappings", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 41, + "startLine": 37, "startColumn": 5, - "endLine": 41, + "endLine": 37, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19126,19 +18649,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'AutoScalingGroupWithPolicies' of type 'AWS::AutoScaling::AutoScalingGroup' supports Tags but none are configured", + "message": "Resource 'AlbSubnetsFromParameter' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AutoScalingGroupWithPolicies", + "logicalId": "AlbSubnetsFromParameter", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 60, + "startLine": 43, "startColumn": 5, - "endLine": 60, + "endLine": 43, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19146,19 +18669,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BucketWithTransform' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'NlbOneSubnet' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BucketWithTransform", + "logicalId": "NlbOneSubnet", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 81, + "startLine": 48, "startColumn": 5, - "endLine": 81, + "endLine": 48, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19166,35 +18689,116 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BucketWithConnectors' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'GatewayOneSubnet' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BucketWithConnectors", + "logicalId": "GatewayOneSubnet", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 54, + "startColumn": 5, + "endLine": 54, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ParameterTypedOneSubnet' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ParameterTypedOneSubnet", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 60, + "startColumn": 5, + "endLine": 60, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/E9001_aws_cdk_metadata.yaml": { + "filePath": "good/E9001_aws_cdk_metadata.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.BucketName", + "category": "Best Practice", + "startLine": 18, + "startColumn": 7, + "endLine": 18, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "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::Serverless::Function" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 94, + "startLine": 17, "startColumn": 5, - "endLine": 94, + "endLine": 17, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/custom/is-defined.yaml": { - "filePath": "good/custom/is-defined.yaml", + "good/E9002_port_range_exemptions.yaml": { + "filePath": "good/E9002_port_range_exemptions.yaml", "status": "OK", "metadata": { - "resourcesScanned": 7, + "resourcesScanned": 5, "counts": { - "fatal": 2, + "fatal": 0, "errors": 0, - "warnings": 12, - "informational": 8, + "warnings": 0, + "informational": 20, "debug": 0 }, "suppressed": 0, @@ -19203,410 +18807,436 @@ }, "diagnostics": [ { - "ruleId": "F0005", - "severity": "FATAL", - "message": "'Parameter' is not a valid top-level template section", - "source": "SCHEMA", - "propertyPath": "Parameter", - "category": "Structure", - "startLine": 4, - "startColumn": 1, - "endLine": 4, - "endColumn": 10, - "ruleDescription": "Top-level keys must be valid section names", - "phase": "SCHEMA" - }, - { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'NodeEnv' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'LambdaExecutionRole', 'LambdaFunctionTestDefinedArray', 'LambdaFunctionTestDefinedEmpty', 'LambdaFunctionTestDefinedGetAttr', 'LambdaFunctionTestDefinedObject', 'LambdaFunctionTestDefinedRef', 'LambdaFunctionTestDefinedValue']", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedRef", + "logicalId": "Vpc", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Environment.Variables.NODE_ENV", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 70, - "startColumn": 11, - "endLine": 70, - "endColumn": 19, - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedArray", + "logicalId": "SecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 32, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 14, "startColumn": 7, - "endLine": 32, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 14, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedEmpty", + "logicalId": "SecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 42, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 15, "startColumn": 7, - "endLine": 42, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 15, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc'" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedGetAttr", + "logicalId": "StandaloneIngressIcmpTypeCode", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 52, + "propertyPath": "Properties.GroupId", + "category": "Best Practice", + "startLine": 28, "startColumn": 7, - "endLine": 52, + "endLine": 28, "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SecurityGroup'" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedObject", + "logicalId": "StandaloneIngressIcmpTypeCode", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 63, + "propertyPath": "Properties.IpProtocol", + "category": "Best Practice", + "startLine": 29, "startColumn": 7, - "endLine": 63, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 29, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedRef", + "logicalId": "StandaloneIngressIcmpTypeCode", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 73, + "propertyPath": "Properties.FromPort", + "category": "Best Practice", + "startLine": 30, "startColumn": 7, - "endLine": 73, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 30, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedValue", + "logicalId": "StandaloneIngressIcmpTypeCode", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 83, + "propertyPath": "Properties.ToPort", + "category": "Best Practice", + "startLine": 31, "startColumn": 7, - "endLine": 83, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 31, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W3002", - "severity": "WARN", - "message": "This code may only work with 'package' cli command", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedArray", + "logicalId": "StandaloneIngressIcmpTypeCode", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Code", + "propertyPath": "Properties.CidrIp", "category": "Best Practice", - "startLine": 24, + "startLine": 32, "startColumn": 7, - "endLine": 24, - "endColumn": 11, - "ruleDescription": "Warn when properties are configured to only work with the package command", - "phase": "LINT" + "endLine": 32, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3002", - "severity": "WARN", - "message": "This code may only work with 'package' cli command", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedEmpty", + "logicalId": "StandaloneIngressIcmpv6TypeCode", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Code", + "propertyPath": "Properties.GroupId", "category": "Best Practice", "startLine": 36, "startColumn": 7, "endLine": 36, - "endColumn": 11, - "ruleDescription": "Warn when properties are configured to only work with the package command", - "phase": "LINT" + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SecurityGroup'" + } }, { - "ruleId": "W3002", - "severity": "WARN", - "message": "This code may only work with 'package' cli command", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedGetAttr", + "logicalId": "StandaloneIngressIcmpv6TypeCode", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Code", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 46, + "startLine": 37, "startColumn": 7, - "endLine": 46, - "endColumn": 11, - "ruleDescription": "Warn when properties are configured to only work with the package command", - "phase": "LINT" + "endLine": 37, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3002", - "severity": "WARN", - "message": "This code may only work with 'package' cli command", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedObject", + "logicalId": "StandaloneIngressIcmpv6TypeCode", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Code", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 56, + "startLine": 38, "startColumn": 7, - "endLine": 56, - "endColumn": 11, - "ruleDescription": "Warn when properties are configured to only work with the package command", - "phase": "LINT" + "endLine": 38, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3002", - "severity": "WARN", - "message": "This code may only work with 'package' cli command", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedRef", + "logicalId": "StandaloneIngressIcmpv6TypeCode", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Code", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 67, + "startLine": 39, "startColumn": 7, - "endLine": 67, - "endColumn": 11, - "ruleDescription": "Warn when properties are configured to only work with the package command", - "phase": "LINT" + "endLine": 39, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3002", - "severity": "WARN", - "message": "This code may only work with 'package' cli command", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrIpv6' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedValue", + "logicalId": "StandaloneIngressIcmpv6TypeCode", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Code", + "propertyPath": "Properties.CidrIpv6", "category": "Best Practice", - "startLine": 77, + "startLine": 40, "startColumn": 7, - "endLine": 77, - "endColumn": 11, - "ruleDescription": "Warn when properties are configured to only work with the package command", - "phase": "LINT" + "endLine": 40, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaExecutionRole", + "logicalId": "StandaloneEgressAscendingRange", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 20, + "startLine": 44, "startColumn": 7, - "endLine": 20, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 44, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SecurityGroup'" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaExecutionRole", + "logicalId": "StandaloneEgressAscendingRange", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 45, + "startColumn": 7, + "endLine": 45, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LambdaFunctionTestDefinedArray' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedArray", + "logicalId": "StandaloneEgressAscendingRange", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 23, - "startColumn": 5, - "endLine": 23, + "startLine": 46, + "startColumn": 7, + "endLine": 46, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LambdaFunctionTestDefinedEmpty' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedEmpty", + "logicalId": "StandaloneEgressAscendingRange", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 35, - "startColumn": 5, - "endLine": 35, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 47, + "startColumn": 7, + "endLine": 47, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LambdaFunctionTestDefinedGetAttr' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedGetAttr", + "logicalId": "StandaloneEgressAscendingRange", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrIp", "category": "Best Practice", - "startLine": 45, - "startColumn": 5, - "endLine": 45, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 48, + "startColumn": 7, + "endLine": 48, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LambdaFunctionTestDefinedObject' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedObject", + "logicalId": "Vpc", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 55, + "startLine": 9, "startColumn": 5, - "endLine": 55, + "endLine": 9, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19614,54 +19244,73 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LambdaFunctionTestDefinedRef' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'SecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedRef", + "logicalId": "SecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 66, + "startLine": 13, "startColumn": 5, - "endLine": 66, + "endLine": 13, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/W1028_pseudo_param_branches_reachable.yaml": { + "filePath": "good/W1028_pseudo_param_branches_reachable.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LambdaFunctionTestDefinedValue' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'KubectlHandlerRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedValue", + "logicalId": "KubectlHandlerRole", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 76, + "startLine": 20, "startColumn": 5, - "endLine": 76, + "endLine": 20, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/custom/is-not-defined.yaml": { - "filePath": "good/custom/is-not-defined.yaml", + "good/W3010_getazs_not_flagged.yaml": { + "filePath": "good/W3010_getazs_not_flagged.yaml", "status": "OK", "metadata": { - "resourcesScanned": 5, + "resourcesScanned": 2, "counts": { "fatal": 0, "errors": 0, - "warnings": 8, + "warnings": 0, "informational": 6, "debug": 0 }, @@ -19671,190 +19320,242 @@ }, "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZones' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestNotDefinedFromParent", + "logicalId": "Elb", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 26, + "propertyPath": "Properties.AvailabilityZones", + "category": "Best Practice", + "startLine": 8, "startColumn": 7, - "endLine": 26, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 8, + "endColumn": 24, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestNotDefinedFromProperties", + "logicalId": "Subnet", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 33, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 16, "startColumn": 7, - "endLine": 33, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 16, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestNotDefinedRefAWSNoValue", + "logicalId": "Subnet", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 43, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 17, "startColumn": 7, - "endLine": 43, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 17, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestNotDefinedWithSiblings", + "logicalId": "Subnet", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 53, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 18, "startColumn": 7, - "endLine": 53, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 18, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W3002", - "severity": "WARN", - "message": "This code may only work with 'package' cli command", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Elb' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestNotDefinedFromParent", + "logicalId": "Elb", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" }, - "propertyPath": "Properties.Code", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 21, - "startColumn": 7, - "endLine": 21, - "endColumn": 11, - "ruleDescription": "Warn when properties are configured to only work with the package command", + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3002", - "severity": "WARN", - "message": "This code may only work with 'package' cli command", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Subnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestNotDefinedFromProperties", + "logicalId": "Subnet", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Code", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 30, - "startColumn": 7, - "endLine": 30, - "endColumn": 11, - "ruleDescription": "Warn when properties are configured to only work with the package command", + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 15, + "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", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 9, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Authorizer1", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Authorizer" + }, + "propertyPath": "Properties.RestApiId", + "category": "Best Practice", + "startLine": 19, + "startColumn": 7, + "endLine": 19, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt RestApi1.RestApiId" + } }, { - "ruleId": "W3002", - "severity": "WARN", - "message": "This code may only work with 'package' cli command", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestNotDefinedRefAWSNoValue", + "logicalId": "Method1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Code", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 37, + "startLine": 25, "startColumn": 7, - "endLine": 37, - "endColumn": 11, - "ruleDescription": "Warn when properties are configured to only work with the package command", - "phase": "LINT" + "endLine": 25, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'RestApi1'" + } }, { - "ruleId": "W3002", - "severity": "WARN", - "message": "This code may only work with 'package' cli command", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestNotDefinedWithSiblings", + "logicalId": "Method1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Code", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 47, + "startLine": 26, "startColumn": 7, - "endLine": 47, - "endColumn": 11, - "ruleDescription": "Warn when properties are configured to only work with the package command", - "phase": "LINT" + "endLine": 26, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt RestApi1.RootResourceId" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaExecutionRole", + "logicalId": "Method1", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 17, + "startLine": 27, "startColumn": 7, - "endLine": 17, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 27, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -19862,81 +19563,92 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaExecutionRole", + "logicalId": "Deployment1", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 36, + "startColumn": 7, + "endLine": 36, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt RestApi1.RestApiId" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LambdaFunctionTestNotDefinedFromParent' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestNotDefinedFromParent", + "logicalId": "Stage1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 40, + "startColumn": 7, + "endLine": 40, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'RestApi1'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LambdaFunctionTestNotDefinedFromProperties' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestNotDefinedFromProperties", + "logicalId": "Stage1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 29, - "startColumn": 5, - "endLine": 29, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 42, + "startColumn": 7, + "endLine": 42, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LambdaFunctionTestNotDefinedRefAWSNoValue' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'RestApi1' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestNotDefinedRefAWSNoValue", + "logicalId": "RestApi1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::RestApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 36, + "startLine": 12, "startColumn": 5, - "endLine": 36, + "endLine": 12, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19944,35 +19656,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LambdaFunctionTestNotDefinedWithSiblings' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'Stage1' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestNotDefinedWithSiblings", + "logicalId": "Stage1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 46, + "startLine": 39, "startColumn": 5, - "endLine": 46, + "endLine": 39, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/custom/numeric-inequalities-large.yaml": { - "filePath": "good/custom/numeric-inequalities-large.yaml", + "good/aurora_dbinstance.yaml": { + "filePath": "good/aurora_dbinstance.yaml", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 2, - "warnings": 3, - "informational": 4, + "errors": 0, + "warnings": 0, + "informational": 8, "debug": 0 }, "suppressed": 0, @@ -19981,125 +19693,81 @@ }, "diagnostics": [ { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "TimeoutInNumericsFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 27, - "startColumn": 7, - "endLine": 27, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs4.3", - "lifecycle": "end-of-life" - } - }, - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "TimeoutInStringFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs4.3", - "lifecycle": "end-of-life" - } - }, - { - "ruleId": "W3002", - "severity": "WARN", - "message": "This code may only work with 'package' cli command", + "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": "TimeoutInNumericsFunction", + "logicalId": "AuroraDB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Code", "category": "Best Practice", - "startLine": 26, - "startColumn": 7, - "endLine": 26, + "startLine": 3, + "startColumn": 3, + "endLine": 3, "endColumn": 11, - "ruleDescription": "Warn when properties are configured to only work with the package command", + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W3002", - "severity": "WARN", - "message": "This code may only work with 'package' cli command", + "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": "TimeoutInStringFunction", + "logicalId": "AuroraDB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Code", "category": "Best Practice", - "startLine": 34, - "startColumn": 7, - "endLine": 34, + "startLine": 3, + "startColumn": 3, + "endLine": 3, "endColumn": 11, - "ruleDescription": "Warn when properties are configured to only work with the package command", + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'100' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "TimeoutInStringFunction", + "logicalId": "AuroraDB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Timeout", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 36, + "startLine": 6, "startColumn": 7, - "endLine": 36, - "endColumn": 14, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 6, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaExecutionRole", + "logicalId": "AuroraDB", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.DBClusterIdentifier", "category": "Best Practice", - "startLine": 20, + "startLine": 7, "startColumn": 7, - "endLine": 20, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 7, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -20107,77 +19775,89 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaExecutionRole", + "logicalId": "AuroraDB", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BackupRetentionPeriod", "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 28, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9002", "severity": "INFO", - "message": "Resource 'TimeoutInNumericsFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "'BackupRetentionPeriod' is ignored in this configuration (from extension)", "source": "ENGINE", "entity": { - "logicalId": "TimeoutInNumericsFunction", + "logicalId": "AuroraDB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BackupRetentionPeriod", "category": "Best Practice", - "startLine": 23, - "startColumn": 5, - "endLine": 23, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 28, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Property is ignored in this configuration (from extension)", + "phase": "SCHEMA" + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TimeoutInStringFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'AuroraDB' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TimeoutInStringFunction", + "logicalId": "AuroraDB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 31, + "startLine": 5, "startColumn": 5, - "endLine": 31, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/custom/numeric-inequalities-small.yaml": { - "filePath": "good/custom/numeric-inequalities-small.yaml", + "good/both_forms.yaml": { + "filePath": "good/both_forms.yaml", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 13, "counts": { "fatal": 0, - "errors": 2, - "warnings": 3, - "informational": 4, + "errors": 0, + "warnings": 1, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -20186,203 +19866,159 @@ }, "diagnostics": [ { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "TimeoutInNumericsFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 27, - "startColumn": 7, - "endLine": 27, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs4.3", - "lifecycle": "end-of-life" - } - }, - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "TimeoutInStringFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs4.3", - "lifecycle": "end-of-life" - } - }, - { - "ruleId": "W3002", - "severity": "WARN", - "message": "This code may only work with 'package' cli command", - "source": "CFN_LINT", - "entity": { - "logicalId": "TimeoutInNumericsFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Code", - "category": "Best Practice", - "startLine": 26, - "startColumn": 7, - "endLine": 26, - "endColumn": 11, - "ruleDescription": "Warn when properties are configured to only work with the package command", - "phase": "LINT" - }, - { - "ruleId": "W3002", - "severity": "WARN", - "message": "This code may only work with 'package' cli command", - "source": "CFN_LINT", - "entity": { - "logicalId": "TimeoutInStringFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Code", - "category": "Best Practice", - "startLine": 34, - "startColumn": 7, - "endLine": 34, - "endColumn": 11, - "ruleDescription": "Warn when properties are configured to only work with the package command", - "phase": "LINT" - }, - { - "ruleId": "W9003", + "ruleId": "W8001", "severity": "WARN", - "message": "'9' is not of type 'integer' - automatically coerced (string to integer)", + "message": "Condition 'Combined' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "TimeoutInStringFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "logicalId": "Combined", + "entityType": "Condition" }, - "propertyPath": "Properties.Timeout", + "propertyPath": "Conditions/Combined", "category": "Best Practice", - "startLine": 36, - "startColumn": 7, - "endLine": 36, - "endColumn": 14, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 11, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaExecutionRole", + "logicalId": "BucketShort", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.BucketName", "category": "Best Practice", "startLine": 20, "startColumn": 7, "endLine": 20, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaExecutionRole", + "logicalId": "BucketLong", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 27, + "startColumn": 7, + "endLine": 27, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" + } + } + ] + }, + "good/cdk_bootstrap_version_rule.json": { + "filePath": "good/cdk_bootstrap_version_rule.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TimeoutInNumericsFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TimeoutInNumericsFunction", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 23, - "startColumn": 5, - "endLine": 23, - "endColumn": 15, + "startLine": 13, + "startColumn": 7, + "endLine": 13, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/cloudfront_valid.yaml": { + "filePath": "good/cloudfront_valid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TimeoutInStringFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'Distribution' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TimeoutInStringFunction", + "logicalId": "Distribution", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::CloudFront::Distribution" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 31, + "startLine": 5, "startColumn": 5, - "endLine": 31, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/decode/parsing.json": { - "filePath": "good/decode/parsing.json", + "good/codepipeline_artifact_counts.yaml": { + "filePath": "good/codepipeline_artifact_counts.yaml", "status": "OK", "metadata": { - "resourcesScanned": 0, + "resourcesScanned": 1, "counts": { - "fatal": 1, + "fatal": 0, "errors": 0, "warnings": 1, - "informational": 0, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -20391,66 +20027,56 @@ }, "diagnostics": [ { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "startLine": 8, - "startColumn": 3, - "endLine": 8, - "endColumn": 13, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", + "entity": { + "logicalId": "Pipeline", + "entityType": "Resource", + "resourceType": "AWS::CodePipeline::Pipeline" + }, + "propertyPath": "Properties.RoleArn", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 14, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'VPN' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Pipeline' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "VPN", - "entityType": "Parameter" + "logicalId": "Pipeline", + "entityType": "Resource", + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Parameters/VPN", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 3, + "startLine": 5, "startColumn": 5, - "endLine": 3, - "endColumn": 9, - "ruleDescription": "Check if Parameters are Used", + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/decode/yaml11_scalars.yaml": { - "filePath": "good/decode/yaml11_scalars.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "good/deletion_policies.yaml": { - "filePath": "good/deletion_policies.yaml", + "good/complex_conditions.yaml": { + "filePath": "good/complex_conditions.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 3, "counts": { "fatal": 0, "errors": 0, - "warnings": 4, - "informational": 7, + "warnings": 2, + "informational": 12, "debug": 0 }, "suppressed": 0, @@ -20464,73 +20090,53 @@ "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", "source": "CFN_LINT", "entity": { - "logicalId": "DB", + "logicalId": "Database", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.MasterUserPassword", "category": "Security", - "startLine": 12, + "startLine": 38, "startColumn": 7, - "endLine": 12, + "endLine": 38, "endColumn": 25, "ruleDescription": "Check if Password Properties are correctly configured", "phase": "LINT" }, { - "ruleId": "W3011", + "ruleId": "W8001", "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "message": "Condition 'IsNotProd' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "logicalId": "IsNotProd", + "entityType": "Condition" }, + "propertyPath": "Conditions/IsNotProd", "category": "Best Practice", - "startLine": 3, + "startLine": 20, "startColumn": 3, - "endLine": 3, - "endColumn": 9, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "endLine": 20, + "endColumn": 12, + "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "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": "DB", + "logicalId": "Database", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, "category": "Best Practice", - "startLine": 6, + "startLine": 31, "startColumn": 3, - "endLine": 6, - "endColumn": 5, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", - "phase": "LINT" - }, - { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", - "entity": { - "logicalId": "DB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", + "endLine": 31, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { @@ -20539,33 +20145,56 @@ "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": "DB", + "logicalId": "Database", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, "category": "Best Practice", - "startLine": 6, + "startLine": 31, "startColumn": 3, - "endLine": 6, - "endColumn": 5, + "endLine": 31, + "endColumn": 11, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.BucketName", + "category": "Best Practice", + "startLine": 26, + "startColumn": 7, + "endLine": 26, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" + } + }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DB", + "logicalId": "Database", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 10, + "startLine": 36, "startColumn": 7, - "endLine": 10, + "endLine": 36, "endColumn": 13, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -20580,15 +20209,15 @@ "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DB", + "logicalId": "Database", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 11, + "startLine": 37, "startColumn": 7, - "endLine": 11, + "endLine": 37, "endColumn": 21, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -20597,21 +20226,44 @@ "lifecycle": "create-only" } }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Database", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 39, + "startColumn": 7, + "endLine": 39, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DB", + "logicalId": "Database", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.BackupRetentionPeriod", "category": "Best Practice", - "startLine": 14, + "startLine": 41, "startColumn": 7, - "endLine": 14, + "endLine": 41, "endColumn": 28, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -20620,6 +20272,28 @@ "lifecycle": "conditional-create-only" } }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "DevBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.BucketName", + "category": "Best Practice", + "startLine": 46, + "startColumn": 7, + "endLine": 46, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, { "ruleId": "I9003", "severity": "INFO", @@ -20642,227 +20316,111 @@ "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 9, + "startLine": 25, + "startColumn": 5, + "endLine": 25, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DB' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Resource 'Database' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DB", + "logicalId": "Database", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, + "startLine": 34, "startColumn": 5, - "endLine": 9, + "endLine": 34, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/dynamodb_provisioned.yaml": { - "filePath": "good/dynamodb_provisioned.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 5, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "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": "DDBTable", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "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": "DDBTable", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DDBTable", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.TableName", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DDBTable", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.KeySchema", - "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DDBTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'DevBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DDBTable", + "logicalId": "DevBucket", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 45, "startColumn": 5, - "endLine": 5, + "endLine": 45, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/dynamodb_valid_attributes.yaml": { - "filePath": "good/dynamodb_valid_attributes.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 5, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "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": "GoodTable", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "good/conditional_constraints_composite_keys_and_monitoring.yaml": { + "filePath": "good/conditional_constraints_composite_keys_and_monitoring.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 7, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 18, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "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", + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'MonitoringRoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", "entity": { - "logicalId": "GoodTable", + "logicalId": "ClusterWithEnhancedMonitoring", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBCluster" }, + "propertyPath": "Properties.MonitoringRoleArn", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 103, + "startColumn": 7, + "endLine": 103, + "endColumn": 24, + "ruleDescription": "Hardcoded ARN property", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GoodTable", + "logicalId": "TableWithLsiCompositeKey", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.TableName", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 6, + "startLine": 20, "startColumn": 7, - "endLine": 6, + "endLine": 20, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { @@ -20871,15 +20429,15 @@ "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GoodTable", + "logicalId": "TableWithoutIndexesSimpleKey", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 13, + "startLine": 43, "startColumn": 7, - "endLine": 13, + "endLine": 43, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -20887,284 +20445,228 @@ "lifecycle": "conditional-create-only" } }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'GoodTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "GoodTable", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/ecs_awsvpc_valid.yaml": { - "filePath": "good/ecs_awsvpc_valid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Task", + "logicalId": "GlobalTableWithLsiCompositeKey", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::GlobalTable" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 6, + "startLine": 59, "startColumn": 7, - "endLine": 6, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 59, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'LocalSecondaryIndexes' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Task", + "logicalId": "GlobalTableWithLsiCompositeKey", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::GlobalTable" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.LocalSecondaryIndexes", "category": "Best Practice", - "startLine": 7, + "startLine": 65, "startColumn": 7, - "endLine": 7, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 65, + "endColumn": 28, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Task' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Task", + "logicalId": "MysqlClusterAdminUsername", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/ecs_fargate.yaml": { - "filePath": "good/ecs_fargate.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 9, - "debug": 0 + "startLine": 81, + "startColumn": 7, + "endLine": 81, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "MysqlClusterAdminUsername", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 6, + "startLine": 82, "startColumn": 7, - "endLine": 6, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 82, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "PostgresClusterOtherUsername", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 7, + "startLine": 90, "startColumn": 7, - "endLine": 7, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 90, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "PostgresClusterOtherUsername", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 9, + "startLine": 91, "startColumn": 7, - "endLine": 9, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 91, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "ClusterWithEnhancedMonitoring", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 10, + "startLine": 99, "startColumn": 7, - "endLine": 10, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 99, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "ClusterWithEnhancedMonitoring", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 11, + "startLine": 100, "startColumn": 7, - "endLine": 11, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 100, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "ClusterWithoutMonitoring", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 12, + "startLine": 110, "startColumn": 7, - "endLine": 12, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 110, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Service", + "logicalId": "ClusterWithoutMonitoring", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.LaunchType", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 19, + "startLine": 111, "startColumn": 7, - "endLine": 19, - "endColumn": 17, + "endLine": 111, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -21174,19 +20676,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'TableWithLsiCompositeKey' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "TableWithLsiCompositeKey", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 12, "startColumn": 5, - "endLine": 5, + "endLine": 12, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21194,239 +20696,235 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Service' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Resource 'TableWithoutIndexesSimpleKey' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Service", + "logicalId": "TableWithoutIndexesSimpleKey", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 18, + "startLine": 39, "startColumn": 5, - "endLine": 18, + "endLine": 39, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/ecs_fargate_ddb_valid.yaml": { - "filePath": "good/ecs_fargate_ddb_valid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 14, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 81, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "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": "PayPerRequestTable", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "category": "Best Practice", - "startLine": 76, - "startColumn": 3, - "endLine": 76, - "endColumn": 21, - "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": "PayPerRequestTable", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "category": "Best Practice", - "startLine": 76, - "startColumn": 3, - "endLine": 76, - "endColumn": 21, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'MysqlClusterAdminUsername' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ProvisionedTable", + "logicalId": "MysqlClusterAdminUsername", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBCluster" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 89, - "startColumn": 3, - "endLine": 89, - "endColumn": 19, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 80, + "startColumn": 5, + "endLine": 80, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'PostgresClusterOtherUsername' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ProvisionedTable", + "logicalId": "PostgresClusterOtherUsername", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBCluster" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 89, - "startColumn": 3, + "startColumn": 5, "endLine": 89, - "endColumn": 19, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'ClusterWithEnhancedMonitoring' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DefaultWithThroughput", + "logicalId": "ClusterWithEnhancedMonitoring", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBCluster" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 105, - "startColumn": 3, - "endLine": 105, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 98, + "startColumn": 5, + "endLine": 98, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'ClusterWithoutMonitoring' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DefaultWithThroughput", + "logicalId": "ClusterWithoutMonitoring", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBCluster" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 105, - "startColumn": 3, - "endLine": 105, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 109, + "startColumn": 5, + "endLine": 109, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/conditional_constraints_within_limits.yaml": { + "filePath": "good/conditional_constraints_within_limits.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 11, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 21, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CorrelatedProvisionedThenOnDemand", + "logicalId": "TokenAuthorizerAtTheLimit", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ApiGateway::Authorizer" }, + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 161, - "startColumn": 3, - "endLine": 161, - "endColumn": 36, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 56, + "startColumn": 7, + "endLine": 56, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'RestApi'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CorrelatedProvisionedThenOnDemand", + "logicalId": "CognitoAuthorizerLongTtl", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ApiGateway::Authorizer" }, + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 161, - "startColumn": 3, - "endLine": 161, - "endColumn": 36, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 65, + "startColumn": 7, + "endLine": 65, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'RestApi'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CorrelatedOnDemandThenProvisioned", + "logicalId": "Deployment", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ApiGateway::Deployment" }, + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 172, - "startColumn": 3, - "endLine": 172, - "endColumn": 36, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 74, + "startColumn": 7, + "endLine": 74, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'RestApi'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CorrelatedOnDemandThenProvisioned", + "logicalId": "StageWithAbsolutePaths", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ApiGateway::Stage" }, + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 172, - "startColumn": 3, - "endLine": 172, - "endColumn": 36, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 78, + "startColumn": 7, + "endLine": 78, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'RestApi'" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ValidFargate", + "logicalId": "StageWithAbsolutePaths", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 11, + "startLine": 80, "startColumn": 7, - "endLine": 11, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 80, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -21436,43 +20934,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ValidFargate", + "logicalId": "AuroraLongBackupRetention", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 12, + "startLine": 95, "startColumn": 7, - "endLine": 12, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 95, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ValidFargate", + "logicalId": "AuroraLongBackupRetention", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.DBClusterIdentifier", "category": "Best Practice", - "startLine": 14, + "startLine": 97, "startColumn": 7, - "endLine": 14, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 97, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -21482,66 +20980,66 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ValidFargate", + "logicalId": "AuroraLongBackupRetention", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.BackupRetentionPeriod", "category": "Best Practice", - "startLine": 15, + "startLine": 98, "startColumn": 7, - "endLine": 15, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 98, + "endColumn": 28, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ValidFargate", + "logicalId": "MysqlBackupRetentionAtTheLimit", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 16, + "startLine": 104, "startColumn": 7, - "endLine": 16, + "endLine": 104, "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ValidFargate", + "logicalId": "MysqlBackupRetentionAtTheLimit", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 17, + "startLine": 107, "startColumn": 7, - "endLine": 17, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 107, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -21551,20 +21049,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ValidFargateSplunk", + "logicalId": "MysqlBackupRetentionAtTheLimit", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 31, + "startLine": 109, "startColumn": 7, - "endLine": 31, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 109, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -21574,476 +21072,575 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ValidFargateSplunk", + "logicalId": "MysqlBackupRetentionAtTheLimit", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.BackupRetentionPeriod", "category": "Best Practice", - "startLine": 32, + "startLine": 110, "startColumn": 7, - "endLine": 32, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 110, + "endColumn": 28, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9002", + "severity": "INFO", + "message": "'BackupRetentionPeriod' is ignored in this configuration (from extension)", + "source": "ENGINE", + "entity": { + "logicalId": "AuroraLongBackupRetention", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.BackupRetentionPeriod", + "category": "Best Practice", + "startLine": 98, + "startColumn": 7, + "endLine": 98, + "endColumn": 28, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Property is ignored in this configuration (from extension)", + "phase": "SCHEMA" + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 11, + "startColumn": 5, + "endLine": 11, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TimeoutAtTheLimit' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "TimeoutAtTheLimit", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 21, + "startColumn": 5, + "endLine": 21, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ManagedInstancesLongTimeout' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ManagedInstancesLongTimeout", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 31, + "startColumn": 5, + "endLine": 31, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Resource 'RestApi' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ValidFargateSplunk", + "logicalId": "RestApi", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::ApiGateway::RestApi" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 34, - "startColumn": 7, - "endLine": 34, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 50, + "startColumn": 5, + "endLine": 50, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Resource 'StageWithAbsolutePaths' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ValidFargateSplunk", + "logicalId": "StageWithAbsolutePaths", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 77, + "startColumn": 5, + "endLine": 77, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Resource 'AuroraLongBackupRetention' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ValidFargateSplunk", + "logicalId": "AuroraLongBackupRetention", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 36, - "startColumn": 7, - "endLine": 36, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 94, + "startColumn": 5, + "endLine": 94, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Resource 'MysqlBackupRetentionAtTheLimit' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ValidFargateSplunk", + "logicalId": "MysqlBackupRetentionAtTheLimit", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 37, - "startColumn": 7, - "endLine": 37, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 103, + "startColumn": 5, + "endLine": 103, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/conditions.yaml": { + "filePath": "good/conditions.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", "source": "ENGINE", "entity": { - "logicalId": "NonFargateTask", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Family", - "category": "Best Practice", - "startLine": 48, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 28, "startColumn": 7, - "endLine": 48, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 28, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NonFargateTask", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 49, + "startLine": 28, "startColumn": 7, - "endLine": 49, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 28, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'isProd'" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Resource 'CloudFrontDistribution' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "NonFargateTask", + "logicalId": "CloudFrontDistribution", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 51, - "startColumn": 7, - "endLine": 51, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 41, + "startColumn": 5, + "endLine": 41, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/conditions/and.yaml": { + "filePath": "good/conditions/and.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "good/core/conditions.yaml": { + "filePath": "good/core/conditions.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 8, + "counts": { + "fatal": 2, + "errors": 0, + "warnings": 9, + "informational": 18, + "debug": 0 }, + "suppressed": 2, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'Role' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "NonFargateTask", + "logicalId": "AMIIDLookup", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'Role'", + "category": "Schema", + "startLine": 101, + "startColumn": 5, + "endLine": 101, + "endColumn": 15, + "conditionScenario": { + "isPrimary": false }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 52, - "startColumn": 7, - "endLine": 52, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3014", + "severity": "FATAL", + "message": "Exactly one of ['VirtualName', 'Ebs', 'NoDevice'] must be specified", + "source": "SCHEMA", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "myInstance2", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Family", - "category": "Best Practice", - "startLine": 63, + "propertyPath": "Properties.BlockDeviceMappings.{}", + "category": "Schema", + "startLine": 36, "startColumn": 7, - "endLine": 63, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 36, + "endColumn": 26, + "conditionScenario": { + "isPrimary": true, + "isPrimaryAndProduction": true + }, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Exactly one of properties required (requiredXor)", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "resolutionSource": "Fn::If on condition 'isPrimaryAndProduction'" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'isPrimary' to False. Where existing status for condition 'isPrimaryAndProduction' is True", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "myInstance2", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.BlockDeviceMappings.Fn::If.1.0.VirtualName.Fn::If.2", "category": "Best Practice", - "startLine": 64, - "startColumn": 7, - "endLine": 64, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 44, + "startColumn": 19, + "endLine": 44, + "endColumn": 20, + "ruleDescription": "Check Fn::If has a path that cannot be reached", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'isPrimary' to False. Where existing status for condition 'isPrimaryAndProduction' is True", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "myInstance4", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.InstanceType.Fn::If.1.Fn::If.2", "category": "Best Practice", - "startLine": 66, - "startColumn": 7, - "endLine": 66, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 74, + "startColumn": 13, + "endLine": 74, + "endColumn": 14, + "ruleDescription": "Check Fn::If has a path that cannot be reached", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "AMIIDLookup", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Cpu", - "category": "Best Practice", - "startLine": 67, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 111, "startColumn": 7, - "endLine": 67, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 111, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'isNotProduction' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateNullPC", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "logicalId": "isNotProduction", + "entityType": "Condition" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Conditions/isNotProduction", "category": "Best Practice", - "startLine": 68, - "startColumn": 7, - "endLine": 68, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 18, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PlacementConstraints' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'isPrimaryAndProdOrStage' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateNullPC", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "logicalId": "isPrimaryAndProdOrStage", + "entityType": "Condition" }, - "propertyPath": "Properties.PlacementConstraints", + "propertyPath": "Conditions/isPrimaryAndProdOrStage", "category": "Best Practice", - "startLine": 69, - "startColumn": 7, - "endLine": 69, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" - } + "startLine": 19, + "startColumn": 3, + "endLine": 19, + "endColumn": 26, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", "source": "ENGINE", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "myInstance1", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 70, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 31, "startColumn": 7, - "endLine": 70, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 31, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", "source": "ENGINE", "entity": { - "logicalId": "PayPerRequestTable", + "logicalId": "myInstance2", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.TableName", - "category": "Best Practice", - "startLine": 79, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 35, "startColumn": 7, - "endLine": 79, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 35, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", "source": "ENGINE", "entity": { - "logicalId": "PayPerRequestTable", + "logicalId": "myInstance3", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.KeySchema", - "category": "Best Practice", - "startLine": 81, - "startColumn": 7, - "endLine": 81, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 53, + "startColumn": 5, + "endLine": 53, + "endColumn": 15, + "ruleDescription": "Hardcoded AMI ID", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", "source": "ENGINE", "entity": { - "logicalId": "ProvisionedTable", + "logicalId": "myInstance4", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.TableName", - "category": "Best Practice", - "startLine": 92, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 67, "startColumn": 7, - "endLine": 92, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 67, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProvisionedTable", + "logicalId": "mySubnet", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 97, + "startLine": 25, "startColumn": 7, - "endLine": 97, + "endLine": 25, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DefaultWithThroughput", + "logicalId": "mySubnet", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.TableName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 108, + "startLine": 26, "startColumn": 7, - "endLine": 108, - "endColumn": 16, + "endLine": 26, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22053,42 +21650,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DefaultWithThroughput", + "logicalId": "myInstance1", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 112, + "startLine": 30, "startColumn": 7, - "endLine": 112, - "endColumn": 16, + "endLine": 30, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'isDevelopment'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateIntCpu", + "logicalId": "myInstance1", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 123, + "startLine": 31, "startColumn": 7, - "endLine": 123, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 31, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22098,20 +21697,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateIntCpu", + "logicalId": "myInstance2", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 124, + "startLine": 35, "startColumn": 7, - "endLine": 124, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 35, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22121,89 +21720,92 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateIntCpu", + "logicalId": "myInstance2", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.BlockDeviceMappings", "category": "Best Practice", - "startLine": 126, + "startLine": 36, "startColumn": 7, - "endLine": 126, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 36, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only", + "resolutionSource": "Fn::If on condition 'isPrimaryAndProduction'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateIntCpu", + "logicalId": "myInstance4", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 127, + "startLine": 67, "startColumn": 7, - "endLine": 127, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 67, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'isProduction'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateIntCpu", + "logicalId": "myInstance4", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 128, + "startLine": 68, "startColumn": 7, - "endLine": 128, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 68, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only", + "resolutionSource": "Fn::If on condition 'isPrimaryAndProduction'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateIntCpu", + "logicalId": "LambdaExecutionRole", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 129, + "startLine": 91, "startColumn": 7, - "endLine": 129, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 91, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22213,257 +21815,296 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedFargateThenEc2", + "logicalId": "InstanceProfile", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 139, + "startLine": 96, "startColumn": 7, - "endLine": 139, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 96, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9003", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", "source": "ENGINE", - "entity": { - "logicalId": "CorrelatedFargateThenEc2", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 140, - "startColumn": 7, - "endLine": 140, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" - } + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Resource 'mySubnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedFargateThenEc2", + "logicalId": "mySubnet", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 141, - "startColumn": 7, - "endLine": 141, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 24, + "startColumn": 5, + "endLine": 24, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Resource 'myInstance1' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedFargateThenEc2", + "logicalId": "myInstance1", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 142, - "startColumn": 7, - "endLine": 142, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Resource 'myInstance2' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedFargateThenEc2", + "logicalId": "myInstance2", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 143, - "startColumn": 7, - "endLine": 143, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 34, + "startColumn": 5, + "endLine": 34, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Resource 'myInstance3' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2ThenFargate", + "logicalId": "myInstance3", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 151, - "startColumn": 7, - "endLine": 151, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" - } + "startLine": 53, + "startColumn": 5, + "endLine": 53, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Resource 'myInstance4' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2ThenFargate", + "logicalId": "myInstance4", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 152, - "startColumn": 7, - "endLine": 152, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" - } + "startLine": 66, + "startColumn": 5, + "endLine": 66, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2ThenFargate", + "logicalId": "LambdaExecutionRole", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 153, - "startColumn": 7, - "endLine": 153, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 79, + "startColumn": 5, + "endLine": 79, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Resource 'AMIIDLookup' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2ThenFargate", + "logicalId": "AMIIDLookup", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 154, - "startColumn": 7, - "endLine": 154, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 101, + "startColumn": 5, + "endLine": 101, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/core/config_cfn_lint.json": { + "filePath": "good/core/config_cfn_lint.json", + "status": "OK", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "startLine": 16, + "startColumn": 2, + "endLine": 16, + "endColumn": 12, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" + } + ] + }, + "good/core/config_cfn_lint.yaml": { + "filePath": "good/core/config_cfn_lint.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "startLine": 11, + "startColumn": 1, + "endLine": 11, + "endColumn": 10, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" + } + ] + }, + "good/core/config_default_e3012.yaml": { + "filePath": "good/core/config_default_e3012.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 3, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'5' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", "entity": { - "logicalId": "CorrelatedEc2ThenFargate", + "logicalId": "myTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.ProvisionedThroughput.WriteCapacityUnits", "category": "Best Practice", - "startLine": 155, - "startColumn": 7, - "endLine": 155, + "startLine": 20, + "startColumn": 9, + "endLine": 20, "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedProvisionedThenOnDemand", + "logicalId": "myTable", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 166, + "startLine": 11, "startColumn": 7, - "endLine": 166, + "endLine": 11, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { @@ -22472,15 +22113,15 @@ "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedOnDemandThenProvisioned", + "logicalId": "myTable", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 177, + "startLine": 15, "startColumn": 7, - "endLine": 177, + "endLine": 15, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -22489,117 +22130,231 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Resource 'myTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedFargateSizeThenEc2", + "logicalId": "myTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 187, - "startColumn": 7, - "endLine": 187, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" - } + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/core/config_only_i1002.yaml": { + "filePath": "good/core/config_only_i1002.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "startLine": 8, + "startColumn": 1, + "endLine": 8, + "endColumn": 10, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" + } + ] + }, + "good/core/config_only_i1003.yaml": { + "filePath": "good/core/config_only_i1003.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "startLine": 8, + "startColumn": 1, + "endLine": 8, + "endColumn": 10, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" + } + ] + }, + "good/core/config_parameters.yaml": { + "filePath": "good/core/config_parameters.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "startLine": 8, + "startColumn": 1, + "endLine": 8, + "endColumn": 10, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" + } + ] + }, + "good/core/directives.yaml": { + "filePath": "good/core/directives.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "CorrelatedFargateSizeThenEc2", + "logicalId": "MyKey", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::KMS::Key" }, - "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 188, - "startColumn": 7, - "endLine": 188, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" - } + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 8, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "CorrelatedFargateSizeThenEc2", + "logicalId": "MyKey", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::KMS::Key" }, - "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 189, - "startColumn": 7, - "endLine": 189, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" - } + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 8, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyKey' of type 'AWS::KMS::Key' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedFargateSizeThenEc2", + "logicalId": "MyKey", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::KMS::Key" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 190, - "startColumn": 7, - "endLine": 190, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 8, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/core/resource_attributes.yaml": { + "filePath": "good/core/resource_attributes.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 8, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 11, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedFargateSizeThenEc2", + "logicalId": "CommonCfnAttributes", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 191, + "startLine": 26, "startColumn": 7, - "endLine": 191, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 26, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22609,115 +22364,85 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CorrelatedEc2SizeThenFargate", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 199, - "startColumn": 7, - "endLine": 199, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2SizeThenFargate", + "logicalId": "DependsOnSingleString", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 200, + "startLine": 33, "startColumn": 7, - "endLine": 200, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 33, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2SizeThenFargate", + "logicalId": "DependsOnList", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 201, + "startLine": 42, "startColumn": 7, - "endLine": 201, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 42, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchTemplate' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2SizeThenFargate", + "logicalId": "AutoScalingGroupWithPolicies", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.LaunchTemplate", "category": "Best Practice", - "startLine": 202, + "startLine": 63, "startColumn": 7, - "endLine": 202, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 63, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2SizeThenFargate", + "logicalId": "BucketWithTransform", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 203, + "startLine": 82, "startColumn": 7, - "endLine": 203, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 82, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22727,179 +22452,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ValidFargate' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ValidFargate", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ValidFargateSplunk' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ValidFargateSplunk", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 30, - "startColumn": 5, - "endLine": 30, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'NonFargateTask' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "NonFargateTask", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 47, - "startColumn": 5, - "endLine": 47, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FargateNullPC' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FargateNullPC", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 62, - "startColumn": 5, - "endLine": 62, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'PayPerRequestTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "PayPerRequestTable", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 78, - "startColumn": 5, - "endLine": 78, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ProvisionedTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ProvisionedTable", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 91, - "startColumn": 5, - "endLine": 91, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DefaultWithThroughput' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "DefaultWithThroughput", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 107, - "startColumn": 5, - "endLine": 107, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FargateIntCpu' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FargateIntCpu", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 122, - "startColumn": 5, - "endLine": 122, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CorrelatedFargateThenEc2' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'CommonCfnAttributes' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedFargateThenEc2", + "logicalId": "CommonCfnAttributes", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 138, + "startLine": 25, "startColumn": 5, - "endLine": 138, + "endLine": 25, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22907,19 +22472,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CorrelatedEc2ThenFargate' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'DependsOnSingleString' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2ThenFargate", + "logicalId": "DependsOnSingleString", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 150, + "startLine": 32, "startColumn": 5, - "endLine": 150, + "endLine": 32, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22927,19 +22492,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CorrelatedProvisionedThenOnDemand' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'DependsOnList' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedProvisionedThenOnDemand", + "logicalId": "DependsOnList", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 163, + "startLine": 41, "startColumn": 5, - "endLine": 163, + "endLine": 41, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22947,19 +22512,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CorrelatedOnDemandThenProvisioned' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'AutoScalingGroupWithPolicies' of type 'AWS::AutoScaling::AutoScalingGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedOnDemandThenProvisioned", + "logicalId": "AutoScalingGroupWithPolicies", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 174, + "startLine": 60, "startColumn": 5, - "endLine": 174, + "endLine": 60, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22967,19 +22532,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CorrelatedFargateSizeThenEc2' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'BucketWithTransform' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedFargateSizeThenEc2", + "logicalId": "BucketWithTransform", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 186, + "startLine": 81, "startColumn": 5, - "endLine": 186, + "endLine": 81, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22987,35 +22552,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CorrelatedEc2SizeThenFargate' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'BucketWithConnectors' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2SizeThenFargate", + "logicalId": "BucketWithConnectors", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 198, + "startLine": 94, "startColumn": 5, - "endLine": 198, + "endLine": 94, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/ecs_fargate_decimal_units.yaml": { - "filePath": "good/ecs_fargate_decimal_units.yaml", + "good/custom/is-defined.yaml": { + "filePath": "good/custom/is-defined.yaml", "status": "OK", "metadata": { "resourcesScanned": 7, "counts": { - "fatal": 0, + "fatal": 2, "errors": 0, - "warnings": 0, - "informational": 42, + "warnings": 12, + "informational": 8, "debug": 0 }, "suppressed": 0, @@ -23024,482 +22589,308 @@ }, "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "QuarterVcpuDecimal", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "QuarterVcpuDecimal", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "QuarterVcpuDecimal", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Cpu", - "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, + "ruleId": "F0005", + "severity": "FATAL", + "message": "'Parameter' is not a valid top-level template section", + "source": "SCHEMA", + "propertyPath": "Parameter", + "category": "Structure", + "startLine": 4, + "startColumn": 1, + "endLine": 4, "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "QuarterVcpuDecimal", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Memory", - "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "QuarterVcpuDecimal", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "HalfVcpuDecimal", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 18, - "startColumn": 7, - "endLine": 18, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "HalfVcpuDecimal", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 19, - "startColumn": 7, - "endLine": 19, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Top-level keys must be valid section names", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F1020", + "severity": "FATAL", + "message": "'NodeEnv' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'LambdaExecutionRole', 'LambdaFunctionTestDefinedArray', 'LambdaFunctionTestDefinedEmpty', 'LambdaFunctionTestDefinedGetAttr', 'LambdaFunctionTestDefinedObject', 'LambdaFunctionTestDefinedRef', 'LambdaFunctionTestDefinedValue']", + "source": "SCHEMA", "entity": { - "logicalId": "HalfVcpuDecimal", + "logicalId": "LambdaFunctionTestDefinedRef", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Cpu", - "category": "Best Practice", - "startLine": 20, - "startColumn": 7, - "endLine": 20, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.Environment.Variables.NODE_ENV", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 70, + "startColumn": 11, + "endLine": 70, + "endColumn": 19, + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "HalfVcpuDecimal", + "logicalId": "LambdaFunctionTestDefinedArray", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Memory", - "category": "Best Practice", - "startLine": 21, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 32, "startColumn": 7, - "endLine": 21, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 32, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "HalfVcpuDecimal", + "logicalId": "LambdaFunctionTestDefinedEmpty", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 22, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 42, "startColumn": 7, - "endLine": 22, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 42, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "DecimalEquivalent", + "logicalId": "LambdaFunctionTestDefinedGetAttr", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 30, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 52, "startColumn": 7, - "endLine": 30, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 52, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "DecimalEquivalent", + "logicalId": "LambdaFunctionTestDefinedObject", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 31, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 63, "startColumn": 7, - "endLine": 31, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 63, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "DecimalEquivalent", + "logicalId": "LambdaFunctionTestDefinedRef", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Cpu", - "category": "Best Practice", - "startLine": 32, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 73, "startColumn": 7, - "endLine": 32, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 73, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "DecimalEquivalent", + "logicalId": "LambdaFunctionTestDefinedValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Memory", - "category": "Best Practice", - "startLine": 33, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 83, "startColumn": 7, - "endLine": 33, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 83, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", "entity": { - "logicalId": "DecimalEquivalent", + "logicalId": "LambdaFunctionTestDefinedArray", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Code", "category": "Best Practice", - "startLine": 34, + "startLine": 24, "startColumn": 7, - "endLine": 34, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 24, + "endColumn": 11, + "ruleDescription": "Warn when properties are configured to only work with the package command", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", "entity": { - "logicalId": "PlusDecimalEquivalent", + "logicalId": "LambdaFunctionTestDefinedEmpty", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Code", "category": "Best Practice", - "startLine": 42, + "startLine": 36, "startColumn": 7, - "endLine": 42, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 36, + "endColumn": 11, + "ruleDescription": "Warn when properties are configured to only work with the package command", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", "entity": { - "logicalId": "PlusDecimalEquivalent", + "logicalId": "LambdaFunctionTestDefinedGetAttr", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Code", "category": "Best Practice", - "startLine": 43, + "startLine": 46, "startColumn": 7, - "endLine": 43, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 46, + "endColumn": 11, + "ruleDescription": "Warn when properties are configured to only work with the package command", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", "entity": { - "logicalId": "PlusDecimalEquivalent", + "logicalId": "LambdaFunctionTestDefinedObject", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Code", "category": "Best Practice", - "startLine": 44, + "startLine": 56, "startColumn": 7, - "endLine": 44, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 56, + "endColumn": 11, + "ruleDescription": "Warn when properties are configured to only work with the package command", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", "entity": { - "logicalId": "PlusDecimalEquivalent", + "logicalId": "LambdaFunctionTestDefinedRef", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Code", "category": "Best Practice", - "startLine": 45, + "startLine": 67, "startColumn": 7, - "endLine": 45, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 67, + "endColumn": 11, + "ruleDescription": "Warn when properties are configured to only work with the package command", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", "entity": { - "logicalId": "PlusDecimalEquivalent", + "logicalId": "LambdaFunctionTestDefinedValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Code", "category": "Best Practice", - "startLine": 46, + "startLine": 77, "startColumn": 7, - "endLine": 46, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 77, + "endColumn": 11, + "ruleDescription": "Warn when properties are configured to only work with the package command", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LeadingZeroEquivalent", + "logicalId": "LambdaExecutionRole", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 54, + "startLine": 20, "startColumn": 7, - "endLine": 54, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 20, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -23507,383 +22898,371 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LeadingZeroEquivalent", + "logicalId": "LambdaExecutionRole", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 55, - "startColumn": 7, - "endLine": 55, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Resource 'LambdaFunctionTestDefinedArray' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LeadingZeroEquivalent", + "logicalId": "LambdaFunctionTestDefinedArray", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 56, - "startColumn": 7, - "endLine": 56, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 23, + "startColumn": 5, + "endLine": 23, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Resource 'LambdaFunctionTestDefinedEmpty' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LeadingZeroEquivalent", + "logicalId": "LambdaFunctionTestDefinedEmpty", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 57, - "startColumn": 7, - "endLine": 57, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 35, + "startColumn": 5, + "endLine": 35, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Resource 'LambdaFunctionTestDefinedGetAttr' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LeadingZeroEquivalent", + "logicalId": "LambdaFunctionTestDefinedGetAttr", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 58, - "startColumn": 7, - "endLine": 58, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 45, + "startColumn": 5, + "endLine": 45, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Resource 'LambdaFunctionTestDefinedObject' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LeadingDecimalPointEquivalent", + "logicalId": "LambdaFunctionTestDefinedObject", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 66, - "startColumn": 7, - "endLine": 66, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 55, + "startColumn": 5, + "endLine": 55, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Resource 'LambdaFunctionTestDefinedRef' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LeadingDecimalPointEquivalent", + "logicalId": "LambdaFunctionTestDefinedRef", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 67, - "startColumn": 7, - "endLine": 67, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 66, + "startColumn": 5, + "endLine": 66, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Resource 'LambdaFunctionTestDefinedValue' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LeadingDecimalPointEquivalent", + "logicalId": "LambdaFunctionTestDefinedValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 68, - "startColumn": 7, - "endLine": 68, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 76, + "startColumn": 5, + "endLine": 76, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/custom/is-not-defined.yaml": { + "filePath": "good/custom/is-not-defined.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 8, + "informational": 6, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "LeadingDecimalPointEquivalent", + "logicalId": "LambdaFunctionTestNotDefinedFromParent", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Memory", - "category": "Best Practice", - "startLine": 69, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 26, "startColumn": 7, - "endLine": 69, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 26, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "LeadingDecimalPointEquivalent", + "logicalId": "LambdaFunctionTestNotDefinedFromProperties", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 70, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 33, "startColumn": 7, - "endLine": 70, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 33, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "TrailingDecimalPointEquivalent", + "logicalId": "LambdaFunctionTestNotDefinedRefAWSNoValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 78, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 43, "startColumn": 7, - "endLine": 78, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 43, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "TrailingDecimalPointEquivalent", + "logicalId": "LambdaFunctionTestNotDefinedWithSiblings", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 79, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 53, "startColumn": 7, - "endLine": 79, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 53, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", "entity": { - "logicalId": "TrailingDecimalPointEquivalent", + "logicalId": "LambdaFunctionTestNotDefinedFromParent", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Code", "category": "Best Practice", - "startLine": 80, + "startLine": 21, "startColumn": 7, - "endLine": 80, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 21, + "endColumn": 11, + "ruleDescription": "Warn when properties are configured to only work with the package command", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", "entity": { - "logicalId": "TrailingDecimalPointEquivalent", + "logicalId": "LambdaFunctionTestNotDefinedFromProperties", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Code", "category": "Best Practice", - "startLine": 81, + "startLine": 30, "startColumn": 7, - "endLine": 81, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 30, + "endColumn": 11, + "ruleDescription": "Warn when properties are configured to only work with the package command", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", "entity": { - "logicalId": "TrailingDecimalPointEquivalent", + "logicalId": "LambdaFunctionTestNotDefinedRefAWSNoValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Code", "category": "Best Practice", - "startLine": 82, + "startLine": 37, "startColumn": 7, - "endLine": 82, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 37, + "endColumn": 11, + "ruleDescription": "Warn when properties are configured to only work with the package command", + "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'QuarterVcpuDecimal' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", "entity": { - "logicalId": "QuarterVcpuDecimal", + "logicalId": "LambdaFunctionTestNotDefinedWithSiblings", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Code", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 47, + "startColumn": 7, + "endLine": 47, + "endColumn": 11, + "ruleDescription": "Warn when properties are configured to only work with the package command", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'HalfVcpuDecimal' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HalfVcpuDecimal", + "logicalId": "LambdaExecutionRole", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Path", "category": "Best Practice", "startLine": 17, - "startColumn": 5, + "startColumn": 7, "endLine": 17, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DecimalEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DecimalEquivalent", + "logicalId": "LambdaExecutionRole", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 29, + "startLine": 6, "startColumn": 5, - "endLine": 29, + "endLine": 6, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23891,19 +23270,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'PlusDecimalEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'LambdaFunctionTestNotDefinedFromParent' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "PlusDecimalEquivalent", + "logicalId": "LambdaFunctionTestNotDefinedFromParent", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 41, + "startLine": 20, "startColumn": 5, - "endLine": 41, + "endLine": 20, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23911,19 +23290,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LeadingZeroEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'LambdaFunctionTestNotDefinedFromProperties' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LeadingZeroEquivalent", + "logicalId": "LambdaFunctionTestNotDefinedFromProperties", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 53, + "startLine": 29, "startColumn": 5, - "endLine": 53, + "endLine": 29, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23931,19 +23310,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LeadingDecimalPointEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'LambdaFunctionTestNotDefinedRefAWSNoValue' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LeadingDecimalPointEquivalent", + "logicalId": "LambdaFunctionTestNotDefinedRefAWSNoValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 65, + "startLine": 36, "startColumn": 5, - "endLine": 65, + "endLine": 36, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23951,35 +23330,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TrailingDecimalPointEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'LambdaFunctionTestNotDefinedWithSiblings' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TrailingDecimalPointEquivalent", + "logicalId": "LambdaFunctionTestNotDefinedWithSiblings", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 77, + "startLine": 46, "startColumn": 5, - "endLine": 77, + "endLine": 46, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/ecs_fargate_units_and_sizes.yaml": { - "filePath": "good/ecs_fargate_units_and_sizes.yaml", + "good/custom/numeric-inequalities-large.yaml": { + "filePath": "good/custom/numeric-inequalities-large.yaml", "status": "OK", "metadata": { - "resourcesScanned": 7, + "resourcesScanned": 3, "counts": { "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 43, + "errors": 2, + "warnings": 3, + "informational": 4, "debug": 0 }, "suppressed": 0, @@ -23988,160 +23367,125 @@ }, "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "QuarterVcpuHalfGb", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Family", - "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "QuarterVcpuHalfGb", + "logicalId": "TimeoutInNumericsFunction", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 9, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 27, "startColumn": 7, - "endLine": 9, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 27, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs4.3", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "QuarterVcpuHalfGb", + "logicalId": "TimeoutInStringFunction", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 10, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 35, "startColumn": 7, - "endLine": 10, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 35, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs4.3", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", "entity": { - "logicalId": "QuarterVcpuHalfGb", + "logicalId": "TimeoutInNumericsFunction", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Code", "category": "Best Practice", - "startLine": 11, + "startLine": 26, "startColumn": 7, - "endLine": 11, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 26, + "endColumn": 11, + "ruleDescription": "Warn when properties are configured to only work with the package command", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", "entity": { - "logicalId": "QuarterVcpuHalfGb", + "logicalId": "TimeoutInStringFunction", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Code", "category": "Best Practice", - "startLine": 12, + "startLine": 34, "startColumn": 7, - "endLine": 12, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 34, + "endColumn": 11, + "ruleDescription": "Warn when properties are configured to only work with the package command", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "'100' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", "entity": { - "logicalId": "QuarterVcpuHalfGb", + "logicalId": "TimeoutInStringFunction", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Timeout", "category": "Best Practice", - "startLine": 16, + "startLine": 36, "startColumn": 7, - "endLine": 16, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 36, + "endColumn": 14, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EightVcpuSixtyGb", + "logicalId": "LambdaExecutionRole", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 24, + "startLine": 20, "startColumn": 7, - "endLine": 24, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 20, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24149,206 +23493,204 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EightVcpuSixtyGb", + "logicalId": "LambdaExecutionRole", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 25, - "startColumn": 7, - "endLine": 25, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Resource 'TimeoutInNumericsFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EightVcpuSixtyGb", + "logicalId": "TimeoutInNumericsFunction", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 26, - "startColumn": 7, - "endLine": 26, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 23, + "startColumn": 5, + "endLine": 23, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Resource 'TimeoutInStringFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EightVcpuSixtyGb", + "logicalId": "TimeoutInStringFunction", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 27, - "startColumn": 7, - "endLine": 27, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 31, + "startColumn": 5, + "endLine": 31, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/custom/numeric-inequalities-small.yaml": { + "filePath": "good/custom/numeric-inequalities-small.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 3, + "informational": 4, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "EightVcpuSixtyGb", + "logicalId": "TimeoutInNumericsFunction", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Memory", - "category": "Best Practice", - "startLine": 28, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 27, "startColumn": 7, - "endLine": 28, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 27, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs4.3", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "EightVcpuSixtyGb", + "logicalId": "TimeoutInStringFunction", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 32, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 35, "startColumn": 7, - "endLine": 32, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 35, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs4.3", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", "entity": { - "logicalId": "SixteenVcpuFortyGb", + "logicalId": "TimeoutInNumericsFunction", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.Code", "category": "Best Practice", - "startLine": 40, + "startLine": 26, "startColumn": 7, - "endLine": 40, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 26, + "endColumn": 11, + "ruleDescription": "Warn when properties are configured to only work with the package command", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", "entity": { - "logicalId": "SixteenVcpuFortyGb", + "logicalId": "TimeoutInStringFunction", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Code", "category": "Best Practice", - "startLine": 41, + "startLine": 34, "startColumn": 7, - "endLine": 41, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 34, + "endColumn": 11, + "ruleDescription": "Warn when properties are configured to only work with the package command", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "'9' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", "entity": { - "logicalId": "SixteenVcpuFortyGb", + "logicalId": "TimeoutInStringFunction", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Timeout", "category": "Best Practice", - "startLine": 42, + "startLine": 36, "startColumn": 7, - "endLine": 42, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 36, + "endColumn": 14, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SixteenVcpuFortyGb", + "logicalId": "LambdaExecutionRole", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 43, + "startLine": 20, "startColumn": 7, - "endLine": 43, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 20, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24356,252 +23698,285 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SixteenVcpuFortyGb", + "logicalId": "LambdaExecutionRole", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 44, - "startColumn": 7, - "endLine": 44, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Resource 'TimeoutInNumericsFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SixteenVcpuFortyGb", + "logicalId": "TimeoutInNumericsFunction", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 48, - "startColumn": 7, - "endLine": 48, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 23, + "startColumn": 5, + "endLine": 23, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Resource 'TimeoutInStringFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuSixtyGb", + "logicalId": "TimeoutInStringFunction", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 56, - "startColumn": 7, - "endLine": 56, + "startLine": 31, + "startColumn": 5, + "endLine": 31, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/decode/parsing.json": { + "filePath": "good/decode/parsing.json", + "status": "OK", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 1, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "startLine": 8, + "startColumn": 3, + "endLine": 8, "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'VPN' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "ThirtyTwoVcpuSixtyGb", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "logicalId": "VPN", + "entityType": "Parameter" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Parameters/VPN", "category": "Best Practice", - "startLine": 57, - "startColumn": 7, - "endLine": 57, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + } + ] + }, + "good/decode/yaml11_scalars.yaml": { + "filePath": "good/decode/yaml11_scalars.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "good/deletion_policies.yaml": { + "filePath": "good/deletion_policies.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 4, + "informational": 7, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2501", + "severity": "WARN", + "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", + "source": "CFN_LINT", "entity": { - "logicalId": "ThirtyTwoVcpuSixtyGb", + "logicalId": "DB", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 58, + "propertyPath": "Properties.MasterUserPassword", + "category": "Security", + "startLine": 12, "startColumn": 7, - "endLine": 58, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 12, + "endColumn": 25, + "ruleDescription": "Check if Password Properties are correctly configured", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "source": "CFN_LINT", "entity": { - "logicalId": "ThirtyTwoVcpuSixtyGb", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 59, - "startColumn": 7, - "endLine": 59, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "source": "CFN_LINT", "entity": { - "logicalId": "ThirtyTwoVcpuSixtyGb", + "logicalId": "DB", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 60, - "startColumn": 7, - "endLine": 60, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 5, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuSixtyGb", + "logicalId": "DB", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 64, - "startColumn": 7, - "endLine": 64, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "ThirtyTwoVcpuOneTwentyGb", + "logicalId": "DB", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 72, - "startColumn": 7, - "endLine": 72, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 5, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuOneTwentyGb", + "logicalId": "DB", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 73, + "startLine": 10, "startColumn": 7, - "endLine": 73, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 10, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuOneTwentyGb", + "logicalId": "DB", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 74, + "startLine": 11, "startColumn": 7, - "endLine": 74, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 11, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24611,135 +23986,146 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuOneTwentyGb", + "logicalId": "DB", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.BackupRetentionPeriod", "category": "Best Practice", - "startLine": 75, + "startLine": 14, "startColumn": 7, - "endLine": 75, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 14, + "endColumn": 28, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9003", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuOneTwentyGb", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 76, - "startColumn": 7, - "endLine": 76, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Resource 'DB' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuOneTwentyGb", + "logicalId": "DB", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 80, - "startColumn": 7, - "endLine": 80, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/dynamodb_provisioned.yaml": { + "filePath": "good/dynamodb_provisioned.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 5, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "ThirtyTwoVcpuTwoFortyFourGb", + "logicalId": "DDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 88, - "startColumn": 7, - "endLine": 88, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "ThirtyTwoVcpuTwoFortyFourGb", + "logicalId": "DDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 89, - "startColumn": 7, - "endLine": 89, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", + "logicalId": "DDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 90, + "startLine": 6, "startColumn": 7, - "endLine": 90, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 6, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24749,112 +24135,116 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", + "logicalId": "DDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 91, + "startLine": 14, "startColumn": 7, - "endLine": 91, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 14, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Resource 'DDBTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", + "logicalId": "DDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 92, - "startColumn": 7, - "endLine": 92, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/dynamodb_valid_attributes.yaml": { + "filePath": "good/dynamodb_valid_attributes.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 5, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "ThirtyTwoVcpuTwoFortyFourGb", + "logicalId": "GoodTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 96, - "startColumn": 7, - "endLine": 96, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "ConditionalRequiredProperties", + "logicalId": "GoodTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 105, - "startColumn": 7, - "endLine": 105, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalRequiredProperties", + "logicalId": "GoodTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 106, + "startLine": 6, "startColumn": 7, - "endLine": 106, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 6, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24864,134 +24254,142 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalRequiredProperties", + "logicalId": "GoodTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 107, + "startLine": 13, "startColumn": 7, - "endLine": 107, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 13, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseAlternateSize'" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Resource 'GoodTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConditionalRequiredProperties", + "logicalId": "GoodTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 108, - "startColumn": 7, - "endLine": 108, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseAlternateSize'" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/ecs_awsvpc_valid.yaml": { + "filePath": "good/ecs_awsvpc_valid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalRequiredProperties", + "logicalId": "Task", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 109, + "startLine": 6, "startColumn": 7, - "endLine": 109, - "endColumn": 13, + "endLine": 6, + "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseAlternateSize'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PlacementConstraints' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalRequiredProperties", + "logicalId": "Task", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PlacementConstraints", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 110, + "startLine": 7, "startColumn": 7, - "endLine": 110, + "endLine": 7, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseAlternateSize'" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Resource 'Task' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConditionalRequiredProperties", + "logicalId": "Task", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 114, - "startColumn": 7, - "endLine": 114, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "good/ecs_fargate_valid.yaml": { - "filePath": "good/ecs_fargate_valid.yaml", + "good/ecs_fargate.yaml": { + "filePath": "good/ecs_fargate.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 2, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 7, + "informational": 9, "debug": 0 }, "suppressed": 0, @@ -25025,19 +24423,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { "logicalId": "TaskDef", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", "startLine": 7, "startColumn": 7, "endLine": 7, - "endColumn": 10, + "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -25048,19 +24446,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { "logicalId": "TaskDef", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 8, + "startLine": 9, "startColumn": 7, - "endLine": 8, - "endColumn": 13, + "endLine": 9, + "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -25071,19 +24469,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { "logicalId": "TaskDef", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 9, + "startLine": 10, "startColumn": 7, - "endLine": 9, - "endColumn": 18, + "endLine": 10, + "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -25094,19 +24492,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { "logicalId": "TaskDef", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 10, + "startLine": 11, "startColumn": 7, - "endLine": 10, - "endColumn": 30, + "endLine": 11, + "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -25137,6 +24535,28 @@ "lifecycle": "create-only" } }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Service", + "entityType": "Resource", + "resourceType": "AWS::ECS::Service" + }, + "propertyPath": "Properties.LaunchType", + "category": "Best Practice", + "startLine": 19, + "startColumn": 7, + "endLine": 19, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, { "ruleId": "I9040", "severity": "INFO", @@ -25156,6 +24576,26 @@ "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Service' of type 'AWS::ECS::Service' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Service", + "entityType": "Resource", + "resourceType": "AWS::ECS::Service" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 18, + "startColumn": 5, + "endLine": 18, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] } diff --git a/src/resources/expected/validation_reports6.json b/src/resources/expected/validation_reports6.json index 5db4b12c..8f466ade 100644 --- a/src/resources/expected/validation_reports6.json +++ b/src/resources/expected/validation_reports6.json @@ -1,14 +1,14 @@ { - "good/elb_https_empty_sslcertificateid.yaml": { - "filePath": "good/elb_https_empty_sslcertificateid.yaml", + "good/ecs_fargate_ddb_valid.yaml": { + "filePath": "good/ecs_fargate_ddb_valid.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 14, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 1, + "informational": 81, "debug": 0 }, "suppressed": 0, @@ -17,60 +17,202 @@ }, "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'ELB' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", - "source": "ENGINE", + "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": "ELB", + "logicalId": "PayPerRequestTable", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 76, + "startColumn": 3, + "endLine": 76, + "endColumn": 21, + "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": "PayPerRequestTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 76, + "startColumn": 3, + "endLine": 76, + "endColumn": 21, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "ProvisionedTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 89, + "startColumn": 3, + "endLine": 89, + "endColumn": 19, + "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": "ProvisionedTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 89, + "startColumn": 3, + "endLine": 89, + "endColumn": 19, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "DefaultWithThroughput", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 105, + "startColumn": 3, + "endLine": 105, + "endColumn": 24, + "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": "DefaultWithThroughput", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 105, + "startColumn": 3, + "endLine": 105, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "CorrelatedProvisionedThenOnDemand", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 161, + "startColumn": 3, + "endLine": 161, + "endColumn": 36, + "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": "CorrelatedProvisionedThenOnDemand", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 161, + "startColumn": 3, + "endLine": 161, + "endColumn": 36, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "CorrelatedOnDemandThenProvisioned", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 172, + "startColumn": 3, + "endLine": 172, + "endColumn": 36, + "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": "CorrelatedOnDemandThenProvisioned", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 172, + "startColumn": 3, + "endLine": 172, + "endColumn": 36, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "good/enum_case_insensitive_casing.yaml": { - "filePath": "good/enum_case_insensitive_casing.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 6, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LowercaseType", + "logicalId": "ValidFargate", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 13, + "startLine": 11, "startColumn": 7, - "endLine": 13, - "endColumn": 11, + "endLine": 11, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -80,63 +222,66 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ComputeResources.Subnets' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LowercaseType", + "logicalId": "ValidFargate", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ComputeResources.Subnets", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 16, - "startColumn": 9, - "endLine": 16, - "endColumn": 16, + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ComputeResources.Type' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LowercaseType", + "logicalId": "ValidFargate", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ComputeResources.Type", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 18, - "startColumn": 9, - "endLine": 18, - "endColumn": 13, + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Tags' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LowercaseType", + "logicalId": "ValidFargate", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 20, + "startLine": 15, "startColumn": 7, - "endLine": 20, - "endColumn": 11, + "endLine": 15, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -146,19 +291,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MixedCaseType", + "logicalId": "ValidFargate", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 25, + "startLine": 16, "startColumn": 7, - "endLine": 25, - "endColumn": 11, + "endLine": 16, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -168,60 +314,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Tags' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MixedCaseType", + "logicalId": "ValidFargate", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 27, + "startLine": 17, "startColumn": 7, - "endLine": 27, - "endColumn": 11, + "endLine": 17, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } - } - ] - }, - "good/functions/dynamic_reference_embedded.yaml": { - "filePath": "good/functions/dynamic_reference_embedded.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 8, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Sg", + "logicalId": "ValidFargateSplunk", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 11, + "startLine": 31, "startColumn": 7, - "endLine": 11, - "endColumn": 23, + "endLine": 31, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -231,543 +360,544 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Sg", + "logicalId": "ValidFargateSplunk", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.GroupName", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 12, + "startLine": 32, "startColumn": 7, - "endLine": 12, - "endColumn": 16, + "endLine": 32, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (dynamic reference: prefix-{{resolve:ssm:/network/sg-name}})" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "ValidFargateSplunk", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 19, + "startLine": 34, "startColumn": 7, - "endLine": 19, - "endColumn": 17, + "endLine": 34, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (dynamic reference: {{resolve:ssm:/config/bucket-name}})" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Instance", + "logicalId": "ValidFargateSplunk", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 34, + "startLine": 35, "startColumn": 7, - "endLine": 34, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 35, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (dynamic reference: prefix-{{resolve:ssm:/ec2/ami-id}})" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Instance", + "logicalId": "ValidFargateSplunk", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 35, + "startLine": 36, "startColumn": 7, - "endLine": 35, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 36, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { - "ruleId": "I9003", + "ruleId": "I9001", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", + "entity": { + "logicalId": "ValidFargateSplunk", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ScheduledRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ScheduledRule", + "logicalId": "NonFargateTask", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 48, + "startColumn": 7, + "endLine": 48, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Instance", + "logicalId": "NonFargateTask", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 33, - "startColumn": 5, - "endLine": 33, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/functions/foreach.yaml": { - "filePath": "good/functions/foreach.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 + "startLine": 49, + "startColumn": 7, + "endLine": 49, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'S3BucketA' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "S3BucketA", + "logicalId": "NonFargateTask", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 10, - "startColumn": 1, - "endLine": 10, - "endColumn": 10, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 51, + "startColumn": 7, + "endLine": 51, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'S3BucketB' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "S3BucketB", + "logicalId": "NonFargateTask", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 10, - "startColumn": 1, - "endLine": 10, - "endColumn": 10, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 52, + "startColumn": 7, + "endLine": 52, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'S3BucketC' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "S3BucketC", + "logicalId": "FargateNullPC", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 10, - "startColumn": 1, - "endLine": 10, - "endColumn": 10, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/functions/get_stack_output.yaml": { - "filePath": "good/functions/get_stack_output.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 10, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 10, - "debug": 0 + "startLine": 63, + "startColumn": 7, + "endLine": 63, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Topic1' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic1", + "logicalId": "FargateNullPC", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 15, - "startColumn": 5, - "endLine": 15, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 64, + "startColumn": 7, + "endLine": 64, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Topic2' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic2", + "logicalId": "FargateNullPC", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 23, - "startColumn": 5, - "endLine": 23, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 66, + "startColumn": 7, + "endLine": 66, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Topic3' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic3", + "logicalId": "FargateNullPC", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 33, - "startColumn": 5, - "endLine": 33, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 67, + "startColumn": 7, + "endLine": 67, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Topic4' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic4", + "logicalId": "FargateNullPC", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 44, - "startColumn": 5, - "endLine": 44, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 68, + "startColumn": 7, + "endLine": 68, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Topic5' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'PlacementConstraints' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic5", + "logicalId": "FargateNullPC", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.PlacementConstraints", "category": "Best Practice", - "startLine": 55, - "startColumn": 5, - "endLine": 55, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 69, + "startColumn": 7, + "endLine": 69, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Topic6' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic6", + "logicalId": "FargateNullPC", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 65, - "startColumn": 5, - "endLine": 65, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 70, + "startColumn": 7, + "endLine": 70, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Topic7' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic7", + "logicalId": "PayPerRequestTable", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 74, - "startColumn": 5, - "endLine": 74, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 79, + "startColumn": 7, + "endLine": 79, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Topic8' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic8", + "logicalId": "PayPerRequestTable", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 83, - "startColumn": 5, - "endLine": 83, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 81, + "startColumn": 7, + "endLine": 81, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Topic9' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic9", + "logicalId": "ProvisionedTable", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 95, - "startColumn": 5, - "endLine": 95, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 92, + "startColumn": 7, + "endLine": 92, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Topic10' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic10", + "logicalId": "ProvisionedTable", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 106, - "startColumn": 5, - "endLine": 106, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/functions/ref.yaml": { - "filePath": "good/functions/ref.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 + "startLine": 97, + "startColumn": 7, + "endLine": 97, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "good/functions/relationship_conditions.yaml": { - "filePath": "good/functions/relationship_conditions.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 1, - "errors": 1, - "warnings": 0, - "informational": 4, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'Role' is a required property", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AMIIDLookup", + "logicalId": "DefaultWithThroughput", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'Role'", - "category": "Schema", - "startLine": 36, - "startColumn": 5, - "endLine": 36, - "endColumn": 15, - "conditionScenario": { - "isPrimary": false + "propertyPath": "Properties.TableName", + "category": "Best Practice", + "startLine": 108, + "startColumn": 7, + "endLine": 108, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "DefaultWithThroughput", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" }, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.KeySchema", + "category": "Best Practice", + "startLine": 112, + "startColumn": 7, + "endLine": 112, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AMIIDLookup", + "logicalId": "FargateIntCpu", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 46, + "propertyPath": "Properties.Family", + "category": "Best Practice", + "startLine": 123, "startColumn": 7, - "endLine": 46, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "endLine": 123, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs4.3", - "lifecycle": "end-of-life" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaExecutionRole", + "logicalId": "FargateIntCpu", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 26, + "startLine": 124, "startColumn": 7, - "endLine": 26, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 124, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -777,19 +907,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "InstanceProfile", + "logicalId": "FargateIntCpu", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 31, + "startLine": 126, "startColumn": 7, - "endLine": 31, - "endColumn": 11, + "endLine": 126, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -797,297 +928,279 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaExecutionRole", + "logicalId": "FargateIntCpu", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 14, - "startColumn": 5, - "endLine": 14, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 127, + "startColumn": 7, + "endLine": 127, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'AMIIDLookup' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AMIIDLookup", + "logicalId": "FargateIntCpu", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 36, - "startColumn": 5, - "endLine": 36, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/functions/relationship_conditions_sam.yaml": { - "filePath": "good/functions/relationship_conditions_sam.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 4, - "debug": 0 + "startLine": 128, + "startColumn": 7, + "endLine": 128, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'provided.al2' was deprecated on '2026-07-31'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'provided.al2023'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionC", + "logicalId": "FargateIntCpu", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 36, + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 129, "startColumn": 7, - "endLine": 36, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 129, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "provided.al2", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApplicationId' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigEnvironment", + "logicalId": "CorrelatedFargateThenEc2", "entityType": "Resource", - "resourceType": "AWS::AppConfig::Environment" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ApplicationId", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 31, + "startLine": 139, "startColumn": 7, - "endLine": 31, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appconfig.git", + "endLine": 139, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'ConfigApplication'" + "resolutionSource": "Fn::If on condition 'IsProd'" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ConfigApplication' of type 'AWS::AppConfig::Application' supports Tags but none are configured", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigApplication", + "logicalId": "CorrelatedFargateThenEc2", "entityType": "Resource", - "resourceType": "AWS::AppConfig::Application" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 140, + "startColumn": 7, + "endLine": 140, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ConfigEnvironment' of type 'AWS::AppConfig::Environment' supports Tags but none are configured", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigEnvironment", + "logicalId": "CorrelatedFargateThenEc2", "entityType": "Resource", - "resourceType": "AWS::AppConfig::Environment" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 30, - "startColumn": 5, - "endLine": 30, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 141, + "startColumn": 7, + "endLine": 141, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FunctionC' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionC", + "logicalId": "CorrelatedFargateThenEc2", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 35, - "startColumn": 5, - "endLine": 35, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/functions/select_string_index.yaml": { - "filePath": "good/functions/select_string_index.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 10, - "debug": 0 + "startLine": 142, + "startColumn": 7, + "endLine": 142, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "CorrelatedFargateThenEc2", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 10, + "startLine": 143, "startColumn": 7, - "endLine": 10, - "endColumn": 12, + "endLine": 143, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "CorrelatedEc2ThenFargate", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 11, + "startLine": 151, "startColumn": 7, - "endLine": 11, - "endColumn": 16, + "endLine": 151, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "CorrelatedEc2ThenFargate", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 12, + "startLine": 152, "startColumn": 7, - "endLine": 12, - "endColumn": 23, + "endLine": 152, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Select on non-list value)" + "resolutionSource": "Fn::If on condition 'IsProd'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "CorrelatedEc2ThenFargate", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 19, + "startLine": 153, "startColumn": 7, - "endLine": 19, - "endColumn": 12, + "endLine": 153, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "CorrelatedEc2ThenFargate", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 20, + "startLine": 154, "startColumn": 7, - "endLine": 20, - "endColumn": 16, + "endLine": 154, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -1097,625 +1210,502 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "CorrelatedEc2ThenFargate", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 21, + "startLine": 155, "startColumn": 7, - "endLine": 21, - "endColumn": 23, + "endLine": 155, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Select on non-list value)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Vpc", + "logicalId": "CorrelatedProvisionedThenOnDemand", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 28, + "startLine": 166, "startColumn": 7, - "endLine": 28, + "endLine": 166, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SubnetA' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "CorrelatedOnDemandThenProvisioned", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 177, + "startColumn": 7, + "endLine": 177, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SubnetB' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "CorrelatedFargateSizeThenEc2", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 18, - "startColumn": 5, - "endLine": 18, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 187, + "startColumn": 7, + "endLine": 187, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Vpc", + "logicalId": "CorrelatedFargateSizeThenEc2", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 27, - "startColumn": 5, - "endLine": 27, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/functions/split_get_stack_output.yaml": { - "filePath": "good/functions/split_get_stack_output.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 + "startLine": 188, + "startColumn": 7, + "endLine": 188, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "CorrelatedFargateSizeThenEc2", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 189, + "startColumn": 7, + "endLine": 189, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'AllHeaders' of type 'AWS::SSM::Parameter' supports Tags but none are configured", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AllHeaders", + "logicalId": "CorrelatedFargateSizeThenEc2", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 21, - "startColumn": 5, - "endLine": 21, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 190, + "startColumn": 7, + "endLine": 190, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FirstHeader' of type 'AWS::SSM::Parameter' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FirstHeader", + "logicalId": "CorrelatedFargateSizeThenEc2", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 34, - "startColumn": 5, - "endLine": 34, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/functions/sub.yaml": { - "filePath": "good/functions/sub.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 3, - "errors": 2, - "warnings": 2, - "informational": 16, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('ProductName' was unexpected)", - "source": "SCHEMA", - "entity": { - "logicalId": "MyStack", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "propertyPath": "Properties.ProductName", - "category": "Schema", - "startLine": 67, + "startLine": 191, "startColumn": 7, - "endLine": 67, - "endColumn": 18, - "ruleDescription": "Additional properties are not allowed", + "endLine": 191, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "ProductName", - "extra": { - "allowed_properties": [ - "NotificationARNs", - "Parameters", - "StackId", - "Tags", - "TemplateURL", - "TimeoutInMinutes" - ] - } + "lifecycle": "create-only" } }, { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('ProvisioningArtifactName' was unexpected)", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyStack", + "logicalId": "CorrelatedEc2SizeThenFargate", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ProvisioningArtifactName", - "category": "Schema", - "startLine": 68, + "propertyPath": "Properties.RequiresCompatibilities", + "category": "Best Practice", + "startLine": 199, "startColumn": 7, - "endLine": 68, - "endColumn": 31, - "ruleDescription": "Additional properties are not allowed", + "endLine": 199, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "ProvisioningArtifactName", - "extra": { - "allowed_properties": [ - "NotificationARNs", - "Parameters", - "StackId", - "Tags", - "TemplateURL", - "TimeoutInMinutes" - ] - } + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" } }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'TemplateURL' is a required property", - "source": "SCHEMA", - "entity": { - "logicalId": "MyStack", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'TemplateURL'", - "category": "Schema", - "startLine": 66, - "startColumn": 5, - "endLine": 66, - "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'String' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "CorrelatedEc2SizeThenFargate", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 33, + "propertyPath": "Properties.NetworkMode", + "category": "Best Practice", + "startLine": 200, "startColumn": 7, - "endLine": 33, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", + "endLine": 200, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "String" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" } }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-123456' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LaunchConfiguration", + "logicalId": "CorrelatedEc2SizeThenFargate", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 57, + "propertyPath": "Properties.Cpu", + "category": "Best Practice", + "startLine": 201, "startColumn": 7, - "endLine": 57, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Validate AMI id format", + "endLine": 201, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "ami-123456" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" } }, { - "ruleId": "W3002", - "severity": "WARN", - "message": "This code may only work with 'package' cli command", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "mySubStack", + "logicalId": "CorrelatedEc2SizeThenFargate", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.TemplateURL", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 44, + "startLine": 202, "startColumn": 7, - "endLine": 44, - "endColumn": 18, - "ruleDescription": "Warn when properties are configured to only work with the package command", - "phase": "LINT" + "endLine": 202, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3697", - "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LaunchConfiguration", + "logicalId": "CorrelatedEc2SizeThenFargate", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::ECS::TaskDefinition" }, - "category": "Deprecation", - "startLine": 54, - "startColumn": 3, - "endLine": 54, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 203, + "startColumn": 7, + "endLine": 203, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'ValidFargate' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "mySubStack", + "logicalId": "ValidFargate", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::ECS::TaskDefinition" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 41, - "startColumn": 3, - "endLine": 41, - "endColumn": 13, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'ValidFargateSplunk' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "mySubStack", + "logicalId": "ValidFargateSplunk", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::ECS::TaskDefinition" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 41, - "startColumn": 3, - "endLine": 41, - "endColumn": 13, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 30, + "startColumn": 5, + "endLine": 30, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'NonFargateTask' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyStack", + "logicalId": "NonFargateTask", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::ECS::TaskDefinition" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 64, - "startColumn": 3, - "endLine": 64, - "endColumn": 10, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 47, + "startColumn": 5, + "endLine": 47, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'FargateNullPC' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyStack", + "logicalId": "FargateNullPC", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::ECS::TaskDefinition" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 64, - "startColumn": 3, - "endLine": 64, - "endColumn": 10, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 62, + "startColumn": 5, + "endLine": 62, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Resource 'PayPerRequestTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "PayPerRequestTable", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "myInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 34, - "startColumn": 7, - "endLine": 34, + "startLine": 78, + "startColumn": 5, + "endLine": 78, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Base64 with unresolvable argument)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "myAlb", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" - }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 52, - "startColumn": 7, - "endLine": 52, - "endColumn": 11, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Resource 'ProvisionedTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LaunchConfiguration", + "logicalId": "ProvisionedTable", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 57, - "startColumn": 7, - "endLine": 57, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 91, + "startColumn": 5, + "endLine": 91, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "message": "Resource 'DefaultWithThroughput' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LaunchConfiguration", + "logicalId": "DefaultWithThroughput", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 58, - "startColumn": 7, - "endLine": 58, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 107, + "startColumn": 5, + "endLine": 107, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'UserData' is create-only; updating it will cause resource replacement", + "message": "Resource 'FargateIntCpu' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LaunchConfiguration", + "logicalId": "FargateIntCpu", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 59, - "startColumn": 7, - "endLine": 59, + "startLine": 122, + "startColumn": 5, + "endLine": 122, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Base64 with unresolvable argument)" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'CorrelatedFargateThenEc2' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myVPc2", + "logicalId": "CorrelatedFargateThenEc2", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 72, - "startColumn": 7, - "endLine": 72, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:${myCidr}1)" - } + "startLine": 138, + "startColumn": 5, + "endLine": 138, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'CorrelatedEc2ThenFargate' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "CorrelatedEc2ThenFargate", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 32, + "startLine": 150, "startColumn": 5, - "endLine": 32, + "endLine": 150, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -1723,19 +1713,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'mySubStack' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Resource 'CorrelatedProvisionedThenOnDemand' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySubStack", + "logicalId": "CorrelatedProvisionedThenOnDemand", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 43, + "startLine": 163, "startColumn": 5, - "endLine": 43, + "endLine": 163, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -1743,19 +1733,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myAlb' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "message": "Resource 'CorrelatedOnDemandThenProvisioned' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myAlb", + "logicalId": "CorrelatedOnDemandThenProvisioned", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 51, + "startLine": 174, "startColumn": 5, - "endLine": 51, + "endLine": 174, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -1763,19 +1753,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyStack' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Resource 'CorrelatedFargateSizeThenEc2' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyStack", + "logicalId": "CorrelatedFargateSizeThenEc2", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 66, + "startLine": 186, "startColumn": 5, - "endLine": 66, + "endLine": 186, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -1783,35 +1773,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myVPc2' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "message": "Resource 'CorrelatedEc2SizeThenFargate' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myVPc2", + "logicalId": "CorrelatedEc2SizeThenFargate", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 71, + "startLine": 198, "startColumn": 5, - "endLine": 71, + "endLine": 198, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/functions/sub_needed.yaml": { - "filePath": "good/functions/sub_needed.yaml", + "good/ecs_fargate_decimal_units.yaml": { + "filePath": "good/ecs_fargate_decimal_units.yaml", "status": "OK", "metadata": { - "resourcesScanned": 6, + "resourcesScanned": 7, "counts": { - "fatal": 3, + "fatal": 0, "errors": 0, - "warnings": 4, - "informational": 9, + "warnings": 0, + "informational": 42, "debug": 0 }, "suppressed": 0, @@ -1820,201 +1810,206 @@ }, "diagnostics": [ { - "ruleId": "F1020", - "severity": "FATAL", - "message": "Fn::GetAtt references non-existent resource 'GreetingLambda'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "GreetingRequest", + "logicalId": "QuarterVcpuDecimal", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ECS::TaskDefinition" }, - "suggestedFix": "Check that the GetAtt target resource exists in the template", - "category": "Intrinsic Function", - "startLine": 86, - "startColumn": 3, - "endLine": 86, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" + "propertyPath": "Properties.RequiresCompatibilities", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'GreetingResource' is not one of ['AMIId', 'AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'GreetingRequest', 'IOTPolicies', 'Key', 'MyContentBucket', 'TestGoodStateMachine1', 'myPolicy', 'myPolicy2']", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "GreetingRequest", + "logicalId": "QuarterVcpuDecimal", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ResourceId", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 114, + "propertyPath": "Properties.NetworkMode", + "category": "Best Practice", + "startLine": 7, "startColumn": 7, - "endLine": 114, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Ref/GetAtt target must exist", + "endLine": 7, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "resolutionSource": "dynamic (unknown ref target: GreetingResource)" + "lifecycle": "create-only" } }, { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'GreetingApi' is not one of ['AMIId', 'AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'GreetingRequest', 'IOTPolicies', 'Key', 'MyContentBucket', 'TestGoodStateMachine1', 'myPolicy', 'myPolicy2']", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "GreetingRequest", + "logicalId": "QuarterVcpuDecimal", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RestApiId", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 115, + "propertyPath": "Properties.Cpu", + "category": "Best Practice", + "startLine": 8, "startColumn": 7, - "endLine": 115, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Ref/GetAtt target must exist", + "endLine": 8, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "resolutionSource": "dynamic (unknown ref target: GreetingApi)" + "lifecycle": "create-only" } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'MyContentBucket' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyContentBucket", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/MyContentBucket", - "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 18, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AMIId' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AMIId", - "entityType": "Parameter" + "logicalId": "QuarterVcpuDecimal", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Parameters/AMIId", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 8, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TestGoodStateMachine1", + "logicalId": "QuarterVcpuDecimal", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RoleArn", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 156, + "startLine": 10, "startColumn": 7, - "endLine": 156, - "endColumn": 14, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" + "endLine": 10, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TestGoodStateMachine1", + "logicalId": "HalfVcpuDecimal", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::ECS::TaskDefinition" }, - "category": "Security", - "startLine": 137, - "startColumn": 3, - "endLine": 137, - "endColumn": 24, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "propertyPath": "Properties.RequiresCompatibilities", + "category": "Best Practice", + "startLine": 18, + "startColumn": 7, + "endLine": 18, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I1022", + "ruleId": "I9001", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "GreetingRequest", + "logicalId": "HalfVcpuDecimal", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Integration.Uri.Fn::Join", - "category": "Intrinsic Function", - "startLine": 95, - "startColumn": 11, - "endLine": 95, - "endColumn": 19, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "propertyPath": "Properties.NetworkMode", + "category": "Best Practice", + "startLine": 19, + "startColumn": 7, + "endLine": 19, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I1022", + "ruleId": "I9001", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "GreetingRequest", + "logicalId": "HalfVcpuDecimal", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Integration.RequestTemplates.application/json.Fn::Join", - "category": "Intrinsic Function", - "startLine": 107, - "startColumn": 13, - "endLine": 107, - "endColumn": 21, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "propertyPath": "Properties.Cpu", + "category": "Best Practice", + "startLine": 20, + "startColumn": 7, + "endLine": 20, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GreetingRequest", + "logicalId": "HalfVcpuDecimal", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 90, + "startLine": 21, "startColumn": 7, - "endLine": 90, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 21, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2024,67 +2019,66 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GreetingRequest", + "logicalId": "HalfVcpuDecimal", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 114, + "startLine": 22, "startColumn": 7, - "endLine": 114, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 22, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (unknown ref target: GreetingResource)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GreetingRequest", + "logicalId": "DecimalEquivalent", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 115, + "startLine": 30, "startColumn": 7, - "endLine": 115, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 30, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (unknown ref target: GreetingApi)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "IOTPolicies", + "logicalId": "DecimalEquivalent", "entityType": "Resource", - "resourceType": "AWS::IoT::Policy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyName", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 121, + "startLine": 31, "startColumn": 7, - "endLine": 121, - "endColumn": 17, + "endLine": 31, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2092,163 +2086,160 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Key' of type 'AWS::ApiGateway::ApiKey' supports Tags but none are configured", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Key", + "logicalId": "DecimalEquivalent", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::ApiKey" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 84, - "startColumn": 5, - "endLine": 84, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 32, + "startColumn": 7, + "endLine": 32, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'IOTPolicies' of type 'AWS::IoT::Policy' supports Tags but none are configured", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "IOTPolicies", + "logicalId": "DecimalEquivalent", "entityType": "Resource", - "resourceType": "AWS::IoT::Policy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 120, - "startColumn": 5, - "endLine": 120, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TestGoodStateMachine1' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TestGoodStateMachine1", + "logicalId": "DecimalEquivalent", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 139, - "startColumn": 5, - "endLine": 139, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/functions/sub_needed_custom_excludes.yaml": { - "filePath": "good/functions/sub_needed_custom_excludes.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 1, - "warnings": 1, - "informational": 2, - "debug": 0 + "startLine": 34, + "startColumn": 7, + "endLine": 34, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3031", - "severity": "FATAL", - "message": "'TestRole-${Stage}' does not match pattern '^[\\w+=,.@-]+$'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "TestRole", + "logicalId": "PlusDecimalEquivalent", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RoleName", - "category": "Schema", - "startLine": 10, + "propertyPath": "Properties.RequiresCompatibilities", + "category": "Best Practice", + "startLine": 42, "startColumn": 7, - "endLine": 10, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Value does not match pattern", + "endLine": 42, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "TestRole-${Stage}", - "expectedConstraint": "^[\\w+=,.@-]+$" + "lifecycle": "create-only" } }, { - "ruleId": "E1029", - "severity": "ERROR", - "message": "Found an embedded parameter '${Stage}' outside of an 'Fn::Sub' at Properties.RoleName", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "TestRole", + "logicalId": "PlusDecimalEquivalent", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RoleName", - "suggestedFix": "Wrap the string with Fn::Sub", - "category": "Intrinsic Function", - "startLine": 10, + "propertyPath": "Properties.NetworkMode", + "category": "Best Practice", + "startLine": 43, "startColumn": 7, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Substitution variable ${X} requires Fn::Sub", - "phase": "LINT" + "endLine": 43, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Stage' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Stage", - "entityType": "Parameter" + "logicalId": "PlusDecimalEquivalent", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Parameters/Stage", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 8, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 44, + "startColumn": 7, + "endLine": 44, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TestRole", + "logicalId": "PlusDecimalEquivalent", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 10, + "startLine": 45, "startColumn": 7, - "endLine": 10, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 45, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2256,319 +2247,183 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TestRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TestRole", + "logicalId": "PlusDecimalEquivalent", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/functions/sub_needed_transform.yaml": { - "filePath": "good/functions/sub_needed_transform.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "good/functions_findinmap.yaml": { - "filePath": "good/functions_findinmap.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 6, - "debug": 0 + "startLine": 46, + "startColumn": 7, + "endLine": 46, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance1", + "logicalId": "LeadingZeroEquivalent", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 14, + "startLine": 54, "startColumn": 7, - "endLine": 14, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 54, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (FindInMap with dynamic map name)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance2", + "logicalId": "LeadingZeroEquivalent", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 18, + "startLine": 55, "startColumn": 7, - "endLine": 18, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 55, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (FindInMap with dynamic map name)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance3", + "logicalId": "LeadingZeroEquivalent", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 26, + "startLine": 56, "startColumn": 7, - "endLine": 26, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 56, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (FindInMap with dynamic map name)" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myInstance1' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance1", + "logicalId": "LeadingZeroEquivalent", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 13, - "startColumn": 5, - "endLine": 13, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 57, + "startColumn": 7, + "endLine": 57, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myInstance2' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance2", + "logicalId": "LeadingZeroEquivalent", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 58, + "startColumn": 7, + "endLine": 58, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myInstance3' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance3", + "logicalId": "LeadingDecimalPointEquivalent", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/functions_findinmap_default_value.yaml": { - "filePath": "good/functions_findinmap_default_value.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 9, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 5, - "informational": 18, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W3696", - "severity": "WARN", - "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", - "source": "CFN_LINT", - "entity": { - "logicalId": "Mesh0", - "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" - }, - "category": "Deprecation", - "startLine": 43, - "startColumn": 3, - "endLine": 43, - "endColumn": 8, - "ruleDescription": "Resource type is from a service that is sunsetting", - "phase": "SCHEMA" - }, - { - "ruleId": "W3696", - "severity": "WARN", - "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", - "source": "CFN_LINT", - "entity": { - "logicalId": "Mesh1", - "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" - }, - "category": "Deprecation", - "startLine": 59, - "startColumn": 3, - "endLine": 59, - "endColumn": 8, - "ruleDescription": "Resource type is from a service that is sunsetting", - "phase": "SCHEMA" - }, - { - "ruleId": "W3696", - "severity": "WARN", - "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", - "source": "CFN_LINT", - "entity": { - "logicalId": "Mesh2", - "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" - }, - "category": "Deprecation", - "startLine": 70, - "startColumn": 3, - "endLine": 70, - "endColumn": 8, - "ruleDescription": "Resource type is from a service that is sunsetting", - "phase": "SCHEMA" - }, - { - "ruleId": "W3696", - "severity": "WARN", - "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", - "source": "CFN_LINT", - "entity": { - "logicalId": "Mesh3", - "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" - }, - "category": "Deprecation", - "startLine": 81, - "startColumn": 3, - "endLine": 81, - "endColumn": 8, - "ruleDescription": "Resource type is from a service that is sunsetting", - "phase": "SCHEMA" - }, - { - "ruleId": "W3696", - "severity": "WARN", - "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", - "source": "CFN_LINT", - "entity": { - "logicalId": "Mesh4", - "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" - }, - "category": "Deprecation", - "startLine": 93, - "startColumn": 3, - "endLine": 93, - "endColumn": 8, - "ruleDescription": "Resource type is from a service that is sunsetting", - "phase": "SCHEMA" + "startLine": 66, + "startColumn": 7, + "endLine": 66, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Cluster0", + "logicalId": "LeadingDecimalPointEquivalent", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ClusterName", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 14, + "startLine": 67, "startColumn": 7, - "endLine": 14, + "endLine": 67, "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2578,19 +2433,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Cluster1", + "logicalId": "LeadingDecimalPointEquivalent", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ClusterName", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 22, + "startLine": 68, "startColumn": 7, - "endLine": 22, - "endColumn": 18, + "endLine": 68, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2600,19 +2456,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Cluster2", + "logicalId": "LeadingDecimalPointEquivalent", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ClusterName", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 30, + "startLine": 69, "startColumn": 7, - "endLine": 30, - "endColumn": 18, + "endLine": 69, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2622,19 +2479,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Cluster3", + "logicalId": "LeadingDecimalPointEquivalent", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ClusterName", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 38, + "startLine": 70, "startColumn": 7, - "endLine": 38, - "endColumn": 18, + "endLine": 70, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2644,19 +2502,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Mesh0", + "logicalId": "TrailingDecimalPointEquivalent", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.MeshName", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 46, + "startLine": 78, "startColumn": 7, - "endLine": 46, - "endColumn": 15, + "endLine": 78, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2666,19 +2525,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Mesh1", + "logicalId": "TrailingDecimalPointEquivalent", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.MeshName", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 62, + "startLine": 79, "startColumn": 7, - "endLine": 62, - "endColumn": 15, + "endLine": 79, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2688,19 +2548,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Mesh2", + "logicalId": "TrailingDecimalPointEquivalent", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.MeshName", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 73, + "startLine": 80, "startColumn": 7, - "endLine": 73, - "endColumn": 15, + "endLine": 80, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2710,19 +2571,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Mesh3", + "logicalId": "TrailingDecimalPointEquivalent", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.MeshName", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 84, + "startLine": 81, "startColumn": 7, - "endLine": 84, - "endColumn": 15, + "endLine": 81, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2732,19 +2594,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Mesh4", + "logicalId": "TrailingDecimalPointEquivalent", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.MeshName", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 96, + "startLine": 82, "startColumn": 7, - "endLine": 96, - "endColumn": 15, + "endLine": 82, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2754,19 +2617,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Cluster0' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Resource 'QuarterVcpuDecimal' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Cluster0", + "logicalId": "QuarterVcpuDecimal", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 13, + "startLine": 5, "startColumn": 5, - "endLine": 13, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -2774,19 +2637,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Cluster1' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Resource 'HalfVcpuDecimal' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Cluster1", + "logicalId": "HalfVcpuDecimal", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 21, + "startLine": 17, "startColumn": 5, - "endLine": 21, + "endLine": 17, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -2794,12 +2657,12 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Cluster2' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Resource 'DecimalEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Cluster2", + "logicalId": "DecimalEquivalent", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -2814,19 +2677,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Cluster3' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Resource 'PlusDecimalEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Cluster3", + "logicalId": "PlusDecimalEquivalent", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 37, + "startLine": 41, "startColumn": 5, - "endLine": 37, + "endLine": 41, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -2834,59 +2697,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Mesh0' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", + "message": "Resource 'LeadingZeroEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Mesh0", + "logicalId": "LeadingZeroEquivalent", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 45, + "startLine": 53, "startColumn": 5, - "endLine": 45, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Mesh1' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Mesh1", - "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 61, - "startColumn": 5, - "endLine": 61, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Mesh2' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Mesh2", - "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 72, - "startColumn": 5, - "endLine": 72, + "endLine": 53, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -2894,19 +2717,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Mesh3' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", + "message": "Resource 'LeadingDecimalPointEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Mesh3", + "logicalId": "LeadingDecimalPointEquivalent", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 83, + "startLine": 65, "startColumn": 5, - "endLine": 83, + "endLine": 65, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -2914,35 +2737,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Mesh4' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", + "message": "Resource 'TrailingDecimalPointEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Mesh4", + "logicalId": "TrailingDecimalPointEquivalent", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 95, + "startLine": 77, "startColumn": 5, - "endLine": 95, + "endLine": 77, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/functions_findinmap_enhanced.yaml": { - "filePath": "good/functions_findinmap_enhanced.yaml", + "good/ecs_fargate_parameterized_cpu_memory.yaml": { + "filePath": "good/ecs_fargate_parameterized_cpu_memory.yaml", "status": "OK", "metadata": { - "resourcesScanned": 6, + "resourcesScanned": 4, "counts": { "fatal": 0, - "errors": 1, - "warnings": 2, - "informational": 17, + "errors": 0, + "warnings": 0, + "informational": 29, "debug": 0 }, "suppressed": 0, @@ -2950,169 +2773,112 @@ "severityLevel": "DEBUG" }, "diagnostics": [ - { - "ruleId": "E7001", - "severity": "ERROR", - "message": "Mapping 'MapName'.'TopKey1' key '{\"To\":\"Json\",\"String\":\"Function\"}' does not match format '^[a-zA-Z0-9]+$'", - "source": "CFN_LINT", - "entity": { - "logicalId": "MapName", - "entityType": "Mapping" - }, - "propertyPath": "Mappings/MapName/TopKey1/{\"To\":\"Json\",\"String\":\"Function\"}", - "category": "Structure", - "startLine": 15, - "startColumn": 7, - "endLine": 15, - "endColumn": 40, - "ruleDescription": "Mappings are appropriately configured", - "phase": "LINT" - }, - { - "ruleId": "W3696", - "severity": "WARN", - "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", - "source": "CFN_LINT", - "entity": { - "logicalId": "Mesh", - "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" - }, - "category": "Deprecation", - "startLine": 20, - "startColumn": 3, - "endLine": 20, - "endColumn": 7, - "ruleDescription": "Resource type is from a service that is sunsetting", - "phase": "SCHEMA" - }, - { - "ruleId": "W3696", - "severity": "WARN", - "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", - "source": "CFN_LINT", - "entity": { - "logicalId": "Mesh2", - "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" - }, - "category": "Deprecation", - "startLine": 33, - "startColumn": 3, - "endLine": 33, - "endColumn": 8, - "ruleDescription": "Resource type is from a service that is sunsetting", - "phase": "SCHEMA" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "Cluster", - "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" - }, - "propertyPath": "Properties.ClusterName.Fn::FindInMap.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 52, - "startColumn": 11, - "endLine": 52, - "endColumn": 19, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, { "ruleId": "I1022", "severity": "INFO", "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "Cluster", + "logicalId": "JoinedTask", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ClusterName.Fn::FindInMap.2.Fn::Join", + "propertyPath": "Properties.Cpu.Fn::Join", "category": "Intrinsic Function", - "startLine": 56, - "startColumn": 11, - "endLine": 56, - "endColumn": 19, + "startLine": 66, + "startColumn": 7, + "endLine": 66, + "endColumn": 15, "ruleDescription": "Use Sub instead of Join", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "TaskA", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ECS::TaskDefinition" }, + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 59, - "startColumn": 3, - "endLine": 59, - "endColumn": 8, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 29, + "startColumn": 7, + "endLine": 29, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "TaskA", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ECS::TaskDefinition" }, + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 59, - "startColumn": 3, - "endLine": 59, - "endColumn": 8, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 30, + "startColumn": 7, + "endLine": 30, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "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", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "TaskA", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 61, - "startColumn": 5, - "endLine": 61, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "startLine": 31, + "startColumn": 7, + "endLine": 31, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Mesh", + "logicalId": "TaskA", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.MeshName", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 23, + "startLine": 32, "startColumn": 7, - "endLine": 23, - "endColumn": 15, + "endLine": 32, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3122,42 +2888,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Mesh2", + "logicalId": "TaskA", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.MeshName", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 36, + "startLine": 33, "startColumn": 7, - "endLine": 36, - "endColumn": 15, + "endLine": 33, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "TaskA", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ClusterName", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 49, + "startLine": 34, "startColumn": 7, - "endLine": 49, - "endColumn": 18, + "endLine": 34, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3167,20 +2934,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "TaskB", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.QueueName", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 62, + "startLine": 41, "startColumn": 7, - "endLine": 62, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "endLine": 41, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3190,41 +2957,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Cluster2", + "logicalId": "TaskB", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ClusterName", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 81, + "startLine": 42, "startColumn": 7, - "endLine": 81, - "endColumn": 18, + "endLine": 42, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Cluster3", + "logicalId": "TaskB", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ClusterName", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 103, + "startLine": 43, "startColumn": 7, - "endLine": 103, - "endColumn": 18, + "endLine": 43, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3232,217 +3002,185 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Mesh' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Mesh", + "logicalId": "TaskB", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 22, - "startColumn": 5, - "endLine": 22, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 44, + "startColumn": 7, + "endLine": 44, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Mesh2' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Mesh2", + "logicalId": "TaskB", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 35, - "startColumn": 5, - "endLine": 35, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 45, + "startColumn": 7, + "endLine": 45, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Cluster' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "TaskB", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 48, - "startColumn": 5, - "endLine": 48, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 46, + "startColumn": 7, + "endLine": 46, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Queue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "MappedTask", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 61, - "startColumn": 5, - "endLine": 61, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 53, + "startColumn": 7, + "endLine": 53, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Cluster2' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Cluster2", + "logicalId": "MappedTask", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 80, - "startColumn": 5, - "endLine": 80, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 54, + "startColumn": 7, + "endLine": 54, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Cluster3' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Cluster3", + "logicalId": "MappedTask", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 102, - "startColumn": 5, - "endLine": 102, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/generic.yaml": { - "filePath": "good/generic.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 13, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 3, - "informational": 25, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", - "source": "ENGINE", - "entity": { - "logicalId": "MyEC2Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 75, + "startLine": 55, "startColumn": 7, - "endLine": 75, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", - "phase": "LINT" + "endLine": 55, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" + } }, { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance1", + "logicalId": "MappedTask", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 95, + "propertyPath": "Properties.NetworkMode", + "category": "Best Practice", + "startLine": 56, "startColumn": 7, - "endLine": 95, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", - "phase": "LINT" - }, - { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", - "entity": { - "logicalId": "LambdaFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "category": "Security", - "startLine": 160, - "startColumn": 3, - "endLine": 160, - "endColumn": 17, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "endLine": 56, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RootRole", + "logicalId": "MappedTask", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 45, + "startLine": 57, "startColumn": 7, - "endLine": 45, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 57, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3452,19 +3190,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RootInstanceProfile", + "logicalId": "MappedTask", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 69, + "startLine": 58, "startColumn": 7, - "endLine": 69, - "endColumn": 11, + "endLine": 58, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3474,20 +3213,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "JoinedTask", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 75, + "startLine": 65, "startColumn": 7, - "endLine": 75, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 65, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3497,43 +3236,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "JoinedTask", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 76, + "startLine": 66, "startColumn": 7, - "endLine": 76, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 66, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "JoinedTask", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.KeyName", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 77, + "startLine": 67, "startColumn": 7, - "endLine": 77, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 67, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3543,43 +3283,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "JoinedTask", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.BlockDeviceMappings", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 79, + "startLine": 68, "startColumn": 7, - "endLine": 79, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 68, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "JoinedTask", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkInterfaces", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 86, + "startLine": 69, "startColumn": 7, - "endLine": 86, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 69, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3589,89 +3329,165 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "JoinedTask", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 88, + "startLine": 70, "startColumn": 7, - "endLine": 88, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 70, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Resource 'TaskA' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance1", + "logicalId": "TaskA", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 95, - "startColumn": 7, - "endLine": 95, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 28, + "startColumn": 5, + "endLine": 28, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TaskB' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "TaskB", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 40, + "startColumn": 5, + "endLine": 40, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MappedTask' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "MappedTask", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 52, + "startColumn": 5, + "endLine": 52, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'JoinedTask' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "JoinedTask", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 64, + "startColumn": 5, + "endLine": 64, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/ecs_fargate_units_and_sizes.yaml": { + "filePath": "good/ecs_fargate_units_and_sizes.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 7, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 43, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance1", + "logicalId": "QuarterVcpuHalfGb", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 96, + "startLine": 8, "startColumn": 7, - "endLine": 96, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 8, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance1", + "logicalId": "QuarterVcpuHalfGb", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.KeyName", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 97, + "startLine": 9, "startColumn": 7, - "endLine": 97, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 9, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3681,43 +3497,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance1", + "logicalId": "QuarterVcpuHalfGb", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.BlockDeviceMappings", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 98, + "startLine": 10, "startColumn": 7, - "endLine": 98, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 10, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance1", + "logicalId": "QuarterVcpuHalfGb", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkInterfaces", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 106, + "startLine": 11, "startColumn": 7, - "endLine": 106, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 11, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3727,359 +3543,365 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance1", + "logicalId": "QuarterVcpuHalfGb", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 113, + "startLine": 12, "startColumn": 7, - "endLine": 113, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 12, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZones' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ElasticLoadBalancer", + "logicalId": "QuarterVcpuHalfGb", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.AvailabilityZones", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 124, + "startLine": 16, "startColumn": 7, - "endLine": 124, - "endColumn": 24, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "endLine": 16, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HealthCheck' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ElasticLoadBalancer", + "logicalId": "EightVcpuSixtyGb", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.HealthCheck", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 133, + "startLine": 24, "startColumn": 7, - "endLine": 133, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "endLine": 24, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { - "ruleId": "I9003", + "ruleId": "I9001", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", + "entity": { + "logicalId": "EightVcpuSixtyGb", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'RootRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RootRole", + "logicalId": "EightVcpuSixtyGb", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 35, - "startColumn": 5, - "endLine": 35, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 26, + "startColumn": 7, + "endLine": 26, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyEC2Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "EightVcpuSixtyGb", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 74, - "startColumn": 5, - "endLine": 74, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 27, + "startColumn": 7, + "endLine": 27, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'mySnsTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySnsTopic", + "logicalId": "EightVcpuSixtyGb", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 90, - "startColumn": 3, - "endLine": 90, + "startLine": 28, + "startColumn": 7, + "endLine": 28, "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyEC2Instance1' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance1", + "logicalId": "EightVcpuSixtyGb", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 94, - "startColumn": 5, - "endLine": 94, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 32, + "startColumn": 7, + "endLine": 32, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ElasticIP' of type 'AWS::EC2::EIP' supports Tags but none are configured", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ElasticIP", + "logicalId": "SixteenVcpuFortyGb", "entityType": "Resource", - "resourceType": "AWS::EC2::EIP" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 119, - "startColumn": 5, - "endLine": 119, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 40, + "startColumn": 7, + "endLine": 40, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ElasticLoadBalancer' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ElasticLoadBalancer", + "logicalId": "SixteenVcpuFortyGb", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 123, - "startColumn": 5, - "endLine": 123, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 41, + "startColumn": 7, + "endLine": 41, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'IamPipeline' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "IamPipeline", + "logicalId": "SixteenVcpuFortyGb", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 144, - "startColumn": 5, - "endLine": 144, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 42, + "startColumn": 7, + "endLine": 42, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LambdaFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunction", + "logicalId": "SixteenVcpuFortyGb", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 162, - "startColumn": 5, - "endLine": 162, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/getatt_provisioned_product_outputs.yaml": { - "filePath": "good/getatt_provisioned_product_outputs.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 + "startLine": 43, + "startColumn": 7, + "endLine": 43, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ProvisionedProduct' of type 'AWS::ServiceCatalog::CloudFormationProvisionedProduct' supports Tags but none are configured", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProvisionedProduct", + "logicalId": "SixteenVcpuFortyGb", "entityType": "Resource", - "resourceType": "AWS::ServiceCatalog::CloudFormationProvisionedProduct" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 44, + "startColumn": 7, + "endLine": 44, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Topic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic", + "logicalId": "SixteenVcpuFortyGb", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 13, - "startColumn": 5, - "endLine": 13, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/getatt_ref_typed_nested_attribute.yaml": { - "filePath": "good/getatt_ref_typed_nested_attribute.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 7, - "debug": 0 + "startLine": 48, + "startColumn": 7, + "endLine": 48, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "ThirtyTwoVcpuSixtyGb", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 11, + "startLine": 56, "startColumn": 7, - "endLine": 11, + "endLine": 56, "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "ThirtyTwoVcpuSixtyGb", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 14, + "startLine": 57, "startColumn": 7, - "endLine": 14, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 57, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -4089,20 +3911,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "ThirtyTwoVcpuSixtyGb", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 16, + "startLine": 58, "startColumn": 7, - "endLine": 16, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 58, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -4112,110 +3934,112 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "ThirtyTwoVcpuSixtyGb", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.BackupRetentionPeriod", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 17, + "startLine": 59, "startColumn": 7, - "endLine": 17, - "endColumn": 28, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 59, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { - "ruleId": "I9003", + "ruleId": "I9001", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", + "entity": { + "logicalId": "ThirtyTwoVcpuSixtyGb", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Memory", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" + "startLine": 60, + "startColumn": 7, + "endLine": 60, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Database' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "ThirtyTwoVcpuSixtyGb", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 64, + "startColumn": 7, + "endLine": 64, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Parameter' of type 'AWS::SSM::Parameter' supports Tags but none are configured", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Parameter", + "logicalId": "ThirtyTwoVcpuOneTwentyGb", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 22, - "startColumn": 5, - "endLine": 22, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/getazs_resolves_current_regions.yaml": { - "filePath": "good/getazs_resolves_current_regions.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 8, - "debug": 0 + "startLine": 72, + "startColumn": 7, + "endLine": 72, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetApEast2", + "logicalId": "ThirtyTwoVcpuOneTwentyGb", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 10, + "startLine": 73, "startColumn": 7, - "endLine": 10, - "endColumn": 12, + "endLine": 73, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -4225,19 +4049,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetApEast2", + "logicalId": "ThirtyTwoVcpuOneTwentyGb", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 11, + "startLine": 74, "startColumn": 7, - "endLine": 11, - "endColumn": 16, + "endLine": 74, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -4247,19 +4072,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetApEast2", + "logicalId": "ThirtyTwoVcpuOneTwentyGb", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 12, + "startLine": 75, "startColumn": 7, - "endLine": 12, - "endColumn": 23, + "endLine": 75, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -4269,19 +4095,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetMxCentral1", + "logicalId": "ThirtyTwoVcpuOneTwentyGb", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 16, + "startLine": 76, "startColumn": 7, - "endLine": 16, - "endColumn": 12, + "endLine": 76, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -4291,19 +4118,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetMxCentral1", + "logicalId": "ThirtyTwoVcpuOneTwentyGb", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 17, + "startLine": 80, "startColumn": 7, - "endLine": 17, - "endColumn": 16, + "endLine": 80, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -4313,19 +4141,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetMxCentral1", + "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 18, + "startLine": 88, "startColumn": 7, - "endLine": 18, - "endColumn": 23, + "endLine": 88, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -4333,214 +4162,137 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SubnetApEast2' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetApEast2", + "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 89, + "startColumn": 7, + "endLine": 89, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SubnetMxCentral1' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetMxCentral1", + "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 15, - "startColumn": 5, - "endLine": 15, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/good_conditions_valid_refs.yaml": { - "filePath": "good/good_conditions_valid_refs.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 1, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'IsDev' is not used by any resource or Fn::If", - "source": "CFN_LINT", - "entity": { - "logicalId": "IsDev", - "entityType": "Condition" - }, - "propertyPath": "Conditions/IsDev", - "category": "Best Practice", - "startLine": 13, - "startColumn": 3, - "endLine": 13, - "endColumn": 8, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" + "startLine": 90, + "startColumn": 7, + "endLine": 90, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ProdBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProdBucket", + "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 22, - "startColumn": 3, - "endLine": 22, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/iam_conditional_resource_arns.yaml": { - "filePath": "good/iam_conditional_resource_arns.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "good/iam_intrinsic_resource_arns.yaml": { - "filePath": "good/iam_intrinsic_resource_arns.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 + "startLine": 91, + "startColumn": 7, + "endLine": 91, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SomeBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SomeBucket", + "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 10, - "startColumn": 3, - "endLine": 10, + "startLine": 92, + "startColumn": 7, + "endLine": 92, "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/iam_intrinsic_resource_arns_schema_valid.yaml": { - "filePath": "good/iam_intrinsic_resource_arns_schema_valid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 8, - "debug": 0 + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I1022", + "ruleId": "I9001", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "PolicyWithJoinResource", + "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Resource.Fn::Join", - "category": "Intrinsic Function", - "startLine": 48, - "startColumn": 15, - "endLine": 48, - "endColumn": 23, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 96, + "startColumn": 7, + "endLine": 96, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RoleInlinePolicy", + "logicalId": "ConditionalRequiredProperties", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 17, + "startLine": 105, "startColumn": 7, - "endLine": 17, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 105, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -4550,20 +4302,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserName' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PolicyWithRefResource", + "logicalId": "ConditionalRequiredProperties", "entityType": "Resource", - "resourceType": "AWS::IAM::UserPolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.UserName", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 65, + "startLine": 106, "startColumn": 7, - "endLine": 65, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 106, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -4573,125 +4325,134 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PolicyWithRefResource", + "logicalId": "ConditionalRequiredProperties", "entityType": "Resource", - "resourceType": "AWS::IAM::UserPolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyName", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 66, + "startLine": 107, "startColumn": 7, - "endLine": 66, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 107, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseAlternateSize'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSOPermissionSet", + "logicalId": "ConditionalRequiredProperties", "entityType": "Resource", - "resourceType": "AWS::SSO::PermissionSet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.InstanceArn", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 76, + "startLine": 108, "startColumn": 7, - "endLine": 76, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sso/aws-sso-permissionset", + "endLine": 108, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "parameter 'SsoInstanceArn' (type String)" + "resolutionSource": "Fn::If on condition 'UseAlternateSize'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSOPermissionSet", + "logicalId": "ConditionalRequiredProperties", "entityType": "Resource", - "resourceType": "AWS::SSO::PermissionSet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 77, + "startLine": 109, "startColumn": 7, - "endLine": 77, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sso/aws-sso-permissionset", + "endLine": 109, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseAlternateSize'" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'RoleInlinePolicy' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'PlacementConstraints' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RoleInlinePolicy", + "logicalId": "ConditionalRequiredProperties", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.PlacementConstraints", "category": "Best Practice", - "startLine": 16, - "startColumn": 5, - "endLine": 16, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 110, + "startColumn": 7, + "endLine": 110, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseAlternateSize'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SSOPermissionSet' of type 'AWS::SSO::PermissionSet' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSOPermissionSet", + "logicalId": "ConditionalRequiredProperties", "entityType": "Resource", - "resourceType": "AWS::SSO::PermissionSet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 75, - "startColumn": 5, - "endLine": 75, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 114, + "startColumn": 7, + "endLine": 114, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } } ] }, - "good/iam_valid.yaml": { - "filePath": "good/iam_valid.yaml", + "good/ecs_fargate_valid.yaml": { + "filePath": "good/ecs_fargate_valid.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 1, + "informational": 7, "debug": 0 }, "suppressed": 0, @@ -4700,332 +4461,303 @@ }, "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Role' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Role", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 18, - "startColumn": 5, - "endLine": 18, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/kms_key_identifier_forms.yaml": { - "filePath": "good/kms_key_identifier_forms.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 3, - "informational": 7, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", - "entity": { - "logicalId": "TopicKeyArn", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "category": "Security", - "startLine": 8, - "startColumn": 3, - "endLine": 8, - "endColumn": 14, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TopicAliasArn", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "category": "Security", - "startLine": 16, - "startColumn": 3, - "endLine": 16, - "endColumn": 16, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "propertyPath": "Properties.Cpu", + "category": "Best Practice", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TopicMultiRegionKeyArn", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "category": "Security", - "startLine": 24, - "startColumn": 3, - "endLine": 24, - "endColumn": 25, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "propertyPath": "Properties.Memory", + "category": "Best Practice", + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TopicKeyId' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TopicKeyId", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TopicKeyArn' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TopicKeyArn", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", "startLine": 10, - "startColumn": 5, + "startColumn": 7, "endLine": 10, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TopicAliasName' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TopicAliasName", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 14, - "startColumn": 5, - "endLine": 14, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TopicAliasArn' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TopicAliasArn", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 18, + "startLine": 5, "startColumn": 5, - "endLine": 18, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/elb_https_empty_sslcertificateid.yaml": { + "filePath": "good/elb_https_empty_sslcertificateid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TopicMultiRegionKeyId' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'ELB' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TopicMultiRegionKeyId", + "logicalId": "ELB", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 22, + "startLine": 7, "startColumn": 5, - "endLine": 22, + "endLine": 7, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/enum_case_insensitive_casing.yaml": { + "filePath": "good/enum_case_insensitive_casing.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 6, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TopicMultiRegionKeyArn' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TopicMultiRegionKeyArn", + "logicalId": "LowercaseType", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::Batch::ComputeEnvironment" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 26, - "startColumn": 5, - "endLine": 26, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 13, + "startColumn": 7, + "endLine": 13, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TopicIntrinsicAliasArn' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TopicIntrinsicAliasArn", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 30, - "startColumn": 5, - "endLine": 30, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/lambda_permission_source_account.yaml": { - "filePath": "good/lambda_permission_source_account.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 4, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'SourceArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "message": "Property 'ComputeResources.Subnets' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Perm", + "logicalId": "LowercaseType", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Batch::ComputeEnvironment" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.ComputeResources.Subnets", "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, + "startLine": 16, + "startColumn": 9, + "endLine": 16, "endColumn": 16, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" - }, - { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", - "entity": { - "logicalId": "Perm", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "category": "Security", - "startLine": 2, - "startColumn": 3, - "endLine": 2, - "endColumn": 7, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'ComputeResources.Type' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Perm", + "logicalId": "LowercaseType", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Batch::ComputeEnvironment" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.ComputeResources.Type", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, + "startLine": 18, + "startColumn": 9, + "endLine": 18, "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'Tags' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Perm", + "logicalId": "LowercaseType", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Batch::ComputeEnvironment" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", "category": "Best Practice", - "startLine": 6, + "startLine": 20, "startColumn": 7, - "endLine": 6, - "endColumn": 19, + "endLine": 20, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5035,19 +4767,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Perm", + "logicalId": "MixedCaseType", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Batch::ComputeEnvironment" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 7, + "startLine": 25, "startColumn": 7, - "endLine": 7, - "endColumn": 16, + "endLine": 25, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5057,19 +4789,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'Tags' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Perm", + "logicalId": "MixedCaseType", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Batch::ComputeEnvironment" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Tags", "category": "Best Practice", - "startLine": 8, + "startLine": 27, "startColumn": 7, - "endLine": 8, - "endColumn": 16, + "endLine": 27, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5078,16 +4810,16 @@ } ] }, - "good/lambda_permission_sourcearn_ref_no_account.yaml": { - "filePath": "good/lambda_permission_sourcearn_ref_no_account.yaml", + "good/functions/dynamic_reference_embedded.yaml": { + "filePath": "good/functions/dynamic_reference_embedded.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 4, "counts": { "fatal": 0, "errors": 0, - "warnings": 1, - "informational": 4, + "warnings": 0, + "informational": 8, "debug": 0 }, "suppressed": 0, @@ -5096,218 +4828,176 @@ }, "diagnostics": [ { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'SourceArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Perm", + "logicalId": "Sg", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 15, + "startLine": 11, "startColumn": 7, - "endLine": 15, - "endColumn": 16, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" + "endLine": 11, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Perm", + "logicalId": "Sg", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.GroupName", "category": "Best Practice", "startLine": 12, "startColumn": 7, "endLine": 12, - "endColumn": 13, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (dynamic reference: prefix-{{resolve:ssm:/network/sg-name}})" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Perm", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 13, + "startLine": 19, "startColumn": 7, - "endLine": 13, - "endColumn": 19, + "endLine": 19, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (dynamic reference: {{resolve:ssm:/config/bucket-name}})" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Perm", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 14, + "startLine": 34, "startColumn": 7, - "endLine": 14, - "endColumn": 16, + "endLine": 34, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (dynamic reference: prefix-{{resolve:ssm:/ec2/ami-id}})" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Perm", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 15, + "startLine": 35, "startColumn": 7, - "endLine": 15, - "endColumn": 16, + "endLine": 35, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } - } - ] - }, - "good/lambda_snapstart.yaml": { - "filePath": "good/lambda_snapstart.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 2, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2530", - "severity": "WARN", - "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", - "source": "CFN_LINT", - "entity": { - "logicalId": "SnapStartFunc", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.SnapStart.ApplyOn", - "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", - "category": "Best Practice", - "startLine": 14, - "startColumn": 9, - "endLine": 14, - "endColumn": 16, - "ruleDescription": "Validate that SnapStart is properly configured", - "phase": "LINT" }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", "source": "ENGINE", - "entity": { - "logicalId": "SnapStartFunc", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "category": "Security", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 16, - "ruleDescription": "Hardcoded account ID in ARN", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'ScheduledRule' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SnapStartFunc", + "logicalId": "ScheduledRule", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 25, + "startColumn": 5, + "endLine": 25, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SnapStartFunc' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SnapStartFunc", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 33, "startColumn": 5, - "endLine": 5, + "endLine": 33, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/lambda_zipfile.yaml": { - "filePath": "good/lambda_zipfile.yaml", + "good/functions/foreach.yaml": { + "filePath": "good/functions/foreach.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 3, "counts": { "fatal": 0, "errors": 0, @@ -5321,96 +5011,77 @@ }, "diagnostics": [ { - "ruleId": "I3042", + "ruleId": "I9040", "severity": "INFO", - "message": "ARN in Resource LambdaFn contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", - "source": "CFN_LINT", + "message": "Resource 'S3BucketA' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFn", + "logicalId": "S3BucketA", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Role.Fn::Sub", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 14, - "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", + "startLine": 10, + "startColumn": 1, + "endLine": 10, + "endColumn": 10, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'S3BucketB' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LambdaFn", + "logicalId": "S3BucketB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 10, + "startColumn": 1, + "endLine": 10, + "endColumn": 10, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LambdaFn' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'S3BucketC' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LambdaFn", + "logicalId": "S3BucketC", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, + "startLine": 10, + "startColumn": 1, + "endLine": 10, + "endColumn": 10, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/lifecycle_intrinsic_scenarios.yaml": { - "filePath": "good/lifecycle_intrinsic_scenarios.yaml", + "good/functions/get_stack_output.yaml": { + "filePath": "good/functions/get_stack_output.yaml", "status": "OK", "metadata": { - "resourcesScanned": 13, + "resourcesScanned": 10, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "good/mappings/name.yaml": { - "filePath": "good/mappings/name.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 1, - "informational": 0, + "informational": 10, "debug": 0 }, "suppressed": 0, @@ -5419,281 +5090,209 @@ }, "diagnostics": [ { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "startLine": 10, - "startColumn": 1, - "endLine": 10, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" - }, - { - "ruleId": "W7001", - "severity": "WARN", - "message": "Mapping 'RegionMap' is not referenced by any Fn::FindInMap", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Topic1' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "RegionMap", - "entityType": "Mapping" + "logicalId": "Topic1", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Mappings/RegionMap", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/mappings/used.yaml": { - "filePath": "good/mappings/used.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 3, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E1151", - "severity": "ERROR", - "message": "'vpc-123456' does not match format 'AWS::EC2::VPC.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Topic2' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "mySubnet", + "logicalId": "Topic2", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.VpcId", - "category": "Intrinsic Function", - "startLine": 21, - "startColumn": 7, - "endLine": 21, - "endColumn": 12, - "ruleDescription": "Validate VPC id format", - "phase": "SCHEMA", - "context": { - "actualValue": "vpc-123456" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 23, + "startColumn": 5, + "endLine": 23, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Topic3' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySubnet", + "logicalId": "Topic3", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 21, - "startColumn": 7, - "endLine": 21, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 33, + "startColumn": 5, + "endLine": 33, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'Topic4' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySubnet", + "logicalId": "Topic4", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (FindInMap with dynamic map name)" - } + "startLine": 44, + "startColumn": 5, + "endLine": 44, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'mySubnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'Topic5' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySubnet", + "logicalId": "Topic5", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 20, + "startLine": 55, "startColumn": 5, - "endLine": 20, + "endLine": 55, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/mappings_valid.yaml": { - "filePath": "good/mappings_valid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W7001", - "severity": "WARN", - "message": "Mapping 'RegionMap' is not referenced by any Fn::FindInMap", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Topic6' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "RegionMap", - "entityType": "Mapping" + "logicalId": "Topic6", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Mappings/RegionMap", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "startLine": 65, + "startColumn": 5, + "endLine": 65, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'R' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'Topic7' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "R", + "logicalId": "Topic7", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, - "startColumn": 3, - "endLine": 9, - "endColumn": 4, + "startLine": 74, + "startColumn": 5, + "endLine": 74, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/minimal.yaml": { - "filePath": "good/minimal.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'IamPipeline' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Resource 'Topic8' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "IamPipeline", + "logicalId": "Topic8", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, + "startLine": 83, "startColumn": 5, - "endLine": 9, + "endLine": 83, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/modules/minimal.yaml": { - "filePath": "good/modules/minimal.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'OtherResource' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'Topic9' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "OtherResource", + "logicalId": "Topic9", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 8, - "startColumn": 3, - "endLine": 8, - "endColumn": 16, + "startLine": 95, + "startColumn": 5, + "endLine": 95, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Topic10' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Topic10", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 106, + "startColumn": 5, + "endLine": 106, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/neptune_valid_instanceclass.yaml": { - "filePath": "good/neptune_valid_instanceclass.yaml", + "good/functions/ref.yaml": { + "filePath": "good/functions/ref.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, @@ -5701,6 +5300,24 @@ "fatal": 0, "errors": 0, "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "good/functions/relationship_conditions.yaml": { + "filePath": "good/functions/relationship_conditions.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 1, + "errors": 1, + "warnings": 0, "informational": 4, "debug": 0 }, @@ -5710,82 +5327,148 @@ }, "diagnostics": [ { - "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", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'Role' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Instance", + "logicalId": "AMIIDLookup", "entityType": "Resource", - "resourceType": "AWS::Neptune::DBInstance" + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'Role'", + "category": "Schema", + "startLine": 36, + "startColumn": 5, + "endLine": 36, + "endColumn": 15, + "conditionScenario": { + "isPrimary": false + }, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "AMIIDLookup", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 46, + "startColumn": 7, + "endLine": 46, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs4.3", + "lifecycle": "end-of-life" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "LambdaExecutionRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" }, + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 2, - "startColumn": 3, - "endLine": 2, + "startLine": 26, + "startColumn": 7, + "endLine": 26, "endColumn": 11, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Instance", + "logicalId": "InstanceProfile", "entityType": "Resource", - "resourceType": "AWS::Neptune::DBInstance" + "resourceType": "AWS::IAM::InstanceProfile" }, + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 2, - "startColumn": 3, - "endLine": 2, + "startLine": 31, + "startColumn": 7, + "endLine": 31, "endColumn": 11, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9003", + "ruleId": "I9040", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", + "entity": { + "logicalId": "LambdaExecutionRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "startLine": 14, + "startColumn": 5, + "endLine": 14, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Instance' of type 'AWS::Neptune::DBInstance' supports Tags but none are configured", + "message": "Resource 'AMIIDLookup' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Instance", + "logicalId": "AMIIDLookup", "entityType": "Resource", - "resourceType": "AWS::Neptune::DBInstance" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 4, + "startLine": 36, "startColumn": 5, - "endLine": 4, + "endLine": 36, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/no_value.yaml": { - "filePath": "good/no_value.yaml", + "good/functions/relationship_conditions_sam.yaml": { + "filePath": "good/functions/relationship_conditions_sam.yaml", "status": "OK", "metadata": { - "resourcesScanned": 5, + "resourcesScanned": 3, "counts": { "fatal": 0, "errors": 0, - "warnings": 2, - "informational": 13, + "warnings": 1, + "informational": 4, "debug": 0 }, "suppressed": 0, @@ -5794,345 +5477,361 @@ }, "diagnostics": [ { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'pProdMonitoringInterval' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "pProdMonitoringInterval", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/pProdMonitoringInterval", - "category": "Best Practice", - "startLine": 45, - "startColumn": 5, - "endLine": 45, - "endColumn": 28, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2001", + "ruleId": "W2531", "severity": "WARN", - "message": "Parameter 'pDevMonitoringInterval' is not referenced anywhere in the template", + "message": "Runtime 'provided.al2' was deprecated on '2026-07-31'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'provided.al2023'", "source": "CFN_LINT", "entity": { - "logicalId": "pDevMonitoringInterval", - "entityType": "Parameter" + "logicalId": "FunctionC", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Parameters/pDevMonitoringInterval", - "category": "Best Practice", - "startLine": 49, - "startColumn": 5, - "endLine": 49, - "endColumn": 27, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 36, + "startColumn": 7, + "endLine": 36, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "provided.al2", + "lifecycle": "deprecated" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'ApplicationId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rDBServerInstance", + "logicalId": "ConfigEnvironment", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::AppConfig::Environment" }, + "propertyPath": "Properties.ApplicationId", "category": "Best Practice", - "startLine": 123, - "startColumn": 5, - "endLine": 123, - "endColumn": 22, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 31, + "startColumn": 7, + "endLine": 31, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appconfig.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ConfigApplication'" + } }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'ConfigApplication' of type 'AWS::AppConfig::Application' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rDBServerInstance", + "logicalId": "ConfigApplication", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::AppConfig::Application" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 123, + "startLine": 25, "startColumn": 5, - "endLine": 123, - "endColumn": 22, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 25, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "message": "Resource 'ConfigEnvironment' of type 'AWS::AppConfig::Environment' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rParameterGroup", + "logicalId": "ConfigEnvironment", "entityType": "Resource", - "resourceType": "AWS::RDS::DBParameterGroup" + "resourceType": "AWS::AppConfig::Environment" }, - "propertyPath": "Properties.Description", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 59, - "startColumn": 13, - "endLine": 59, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 30, + "startColumn": 5, + "endLine": 30, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Resource 'FunctionC' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rParameterGroup", + "logicalId": "FunctionC", "entityType": "Resource", - "resourceType": "AWS::RDS::DBParameterGroup" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 60, - "startColumn": 13, - "endLine": 60, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'pDBParameterGroupFamily' (type String)" - } + "startLine": 35, + "startColumn": 5, + "endLine": 35, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/functions/select_string_index.yaml": { + "filePath": "good/functions/select_string_index.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 10, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AutoMinorVersionUpgrade' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rDBServerInstance", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.AutoMinorVersionUpgrade", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 128, - "startColumn": 13, - "endLine": 128, - "endColumn": 36, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rDBServerInstance", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.BackupRetentionPeriod", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 129, - "startColumn": 13, - "endLine": 129, - "endColumn": 34, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DBParameterGroupName' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rDBServerInstance", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.DBParameterGroupName", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 132, - "startColumn": 13, - "endLine": 132, - "endColumn": 33, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'rParameterGroup'" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Select on non-list value)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DBSubnetGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rDBServerInstance", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.DBSubnetGroupName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 133, - "startColumn": 13, - "endLine": 133, - "endColumn": 30, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 19, + "startColumn": 7, + "endLine": 19, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'rDBSubnetGroup'" + "resolutionSource": "Ref to 'Vpc'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rDBServerInstance", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 134, - "startColumn": 13, - "endLine": 134, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 20, + "startColumn": 7, + "endLine": 20, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "parameter 'pDBEngine' (type String)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rDBServerInstance", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 138, - "startColumn": 13, - "endLine": 138, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "parameter 'pDBMasterUsername' (type String)" + "resolutionSource": "dynamic (Select on non-list value)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MultiAZ' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rDBServerInstance", + "logicalId": "Vpc", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.MultiAZ", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 145, - "startColumn": 13, - "endLine": 145, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 28, + "startColumn": 7, + "endLine": 28, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Fn::If on condition 'MultiAZ'" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Resource 'SubnetA' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rDBServerInstance", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 148, - "startColumn": 13, - "endLine": 148, - "endColumn": 29, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'rDBMonitoringRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'SubnetB' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rDBMonitoringRole", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 96, - "startColumn": 9, - "endLine": 96, - "endColumn": 19, + "startLine": 18, + "startColumn": 5, + "endLine": 18, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Vpc", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 27, + "startColumn": 5, + "endLine": 27, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/no_w3010_on_unlisted_type.yaml": { - "filePath": "good/no_w3010_on_unlisted_type.yaml", + "good/functions/split_get_stack_output.yaml": { + "filePath": "good/functions/split_get_stack_output.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 3, "counts": { "fatal": 0, "errors": 0, - "warnings": 1, - "informational": 7, + "warnings": 0, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -6141,10 +5840,5200 @@ }, "diagnostics": [ { - "ruleId": "W2501", - "severity": "WARN", - "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", - "source": "CFN_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": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'AllHeaders' of type 'AWS::SSM::Parameter' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "AllHeaders", + "entityType": "Resource", + "resourceType": "AWS::SSM::Parameter" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 21, + "startColumn": 5, + "endLine": 21, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FirstHeader' of type 'AWS::SSM::Parameter' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FirstHeader", + "entityType": "Resource", + "resourceType": "AWS::SSM::Parameter" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 34, + "startColumn": 5, + "endLine": 34, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/functions/sub.yaml": { + "filePath": "good/functions/sub.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 7, + "counts": { + "fatal": 3, + "errors": 2, + "warnings": 2, + "informational": 16, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3002", + "severity": "FATAL", + "message": "Additional properties are not allowed ('ProductName' was unexpected)", + "source": "SCHEMA", + "entity": { + "logicalId": "MyStack", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.ProductName", + "category": "Schema", + "startLine": 67, + "startColumn": 7, + "endLine": 67, + "endColumn": 18, + "ruleDescription": "Additional properties are not allowed", + "phase": "SCHEMA", + "context": { + "property": "ProductName", + "extra": { + "allowed_properties": [ + "NotificationARNs", + "Parameters", + "StackId", + "Tags", + "TemplateURL", + "TimeoutInMinutes" + ] + } + } + }, + { + "ruleId": "F3002", + "severity": "FATAL", + "message": "Additional properties are not allowed ('ProvisioningArtifactName' was unexpected)", + "source": "SCHEMA", + "entity": { + "logicalId": "MyStack", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.ProvisioningArtifactName", + "category": "Schema", + "startLine": 68, + "startColumn": 7, + "endLine": 68, + "endColumn": 31, + "ruleDescription": "Additional properties are not allowed", + "phase": "SCHEMA", + "context": { + "property": "ProvisioningArtifactName", + "extra": { + "allowed_properties": [ + "NotificationARNs", + "Parameters", + "StackId", + "Tags", + "TemplateURL", + "TimeoutInMinutes" + ] + } + } + }, + { + "ruleId": "F3003", + "severity": "FATAL", + "message": "'TemplateURL' is a required property", + "source": "SCHEMA", + "entity": { + "logicalId": "MyStack", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'TemplateURL'", + "category": "Schema", + "startLine": 66, + "startColumn": 5, + "endLine": 66, + "endColumn": 15, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "E1152", + "severity": "ERROR", + "message": "'String' does not match format 'AWS::EC2::Image.Id'", + "source": "CFN_LINT", + "entity": { + "logicalId": "myInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "String" + } + }, + { + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-123456' does not match format 'AWS::EC2::Image.Id'", + "source": "CFN_LINT", + "entity": { + "logicalId": "LaunchConfiguration", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 57, + "startColumn": 7, + "endLine": 57, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-123456" + } + }, + { + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", + "entity": { + "logicalId": "mySubStack", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.TemplateURL", + "category": "Best Practice", + "startLine": 44, + "startColumn": 7, + "endLine": 44, + "endColumn": 18, + "ruleDescription": "Warn when properties are configured to only work with the package command", + "phase": "LINT" + }, + { + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "LaunchConfiguration", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "category": "Deprecation", + "startLine": 54, + "startColumn": 3, + "endLine": 54, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "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": "mySubStack", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "category": "Best Practice", + "startLine": 41, + "startColumn": 3, + "endLine": 41, + "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": "mySubStack", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "category": "Best Practice", + "startLine": 41, + "startColumn": 3, + "endLine": 41, + "endColumn": 13, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "MyStack", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "category": "Best Practice", + "startLine": 64, + "startColumn": 3, + "endLine": 64, + "endColumn": 10, + "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": "MyStack", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "category": "Best Practice", + "startLine": 64, + "startColumn": 3, + "endLine": 64, + "endColumn": 10, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 34, + "startColumn": 7, + "endLine": 34, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Base64 with unresolvable argument)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myAlb", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + }, + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 52, + "startColumn": 7, + "endLine": 52, + "endColumn": 11, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "LaunchConfiguration", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 57, + "startColumn": 7, + "endLine": 57, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "LaunchConfiguration", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 58, + "startColumn": 7, + "endLine": 58, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "LaunchConfiguration", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 59, + "startColumn": 7, + "endLine": 59, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Base64 with unresolvable argument)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myVPc2", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 72, + "startColumn": 7, + "endLine": 72, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:${myCidr}1)" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 32, + "startColumn": 5, + "endLine": 32, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'mySubStack' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "mySubStack", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 43, + "startColumn": 5, + "endLine": 43, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myAlb' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "myAlb", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 51, + "startColumn": 5, + "endLine": 51, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyStack' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "MyStack", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 66, + "startColumn": 5, + "endLine": 66, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myVPc2' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "myVPc2", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 71, + "startColumn": 5, + "endLine": 71, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/functions/sub_needed.yaml": { + "filePath": "good/functions/sub_needed.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 6, + "counts": { + "fatal": 3, + "errors": 0, + "warnings": 4, + "informational": 9, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F1020", + "severity": "FATAL", + "message": "Fn::GetAtt references non-existent resource 'GreetingLambda'", + "source": "SCHEMA", + "entity": { + "logicalId": "GreetingRequest", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" + }, + "suggestedFix": "Check that the GetAtt target resource exists in the template", + "category": "Intrinsic Function", + "startLine": 86, + "startColumn": 3, + "endLine": 86, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" + }, + { + "ruleId": "F1020", + "severity": "FATAL", + "message": "'GreetingResource' is not one of ['AMIId', 'AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'GreetingRequest', 'IOTPolicies', 'Key', 'MyContentBucket', 'TestGoodStateMachine1', 'myPolicy', 'myPolicy2']", + "source": "SCHEMA", + "entity": { + "logicalId": "GreetingRequest", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" + }, + "propertyPath": "Properties.ResourceId", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 114, + "startColumn": 7, + "endLine": 114, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA", + "context": { + "resolutionSource": "dynamic (unknown ref target: GreetingResource)" + } + }, + { + "ruleId": "F1020", + "severity": "FATAL", + "message": "'GreetingApi' is not one of ['AMIId', 'AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'GreetingRequest', 'IOTPolicies', 'Key', 'MyContentBucket', 'TestGoodStateMachine1', 'myPolicy', 'myPolicy2']", + "source": "SCHEMA", + "entity": { + "logicalId": "GreetingRequest", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" + }, + "propertyPath": "Properties.RestApiId", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 115, + "startColumn": 7, + "endLine": 115, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA", + "context": { + "resolutionSource": "dynamic (unknown ref target: GreetingApi)" + } + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'MyContentBucket' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyContentBucket", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/MyContentBucket", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 18, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'AMIId' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "AMIId", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/AMIId", + "category": "Best Practice", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 8, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", + "entity": { + "logicalId": "TestGoodStateMachine1", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "Properties.RoleArn", + "category": "Best Practice", + "startLine": 156, + "startColumn": 7, + "endLine": 156, + "endColumn": 14, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "TestGoodStateMachine1", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "category": "Security", + "startLine": 137, + "startColumn": 3, + "endLine": 137, + "endColumn": 24, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "GreetingRequest", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" + }, + "propertyPath": "Properties.Integration.Uri.Fn::Join", + "category": "Intrinsic Function", + "startLine": 95, + "startColumn": 11, + "endLine": 95, + "endColumn": 19, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "GreetingRequest", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" + }, + "propertyPath": "Properties.Integration.RequestTemplates.application/json.Fn::Join", + "category": "Intrinsic Function", + "startLine": 107, + "startColumn": 13, + "endLine": 107, + "endColumn": 21, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "GreetingRequest", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" + }, + "propertyPath": "Properties.HttpMethod", + "category": "Best Practice", + "startLine": 90, + "startColumn": 7, + "endLine": 90, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "GreetingRequest", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" + }, + "propertyPath": "Properties.ResourceId", + "category": "Best Practice", + "startLine": 114, + "startColumn": 7, + "endLine": 114, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (unknown ref target: GreetingResource)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "GreetingRequest", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" + }, + "propertyPath": "Properties.RestApiId", + "category": "Best Practice", + "startLine": 115, + "startColumn": 7, + "endLine": 115, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (unknown ref target: GreetingApi)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "IOTPolicies", + "entityType": "Resource", + "resourceType": "AWS::IoT::Policy" + }, + "propertyPath": "Properties.PolicyName", + "category": "Best Practice", + "startLine": 121, + "startColumn": 7, + "endLine": 121, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Key' of type 'AWS::ApiGateway::ApiKey' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Key", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::ApiKey" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 84, + "startColumn": 5, + "endLine": 84, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'IOTPolicies' of type 'AWS::IoT::Policy' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "IOTPolicies", + "entityType": "Resource", + "resourceType": "AWS::IoT::Policy" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 120, + "startColumn": 5, + "endLine": 120, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TestGoodStateMachine1' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "TestGoodStateMachine1", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 139, + "startColumn": 5, + "endLine": 139, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/functions/sub_needed_custom_excludes.yaml": { + "filePath": "good/functions/sub_needed_custom_excludes.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 1, + "warnings": 1, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3031", + "severity": "FATAL", + "message": "'TestRole-${Stage}' does not match pattern '^[\\w+=,.@-]+$'", + "source": "SCHEMA", + "entity": { + "logicalId": "TestRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.RoleName", + "category": "Schema", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Value does not match pattern", + "phase": "SCHEMA", + "context": { + "actualValue": "TestRole-${Stage}", + "expectedConstraint": "^[\\w+=,.@-]+$" + } + }, + { + "ruleId": "E1029", + "severity": "ERROR", + "message": "Found an embedded parameter '${Stage}' outside of an 'Fn::Sub' at Properties.RoleName", + "source": "CFN_LINT", + "entity": { + "logicalId": "TestRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.RoleName", + "suggestedFix": "Wrap the string with Fn::Sub", + "category": "Intrinsic Function", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Substitution variable ${X} requires Fn::Sub", + "phase": "LINT" + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'Stage' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "Stage", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/Stage", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 8, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "TestRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.RoleName", + "category": "Best Practice", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TestRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "TestRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/functions/sub_needed_transform.yaml": { + "filePath": "good/functions/sub_needed_transform.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "good/functions_findinmap.yaml": { + "filePath": "good/functions_findinmap.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 6, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (FindInMap with dynamic map name)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance2", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 18, + "startColumn": 7, + "endLine": 18, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (FindInMap with dynamic map name)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance3", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 26, + "startColumn": 7, + "endLine": 26, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (FindInMap with dynamic map name)" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myInstance1' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myInstance2' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance2", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 17, + "startColumn": 5, + "endLine": 17, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myInstance3' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance3", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 25, + "startColumn": 5, + "endLine": 25, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/functions_findinmap_default_value.yaml": { + "filePath": "good/functions_findinmap_default_value.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 9, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 5, + "informational": 18, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W3696", + "severity": "WARN", + "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "Mesh0", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "category": "Deprecation", + "startLine": 43, + "startColumn": 3, + "endLine": 43, + "endColumn": 8, + "ruleDescription": "Resource type is from a service that is sunsetting", + "phase": "SCHEMA" + }, + { + "ruleId": "W3696", + "severity": "WARN", + "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "Mesh1", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "category": "Deprecation", + "startLine": 59, + "startColumn": 3, + "endLine": 59, + "endColumn": 8, + "ruleDescription": "Resource type is from a service that is sunsetting", + "phase": "SCHEMA" + }, + { + "ruleId": "W3696", + "severity": "WARN", + "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "Mesh2", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "category": "Deprecation", + "startLine": 70, + "startColumn": 3, + "endLine": 70, + "endColumn": 8, + "ruleDescription": "Resource type is from a service that is sunsetting", + "phase": "SCHEMA" + }, + { + "ruleId": "W3696", + "severity": "WARN", + "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "Mesh3", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "category": "Deprecation", + "startLine": 81, + "startColumn": 3, + "endLine": 81, + "endColumn": 8, + "ruleDescription": "Resource type is from a service that is sunsetting", + "phase": "SCHEMA" + }, + { + "ruleId": "W3696", + "severity": "WARN", + "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "Mesh4", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "category": "Deprecation", + "startLine": 93, + "startColumn": 3, + "endLine": 93, + "endColumn": 8, + "ruleDescription": "Resource type is from a service that is sunsetting", + "phase": "SCHEMA" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster0", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" + }, + "propertyPath": "Properties.ClusterName", + "category": "Best Practice", + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster1", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" + }, + "propertyPath": "Properties.ClusterName", + "category": "Best Practice", + "startLine": 22, + "startColumn": 7, + "endLine": 22, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster2", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" + }, + "propertyPath": "Properties.ClusterName", + "category": "Best Practice", + "startLine": 30, + "startColumn": 7, + "endLine": 30, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster3", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" + }, + "propertyPath": "Properties.ClusterName", + "category": "Best Practice", + "startLine": 38, + "startColumn": 7, + "endLine": 38, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Mesh0", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "propertyPath": "Properties.MeshName", + "category": "Best Practice", + "startLine": 46, + "startColumn": 7, + "endLine": 46, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Mesh1", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "propertyPath": "Properties.MeshName", + "category": "Best Practice", + "startLine": 62, + "startColumn": 7, + "endLine": 62, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Mesh2", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "propertyPath": "Properties.MeshName", + "category": "Best Practice", + "startLine": 73, + "startColumn": 7, + "endLine": 73, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Mesh3", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "propertyPath": "Properties.MeshName", + "category": "Best Practice", + "startLine": 84, + "startColumn": 7, + "endLine": 84, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Mesh4", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "propertyPath": "Properties.MeshName", + "category": "Best Practice", + "startLine": 96, + "startColumn": 7, + "endLine": 96, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Cluster0' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster0", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Cluster1' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster1", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 21, + "startColumn": 5, + "endLine": 21, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Cluster2' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster2", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Cluster3' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster3", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 37, + "startColumn": 5, + "endLine": 37, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Mesh0' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Mesh0", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 45, + "startColumn": 5, + "endLine": 45, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Mesh1' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Mesh1", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 61, + "startColumn": 5, + "endLine": 61, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Mesh2' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Mesh2", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 72, + "startColumn": 5, + "endLine": 72, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Mesh3' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Mesh3", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 83, + "startColumn": 5, + "endLine": 83, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Mesh4' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Mesh4", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 95, + "startColumn": 5, + "endLine": 95, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/functions_findinmap_enhanced.yaml": { + "filePath": "good/functions_findinmap_enhanced.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 6, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 2, + "informational": 17, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E7001", + "severity": "ERROR", + "message": "Mapping 'MapName'.'TopKey1' key '{\"To\":\"Json\",\"String\":\"Function\"}' does not match format '^[a-zA-Z0-9]+$'", + "source": "CFN_LINT", + "entity": { + "logicalId": "MapName", + "entityType": "Mapping" + }, + "propertyPath": "Mappings/MapName/TopKey1/{\"To\":\"Json\",\"String\":\"Function\"}", + "category": "Structure", + "startLine": 15, + "startColumn": 7, + "endLine": 15, + "endColumn": 40, + "ruleDescription": "Mappings are appropriately configured", + "phase": "LINT" + }, + { + "ruleId": "W3696", + "severity": "WARN", + "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "Mesh", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "category": "Deprecation", + "startLine": 20, + "startColumn": 3, + "endLine": 20, + "endColumn": 7, + "ruleDescription": "Resource type is from a service that is sunsetting", + "phase": "SCHEMA" + }, + { + "ruleId": "W3696", + "severity": "WARN", + "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "Mesh2", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "category": "Deprecation", + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 8, + "ruleDescription": "Resource type is from a service that is sunsetting", + "phase": "SCHEMA" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "Cluster", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" + }, + "propertyPath": "Properties.ClusterName.Fn::FindInMap.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 52, + "startColumn": 11, + "endLine": 52, + "endColumn": 19, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "Cluster", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" + }, + "propertyPath": "Properties.ClusterName.Fn::FindInMap.2.Fn::Join", + "category": "Intrinsic Function", + "startLine": 56, + "startColumn": 11, + "endLine": 56, + "endColumn": 19, + "ruleDescription": "Use Sub instead of Join", + "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": 59, + "startColumn": 3, + "endLine": 59, + "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": 59, + "startColumn": 3, + "endLine": 59, + "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": 61, + "startColumn": 5, + "endLine": 61, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Mesh", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "propertyPath": "Properties.MeshName", + "category": "Best Practice", + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Mesh2", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "propertyPath": "Properties.MeshName", + "category": "Best Practice", + "startLine": 36, + "startColumn": 7, + "endLine": 36, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" + }, + "propertyPath": "Properties.ClusterName", + "category": "Best Practice", + "startLine": 49, + "startColumn": 7, + "endLine": 49, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Queue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.QueueName", + "category": "Best Practice", + "startLine": 62, + "startColumn": 7, + "endLine": 62, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster2", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" + }, + "propertyPath": "Properties.ClusterName", + "category": "Best Practice", + "startLine": 81, + "startColumn": 7, + "endLine": 81, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster3", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" + }, + "propertyPath": "Properties.ClusterName", + "category": "Best Practice", + "startLine": 103, + "startColumn": 7, + "endLine": 103, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Mesh' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Mesh", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 22, + "startColumn": 5, + "endLine": 22, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Mesh2' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Mesh2", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 35, + "startColumn": 5, + "endLine": 35, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Cluster' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 48, + "startColumn": 5, + "endLine": 48, + "endColumn": 15, + "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": 61, + "startColumn": 5, + "endLine": 61, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Cluster2' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster2", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 80, + "startColumn": 5, + "endLine": 80, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Cluster3' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster3", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 102, + "startColumn": 5, + "endLine": 102, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/generic.yaml": { + "filePath": "good/generic.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 13, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 3, + "informational": 25, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 75, + "startColumn": 7, + "endLine": 75, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", + "phase": "LINT" + }, + { + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 95, + "startColumn": 7, + "endLine": 95, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", + "phase": "LINT" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "LambdaFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "category": "Security", + "startLine": 160, + "startColumn": 3, + "endLine": 160, + "endColumn": 17, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "RootRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 45, + "startColumn": 7, + "endLine": 45, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "RootInstanceProfile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 69, + "startColumn": 7, + "endLine": 69, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 75, + "startColumn": 7, + "endLine": 75, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 76, + "startColumn": 7, + "endLine": 76, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.KeyName", + "category": "Best Practice", + "startLine": 77, + "startColumn": 7, + "endLine": 77, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.BlockDeviceMappings", + "category": "Best Practice", + "startLine": 79, + "startColumn": 7, + "endLine": 79, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.NetworkInterfaces", + "category": "Best Practice", + "startLine": 86, + "startColumn": 7, + "endLine": 86, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 88, + "startColumn": 7, + "endLine": 88, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 95, + "startColumn": 7, + "endLine": 95, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 96, + "startColumn": 7, + "endLine": 96, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.KeyName", + "category": "Best Practice", + "startLine": 97, + "startColumn": 7, + "endLine": 97, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.BlockDeviceMappings", + "category": "Best Practice", + "startLine": 98, + "startColumn": 7, + "endLine": 98, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.NetworkInterfaces", + "category": "Best Practice", + "startLine": 106, + "startColumn": 7, + "endLine": 106, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 113, + "startColumn": 7, + "endLine": 113, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZones' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ElasticLoadBalancer", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.AvailabilityZones", + "category": "Best Practice", + "startLine": 124, + "startColumn": 7, + "endLine": 124, + "endColumn": 24, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HealthCheck' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ElasticLoadBalancer", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.HealthCheck", + "category": "Best Practice", + "startLine": 133, + "startColumn": 7, + "endLine": 133, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'RootRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "RootRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 35, + "startColumn": 5, + "endLine": 35, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyEC2Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 74, + "startColumn": 5, + "endLine": 74, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'mySnsTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "mySnsTopic", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 90, + "startColumn": 3, + "endLine": 90, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyEC2Instance1' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 94, + "startColumn": 5, + "endLine": 94, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ElasticIP' of type 'AWS::EC2::EIP' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ElasticIP", + "entityType": "Resource", + "resourceType": "AWS::EC2::EIP" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 119, + "startColumn": 5, + "endLine": 119, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ElasticLoadBalancer' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ElasticLoadBalancer", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 123, + "startColumn": 5, + "endLine": 123, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'IamPipeline' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "IamPipeline", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 144, + "startColumn": 5, + "endLine": 144, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LambdaFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "LambdaFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 162, + "startColumn": 5, + "endLine": 162, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/getatt_provisioned_product_outputs.yaml": { + "filePath": "good/getatt_provisioned_product_outputs.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ProvisionedProduct' of type 'AWS::ServiceCatalog::CloudFormationProvisionedProduct' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ProvisionedProduct", + "entityType": "Resource", + "resourceType": "AWS::ServiceCatalog::CloudFormationProvisionedProduct" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Topic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Topic", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/getatt_ref_typed_nested_attribute.yaml": { + "filePath": "good/getatt_ref_typed_nested_attribute.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 7, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Database", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Database", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.MasterUsername", + "category": "Best Practice", + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Database", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 16, + "startColumn": 7, + "endLine": 16, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Database", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.BackupRetentionPeriod", + "category": "Best Practice", + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 28, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Database' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Database", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Parameter' of type 'AWS::SSM::Parameter' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Parameter", + "entityType": "Resource", + "resourceType": "AWS::SSM::Parameter" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 22, + "startColumn": 5, + "endLine": 22, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/getazs_resolves_current_regions.yaml": { + "filePath": "good/getazs_resolves_current_regions.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 8, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetApEast2", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetApEast2", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetApEast2", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetMxCentral1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 16, + "startColumn": 7, + "endLine": 16, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetMxCentral1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetMxCentral1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 18, + "startColumn": 7, + "endLine": 18, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SubnetApEast2' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetApEast2", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SubnetMxCentral1' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetMxCentral1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/good_conditions_valid_refs.yaml": { + "filePath": "good/good_conditions_valid_refs.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'IsDev' is not used by any resource or Fn::If", + "source": "CFN_LINT", + "entity": { + "logicalId": "IsDev", + "entityType": "Condition" + }, + "propertyPath": "Conditions/IsDev", + "category": "Best Practice", + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 8, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ProdBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ProdBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/iam_conditional_resource_arns.yaml": { + "filePath": "good/iam_conditional_resource_arns.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "good/iam_intrinsic_resource_arns.yaml": { + "filePath": "good/iam_intrinsic_resource_arns.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SomeBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SomeBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/iam_intrinsic_resource_arns_schema_valid.yaml": { + "filePath": "good/iam_intrinsic_resource_arns_schema_valid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 8, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "PolicyWithJoinResource", + "entityType": "Resource", + "resourceType": "AWS::IAM::Policy" + }, + "propertyPath": "Properties.PolicyDocument.Statement.0.Resource.Fn::Join", + "category": "Intrinsic Function", + "startLine": 48, + "startColumn": 15, + "endLine": 48, + "endColumn": 23, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "RoleInlinePolicy", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.RoleName", + "category": "Best Practice", + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PolicyWithRefResource", + "entityType": "Resource", + "resourceType": "AWS::IAM::UserPolicy" + }, + "propertyPath": "Properties.UserName", + "category": "Best Practice", + "startLine": 65, + "startColumn": 7, + "endLine": 65, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PolicyWithRefResource", + "entityType": "Resource", + "resourceType": "AWS::IAM::UserPolicy" + }, + "propertyPath": "Properties.PolicyName", + "category": "Best Practice", + "startLine": 66, + "startColumn": 7, + "endLine": 66, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SSOPermissionSet", + "entityType": "Resource", + "resourceType": "AWS::SSO::PermissionSet" + }, + "propertyPath": "Properties.InstanceArn", + "category": "Best Practice", + "startLine": 76, + "startColumn": 7, + "endLine": 76, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sso/aws-sso-permissionset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'SsoInstanceArn' (type String)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SSOPermissionSet", + "entityType": "Resource", + "resourceType": "AWS::SSO::PermissionSet" + }, + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 77, + "startColumn": 7, + "endLine": 77, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sso/aws-sso-permissionset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'RoleInlinePolicy' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "RoleInlinePolicy", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SSOPermissionSet' of type 'AWS::SSO::PermissionSet' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SSOPermissionSet", + "entityType": "Resource", + "resourceType": "AWS::SSO::PermissionSet" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 75, + "startColumn": 5, + "endLine": 75, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/iam_valid.yaml": { + "filePath": "good/iam_valid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Role' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Role", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 18, + "startColumn": 5, + "endLine": 18, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/kms_key_identifier_forms.yaml": { + "filePath": "good/kms_key_identifier_forms.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 7, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 3, + "informational": 7, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "TopicKeyArn", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "category": "Security", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 14, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "TopicAliasArn", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "category": "Security", + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 16, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "TopicMultiRegionKeyArn", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "category": "Security", + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 25, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TopicKeyId' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "TopicKeyId", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TopicKeyArn' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "TopicKeyArn", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TopicAliasName' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "TopicAliasName", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 14, + "startColumn": 5, + "endLine": 14, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TopicAliasArn' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "TopicAliasArn", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 18, + "startColumn": 5, + "endLine": 18, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TopicMultiRegionKeyId' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "TopicMultiRegionKeyId", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 22, + "startColumn": 5, + "endLine": 22, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TopicMultiRegionKeyArn' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "TopicMultiRegionKeyArn", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 26, + "startColumn": 5, + "endLine": 26, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TopicIntrinsicAliasArn' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "TopicIntrinsicAliasArn", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 30, + "startColumn": 5, + "endLine": 30, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/lambda_permission_source_account.yaml": { + "filePath": "good/lambda_permission_source_account.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 4, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'SourceArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", + "entity": { + "logicalId": "Perm", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.SourceArn", + "category": "Best Practice", + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 16, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "Perm", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "category": "Security", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 7, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Perm", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Perm", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Perm", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Perm", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.SourceArn", + "category": "Best Practice", + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + } + ] + }, + "good/lambda_permission_sourcearn_ref_no_account.yaml": { + "filePath": "good/lambda_permission_sourcearn_ref_no_account.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 4, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'SourceArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", + "entity": { + "logicalId": "Perm", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.SourceArn", + "category": "Best Practice", + "startLine": 15, + "startColumn": 7, + "endLine": 15, + "endColumn": 16, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Perm", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Perm", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 13, + "startColumn": 7, + "endLine": 13, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Perm", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Perm", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.SourceArn", + "category": "Best Practice", + "startLine": 15, + "startColumn": 7, + "endLine": 15, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + } + ] + }, + "good/lambda_snapstart.yaml": { + "filePath": "good/lambda_snapstart.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2530", + "severity": "WARN", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", + "source": "CFN_LINT", + "entity": { + "logicalId": "SnapStartFunc", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.SnapStart", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", + "category": "Best Practice", + "startLine": 13, + "startColumn": 7, + "endLine": 13, + "endColumn": 16, + "ruleDescription": "Validate that SnapStart is properly configured", + "phase": "LINT" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "SnapStartFunc", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "category": "Security", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 16, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SnapStartFunc", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SnapStartFunc' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SnapStartFunc", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/lambda_zipfile.yaml": { + "filePath": "good/lambda_zipfile.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I3042", + "severity": "INFO", + "message": "ARN in Resource LambdaFn contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", + "source": "CFN_LINT", + "entity": { + "logicalId": "LambdaFn", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Role.Fn::Sub", + "category": "Best Practice", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 14, + "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "LambdaFn", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LambdaFn' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "LambdaFn", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/lifecycle_intrinsic_scenarios.yaml": { + "filePath": "good/lifecycle_intrinsic_scenarios.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 13, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "good/mappings/name.yaml": { + "filePath": "good/mappings/name.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 1, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "startLine": 10, + "startColumn": 1, + "endLine": 10, + "endColumn": 10, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" + }, + { + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'RegionMap' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", + "entity": { + "logicalId": "RegionMap", + "entityType": "Mapping" + }, + "propertyPath": "Mappings/RegionMap", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Check if Mappings are Used", + "phase": "LINT" + } + ] + }, + "good/mappings/used.yaml": { + "filePath": "good/mappings/used.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 3, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E1151", + "severity": "ERROR", + "message": "'vpc-123456' does not match format 'AWS::EC2::VPC.Id'", + "source": "CFN_LINT", + "entity": { + "logicalId": "mySubnet", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Intrinsic Function", + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 12, + "ruleDescription": "Validate VPC id format", + "phase": "SCHEMA", + "context": { + "actualValue": "vpc-123456" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "mySubnet", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "mySubnet", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (FindInMap with dynamic map name)" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'mySubnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "mySubnet", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 20, + "startColumn": 5, + "endLine": 20, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/mappings_valid.yaml": { + "filePath": "good/mappings_valid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'RegionMap' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", + "entity": { + "logicalId": "RegionMap", + "entityType": "Mapping" + }, + "propertyPath": "Mappings/RegionMap", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Check if Mappings are Used", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'R' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "R", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 4, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/metadata_context_complete.yaml": { + "filePath": "good/metadata_context_complete.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 6, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 13, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "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": 18, + "startColumn": 3, + "endLine": 18, + "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": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 13, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "LegacyTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 35, + "startColumn": 3, + "endLine": 35, + "endColumn": 14, + "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": "LegacyTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 35, + "startColumn": 3, + "endLine": 35, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "ServiceLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "category": "Best Practice", + "startLine": 64, + "startColumn": 3, + "endLine": 64, + "endColumn": 18, + "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": "ServiceLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "category": "Best Practice", + "startLine": 64, + "startColumn": 3, + "endLine": 64, + "endColumn": 18, + "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": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 13, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "LegacyTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.KeySchema", + "category": "Best Practice", + "startLine": 38, + "startColumn": 7, + "endLine": 38, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "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": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LegacyTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "LegacyTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 37, + "startColumn": 5, + "endLine": 37, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ServiceLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ServiceLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 66, + "startColumn": 5, + "endLine": 66, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 70, + "startColumn": 5, + "endLine": 70, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CustomResourceProviderframeworkonEvent' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "CustomResourceProviderframeworkonEvent", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 78, + "startColumn": 5, + "endLine": 78, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/minimal.yaml": { + "filePath": "good/minimal.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'IamPipeline' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "IamPipeline", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/modules/minimal.yaml": { + "filePath": "good/modules/minimal.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'OtherResource' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "OtherResource", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 16, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/neptune_valid_instanceclass.yaml": { + "filePath": "good/neptune_valid_instanceclass.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 4, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "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": "Instance", + "entityType": "Resource", + "resourceType": "AWS::Neptune::DBInstance" + }, + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 11, + "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": "Instance", + "entityType": "Resource", + "resourceType": "AWS::Neptune::DBInstance" + }, + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Instance' of type 'AWS::Neptune::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Instance", + "entityType": "Resource", + "resourceType": "AWS::Neptune::DBInstance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/no_value.yaml": { + "filePath": "good/no_value.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 13, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'pProdMonitoringInterval' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "pProdMonitoringInterval", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/pProdMonitoringInterval", + "category": "Best Practice", + "startLine": 45, + "startColumn": 5, + "endLine": 45, + "endColumn": 28, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'pDevMonitoringInterval' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "pDevMonitoringInterval", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/pDevMonitoringInterval", + "category": "Best Practice", + "startLine": 49, + "startColumn": 5, + "endLine": 49, + "endColumn": 27, + "ruleDescription": "Check if Parameters are Used", + "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": "rDBServerInstance", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 123, + "startColumn": 5, + "endLine": 123, + "endColumn": 22, + "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": "rDBServerInstance", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 123, + "startColumn": 5, + "endLine": 123, + "endColumn": 22, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rParameterGroup", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBParameterGroup" + }, + "propertyPath": "Properties.Description", + "category": "Best Practice", + "startLine": 59, + "startColumn": 13, + "endLine": 59, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rParameterGroup", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBParameterGroup" + }, + "propertyPath": "Properties.Family", + "category": "Best Practice", + "startLine": 60, + "startColumn": 13, + "endLine": 60, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'pDBParameterGroupFamily' (type String)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AutoMinorVersionUpgrade' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rDBServerInstance", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.AutoMinorVersionUpgrade", + "category": "Best Practice", + "startLine": 128, + "startColumn": 13, + "endLine": 128, + "endColumn": 36, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rDBServerInstance", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.BackupRetentionPeriod", + "category": "Best Practice", + "startLine": 129, + "startColumn": 13, + "endLine": 129, + "endColumn": 34, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DBParameterGroupName' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rDBServerInstance", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.DBParameterGroupName", + "category": "Best Practice", + "startLine": 132, + "startColumn": 13, + "endLine": 132, + "endColumn": 33, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'rParameterGroup'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DBSubnetGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rDBServerInstance", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.DBSubnetGroupName", + "category": "Best Practice", + "startLine": 133, + "startColumn": 13, + "endLine": 133, + "endColumn": 30, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rDBSubnetGroup'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rDBServerInstance", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 134, + "startColumn": 13, + "endLine": 134, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "parameter 'pDBEngine' (type String)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rDBServerInstance", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.MasterUsername", + "category": "Best Practice", + "startLine": 138, + "startColumn": 13, + "endLine": 138, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'pDBMasterUsername' (type String)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'MultiAZ' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rDBServerInstance", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.MultiAZ", + "category": "Best Practice", + "startLine": 145, + "startColumn": 13, + "endLine": 145, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "Fn::If on condition 'MultiAZ'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rDBServerInstance", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 148, + "startColumn": 13, + "endLine": 148, + "endColumn": 29, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rDBMonitoringRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rDBMonitoringRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 96, + "startColumn": 9, + "endLine": 96, + "endColumn": 19, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/no_w3010_on_unlisted_type.yaml": { + "filePath": "good/no_w3010_on_unlisted_type.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 7, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2501", + "severity": "WARN", + "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", + "source": "CFN_LINT", "entity": { "logicalId": "Cluster", "entityType": "Resource", @@ -13772,155 +18661,16 @@ "message": "Resource 'S3BadBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "S3BadBucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SampleRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SampleRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 31, - "startColumn": 5, - "endLine": 31, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'IngestionPipeline' of type 'AWS::OSIS::Pipeline' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "IngestionPipeline", - "entityType": "Resource", - "resourceType": "AWS::OSIS::Pipeline" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 88, - "startColumn": 5, - "endLine": 88, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/resources/properties/list_duplicates.yaml": { - "filePath": "good/resources/properties/list_duplicates.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 3, - "warnings": 0, - "informational": 3, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3530", - "severity": "ERROR", - "message": "'Statement' is a required property", - "source": "CFN_LINT", - "entity": { - "logicalId": "IamRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.AssumeRolePolicyDocument", - "suggestedFix": "Add a Statement array to the AssumeRolePolicyDocument", - "category": "Resource", - "startLine": 16, - "startColumn": 7, - "endLine": 16, - "endColumn": 31, - "ruleDescription": "Validate IAM trust policies", - "phase": "LINT" - }, - { - "ruleId": "E3530", - "severity": "ERROR", - "message": "'Statement' is a required property", - "source": "CFN_LINT", - "entity": { - "logicalId": "IamRoleWithConditions", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.AssumeRolePolicyDocument", - "suggestedFix": "Add a Statement array to the AssumeRolePolicyDocument", - "category": "Resource", - "startLine": 25, - "startColumn": 7, - "endLine": 25, - "endColumn": 31, - "ruleDescription": "Validate IAM trust policies", - "phase": "LINT" - }, - { - "ruleId": "E3530", - "severity": "ERROR", - "message": "'Statement' is a required property", - "source": "CFN_LINT", - "entity": { - "logicalId": "IamRoleWithNestedConditions", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.AssumeRolePolicyDocument", - "suggestedFix": "Add a Statement array to the AssumeRolePolicyDocument", - "category": "Resource", - "startLine": 37, - "startColumn": 7, - "endLine": 37, - "endColumn": 31, - "ruleDescription": "Validate IAM trust policies", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'IamRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "IamRole", + "logicalId": "S3BadBucket", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 15, + "startLine": 10, "startColumn": 5, - "endLine": 15, + "endLine": 10, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -13928,19 +18678,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'IamRoleWithConditions' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'SampleRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "IamRoleWithConditions", + "logicalId": "SampleRole", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 24, + "startLine": 31, "startColumn": 5, - "endLine": 24, + "endLine": 31, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -13948,35 +18698,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'IamRoleWithNestedConditions' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'IngestionPipeline' of type 'AWS::OSIS::Pipeline' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "IamRoleWithNestedConditions", + "logicalId": "IngestionPipeline", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::OSIS::Pipeline" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 36, + "startLine": 88, "startColumn": 5, - "endLine": 36, + "endLine": 88, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/resources/properties/password.yaml": { - "filePath": "good/resources/properties/password.yaml", + "good/resources/properties/list_duplicates.yaml": { + "filePath": "good/resources/properties/list_duplicates.yaml", "status": "OK", "metadata": { - "resourcesScanned": 4, + "resourcesScanned": 3, "counts": { "fatal": 0, - "errors": 0, - "warnings": 8, - "informational": 21, + "errors": 3, + "warnings": 0, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -13985,1049 +18735,853 @@ }, "diagnostics": [ { - "ruleId": "W1011", - "severity": "WARN", - "message": "Use dynamic references (e.g., SSM SecureString) instead of parameter 'MyPassword' for secrets", + "ruleId": "E3530", + "severity": "ERROR", + "message": "'Statement' is a required property", "source": "CFN_LINT", "entity": { - "logicalId": "MyDB", + "logicalId": "IamRole", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 22, + "propertyPath": "Properties.AssumeRolePolicyDocument", + "suggestedFix": "Add a Statement array to the AssumeRolePolicyDocument", + "category": "Resource", + "startLine": 16, "startColumn": 7, - "endLine": 22, - "endColumn": 25, - "ruleDescription": "Instead of REFing a parameter for a secret use a dynamic reference", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyIAMUser", - "entityType": "Resource", - "resourceType": "AWS::IAM::User" - }, - "propertyPath": "Properties.LoginProfile.Password.Fn::Sub", - "category": "Best Practice", - "startLine": 47, - "startColumn": 9, - "endLine": 47, - "endColumn": 16, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "category": "Best Practice", - "startLine": 15, - "startColumn": 3, - "endLine": 15, - "endColumn": 7, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", - "phase": "LINT" - }, - { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", - "source": "CFN_LINT", - "entity": { - "logicalId": "myNewDb", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "category": "Best Practice", - "startLine": 24, - "startColumn": 3, - "endLine": 24, - "endColumn": 10, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", - "phase": "LINT" - }, - { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", - "source": "CFN_LINT", - "entity": { - "logicalId": "myThirdDb", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "category": "Best Practice", - "startLine": 33, - "startColumn": 3, - "endLine": 33, - "endColumn": 12, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", - "phase": "LINT" - }, - { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", - "entity": { - "logicalId": "MyDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" - }, - { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", - "entity": { - "logicalId": "myNewDb", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 26, - "startColumn": 5, - "endLine": 26, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" - }, - { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", - "entity": { - "logicalId": "myThirdDb", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 35, - "startColumn": 5, - "endLine": 35, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "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": "MyDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "category": "Best Practice", - "startLine": 15, - "startColumn": 3, - "endLine": 15, - "endColumn": 7, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 16, + "endColumn": 31, + "ruleDescription": "Validate IAM trust policies", "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)", + "ruleId": "E3530", + "severity": "ERROR", + "message": "'Statement' is a required property", "source": "CFN_LINT", "entity": { - "logicalId": "myNewDb", + "logicalId": "IamRoleWithConditions", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "category": "Best Practice", - "startLine": 24, - "startColumn": 3, - "endLine": 24, - "endColumn": 10, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.AssumeRolePolicyDocument", + "suggestedFix": "Add a Statement array to the AssumeRolePolicyDocument", + "category": "Resource", + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 31, + "ruleDescription": "Validate IAM trust policies", "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)", + "ruleId": "E3530", + "severity": "ERROR", + "message": "'Statement' is a required property", "source": "CFN_LINT", "entity": { - "logicalId": "myThirdDb", + "logicalId": "IamRoleWithNestedConditions", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "category": "Best Practice", - "startLine": 33, - "startColumn": 3, - "endLine": 33, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.AssumeRolePolicyDocument", + "suggestedFix": "Add a Statement array to the AssumeRolePolicyDocument", + "category": "Resource", + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 31, + "ruleDescription": "Validate IAM trust policies", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'IamRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyDB", + "logicalId": "IamRole", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, + "startLine": 15, "startColumn": 5, - "endLine": 17, + "endLine": 15, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'IamRoleWithConditions' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "myNewDb", + "logicalId": "IamRoleWithConditions", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 26, + "startLine": 24, "startColumn": 5, - "endLine": 26, + "endLine": 24, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'IamRoleWithNestedConditions' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "myThirdDb", + "logicalId": "IamRoleWithNestedConditions", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 35, + "startLine": 36, "startColumn": 5, - "endLine": 35, + "endLine": 36, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/resources/properties/password.yaml": { + "filePath": "good/resources/properties/password.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 8, + "informational": 21, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "ruleId": "W1011", + "severity": "WARN", + "message": "Use dynamic references (e.g., SSM SecureString) instead of parameter 'MyPassword' for secrets", "source": "CFN_LINT", "entity": { "logicalId": "MyDB", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 19, + "propertyPath": "Properties.MasterUserPassword", + "category": "Security", + "startLine": 22, "startColumn": 7, - "endLine": 19, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", + "endLine": 22, + "endColumn": 25, + "ruleDescription": "Instead of REFing a parameter for a secret use a dynamic reference", "phase": "LINT" }, { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "myNewDb", + "logicalId": "MyIAMUser", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::User" }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", + "propertyPath": "Properties.LoginProfile.Password.Fn::Sub", "category": "Best Practice", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", + "startLine": 47, + "startColumn": 9, + "endLine": 47, + "endColumn": 16, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" }, { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", "source": "CFN_LINT", - "entity": { - "logicalId": "myThirdDb", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 37, - "startColumn": 7, - "endLine": 37, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 20, - "startColumn": 7, - "endLine": 20, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", - "source": "ENGINE", "entity": { "logicalId": "MyDB", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.MasterUsername", - "category": "Best Practice", - "startLine": 21, - "startColumn": 7, - "endLine": 21, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "myNewDb", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 29, - "startColumn": 7, - "endLine": 29, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 7, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "source": "CFN_LINT", "entity": { "logicalId": "myNewDb", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 30, - "startColumn": 7, - "endLine": 30, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 10, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "source": "CFN_LINT", "entity": { "logicalId": "myThirdDb", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 38, - "startColumn": 7, - "endLine": 38, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + }, + "category": "Best Practice", + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 12, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "myThirdDb", + "logicalId": "MyDB", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.MasterUsername", - "category": "Best Practice", - "startLine": 39, - "startColumn": 7, - "endLine": 39, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 17, + "startColumn": 5, + "endLine": 17, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserName' is create-only; updating it will cause resource replacement", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "MyIAMUser", + "logicalId": "myNewDb", "entityType": "Resource", - "resourceType": "AWS::IAM::User" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.UserName", - "category": "Best Practice", - "startLine": 45, - "startColumn": 7, - "endLine": 45, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 26, + "startColumn": 5, + "endLine": 26, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'Environment' (type String)" - } + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "entity": { + "logicalId": "myThirdDb", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 35, + "startColumn": 5, + "endLine": 35, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'MyDB' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "MyDB", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 7, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'myNewDb' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "myNewDb", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 26, - "startColumn": 5, - "endLine": 26, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 10, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'myThirdDb' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "myThirdDb", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 35, - "startColumn": 5, - "endLine": 35, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'MyIAMUser' of type 'AWS::IAM::User' supports Tags but none are configured", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "MyIAMUser", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::IAM::User" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 44, + "startLine": 17, "startColumn": 5, - "endLine": 44, + "endLine": 17, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" - } - ] - }, - "good/resources/properties/string_size.yaml": { - "filePath": "good/resources/properties/string_size.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'myRepository' of type 'AWS::CodeCommit::Repository' supports Tags but none are configured", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "myRepository", + "logicalId": "myNewDb", "entityType": "Resource", - "resourceType": "AWS::CodeCommit::Repository" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 6, + "startLine": 26, "startColumn": 5, - "endLine": 6, + "endLine": 26, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" - } - ] - }, - "good/resources/properties/templated_code.yaml": { - "filePath": "good/resources/properties/templated_code.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "AppSyncSchema", + "logicalId": "myThirdDb", "entityType": "Resource", - "resourceType": "AWS::AppSync::GraphQLSchema" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'AppSync'" - } + "startLine": 35, + "startColumn": 5, + "endLine": 35, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3100", "severity": "INFO", - "message": "Resource 'AppSync' of type 'AWS::AppSync::GraphQLApi' supports Tags but none are configured", - "source": "ENGINE", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "AppSync", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::AppSync::GraphQLApi" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 4, - "startColumn": 5, - "endLine": 4, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 19, + "startColumn": 7, + "endLine": 19, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", "phase": "LINT" - } - ] - }, - "good/resources/properties/templated_code_sam.yaml": { - "filePath": "good/resources/properties/templated_code_sam.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I3011", + "ruleId": "I3100", "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)", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", "source": "CFN_LINT", "entity": { - "logicalId": "Function", + "logicalId": "myNewDb", "entityType": "Resource", - "resourceType": "AWS::Serverless::Application" + "resourceType": "AWS::RDS::DBInstance" }, + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 28, + "startColumn": 7, + "endLine": 28, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I3100", "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)", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", "source": "CFN_LINT", "entity": { - "logicalId": "Function", + "logicalId": "myThirdDb", "entityType": "Resource", - "resourceType": "AWS::Serverless::Application" + "resourceType": "AWS::RDS::DBInstance" }, + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Function' of type 'AWS::Serverless::Application' supports Tags but none are configured", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Function", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::Serverless::Application" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/resources/rds/instance_sizes.yaml": { - "filePath": "good/resources/rds/instance_sizes.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 6, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 4, - "informational": 30, - "debug": 0 + "startLine": 20, + "startColumn": 7, + "endLine": 20, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DBInstance3", + "logicalId": "MyDB", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 24, - "startColumn": 5, - "endLine": 24, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "propertyPath": "Properties.MasterUsername", + "category": "Best Practice", + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DBInstance4", + "logicalId": "myNewDb", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 31, - "startColumn": 5, - "endLine": 31, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 29, + "startColumn": 7, + "endLine": 29, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DBInstance5", + "logicalId": "myNewDb", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 38, - "startColumn": 5, - "endLine": 38, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "propertyPath": "Properties.MasterUsername", + "category": "Best Practice", + "startLine": 30, + "startColumn": 7, + "endLine": 30, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DBInstance6", + "logicalId": "myThirdDb", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 44, - "startColumn": 5, - "endLine": 44, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 38, + "startColumn": 7, + "endLine": 38, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance1", + "logicalId": "myThirdDb", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 10, - "startColumn": 3, - "endLine": 10, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 39, + "startColumn": 7, + "endLine": 39, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'UserName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance1", + "logicalId": "MyIAMUser", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::User" }, + "propertyPath": "Properties.UserName", "category": "Best Practice", - "startLine": 10, - "startColumn": 3, - "endLine": 10, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 45, + "startColumn": 7, + "endLine": 45, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'Environment' (type String)" + } }, { - "ruleId": "I3011", + "ruleId": "I9003", "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": "DBInstance2", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", "category": "Best Practice", - "startLine": 16, - "startColumn": 3, - "endLine": 16, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'MyDB' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance2", + "logicalId": "MyDB", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 16, - "startColumn": 3, - "endLine": 16, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 17, + "startColumn": 5, + "endLine": 17, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'myNewDb' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance3", + "logicalId": "myNewDb", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 22, - "startColumn": 3, - "endLine": 22, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 26, + "startColumn": 5, + "endLine": 26, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'myThirdDb' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance3", + "logicalId": "myThirdDb", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 22, - "startColumn": 3, - "endLine": 22, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 35, + "startColumn": 5, + "endLine": 35, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'MyIAMUser' of type 'AWS::IAM::User' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance4", + "logicalId": "MyIAMUser", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::User" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 29, - "startColumn": 3, - "endLine": 29, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 44, + "startColumn": 5, + "endLine": 44, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/resources/properties/string_size.yaml": { + "filePath": "good/resources/properties/string_size.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'myRepository' of type 'AWS::CodeCommit::Repository' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance4", + "logicalId": "myRepository", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::CodeCommit::Repository" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 29, - "startColumn": 3, - "endLine": 29, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/resources/properties/templated_code.yaml": { + "filePath": "good/resources/properties/templated_code.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance5", + "logicalId": "AppSyncSchema", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::AppSync::GraphQLSchema" }, + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 36, - "startColumn": 3, - "endLine": 36, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'AppSync'" + } }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'AppSync' of type 'AWS::AppSync::GraphQLApi' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance5", + "logicalId": "AppSync", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::AppSync::GraphQLApi" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 36, - "startColumn": 3, - "endLine": 36, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/resources/properties/templated_code_sam.yaml": { + "filePath": "good/resources/properties/templated_code_sam.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "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": "DBInstance6", + "logicalId": "Function", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Serverless::Application" }, "category": "Best Practice", - "startLine": 42, + "startLine": 3, "startColumn": 3, - "endLine": 42, - "endColumn": 14, + "endLine": 3, + "endColumn": 11, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -15037,766 +19591,613 @@ "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": "DBInstance6", + "logicalId": "Function", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Serverless::Application" }, "category": "Best Practice", - "startLine": 42, + "startLine": 3, "startColumn": 3, - "endLine": 42, - "endColumn": 14, + "endLine": 3, + "endColumn": 11, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'Function' of type 'AWS::Serverless::Application' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Function", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Application" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/resources/rds/instance_sizes.yaml": { + "filePath": "good/resources/rds/instance_sizes.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 6, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 4, + "informational": 30, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", "entity": { "logicalId": "DBInstance3", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties", - "category": "Best Practice", + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", "startLine": 24, "startColumn": 5, "endLine": 24, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", "entity": { "logicalId": "DBInstance4", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties", - "category": "Best Practice", + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", "startLine": 31, "startColumn": 5, "endLine": 31, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", "entity": { "logicalId": "DBInstance5", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties", - "category": "Best Practice", + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", "startLine": 38, "startColumn": 5, "endLine": 38, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", "entity": { "logicalId": "DBInstance6", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties", - "category": "Best Practice", + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", "startLine": 44, "startColumn": 5, "endLine": 44, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, { - "ruleId": "I3100", + "ruleId": "I3011", "severity": "INFO", - "message": "Previous generation instance type 'db.m3.medium' - consider upgrading", + "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": "DBInstance6", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 45, - "startColumn": 7, - "endLine": 45, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", "entity": { "logicalId": "DBInstance1", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Fn::If on condition 'snapshot'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DBInstance2", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 20, - "startColumn": 7, - "endLine": 20, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DBInstance3", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 26, - "startColumn": 7, - "endLine": 26, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DBInstance4", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DBInstance5", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 40, - "startColumn": 7, - "endLine": 40, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "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": "DBInstance6", + "logicalId": "DBInstance1", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 46, - "startColumn": 7, - "endLine": 46, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9003", + "ruleId": "I3011", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", + "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": "DBInstance2", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'DBInstance1' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "DBInstance1", + "logicalId": "DBInstance2", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'DBInstance2' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "DBInstance2", + "logicalId": "DBInstance3", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 18, - "startColumn": 5, - "endLine": 18, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'DBInstance3' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "DBInstance3", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 24, - "startColumn": 5, - "endLine": 24, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'DBInstance4' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "DBInstance4", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 31, - "startColumn": 5, - "endLine": 31, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 29, + "startColumn": 3, + "endLine": 29, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'DBInstance5' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "DBInstance5", + "logicalId": "DBInstance4", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 38, - "startColumn": 5, - "endLine": 38, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 29, + "startColumn": 3, + "endLine": 29, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'DBInstance6' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "DBInstance6", + "logicalId": "DBInstance5", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 44, - "startColumn": 5, - "endLine": 44, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 36, + "startColumn": 3, + "endLine": 36, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "good/resources/rds/not_enum_master_username_parameter.yaml": { - "filePath": "good/resources/rds/not_enum_master_username_parameter.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "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": "ParameterUsername", + "logicalId": "DBInstance5", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 36, + "startColumn": 3, + "endLine": 36, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "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": "ParameterUsername", + "logicalId": "DBInstance6", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 13, - "startColumn": 7, - "endLine": 13, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - } - ] - }, - "good/resources/s3/access-control-obsolete.yaml": { - "filePath": "good/resources/s3/access-control-obsolete.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 4, - "debug": 0 + "startLine": 42, + "startColumn": 3, + "endLine": 42, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "Bucket2", + "logicalId": "DBInstance6", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 42, + "startColumn": 3, + "endLine": 42, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "BucketPolicy", + "logicalId": "DBInstance3", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 13, - "startColumn": 7, - "endLine": 13, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Bucket2'" - } + "startLine": 24, + "startColumn": 5, + "endLine": 24, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'Bucket1' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "Bucket1", + "logicalId": "DBInstance4", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 5, + "startLine": 31, "startColumn": 5, - "endLine": 5, + "endLine": 31, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'Bucket2' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "Bucket2", + "logicalId": "DBInstance5", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 8, + "startLine": 38, "startColumn": 5, - "endLine": 8, + "endLine": 38, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" - } - ] - }, - "good/resources/update_policy_supported.yaml": { - "filePath": "good/resources/update_policy_supported.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 9, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "MyFunction", + "logicalId": "DBInstance6", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 30, - "startColumn": 7, - "endLine": 30, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.9", - "lifecycle": "deprecated" - } + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 44, + "startColumn": 5, + "endLine": 44, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "W3697", - "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 'db.m3.medium' - consider upgrading", "source": "CFN_LINT", "entity": { - "logicalId": "LaunchConfig", + "logicalId": "DBInstance6", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::RDS::DBInstance" }, - "category": "Deprecation", - "startLine": 12, - "startColumn": 3, - "endLine": 12, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", + "category": "Best Practice", + "startLine": 45, + "startColumn": 7, + "endLine": 45, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyASG", + "logicalId": "DBInstance1", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.LaunchConfigurationName", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 11, + "startLine": 14, "startColumn": 7, - "endLine": 11, - "endColumn": 30, + "endLine": 14, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'LaunchConfig'" + "resolutionSource": "Fn::If on condition 'snapshot'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LaunchConfig", + "logicalId": "DBInstance2", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 15, + "startLine": 20, "startColumn": 7, - "endLine": 15, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 20, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LaunchConfig", + "logicalId": "DBInstance3", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 16, + "startLine": 26, "startColumn": 7, - "endLine": 16, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 26, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyAlias", + "logicalId": "DBInstance4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Alias" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 23, + "startLine": 33, "startColumn": 7, - "endLine": 23, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda", + "endLine": 33, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyFunction'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyAlias", + "logicalId": "DBInstance5", "entityType": "Resource", - "resourceType": "AWS::Lambda::Alias" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 25, + "startLine": 40, "startColumn": 7, - "endLine": 25, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda", + "endLine": 40, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyFunction", + "logicalId": "DBInstance6", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 29, + "startLine": 46, "startColumn": 7, - "endLine": 29, - "endColumn": 19, + "endLine": 46, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyASG' of type 'AWS::AutoScaling::AutoScalingGroup' supports Tags but none are configured", + "message": "Resource 'DBInstance1' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyASG", + "logicalId": "DBInstance1", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 8, + "startLine": 12, "startColumn": 5, - "endLine": 8, + "endLine": 12, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -15804,19 +20205,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'DBInstance2' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyFunction", + "logicalId": "DBInstance2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 28, + "startLine": 18, "startColumn": 5, - "endLine": 28, + "endLine": 18, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -15824,108 +20225,87 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FunctionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'DBInstance3' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FunctionRole", + "logicalId": "DBInstance3", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 39, + "startLine": 24, "startColumn": 5, - "endLine": 39, + "endLine": 24, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/resources_codepipeline.yaml": { - "filePath": "good/resources_codepipeline.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DBInstance4' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TestPipeline", + "logicalId": "DBInstance4", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.RoleArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 14, - "ruleDescription": "Hardcoded ARN property", + "startLine": 31, + "startColumn": 5, + "endLine": 31, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Resource 'DBInstance5' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TestPipeline", + "logicalId": "DBInstance5", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 38, + "startColumn": 5, + "endLine": 38, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TestPipeline' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured", + "message": "Resource 'DBInstance6' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TestPipeline", + "logicalId": "DBInstance6", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 7, + "startLine": 44, "startColumn": 5, - "endLine": 7, + "endLine": 44, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/resources_cognito_userpool_tag_is_string_map.yaml": { - "filePath": "good/resources_cognito_userpool_tag_is_string_map.yaml", + "good/resources/rds/not_enum_master_username_parameter.yaml": { + "filePath": "good/resources/rds/not_enum_master_username_parameter.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, @@ -15941,184 +20321,64 @@ "severityLevel": "DEBUG" }, "diagnostics": [ - { - "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": "MyCognitoUserPool", - "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPool" - }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 20, - "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": "MyCognitoUserPool", - "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPool" - }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" - } - ] - }, - "good/resources_deletionpolicy.yaml": { - "filePath": "good/resources_deletionpolicy.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 5, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", - "entity": { - "logicalId": "PolicyList", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 28, - "startColumn": 5, - "endLine": 28, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" - }, - { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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": "PolicyList", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 28, - "startColumn": 5, - "endLine": 28, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" - }, - { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", - "source": "CFN_LINT", - "entity": { - "logicalId": "PolicyList", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 30, - "startColumn": 7, - "endLine": 30, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" - }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PolicyList", + "logicalId": "ParameterUsername", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::RDS::DBCluster" }, "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 31, + "startLine": 12, "startColumn": 7, - "endLine": 31, + "endLine": 12, "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'PolicyList' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PolicyList", + "logicalId": "ParameterUsername", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 28, - "startColumn": 5, - "endLine": 28, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 13, + "startColumn": 7, + "endLine": 13, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } } ] }, - "good/resources_updatereplacepolicy.yaml": { - "filePath": "good/resources_updatereplacepolicy.yaml", + "good/resources/s3/access-control-obsolete.yaml": { + "filePath": "good/resources/s3/access-control-obsolete.yaml", "status": "OK", "metadata": { "resourcesScanned": 3, "counts": { "fatal": 0, "errors": 0, - "warnings": 1, - "informational": 5, + "warnings": 0, + "informational": 4, "debug": 0 }, "suppressed": 0, @@ -16127,128 +20387,102 @@ }, "diagnostics": [ { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", - "entity": { - "logicalId": "PolicyList", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 28, - "startColumn": 5, - "endLine": 28, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" - }, - { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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": "PolicyList", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 28, - "startColumn": 5, - "endLine": 28, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" - }, - { - "ruleId": "I3100", + "ruleId": "I9001", "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", - "source": "CFN_LINT", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "PolicyList", + "logicalId": "Bucket2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 30, + "startLine": 9, "startColumn": 7, - "endLine": 30, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" + "endLine": 9, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PolicyList", + "logicalId": "BucketPolicy", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 31, + "startLine": 13, "startColumn": 7, - "endLine": 31, + "endLine": 13, "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Bucket2'" } }, { - "ruleId": "I9003", + "ruleId": "I9040", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "message": "Resource 'Bucket1' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", + "entity": { + "logicalId": "Bucket1", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'PolicyList' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Resource 'Bucket2' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "PolicyList", + "logicalId": "Bucket2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 28, + "startLine": 8, "startColumn": 5, - "endLine": 28, + "endLine": 8, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/route53_conditional_record_arrays.yaml": { - "filePath": "good/route53_conditional_record_arrays.yaml", + "good/resources/update_policy_supported.yaml": { + "filePath": "good/resources/update_policy_supported.yaml", "status": "OK", "metadata": { - "resourcesScanned": 6, + "resourcesScanned": 5, "counts": { "fatal": 0, "errors": 0, "warnings": 2, - "informational": 6, + "informational": 9, "debug": 0 }, "suppressed": 0, @@ -16257,150 +20491,87 @@ }, "diagnostics": [ { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'ChooseFirst' to False from current status True", - "source": "CFN_LINT", - "entity": { - "logicalId": "StandaloneUnreachableInvalid", - "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" - }, - "propertyPath": "Properties.ResourceRecords.Fn::If.2", - "category": "Best Practice", - "startLine": 32, - "startColumn": 11, - "endLine": 32, - "endColumn": 12, - "ruleDescription": "Check Fn::If has a path that cannot be reached", - "phase": "LINT" - }, - { - "ruleId": "W1028", + "ruleId": "W2531", "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'ChooseFirst' to False from current status True", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "GroupUnreachableInvalid", - "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" - }, - "propertyPath": "Properties.RecordSets.Fn::If.2", - "category": "Best Practice", - "startLine": 58, - "startColumn": 11, - "endLine": 58, - "endColumn": 12, - "ruleDescription": "Check Fn::If has a path that cannot be reached", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "StandaloneBothBranchesValid", - "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" - }, - "propertyPath": "Properties.HostedZoneName", - "category": "Best Practice", - "startLine": 13, - "startColumn": 7, - "endLine": 13, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "StandaloneUnreachableInvalid", + "logicalId": "MyFunction", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.HostedZoneName", - "category": "Best Practice", - "startLine": 25, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 30, "startColumn": 7, - "endLine": 25, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 30, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "python3.9", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "source": "CFN_LINT", "entity": { - "logicalId": "GroupBothBranchesValid", + "logicalId": "LaunchConfig", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.HostedZoneName", - "category": "Best Practice", - "startLine": 36, - "startColumn": 7, - "endLine": 36, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "category": "Deprecation", + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GroupUnreachableInvalid", + "logicalId": "MyASG", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Properties.LaunchConfigurationName", "category": "Best Practice", - "startLine": 51, + "startLine": 11, "startColumn": 7, - "endLine": 51, - "endColumn": 21, + "endLine": 11, + "endColumn": 30, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'LaunchConfig'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneMutuallyExclusiveCnameItems", + "logicalId": "LaunchConfig", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 65, + "startLine": 15, "startColumn": 7, - "endLine": 65, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "endLine": 15, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16410,125 +20581,89 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GroupMutuallyExclusiveCnameItems", + "logicalId": "LaunchConfig", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 75, + "startLine": 16, "startColumn": 7, - "endLine": 75, - "endColumn": 21, + "endLine": 16, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } - } - ] - }, - "good/route53_conditional_record_items.yaml": { - "filePath": "good/route53_conditional_record_items.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Standalone", + "logicalId": "MyAlias", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::Lambda::Alias" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 12, + "startLine": 23, "startColumn": 7, - "endLine": 12, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "endLine": 23, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyFunction'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Group", + "logicalId": "MyAlias", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::Lambda::Alias" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 21, + "startLine": 25, "startColumn": 7, - "endLine": 21, - "endColumn": 21, + "endLine": 25, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } - } - ] - }, - "good/route53_conditional_scenarios.yaml": { - "filePath": "good/route53_conditional_scenarios.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 6, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalProperties", + "logicalId": "MyFunction", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 14, + "startLine": 29, "startColumn": 7, - "endLine": 14, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "endLine": 29, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16536,116 +20671,145 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyASG' of type 'AWS::AutoScaling::AutoScalingGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MutuallyExclusiveConditions", + "logicalId": "MyASG", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 30, - "startColumn": 7, - "endLine": 30, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LiteralNoValueAlias", + "logicalId": "MyFunction", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 61, - "startColumn": 7, - "endLine": 61, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 28, + "startColumn": 5, + "endLine": 28, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9002", + "ruleId": "I9040", "severity": "INFO", - "message": "'TTL' is ignored in this configuration (from extension)", + "message": "Resource 'FunctionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConditionalProperties", + "logicalId": "FunctionRole", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.TTL", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 22, + "startLine": 39, + "startColumn": 5, + "endLine": 39, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/resources_codepipeline.yaml": { + "filePath": "good/resources_codepipeline.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", + "entity": { + "logicalId": "TestPipeline", + "entityType": "Resource", + "resourceType": "AWS::CodePipeline::Pipeline" + }, + "propertyPath": "Properties.RoleArn", + "category": "Best Practice", + "startLine": 12, "startColumn": 7, - "endLine": 22, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Property is ignored in this configuration (from extension)", - "phase": "SCHEMA", - "context": { - "resolutionSource": "Fn::If on condition 'IsAlias'" - } + "endLine": 12, + "endColumn": 14, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" }, { - "ruleId": "I9002", + "ruleId": "I9001", "severity": "INFO", - "message": "'TTL' is ignored in this configuration (from extension)", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MutuallyExclusiveConditions", + "logicalId": "TestPipeline", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties.TTL", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 38, + "startLine": 8, "startColumn": 7, - "endLine": 38, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Property is ignored in this configuration (from extension)", + "endLine": 8, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "resolutionSource": "Fn::If on condition 'IsStandard'" + "lifecycle": "create-only" } }, { - "ruleId": "I9002", + "ruleId": "I9040", "severity": "INFO", - "message": "'TTL' is ignored in this configuration (from extension)", + "message": "Resource 'TestPipeline' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LiteralNoValueAlias", + "logicalId": "TestPipeline", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties.TTL", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 65, - "startColumn": 7, - "endLine": 65, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Property is ignored in this configuration (from extension)", - "phase": "SCHEMA" + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] } diff --git a/src/resources/expected/validation_reports7.json b/src/resources/expected/validation_reports7.json index abff28b4..34f0dc83 100644 --- a/src/resources/expected/validation_reports7.json +++ b/src/resources/expected/validation_reports7.json @@ -1,6 +1,6 @@ { - "good/sam/api_stagename_valid.yaml": { - "filePath": "good/sam/api_stagename_valid.yaml", + "good/resources_cognito_userpool_tag_is_string_map.yaml": { + "filePath": "good/resources_cognito_userpool_tag_is_string_map.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, @@ -8,7 +8,7 @@ "fatal": 0, "errors": 0, "warnings": 0, - "informational": 1, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -17,37 +17,53 @@ }, "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'MyApi' of type 'AWS::Serverless::Api' supports Tags but none are configured", - "source": "ENGINE", + "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": "MyApi", + "logicalId": "MyCognitoUserPool", "entityType": "Resource", - "resourceType": "AWS::Serverless::Api" + "resourceType": "AWS::Cognito::UserPool" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 20, + "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": "MyCognitoUserPool", + "entityType": "Resource", + "resourceType": "AWS::Cognito::UserPool" + }, + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" } ] }, - "good/sam/connector_valid.yaml": { - "filePath": "good/sam/connector_valid.yaml", + "good/resources_deletionpolicy.yaml": { + "filePath": "good/resources_deletionpolicy.yaml", "status": "OK", "metadata": { "resourcesScanned": 3, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 2, + "warnings": 1, + "informational": 5, "debug": 0 }, "suppressed": 0, @@ -56,174 +72,128 @@ }, "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "MyTopic", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 10, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 28, + "startColumn": 5, + "endLine": 28, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "MyFn", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 7, + "startLine": 28, "startColumn": 5, - "endLine": 7, + "endLine": 28, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" - } - ] - }, - "good/sam/function_deploymentpreference_with_alias.yaml": { - "filePath": "good/sam/function_deploymentpreference_with_alias.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I3100", "severity": "INFO", - "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "Fn", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 30, + "startColumn": 7, + "endLine": 30, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", "phase": "LINT" - } - ] - }, - "good/sam/function_dlq_valid.yaml": { - "filePath": "good/sam/function_dlq_valid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Fn", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 31, + "startColumn": 7, + "endLine": 31, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" - } - ] - }, - "good/sam/function_image_valid.yaml": { - "filePath": "good/sam/function_image_valid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'PolicyList' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Fn", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 28, "startColumn": 5, - "endLine": 5, + "endLine": 28, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/sam/function_provisioned_concurrency_with_alias.yaml": { - "filePath": "good/sam/function_provisioned_concurrency_with_alias.yaml", + "good/resources_updatereplacepolicy.yaml": { + "filePath": "good/resources_updatereplacepolicy.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 3, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 1, + "warnings": 1, + "informational": 5, "debug": 0 }, "suppressed": 0, @@ -232,232 +202,128 @@ }, "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "Fn", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 28, "startColumn": 5, - "endLine": 5, + "endLine": 28, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" - } - ] - }, - "good/sam/function_runtime_handler_via_globals.yaml": { - "filePath": "good/sam/function_runtime_handler_via_globals.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "Fn", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 9, + "startLine": 28, "startColumn": 5, - "endLine": 9, + "endLine": 28, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" - } - ] - }, - "good/sam/function_url_config_valid.yaml": { - "filePath": "good/sam/function_url_config_valid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I3100", "severity": "INFO", - "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "Fn", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 30, + "startColumn": 7, + "endLine": 30, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", "phase": "LINT" - } - ] - }, - "good/sam/function_zip_valid.yaml": { - "filePath": "good/sam/function_zip_valid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Fn", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/sam/globals_all_valid_sections.yaml": { - "filePath": "good/sam/globals_all_valid_sections.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 + "startLine": 31, + "startColumn": 7, + "endLine": 31, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9003", "severity": "INFO", - "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", "source": "ENGINE", - "entity": { - "logicalId": "Fn", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 19, - "startColumn": 5, - "endLine": 19, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" - } - ] - }, - "good/sam/globals_empty.yaml": { - "filePath": "good/sam/globals_empty.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'PolicyList' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Fn", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, + "startLine": 28, "startColumn": 5, - "endLine": 6, + "endLine": 28, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/sam/implicit_alias_ref.yaml": { - "filePath": "good/sam/implicit_alias_ref.yaml", + "good/route53_conditional_record_arrays.yaml": { + "filePath": "good/route53_conditional_record_arrays.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 6, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 2, + "warnings": 2, + "informational": 6, "debug": 0 }, "suppressed": 0, @@ -466,195 +332,190 @@ }, "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'ChooseFirst' to False from current status True", + "source": "CFN_LINT", "entity": { - "logicalId": "MyFn", + "logicalId": "StandaloneUnreachableInvalid", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ResourceRecords.Fn::If.2", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 32, + "startColumn": 11, + "endLine": 32, + "endColumn": 12, + "ruleDescription": "Check Fn::If has a path that cannot be reached", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'AliasParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'ChooseFirst' to False from current status True", + "source": "CFN_LINT", "entity": { - "logicalId": "AliasParam", + "logicalId": "GroupUnreachableInvalid", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RecordSets.Fn::If.2", "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 58, + "startColumn": 11, + "endLine": 58, + "endColumn": 12, + "ruleDescription": "Check Fn::If has a path that cannot be reached", "phase": "LINT" - } - ] - }, - "good/sam/implicit_httpapi_ref.yaml": { - "filePath": "good/sam/implicit_httpapi_ref.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyFn", + "logicalId": "StandaloneBothBranchesValid", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 13, + "startColumn": 7, + "endLine": 13, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ApiIdParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiIdParam", + "logicalId": "StandaloneUnreachableInvalid", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ApiSubParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApiSubParam", + "logicalId": "GroupBothBranchesValid", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 22, - "startColumn": 5, - "endLine": 22, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/sam/implicit_restapi_stage_ref.yaml": { - "filePath": "good/sam/implicit_restapi_stage_ref.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 + "startLine": 36, + "startColumn": 7, + "endLine": 36, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyFn", + "logicalId": "GroupUnreachableInvalid", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 51, + "startColumn": 7, + "endLine": 51, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'StageParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StageParam", + "logicalId": "StandaloneMutuallyExclusiveCnameItems", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 65, + "startColumn": 7, + "endLine": 65, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "GroupMutuallyExclusiveCnameItems", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "propertyPath": "Properties.HostedZoneName", + "category": "Best Practice", + "startLine": 75, + "startColumn": 7, + "endLine": 75, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } } ] }, - "good/sam/implicit_role_getatt_dependson.yaml": { - "filePath": "good/sam/implicit_role_getatt_dependson.yaml", + "good/route53_conditional_record_items.yaml": { + "filePath": "good/route53_conditional_record_items.yaml", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 2, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 3, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -663,95 +524,62 @@ }, "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MyFn", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'RoleArnParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RoleArnParam", + "logicalId": "Standalone", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", "startLine": 12, - "startColumn": 5, + "startColumn": 7, "endLine": 12, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'RoleRefParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RoleRefParam", + "logicalId": "Group", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } } ] }, - "good/sam/layerversion_valid_retention_and_arch.yaml": { - "filePath": "good/sam/layerversion_valid_retention_and_arch.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "good/sam/simpletable_no_primarykey.yaml": { - "filePath": "good/sam/simpletable_no_primarykey.yaml", + "good/route53_conditional_scenarios.yaml": { + "filePath": "good/route53_conditional_scenarios.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 4, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 3, + "informational": 6, "debug": 0 }, "suppressed": 0, @@ -760,50 +588,168 @@ }, "diagnostics": [ { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyTable", + "logicalId": "ConditionalProperties", "entityType": "Resource", - "resourceType": "AWS::Serverless::SimpleTable" + "resourceType": "AWS::Route53::RecordSet" }, + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 10, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyTable", + "logicalId": "MutuallyExclusiveConditions", "entityType": "Resource", - "resourceType": "AWS::Serverless::SimpleTable" + "resourceType": "AWS::Route53::RecordSet" }, + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, + "startLine": 30, + "startColumn": 7, + "endLine": 30, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "LiteralNoValueAlias", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.HostedZoneName", + "category": "Best Practice", + "startLine": 61, + "startColumn": 7, + "endLine": 61, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9002", + "severity": "INFO", + "message": "'TTL' is ignored in this configuration (from extension)", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalProperties", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.TTL", + "category": "Best Practice", + "startLine": 22, + "startColumn": 7, + "endLine": 22, "endColumn": 10, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Property is ignored in this configuration (from extension)", + "phase": "SCHEMA", + "context": { + "resolutionSource": "Fn::If on condition 'IsAlias'" + } + }, + { + "ruleId": "I9002", + "severity": "INFO", + "message": "'TTL' is ignored in this configuration (from extension)", + "source": "ENGINE", + "entity": { + "logicalId": "MutuallyExclusiveConditions", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.TTL", + "category": "Best Practice", + "startLine": 38, + "startColumn": 7, + "endLine": 38, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Property is ignored in this configuration (from extension)", + "phase": "SCHEMA", + "context": { + "resolutionSource": "Fn::If on condition 'IsStandard'" + } + }, + { + "ruleId": "I9002", + "severity": "INFO", + "message": "'TTL' is ignored in this configuration (from extension)", + "source": "ENGINE", + "entity": { + "logicalId": "LiteralNoValueAlias", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.TTL", + "category": "Best Practice", + "startLine": 65, + "startColumn": 7, + "endLine": 65, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Property is ignored in this configuration (from extension)", + "phase": "SCHEMA" + } + ] + }, + "good/sam/api_stagename_valid.yaml": { + "filePath": "good/sam/api_stagename_valid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyTable' of type 'AWS::Serverless::SimpleTable' supports Tags but none are configured", + "message": "Resource 'MyApi' of type 'AWS::Serverless::Api' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyTable", + "logicalId": "MyApi", "entityType": "Resource", - "resourceType": "AWS::Serverless::SimpleTable" + "resourceType": "AWS::Serverless::Api" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -817,16 +763,16 @@ } ] }, - "good/sam/simpletable_valid.yaml": { - "filePath": "good/sam/simpletable_valid.yaml", + "good/sam/connector_valid.yaml": { + "filePath": "good/sam/connector_valid.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 3, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 3, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -835,50 +781,73 @@ }, "diagnostics": [ { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'MyTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyTable", + "logicalId": "MyTopic", "entityType": "Resource", - "resourceType": "AWS::Serverless::SimpleTable" + "resourceType": "AWS::SNS::Topic" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 3, "startColumn": 3, "endLine": 3, "endColumn": 10, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyTable", + "logicalId": "MyFn", "entityType": "Resource", - "resourceType": "AWS::Serverless::SimpleTable" + "resourceType": "AWS::Serverless::Function" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 10, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/sam/function_deploymentpreference_with_alias.yaml": { + "filePath": "good/sam/function_deploymentpreference_with_alias.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyTable' of type 'AWS::Serverless::SimpleTable' supports Tags but none are configured", + "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyTable", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::Serverless::SimpleTable" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -892,15 +861,15 @@ } ] }, - "good/sam/statemachine_definition_only.yaml": { - "filePath": "good/sam/statemachine_definition_only.yaml", + "good/sam/function_dlq_valid.yaml": { + "filePath": "good/sam/function_dlq_valid.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 0, "informational": 1, "debug": 0 }, @@ -910,32 +879,53 @@ }, "diagnostics": [ { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MySM", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::Serverless::StateMachine" + "resourceType": "AWS::Serverless::Function" }, - "category": "Security", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 7, - "ruleDescription": "Hardcoded account ID in ARN", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/sam/function_image_valid.yaml": { + "filePath": "good/sam/function_image_valid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MySM' of type 'AWS::Serverless::StateMachine' supports Tags but none are configured", + "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MySM", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::Serverless::StateMachine" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -949,16 +939,16 @@ } ] }, - "good/schema_required_xor_resource_condition.yaml": { - "filePath": "good/schema_required_xor_resource_condition.yaml", + "good/sam/function_provisioned_concurrency_with_alias.yaml": { + "filePath": "good/sam/function_provisioned_concurrency_with_alias.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, - "warnings": 1, - "informational": 5, + "warnings": 0, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -967,145 +957,29 @@ }, "diagnostics": [ { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 1] is not reachable. When setting condition 'DuplicateTarget' to True", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Policy", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.ResourceId.Fn::If.1", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 19, - "startColumn": 46, - "endLine": 19, - "endColumn": 47, - "ruleDescription": "Check Fn::If has a path that cannot be reached", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Policy", - "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" - }, - "propertyPath": "Properties.PolicyName", - "category": "Best Practice", - "startLine": 16, - "startColumn": 7, - "endLine": 16, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ScalingTargetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Policy", - "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" - }, - "propertyPath": "Properties.ScalingTargetId", - "category": "Best Practice", - "startLine": 18, - "startColumn": 7, - "endLine": 18, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'TargetId' (type String)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Policy", - "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" - }, - "propertyPath": "Properties.ResourceId", - "category": "Best Practice", - "startLine": 19, - "startColumn": 7, - "endLine": 19, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'DuplicateTarget'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ScalableDimension' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Policy", - "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" - }, - "propertyPath": "Properties.ScalableDimension", - "category": "Best Practice", - "startLine": 20, - "startColumn": 7, - "endLine": 20, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ServiceNamespace' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Policy", - "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" - }, - "propertyPath": "Properties.ServiceNamespace", - "category": "Best Practice", - "startLine": 21, - "startColumn": 7, - "endLine": 21, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } } ] }, - "good/schema_resource.yaml": { - "filePath": "good/schema_resource.yaml", + "good/sam/function_runtime_handler_via_globals.yaml": { + "filePath": "good/sam/function_runtime_handler_via_globals.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, @@ -1113,25 +987,46 @@ "fatal": 0, "errors": 0, "warnings": 0, - "informational": 0, + "informational": 1, "debug": 0 }, "suppressed": 0, "strict": false, "severityLevel": "DEBUG" }, - "diagnostics": [] + "diagnostics": [ + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Fn", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] }, - "good/schema_valid_resources.yaml": { - "filePath": "good/schema_valid_resources.yaml", + "good/sam/function_url_config_valid.yaml": { + "filePath": "good/sam/function_url_config_valid.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 3, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -1140,36 +1035,53 @@ }, "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/sam/function_zip_valid.yaml": { + "filePath": "good/sam/function_zip_valid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -1180,39 +1092,58 @@ "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/sam/globals_all_valid_sections.yaml": { + "filePath": "good/sam/globals_all_valid_sections.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Role' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Role", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, + "startLine": 19, "startColumn": 5, - "endLine": 9, + "endLine": 19, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/sg_icmpv6_type_code.yaml": { - "filePath": "good/sg_icmpv6_type_code.yaml", + "good/sam/globals_empty.yaml": { + "filePath": "good/sam/globals_empty.yaml", "status": "OK", "metadata": { - "resourcesScanned": 5, + "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 18, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -1221,390 +1152,277 @@ }, "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Vpc", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/sam/implicit_alias_ref.yaml": { + "filePath": "good/sam/implicit_alias_ref.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "MyFn", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'AliasParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "AliasParam", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::SSM::Parameter" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 15, - "startColumn": 7, - "endLine": 15, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" - } + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/sam/implicit_httpapi_ref.yaml": { + "filePath": "good/sam/implicit_httpapi_ref.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpv6", + "logicalId": "MyFn", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 53, - "startColumn": 7, - "endLine": 53, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'SecurityGroup'" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Resource 'ApiIdParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpv6", + "logicalId": "ApiIdParam", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::SSM::Parameter" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 54, - "startColumn": 7, - "endLine": 54, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 17, + "startColumn": 5, + "endLine": 17, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Resource 'ApiSubParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpv6", + "logicalId": "ApiSubParam", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::SSM::Parameter" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 55, - "startColumn": 7, - "endLine": 55, + "startLine": 22, + "startColumn": 5, + "endLine": 22, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/sam/implicit_restapi_stage_ref.yaml": { + "filePath": "good/sam/implicit_restapi_stage_ref.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpv6", + "logicalId": "MyFn", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 56, - "startColumn": 7, - "endLine": 56, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrIpv6' is create-only; updating it will cause resource replacement", + "message": "Resource 'StageParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpv6", + "logicalId": "StageParam", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::SSM::Parameter" }, - "propertyPath": "Properties.CidrIpv6", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 57, - "startColumn": 7, - "endLine": 57, + "startLine": 17, + "startColumn": 5, + "endLine": 17, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "StandaloneEgressIcmpv6", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" - }, - "propertyPath": "Properties.GroupId", - "category": "Best Practice", - "startLine": 61, - "startColumn": 7, - "endLine": 61, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'SecurityGroup'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "StandaloneEgressIcmpv6", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" - }, - "propertyPath": "Properties.IpProtocol", - "category": "Best Practice", - "startLine": 62, - "startColumn": 7, - "endLine": 62, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "StandaloneEgressIcmpv6", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" - }, - "propertyPath": "Properties.FromPort", - "category": "Best Practice", - "startLine": 63, - "startColumn": 7, - "endLine": 63, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "StandaloneEgressIcmpv6", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" - }, - "propertyPath": "Properties.ToPort", - "category": "Best Practice", - "startLine": 64, - "startColumn": 7, - "endLine": 64, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrIpv6' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "StandaloneEgressIcmpv6", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" - }, - "propertyPath": "Properties.CidrIpv6", - "category": "Best Practice", - "startLine": 65, - "startColumn": 7, - "endLine": 65, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "StandaloneEgressIcmpv6WithoutTypeCode", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" - }, - "propertyPath": "Properties.GroupId", - "category": "Best Practice", - "startLine": 69, - "startColumn": 7, - "endLine": 69, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'SecurityGroup'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "StandaloneEgressIcmpv6WithoutTypeCode", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" - }, - "propertyPath": "Properties.IpProtocol", - "category": "Best Practice", - "startLine": 70, - "startColumn": 7, - "endLine": 70, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/sam/implicit_role_getatt_dependson.yaml": { + "filePath": "good/sam/implicit_role_getatt_dependson.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrIpv6' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StandaloneEgressIcmpv6WithoutTypeCode", + "logicalId": "MyFn", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.CidrIpv6", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 71, - "startColumn": 7, - "endLine": 71, + "startLine": 6, + "startColumn": 5, + "endLine": 6, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "message": "Resource 'RoleArnParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Vpc", + "logicalId": "RoleArnParam", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::SSM::Parameter" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, + "startLine": 12, "startColumn": 5, - "endLine": 9, + "endLine": 12, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -1612,27 +1430,27 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'RoleRefParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "RoleRefParam", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::SSM::Parameter" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 13, + "startLine": 17, "startColumn": 5, - "endLine": 13, + "endLine": 17, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/simple_sub_prefix.yaml": { - "filePath": "good/simple_sub_prefix.yaml", + "good/sam/layerversion_valid_retention_and_arch.yaml": { + "filePath": "good/sam/layerversion_valid_retention_and_arch.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, @@ -1640,7 +1458,25 @@ "fatal": 0, "errors": 0, "warnings": 0, - "informational": 2, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "good/sam/simpletable_no_primarykey.yaml": { + "filePath": "good/sam/simpletable_no_primarykey.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -1649,60 +1485,73 @@ }, "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "Bucket", + "logicalId": "MyTable", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Serverless::SimpleTable" }, - "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:prefix-${Env})" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 10, + "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": "MyTable", + "entityType": "Resource", + "resourceType": "AWS::Serverless::SimpleTable" + }, + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'MyTable' of type 'AWS::Serverless::SimpleTable' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "MyTable", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Serverless::SimpleTable" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 8, + "startLine": 5, "startColumn": 5, - "endLine": 8, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/some_logs_stream_lambda.yaml": { - "filePath": "good/some_logs_stream_lambda.yaml", + "good/sam/simpletable_valid.yaml": { + "filePath": "good/sam/simpletable_valid.yaml", "status": "OK", "metadata": { - "resourcesScanned": 8, + "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 4, + "errors": 0, "warnings": 0, - "informational": 20, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -1710,113 +1559,21 @@ "severityLevel": "DEBUG" }, "diagnostics": [ - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", - "entity": { - "logicalId": "FunctionA", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 21, - "startColumn": 7, - "endLine": 21, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.6", - "lifecycle": "end-of-life" - } - }, - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", - "entity": { - "logicalId": "FunctionB", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.6", - "lifecycle": "end-of-life" - } - }, - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", - "entity": { - "logicalId": "FunctionC", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 44, - "startColumn": 7, - "endLine": 44, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.6", - "lifecycle": "end-of-life" - } - }, - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", - "entity": { - "logicalId": "LogSubscriptionFunction", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 56, - "startColumn": 7, - "endLine": 56, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.6", - "lifecycle": "end-of-life" - } - }, { "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": "FunctionALogGroup", + "logicalId": "MyTable", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Serverless::SimpleTable" }, "category": "Best Practice", - "startLine": 22, + "startLine": 3, "startColumn": 3, - "endLine": 22, - "endColumn": 20, + "endLine": 3, + "endColumn": 10, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -1826,238 +1583,325 @@ "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": "FunctionALogGroup", + "logicalId": "MyTable", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Serverless::SimpleTable" }, "category": "Best Practice", - "startLine": 22, + "startLine": 3, "startColumn": 3, - "endLine": 22, - "endColumn": 20, + "endLine": 3, + "endColumn": 10, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'MyTable' of type 'AWS::Serverless::SimpleTable' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "FunctionBLogGroup", + "logicalId": "MyTable", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Serverless::SimpleTable" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 34, - "startColumn": 3, - "endLine": 34, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/sam/statemachine_definition_only.yaml": { + "filePath": "good/sam/statemachine_definition_only.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "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", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", "entity": { - "logicalId": "FunctionBLogGroup", + "logicalId": "MySM", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Serverless::StateMachine" }, - "category": "Best Practice", - "startLine": 34, + "category": "Security", + "startLine": 3, "startColumn": 3, - "endLine": 34, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 3, + "endColumn": 7, + "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'MySM' of type 'AWS::Serverless::StateMachine' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "FunctionCLogGroup", + "logicalId": "MySM", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Serverless::StateMachine" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 45, - "startColumn": 3, - "endLine": 45, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/schema_required_xor_resource_condition.yaml": { + "filePath": "good/schema_required_xor_resource_condition.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 5, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "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)", + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 1] is not reachable. When setting condition 'DuplicateTarget' to True", "source": "CFN_LINT", "entity": { - "logicalId": "FunctionCLogGroup", + "logicalId": "Policy", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, + "propertyPath": "Properties.ResourceId.Fn::If.1", "category": "Best Practice", - "startLine": 45, - "startColumn": 3, - "endLine": 45, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 19, + "startColumn": 46, + "endLine": 19, + "endColumn": 47, + "ruleDescription": "Check Fn::If has a path that cannot be reached", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LogSubscriptionFunctionLogGroup", + "logicalId": "Policy", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, + "propertyPath": "Properties.PolicyName", "category": "Best Practice", - "startLine": 73, - "startColumn": 3, - "endLine": 73, - "endColumn": 34, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 16, + "startColumn": 7, + "endLine": 16, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'ScalingTargetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LogSubscriptionFunctionLogGroup", + "logicalId": "Policy", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, + "propertyPath": "Properties.ScalingTargetId", "category": "Best Practice", - "startLine": 73, - "startColumn": 3, - "endLine": 73, - "endColumn": 34, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 18, + "startColumn": 7, + "endLine": 18, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'TargetId' (type String)" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionALogGroup", + "logicalId": "Policy", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 25, + "startLine": 19, "startColumn": 7, - "endLine": 25, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "endLine": 19, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:/aws/lambda/${FunctionA})" + "resolutionSource": "Fn::If on condition 'DuplicateTarget'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'ScalableDimension' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionBLogGroup", + "logicalId": "Policy", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.ScalableDimension", "category": "Best Practice", - "startLine": 37, + "startLine": 20, "startColumn": 7, - "endLine": 37, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "endLine": 20, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:/aws/lambda/${FunctionB})" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'ServiceNamespace' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionCLogGroup", + "logicalId": "Policy", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.ServiceNamespace", "category": "Best Practice", - "startLine": 48, + "startLine": 21, "startColumn": 7, - "endLine": 48, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "endLine": 21, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:/aws/lambda/${FunctionC})" + "lifecycle": "create-only" } + } + ] + }, + "good/schema_resource.yaml": { + "filePath": "good/schema_resource.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "good/schema_valid_resources.yaml": { + "filePath": "good/schema_valid_resources.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LogSubscriptionFunctionLogGroup", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 76, + "startLine": 6, "startColumn": 7, - "endLine": 76, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "endLine": 6, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:/aws/lambda/${LogSubscriptionFunction})" + "lifecycle": "create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FunctionA' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FunctionA", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 18, + "startLine": 5, "startColumn": 5, - "endLine": 18, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -2065,234 +1909,173 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FunctionALogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Resource 'Role' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FunctionALogGroup", + "logicalId": "Role", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 24, + "startLine": 9, "startColumn": 5, - "endLine": 24, + "endLine": 9, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/sg_icmpv6_type_code.yaml": { + "filePath": "good/sg_icmpv6_type_code.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 18, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FunctionB' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionB", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 30, - "startColumn": 5, - "endLine": 30, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FunctionBLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FunctionBLogGroup", + "logicalId": "Vpc", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 36, - "startColumn": 5, - "endLine": 36, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FunctionC' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionC", + "logicalId": "SecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 41, - "startColumn": 5, - "endLine": 41, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FunctionCLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionCLogGroup", + "logicalId": "SecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 47, - "startColumn": 5, - "endLine": 47, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 15, + "startColumn": 7, + "endLine": 15, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LogSubscriptionFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LogSubscriptionFunction", + "logicalId": "StandaloneIngressIcmpv6", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.GroupId", "category": "Best Practice", "startLine": 53, - "startColumn": 5, + "startColumn": 7, "endLine": 53, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SecurityGroup'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LogSubscriptionFunctionLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LogSubscriptionFunctionLogGroup", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 75, - "startColumn": 5, - "endLine": 75, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/sqs_fifo_valid.yaml": { - "filePath": "good/sqs_fifo_valid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 6, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "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": "FifoQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 12, - "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": "FifoQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 12, - "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": "FifoQueue", + "logicalId": "StandaloneIngressIcmpv6", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "startLine": 54, + "startColumn": 7, + "endLine": 54, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FifoQueue", + "logicalId": "StandaloneIngressIcmpv6", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.QueueName", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 6, + "startLine": 55, "startColumn": 7, - "endLine": 6, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "endLine": 55, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2302,20 +2085,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FifoQueue", + "logicalId": "StandaloneIngressIcmpv6", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.FifoQueue", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 7, + "startLine": 56, "startColumn": 7, - "endLine": 7, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "endLine": 56, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2323,61 +2106,69 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FifoQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Property 'CidrIpv6' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FifoQueue", + "logicalId": "StandaloneIngressIcmpv6", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrIpv6", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, + "startLine": 57, + "startColumn": 7, + "endLine": 57, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/ssm_document_valid.yaml": { - "filePath": "good/ssm_document_valid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DocumentType' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Doc", + "logicalId": "StandaloneEgressIcmpv6", "entityType": "Resource", - "resourceType": "AWS::SSM::Document" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.DocumentType", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 6, + "startLine": 61, "startColumn": 7, - "endLine": 6, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", + "endLine": 61, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SecurityGroup'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "StandaloneEgressIcmpv6", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupEgress" + }, + "propertyPath": "Properties.IpProtocol", + "category": "Best Practice", + "startLine": 62, + "startColumn": 7, + "endLine": 62, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2387,50 +2178,186 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Content' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Doc", + "logicalId": "StandaloneEgressIcmpv6", "entityType": "Resource", - "resourceType": "AWS::SSM::Document" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Content", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 7, + "startLine": 63, "startColumn": 7, - "endLine": 7, + "endLine": 63, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "StandaloneEgressIcmpv6", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupEgress" + }, + "propertyPath": "Properties.ToPort", + "category": "Best Practice", + "startLine": 64, + "startColumn": 7, + "endLine": 64, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrIpv6' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "StandaloneEgressIcmpv6", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupEgress" + }, + "propertyPath": "Properties.CidrIpv6", + "category": "Best Practice", + "startLine": 65, + "startColumn": 7, + "endLine": 65, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "StandaloneEgressIcmpv6WithoutTypeCode", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupEgress" + }, + "propertyPath": "Properties.GroupId", + "category": "Best Practice", + "startLine": 69, + "startColumn": 7, + "endLine": 69, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SecurityGroup'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "StandaloneEgressIcmpv6WithoutTypeCode", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupEgress" + }, + "propertyPath": "Properties.IpProtocol", + "category": "Best Practice", + "startLine": 70, + "startColumn": 7, + "endLine": 70, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrIpv6' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "StandaloneEgressIcmpv6WithoutTypeCode", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupEgress" + }, + "propertyPath": "Properties.CidrIpv6", + "category": "Best Practice", + "startLine": 71, + "startColumn": 7, + "endLine": 71, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Doc' of type 'AWS::SSM::Document' supports Tags but none are configured", + "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Doc", + "logicalId": "Vpc", "entityType": "Resource", - "resourceType": "AWS::SSM::Document" + "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 9, "startColumn": 5, - "endLine": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 13, + "startColumn": 5, + "endLine": 13, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/ssm_parameter_name_type.yaml": { - "filePath": "good/ssm_parameter_name_type.yaml", + "good/simple_sub_prefix.yaml": { + "filePath": "good/simple_sub_prefix.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, @@ -2458,15 +2385,15 @@ }, "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 11, + "startLine": 9, "startColumn": 7, - "endLine": 11, + "endLine": 9, "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "parameter 'SsmParamName' (type AWS::SSM::Parameter::Name)" + "resolutionSource": "dynamic (Sub:prefix-${Env})" } }, { @@ -2482,25 +2409,25 @@ "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, + "startLine": 8, "startColumn": 5, - "endLine": 10, + "endLine": 8, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/stackset_conditional_template_source.yaml": { - "filePath": "good/stackset_conditional_template_source.yaml", + "good/some_logs_stream_lambda.yaml": { + "filePath": "good/some_logs_stream_lambda.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 8, "counts": { "fatal": 0, - "errors": 0, + "errors": 4, "warnings": 0, - "informational": 2, + "informational": 20, "debug": 0 }, "suppressed": 0, @@ -2509,912 +2436,796 @@ }, "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'StackSetName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "ConditionalTemplateSource", + "logicalId": "FunctionA", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::StackSet" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.StackSetName", - "category": "Best Practice", - "startLine": 8, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 21, "startColumn": 7, - "endLine": 8, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudformation.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 21, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "python3.6", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PermissionModel' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "ConditionalTemplateSource", + "logicalId": "FunctionB", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::StackSet" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.PermissionModel", - "category": "Best Practice", - "startLine": 9, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 33, "startColumn": 7, - "endLine": 9, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudformation.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 33, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "python3.6", + "lifecycle": "end-of-life" } - } - ] - }, - "good/stepfunctions_valid.yaml": { - "filePath": "good/stepfunctions_valid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "SM", + "logicalId": "FunctionC", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.RoleArn", - "category": "Best Practice", - "startLine": 20, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 44, "startColumn": 7, - "endLine": 20, + "endLine": 44, "endColumn": 14, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.6", + "lifecycle": "end-of-life" + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SM' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "SM", + "logicalId": "LogSubscriptionFunction", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/string_length_unknowable_values.json": { - "filePath": "good/string_length_unknowable_values.json", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 9, - "debug": 0 + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 56, + "startColumn": 7, + "endLine": 56, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.6", + "lifecycle": "end-of-life" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "JoinedFromAReference", + "logicalId": "FunctionALogGroup", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 16, - "startColumn": 9, - "endLine": 16, + "startLine": 22, + "startColumn": 3, + "endLine": 22, "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:{ref:NameProviderWithADeliberatelyLongLogicalIdentifierForThisTest}-data)" - } + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "JoinedFromAParameter", + "logicalId": "FunctionALogGroup", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 24, - "startColumn": 9, - "endLine": 24, + "startLine": 22, + "startColumn": 3, + "endLine": 22, "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:{dynamic}-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)" - } + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "SubstitutedFromAParameter", + "logicalId": "FunctionBLogGroup", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 38, - "startColumn": 9, - "endLine": 38, + "startLine": 34, + "startColumn": 3, + "endLine": 34, "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:${NamePrefix}-data)" - } + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "OnlySomeChoicesTooLong", + "logicalId": "FunctionBLogGroup", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 44, - "startColumn": 9, - "endLine": 44, + "startLine": 34, + "startColumn": 3, + "endLine": 34, "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'NameProviderWithADeliberatelyLongLogicalIdentifierForThisTest' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "NameProviderWithADeliberatelyLongLogicalIdentifierForThisTest", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 67, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'JoinedFromAReference' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "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": "JoinedFromAReference", + "logicalId": "FunctionCLogGroup", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 15, - "startColumn": 7, - "endLine": 15, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", + "startLine": 45, + "startColumn": 3, + "endLine": 45, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'JoinedFromAParameter' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "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": "JoinedFromAParameter", + "logicalId": "FunctionCLogGroup", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", + "startLine": 45, + "startColumn": 3, + "endLine": 45, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'SubstitutedFromAParameter' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "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": "SubstitutedFromAParameter", + "logicalId": "LogSubscriptionFunctionLogGroup", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 37, - "startColumn": 7, - "endLine": 37, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", + "startLine": 73, + "startColumn": 3, + "endLine": 73, + "endColumn": 34, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'OnlySomeChoicesTooLong' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "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": "OnlySomeChoicesTooLong", + "logicalId": "LogSubscriptionFunctionLogGroup", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 43, - "startColumn": 7, - "endLine": 43, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", + "startLine": 73, + "startColumn": 3, + "endLine": 73, + "endColumn": 34, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "good/sub_not_needed.yaml": { - "filePath": "good/sub_not_needed.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "FunctionALogGroup", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 9, + "startLine": 25, "startColumn": 7, - "endLine": 9, - "endColumn": 17, + "endLine": 25, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:${MyParam}-bucket)" + "resolutionSource": "dynamic (Sub:/aws/lambda/${FunctionA})" } }, - { - "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": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/subnet_cidrs_across_vpcs_and_secondary_blocks.yaml": { - "filePath": "good/subnet_cidrs_across_vpcs_and_secondary_blocks.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 12, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 22, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcA", + "logicalId": "FunctionBLogGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 17, + "startLine": 37, "startColumn": 7, - "endLine": 17, - "endColumn": 16, + "endLine": 37, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:/aws/lambda/${FunctionB})" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcB", + "logicalId": "FunctionCLogGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 24, + "startLine": 48, "startColumn": 7, - "endLine": 24, - "endColumn": 16, + "endLine": 48, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:/aws/lambda/${FunctionC})" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcASecondaryBlock", + "logicalId": "LogSubscriptionFunctionLogGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCCidrBlock" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 31, + "startLine": 76, "startColumn": 7, - "endLine": 31, - "endColumn": 12, + "endLine": 76, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcA'" + "resolutionSource": "dynamic (Sub:/aws/lambda/${LogSubscriptionFunction})" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'FunctionA' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcASecondaryBlock", + "logicalId": "FunctionA", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCCidrBlock" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 32, - "startColumn": 7, - "endLine": 32, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 18, + "startColumn": 5, + "endLine": 18, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'FunctionALogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetA1", + "logicalId": "FunctionALogGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 36, - "startColumn": 7, - "endLine": 36, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcA'" - } + "startLine": 24, + "startColumn": 5, + "endLine": 24, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'FunctionB' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetA1", + "logicalId": "FunctionB", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 37, - "startColumn": 7, - "endLine": 37, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 30, + "startColumn": 5, + "endLine": 30, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'FunctionBLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetB1", + "logicalId": "FunctionBLogGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 44, - "startColumn": 7, - "endLine": 44, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcB'" - } + "startLine": 36, + "startColumn": 5, + "endLine": 36, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'FunctionC' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetB1", + "logicalId": "FunctionC", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 45, - "startColumn": 7, - "endLine": 45, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 41, + "startColumn": 5, + "endLine": 41, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'FunctionCLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetA2ViaAttribute", + "logicalId": "FunctionCLogGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 52, - "startColumn": 7, - "endLine": 52, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcA.VpcId" - } + "startLine": 47, + "startColumn": 5, + "endLine": 47, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'LogSubscriptionFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetA2ViaAttribute", + "logicalId": "LogSubscriptionFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 53, - "startColumn": 7, + "startColumn": 5, "endLine": 53, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'LogSubscriptionFunctionLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetInSecondaryBlock", + "logicalId": "LogSubscriptionFunctionLogGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 60, - "startColumn": 7, - "endLine": 60, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcA'" - } + "startLine": 75, + "startColumn": 5, + "endLine": 75, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/sqs_fifo_valid.yaml": { + "filePath": "good/sqs_fifo_valid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 6, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "SubnetInSecondaryBlock", + "logicalId": "FifoQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 61, - "startColumn": 7, - "endLine": 61, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "SubnetProdOrDev", + "logicalId": "FifoQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 68, - "startColumn": 7, - "endLine": 68, + "startLine": 3, + "startColumn": 3, + "endLine": 3, "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcA'" - } + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "SubnetProdOrDev", + "logicalId": "FifoQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 69, - "startColumn": 7, - "endLine": 69, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetDevOrProd", + "logicalId": "FifoQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.QueueName", "category": "Best Practice", - "startLine": 76, + "startLine": 6, "startColumn": 7, - "endLine": 76, - "endColumn": 12, + "endLine": 6, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcA'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetDevOrProd", + "logicalId": "FifoQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.FifoQueue", "category": "Best Practice", - "startLine": 77, + "startLine": 7, "startColumn": 7, - "endLine": 77, + "endLine": 7, "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'FifoQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetFromAttribute", + "logicalId": "FifoQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 84, - "startColumn": 7, - "endLine": 84, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcA'" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/ssm_document_valid.yaml": { + "filePath": "good/ssm_document_valid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'DocumentType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetFromAttribute", + "logicalId": "Doc", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SSM::Document" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.DocumentType", "category": "Best Practice", - "startLine": 85, + "startLine": 6, "startColumn": 7, - "endLine": 85, - "endColumn": 16, + "endLine": 6, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcA.CidrBlock" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Content' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetFromImport", + "logicalId": "Doc", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SSM::Document" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Content", "category": "Best Practice", - "startLine": 92, + "startLine": 7, "startColumn": 7, - "endLine": 92, - "endColumn": 12, + "endLine": 7, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcA'" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'Doc' of type 'AWS::SSM::Document' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetFromImport", + "logicalId": "Doc", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SSM::Document" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 93, - "startColumn": 7, - "endLine": 93, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: SharedSubnetCidr)" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/ssm_parameter_name_type.yaml": { + "filePath": "good/ssm_parameter_name_type.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetFromCidrFunction", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 100, + "startLine": 11, "startColumn": 7, - "endLine": 100, - "endColumn": 12, + "endLine": 11, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcA'" + "resolutionSource": "parameter 'SsmParamName' (type AWS::SSM::Parameter::Name)" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetFromCidrFunction", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 101, - "startColumn": 7, - "endLine": 101, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Select with unresolvable arguments)" - } + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "good/transform.yaml": { - "filePath": "good/transform.yaml", + "good/stackset_conditional_template_source.yaml": { + "filePath": "good/stackset_conditional_template_source.yaml", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 4, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -3423,93 +3234,121 @@ }, "diagnostics": [ { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'StackSetName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AppName", + "logicalId": "ConditionalTemplateSource", "entityType": "Resource", - "resourceType": "AWS::Serverless::Application" + "resourceType": "AWS::CloudFormation::StackSet" }, + "propertyPath": "Properties.StackSetName", "category": "Best Practice", - "startLine": 18, - "startColumn": 3, - "endLine": 18, - "endColumn": 10, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudformation.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'PermissionModel' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AppName", + "logicalId": "ConditionalTemplateSource", "entityType": "Resource", - "resourceType": "AWS::Serverless::Application" + "resourceType": "AWS::CloudFormation::StackSet" }, + "propertyPath": "Properties.PermissionModel", "category": "Best Practice", - "startLine": 18, - "startColumn": 3, - "endLine": 18, - "endColumn": 10, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudformation.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + } + ] + }, + "good/stepfunctions_valid.yaml": { + "filePath": "good/stepfunctions_valid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyServerlessFunctionLogicalID' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", "source": "ENGINE", "entity": { - "logicalId": "MyServerlessFunctionLogicalID", + "logicalId": "SM", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RoleArn", "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 20, + "startColumn": 7, + "endLine": 20, + "endColumn": 14, + "ruleDescription": "Hardcoded ARN property", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'AppName' of type 'AWS::Serverless::Application' supports Tags but none are configured", + "message": "Resource 'SM' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AppName", + "logicalId": "SM", "entityType": "Resource", - "resourceType": "AWS::Serverless::Application" + "resourceType": "AWS::StepFunctions::StateMachine" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 20, + "startLine": 5, "startColumn": 5, - "endLine": 20, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/transform/applications_location.yaml": { - "filePath": "good/transform/applications_location.yaml", + "good/string_length_unknowable_values.json": { + "filePath": "good/string_length_unknowable_values.json", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 5, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 6, + "informational": 9, "debug": 0 }, "suppressed": 0, @@ -3518,219 +3357,201 @@ }, "diagnostics": [ { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "App1", + "logicalId": "JoinedFromAReference", "entityType": "Resource", - "resourceType": "AWS::Serverless::Application" + "resourceType": "AWS::S3::Bucket" }, + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 7, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 16, + "startColumn": 9, + "endLine": 16, + "endColumn": 20, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:{ref:NameProviderWithADeliberatelyLongLogicalIdentifierForThisTest}-data)" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "App1", + "logicalId": "JoinedFromAParameter", "entityType": "Resource", - "resourceType": "AWS::Serverless::Application" + "resourceType": "AWS::S3::Bucket" }, + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 7, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 24, + "startColumn": 9, + "endLine": 24, + "endColumn": 20, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:{dynamic}-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "App2", + "logicalId": "SubstitutedFromAParameter", "entityType": "Resource", - "resourceType": "AWS::Serverless::Application" + "resourceType": "AWS::S3::Bucket" }, + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 7, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 38, + "startColumn": 9, + "endLine": 38, + "endColumn": 20, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:${NamePrefix}-data)" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "App2", + "logicalId": "OnlySomeChoicesTooLong", "entityType": "Resource", - "resourceType": "AWS::Serverless::Application" + "resourceType": "AWS::S3::Bucket" }, + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 7, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 44, + "startColumn": 9, + "endLine": 44, + "endColumn": 20, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'App1' of type 'AWS::Serverless::Application' supports Tags but none are configured", + "message": "Resource 'NameProviderWithADeliberatelyLongLogicalIdentifierForThisTest' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "App1", + "logicalId": "NameProviderWithADeliberatelyLongLogicalIdentifierForThisTest", "entityType": "Resource", - "resourceType": "AWS::Serverless::Application" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 10, "startColumn": 5, - "endLine": 5, - "endColumn": 15, + "endLine": 10, + "endColumn": 67, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'App2' of type 'AWS::Serverless::Application' supports Tags but none are configured", + "message": "Resource 'JoinedFromAReference' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "App2", + "logicalId": "JoinedFromAReference", "entityType": "Resource", - "resourceType": "AWS::Serverless::Application" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, + "startLine": 15, + "startColumn": 7, + "endLine": 15, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/transform/auto_publish_alias.yaml": { - "filePath": "good/transform/auto_publish_alias.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SkillFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'JoinedFromAParameter' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SkillFunction", + "logicalId": "JoinedFromAParameter", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 22, - "startColumn": 5, - "endLine": 22, - "endColumn": 15, + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SkillFunction2' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'SubstitutedFromAParameter' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SkillFunction2", + "logicalId": "SubstitutedFromAParameter", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 31, - "startColumn": 5, - "endLine": 31, - "endColumn": 15, + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/transform/auto_publish_code_sha256.yaml": { - "filePath": "good/transform/auto_publish_code_sha256.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LambdaFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'OnlySomeChoicesTooLong' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunction", + "logicalId": "OnlySomeChoicesTooLong", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, + "startLine": 43, + "startColumn": 7, + "endLine": 43, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/transform/function_use_s3_uri.yaml": { - "filePath": "good/transform/function_use_s3_uri.yaml", + "good/sub_not_needed.yaml": { + "filePath": "good/sub_not_needed.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, @@ -3738,7 +3559,7 @@ "fatal": 0, "errors": 0, "warnings": 0, - "informational": 1, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -3747,94 +3568,60 @@ }, "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Function' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Function", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 18, - "startColumn": 5, - "endLine": 18, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/transform/function_using_image.yaml": { - "filePath": "good/transform/function_using_image.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:${MyParam}-bucket)" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'HelloWorldFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "HelloWorldFunction", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, + "startLine": 8, "startColumn": 5, - "endLine": 6, + "endLine": 8, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/transform/include_object_form.yaml": { - "filePath": "good/transform/include_object_form.yaml", + "good/subnet_cidrs_across_vpcs_and_secondary_blocks.yaml": { + "filePath": "good/subnet_cidrs_across_vpcs_and_secondary_blocks.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 12, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "good/transform/language_extension.yaml": { - "filePath": "good/transform/language_extension.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 14, + "informational": 22, "debug": 0 }, "suppressed": 0, @@ -3843,126 +3630,133 @@ }, "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "TestLambdaFunction", + "logicalId": "VpcA", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 78, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 17, "startColumn": 7, - "endLine": 78, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 17, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.9", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", - "entity": { - "logicalId": "PolicyList", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 51, - "startColumn": 5, - "endLine": 51, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" - }, - { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "PolicyList", + "logicalId": "VpcB", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 51, - "startColumn": 5, - "endLine": 51, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "startLine": 24, + "startColumn": 7, + "endLine": 24, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3100", + "ruleId": "I9001", "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", - "source": "CFN_LINT", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "PolicyList", + "logicalId": "VpcASecondaryBlock", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::VPCCidrBlock" }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 53, + "startLine": 31, "startColumn": 7, - "endLine": 53, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" + "endLine": 31, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcA'" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PolicyList", + "logicalId": "VpcASecondaryBlock", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::VPCCidrBlock" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 54, + "startLine": 32, "startColumn": 7, - "endLine": 54, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 32, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroups", + "logicalId": "SubnetA1", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 87, + "startLine": 36, "startColumn": 7, - "endLine": 87, - "endColumn": 23, + "endLine": 36, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcA'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetA1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3975,18 +3769,41 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroups", + "logicalId": "SubnetB1", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 88, + "startLine": 44, "startColumn": 7, - "endLine": 88, + "endLine": 44, "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcB'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetB1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 45, + "startColumn": 7, + "endLine": 45, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { "lifecycle": "create-only" } @@ -3997,21 +3814,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MySubnet", + "logicalId": "SubnetA2ViaAttribute", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 93, - "startColumn": 9, - "endLine": 93, - "endColumn": 14, + "startLine": 52, + "startColumn": 7, + "endLine": 52, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "parameter 'MyVpc' (type AWS::EC2::VPC::Id)" + "resolutionSource": "GetAtt VpcA.VpcId" } }, { @@ -4020,16 +3837,16 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MySubnet", + "logicalId": "SubnetA2ViaAttribute", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 94, - "startColumn": 9, - "endLine": 94, - "endColumn": 18, + "startLine": 53, + "startColumn": 7, + "endLine": 53, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -4039,146 +3856,290 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZoneId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MySubnet", + "logicalId": "SubnetInSecondaryBlock", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.AvailabilityZoneId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 95, - "startColumn": 9, - "endLine": 95, - "endColumn": 27, + "startLine": 60, + "startColumn": 7, + "endLine": 60, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcA'" } }, { - "ruleId": "I9003", + "ruleId": "I9001", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", + "entity": { + "logicalId": "SubnetInSecondaryBlock", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" + "startLine": 61, + "startColumn": 7, + "endLine": 61, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'PolicyList' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PolicyList", + "logicalId": "SubnetProdOrDev", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 51, - "startColumn": 5, - "endLine": 51, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 68, + "startColumn": 7, + "endLine": 68, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcA'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TestStateMachine' of type 'AWS::Serverless::StateMachine' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TestStateMachine", + "logicalId": "SubnetProdOrDev", "entityType": "Resource", - "resourceType": "AWS::Serverless::StateMachine" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 63, - "startColumn": 5, - "endLine": 63, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 69, + "startColumn": 7, + "endLine": 69, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TestLambdaFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TestLambdaFunction", + "logicalId": "SubnetDevOrProd", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", "startLine": 76, - "startColumn": 5, + "startColumn": 7, "endLine": 76, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcA'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SecurityGroups' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroups", + "logicalId": "SubnetDevOrProd", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 86, - "startColumn": 5, - "endLine": 86, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 77, + "startColumn": 7, + "endLine": 77, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MySubnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MySubnet", + "logicalId": "SubnetFromAttribute", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 84, + "startColumn": 7, + "endLine": 84, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcA'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetFromAttribute", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 85, + "startColumn": 7, + "endLine": 85, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt VpcA.CidrBlock" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetFromImport", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", "startLine": 92, - "startColumn": 5, + "startColumn": 7, "endLine": 92, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcA'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetFromImport", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 93, + "startColumn": 7, + "endLine": 93, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import: SharedSubnetCidr)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetFromCidrFunction", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 100, + "startColumn": 7, + "endLine": 100, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcA'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetFromCidrFunction", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 101, + "startColumn": 7, + "endLine": 101, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Select with unresolvable arguments)" + } } ] }, - "good/transform/list_transform.yaml": { - "filePath": "good/transform/list_transform.yaml", + "good/transform.yaml": { + "filePath": "good/transform.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 3, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 1, + "informational": 4, "debug": 0 }, "suppressed": 0, @@ -4186,77 +4147,94 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "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": "AppName", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Application" + }, + "category": "Best Practice", + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 10, + "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": "AppName", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Application" + }, + "category": "Best Practice", + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 10, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SkillFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'MyServerlessFunctionLogicalID' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SkillFunction", + "logicalId": "MyServerlessFunctionLogicalID", "entityType": "Resource", "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, + "startLine": 7, "startColumn": 5, - "endLine": 17, + "endLine": 7, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/transform/list_transform_many.yaml": { - "filePath": "good/transform/list_transform_many.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Function' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'AppName' of type 'AWS::Serverless::Application' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Function", + "logicalId": "AppName", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Serverless::Application" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 16, + "startLine": 20, "startColumn": 5, - "endLine": 16, + "endLine": 20, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/transform/list_transform_not_sam.yaml": { - "filePath": "good/transform/list_transform_not_sam.yaml", + "good/transform/applications_location.yaml": { + "filePath": "good/transform/applications_location.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 2, "counts": { "fatal": 0, "errors": 0, - "warnings": 1, - "informational": 1, + "warnings": 0, + "informational": 6, "debug": 0 }, "suppressed": 0, @@ -4265,117 +4243,93 @@ }, "diagnostics": [ { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", + "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": "SkillFunction", + "logicalId": "App1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Serverless::Application" }, - "category": "Security", - "startLine": 7, + "category": "Best Practice", + "startLine": 3, "startColumn": 3, - "endLine": 7, - "endColumn": 16, - "ruleDescription": "Hardcoded account ID in ARN", + "endLine": 3, + "endColumn": 7, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'SkillFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "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": "SkillFunction", + "logicalId": "App1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Serverless::Application" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 7, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "good/transform/step_function_local_definition.yaml": { - "filePath": "good/transform/step_function_local_definition.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'StateMachine' of type 'AWS::Serverless::StateMachine' supports Tags but none are configured", - "source": "ENGINE", + "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": "StateMachine", + "logicalId": "App2", "entityType": "Resource", - "resourceType": "AWS::Serverless::StateMachine" + "resourceType": "AWS::Serverless::Application" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 7, + "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": "App2", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Application" + }, + "category": "Best Practice", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 7, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "good/transform_serverless_api.yaml": { - "filePath": "good/transform_serverless_api.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'App1' of type 'AWS::Serverless::Application' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myFunction", + "logicalId": "App1", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Serverless::Application" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 7, + "startLine": 5, "startColumn": 5, - "endLine": 7, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -4383,27 +4337,27 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myApi' of type 'AWS::Serverless::Api' supports Tags but none are configured", + "message": "Resource 'App2' of type 'AWS::Serverless::Application' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myApi", + "logicalId": "App2", "entityType": "Resource", - "resourceType": "AWS::Serverless::Api" + "resourceType": "AWS::Serverless::Application" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 23, + "startLine": 9, "startColumn": 5, - "endLine": 23, + "endLine": 9, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/transform_serverless_auto_publish_alias.yaml": { - "filePath": "good/transform_serverless_auto_publish_alias.yaml", + "good/transform/auto_publish_alias.yaml": { + "filePath": "good/transform/auto_publish_alias.yaml", "status": "OK", "metadata": { "resourcesScanned": 2, @@ -4422,19 +4376,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LiteralAliasFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'SkillFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LiteralAliasFunction", + "logicalId": "SkillFunction", "entityType": "Resource", "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, + "startLine": 22, "startColumn": 5, - "endLine": 10, + "endLine": 22, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -4442,35 +4396,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ParameterAliasFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'SkillFunction2' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ParameterAliasFunction", + "logicalId": "SkillFunction2", "entityType": "Resource", "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, + "startLine": 31, "startColumn": 5, - "endLine": 17, + "endLine": 31, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/transform_serverless_function.yaml": { - "filePath": "good/transform_serverless_function.yaml", + "good/transform/auto_publish_code_sha256.yaml": { + "filePath": "good/transform/auto_publish_code_sha256.yaml", "status": "OK", "metadata": { - "resourcesScanned": 4, + "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 3, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -4481,73 +4435,72 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myApi' of type 'AWS::Serverless::Api' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "myApi", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Api" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'LambdaFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myFunction", + "logicalId": "LambdaFunction", "entityType": "Resource", "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 11, + "startLine": 12, "startColumn": 5, - "endLine": 11, + "endLine": 12, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/transform/function_use_s3_uri.yaml": { + "filePath": "good/transform/function_use_s3_uri.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'Function' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myBucket", + "logicalId": "Function", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 73, + "startLine": 18, "startColumn": 5, - "endLine": 73, + "endLine": 18, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/transform_serverless_globals.yaml": { - "filePath": "good/transform_serverless_globals.yaml", + "good/transform/function_using_image.yaml": { + "filePath": "good/transform/function_using_image.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 1, + "errors": 0, "warnings": 0, "informational": 1, "debug": 0 @@ -4557,61 +4510,56 @@ "severityLevel": "DEBUG" }, "diagnostics": [ - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs6.10' was deprecated on '2019-08-12'. Creation was disabled on '2019-07-12', and updates were disabled on '2019-08-12'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "myFunction", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 12, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs6.10", - "lifecycle": "end-of-life" - } - }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'HelloWorldFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myFunction", + "logicalId": "HelloWorldFunction", "entityType": "Resource", "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, + "startLine": 6, "startColumn": 5, - "endLine": 12, + "endLine": 6, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/transform_serverless_ignore_globals.yaml": { - "filePath": "good/transform_serverless_ignore_globals.yaml", + "good/transform/include_object_form.yaml": { + "filePath": "good/transform/include_object_form.yaml", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 1, + "errors": 0, "warnings": 0, - "informational": 3, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "good/transform/language_extension.yaml": { + "filePath": "good/transform/language_extension.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 7, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 14, "debug": 0 }, "suppressed": 0, @@ -4620,276 +4568,381 @@ }, "diagnostics": [ { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs6.10' was deprecated on '2019-08-12'. Creation was disabled on '2019-07-12', and updates were disabled on '2019-08-12'. Please consider updating to 'nodejs24.x'", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "InheritsGlobalsFunction", + "logicalId": "TestLambdaFunction", "entityType": "Resource", "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 12, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "startLine": 78, + "startColumn": 7, + "endLine": 78, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "actualValue": "nodejs6.10", - "lifecycle": "end-of-life" + "actualValue": "python3.9", + "lifecycle": "deprecated" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'IgnoredFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "IgnoredFunction", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 12, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 51, "startColumn": 5, - "endLine": 12, + "endLine": 51, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'SelectiveIgnoreFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "SelectiveIgnoreFunction", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 20, + "startLine": 51, "startColumn": 5, - "endLine": 20, + "endLine": 51, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3100", "severity": "INFO", - "message": "Resource 'InheritsGlobalsFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "InheritsGlobalsFunction", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 26, - "startColumn": 5, - "endLine": 26, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 53, + "startColumn": 7, + "endLine": 53, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", "phase": "LINT" - } - ] - }, - "good/transform_serverless_ignore_globals_supported_runtime.yaml": { - "filePath": "good/transform_serverless_ignore_globals_supported_runtime.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'IgnoredFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "IgnoredFunction", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 54, + "startColumn": 7, + "endLine": 54, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SelectiveIgnoreFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SelectiveIgnoreFunction", + "logicalId": "SecurityGroups", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 87, + "startColumn": 7, + "endLine": 87, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'InheritsGlobalsFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "InheritsGlobalsFunction", + "logicalId": "SecurityGroups", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 26, - "startColumn": 5, - "endLine": 26, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/unique_items_deploy_time_values.json": { - "filePath": "good/unique_items_deploy_time_values.json", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 + "startLine": 88, + "startColumn": 7, + "endLine": 88, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'StackOutputSubnets' of type 'AWS::RDS::DBSubnetGroup' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StackOutputSubnets", + "logicalId": "MySubnet", "entityType": "Resource", - "resourceType": "AWS::RDS::DBSubnetGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 93, + "startColumn": 9, + "endLine": 93, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'MyVpc' (type AWS::EC2::VPC::Id)" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ImportedSubnets' of type 'AWS::RDS::DBSubnetGroup' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ImportedSubnets", + "logicalId": "MySubnet", "entityType": "Resource", - "resourceType": "AWS::RDS::DBSubnetGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 34, - "startColumn": 7, - "endLine": 34, + "startLine": 94, + "startColumn": 9, + "endLine": 94, "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SelectedSubnets' of type 'AWS::RDS::DBSubnetGroup' supports Tags but none are configured", + "message": "Property 'AvailabilityZoneId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SelectedSubnets", + "logicalId": "MySubnet", "entityType": "Resource", - "resourceType": "AWS::RDS::DBSubnetGroup" + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZoneId", + "category": "Best Practice", + "startLine": 95, + "startColumn": 9, + "endLine": 95, + "endColumn": 27, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'PolicyList' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "PolicyList", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 44, - "startColumn": 7, - "endLine": 44, - "endColumn": 18, + "startLine": 51, + "startColumn": 5, + "endLine": 51, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TestStateMachine' of type 'AWS::Serverless::StateMachine' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "TestStateMachine", + "entityType": "Resource", + "resourceType": "AWS::Serverless::StateMachine" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 63, + "startColumn": 5, + "endLine": 63, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TestLambdaFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "TestLambdaFunction", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 76, + "startColumn": 5, + "endLine": 76, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SecurityGroups' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SecurityGroups", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 86, + "startColumn": 5, + "endLine": 86, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MySubnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "MySubnet", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 92, + "startColumn": 5, + "endLine": 92, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/unknown_resource_types_ignored.yaml": { - "filePath": "good/unknown_resource_types_ignored.yaml", + "good/transform/list_transform.yaml": { + "filePath": "good/transform/list_transform.yaml", "status": "OK", "metadata": { - "resourcesScanned": 5, + "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 0, + "informational": 1, "debug": 0 }, "suppressed": 0, "strict": false, "severityLevel": "DEBUG" }, - "diagnostics": [] + "diagnostics": [ + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SkillFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SkillFunction", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 17, + "startColumn": 5, + "endLine": 17, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] }, - "good/unresolved_values_are_present.yaml": { - "filePath": "good/unresolved_values_are_present.yaml", + "good/transform/list_transform_many.yaml": { + "filePath": "good/transform/list_transform_many.yaml", "status": "OK", "metadata": { - "resourcesScanned": 15, + "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 32, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -4898,615 +4951,729 @@ }, "diagnostics": [ { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'Function' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ValkeyGroup", + "logicalId": "Function", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::Serverless::Function" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 134, - "startColumn": 3, - "endLine": 134, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/transform/list_transform_not_sam.yaml": { + "filePath": "good/transform/list_transform_not_sam.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "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", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", "entity": { - "logicalId": "ValkeyGroup", + "logicalId": "SkillFunction", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::Lambda::Function" }, - "category": "Best Practice", - "startLine": 134, + "category": "Security", + "startLine": 7, "startColumn": 3, - "endLine": 134, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 7, + "endColumn": 16, + "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'SkillFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Vpc", + "logicalId": "SkillFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 24, - "startColumn": 7, - "endLine": 24, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" - } + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/transform/step_function_local_definition.yaml": { + "filePath": "good/transform/step_function_local_definition.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'StateMachine' of type 'AWS::Serverless::StateMachine' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Subnet1", + "logicalId": "StateMachine", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::StateMachine" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 25, - "startColumn": 7, - "endLine": 25, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/transform_serverless_api.yaml": { + "filePath": "good/transform_serverless_api.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'myFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Subnet2", + "logicalId": "myFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 32, - "startColumn": 7, - "endLine": 32, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" - } + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'myApi' of type 'AWS::Serverless::Api' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Subnet2", + "logicalId": "myApi", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::Api" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 23, + "startColumn": 5, + "endLine": 23, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/transform_serverless_auto_publish_alias.yaml": { + "filePath": "good/transform_serverless_auto_publish_alias.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'LiteralAliasFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "LiteralAliasFunction", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 42, - "startColumn": 7, - "endLine": 42, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'ParameterAliasFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "ParameterAliasFunction", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 43, - "startColumn": 7, - "endLine": 43, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 17, + "startColumn": 5, + "endLine": 17, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/transform_serverless_function.yaml": { + "filePath": "good/transform_serverless_function.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Resource 'myApi' of type 'AWS::Serverless::Api' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "myApi", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Serverless::Api" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 52, - "startColumn": 7, - "endLine": 52, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'myFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "myFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 53, - "startColumn": 7, - "endLine": 53, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" - } + "startLine": 11, + "startColumn": 5, + "endLine": 11, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Resource 'myBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "IngressFromAttribute", + "logicalId": "myBucket", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 65, - "startColumn": 7, - "endLine": 65, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'SecurityGroup'" - } + "startLine": 73, + "startColumn": 5, + "endLine": 73, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/transform_serverless_globals.yaml": { + "filePath": "good/transform_serverless_globals.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs6.10' was deprecated on '2019-08-12'. Creation was disabled on '2019-07-12', and updates were disabled on '2019-08-12'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "IngressFromAttribute", + "logicalId": "myFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.IpProtocol", - "category": "Best Practice", - "startLine": 66, - "startColumn": 7, - "endLine": 66, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 12, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs6.10", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", + "message": "Resource 'myFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "IngressFromAttribute", + "logicalId": "myFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.CidrIp", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 67, - "startColumn": 7, - "endLine": 67, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/transform_serverless_ignore_globals.yaml": { + "filePath": "good/transform_serverless_ignore_globals.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs6.10' was deprecated on '2019-08-12'. Creation was disabled on '2019-07-12', and updates were disabled on '2019-08-12'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "IngressFromAttribute", + "logicalId": "InheritsGlobalsFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.FromPort", - "category": "Best Practice", - "startLine": 68, - "startColumn": 7, - "endLine": 68, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 12, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt Cluster.Endpoint.Port" + "actualValue": "nodejs6.10", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Resource 'IgnoredFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "IngressFromAttribute", + "logicalId": "IgnoredFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 69, - "startColumn": 7, - "endLine": 69, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt Cluster.Endpoint.Port" - } + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Resource 'SelectiveIgnoreFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "IngressFromImport", + "logicalId": "SelectiveIgnoreFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 73, - "startColumn": 7, - "endLine": 73, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'SecurityGroup'" - } + "startLine": 20, + "startColumn": 5, + "endLine": 20, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Resource 'InheritsGlobalsFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "IngressFromImport", + "logicalId": "InheritsGlobalsFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 74, - "startColumn": 7, - "endLine": 74, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 26, + "startColumn": 5, + "endLine": 26, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/transform_serverless_ignore_globals_supported_runtime.yaml": { + "filePath": "good/transform_serverless_ignore_globals_supported_runtime.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", + "message": "Resource 'IgnoredFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "IngressFromImport", + "logicalId": "IgnoredFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.CidrIp", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 75, - "startColumn": 7, - "endLine": 75, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Resource 'SelectiveIgnoreFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "IngressFromImport", + "logicalId": "SelectiveIgnoreFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 76, - "startColumn": 7, - "endLine": 76, + "startLine": 20, + "startColumn": 5, + "endLine": 20, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: SharedPort)" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Resource 'InheritsGlobalsFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "IngressFromImport", + "logicalId": "InheritsGlobalsFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 77, - "startColumn": 7, - "endLine": 77, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: SharedPort)" - } + "startLine": 26, + "startColumn": 5, + "endLine": 26, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/unique_items_deploy_time_values.json": { + "filePath": "good/unique_items_deploy_time_values.json", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Resource 'StackOutputSubnets' of type 'AWS::RDS::DBSubnetGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EgressFromParameter", + "logicalId": "StackOutputSubnets", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::RDS::DBSubnetGroup" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 81, + "startLine": 12, "startColumn": 7, - "endLine": 81, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'SecurityGroup'" - } + "endLine": 12, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Resource 'ImportedSubnets' of type 'AWS::RDS::DBSubnetGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EgressFromParameter", + "logicalId": "ImportedSubnets", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::RDS::DBSubnetGroup" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 82, + "startLine": 34, "startColumn": 7, - "endLine": 82, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 34, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", + "message": "Resource 'SelectedSubnets' of type 'AWS::RDS::DBSubnetGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EgressFromParameter", + "logicalId": "SelectedSubnets", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::RDS::DBSubnetGroup" }, - "propertyPath": "Properties.CidrIp", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 83, + "startLine": 44, "startColumn": 7, - "endLine": 83, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 44, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/unknown_resource_types_ignored.yaml": { + "filePath": "good/unknown_resource_types_ignored.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "good/unresolved_values_are_present.yaml": { + "filePath": "good/unresolved_values_are_present.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 15, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 32, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "EgressFromParameter", + "logicalId": "ValkeyGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 84, - "startColumn": 7, - "endLine": 84, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'DbPort' (type Number)" - } + "startLine": 134, + "startColumn": 3, + "endLine": 134, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "EgressFromParameter", + "logicalId": "ValkeyGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 85, - "startColumn": 7, - "endLine": 85, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'DbPort' (type Number)" - } + "startLine": 134, + "startColumn": 3, + "endLine": 134, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DomainName' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Certificate", + "logicalId": "Vpc", "entityType": "Resource", - "resourceType": "AWS::CertificateManager::Certificate" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.DomainName", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 89, + "startLine": 17, "startColumn": 7, - "endLine": 89, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-acmpca", + "endLine": 17, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5519,15 +5686,15 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup", + "logicalId": "Subnet1", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 103, + "startLine": 24, "startColumn": 7, - "endLine": 103, + "endLine": 24, "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -5539,19 +5706,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup", + "logicalId": "Subnet1", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 104, + "startLine": 25, "startColumn": 7, - "endLine": 104, - "endColumn": 11, + "endLine": 25, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5561,142 +5728,110 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup", + "logicalId": "Subnet2", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 105, + "startLine": 32, "startColumn": 7, - "endLine": 105, - "endColumn": 15, + "endLine": 32, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HttpsListener", + "logicalId": "Subnet2", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.LoadBalancerArn", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 112, + "startLine": 33, "startColumn": 7, - "endLine": 112, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", + "endLine": 33, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'LoadBalancer'" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'HttpsListener' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HttpsListener", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 111, - "startColumn": 5, - "endLine": 111, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/vpc_subnets.yaml": { - "filePath": "good/vpc_subnets.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 12, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W3010", - "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1a'", - "source": "CFN_LINT", - "entity": { - "logicalId": "SubnetA", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 15, + "startLine": 42, "startColumn": 7, - "endLine": 15, - "endColumn": 23, - "ruleDescription": "Availability zone properties should not be hardcoded", - "phase": "LINT" + "endLine": 42, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W3010", - "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1b'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 21, + "startLine": 43, "startColumn": 7, - "endLine": 21, - "endColumn": 23, - "ruleDescription": "Availability zone properties should not be hardcoded", - "phase": "LINT" + "endLine": 43, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyVPC", + "logicalId": "SecurityGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 6, + "startLine": 52, "startColumn": 7, - "endLine": 6, - "endColumn": 16, + "endLine": 52, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5709,62 +5844,65 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "SecurityGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 13, + "startLine": 53, "startColumn": 7, - "endLine": 13, + "endLine": 53, "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVPC'" + "resolutionSource": "Ref to 'Vpc'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "IngressFromAttribute", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 14, + "startLine": 65, "startColumn": 7, - "endLine": 14, - "endColumn": 16, + "endLine": 65, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SecurityGroup'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "IngressFromAttribute", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 15, + "startLine": 66, "startColumn": 7, - "endLine": 15, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 66, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" @@ -5773,254 +5911,233 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "IngressFromAttribute", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.CidrIp", "category": "Best Practice", - "startLine": 19, + "startLine": 67, "startColumn": 7, - "endLine": 19, - "endColumn": 12, + "endLine": 67, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVPC'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "IngressFromAttribute", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 20, + "startLine": 68, "startColumn": 7, - "endLine": 20, - "endColumn": 16, + "endLine": 68, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt Cluster.Endpoint.Port" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "IngressFromAttribute", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 21, + "startLine": 69, "startColumn": 7, - "endLine": 21, - "endColumn": 23, + "endLine": 69, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt Cluster.Endpoint.Port" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "IngressFromImport", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 25, + "startLine": 73, "startColumn": 7, - "endLine": 25, - "endColumn": 23, + "endLine": 73, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SecurityGroup'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "IngressFromImport", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 26, + "startLine": 74, "startColumn": 7, - "endLine": 26, - "endColumn": 12, + "endLine": 74, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVPC'" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SubnetA' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "IngressFromImport", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrIp", "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 75, + "startColumn": 7, + "endLine": 75, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SubnetB' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "IngressFromImport", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 18, - "startColumn": 5, - "endLine": 18, + "startLine": 76, + "startColumn": 7, + "endLine": 76, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import: SharedPort)" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "IngressFromImport", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 24, - "startColumn": 5, - "endLine": 24, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "integration/availability-zones.yaml": { - "filePath": "integration/availability-zones.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 2, - "errors": 0, - "warnings": 0, - "informational": 5, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'AvailabilityZoneId' should not be included with 'AvailabilityZone'", - "source": "SCHEMA", - "entity": { - "logicalId": "Subnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZoneId", - "category": "Schema", - "startLine": 5, + "startLine": 77, "startColumn": 7, - "endLine": 5, - "endColumn": 25, - "ruleDescription": "Mutually exclusive properties", + "endLine": 77, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "AvailabilityZoneId" + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import: SharedPort)" } }, { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'AvailabilityZone' should not be included with 'AvailabilityZoneId'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Subnet", + "logicalId": "EgressFromParameter", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Schema", - "startLine": 6, + "propertyPath": "Properties.GroupId", + "category": "Best Practice", + "startLine": 81, "startColumn": 7, - "endLine": 6, - "endColumn": 23, - "ruleDescription": "Mutually exclusive properties", + "endLine": 81, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "AvailabilityZone" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SecurityGroup'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZoneId' is create-only; updating it will cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet", + "logicalId": "EgressFromParameter", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.AvailabilityZoneId", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 5, + "startLine": 82, "startColumn": 7, - "endLine": 5, - "endColumn": 25, + "endLine": 82, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6030,19 +6147,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet", + "logicalId": "EgressFromParameter", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.CidrIp", "category": "Best Practice", - "startLine": 6, + "startLine": 83, "startColumn": 7, - "endLine": 6, - "endColumn": 23, + "endLine": 83, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6052,149 +6170,68 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet", + "logicalId": "EgressFromParameter", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 10, + "startLine": 84, "startColumn": 7, - "endLine": 10, - "endColumn": 16, + "endLine": 84, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter 'DbPort' (type Number)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet", + "logicalId": "EgressFromParameter", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 11, + "startLine": 85, "startColumn": 7, - "endLine": 11, - "endColumn": 12, + "endLine": 85, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Subnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 4, - "startColumn": 5, - "endLine": 4, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "integration/aws-dynamodb-table.yaml": { - "filePath": "integration/aws-dynamodb-table.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 1, - "informational": 10, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F3021", - "severity": "FATAL", - "message": "'SSEType' is a dependency of 'KMSMasterKeyId'", - "source": "SCHEMA", - "entity": { - "logicalId": "Table1", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.SSESpecification", - "suggestedFix": "Add 'SSEType' when 'KMSMasterKeyId' is specified", - "category": "Schema", - "startLine": 22, - "startColumn": 7, - "endLine": 22, - "endColumn": 23, - "ruleDescription": "Dependent property required", - "phase": "SCHEMA" - }, - { - "ruleId": "W3030", - "severity": "WARN", - "message": "'AES256' is not one of ['KMS']", - "source": "CFN_LINT", - "entity": { - "logicalId": "Table2", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.SSESpecification.SSEType", - "category": "Schema", - "startLine": 44, - "startColumn": 9, - "endLine": 44, - "endColumn": 16, - "ruleDescription": "Value not in allowed enum", - "phase": "SCHEMA", - "context": { - "actualValue": "AES256", - "extra": { - "allowed_values": [ - "KMS" - ] - } + "lifecycle": "create-only", + "resolutionSource": "parameter 'DbPort' (type Number)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "message": "Property 'DomainName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Table1", + "logicalId": "Certificate", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::CertificateManager::Certificate" }, - "propertyPath": "Properties.TableName", + "propertyPath": "Properties.DomainName", "category": "Best Practice", - "startLine": 12, + "startLine": 89, "startColumn": 7, - "endLine": 12, - "endColumn": 16, + "endLine": 89, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-acmpca", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6204,41 +6241,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Table1", + "logicalId": "TargetGroup", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 16, + "startLine": 103, "startColumn": 7, - "endLine": 16, - "endColumn": 16, + "endLine": 103, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Table2", + "logicalId": "TargetGroup", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.TableName", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 31, + "startLine": 104, "startColumn": 7, - "endLine": 31, - "endColumn": 16, + "endLine": 104, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6248,41 +6286,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Table2", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.KeySchema", - "category": "Best Practice", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Table3", + "logicalId": "TargetGroup", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.TableName", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 50, + "startLine": 105, "startColumn": 7, - "endLine": 50, - "endColumn": 16, + "endLine": 105, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6292,117 +6308,59 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Table3", + "logicalId": "HttpsListener", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.LoadBalancerArn", "category": "Best Practice", - "startLine": 59, + "startLine": 112, "startColumn": 7, - "endLine": 59, - "endColumn": 16, + "endLine": 112, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'LoadBalancer'" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'KMS' of type 'AWS::KMS::Key' supports Tags but none are configured", + "message": "Resource 'HttpsListener' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "KMS", + "logicalId": "HttpsListener", "entityType": "Resource", - "resourceType": "AWS::KMS::Key" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 6, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Table1' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Table1", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 11, - "startColumn": 5, - "endLine": 11, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Table2' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Table2", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 30, - "startColumn": 5, - "endLine": 30, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Table3' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Table3", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 49, - "startColumn": 5, - "endLine": 49, - "endColumn": 15, + "startLine": 111, + "startColumn": 5, + "endLine": 111, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "integration/aws-ec2-instance.yaml": { - "filePath": "integration/aws-ec2-instance.yaml", + "good/vpc_subnets.yaml": { + "filePath": "good/vpc_subnets.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 4, "counts": { - "fatal": 4, + "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 6, + "warnings": 2, + "informational": 12, "debug": 0 }, "suppressed": 0, @@ -6411,114 +6369,104 @@ }, "diagnostics": [ { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'AssociateCarrierIpAddress' should not be included with 'NetworkInterfaceId'", - "source": "SCHEMA", + "ruleId": "W3010", + "severity": "WARN", + "message": "Avoid hardcoding availability zones 'us-east-1a'", + "source": "CFN_LINT", "entity": { - "logicalId": "Instance", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.NetworkInterfaces.0.AssociateCarrierIpAddress", - "category": "Schema", - "startLine": 14, - "startColumn": 11, - "endLine": 14, - "endColumn": 36, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Mutually exclusive properties", - "phase": "SCHEMA", - "context": { - "property": "AssociateCarrierIpAddress" - } + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 15, + "startColumn": 7, + "endLine": 15, + "endColumn": 23, + "ruleDescription": "Availability zone properties should not be hardcoded", + "phase": "LINT" }, { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'AssociatePublicIpAddress' should not be included with 'NetworkInterfaceId'", - "source": "SCHEMA", + "ruleId": "W3010", + "severity": "WARN", + "message": "Avoid hardcoding availability zones 'us-east-1b'", + "source": "CFN_LINT", "entity": { - "logicalId": "Instance", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.NetworkInterfaces.0.AssociatePublicIpAddress", - "category": "Schema", - "startLine": 15, - "startColumn": 11, - "endLine": 15, - "endColumn": 35, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Mutually exclusive properties", - "phase": "SCHEMA", - "context": { - "property": "AssociatePublicIpAddress" - } + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 23, + "ruleDescription": "Availability zone properties should not be hardcoded", + "phase": "LINT" }, { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'NetworkInterfaceId' should not be included with 'AssociateCarrierIpAddress'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Instance", + "logicalId": "MyVPC", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.NetworkInterfaces.0.NetworkInterfaceId", - "category": "Schema", - "startLine": 17, - "startColumn": 11, - "endLine": 17, - "endColumn": 29, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Mutually exclusive properties", + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "NetworkInterfaceId" + "lifecycle": "create-only" } }, { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'NetworkInterfaceId' should not be included with 'AssociatePublicIpAddress'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Instance", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.NetworkInterfaces.0.NetworkInterfaceId", - "category": "Schema", - "startLine": 17, - "startColumn": 11, - "endLine": 17, - "endColumn": 29, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Mutually exclusive properties", + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 13, + "startColumn": 7, + "endLine": 13, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "NetworkInterfaceId" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVPC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NetworkInterface", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkInterface" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 7, + "startLine": 14, "startColumn": 7, - "endLine": 7, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/networkinterface", + "endLine": 14, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6528,20 +6476,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Instance", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 11, + "startLine": 15, "startColumn": 7, - "endLine": 11, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 15, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6551,43 +6498,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Instance", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 12, + "startLine": 19, "startColumn": 7, - "endLine": 12, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 19, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVPC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Instance", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.NetworkInterfaces", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 13, + "startLine": 20, "startColumn": 7, - "endLine": 13, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 20, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6595,187 +6541,136 @@ } }, { - "ruleId": "I9003", + "ruleId": "I9001", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'NetworkInterface' of type 'AWS::EC2::NetworkInterface' supports Tags but none are configured", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NetworkInterface", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkInterface" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 4, - "startColumn": 5, - "endLine": 4, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "integration/aws-ec2-launchtemplate.yaml": { - "filePath": "integration/aws-ec2-launchtemplate.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 5, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'NetworkInterface' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'LaunchTemplate']", - "source": "SCHEMA", - "entity": { - "logicalId": "LaunchTemplate", - "entityType": "Resource", - "resourceType": "AWS::EC2::LaunchTemplate" - }, - "propertyPath": "Properties.LaunchTemplateData.NetworkInterfaces.0.NetworkInterfaceId", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 13, - "startColumn": 13, - "endLine": 13, - "endColumn": 31, - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'AssociateCarrierIpAddress' should not be included with 'NetworkInterfaceId'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LaunchTemplate", + "logicalId": "SecurityGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::LaunchTemplate" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.LaunchTemplateData.NetworkInterfaces.0.AssociateCarrierIpAddress", - "category": "Schema", - "startLine": 10, - "startColumn": 13, - "endLine": 10, - "endColumn": 38, - "ruleDescription": "Mutually exclusive properties", + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "AssociateCarrierIpAddress" + "lifecycle": "create-only" } }, { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'AssociatePublicIpAddress' should not be included with 'NetworkInterfaceId'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LaunchTemplate", + "logicalId": "SecurityGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::LaunchTemplate" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.LaunchTemplateData.NetworkInterfaces.0.AssociatePublicIpAddress", - "category": "Schema", - "startLine": 11, - "startColumn": 13, - "endLine": 11, - "endColumn": 37, - "ruleDescription": "Mutually exclusive properties", + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 26, + "startColumn": 7, + "endLine": 26, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "AssociatePublicIpAddress" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVPC'" } }, { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'NetworkInterfaceId' should not be included with 'AssociateCarrierIpAddress'", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SubnetA' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "LaunchTemplate", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::EC2::LaunchTemplate" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.LaunchTemplateData.NetworkInterfaces.0.NetworkInterfaceId", - "category": "Schema", - "startLine": 13, - "startColumn": 13, - "endLine": 13, - "endColumn": 31, - "ruleDescription": "Mutually exclusive properties", - "phase": "SCHEMA", - "context": { - "property": "NetworkInterfaceId" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'NetworkInterfaceId' should not be included with 'AssociatePublicIpAddress'", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SubnetB' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "LaunchTemplate", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::EC2::LaunchTemplate" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.LaunchTemplateData.NetworkInterfaces.0.NetworkInterfaceId", - "category": "Schema", - "startLine": 13, - "startColumn": 13, - "endLine": 13, - "endColumn": 31, - "ruleDescription": "Mutually exclusive properties", - "phase": "SCHEMA", - "context": { - "property": "NetworkInterfaceId" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 18, + "startColumn": 5, + "endLine": 18, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'LaunchTemplateName' is create-only; updating it will cause resource replacement", + "message": "Resource 'SecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LaunchTemplate", + "logicalId": "SecurityGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::LaunchTemplate" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.LaunchTemplateName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 25, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 24, + "startColumn": 5, + "endLine": 24, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "integration/aws-ec2-networkinterface.yaml": { - "filePath": "integration/aws-ec2-networkinterface.yaml", + "integration/availability-zones.yaml": { + "filePath": "integration/availability-zones.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, @@ -6783,7 +6678,7 @@ "fatal": 2, "errors": 0, "warnings": 0, - "informational": 2, + "informational": 5, "debug": 0 }, "suppressed": 0, @@ -6794,276 +6689,281 @@ { "ruleId": "F3020", "severity": "FATAL", - "message": "'Ipv6Addresses' should not be included with 'Ipv6AddressCount'", + "message": "'AvailabilityZoneId' should not be included with 'AvailabilityZone'", "source": "SCHEMA", "entity": { - "logicalId": "NetworkInterface", + "logicalId": "Subnet", "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkInterface" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Ipv6Addresses", + "propertyPath": "Properties.AvailabilityZoneId", "category": "Schema", - "startLine": 15, + "startLine": 5, "startColumn": 7, - "endLine": 15, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/networkinterface", + "endLine": 5, + "endColumn": 25, "ruleDescription": "Mutually exclusive properties", "phase": "SCHEMA", "context": { - "property": "Ipv6Addresses" + "property": "AvailabilityZoneId" } }, { "ruleId": "F3020", "severity": "FATAL", - "message": "'Ipv6AddressCount' should not be included with 'Ipv6Addresses'", + "message": "'AvailabilityZone' should not be included with 'AvailabilityZoneId'", "source": "SCHEMA", "entity": { - "logicalId": "NetworkInterface", + "logicalId": "Subnet", "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkInterface" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Ipv6AddressCount", + "propertyPath": "Properties.AvailabilityZone", "category": "Schema", - "startLine": 17, + "startLine": 6, "startColumn": 7, - "endLine": 17, + "endLine": 6, "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/networkinterface", "ruleDescription": "Mutually exclusive properties", "phase": "SCHEMA", "context": { - "property": "Ipv6AddressCount" + "property": "AvailabilityZone" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZoneId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NetworkInterface", + "logicalId": "Subnet", "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkInterface" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.AvailabilityZoneId", "category": "Best Practice", - "startLine": 14, + "startLine": 5, "startColumn": 7, - "endLine": 14, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/networkinterface", + "endLine": 5, + "endColumn": 25, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'SubnetId' (type AWS::EC2::Subnet::Id)" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'NetworkInterface' of type 'AWS::EC2::NetworkInterface' supports Tags but none are configured", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NetworkInterface", + "logicalId": "Subnet", "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkInterface" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "integration/aws-ec2-subnet.yaml": { - "filePath": "integration/aws-ec2-subnet.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 5, - "errors": 0, - "warnings": 0, - "informational": 18, - "debug": 0 + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'CidrBlock' should not be included with 'Ipv4IpamPoolId'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Subnet5", + "logicalId": "Subnet", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", - "category": "Schema", - "startLine": 30, + "category": "Best Practice", + "startLine": 10, "startColumn": 7, - "endLine": 30, + "endLine": 10, "endColumn": 16, - "ruleDescription": "Mutually exclusive properties", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "CidrBlock" + "lifecycle": "create-only" } }, { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'Ipv4IpamPoolId' should not be included with 'CidrBlock'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Subnet5", + "logicalId": "Subnet", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Ipv4IpamPoolId", - "category": "Schema", - "startLine": 31, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 11, "startColumn": 7, - "endLine": 31, - "endColumn": 21, - "ruleDescription": "Mutually exclusive properties", + "endLine": 11, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "Ipv4IpamPoolId" + "lifecycle": "create-only" } }, { - "ruleId": "F3021", - "severity": "FATAL", - "message": "'Ipv4IpamPoolId' is a dependency of 'Ipv4NetmaskLength'", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Subnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Subnet1", + "logicalId": "Subnet", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties", - "suggestedFix": "Add 'Ipv4IpamPoolId' when 'Ipv4NetmaskLength' is specified", - "category": "Schema", - "startLine": 7, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 4, "startColumn": 5, - "endLine": 7, + "endLine": 4, "endColumn": 15, - "ruleDescription": "Dependent property required", - "phase": "SCHEMA" + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "integration/aws-dynamodb-table.yaml": { + "filePath": "integration/aws-dynamodb-table.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 1, + "informational": 10, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "F3021", "severity": "FATAL", - "message": "'Ipv4NetmaskLength' is a dependency of 'Ipv4IpamPoolId'", + "message": "'SSEType' is a dependency of 'KMSMasterKeyId'", "source": "SCHEMA", "entity": { - "logicalId": "Subnet3", + "logicalId": "Table1", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties", - "suggestedFix": "Add 'Ipv4NetmaskLength' when 'Ipv4IpamPoolId' is specified", + "propertyPath": "Properties.SSESpecification", + "suggestedFix": "Add 'SSEType' when 'KMSMasterKeyId' is specified", "category": "Schema", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 15, + "startLine": 22, + "startColumn": 7, + "endLine": 22, + "endColumn": 23, "ruleDescription": "Dependent property required", "phase": "SCHEMA" }, { - "ruleId": "F3058", - "severity": "FATAL", - "message": "One of ['CidrBlock', 'Ipv4IpamPoolId', 'Ipv6IpamPoolId', 'Ipv6CidrBlock'] is a required property", - "source": "SCHEMA", + "ruleId": "W3030", + "severity": "WARN", + "message": "'AES256' is not one of ['KMS']", + "source": "CFN_LINT", "entity": { - "logicalId": "Subnet2", + "logicalId": "Table2", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties", + "propertyPath": "Properties.SSESpecification.SSEType", "category": "Schema", - "startLine": 13, - "startColumn": 5, - "endLine": 13, - "endColumn": 15, - "ruleDescription": "One of properties required (requiredOr)", - "phase": "SCHEMA" + "startLine": 44, + "startColumn": 9, + "endLine": 44, + "endColumn": 16, + "ruleDescription": "Value not in allowed enum", + "phase": "SCHEMA", + "context": { + "actualValue": "AES256", + "extra": { + "allowed_values": [ + "KMS" + ] + } + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet1", + "logicalId": "Table1", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 8, + "startLine": 12, "startColumn": 7, - "endLine": 8, - "endColumn": 12, + "endLine": 12, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'Vpc' (type AWS::EC2::VPC::Id)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet1", + "logicalId": "Table1", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 9, + "startLine": 16, "startColumn": 7, - "endLine": 9, + "endLine": 16, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Ipv4NetmaskLength' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet1", + "logicalId": "Table2", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Ipv4NetmaskLength", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 10, + "startLine": 31, "startColumn": 7, - "endLine": 10, - "endColumn": 24, + "endLine": 31, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -7073,132 +6973,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet2", + "logicalId": "Table2", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 14, + "startLine": 35, "startColumn": 7, - "endLine": 14, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'Vpc' (type AWS::EC2::VPC::Id)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 18, - "startColumn": 7, - "endLine": 18, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'Vpc' (type AWS::EC2::VPC::Id)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Ipv4IpamPoolId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.Ipv4IpamPoolId", - "category": "Best Practice", - "startLine": 19, - "startColumn": 7, - "endLine": 19, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet4", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'Vpc' (type AWS::EC2::VPC::Id)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet4", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 24, - "startColumn": 7, - "endLine": 24, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Ipv6CidrBlock' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet4", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.Ipv6CidrBlock", - "category": "Best Practice", - "startLine": 25, - "startColumn": 7, - "endLine": 25, - "endColumn": 20, + "endLine": 35, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -7208,41 +6995,18 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet5", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 29, - "startColumn": 7, - "endLine": 29, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'Vpc' (type AWS::EC2::VPC::Id)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet5", + "logicalId": "Table3", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 30, + "startLine": 50, "startColumn": 7, - "endLine": 30, + "endLine": 50, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -7253,103 +7017,61 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Ipv4IpamPoolId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet5", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.Ipv4IpamPoolId", - "category": "Best Practice", - "startLine": 31, - "startColumn": 7, - "endLine": 31, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Ipv4NetmaskLength' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet5", + "logicalId": "Table3", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Ipv4NetmaskLength", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 32, + "startLine": 59, "startColumn": 7, - "endLine": 32, - "endColumn": 24, + "endLine": 59, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Subnet1' of type 'AWS::EC2::Subnet' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Subnet2' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'KMS' of type 'AWS::KMS::Key' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Subnet2", + "logicalId": "KMS", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::KMS::Key" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 13, - "startColumn": 5, - "endLine": 13, - "endColumn": 15, + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 6, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Subnet3' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'Table1' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Subnet3", + "logicalId": "Table1", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, + "startLine": 11, "startColumn": 5, - "endLine": 17, + "endLine": 11, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -7357,19 +7079,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Subnet4' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'Table2' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Subnet4", + "logicalId": "Table2", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 22, + "startLine": 30, "startColumn": 5, - "endLine": 22, + "endLine": 30, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -7377,35 +7099,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Subnet5' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'Table3' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Subnet5", + "logicalId": "Table3", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 28, + "startLine": 49, "startColumn": 5, - "endLine": 28, + "endLine": 49, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "integration/aws-lambda-function.yaml": { - "filePath": "integration/aws-lambda-function.yaml", + "integration/aws-ec2-instance.yaml": { + "filePath": "integration/aws-ec2-instance.yaml", "status": "OK", "metadata": { "resourcesScanned": 2, "counts": { - "fatal": 0, + "fatal": 4, "errors": 0, "warnings": 0, - "informational": 2, + "informational": 6, "debug": 0 }, "suppressed": 0, @@ -7414,57 +7136,230 @@ }, "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "F3020", + "severity": "FATAL", + "message": "'AssociateCarrierIpAddress' should not be included with 'NetworkInterfaceId'", + "source": "SCHEMA", + "entity": { + "logicalId": "Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.NetworkInterfaces.0.AssociateCarrierIpAddress", + "category": "Schema", + "startLine": 14, + "startColumn": 11, + "endLine": 14, + "endColumn": 36, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Mutually exclusive properties", + "phase": "SCHEMA", + "context": { + "property": "AssociateCarrierIpAddress" + } + }, + { + "ruleId": "F3020", + "severity": "FATAL", + "message": "'AssociatePublicIpAddress' should not be included with 'NetworkInterfaceId'", + "source": "SCHEMA", + "entity": { + "logicalId": "Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.NetworkInterfaces.0.AssociatePublicIpAddress", + "category": "Schema", + "startLine": 15, + "startColumn": 11, + "endLine": 15, + "endColumn": 35, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Mutually exclusive properties", + "phase": "SCHEMA", + "context": { + "property": "AssociatePublicIpAddress" + } + }, + { + "ruleId": "F3020", + "severity": "FATAL", + "message": "'NetworkInterfaceId' should not be included with 'AssociateCarrierIpAddress'", + "source": "SCHEMA", + "entity": { + "logicalId": "Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.NetworkInterfaces.0.NetworkInterfaceId", + "category": "Schema", + "startLine": 17, + "startColumn": 11, + "endLine": 17, + "endColumn": 29, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Mutually exclusive properties", + "phase": "SCHEMA", + "context": { + "property": "NetworkInterfaceId" + } + }, + { + "ruleId": "F3020", + "severity": "FATAL", + "message": "'NetworkInterfaceId' should not be included with 'AssociatePublicIpAddress'", + "source": "SCHEMA", + "entity": { + "logicalId": "Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.NetworkInterfaces.0.NetworkInterfaceId", + "category": "Schema", + "startLine": 17, + "startColumn": 11, + "endLine": 17, + "endColumn": 29, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Mutually exclusive properties", + "phase": "SCHEMA", + "context": { + "property": "NetworkInterfaceId" + } + }, + { + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Function' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Function", + "logicalId": "NetworkInterface", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::NetworkInterface" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 4, - "startColumn": 5, - "endLine": 4, + "startLine": 7, + "startColumn": 7, + "endLine": 7, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/networkinterface", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.NetworkInterfaces", + "category": "Best Practice", + "startLine": 13, + "startColumn": 7, + "endLine": 13, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Role' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'NetworkInterface' of type 'AWS::EC2::NetworkInterface' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Role", + "logicalId": "NetworkInterface", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::NetworkInterface" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, + "startLine": 4, "startColumn": 5, - "endLine": 10, + "endLine": 4, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "integration/cfn-gather.yaml": { - "filePath": "integration/cfn-gather.yaml", + "integration/aws-ec2-launchtemplate.yaml": { + "filePath": "integration/aws-ec2-launchtemplate.yaml", "status": "OK", "metadata": { - "resourcesScanned": 17, + "resourcesScanned": 1, "counts": { - "fatal": 0, - "errors": 7, - "warnings": 1, - "informational": 55, + "fatal": 5, + "errors": 0, + "warnings": 0, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -7473,483 +7368,495 @@ }, "diagnostics": [ { - "ruleId": "E3052", - "severity": "ERROR", - "message": "NetworkConfiguration required when TaskDefinition NetworkMode is 'awsvpc'", - "source": "CFN_LINT", + "ruleId": "F1020", + "severity": "FATAL", + "message": "'NetworkInterface' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'LaunchTemplate']", + "source": "SCHEMA", "entity": { - "logicalId": "ServiceNoNetConfig", + "logicalId": "LaunchTemplate", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::LaunchTemplate" }, - "category": "Resource", - "startLine": 32, - "startColumn": 3, - "endLine": 32, - "endColumn": 21, - "ruleDescription": "Validate ECS service requires NetworkConfiguration", - "phase": "LINT" + "propertyPath": "Properties.LaunchTemplateData.NetworkInterfaces.0.NetworkInterfaceId", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 13, + "startColumn": 13, + "endLine": 13, + "endColumn": 31, + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" }, { - "ruleId": "E3054", - "severity": "ERROR", - "message": "['EC2'] does not contain items matching 'FARGATE'", - "source": "CFN_LINT", + "ruleId": "F3020", + "severity": "FATAL", + "message": "'AssociateCarrierIpAddress' should not be included with 'NetworkInterfaceId'", + "source": "SCHEMA", "entity": { - "logicalId": "TaskDef", + "logicalId": "LaunchTemplate", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::LaunchTemplate" }, - "propertyPath": "Properties.RequiresCompatibilities", - "suggestedFix": "Add 'FARGATE' to RequiresCompatibilities", - "category": "Resource", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 30, - "ruleDescription": "Validate ECS service using Fargate uses TaskDefinition that allows Fargate", - "phase": "LINT" + "propertyPath": "Properties.LaunchTemplateData.NetworkInterfaces.0.AssociateCarrierIpAddress", + "category": "Schema", + "startLine": 10, + "startColumn": 13, + "endLine": 10, + "endColumn": 38, + "ruleDescription": "Mutually exclusive properties", + "phase": "SCHEMA", + "context": { + "property": "AssociateCarrierIpAddress" + } }, { - "ruleId": "E3502", - "severity": "ERROR", - "message": "Source queue type 'FIFO' does not match destination queue type 'standard'", - "source": "CFN_LINT", + "ruleId": "F3020", + "severity": "FATAL", + "message": "'AssociatePublicIpAddress' should not be included with 'NetworkInterfaceId'", + "source": "SCHEMA", "entity": { - "logicalId": "FifoQueue", + "logicalId": "LaunchTemplate", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::LaunchTemplate" }, - "propertyPath": "Properties.RedrivePolicy", - "category": "Resource", - "startLine": 42, - "startColumn": 7, - "endLine": 42, - "endColumn": 20, - "ruleDescription": "Validate SQS DLQ queues are the same type", - "phase": "LINT" + "propertyPath": "Properties.LaunchTemplateData.NetworkInterfaces.0.AssociatePublicIpAddress", + "category": "Schema", + "startLine": 11, + "startColumn": 13, + "endLine": 11, + "endColumn": 37, + "ruleDescription": "Mutually exclusive properties", + "phase": "SCHEMA", + "context": { + "property": "AssociatePublicIpAddress" + } }, { - "ruleId": "E3698", - "severity": "ERROR", - "message": "{'Ref': 'RestApi2'} was expected", - "source": "CFN_LINT", + "ruleId": "F3020", + "severity": "FATAL", + "message": "'NetworkInterfaceId' should not be included with 'AssociateCarrierIpAddress'", + "source": "SCHEMA", "entity": { - "logicalId": "Deployment", + "logicalId": "LaunchTemplate", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::EC2::LaunchTemplate" }, - "propertyPath": "Properties.RestApiId", - "category": "Resource", - "startLine": 78, - "startColumn": 7, - "endLine": 78, - "endColumn": 16, - "ruleDescription": "API Gateway Stage and Deployment must use the same RestApi", - "phase": "LINT" + "propertyPath": "Properties.LaunchTemplateData.NetworkInterfaces.0.NetworkInterfaceId", + "category": "Schema", + "startLine": 13, + "startColumn": 13, + "endLine": 13, + "endColumn": 31, + "ruleDescription": "Mutually exclusive properties", + "phase": "SCHEMA", + "context": { + "property": "NetworkInterfaceId" + } }, { - "ruleId": "E3705", - "severity": "ERROR", - "message": "BatchSize 15 exceeds maximum of 10 for SQS FIFO queue event source", - "source": "CFN_LINT", + "ruleId": "F3020", + "severity": "FATAL", + "message": "'NetworkInterfaceId' should not be included with 'AssociatePublicIpAddress'", + "source": "SCHEMA", "entity": { - "logicalId": "FifoMapping", + "logicalId": "LaunchTemplate", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::EC2::LaunchTemplate" }, - "propertyPath": "Properties.BatchSize", - "category": "Resource", - "startLine": 107, - "startColumn": 7, - "endLine": 107, - "endColumn": 16, - "ruleDescription": "Validate SQS FIFO queue EventSourceMapping BatchSize is at most 10", - "phase": "LINT" + "propertyPath": "Properties.LaunchTemplateData.NetworkInterfaces.0.NetworkInterfaceId", + "category": "Schema", + "startLine": 13, + "startColumn": 13, + "endLine": 13, + "endColumn": 31, + "ruleDescription": "Mutually exclusive properties", + "phase": "SCHEMA", + "context": { + "property": "NetworkInterfaceId" + } }, { - "ruleId": "E3707", - "severity": "ERROR", - "message": "DBInstance Engine 'aurora-postgresql' does not match DBCluster Engine 'aurora-mysql'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LaunchTemplateName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BadEngineInstance", + "logicalId": "LaunchTemplate", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::LaunchTemplate" }, - "propertyPath": "Properties.Engine", - "category": "Resource", - "startLine": 120, + "propertyPath": "Properties.LaunchTemplateName", + "category": "Best Practice", + "startLine": 14, "startColumn": 7, - "endLine": 120, - "endColumn": 13, - "relatedResources": [ - { - "resource": { - "id": "AuroraCluster", - "resourceType": "AWS::RDS::DBCluster" - }, - "location": { - "startLine": 112, - "startColumn": 7, - "endLine": 112, - "endColumn": 13 - }, - "message": "cluster engine" - } - ], - "ruleDescription": "Validate RDS DBInstance Engine matches DBCluster Engine", - "phase": "LINT" + "endLine": 14, + "endColumn": 25, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + } + ] + }, + "integration/aws-ec2-networkinterface.yaml": { + "filePath": "integration/aws-ec2-networkinterface.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 2, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "E3708", - "severity": "ERROR", - "message": "'COGNITO_USER_POOLS' is not one of ['TOKEN', 'REQUEST']", - "source": "CFN_LINT", + "ruleId": "F3020", + "severity": "FATAL", + "message": "'Ipv6Addresses' should not be included with 'Ipv6AddressCount'", + "source": "SCHEMA", "entity": { - "logicalId": "CognitoAuthorizer", + "logicalId": "NetworkInterface", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Authorizer" + "resourceType": "AWS::EC2::NetworkInterface" }, - "propertyPath": "Properties.Type", - "category": "Resource", - "startLine": 58, + "propertyPath": "Properties.Ipv6Addresses", + "category": "Schema", + "startLine": 15, "startColumn": 7, - "endLine": 58, - "endColumn": 11, - "ruleDescription": "API Gateway Method AuthorizationType must match Authorizer Type", - "phase": "LINT" + "endLine": 15, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/networkinterface", + "ruleDescription": "Mutually exclusive properties", + "phase": "SCHEMA", + "context": { + "property": "Ipv6Addresses" + } }, { - "ruleId": "W2501", - "severity": "WARN", - "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", - "source": "CFN_LINT", + "ruleId": "F3020", + "severity": "FATAL", + "message": "'Ipv6AddressCount' should not be included with 'Ipv6Addresses'", + "source": "SCHEMA", "entity": { - "logicalId": "AuroraCluster", + "logicalId": "NetworkInterface", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::NetworkInterface" }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 114, + "propertyPath": "Properties.Ipv6AddressCount", + "category": "Schema", + "startLine": 17, "startColumn": 7, - "endLine": 114, - "endColumn": 25, - "ruleDescription": "Check if Password Properties are correctly configured", - "phase": "LINT" + "endLine": 17, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/networkinterface", + "ruleDescription": "Mutually exclusive properties", + "phase": "SCHEMA", + "context": { + "property": "Ipv6AddressCount" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FifoQueue", + "logicalId": "NetworkInterface", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::NetworkInterface" }, + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 37, - "startColumn": 3, - "endLine": 37, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/networkinterface", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'SubnetId' (type AWS::EC2::Subnet::Id)" + } }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'NetworkInterface' of type 'AWS::EC2::NetworkInterface' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "FifoQueue", + "logicalId": "NetworkInterface", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::NetworkInterface" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 37, - "startColumn": 3, - "endLine": 37, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "integration/aws-ec2-subnet.yaml": { + "filePath": "integration/aws-ec2-subnet.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 5, + "errors": 0, + "warnings": 0, + "informational": 18, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "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", + "ruleId": "F3020", + "severity": "FATAL", + "message": "'CidrBlock' should not be included with 'Ipv4IpamPoolId'", + "source": "SCHEMA", "entity": { - "logicalId": "StandardDLQ", + "logicalId": "Subnet5", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::Subnet" }, - "category": "Best Practice", - "startLine": 45, - "startColumn": 3, - "endLine": 45, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Properties.CidrBlock", + "category": "Schema", + "startLine": 30, + "startColumn": 7, + "endLine": 30, + "endColumn": 16, + "ruleDescription": "Mutually exclusive properties", + "phase": "SCHEMA", + "context": { + "property": "CidrBlock" + } }, { - "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", + "ruleId": "F3020", + "severity": "FATAL", + "message": "'Ipv4IpamPoolId' should not be included with 'CidrBlock'", + "source": "SCHEMA", "entity": { - "logicalId": "StandardDLQ", + "logicalId": "Subnet5", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::Subnet" }, - "category": "Best Practice", - "startLine": 45, - "startColumn": 3, - "endLine": 45, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Properties.Ipv4IpamPoolId", + "category": "Schema", + "startLine": 31, + "startColumn": 7, + "endLine": 31, + "endColumn": 21, + "ruleDescription": "Mutually exclusive properties", + "phase": "SCHEMA", + "context": { + "property": "Ipv4IpamPoolId" + } }, { - "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", + "ruleId": "F3021", + "severity": "FATAL", + "message": "'Ipv4IpamPoolId' is a dependency of 'Ipv4NetmaskLength'", + "source": "SCHEMA", "entity": { - "logicalId": "SqsFifoQueue", + "logicalId": "Subnet1", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::Subnet" }, - "category": "Best Practice", - "startLine": 86, - "startColumn": 3, - "endLine": 86, + "propertyPath": "Properties", + "suggestedFix": "Add 'Ipv4IpamPoolId' when 'Ipv4NetmaskLength' is specified", + "category": "Schema", + "startLine": 7, + "startColumn": 5, + "endLine": 7, "endColumn": 15, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "ruleDescription": "Dependent property required", + "phase": "SCHEMA" }, { - "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", + "ruleId": "F3021", + "severity": "FATAL", + "message": "'Ipv4NetmaskLength' is a dependency of 'Ipv4IpamPoolId'", + "source": "SCHEMA", "entity": { - "logicalId": "SqsFifoQueue", + "logicalId": "Subnet3", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::Subnet" }, - "category": "Best Practice", - "startLine": 86, - "startColumn": 3, - "endLine": 86, + "propertyPath": "Properties", + "suggestedFix": "Add 'Ipv4NetmaskLength' when 'Ipv4IpamPoolId' is specified", + "category": "Schema", + "startLine": 17, + "startColumn": 5, + "endLine": 17, "endColumn": 15, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "ruleDescription": "Dependent property required", + "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", + "ruleId": "F3058", + "severity": "FATAL", + "message": "One of ['CidrBlock', 'Ipv4IpamPoolId', 'Ipv6IpamPoolId', 'Ipv6CidrBlock'] is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "AuroraCluster", + "logicalId": "Subnet2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::Subnet" }, - "category": "Best Practice", - "startLine": 109, - "startColumn": 3, - "endLine": 109, - "endColumn": 16, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Properties", + "category": "Schema", + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 15, + "ruleDescription": "One of properties required (requiredOr)", + "phase": "SCHEMA" }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AuroraCluster", + "logicalId": "Subnet1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 109, - "startColumn": 3, - "endLine": 109, - "endColumn": 16, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'Vpc' (type AWS::EC2::VPC::Id)" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BadEngineInstance", + "logicalId": "Subnet1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 115, - "startColumn": 3, - "endLine": 115, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Ipv4NetmaskLength' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BadEngineInstance", + "logicalId": "Subnet1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.Ipv4NetmaskLength", "category": "Best Practice", - "startLine": 115, - "startColumn": 3, - "endLine": 115, - "endColumn": 20, - "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": "FifoQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 39, - "startColumn": 5, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "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": "StandardDLQ", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 47, - "startColumn": 5, - "endLine": 47, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "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": "SqsFifoQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 88, - "startColumn": 5, - "endLine": 88, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" - }, - { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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": "AuroraCluster", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 111, - "startColumn": 5, - "endLine": 111, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 24, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3042", + "ruleId": "I9001", "severity": "INFO", - "message": "ARN in Resource CognitoAuthorizer contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", - "source": "CFN_LINT", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CognitoAuthorizer", + "logicalId": "Subnet2", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Authorizer" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ProviderARNs.0.Fn::Sub", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 61, - "startColumn": 16, - "endLine": 61, - "endColumn": 23, - "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", - "phase": "LINT" + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'Vpc' (type AWS::EC2::VPC::Id)" + } }, { - "ruleId": "I3042", + "ruleId": "I9001", "severity": "INFO", - "message": "ARN in Resource FifoProcessor contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", - "source": "CFN_LINT", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FifoProcessor", + "logicalId": "Subnet3", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Role.Fn::Sub", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 97, + "startLine": 18, "startColumn": 7, - "endLine": 97, - "endColumn": 14, - "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", - "phase": "LINT" + "endLine": 18, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'Vpc' (type AWS::EC2::VPC::Id)" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'Ipv4IpamPoolId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "Subnet3", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Ipv4IpamPoolId", "category": "Best Practice", - "startLine": 7, + "startLine": 19, "startColumn": 7, - "endLine": 7, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 19, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -7959,43 +7866,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "Subnet4", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 8, + "startLine": 23, "startColumn": 7, - "endLine": 8, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 23, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter 'Vpc' (type AWS::EC2::VPC::Id)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "Subnet4", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 10, + "startLine": 24, "startColumn": 7, - "endLine": 10, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 24, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -8005,19 +7911,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Ipv6CidrBlock' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateService", + "logicalId": "Subnet4", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.LaunchType", + "propertyPath": "Properties.Ipv6CidrBlock", "category": "Best Practice", - "startLine": 17, + "startLine": 25, "startColumn": 7, - "endLine": 17, - "endColumn": 17, + "endLine": 25, + "endColumn": 20, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -8027,43 +7933,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AwsvpcTaskDef", + "logicalId": "Subnet5", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 27, + "startLine": 29, "startColumn": 7, - "endLine": 27, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 29, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter 'Vpc' (type AWS::EC2::VPC::Id)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AwsvpcTaskDef", + "logicalId": "Subnet5", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 28, + "startLine": 30, "startColumn": 7, - "endLine": 28, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 30, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -8073,20 +7978,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", + "message": "Property 'Ipv4IpamPoolId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FifoQueue", + "logicalId": "Subnet5", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.FifoQueue", + "propertyPath": "Properties.Ipv4IpamPoolId", "category": "Best Practice", - "startLine": 40, + "startLine": 31, "startColumn": 7, - "endLine": 40, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "endLine": 31, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -8096,20 +8000,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "message": "Property 'Ipv4NetmaskLength' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FifoQueue", + "logicalId": "Subnet5", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.QueueName", + "propertyPath": "Properties.Ipv4NetmaskLength", "category": "Best Practice", - "startLine": 41, + "startLine": 32, "startColumn": 7, - "endLine": 41, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "endLine": 32, + "endColumn": 24, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -8117,722 +8020,707 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", + "message": "Resource 'Subnet1' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StandardDLQ", + "logicalId": "Subnet1", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.FifoQueue", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 48, - "startColumn": 7, - "endLine": 48, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Subnet2' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CognitoAuthorizer", + "logicalId": "Subnet2", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Authorizer" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 57, - "startColumn": 7, - "endLine": 57, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'RestApi'" - } + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Subnet3' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MethodBadAuth", + "logicalId": "Subnet3", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 65, - "startColumn": 7, - "endLine": 65, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'RestApi'" - } + "startLine": 17, + "startColumn": 5, + "endLine": 17, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Subnet4' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MethodBadAuth", + "logicalId": "Subnet4", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 66, - "startColumn": 7, - "endLine": 66, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt RestApi.RootResourceId" - } + "startLine": 22, + "startColumn": 5, + "endLine": 22, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Resource 'Subnet5' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MethodBadAuth", + "logicalId": "Subnet5", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 67, - "startColumn": 7, - "endLine": 67, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 28, + "startColumn": 5, + "endLine": 28, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "integration/aws-lambda-function.yaml": { + "filePath": "integration/aws-lambda-function.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Function' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Deployment", + "logicalId": "Function", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 78, - "startColumn": 7, - "endLine": 78, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'RestApi'" - } + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Role' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StageBadApi", + "logicalId": "Role", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 82, - "startColumn": 7, - "endLine": 82, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'RestApi2'" - } + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "integration/cfn-gather.yaml": { + "filePath": "integration/cfn-gather.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 17, + "counts": { + "fatal": 0, + "errors": 7, + "warnings": 1, + "informational": 55, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3052", + "severity": "ERROR", + "message": "NetworkConfiguration required when TaskDefinition NetworkMode is 'awsvpc'", + "source": "CFN_LINT", "entity": { - "logicalId": "StageBadApi", + "logicalId": "ServiceNoNetConfig", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.StageName", - "category": "Best Practice", - "startLine": 84, - "startColumn": 7, - "endLine": 84, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "category": "Resource", + "startLine": 32, + "startColumn": 3, + "endLine": 32, + "endColumn": 21, + "ruleDescription": "Validate ECS service requires NetworkConfiguration", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3054", + "severity": "ERROR", + "message": "['EC2'] does not contain items matching 'FARGATE'", + "source": "CFN_LINT", "entity": { - "logicalId": "SqsFifoQueue", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.FifoQueue", - "category": "Best Practice", - "startLine": 89, + "propertyPath": "Properties.RequiresCompatibilities", + "suggestedFix": "Add 'FARGATE' to RequiresCompatibilities", + "category": "Resource", + "startLine": 8, "startColumn": 7, - "endLine": 89, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 8, + "endColumn": 30, + "ruleDescription": "Validate ECS service using Fargate uses TaskDefinition that allows Fargate", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3502", + "severity": "ERROR", + "message": "Source queue type 'FIFO' does not match destination queue type 'standard'", + "source": "CFN_LINT", "entity": { - "logicalId": "SqsFifoQueue", + "logicalId": "FifoQueue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.QueueName", - "category": "Best Practice", - "startLine": 90, + "propertyPath": "Properties.RedrivePolicy", + "category": "Resource", + "startLine": 42, "startColumn": 7, - "endLine": 90, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 42, + "endColumn": 20, + "ruleDescription": "Validate SQS DLQ queues are the same type", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3698", + "severity": "ERROR", + "message": "{'Ref': 'RestApi2'} was expected", + "source": "CFN_LINT", "entity": { - "logicalId": "FifoProcessor", + "logicalId": "Deployment", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 94, + "propertyPath": "Properties.RestApiId", + "category": "Resource", + "startLine": 78, "startColumn": 7, - "endLine": 94, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 78, + "endColumn": 16, + "ruleDescription": "API Gateway Stage and Deployment must use the same RestApi", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3705", + "severity": "ERROR", + "message": "BatchSize 15 exceeds maximum of 10 for SQS FIFO queue event source", + "source": "CFN_LINT", "entity": { "logicalId": "FifoMapping", "entityType": "Resource", "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.EventSourceArn", - "category": "Best Practice", - "startLine": 105, + "propertyPath": "Properties.BatchSize", + "category": "Resource", + "startLine": 107, "startColumn": 7, - "endLine": 105, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt SqsFifoQueue.Arn" - } + "endLine": 107, + "endColumn": 16, + "ruleDescription": "Validate SQS FIFO queue EventSourceMapping BatchSize is at most 10", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "E3707", + "severity": "ERROR", + "message": "DBInstance Engine 'aurora-postgresql' does not match DBCluster Engine 'aurora-mysql'", + "source": "CFN_LINT", "entity": { - "logicalId": "AuroraCluster", + "logicalId": "BadEngineInstance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 112, + "category": "Resource", + "startLine": 120, "startColumn": 7, - "endLine": 112, + "endLine": 120, "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "relatedResources": [ + { + "resource": { + "id": "AuroraCluster", + "resourceType": "AWS::RDS::DBCluster" + }, + "location": { + "startLine": 112, + "startColumn": 7, + "endLine": 112, + "endColumn": 13 + }, + "message": "cluster engine" + } + ], + "ruleDescription": "Validate RDS DBInstance Engine matches DBCluster Engine", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "E3708", + "severity": "ERROR", + "message": "'COGNITO_USER_POOLS' is not one of ['TOKEN', 'REQUEST']", + "source": "CFN_LINT", + "entity": { + "logicalId": "CognitoAuthorizer", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Authorizer" + }, + "propertyPath": "Properties.Type", + "category": "Resource", + "startLine": 58, + "startColumn": 7, + "endLine": 58, + "endColumn": 11, + "ruleDescription": "API Gateway Method AuthorizationType must match Authorizer Type", + "phase": "LINT" + }, + { + "ruleId": "W2501", + "severity": "WARN", + "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", + "source": "CFN_LINT", "entity": { "logicalId": "AuroraCluster", "entityType": "Resource", "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.MasterUsername", - "category": "Best Practice", - "startLine": 113, + "propertyPath": "Properties.MasterUserPassword", + "category": "Security", + "startLine": 114, "startColumn": 7, - "endLine": 113, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 114, + "endColumn": 25, + "ruleDescription": "Check if Password Properties are correctly configured", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "BadEngineInstance", + "logicalId": "FifoQueue", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.DBClusterIdentifier", "category": "Best Practice", - "startLine": 118, - "startColumn": 7, - "endLine": 118, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'AuroraCluster'" - } + "startLine": 37, + "startColumn": 3, + "endLine": 37, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "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": "BadEngineInstance", + "logicalId": "FifoQueue", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 120, - "startColumn": 7, - "endLine": 120, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 37, + "startColumn": 3, + "endLine": 37, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9003", + "ruleId": "I3011", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", + "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": "StandardDLQ", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "startLine": 45, + "startColumn": 3, + "endLine": 45, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", + "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": "TaskDef", + "logicalId": "StandardDLQ", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 45, + "startColumn": 3, + "endLine": 45, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'FargateService' of type 'AWS::ECS::Service' supports Tags but none are configured", - "source": "ENGINE", + "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": "FargateService", + "logicalId": "SqsFifoQueue", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 16, - "startColumn": 5, - "endLine": 16, + "startLine": 86, + "startColumn": 3, + "endLine": 86, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'AwsvpcTaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", + "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": "AwsvpcTaskDef", + "logicalId": "SqsFifoQueue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 26, - "startColumn": 5, - "endLine": 26, + "startLine": 86, + "startColumn": 3, + "endLine": 86, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'ServiceNoNetConfig' of type 'AWS::ECS::Service' supports Tags but none are configured", - "source": "ENGINE", + "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": "ServiceNoNetConfig", + "logicalId": "AuroraCluster", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 34, - "startColumn": 5, - "endLine": 34, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 109, + "startColumn": 3, + "endLine": 109, + "endColumn": 16, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'FifoQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", - "source": "ENGINE", + "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": "FifoQueue", + "logicalId": "AuroraCluster", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 39, - "startColumn": 5, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 109, + "startColumn": 3, + "endLine": 109, + "endColumn": 16, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'StandardDLQ' of type 'AWS::SQS::Queue' supports Tags but none are configured", - "source": "ENGINE", + "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": "StandardDLQ", + "logicalId": "BadEngineInstance", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 47, - "startColumn": 5, - "endLine": 47, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 115, + "startColumn": 3, + "endLine": 115, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'RestApi' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", - "source": "ENGINE", + "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": "RestApi", + "logicalId": "BadEngineInstance", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 52, - "startColumn": 5, - "endLine": 52, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 115, + "startColumn": 3, + "endLine": 115, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'RestApi2' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", - "source": "ENGINE", + "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": "RestApi2", + "logicalId": "FifoQueue", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 73, + "startLine": 39, "startColumn": 5, - "endLine": 73, + "endLine": 39, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'StageBadApi' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", - "source": "ENGINE", + "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": "StageBadApi", + "logicalId": "StandardDLQ", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 81, + "startLine": 47, "startColumn": 5, - "endLine": 81, + "endLine": 47, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'SqsFifoQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", - "source": "ENGINE", + "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": "SqsFifoQueue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", "startLine": 88, "startColumn": 5, "endLine": 88, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'FifoProcessor' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "FifoProcessor", + "logicalId": "AuroraCluster", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 93, + "startLine": 111, "startColumn": 5, - "endLine": 93, + "endLine": 111, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3042", "severity": "INFO", - "message": "Resource 'FifoMapping' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", - "source": "ENGINE", + "message": "ARN in Resource CognitoAuthorizer contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", + "source": "CFN_LINT", "entity": { - "logicalId": "FifoMapping", + "logicalId": "CognitoAuthorizer", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::ApiGateway::Authorizer" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ProviderARNs.0.Fn::Sub", "category": "Best Practice", - "startLine": 104, - "startColumn": 5, - "endLine": 104, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 61, + "startColumn": 16, + "endLine": 61, + "endColumn": 23, + "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3042", "severity": "INFO", - "message": "Resource 'AuroraCluster' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", - "source": "ENGINE", + "message": "ARN in Resource FifoProcessor contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", + "source": "CFN_LINT", "entity": { - "logicalId": "AuroraCluster", + "logicalId": "FifoProcessor", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Role.Fn::Sub", "category": "Best Practice", - "startLine": 111, - "startColumn": 5, - "endLine": 111, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 97, + "startColumn": 7, + "endLine": 97, + "endColumn": 14, + "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BadEngineInstance' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BadEngineInstance", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 117, - "startColumn": 5, - "endLine": 117, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "integration/custom-resources.yaml": { - "filePath": "integration/custom-resources.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 2, - "debug": 0 + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E9004", - "severity": "ERROR", - "message": "'ArnA' is not one of ['Arn', 'KeyId']", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CustomResource", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::CustomResource" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.KmsKeyId", - "suggestedFix": "Check the resource type documentation for valid GetAtt attributes", - "category": "Intrinsic Function", - "startLine": 12, + "propertyPath": "Properties.RequiresCompatibilities", + "category": "Best Practice", + "startLine": 8, "startColumn": 7, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "GetAtt attribute must exist on target resource type", - "phase": "LINT" + "endLine": 8, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CustomResource", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::CustomResource" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ServiceToken", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 11, + "startLine": 10, "startColumn": 7, - "endLine": 11, - "endColumn": 19, + "endLine": 10, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -8840,60 +8728,44 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'KmsKey' of type 'AWS::KMS::Key' supports Tags but none are configured", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "KmsKey", + "logicalId": "FargateService", "entityType": "Resource", - "resourceType": "AWS::KMS::Key" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "integration/deployment-file-template.yaml": { - "filePath": "integration/deployment-file-template.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 13, - "debug": 0 + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Vpc", + "logicalId": "AwsvpcTaskDef", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 24, + "startLine": 27, "startColumn": 7, - "endLine": 24, - "endColumn": 16, + "endLine": 27, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -8903,19 +8775,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet1", + "logicalId": "AwsvpcTaskDef", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", "startLine": 28, "startColumn": 7, "endLine": 28, - "endColumn": 23, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -8925,19 +8798,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet1", + "logicalId": "FifoQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.FifoQueue", "category": "Best Practice", - "startLine": 29, + "startLine": 40, "startColumn": 7, - "endLine": 29, + "endLine": 40, "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -8947,314 +8821,255 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet1", + "logicalId": "FifoQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.QueueName", "category": "Best Practice", - "startLine": 30, + "startLine": 41, "startColumn": 7, - "endLine": 30, - "endColumn": 12, + "endLine": 41, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Affinity' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyInstance", + "logicalId": "StandardDLQ", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Affinity", + "propertyPath": "Properties.FifoQueue", "category": "Best Practice", - "startLine": 34, + "startLine": 48, "startColumn": 7, - "endLine": 34, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 48, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyInstance", + "logicalId": "CognitoAuthorizer", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ApiGateway::Authorizer" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 35, + "startLine": 57, "startColumn": 7, - "endLine": 35, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 57, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "parameter 'ImageId' (type AWS::EC2::Image::Id)" + "resolutionSource": "Ref to 'RestApi'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyInstance", + "logicalId": "MethodBadAuth", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 36, + "startLine": 65, "startColumn": 7, - "endLine": 36, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 65, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'RestApi'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyInstance", + "logicalId": "MethodBadAuth", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 37, + "startLine": 66, "startColumn": 7, - "endLine": 37, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 66, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt Subnet1.SubnetId" + "resolutionSource": "GetAtt RestApi.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Tenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyInstance", + "logicalId": "MethodBadAuth", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tenancy", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 38, + "startLine": 67, "startColumn": 7, - "endLine": 38, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 67, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "parameter with AllowedValues" + "lifecycle": "create-only" } }, { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Vpc", + "logicalId": "Deployment", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 23, - "startColumn": 5, - "endLine": 23, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 78, + "startColumn": 7, + "endLine": 78, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'RestApi'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Subnet1' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet1", + "logicalId": "StageBadApi", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 27, - "startColumn": 5, - "endLine": 27, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 82, + "startColumn": 7, + "endLine": 82, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'RestApi2'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyInstance", + "logicalId": "StageBadApi", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 33, - "startColumn": 5, - "endLine": 33, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "integration/dynamic-references.yaml": { - "filePath": "integration/dynamic-references.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 1, - "informational": 11, - "debug": 0 - }, - "suppressed": 1, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F3031", - "severity": "FATAL", - "message": "'{{:ssm:/SQS_Queue/SQS_ARN}}' does not match pattern 'arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:((eusc-)?[a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)'", - "source": "SCHEMA", - "entity": { - "logicalId": "SESEventSourceMappingBadDynamicReference", - "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" - }, - "propertyPath": "Properties.EventSourceArn", - "category": "Schema", - "startLine": 16, + "startLine": 84, "startColumn": 7, - "endLine": 16, - "endColumn": 21, - "ruleDescription": "Value does not match pattern", + "endLine": 84, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "{{:ssm:/SQS_Queue/SQS_ARN}}", - "expectedConstraint": "arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:((eusc-)?[a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)" + "lifecycle": "create-only" } }, - { - "ruleId": "W1053", - "severity": "WARN", - "message": "'{{ resolve:ssm:/SQS_Queue/SQS_ARN }}' has spaces and will not be resolved as a dynamic reference. Remove spaces from '{{resolve:...}}'", - "source": "CFN_LINT", - "entity": { - "logicalId": "SESEventSourceMappingSpaces", - "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" - }, - "propertyPath": "Properties.EventSourceArn", - "suggestedFix": "Remove spaces from the dynamic reference", - "category": "Best Practice", - "startLine": 37, - "startColumn": 7, - "endLine": 37, - "endColumn": 21, - "ruleDescription": "Dynamic references should not contain spaces", - "phase": "LINT" - }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SESEventSourceMapping", + "logicalId": "SqsFifoQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.EventSourceArn", + "propertyPath": "Properties.FifoQueue", "category": "Best Practice", - "startLine": 9, + "startLine": 89, "startColumn": 7, - "endLine": 9, - "endColumn": 21, + "endLine": 89, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (dynamic reference: {{resolve:ssm:/SQS_Queue/SQS_ARN}})" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SESEventSourceMappingBadDynamicReference", + "logicalId": "SqsFifoQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.EventSourceArn", + "propertyPath": "Properties.QueueName", "category": "Best Practice", - "startLine": 16, + "startLine": 90, "startColumn": 7, - "endLine": 16, - "endColumn": 21, + "endLine": 90, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9264,19 +9079,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DeploymentMode' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Broker", + "logicalId": "FifoProcessor", "entityType": "Resource", - "resourceType": "AWS::AmazonMQ::Broker" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.DeploymentMode", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 24, - "startColumn": 9, - "endLine": 24, - "endColumn": 23, + "startLine": 94, + "startColumn": 7, + "endLine": 94, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9286,100 +9101,137 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'EngineType' is create-only; updating it will cause resource replacement", + "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Broker", + "logicalId": "FifoMapping", "entityType": "Resource", - "resourceType": "AWS::AmazonMQ::Broker" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.EngineType", + "propertyPath": "Properties.EventSourceArn", "category": "Best Practice", - "startLine": 25, - "startColumn": 9, - "endLine": 25, - "endColumn": 19, + "startLine": 105, + "startColumn": 7, + "endLine": 105, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt SqsFifoQueue.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BrokerName' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Broker", + "logicalId": "AuroraCluster", "entityType": "Resource", - "resourceType": "AWS::AmazonMQ::Broker" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.BrokerName", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 30, - "startColumn": 9, - "endLine": 30, - "endColumn": 19, + "startLine": 112, + "startColumn": 7, + "endLine": 112, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PubliclyAccessible' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Broker", + "logicalId": "AuroraCluster", "entityType": "Resource", - "resourceType": "AWS::AmazonMQ::Broker" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.PubliclyAccessible", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 31, - "startColumn": 9, - "endLine": 31, - "endColumn": 27, + "startLine": 113, + "startColumn": 7, + "endLine": 113, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SESEventSourceMappingSpaces", + "logicalId": "BadEngineInstance", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.EventSourceArn", + "propertyPath": "Properties.DBClusterIdentifier", "category": "Best Practice", - "startLine": 37, + "startLine": 118, "startColumn": 7, - "endLine": 37, - "endColumn": 21, + "endLine": 118, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'AuroraCluster'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "BadEngineInstance", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 120, + "startColumn": 7, + "endLine": 120, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" } }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SESEventSourceMapping' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", + "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SESEventSourceMapping", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -9394,19 +9246,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SESEventSourceMappingBadDynamicReference' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", + "message": "Resource 'FargateService' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SESEventSourceMappingBadDynamicReference", + "logicalId": "FargateService", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 13, + "startLine": 16, "startColumn": 5, - "endLine": 13, + "endLine": 16, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -9414,19 +9266,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Broker' of type 'AWS::AmazonMQ::Broker' supports Tags but none are configured", + "message": "Resource 'AwsvpcTaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Broker", + "logicalId": "AwsvpcTaskDef", "entityType": "Resource", - "resourceType": "AWS::AmazonMQ::Broker" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 20, + "startLine": 26, "startColumn": 5, - "endLine": 20, + "endLine": 26, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -9434,12 +9286,12 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SESEventSourceMappingSpaces' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", + "message": "Resource 'ServiceNoNetConfig' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SESEventSourceMappingSpaces", + "logicalId": "ServiceNoNetConfig", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -9450,254 +9302,262 @@ "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "integration/formats.yaml": { - "filePath": "integration/formats.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 0, - "errors": 2, - "warnings": 4, - "informational": 13, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E1040", - "severity": "ERROR", - "message": "{'Fn::GetAtt': ['SecurityGroup', 'GroupName']} does not match destination format of 'AWS::EC2::SecurityGroup.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FifoQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Instance1", + "logicalId": "FifoQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.NetworkInterfaces.2.GroupSet.0", - "suggestedFix": "Use the correct GetAtt attribute", - "category": "Intrinsic Function", - "startLine": 44, - "startColumn": 21, - "endLine": 44, - "endColumn": 22, - "ruleDescription": "Check if GetAtt matches destination format", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 39, + "startColumn": 5, + "endLine": 39, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E1150", - "severity": "ERROR", - "message": "'sg-dne' does not match format 'AWS::EC2::SecurityGroup.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'StandardDLQ' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Instance1", + "logicalId": "StandardDLQ", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.NetworkInterfaces.1.GroupSet.3", - "category": "Intrinsic Function", - "startLine": 40, - "startColumn": 13, - "endLine": 40, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate security group format", - "phase": "SCHEMA", - "context": { - "actualValue": "sg-dne" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 47, + "startColumn": 5, + "endLine": 47, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "0 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'RestApi' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Instance1", + "logicalId": "RestApi", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ApiGateway::RestApi" }, - "propertyPath": "Properties.NetworkInterfaces.0.DeviceIndex", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 31, - "startColumn": 11, - "endLine": 31, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "startLine": 52, + "startColumn": 5, + "endLine": 52, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'RestApi2' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Instance1", + "logicalId": "RestApi2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ApiGateway::RestApi" }, - "propertyPath": "Properties.NetworkInterfaces.1.DeviceIndex", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 34, - "startColumn": 11, - "endLine": 34, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 73, + "startColumn": 5, + "endLine": 73, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "2 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'StageBadApi' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Instance1", + "logicalId": "StageBadApi", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.NetworkInterfaces.2.DeviceIndex", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 41, - "startColumn": 11, - "endLine": 41, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 81, + "startColumn": 5, + "endLine": 81, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SqsFifoQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Instance1", + "logicalId": "SqsFifoQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 88, + "startColumn": 5, + "endLine": 88, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'FifoProcessor' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Vpc", + "logicalId": "FifoProcessor", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 93, + "startColumn": 5, + "endLine": 93, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'FifoMapping' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Subnet", + "logicalId": "FifoMapping", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 16, - "startColumn": 7, - "endLine": 16, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" - } + "startLine": 104, + "startColumn": 5, + "endLine": 104, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'AuroraCluster' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Subnet", + "logicalId": "AuroraCluster", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 111, + "startColumn": 5, + "endLine": 111, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'BadEngineInstance' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "BadEngineInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 22, + "startLine": 117, + "startColumn": 5, + "endLine": 117, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "integration/custom-resources.yaml": { + "filePath": "integration/custom-resources.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E9004", + "severity": "ERROR", + "message": "'ArnA' is not one of ['Arn', 'KeyId']", + "source": "SCHEMA", + "entity": { + "logicalId": "CustomResource", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::CustomResource" + }, + "propertyPath": "Properties.KmsKeyId", + "suggestedFix": "Check the resource type documentation for valid GetAtt attributes", + "category": "Intrinsic Function", + "startLine": 12, "startColumn": 7, - "endLine": 22, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" - } + "endLine": 12, + "endColumn": 15, + "ruleDescription": "GetAtt attribute must exist on target resource type", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "CustomResource", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::CloudFormation::CustomResource" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.ServiceToken", "category": "Best Practice", - "startLine": 23, + "startLine": 11, "startColumn": 7, - "endLine": 23, - "endColumn": 23, + "endLine": 11, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9705,26 +9565,178 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Resource 'KmsKey' of type 'AWS::KMS::Key' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Instance1", + "logicalId": "KmsKey", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::KMS::Key" }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "integration/deployment-file-template.yaml": { + "filePath": "integration/deployment-file-template.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 13, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Vpc", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 24, + "startColumn": 7, + "endLine": 24, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Subnet1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", "startLine": 28, "startColumn": 7, "endLine": 28, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Subnet1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 29, + "startColumn": 7, + "endLine": 29, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Subnet1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 30, + "startColumn": 7, + "endLine": 30, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Affinity' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.Affinity", + "category": "Best Practice", + "startLine": 34, + "startColumn": 7, + "endLine": 34, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 35, + "startColumn": 7, + "endLine": 35, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter 'ImageId' (type AWS::EC2::Image::Id)" } }, { @@ -9733,15 +9745,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Instance1", + "logicalId": "MyInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 29, + "startLine": 36, "startColumn": 7, - "endLine": 29, + "endLine": 36, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -9753,24 +9765,49 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Instance1", + "logicalId": "MyInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.NetworkInterfaces", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 30, + "startLine": 37, "startColumn": 7, - "endLine": 30, - "endColumn": 24, + "endLine": 37, + "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt Subnet1.SubnetId" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Tenancy' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.Tenancy", + "category": "Best Practice", + "startLine": 38, + "startColumn": 7, + "endLine": 38, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "parameter with AllowedValues" } }, { @@ -9795,9 +9832,9 @@ "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, + "startLine": 23, "startColumn": 5, - "endLine": 10, + "endLine": 23, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -9805,39 +9842,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Subnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'Subnet1' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Subnet", + "logicalId": "Subnet1", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 15, - "startColumn": 5, - "endLine": 15, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 21, + "startLine": 27, "startColumn": 5, - "endLine": 21, + "endLine": 27, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -9845,116 +9862,256 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Instance1' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'MyInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Instance1", + "logicalId": "MyInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 27, + "startLine": 33, "startColumn": 5, - "endLine": 27, + "endLine": 33, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "integration/get-stack-output.yaml": { - "filePath": "integration/get-stack-output.yaml", + "integration/dynamic-references.yaml": { + "filePath": "integration/dynamic-references.yaml", "status": "OK", "metadata": { - "resourcesScanned": 5, + "resourcesScanned": 4, "counts": { - "fatal": 0, - "errors": 2, - "warnings": 0, - "informational": 5, + "fatal": 1, + "errors": 0, + "warnings": 1, + "informational": 11, "debug": 0 }, - "suppressed": 0, + "suppressed": 1, "strict": false, "severityLevel": "DEBUG" }, "diagnostics": [ { - "ruleId": "E1033", - "severity": "ERROR", - "message": "'OutputName' is a required property", + "ruleId": "F3031", + "severity": "FATAL", + "message": "'{{:ssm:/SQS_Queue/SQS_ARN}}' does not match pattern 'arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:((eusc-)?[a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)'", "source": "SCHEMA", "entity": { - "logicalId": "InvalidMissing", + "logicalId": "SESEventSourceMappingBadDynamicReference", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", - "category": "Intrinsic Function", - "startLine": 47, + "propertyPath": "Properties.EventSourceArn", + "category": "Schema", + "startLine": 16, + "startColumn": 7, + "endLine": 16, + "endColumn": 21, + "ruleDescription": "Value does not match pattern", + "phase": "SCHEMA", + "context": { + "actualValue": "{{:ssm:/SQS_Queue/SQS_ARN}}", + "expectedConstraint": "arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:((eusc-)?[a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)" + } + }, + { + "ruleId": "W1053", + "severity": "WARN", + "message": "'{{ resolve:ssm:/SQS_Queue/SQS_ARN }}' has spaces and will not be resolved as a dynamic reference. Remove spaces from '{{resolve:...}}'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SESEventSourceMappingSpaces", + "entityType": "Resource", + "resourceType": "AWS::Lambda::EventSourceMapping" + }, + "propertyPath": "Properties.EventSourceArn", + "suggestedFix": "Remove spaces from the dynamic reference", + "category": "Best Practice", + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 21, + "ruleDescription": "Dynamic references should not contain spaces", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SESEventSourceMapping", + "entityType": "Resource", + "resourceType": "AWS::Lambda::EventSourceMapping" + }, + "propertyPath": "Properties.EventSourceArn", + "category": "Best Practice", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (dynamic reference: {{resolve:ssm:/SQS_Queue/SQS_ARN}})" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SESEventSourceMappingBadDynamicReference", + "entityType": "Resource", + "resourceType": "AWS::Lambda::EventSourceMapping" + }, + "propertyPath": "Properties.EventSourceArn", + "category": "Best Practice", + "startLine": 16, + "startColumn": 7, + "endLine": 16, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DeploymentMode' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Broker", + "entityType": "Resource", + "resourceType": "AWS::AmazonMQ::Broker" + }, + "propertyPath": "Properties.DeploymentMode", + "category": "Best Practice", + "startLine": 24, "startColumn": 9, - "endLine": 47, - "endColumn": 27, - "ruleDescription": "GetStackOutput validation of parameters", - "phase": "PARSE" + "endLine": 24, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E1033", - "severity": "ERROR", - "message": "'not-an-object' is not of type 'object'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'EngineType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "InvalidType", + "logicalId": "Broker", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::AmazonMQ::Broker" }, - "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", - "category": "Intrinsic Function", - "startLine": 54, + "propertyPath": "Properties.EngineType", + "category": "Best Practice", + "startLine": 25, "startColumn": 9, - "endLine": 54, + "endLine": 25, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BrokerName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Broker", + "entityType": "Resource", + "resourceType": "AWS::AmazonMQ::Broker" + }, + "propertyPath": "Properties.BrokerName", + "category": "Best Practice", + "startLine": 30, + "startColumn": 9, + "endLine": 30, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'PubliclyAccessible' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Broker", + "entityType": "Resource", + "resourceType": "AWS::AmazonMQ::Broker" + }, + "propertyPath": "Properties.PubliclyAccessible", + "category": "Best Practice", + "startLine": 31, + "startColumn": 9, + "endLine": 31, "endColumn": 27, - "ruleDescription": "GetStackOutput validation of parameters", - "phase": "PARSE" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ValidTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ValidTopic", + "logicalId": "SESEventSourceMappingSpaces", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.EventSourceArn", "category": "Best Practice", - "startLine": 15, - "startColumn": 5, - "endLine": 15, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ValidJoin' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'SESEventSourceMapping' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ValidJoin", + "logicalId": "SESEventSourceMapping", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::Lambda::EventSourceMapping" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 23, + "startLine": 6, "startColumn": 5, - "endLine": 23, + "endLine": 6, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -9962,19 +10119,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ValidIf' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'SESEventSourceMappingBadDynamicReference' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ValidIf", + "logicalId": "SESEventSourceMappingBadDynamicReference", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::Lambda::EventSourceMapping" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 34, + "startLine": 13, "startColumn": 5, - "endLine": 34, + "endLine": 13, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -9982,19 +10139,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'InvalidMissing' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Broker' of type 'AWS::AmazonMQ::Broker' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "InvalidMissing", + "logicalId": "Broker", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::AmazonMQ::Broker" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 45, + "startLine": 20, "startColumn": 5, - "endLine": 45, + "endLine": 20, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -10002,35 +10159,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'InvalidType' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'SESEventSourceMappingSpaces' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "InvalidType", + "logicalId": "SESEventSourceMappingSpaces", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::Lambda::EventSourceMapping" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 52, + "startLine": 34, "startColumn": 5, - "endLine": 52, + "endLine": 34, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "integration/getatt-types.yaml": { - "filePath": "integration/getatt-types.yaml", - "status": "OK", + "integration/formats.yaml": { + "filePath": "integration/formats.yaml", + "status": "OK", "metadata": { - "resourcesScanned": 8, + "resourcesScanned": 4, "counts": { - "fatal": 5, - "errors": 1, - "warnings": 0, - "informational": 19, + "fatal": 0, + "errors": 2, + "warnings": 4, + "informational": 13, "debug": 0 }, "suppressed": 0, @@ -10039,167 +10196,143 @@ }, "diagnostics": [ { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Output 'SubWithGetAtt': GetAtt 'CapacityReservation.InstanceCount' returns type 'integer', not 'string'", - "source": "SCHEMA", - "entity": { - "logicalId": "SubWithGetAtt", - "entityType": "Output" - }, - "propertyPath": "Outputs/SubWithGetAtt/Value.Fn::GetAtt", - "category": "Structure", - "startLine": 84, - "startColumn": 3, - "endLine": 84, - "endColumn": 16, - "ruleDescription": "Output value must be a string", - "phase": "SCHEMA" - }, - { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Output 'Ipv4NetmaskLength': GetAtt 'CapacityReservation.InstanceCount' returns type 'integer', not 'string'", - "source": "SCHEMA", - "entity": { - "logicalId": "Ipv4NetmaskLength", - "entityType": "Output" - }, - "propertyPath": "Outputs/Ipv4NetmaskLength/Value.Fn::GetAtt", - "category": "Structure", - "startLine": 86, - "startColumn": 3, - "endLine": 86, - "endColumn": 20, - "ruleDescription": "Output value must be a string", - "phase": "SCHEMA" - }, - { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Output 'String': GetAtt 'CapacityReservation.InstanceCount' returns type 'integer', not 'string'", - "source": "SCHEMA", + "ruleId": "E1040", + "severity": "ERROR", + "message": "{'Fn::GetAtt': ['SecurityGroup', 'GroupName']} does not match destination format of 'AWS::EC2::SecurityGroup.Id'", + "source": "CFN_LINT", "entity": { - "logicalId": "String", - "entityType": "Output" + "logicalId": "Instance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/String/Value.Fn::Sub", - "category": "Structure", - "startLine": 88, - "startColumn": 3, - "endLine": 88, - "endColumn": 9, - "ruleDescription": "Output value must be a string", - "phase": "SCHEMA" + "propertyPath": "Properties.NetworkInterfaces.2.GroupSet.0", + "suggestedFix": "Use the correct GetAtt attribute", + "category": "Intrinsic Function", + "startLine": 44, + "startColumn": 21, + "endLine": 44, + "endColumn": 22, + "ruleDescription": "Check if GetAtt matches destination format", + "phase": "LINT" }, { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Output 'JoinWithGetAtt': GetAtt 'CapacityReservation.InstanceCount' returns type 'integer', not 'string'", - "source": "SCHEMA", + "ruleId": "E1150", + "severity": "ERROR", + "message": "'sg-dne' does not match format 'AWS::EC2::SecurityGroup.Id'", + "source": "CFN_LINT", "entity": { - "logicalId": "JoinWithGetAtt", - "entityType": "Output" + "logicalId": "Instance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/JoinWithGetAtt/Value.Fn::Join.1.0.Fn::GetAtt", - "category": "Structure", - "startLine": 92, - "startColumn": 3, - "endLine": 92, - "endColumn": 17, - "ruleDescription": "Output value must be a string", - "phase": "SCHEMA" + "propertyPath": "Properties.NetworkInterfaces.1.GroupSet.3", + "category": "Intrinsic Function", + "startLine": 40, + "startColumn": 13, + "endLine": 40, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate security group format", + "phase": "SCHEMA", + "context": { + "actualValue": "sg-dne" + } }, { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Output 'BooleanGetAtt': GetAtt 'CapacityReservation.EphemeralStorage' returns type 'boolean', not 'string'", - "source": "SCHEMA", + "ruleId": "W9003", + "severity": "WARN", + "message": "0 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "BooleanGetAtt", - "entityType": "Output" + "logicalId": "Instance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/BooleanGetAtt/Value.Fn::GetAtt", - "category": "Structure", - "startLine": 96, - "startColumn": 3, - "endLine": 96, - "endColumn": 16, - "ruleDescription": "Output value must be a string", + "propertyPath": "Properties.NetworkInterfaces.0.DeviceIndex", + "category": "Best Practice", + "startLine": 31, + "startColumn": 11, + "endLine": 31, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", "phase": "SCHEMA" }, { - "ruleId": "E1040", - "severity": "ERROR", - "message": "{'Fn::GetAtt': ['TestLogGroup', 'Arn']} does not match destination format of 'AWS::Logs::LogGroup.Name'", + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", "source": "CFN_LINT", "entity": { - "logicalId": "TestTaskDefinitionWithGetAtt", + "logicalId": "Instance1", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ContainerDefinitions.0.LogConfiguration.Options.awslogs-group", - "suggestedFix": "Use the correct GetAtt attribute", - "category": "Intrinsic Function", - "startLine": 62, - "startColumn": 15, - "endLine": 62, - "endColumn": 28, - "ruleDescription": "Check if GetAtt matches destination format", - "phase": "LINT" + "propertyPath": "Properties.NetworkInterfaces.1.DeviceIndex", + "category": "Best Practice", + "startLine": 34, + "startColumn": 11, + "endLine": 34, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "ruleId": "W9003", + "severity": "WARN", + "message": "2 is not of type 'string' - automatically coerced (number to string)", "source": "CFN_LINT", "entity": { - "logicalId": "Join", - "entityType": "Output" + "logicalId": "Instance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/Join/Value.Fn::Join", - "category": "Intrinsic Function", - "startLine": 90, - "startColumn": 3, - "endLine": 90, - "endColumn": 7, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "propertyPath": "Properties.NetworkInterfaces.2.DeviceIndex", + "category": "Best Practice", + "startLine": 41, + "startColumn": 11, + "endLine": 41, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", "entity": { - "logicalId": "JoinWithGetAtt", - "entityType": "Output" + "logicalId": "Instance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/JoinWithGetAtt/Value.Fn::Join", - "category": "Intrinsic Function", - "startLine": 92, - "startColumn": 3, - "endLine": 92, - "endColumn": 17, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 28, + "startColumn": 7, + "endLine": 28, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CapacityReservation", + "logicalId": "Vpc", "entityType": "Resource", - "resourceType": "AWS::EC2::CapacityReservation" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 10, + "startLine": 11, "startColumn": 7, - "endLine": 10, - "endColumn": 23, + "endLine": 11, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -10209,64 +10342,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CapacityReservation", + "logicalId": "Subnet", "entityType": "Resource", - "resourceType": "AWS::EC2::CapacityReservation" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 12, + "startLine": 16, "startColumn": 7, - "endLine": 12, - "endColumn": 19, + "endLine": 16, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstancePlatform' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CapacityReservation", - "entityType": "Resource", - "resourceType": "AWS::EC2::CapacityReservation" - }, - "propertyPath": "Properties.InstancePlatform", - "category": "Best Practice", - "startLine": 13, - "startColumn": 7, - "endLine": 13, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TestTaskDefinitionWithGetAtt", + "logicalId": "Subnet", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 57, + "startLine": 17, "startColumn": 7, - "endLine": 57, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 17, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -10276,67 +10387,65 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TestTaskDefinitionWithGetAtt", + "logicalId": "SecurityGroup", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 68, + "startLine": 22, "startColumn": 7, - "endLine": 68, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 22, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TestTaskDefinitionWithGetAtt", + "logicalId": "SecurityGroup", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ExecutionRoleArn", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 69, + "startLine": 23, "startColumn": 7, - "endLine": 69, + "endLine": 23, "endColumn": 23, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt TestFargateExecutionRole.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TestTaskDefinitionWithGetAtt", + "logicalId": "Instance1", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 70, + "startLine": 28, "startColumn": 7, - "endLine": 70, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 28, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -10346,43 +10455,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TestTaskDefinitionWithGetAtt", + "logicalId": "Instance1", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 71, + "startLine": 29, "startColumn": 7, - "endLine": 71, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 29, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TestTaskDefinitionWithGetAtt", + "logicalId": "Instance1", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.NetworkInterfaces", "category": "Best Practice", - "startLine": 72, + "startLine": 30, "startColumn": 7, - "endLine": 72, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 30, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -10390,45 +10499,30 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9003", "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", "source": "ENGINE", - "entity": { - "logicalId": "TestTaskDefinitionWithGetAtt", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 74, - "startColumn": 7, - "endLine": 74, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt TestFargateTaskRole.Arn" - } + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SsmParameter' of type 'AWS::SSM::Parameter' supports Tags but none are configured", + "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SsmParameter", + "logicalId": "Vpc", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 16, + "startLine": 10, "startColumn": 5, - "endLine": 16, + "endLine": 10, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -10436,19 +10530,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DocDBCluster' of type 'AWS::DocDB::DBCluster' supports Tags but none are configured", + "message": "Resource 'Subnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DocDBCluster", + "logicalId": "Subnet", "entityType": "Resource", - "resourceType": "AWS::DocDB::DBCluster" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 23, + "startLine": 15, "startColumn": 5, - "endLine": 23, + "endLine": 15, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -10456,59 +10550,116 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TestCluster' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Resource 'SecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TestCluster", + "logicalId": "SecurityGroup", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 25, - "startColumn": 3, - "endLine": 25, - "endColumn": 14, + "startLine": 21, + "startColumn": 5, + "endLine": 21, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TestFargateExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'Instance1' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TestFargateExecutionRole", + "logicalId": "Instance1", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 29, + "startLine": 27, "startColumn": 5, - "endLine": 29, + "endLine": 27, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "integration/get-stack-output.yaml": { + "filePath": "integration/get-stack-output.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 0, + "informational": 5, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E1033", + "severity": "ERROR", + "message": "'OutputName' is a required property", + "source": "SCHEMA", + "entity": { + "logicalId": "InvalidMissing", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", + "category": "Intrinsic Function", + "startLine": 47, + "startColumn": 9, + "endLine": 47, + "endColumn": 27, + "ruleDescription": "GetStackOutput validation of parameters", + "phase": "PARSE" + }, + { + "ruleId": "E1033", + "severity": "ERROR", + "message": "'not-an-object' is not of type 'object'", + "source": "SCHEMA", + "entity": { + "logicalId": "InvalidType", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", + "category": "Intrinsic Function", + "startLine": 54, + "startColumn": 9, + "endLine": 54, + "endColumn": 27, + "ruleDescription": "GetStackOutput validation of parameters", + "phase": "PARSE" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TestFargateTaskRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'ValidTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TestFargateTaskRole", + "logicalId": "ValidTopic", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 42, + "startLine": 15, "startColumn": 5, - "endLine": 42, + "endLine": 15, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -10516,19 +10667,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TestLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Resource 'ValidJoin' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TestLogGroup", + "logicalId": "ValidJoin", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 50, - "startColumn": 3, - "endLine": 50, + "startLine": 23, + "startColumn": 5, + "endLine": 23, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -10536,35 +10687,75 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TestTaskDefinitionWithGetAtt' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'ValidIf' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TestTaskDefinitionWithGetAtt", + "logicalId": "ValidIf", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 56, + "startLine": 34, "startColumn": 5, - "endLine": 56, + "endLine": 34, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'InvalidMissing' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "InvalidMissing", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 45, + "startColumn": 5, + "endLine": 45, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'InvalidType' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "InvalidType", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 52, + "startColumn": 5, + "endLine": 52, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "integration/metdata.yaml": { - "filePath": "integration/metdata.yaml", + "integration/getatt-types.yaml": { + "filePath": "integration/getatt-types.yaml", "status": "OK", "metadata": { - "resourcesScanned": 0, + "resourcesScanned": 8, "counts": { - "fatal": 1, - "errors": 0, - "warnings": 1, - "informational": 0, + "fatal": 5, + "errors": 1, + "warnings": 0, + "informational": 19, "debug": 0 }, "suppressed": 0, @@ -10573,327 +10764,211 @@ }, "diagnostics": [ { - "ruleId": "F0001", + "ruleId": "F6101", "severity": "FATAL", - "message": "Resources section must exist and be non-empty", + "message": "Output 'SubWithGetAtt': GetAtt 'CapacityReservation.InstanceCount' returns type 'integer', not 'string'", "source": "SCHEMA", + "entity": { + "logicalId": "SubWithGetAtt", + "entityType": "Output" + }, + "propertyPath": "Outputs/SubWithGetAtt/Value.Fn::GetAtt", "category": "Structure", - "startLine": 21, - "startColumn": 1, - "endLine": 21, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", + "startLine": 84, + "startColumn": 3, + "endLine": 84, + "endColumn": 16, + "ruleDescription": "Output value must be a string", "phase": "SCHEMA" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'VpcId' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "F6101", + "severity": "FATAL", + "message": "Output 'Ipv4NetmaskLength': GetAtt 'CapacityReservation.InstanceCount' returns type 'integer', not 'string'", + "source": "SCHEMA", "entity": { - "logicalId": "VpcId", - "entityType": "Parameter" + "logicalId": "Ipv4NetmaskLength", + "entityType": "Output" }, - "propertyPath": "Parameters/VpcId", - "category": "Best Practice", - "startLine": 17, + "propertyPath": "Outputs/Ipv4NetmaskLength/Value.Fn::GetAtt", + "category": "Structure", + "startLine": 86, "startColumn": 3, - "endLine": 17, - "endColumn": 8, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - } - ] - }, - "integration/module-sub-resources.yaml": { - "filePath": "integration/module-sub-resources.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "integration/ref-no-value.yaml": { - "filePath": "integration/ref-no-value.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 7, - "warnings": 0, - "informational": 2, - "debug": 0 + "endLine": 86, + "endColumn": 20, + "ruleDescription": "Output value must be a string", + "phase": "SCHEMA" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3003", - "severity": "ERROR", - "message": "'Key' is a required property", - "source": "CFN_LINT", + "ruleId": "F6101", + "severity": "FATAL", + "message": "Output 'String': GetAtt 'CapacityReservation.InstanceCount' returns type 'integer', not 'string'", + "source": "SCHEMA", "entity": { - "logicalId": "IamRole1", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "logicalId": "String", + "entityType": "Output" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Tag Key cannot be null or AWS::NoValue", - "category": "Resource", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 11, - "ruleDescription": "Required Resource properties are missing", - "phase": "LINT" + "propertyPath": "Outputs/String/Value.Fn::Sub", + "category": "Structure", + "startLine": 88, + "startColumn": 3, + "endLine": 88, + "endColumn": 9, + "ruleDescription": "Output value must be a string", + "phase": "SCHEMA" }, { - "ruleId": "E3003", - "severity": "ERROR", - "message": "'DefaultCacheBehavior' is a required property", - "source": "CFN_LINT", + "ruleId": "F6101", + "severity": "FATAL", + "message": "Output 'JoinWithGetAtt': GetAtt 'CapacityReservation.InstanceCount' returns type 'integer', not 'string'", + "source": "SCHEMA", "entity": { - "logicalId": "CloudFront2", - "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "logicalId": "JoinWithGetAtt", + "entityType": "Output" }, - "propertyPath": "Properties.DistributionConfig", - "suggestedFix": "Add DefaultCacheBehavior to the Fn::If branch", - "category": "Resource", - "startLine": 43, - "startColumn": 7, - "endLine": 43, - "endColumn": 25, - "ruleDescription": "Required Resource properties are missing", - "phase": "LINT" + "propertyPath": "Outputs/JoinWithGetAtt/Value.Fn::Join.1.0.Fn::GetAtt", + "category": "Structure", + "startLine": 92, + "startColumn": 3, + "endLine": 92, + "endColumn": 17, + "ruleDescription": "Output value must be a string", + "phase": "SCHEMA" }, { - "ruleId": "E3003", - "severity": "ERROR", - "message": "'TargetOriginId' is a required property", - "source": "CFN_LINT", + "ruleId": "F6101", + "severity": "FATAL", + "message": "Output 'BooleanGetAtt': GetAtt 'CapacityReservation.EphemeralStorage' returns type 'boolean', not 'string'", + "source": "SCHEMA", "entity": { - "logicalId": "CloudFront2", - "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "logicalId": "BooleanGetAtt", + "entityType": "Output" }, - "propertyPath": "Properties.DistributionConfig.DefaultCacheBehavior.Fn::If.2", - "suggestedFix": "Add TargetOriginId to the DefaultCacheBehavior", - "category": "Resource", - "startLine": 49, - "startColumn": 13, - "endLine": 49, - "endColumn": 14, - "ruleDescription": "Required Resource properties are missing", - "phase": "LINT" + "propertyPath": "Outputs/BooleanGetAtt/Value.Fn::GetAtt", + "category": "Structure", + "startLine": 96, + "startColumn": 3, + "endLine": 96, + "endColumn": 16, + "ruleDescription": "Output value must be a string", + "phase": "SCHEMA" }, { - "ruleId": "E3003", + "ruleId": "E1040", "severity": "ERROR", - "message": "'ViewerProtocolPolicy' is a required property", + "message": "{'Fn::GetAtt': ['TestLogGroup', 'Arn']} does not match destination format of 'AWS::Logs::LogGroup.Name'", "source": "CFN_LINT", "entity": { - "logicalId": "CloudFront2", + "logicalId": "TestTaskDefinitionWithGetAtt", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.DistributionConfig.DefaultCacheBehavior.Fn::If.2", - "suggestedFix": "Add ViewerProtocolPolicy to the DefaultCacheBehavior", - "category": "Resource", - "startLine": 49, - "startColumn": 13, - "endLine": 49, - "endColumn": 14, - "ruleDescription": "Required Resource properties are missing", - "phase": "LINT" - }, - { - "ruleId": "E3024", - "severity": "ERROR", - "message": "'Key' is a required property", - "source": "CFN_LINT", - "entity": { - "logicalId": "IamRole1", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Tag Key cannot be null or AWS::NoValue", - "category": "Resource", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 11, - "ruleDescription": "Validate tag configuration", + "propertyPath": "Properties.ContainerDefinitions.0.LogConfiguration.Options.awslogs-group", + "suggestedFix": "Use the correct GetAtt attribute", + "category": "Intrinsic Function", + "startLine": 62, + "startColumn": 15, + "endLine": 62, + "endColumn": 28, + "ruleDescription": "Check if GetAtt matches destination format", "phase": "LINT" }, { - "ruleId": "E3530", - "severity": "ERROR", - "message": "'Statement' is a required property", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "IamRole1", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "logicalId": "Join", + "entityType": "Output" }, - "propertyPath": "Properties.AssumeRolePolicyDocument", - "suggestedFix": "Add a Statement array to the AssumeRolePolicyDocument", - "category": "Resource", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 31, - "ruleDescription": "Validate IAM trust policies", + "propertyPath": "Outputs/Join/Value.Fn::Join", + "category": "Intrinsic Function", + "startLine": 90, + "startColumn": 3, + "endLine": 90, + "endColumn": 7, + "ruleDescription": "Use Sub instead of Join", "phase": "LINT" }, { - "ruleId": "E3530", - "severity": "ERROR", - "message": "'Statement' is a required property", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "IamRole3", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "logicalId": "JoinWithGetAtt", + "entityType": "Output" }, - "propertyPath": "Properties.AssumeRolePolicyDocument", - "suggestedFix": "Add a Statement array to the AssumeRolePolicyDocument", - "category": "Resource", - "startLine": 30, - "startColumn": 7, - "endLine": 30, - "endColumn": 31, - "ruleDescription": "Validate IAM trust policies", + "propertyPath": "Outputs/JoinWithGetAtt/Value.Fn::Join", + "category": "Intrinsic Function", + "startLine": 92, + "startColumn": 3, + "endLine": 92, + "endColumn": 17, + "ruleDescription": "Use Sub instead of Join", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'IamRole3' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "IamRole3", + "logicalId": "CapacityReservation", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::CapacityReservation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 31, + "startLine": 10, "startColumn": 7, - "endLine": 31, - "endColumn": 11, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 10, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CloudFront2' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CloudFront2", + "logicalId": "CapacityReservation", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::EC2::CapacityReservation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 42, - "startColumn": 5, - "endLine": 42, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "integration/ref-types.yaml": { - "filePath": "integration/ref-types.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 13, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 1, - "informational": 40, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E1041", - "severity": "ERROR", - "message": "{'Ref': 'FargateTaskRole'} does not match destination format of 'AWS::EC2::VPC.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Subnet2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "suggestedFix": "Use a Ref to a resource whose type matches the expected format", - "category": "Intrinsic Function", - "startLine": 45, + "startLine": 12, "startColumn": 7, - "endLine": 45, - "endColumn": 12, - "ruleDescription": "Check if Ref matches destination format", - "phase": "LINT" - }, - { - "ruleId": "W3697", - "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", - "source": "CFN_LINT", - "entity": { - "logicalId": "LaunchConfiguration", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "category": "Deprecation", - "startLine": 111, - "startColumn": 3, - "endLine": 111, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" + "endLine": 12, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'InstancePlatform' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Vpc", + "logicalId": "CapacityReservation", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::CapacityReservation" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.InstancePlatform", "category": "Best Practice", - "startLine": 35, + "startLine": 13, "startColumn": 7, - "endLine": 35, - "endColumn": 16, + "endLine": 13, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -10903,19 +10978,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet1", + "logicalId": "TestTaskDefinitionWithGetAtt", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 39, + "startLine": 57, "startColumn": 7, - "endLine": 39, - "endColumn": 16, + "endLine": 57, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -10925,87 +11001,90 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet1", + "logicalId": "TestTaskDefinitionWithGetAtt", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 40, + "startLine": 68, "startColumn": 7, - "endLine": 40, - "endColumn": 12, + "endLine": 68, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet2", + "logicalId": "TestTaskDefinitionWithGetAtt", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.ExecutionRoleArn", "category": "Best Practice", - "startLine": 44, + "startLine": 69, "startColumn": 7, - "endLine": 44, - "endColumn": 16, + "endLine": 69, + "endColumn": 23, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt TestFargateExecutionRole.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet2", + "logicalId": "TestTaskDefinitionWithGetAtt", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 45, + "startLine": 70, "startColumn": 7, - "endLine": 45, - "endColumn": 12, + "endLine": 70, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'FargateTaskRole'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup1", + "logicalId": "TestTaskDefinitionWithGetAtt", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 49, + "startLine": 71, "startColumn": 7, - "endLine": 49, - "endColumn": 23, + "endLine": 71, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -11015,7343 +11094,827 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup1", + "logicalId": "TestTaskDefinitionWithGetAtt", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 50, + "startLine": 72, "startColumn": 7, - "endLine": 50, - "endColumn": 12, + "endLine": 72, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup2", + "logicalId": "TestTaskDefinitionWithGetAtt", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 54, + "startLine": 74, "startColumn": 7, - "endLine": 54, - "endColumn": 23, + "endLine": 74, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt TestFargateTaskRole.Arn" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Resource 'SsmParameter' of type 'AWS::SSM::Parameter' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LoadBalancer", + "logicalId": "SsmParameter", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::SSM::Parameter" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 58, - "startColumn": 7, - "endLine": 58, - "endColumn": 11, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", + "message": "Resource 'DocDBCluster' of type 'AWS::DocDB::DBCluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LoadBalancer", + "logicalId": "DocDBCluster", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::DocDB::DBCluster" }, - "propertyPath": "Properties.Scheme", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 59, - "startColumn": 7, - "endLine": 59, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 23, + "startColumn": 5, + "endLine": 23, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Resource 'TestCluster' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskDefinitionWithRefToResource", + "logicalId": "TestCluster", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::ECS::Cluster" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 72, - "startColumn": 7, - "endLine": 72, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 25, + "startColumn": 3, + "endLine": 25, + "endColumn": 14, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Resource 'TestFargateExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskDefinitionWithRefToResource", + "logicalId": "TestFargateExecutionRole", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 83, - "startColumn": 7, - "endLine": 83, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'TestFargateTaskRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskDefinitionWithRefToResource", + "logicalId": "TestFargateTaskRole", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.ExecutionRoleArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 84, - "startColumn": 7, - "endLine": 84, - "endColumn": 23, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateExecutionRole.Arn" - } + "startLine": 42, + "startColumn": 5, + "endLine": 42, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Resource 'TestLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskDefinitionWithRefToResource", + "logicalId": "TestLogGroup", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 85, - "startColumn": 7, - "endLine": 85, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 50, + "startColumn": 3, + "endLine": 50, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Resource 'TestTaskDefinitionWithGetAtt' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskDefinitionWithRefToResource", + "logicalId": "TestTaskDefinitionWithGetAtt", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 86, - "startColumn": 7, - "endLine": 86, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDefinitionWithRefToResource", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 87, - "startColumn": 7, - "endLine": 87, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDefinitionWithRefToResource", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.TaskRoleArn", - "category": "Best Practice", - "startLine": 89, - "startColumn": 7, - "endLine": 89, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateTaskRole.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDefinitionWithRefToParameter", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 93, - "startColumn": 7, - "endLine": 93, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDefinitionWithRefToParameter", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Cpu", - "category": "Best Practice", - "startLine": 104, - "startColumn": 7, - "endLine": 104, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDefinitionWithRefToParameter", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.ExecutionRoleArn", - "category": "Best Practice", - "startLine": 105, - "startColumn": 7, - "endLine": 105, - "endColumn": 23, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateExecutionRole.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDefinitionWithRefToParameter", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Memory", - "category": "Best Practice", - "startLine": 106, - "startColumn": 7, - "endLine": 106, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDefinitionWithRefToParameter", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 107, - "startColumn": 7, - "endLine": 107, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDefinitionWithRefToParameter", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 108, - "startColumn": 7, - "endLine": 108, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDefinitionWithRefToParameter", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.TaskRoleArn", - "category": "Best Practice", - "startLine": 110, - "startColumn": 7, - "endLine": 110, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateTaskRole.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LaunchConfiguration", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 114, - "startColumn": 7, - "endLine": 114, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LaunchConfiguration", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 115, - "startColumn": 7, - "endLine": 115, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AssociatePublicIpAddress' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LaunchConfiguration", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.AssociatePublicIpAddress", - "category": "Best Practice", - "startLine": 116, - "startColumn": 7, - "endLine": 116, - "endColumn": 31, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LaunchConfiguration", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.SecurityGroups", - "category": "Best Practice", - "startLine": 117, - "startColumn": 7, - "endLine": 117, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Cluster' of type 'AWS::ECS::Cluster' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Cluster", - "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 10, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FargateExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FargateExecutionRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 11, - "startColumn": 5, - "endLine": 11, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FargateTaskRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FargateTaskRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 24, - "startColumn": 5, - "endLine": 24, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Vpc", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 34, - "startColumn": 5, - "endLine": 34, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Subnet1' of type 'AWS::EC2::Subnet' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 38, - "startColumn": 5, - "endLine": 38, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Subnet2' of type 'AWS::EC2::Subnet' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 43, - "startColumn": 5, - "endLine": 43, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SecurityGroup1' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SecurityGroup1", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 48, - "startColumn": 5, - "endLine": 48, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SecurityGroup2' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SecurityGroup2", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 53, - "startColumn": 5, - "endLine": 53, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LoadBalancer' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "LoadBalancer", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 57, - "startColumn": 5, - "endLine": 57, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "LogGroup", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 65, - "startColumn": 3, - "endLine": 65, - "endColumn": 11, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TaskDefinitionWithRefToResource' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDefinitionWithRefToResource", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 71, - "startColumn": 5, - "endLine": 71, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TaskDefinitionWithRefToParameter' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDefinitionWithRefToParameter", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 92, - "startColumn": 5, - "endLine": 92, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "integration/resources-cloudformation-init.yaml": { - "filePath": "integration/resources-cloudformation-init.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 2, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2509", - "severity": "WARN", - "message": "Parameter 'DBPassword' appears to be a password but does not have NoEcho set to true", - "source": "ENGINE", - "entity": { - "logicalId": "DBPassword", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/DBPassword", - "category": "Security", - "startLine": 6, - "startColumn": 3, - "endLine": 6, - "endColumn": 13, - "ruleDescription": "Password parameter should have NoEcho", - "phase": "LINT" - }, - { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", - "source": "ENGINE", - "entity": { - "logicalId": "MyInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 94, - "startColumn": 7, - "endLine": 94, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 94, - "startColumn": 7, - "endLine": 94, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MyInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 93, - "startColumn": 5, - "endLine": 93, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "issues/sam_w_conditions.yaml": { - "filePath": "issues/sam_w_conditions.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 17, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 37, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "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": "VmdEventsQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 203, - "startColumn": 3, - "endLine": 203, - "endColumn": 17, - "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": "VmdEventsQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 203, - "startColumn": 3, - "endLine": 203, - "endColumn": 17, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "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": "VmdEventsDeadLetterQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 214, - "startColumn": 3, - "endLine": 214, - "endColumn": 27, - "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": "VmdEventsDeadLetterQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 214, - "startColumn": 3, - "endLine": 214, - "endColumn": 27, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "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": "DmdEventsQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 328, - "startColumn": 3, - "endLine": 328, - "endColumn": 17, - "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": "DmdEventsQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 328, - "startColumn": 3, - "endLine": 328, - "endColumn": 17, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "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": "DmdEventsDeadLetterQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 339, - "startColumn": 3, - "endLine": 339, - "endColumn": 27, - "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": "DmdEventsDeadLetterQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 339, - "startColumn": 3, - "endLine": 339, - "endColumn": 27, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ManagedPolicyName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DeniedPolicies", - "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" - }, - "propertyPath": "Properties.ManagedPolicyName", - "category": "Best Practice", - "startLine": 118, - "startColumn": 7, - "endLine": 118, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:${GlobalPrefix}-${ComponentShortName}-DeniedPolicies-${TenantAwsResource})" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DeniedPolicies", - "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" - }, - "propertyPath": "Properties.Description", - "category": "Best Practice", - "startLine": 119, - "startColumn": 7, - "endLine": 119, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DeniedPolicies", - "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" - }, - "propertyPath": "Properties.Path", - "category": "Best Practice", - "startLine": 120, - "startColumn": 7, - "endLine": 120, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ManagedPolicyName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LogMonitoringPolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" - }, - "propertyPath": "Properties.ManagedPolicyName", - "category": "Best Practice", - "startLine": 138, - "startColumn": 7, - "endLine": 138, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:${GlobalPrefix}-${ComponentShortName}-LogMonitoringPolicy-${TenantAwsResource})" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LogMonitoringPolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" - }, - "propertyPath": "Properties.Description", - "category": "Best Practice", - "startLine": 139, - "startColumn": 7, - "endLine": 139, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LogMonitoringPolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" - }, - "propertyPath": "Properties.Path", - "category": "Best Practice", - "startLine": 140, - "startColumn": 7, - "endLine": 140, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TenantInfoReadPolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" - }, - "propertyPath": "Properties.Description", - "category": "Best Practice", - "startLine": 154, - "startColumn": 7, - "endLine": 154, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VmdEventsQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.QueueName", - "category": "Best Practice", - "startLine": 207, - "startColumn": 7, - "endLine": 207, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:${Solution}-${Environment}-${ComponentShortName}-VmdEventsQueue-${TenantAwsResource}.fifo)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VmdEventsQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.FifoQueue", - "category": "Best Practice", - "startLine": 209, - "startColumn": 7, - "endLine": 209, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VmdEventsDeadLetterQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.QueueName", - "category": "Best Practice", - "startLine": 218, - "startColumn": 7, - "endLine": 218, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:${Solution}-${Environment}-${ComponentShortName}-VmdEventsDeadLetterQueue-${TenantAwsResource}.fifo)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VmdEventsDeadLetterQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.FifoQueue", - "category": "Best Practice", - "startLine": 220, - "startColumn": 7, - "endLine": 220, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VmdEventsSubscription", - "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" - }, - "propertyPath": "Properties.Protocol", - "category": "Best Practice", - "startLine": 265, - "startColumn": 7, - "endLine": 265, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VmdEventsSubscription", - "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" - }, - "propertyPath": "Properties.Endpoint", - "category": "Best Practice", - "startLine": 266, - "startColumn": 7, - "endLine": 266, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt VmdEventsQueue.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Region' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VmdEventsSubscription", - "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" - }, - "propertyPath": "Properties.Region", - "category": "Best Practice", - "startLine": 267, - "startColumn": 7, - "endLine": 267, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "parameter 'VmdEventsSourceRegion' (type String)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VmdEventsSubscription", - "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" - }, - "propertyPath": "Properties.TopicArn", - "category": "Best Practice", - "startLine": 268, - "startColumn": 7, - "endLine": 268, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'VmdEventsSourceArn' (type String)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DmdEventsQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.QueueName", - "category": "Best Practice", - "startLine": 332, - "startColumn": 7, - "endLine": 332, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:${Solution}-${Environment}-${ComponentShortName}-DmdEventsQueue-${TenantAwsResource}.fifo)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DmdEventsQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.FifoQueue", - "category": "Best Practice", - "startLine": 334, - "startColumn": 7, - "endLine": 334, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DmdEventsDeadLetterQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.QueueName", - "category": "Best Practice", - "startLine": 343, - "startColumn": 7, - "endLine": 343, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:${Solution}-${Environment}-${ComponentShortName}-DmdEventsDeadLetterQueue-${TenantAwsResource}.fifo)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DmdEventsDeadLetterQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.FifoQueue", - "category": "Best Practice", - "startLine": 345, - "startColumn": 7, - "endLine": 345, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DmdEventsSubscription", - "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" - }, - "propertyPath": "Properties.Protocol", - "category": "Best Practice", - "startLine": 390, - "startColumn": 7, - "endLine": 390, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DmdEventsSubscription", - "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" - }, - "propertyPath": "Properties.Endpoint", - "category": "Best Practice", - "startLine": 391, - "startColumn": 7, - "endLine": 391, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt DmdEventsQueue.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Region' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DmdEventsSubscription", - "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" - }, - "propertyPath": "Properties.Region", - "category": "Best Practice", - "startLine": 392, - "startColumn": 7, - "endLine": 392, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "parameter 'DmdEventsSourceRegion' (type String)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DmdEventsSubscription", - "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" - }, - "propertyPath": "Properties.TopicArn", - "category": "Best Practice", - "startLine": 393, - "startColumn": 7, - "endLine": 393, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'DmdEventsSourceArn' (type String)" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'VmdEventsLambda' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "VmdEventsLambda", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 171, - "startColumn": 5, - "endLine": 171, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'VmdEventsQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "VmdEventsQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 206, - "startColumn": 5, - "endLine": 206, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'VmdEventsLambdaErrorsGreaterThanZeroAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "VmdEventsLambdaErrorsGreaterThanZeroAlarm", - "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 274, - "startColumn": 5, - "endLine": 274, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DmdEventsLambda' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "DmdEventsLambda", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 296, - "startColumn": 5, - "endLine": 296, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DmdEventsQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "DmdEventsQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 331, - "startColumn": 5, - "endLine": 331, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DmdEventsLambdaErrorsGreaterThanZeroAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "DmdEventsLambdaErrorsGreaterThanZeroAlarm", - "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 399, - "startColumn": 5, - "endLine": 399, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "lsp/comprehensive.json": { - "filePath": "lsp/comprehensive.json", - "status": "OK", - "metadata": { - "resourcesScanned": 12, - "counts": { - "fatal": 4, - "errors": 1, - "warnings": 8, - "informational": 29, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'MaxSize' is a required property", - "source": "SCHEMA", - "entity": { - "logicalId": "AutoScalingGroup", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'MaxSize'", - "category": "Schema", - "startLine": 564, - "startColumn": 7, - "endLine": 564, - "endColumn": 18, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" - }, - { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'MinSize' is a required property", - "source": "SCHEMA", - "entity": { - "logicalId": "AutoScalingGroup", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'MinSize'", - "category": "Schema", - "startLine": 564, - "startColumn": 7, - "endLine": 564, - "endColumn": 18, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" - }, - { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Fn::Sub variable '${MaxScaling}' does not reference a valid resource, parameter, or pseudo-parameter", - "source": "SCHEMA", - "entity": { - "logicalId": "ComplexOutput", - "entityType": "Output" - }, - "propertyPath": "Outputs/ComplexOutput/Value.Fn::Sub", - "category": "Structure", - "startLine": 943, - "startColumn": 5, - "endLine": 943, - "endColumn": 19, - "ruleDescription": "Output value must be a string", - "phase": "SCHEMA" - }, - { - "ruleId": "F8611", - "severity": "FATAL", - "message": "'Fn::FindInMap' is not supported in the Rules section - allowed: ['Ref', 'Fn::ValueOf', 'Fn::ValueOfAll', 'Fn::RefAll', 'Fn::Contains', 'Fn::EachMemberEquals', 'Fn::EachMemberIn', 'Fn::Equals', 'Fn::And', 'Fn::Or', 'Fn::Not', 'Fn::If', 'Fn::Select']", - "source": "SCHEMA", - "entity": { - "logicalId": "ValidateRegionAndEnvironment", - "entityType": "Rule" - }, - "propertyPath": "Rules/ValidateRegionAndEnvironment", - "category": "Structure", - "startLine": 197, - "startColumn": 5, - "endLine": 197, - "endColumn": 34, - "ruleDescription": "Disallowed function in Rules section", - "phase": "PARSE" - }, - { - "ruleId": "E9006", - "severity": "ERROR", - "message": "'8.0' is not one of ['5.5.62', '5.6.51', '5.7.33', '5.7.34', '5.7.36', '5.7.37', '5.7.38', '5.7.39', '5.7.40', '5.7.41', '5.7.42', '5.7.43', '5.7.44', '5.7.44-rds.20240408', '5.7.44-rds.20240529', '5.7.44-rds.20240808', '5.7.44-rds.20250103', '5.7.44-rds.20250213', '5.7.44-rds.20250508', '5.7.44-rds.20250818', '5.7.44-rds.20251212', '5.7.44-rds.20260212', '5.7.44-rds.20260521', '5.7.44-rds.20260624', '5.7.44-rds.20260902', '8.0.11', '8.0.13', '8.0.15', '8.0.16', '8.0.17', '8.0.19', '8.0.20', '8.0.21', '8.0.23', '8.0.25', '8.0.26', '8.0.27', '8.0.28', '8.0.29', '8.0.30', '8.0.31', '8.0.32', '8.0.33', '8.0.34', '8.0.35', '8.0.36', '8.0.37', '8.0.39', '8.0.40', '8.0.41', '8.0.42', '8.0.43', '8.0.44', '8.0.45', '8.0.46', '8.0.46-rds.20260624', '8.0.46-rds.20260908', '8.4.10', '8.4.11', '8.4.3', '8.4.4', '8.4.5', '8.4.6', '8.4.7', '8.4.8', '8.4.9']", - "source": "CFN_LINT", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.EngineVersion", - "category": "Schema", - "startLine": 647, - "startColumn": 9, - "endLine": 647, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property value not valid for conditional extension enum", - "phase": "SCHEMA" - }, - { - "ruleId": "W1011", - "severity": "WARN", - "message": "Use dynamic references (e.g., SSM SecureString) instead of parameter 'DatabasePassword' for secrets", - "source": "CFN_LINT", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 664, - "startColumn": 9, - "endLine": 664, - "endColumn": 28, - "ruleDescription": "Instead of REFing a parameter for a secret use a dynamic reference", - "phase": "LINT" - }, - { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", - "source": "CFN_LINT", - "entity": { - "logicalId": "ConditionalOutput", - "entityType": "Output" - }, - "propertyPath": "Outputs/ConditionalOutput/Value.Fn::If.2", - "category": "Best Practice", - "startLine": 996, - "startColumn": 5, - "endLine": 996, - "endColumn": 23, - "ruleDescription": "Check Fn::If has a path that cannot be reached", - "phase": "LINT" - }, - { - "ruleId": "W2508", - "severity": "WARN", - "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", - "source": "ENGINE", - "entity": { - "logicalId": "BastionSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress", - "suggestedFix": "Restrict the CIDR range to specific IP addresses", - "category": "Security", - "startLine": 495, - "startColumn": 9, - "endLine": 495, - "endColumn": 30, - "ruleDescription": "Security group allows open access to sensitive port", - "phase": "LINT" - }, - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", - "entity": { - "logicalId": "LambdaFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 738, - "startColumn": 9, - "endLine": 738, - "endColumn": 17, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.9", - "lifecycle": "deprecated" - } - }, - { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'IsNotProduction' is not used by any resource or Fn::If", - "source": "CFN_LINT", - "entity": { - "logicalId": "IsNotProduction", - "entityType": "Condition" - }, - "propertyPath": "Conditions/IsNotProduction", - "category": "Best Practice", - "startLine": 125, - "startColumn": 5, - "endLine": 125, - "endColumn": 21, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" - }, - { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'ComplexCondition' is not used by any resource or Fn::If", - "source": "CFN_LINT", - "entity": { - "logicalId": "ComplexCondition", - "entityType": "Condition" - }, - "propertyPath": "Conditions/ComplexCondition", - "category": "Best Practice", - "startLine": 155, - "startColumn": 5, - "endLine": 155, - "endColumn": 22, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "100 (from Fn::If on condition 'IsProduction') is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.AllocatedStorage", - "category": "Best Practice", - "startLine": 648, - "startColumn": 9, - "endLine": 648, - "endColumn": 26, - "conditionScenario": { - "IsProduction": true - }, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA", - "context": { - "resolutionSource": "Fn::If on condition 'IsProduction'" - } - }, - { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 656, - "startColumn": 9, - "endLine": 656, - "endColumn": 26, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VPC", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 362, - "startColumn": 9, - "endLine": 362, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "PublicSubnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 390, - "startColumn": 9, - "endLine": 390, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "PublicSubnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 393, - "startColumn": 9, - "endLine": 393, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "PublicSubnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 401, - "startColumn": 9, - "endLine": 401, - "endColumn": 26, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Select with unresolvable arguments)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "WebSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 443, - "startColumn": 9, - "endLine": 443, - "endColumn": 26, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "WebSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 444, - "startColumn": 9, - "endLine": 444, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BastionSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 491, - "startColumn": 9, - "endLine": 491, - "endColumn": 26, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BastionSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 492, - "startColumn": 9, - "endLine": 492, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LaunchTemplateName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LaunchTemplate", - "entityType": "Resource", - "resourceType": "AWS::EC2::LaunchTemplate" - }, - "propertyPath": "Properties.LaunchTemplateName", - "category": "Best Practice", - "startLine": 508, - "startColumn": 9, - "endLine": 508, - "endColumn": 28, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AutoScalingGroup", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties.AutoScalingGroupName", - "category": "Best Practice", - "startLine": 565, - "startColumn": 9, - "endLine": 565, - "endColumn": 30, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LaunchTemplate' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AutoScalingGroup", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties.LaunchTemplate", - "category": "Best Practice", - "startLine": 568, - "startColumn": 9, - "endLine": 568, - "endColumn": 24, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AutoScalingGroup", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties.VPCZoneIdentifier", - "category": "Best Practice", - "startLine": 582, - "startColumn": 9, - "endLine": 582, - "endColumn": 27, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DBInstanceIdentifier' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.DBInstanceIdentifier", - "category": "Best Practice", - "startLine": 634, - "startColumn": 9, - "endLine": 634, - "endColumn": 30, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 646, - "startColumn": 9, - "endLine": 646, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.StorageEncrypted", - "category": "Best Practice", - "startLine": 656, - "startColumn": 9, - "endLine": 656, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProduction'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.MasterUsername", - "category": "Best Practice", - "startLine": 663, - "startColumn": 9, - "endLine": 663, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.BackupRetentionPeriod", - "category": "Best Practice", - "startLine": 672, - "startColumn": 9, - "endLine": 672, - "endColumn": 31, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Fn::If on condition 'IsProduction'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'MultiAZ' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.MultiAZ", - "category": "Best Practice", - "startLine": 679, - "startColumn": 9, - "endLine": 679, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (condition reference: IsProduction)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DatabaseSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 716, - "startColumn": 9, - "endLine": 716, - "endColumn": 26, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DatabaseSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 717, - "startColumn": 9, - "endLine": 717, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LambdaFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 735, - "startColumn": 9, - "endLine": 735, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LambdaRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.RoleName", - "category": "Best Practice", - "startLine": 802, - "startColumn": 9, - "endLine": 802, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DatabaseAlarm", - "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" - }, - "propertyPath": "Properties.AlarmName", - "category": "Best Practice", - "startLine": 846, - "startColumn": 9, - "endLine": 846, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SNSTopic", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.TopicName", - "category": "Best Practice", - "startLine": 877, - "startColumn": 9, - "endLine": 877, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" - } - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BastionSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BastionSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 490, - "startColumn": 7, - "endLine": 490, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DatabaseSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "DatabaseSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 715, - "startColumn": 7, - "endLine": 715, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LambdaRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "LambdaRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 801, - "startColumn": 7, - "endLine": 801, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DatabaseAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "DatabaseAlarm", - "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 845, - "startColumn": 7, - "endLine": 845, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "lsp/comprehensive.yaml": { - "filePath": "lsp/comprehensive.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 12, - "counts": { - "fatal": 4, - "errors": 1, - "warnings": 10, - "informational": 29, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'MaxSize' is a required property", - "source": "SCHEMA", - "entity": { - "logicalId": "AutoScalingGroup", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'MaxSize'", - "category": "Schema", - "startLine": 236, - "startColumn": 5, - "endLine": 236, - "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" - }, - { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'MinSize' is a required property", - "source": "SCHEMA", - "entity": { - "logicalId": "AutoScalingGroup", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'MinSize'", - "category": "Schema", - "startLine": 236, - "startColumn": 5, - "endLine": 236, - "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" - }, - { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Fn::Sub variable '${MaxScaling}' does not reference a valid resource, parameter, or pseudo-parameter", - "source": "SCHEMA", - "entity": { - "logicalId": "ComplexOutput", - "entityType": "Output" - }, - "propertyPath": "Outputs/ComplexOutput/Value.Fn::Sub", - "category": "Structure", - "startLine": 421, - "startColumn": 3, - "endLine": 421, - "endColumn": 16, - "ruleDescription": "Output value must be a string", - "phase": "SCHEMA" - }, - { - "ruleId": "F8611", - "severity": "FATAL", - "message": "'Fn::FindInMap' is not supported in the Rules section - allowed: ['Ref', 'Fn::ValueOf', 'Fn::ValueOfAll', 'Fn::RefAll', 'Fn::Contains', 'Fn::EachMemberEquals', 'Fn::EachMemberIn', 'Fn::Equals', 'Fn::And', 'Fn::Or', 'Fn::Not', 'Fn::If', 'Fn::Select']", - "source": "SCHEMA", - "entity": { - "logicalId": "ValidateRegionAndEnvironment", - "entityType": "Rule" - }, - "propertyPath": "Rules/ValidateRegionAndEnvironment", - "category": "Structure", - "startLine": 110, - "startColumn": 3, - "endLine": 110, - "endColumn": 31, - "ruleDescription": "Disallowed function in Rules section", - "phase": "PARSE" - }, - { - "ruleId": "E9006", - "severity": "ERROR", - "message": "'8.0' is not one of ['5.5.62', '5.6.51', '5.7.33', '5.7.34', '5.7.36', '5.7.37', '5.7.38', '5.7.39', '5.7.40', '5.7.41', '5.7.42', '5.7.43', '5.7.44', '5.7.44-rds.20240408', '5.7.44-rds.20240529', '5.7.44-rds.20240808', '5.7.44-rds.20250103', '5.7.44-rds.20250213', '5.7.44-rds.20250508', '5.7.44-rds.20250818', '5.7.44-rds.20251212', '5.7.44-rds.20260212', '5.7.44-rds.20260521', '5.7.44-rds.20260624', '5.7.44-rds.20260902', '8.0.11', '8.0.13', '8.0.15', '8.0.16', '8.0.17', '8.0.19', '8.0.20', '8.0.21', '8.0.23', '8.0.25', '8.0.26', '8.0.27', '8.0.28', '8.0.29', '8.0.30', '8.0.31', '8.0.32', '8.0.33', '8.0.34', '8.0.35', '8.0.36', '8.0.37', '8.0.39', '8.0.40', '8.0.41', '8.0.42', '8.0.43', '8.0.44', '8.0.45', '8.0.46', '8.0.46-rds.20260624', '8.0.46-rds.20260908', '8.4.10', '8.4.11', '8.4.3', '8.4.4', '8.4.5', '8.4.6', '8.4.7', '8.4.8', '8.4.9']", - "source": "CFN_LINT", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.EngineVersion", - "category": "Schema", - "startLine": 271, - "startColumn": 7, - "endLine": 271, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property value not valid for conditional extension enum", - "phase": "SCHEMA" - }, - { - "ruleId": "W1011", - "severity": "WARN", - "message": "Use dynamic references (e.g., SSM SecureString) instead of parameter 'DatabasePassword' for secrets", - "source": "CFN_LINT", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 276, - "startColumn": 7, - "endLine": 276, - "endColumn": 25, - "ruleDescription": "Instead of REFing a parameter for a secret use a dynamic reference", - "phase": "LINT" - }, - { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", - "source": "CFN_LINT", - "entity": { - "logicalId": "ConditionalOutput", - "entityType": "Output" - }, - "propertyPath": "Outputs/ConditionalOutput/Value.Fn::If.2", - "category": "Best Practice", - "startLine": 442, - "startColumn": 3, - "endLine": 442, - "endColumn": 20, - "ruleDescription": "Check Fn::If has a path that cannot be reached", - "phase": "LINT" - }, - { - "ruleId": "W1103", - "severity": "WARN", - "message": "'!Implies' is not a supported function", - "source": "ENGINE", - "category": "Intrinsic Function", - "ruleDescription": "Unknown intrinsic function name", - "phase": "PARSE" - }, - { - "ruleId": "W2508", - "severity": "WARN", - "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", - "source": "ENGINE", - "entity": { - "logicalId": "BastionSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress", - "suggestedFix": "Restrict the CIDR range to specific IP addresses", - "category": "Security", - "startLine": 206, - "startColumn": 7, - "endLine": 206, - "endColumn": 27, - "ruleDescription": "Security group allows open access to sensitive port", - "phase": "LINT" - }, - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", - "entity": { - "logicalId": "LambdaFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 306, - "startColumn": 7, - "endLine": 306, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.9", - "lifecycle": "deprecated" - } - }, - { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'IsNotProduction' is not used by any resource or Fn::If", - "source": "CFN_LINT", - "entity": { - "logicalId": "IsNotProduction", - "entityType": "Condition" - }, - "propertyPath": "Conditions/IsNotProduction", - "category": "Best Practice", - "startLine": 93, - "startColumn": 3, - "endLine": 93, - "endColumn": 18, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" - }, - { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'ComplexCondition' is not used by any resource or Fn::If", - "source": "CFN_LINT", - "entity": { - "logicalId": "ComplexCondition", - "entityType": "Condition" - }, - "propertyPath": "Conditions/ComplexCondition", - "category": "Best Practice", - "startLine": 101, - "startColumn": 3, - "endLine": 101, - "endColumn": 19, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "-1 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", - "entity": { - "logicalId": "WebSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupEgress.0.IpProtocol", - "category": "Best Practice", - "startLine": 195, - "startColumn": 11, - "endLine": 195, - "endColumn": 21, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "100 (from Fn::If on condition 'IsProduction') is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.AllocatedStorage", - "category": "Best Practice", - "startLine": 272, - "startColumn": 7, - "endLine": 272, - "endColumn": 23, - "conditionScenario": { - "IsProduction": true - }, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA", - "context": { - "resolutionSource": "Fn::If on condition 'IsProduction'" - } - }, - { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 274, - "startColumn": 7, - "endLine": 274, - "endColumn": 23, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VPC", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 142, - "startColumn": 7, - "endLine": 142, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "PublicSubnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 158, - "startColumn": 7, - "endLine": 158, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "PublicSubnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 159, - "startColumn": 7, - "endLine": 159, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "PublicSubnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 160, - "startColumn": 7, - "endLine": 160, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Select with unresolvable arguments)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "WebSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 176, - "startColumn": 7, - "endLine": 176, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "WebSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 177, - "startColumn": 7, - "endLine": 177, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BastionSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 204, - "startColumn": 7, - "endLine": 204, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BastionSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 205, - "startColumn": 7, - "endLine": 205, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LaunchTemplateName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LaunchTemplate", - "entityType": "Resource", - "resourceType": "AWS::EC2::LaunchTemplate" - }, - "propertyPath": "Properties.LaunchTemplateName", - "category": "Best Practice", - "startLine": 216, - "startColumn": 7, - "endLine": 216, - "endColumn": 25, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AutoScalingGroup", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties.AutoScalingGroupName", - "category": "Best Practice", - "startLine": 237, - "startColumn": 7, - "endLine": 237, - "endColumn": 27, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LaunchTemplate' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AutoScalingGroup", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties.LaunchTemplate", - "category": "Best Practice", - "startLine": 238, - "startColumn": 7, - "endLine": 238, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AutoScalingGroup", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties.VPCZoneIdentifier", - "category": "Best Practice", - "startLine": 242, - "startColumn": 7, - "endLine": 242, - "endColumn": 24, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DBInstanceIdentifier' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.DBInstanceIdentifier", - "category": "Best Practice", - "startLine": 268, - "startColumn": 7, - "endLine": 268, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 270, - "startColumn": 7, - "endLine": 270, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.StorageEncrypted", - "category": "Best Practice", - "startLine": 274, - "startColumn": 7, - "endLine": 274, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProduction'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.MasterUsername", - "category": "Best Practice", - "startLine": 275, - "startColumn": 7, - "endLine": 275, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.BackupRetentionPeriod", - "category": "Best Practice", - "startLine": 279, - "startColumn": 7, - "endLine": 279, - "endColumn": 28, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Fn::If on condition 'IsProduction'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'MultiAZ' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.MultiAZ", - "category": "Best Practice", - "startLine": 280, - "startColumn": 7, - "endLine": 280, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (condition reference: IsProduction)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DatabaseSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 293, - "startColumn": 7, - "endLine": 293, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DatabaseSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 294, - "startColumn": 7, - "endLine": 294, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LambdaFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 305, - "startColumn": 7, - "endLine": 305, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LambdaRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.RoleName", - "category": "Best Practice", - "startLine": 343, - "startColumn": 7, - "endLine": 343, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DatabaseAlarm", - "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" - }, - "propertyPath": "Properties.AlarmName", - "category": "Best Practice", - "startLine": 369, - "startColumn": 7, - "endLine": 369, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SNSTopic", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.TopicName", - "category": "Best Practice", - "startLine": 390, - "startColumn": 7, - "endLine": 390, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" - } - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BastionSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BastionSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 203, - "startColumn": 5, - "endLine": 203, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DatabaseSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "DatabaseSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 292, - "startColumn": 5, - "endLine": 292, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LambdaRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "LambdaRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 342, - "startColumn": 5, - "endLine": 342, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DatabaseAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "DatabaseAlarm", - "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 368, - "startColumn": 5, - "endLine": 368, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "lsp/condition-usage.json": { - "filePath": "lsp/condition-usage.json", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 6, - "informational": 13, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3016", - "severity": "ERROR", - "message": "UpdatePolicy is not supported on resource type 'AWS::S3::Bucket'", - "source": "CFN_LINT", - "entity": { - "logicalId": "ProductionBucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "UpdatePolicy", - "suggestedFix": "Remove UpdatePolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::ElastiCache::ReplicationGroup, AWS::Elasticsearch::Domain, AWS::Lambda::Alias, AWS::OpenSearchService::Domain", - "category": "Resource", - "startLine": 75, - "startColumn": 7, - "endLine": 75, - "endColumn": 20, - "ruleDescription": "Check UpdatePolicy values for Resources", - "phase": "LINT" - }, - { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", - "source": "CFN_LINT", - "entity": { - "logicalId": "ProductionBucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName.Fn::If.2", - "category": "Best Practice", - "startLine": 62, - "startColumn": 13, - "endLine": 62, - "endColumn": 27, - "ruleDescription": "Check Fn::If has a path that cannot be reached", - "phase": "LINT" - }, - { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", - "source": "CFN_LINT", - "entity": { - "logicalId": "ProductionBucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.VersioningConfiguration.Status.Fn::If.2", - "category": "Best Practice", - "startLine": 70, - "startColumn": 15, - "endLine": 70, - "endColumn": 25, - "ruleDescription": "Check Fn::If has a path that cannot be reached", - "phase": "LINT" - }, - { - "ruleId": "W2501", - "severity": "WARN", - "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", - "source": "CFN_LINT", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 97, - "startColumn": 9, - "endLine": 97, - "endColumn": 28, - "ruleDescription": "Check if Password Properties are correctly configured", - "phase": "LINT" - }, - { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'NotProduction' is not used by any resource or Fn::If", - "source": "CFN_LINT", - "entity": { - "logicalId": "NotProduction", - "entityType": "Condition" - }, - "propertyPath": "Conditions/NotProduction", - "category": "Best Practice", - "startLine": 47, - "startColumn": 5, - "endLine": 47, - "endColumn": 19, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" - }, - { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 93, - "startColumn": 7, - "endLine": 93, - "endColumn": 18, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" - }, - { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", - "source": "ENGINE", - "entity": { - "logicalId": "ConditionalResource", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 104, - "startColumn": 9, - "endLine": 104, - "endColumn": 17, - "ruleDescription": "Hardcoded AMI ID", - "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": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "category": "Best Practice", - "startLine": 90, - "startColumn": 5, - "endLine": 90, - "endColumn": 14, - "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": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "category": "Best Practice", - "startLine": 90, - "startColumn": 5, - "endLine": 90, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" - }, - { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 93, - "startColumn": 7, - "endLine": 93, - "endColumn": 18, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ProductionBucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 58, - "startColumn": 9, - "endLine": 58, - "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProduction'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DevelopmentBucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 87, - "startColumn": 9, - "endLine": 87, - "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 95, - "startColumn": 9, - "endLine": 95, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.MasterUsername", - "category": "Best Practice", - "startLine": 96, - "startColumn": 9, - "endLine": 96, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ConditionalResource", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 104, - "startColumn": 9, - "endLine": 104, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ConditionalResource", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 105, - "startColumn": 9, - "endLine": 105, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Fn::If on condition 'IsProductionAndCreateDB'" - } - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ProductionBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ProductionBucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 57, - "startColumn": 7, - "endLine": 57, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DevelopmentBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "DevelopmentBucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 86, - "startColumn": 7, - "endLine": 86, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Database' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 93, - "startColumn": 7, - "endLine": 93, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "lsp/condition-usage.yaml": { - "filePath": "lsp/condition-usage.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 8, - "counts": { - "fatal": 0, - "errors": 7, - "warnings": 7, - "informational": 21, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E1028", - "severity": "ERROR", - "message": "Fn::If first element must be the name of a condition, not an expression", - "source": "SCHEMA", - "entity": { - "logicalId": "LogicalConditionResource", - "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" - }, - "propertyPath": "Properties.AlarmName.Fn::If.0", - "category": "Intrinsic Function", - "startLine": 172, - "startColumn": 18, - "endLine": 172, - "endColumn": 19, - "ruleDescription": "Fn::If condition must exist in Conditions section", - "phase": "PARSE" - }, - { - "ruleId": "E1028", - "severity": "ERROR", - "message": "Fn::If first element must be the name of a condition, not an expression", - "source": "SCHEMA", - "entity": { - "logicalId": "LogicalConditionResource", - "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" - }, - "propertyPath": "Properties.Threshold.Fn::If.0", - "category": "Intrinsic Function", - "startLine": 184, - "startColumn": 17, - "endLine": 184, - "endColumn": 18, - "ruleDescription": "Fn::If condition must exist in Conditions section", - "phase": "PARSE" - }, - { - "ruleId": "E1028", - "severity": "ERROR", - "message": "Fn::If first element must be the name of a condition, not an expression", - "source": "SCHEMA", - "entity": { - "logicalId": "LogicalConditionResource", - "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" - }, - "propertyPath": "Properties.TreatMissingData.Fn::If.0", - "category": "Intrinsic Function", - "startLine": 192, - "startColumn": 18, - "endLine": 192, - "endColumn": 19, - "ruleDescription": "Fn::If condition must exist in Conditions section", - "phase": "PARSE" - }, - { - "ruleId": "E1028", - "severity": "ERROR", - "message": "Fn::If first element must be the name of a condition, not an expression", - "source": "SCHEMA", - "entity": { - "logicalId": "LogicalConditionalOutput", - "entityType": "Output" - }, - "propertyPath": "Outputs/LogicalConditionalOutput/Value/Fn::If/0", - "category": "Intrinsic Function", - "startLine": 236, - "startColumn": 18, - "endLine": 236, - "endColumn": 19, - "ruleDescription": "Fn::If condition must exist in Conditions section", - "phase": "PARSE" - }, - { - "ruleId": "E1028", - "severity": "ERROR", - "message": "Fn::If first element must be the name of a condition, not an expression", - "source": "SCHEMA", - "entity": { - "logicalId": "LogicalConditionalOutput", - "entityType": "Output" - }, - "propertyPath": "Outputs/LogicalConditionalOutput/Value/Fn::If/2/Fn::If/0", - "category": "Intrinsic Function", - "startLine": 241, - "startColumn": 21, - "endLine": 241, - "endColumn": 22, - "ruleDescription": "Fn::If condition must exist in Conditions section", - "phase": "PARSE" - }, - { - "ruleId": "E1028", - "severity": "ERROR", - "message": "Fn::If first element must be the name of a condition, not an expression", - "source": "SCHEMA", - "entity": { - "logicalId": "EdgeCaseOutput", - "entityType": "Output" - }, - "propertyPath": "Outputs/EdgeCaseOutput/Value/Fn::If/0", - "category": "Intrinsic Function", - "startLine": 251, - "startColumn": 19, - "endLine": 251, - "endColumn": 20, - "ruleDescription": "Fn::If condition must exist in Conditions section", - "phase": "PARSE" - }, - { - "ruleId": "E3016", - "severity": "ERROR", - "message": "UpdatePolicy is not supported on resource type 'AWS::S3::Bucket'", - "source": "CFN_LINT", - "entity": { - "logicalId": "ProductionBucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "UpdatePolicy", - "suggestedFix": "Remove UpdatePolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::ElastiCache::ReplicationGroup, AWS::Elasticsearch::Domain, AWS::Lambda::Alias, AWS::OpenSearchService::Domain", - "category": "Resource", - "startLine": 78, - "startColumn": 5, - "endLine": 78, - "endColumn": 17, - "ruleDescription": "Check UpdatePolicy values for Resources", - "phase": "LINT" - }, - { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", - "source": "CFN_LINT", - "entity": { - "logicalId": "ProductionBucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName.Fn::If.2", - "category": "Best Practice", - "startLine": 57, - "startColumn": 54, - "endLine": 57, - "endColumn": 55, - "ruleDescription": "Check Fn::If has a path that cannot be reached", - "phase": "LINT" - }, - { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", - "source": "CFN_LINT", - "entity": { - "logicalId": "ProductionBucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.VersioningConfiguration.Status.Fn::If.2", - "category": "Best Practice", - "startLine": 62, - "startColumn": 43, - "endLine": 62, - "endColumn": 44, - "ruleDescription": "Check Fn::If has a path that cannot be reached", - "phase": "LINT" - }, - { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", - "source": "CFN_LINT", - "entity": { - "logicalId": "ProductionBucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.PublicAccessBlockConfiguration.BlockPublicAcls.Fn::If.2", - "category": "Best Practice", - "startLine": 69, - "startColumn": 13, - "endLine": 69, - "endColumn": 14, - "ruleDescription": "Check Fn::If has a path that cannot be reached", - "phase": "LINT" - }, - { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", - "source": "CFN_LINT", - "entity": { - "logicalId": "ProductionBucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.PublicAccessBlockConfiguration.BlockPublicPolicy.Fn::If.2", - "category": "Best Practice", - "startLine": 76, - "startColumn": 15, - "endLine": 76, - "endColumn": 16, - "ruleDescription": "Check Fn::If has a path that cannot be reached", - "phase": "LINT" - }, - { - "ruleId": "W2501", - "severity": "WARN", - "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", - "source": "CFN_LINT", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 98, - "startColumn": 7, - "endLine": 98, - "endColumn": 25, - "ruleDescription": "Check if Password Properties are correctly configured", - "phase": "LINT" - }, - { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 94, - "startColumn": 5, - "endLine": 94, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" - }, - { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", - "source": "ENGINE", - "entity": { - "logicalId": "ConditionalResource", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 104, - "startColumn": 7, - "endLine": 104, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", - "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": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "category": "Best Practice", - "startLine": 91, - "startColumn": 3, - "endLine": 91, - "endColumn": 11, - "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": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "category": "Best Practice", - "startLine": 91, - "startColumn": 3, - "endLine": 91, - "endColumn": 11, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" - }, - { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 94, - "startColumn": 5, - "endLine": 94, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ProductionBucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 57, - "startColumn": 7, - "endLine": 57, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProduction'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DevelopmentBucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 89, - "startColumn": 7, - "endLine": 89, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 96, - "startColumn": 7, - "endLine": 96, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.MasterUsername", - "category": "Best Practice", - "startLine": 97, - "startColumn": 7, - "endLine": 97, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ConditionalResource", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 104, - "startColumn": 7, - "endLine": 104, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ConditionalResource", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 107, - "startColumn": 7, - "endLine": 107, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Fn::If on condition 'IsProductionAndCreateDB'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ConditionalResource", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.SecurityGroups", - "category": "Best Practice", - "startLine": 109, - "startColumn": 7, - "endLine": 109, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ProductionSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 137, - "startColumn": 7, - "endLine": 137, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DevSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 143, - "startColumn": 7, - "endLine": 143, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "NestedConditionResource", - "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" - }, - "propertyPath": "Properties.Bucket", - "category": "Best Practice", - "startLine": 149, - "startColumn": 7, - "endLine": 149, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProduction'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LogicalConditionResource", - "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" - }, - "propertyPath": "Properties.AlarmName", - "category": "Best Practice", - "startLine": 171, - "startColumn": 7, - "endLine": 171, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition '__inline_cond_131'" - } - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ProductionBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ProductionBucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 55, - "startColumn": 5, - "endLine": 55, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DevelopmentBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "DevelopmentBucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 88, - "startColumn": 5, - "endLine": 88, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Database' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 94, - "startColumn": 5, - "endLine": 94, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ProductionSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ProductionSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 136, - "startColumn": 5, - "endLine": 136, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DevSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "DevSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 142, - "startColumn": 5, - "endLine": 142, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LogicalConditionResource' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "LogicalConditionResource", - "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 170, - "startColumn": 5, - "endLine": 170, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "lsp/constants.json": { - "filePath": "lsp/constants.json", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 5, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F0005", - "severity": "FATAL", - "message": "'Constants' is not a valid top-level template section", - "source": "SCHEMA", - "propertyPath": "Constants", - "category": "Structure", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 13, - "ruleDescription": "Top-level keys must be valid section names", - "phase": "SCHEMA" - }, - { - "ruleId": "F1018", - "severity": "FATAL", - "message": "Fn::Sub variable '${sub}' does not reference a valid resource, parameter, or pseudo-parameter", - "source": "SCHEMA", - "entity": { - "logicalId": "Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Metadata.Test", - "category": "Intrinsic Function", - "startLine": 19, - "startColumn": 9, - "endLine": 19, - "endColumn": 14, - "ruleDescription": "Sub variables must resolve", - "phase": "SCHEMA" - }, - { - "ruleId": "F1018", - "severity": "FATAL", - "message": "Fn::Sub variable '${foo}' does not reference a valid resource, parameter, or pseudo-parameter", - "source": "SCHEMA", - "entity": { - "logicalId": "Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Intrinsic Function", - "startLine": 27, - "startColumn": 9, - "endLine": 27, - "endColumn": 20, - "ruleDescription": "Sub variables must resolve", - "phase": "SCHEMA", - "context": { - "resolutionSource": "dynamic (Sub:${foo})" - } - }, - { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'obj' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'Bucket', 'PersonalS3']", - "source": "SCHEMA", - "entity": { - "logicalId": "Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Metadata.TestObj", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 22, - "startColumn": 9, - "endLine": 22, - "endColumn": 17, - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" - }, - { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'foo' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'Bucket', 'PersonalS3']", - "source": "SCHEMA", - "entity": { - "logicalId": "Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags.0.Value", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 33, - "startColumn": 13, - "endLine": 33, - "endColumn": 19, - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 27, - "startColumn": 9, - "endLine": 27, - "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:${foo})" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "PersonalS3", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 43, - "startColumn": 9, - "endLine": 43, - "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'PersonalS3' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "PersonalS3", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 42, - "startColumn": 7, - "endLine": 42, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "lsp/constants.yaml": { - "filePath": "lsp/constants.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 5, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F0005", - "severity": "FATAL", - "message": "'Constants' is not a valid top-level template section", - "source": "SCHEMA", - "propertyPath": "Constants", - "category": "Structure", - "startLine": 4, - "startColumn": 1, - "endLine": 4, - "endColumn": 10, - "ruleDescription": "Top-level keys must be valid section names", - "phase": "SCHEMA" - }, - { - "ruleId": "F1018", - "severity": "FATAL", - "message": "Fn::Sub variable '${sub}' does not reference a valid resource, parameter, or pseudo-parameter", - "source": "SCHEMA", - "entity": { - "logicalId": "Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Metadata.Test", - "category": "Intrinsic Function", - "startLine": 15, - "startColumn": 7, - "endLine": 15, - "endColumn": 11, - "ruleDescription": "Sub variables must resolve", - "phase": "SCHEMA" - }, - { - "ruleId": "F1018", - "severity": "FATAL", - "message": "Fn::Sub variable '${foo}' does not reference a valid resource, parameter, or pseudo-parameter", - "source": "SCHEMA", - "entity": { - "logicalId": "Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Intrinsic Function", - "startLine": 18, - "startColumn": 7, - "endLine": 18, - "endColumn": 17, - "ruleDescription": "Sub variables must resolve", - "phase": "SCHEMA", - "context": { - "resolutionSource": "dynamic (Sub:${foo})" - } - }, - { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'obj' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'Bucket', 'PersonalS3']", - "source": "SCHEMA", - "entity": { - "logicalId": "Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Metadata.TestObj", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 16, - "startColumn": 7, - "endLine": 16, - "endColumn": 14, - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" - }, - { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'foo' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'Bucket', 'PersonalS3']", - "source": "SCHEMA", - "entity": { - "logicalId": "Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags.0.Value", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 21, - "startColumn": 11, - "endLine": 21, - "endColumn": 16, - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 18, - "startColumn": 7, - "endLine": 18, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:${foo})" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "PersonalS3", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 26, - "startColumn": 7, - "endLine": 26, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'PersonalS3' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "PersonalS3", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "lsp/parameter_usage.json": { - "filePath": "lsp/parameter_usage.json", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 3, - "informational": 10, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3001", - "severity": "ERROR", - "message": "Resource 'Bucket1' has invalid property 'Conditions'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", - "source": "CFN_LINT", - "entity": { - "logicalId": "Bucket1", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "category": "Resource", - "startLine": 31, - "startColumn": 7, - "endLine": 31, - "endColumn": 18, - "ruleDescription": "Basic CloudFormation Resource Check", - "phase": "PARSE" - }, - { - "ruleId": "W7001", - "severity": "WARN", - "message": "Mapping 'EnvMap' is not referenced by any Fn::FindInMap", - "source": "CFN_LINT", - "entity": { - "logicalId": "EnvMap", - "entityType": "Mapping" - }, - "propertyPath": "Mappings/EnvMap", - "category": "Best Practice", - "startLine": 11, - "startColumn": 5, - "endLine": 11, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", - "phase": "LINT" - }, - { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'IsProduction' is not used by any resource or Fn::If", - "source": "CFN_LINT", - "entity": { - "logicalId": "IsProduction", - "entityType": "Condition" - }, - "propertyPath": "Conditions/IsProduction", - "category": "Best Practice", - "startLine": 21, - "startColumn": 5, - "endLine": 21, - "endColumn": 18, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" - }, - { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'IsDevEnv' is not used by any resource or Fn::If", - "source": "CFN_LINT", - "entity": { - "logicalId": "IsDevEnv", - "entityType": "Condition" - }, - "propertyPath": "Conditions/IsDevEnv", - "category": "Best Practice", - "startLine": 24, - "startColumn": 5, - "endLine": 24, - "endColumn": 14, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket1", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 33, - "startColumn": 9, - "endLine": 33, - "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket2", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 41, - "startColumn": 9, - "endLine": 41, - "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket3", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 49, - "startColumn": 9, - "endLine": 49, - "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket4", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 57, - "startColumn": 9, - "endLine": 57, - "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket5", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 65, - "startColumn": 9, - "endLine": 65, - "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Bucket1' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket1", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 32, - "startColumn": 7, - "endLine": 32, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Bucket2' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket2", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 40, - "startColumn": 7, - "endLine": 40, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Bucket3' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket3", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 48, - "startColumn": 7, - "endLine": 48, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Bucket4' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket4", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 56, - "startColumn": 7, - "endLine": 56, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Bucket5' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket5", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 64, - "startColumn": 7, - "endLine": 64, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "lsp/parameter_usage.yaml": { - "filePath": "lsp/parameter_usage.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 3, - "informational": 14, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3001", - "severity": "ERROR", - "message": "Resource 'Bucket1' has invalid property 'Conditions'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", - "source": "CFN_LINT", - "entity": { - "logicalId": "Bucket1", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "category": "Resource", - "startLine": 27, - "startColumn": 5, - "endLine": 27, - "endColumn": 15, - "ruleDescription": "Basic CloudFormation Resource Check", - "phase": "PARSE" - }, - { - "ruleId": "W7001", - "severity": "WARN", - "message": "Mapping 'EnvMap' is not referenced by any Fn::FindInMap", - "source": "CFN_LINT", - "entity": { - "logicalId": "EnvMap", - "entityType": "Mapping" - }, - "propertyPath": "Mappings/EnvMap", - "category": "Best Practice", - "startLine": 12, - "startColumn": 3, - "endLine": 12, - "endColumn": 9, - "ruleDescription": "Check if Mappings are Used", - "phase": "LINT" - }, - { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'IsProduction' is not used by any resource or Fn::If", - "source": "CFN_LINT", - "entity": { - "logicalId": "IsProduction", - "entityType": "Condition" - }, - "propertyPath": "Conditions/IsProduction", - "category": "Best Practice", - "startLine": 20, - "startColumn": 3, - "endLine": 20, - "endColumn": 15, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" - }, - { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'IsDevEnv' is not used by any resource or Fn::If", - "source": "CFN_LINT", - "entity": { - "logicalId": "IsDevEnv", - "entityType": "Condition" - }, - "propertyPath": "Conditions/IsDevEnv", - "category": "Best Practice", - "startLine": 21, - "startColumn": 3, - "endLine": 21, - "endColumn": 11, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket1", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 29, - "startColumn": 7, - "endLine": 29, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket2", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket3", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 42, - "startColumn": 7, - "endLine": 42, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket4", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 48, - "startColumn": 7, - "endLine": 48, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket5", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 53, - "startColumn": 7, - "endLine": 53, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket6", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 58, - "startColumn": 7, - "endLine": 58, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket7", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 64, - "startColumn": 7, - "endLine": 64, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Bucket1' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket1", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 28, - "startColumn": 5, - "endLine": 28, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Bucket2' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket2", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 34, - "startColumn": 5, - "endLine": 34, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Bucket3' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket3", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 41, - "startColumn": 5, - "endLine": 41, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Bucket4' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket4", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 47, - "startColumn": 5, - "endLine": 47, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Bucket5' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket5", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 52, - "startColumn": 5, - "endLine": 52, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Bucket6' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket6", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 57, - "startColumn": 5, - "endLine": 57, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Bucket7' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket7", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 63, - "startColumn": 5, - "endLine": 63, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "lsp/simple.json": { - "filePath": "lsp/simple.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MyS3Bucket", - "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": 5, - "endLine": 4, - "endColumn": 16, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "lsp/simple.yaml": { - "filePath": "lsp/simple.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MyS3Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "lsp/test-template.yaml": { - "filePath": "lsp/test-template.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 2, - "warnings": 0, - "informational": 2, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3038", - "severity": "ERROR", - "message": "Resource type 'AWS::Serverless::Function' requires the AWS::Serverless-2016-10-31 transform", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyFunction", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" - }, - "category": "Structure", - "startLine": 2, - "startColumn": 3, - "endLine": 2, - "endColumn": 13, - "ruleDescription": "Check if Serverless Resources have Serverless Transform", - "phase": "LINT" - }, - { - "ruleId": "E3038", - "severity": "ERROR", - "message": "Resource type 'AWS::Serverless::Api' requires the AWS::Serverless-2016-10-31 transform", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyApi", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Api" - }, - "category": "Structure", - "startLine": 6, - "startColumn": 3, - "endLine": 6, - "endColumn": 8, - "ruleDescription": "Check if Serverless Resources have Serverless Transform", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MyFunction", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 4, - "startColumn": 5, - "endLine": 4, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyApi' of type 'AWS::Serverless::Api' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MyApi", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Api" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "malformed.yaml": { - "filePath": "malformed.yaml", - "status": "ERROR", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F1101", - "severity": "FATAL", - "message": "YAML parse error: mapping values are not allowed in this context at byte 10 line 1 column 11", - "source": "SCHEMA", - "category": "Structure", - "startLine": 1, - "startColumn": 11, - "endLine": 1, - "endColumn": 11, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" - } - ] - }, - "public/lambda-poller.json": { - "filePath": "public/lambda-poller.json", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 9, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs6.10' was deprecated on '2019-08-12'. Creation was disabled on '2019-07-12', and updates were disabled on '2019-08-12'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "PollerFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 92, - "startColumn": 17, - "endLine": 92, - "endColumn": 25, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs6.10", - "lifecycle": "end-of-life" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "PollerFunctionIamRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Path", - "category": "Best Practice", - "startLine": 37, - "startColumn": 17, - "endLine": 37, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "PollerEventRuleIamRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Path", - "category": "Best Practice", - "startLine": 133, - "startColumn": 17, - "endLine": 133, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "PollerFunctionEventInvokePermission", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 192, - "startColumn": 17, - "endLine": 192, - "endColumn": 24, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "PollerFunctionEventInvokePermission", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 193, - "startColumn": 17, - "endLine": 193, - "endColumn": 30, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'PollerFunction'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "PollerFunctionEventInvokePermission", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 196, - "startColumn": 17, - "endLine": 196, - "endColumn": 27, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "PollerFunctionEventInvokePermission", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 197, - "startColumn": 17, - "endLine": 197, - "endColumn": 27, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt PollerEventRule.Arn" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'PollerFunctionIamRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "PollerFunctionIamRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 20, - "startColumn": 13, - "endLine": 20, - "endColumn": 24, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'PollerEventRuleIamRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "PollerEventRuleIamRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 116, - "startColumn": 13, - "endLine": 116, - "endColumn": 24, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'PollerEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "PollerEventRule", - "entityType": "Resource", - "resourceType": "AWS::Events::Rule" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 162, - "startColumn": 13, - "endLine": 162, - "endColumn": 24, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "public/lambda-poller.yaml": { - "filePath": "public/lambda-poller.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 9, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs6.10' was deprecated on '2019-08-12'. Creation was disabled on '2019-07-12', and updates were disabled on '2019-08-12'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "PollerFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 151, - "startColumn": 7, - "endLine": 151, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs6.10", - "lifecycle": "end-of-life" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "PollerFunctionIamRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Path", - "category": "Best Practice", - "startLine": 27, - "startColumn": 7, - "endLine": 27, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "PollerEventRuleIamRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Path", - "category": "Best Practice", - "startLine": 172, - "startColumn": 7, - "endLine": 172, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "PollerFunctionEventInvokePermission", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 197, - "startColumn": 7, - "endLine": 197, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "PollerFunctionEventInvokePermission", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 198, - "startColumn": 7, - "endLine": 198, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'PollerFunction'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "PollerFunctionEventInvokePermission", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 199, - "startColumn": 7, - "endLine": 199, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "PollerFunctionEventInvokePermission", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 200, - "startColumn": 7, - "endLine": 200, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt PollerEventRule.Arn" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'PollerFunctionIamRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "PollerFunctionIamRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'PollerEventRuleIamRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "PollerEventRuleIamRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 162, - "startColumn": 5, - "endLine": 162, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'PollerEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "PollerEventRule", - "entityType": "Resource", - "resourceType": "AWS::Events::Rule" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 185, - "startColumn": 5, - "endLine": 185, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "public/rds-cluster.yaml": { - "filePath": "public/rds-cluster.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 1, - "informational": 7, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E9006", - "severity": "ERROR", - "message": "'aurora' is not one of ['aurora-mysql', 'aurora-postgresql', 'mysql', 'postgres']", - "source": "CFN_LINT", - "entity": { - "logicalId": "DBCluster", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "propertyPath": "Properties.Engine", - "category": "Schema", - "startLine": 24, - "startColumn": 7, - "endLine": 24, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Property value not valid for conditional extension enum", - "phase": "SCHEMA" - }, - { - "ruleId": "W1011", - "severity": "WARN", - "message": "Use dynamic references (e.g., SSM SecureString) instead of parameter 'DatabaseMasterPassword' for secrets", - "source": "CFN_LINT", - "entity": { - "logicalId": "DBCluster", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 22, - "startColumn": 7, - "endLine": 22, - "endColumn": 25, - "ruleDescription": "Instead of REFing a parameter for a secret use a dynamic reference", - "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": "DBCluster", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "category": "Best Practice", - "startLine": 18, - "startColumn": 3, - "endLine": 18, - "endColumn": 12, - "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": "DBCluster", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "category": "Best Practice", - "startLine": 18, - "startColumn": 3, - "endLine": 18, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" - }, - { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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": "DBCluster", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DBCluster", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "propertyPath": "Properties.MasterUsername", - "category": "Best Practice", - "startLine": 21, - "startColumn": 7, - "endLine": 21, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "parameter 'DatabaseMasterUsername' (type String)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DatabaseName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DBCluster", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "propertyPath": "Properties.DatabaseName", - "category": "Best Practice", - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'DatabaseName' (type String)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DBCluster", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 24, - "startColumn": 7, - "endLine": 24, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'EngineMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DBCluster", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "propertyPath": "Properties.EngineMode", - "category": "Best Practice", - "startLine": 25, - "startColumn": 7, - "endLine": 25, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 56, + "startColumn": 5, + "endLine": 56, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "public/watchmaker.json": { - "filePath": "public/watchmaker.json", + "integration/metdata.yaml": { + "filePath": "integration/metdata.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 41, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "WatchmakerInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.cw-agent-install.commands.01-get-cloudwatch-agent.command.Fn::Join", - "category": "Intrinsic Function", - "startLine": 647, - "startColumn": 37, - "endLine": 647, - "endColumn": 46, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "WatchmakerInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.cw-agent-install.commands.02-extract-cloudwatch-agent.command.Fn::Join", - "category": "Intrinsic Function", - "startLine": 662, - "startColumn": 37, - "endLine": 662, - "endColumn": 46, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "WatchmakerInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.cw-agent-install.commands.10-install-cloudwatch-agent.command.Fn::Join", - "category": "Intrinsic Function", - "startLine": 673, - "startColumn": 37, - "endLine": 673, - "endColumn": 46, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "WatchmakerInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.finalize.commands.10-signal-success.command.Fn::Join.1.4.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 816, - "startColumn": 57, - "endLine": 816, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "WatchmakerInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.finalize.commands.10-signal-success.command.Fn::Join.1.5.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 833, - "startColumn": 57, - "endLine": 833, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "WatchmakerInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.make-app.commands.05-get-appscript.command.Fn::Join", - "category": "Intrinsic Function", - "startLine": 869, - "startColumn": 37, - "endLine": 869, - "endColumn": 46, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "WatchmakerInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.make-app.commands.10-make-app.command.Fn::Join", - "category": "Intrinsic Function", - "startLine": 887, - "startColumn": 37, - "endLine": 887, - "endColumn": 46, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "WatchmakerInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.setup.files./etc/cfn/cfn-hup.conf.content.Fn::Join.1.7.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 932, - "startColumn": 57, - "endLine": 932, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "WatchmakerInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.setup.files./etc/cfn/cfn-hup.conf.content.Fn::Join.1.8.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 950, - "startColumn": 57, - "endLine": 950, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "WatchmakerInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.setup.files./etc/cfn/hooks.d/cfn-auto-reloader.conf.content.Fn::Join.1.7.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 993, - "startColumn": 57, - "endLine": 993, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 1, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "WatchmakerInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.setup.files./etc/cfn/hooks.d/cfn-auto-reloader.conf.content.Fn::Join.1.8.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1010, - "startColumn": 57, - "endLine": 1010, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "startLine": 21, + "startColumn": 1, + "endLine": 21, + "endColumn": 10, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" }, { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'VpcId' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "WatchmakerInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "VpcId", + "entityType": "Parameter" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.setup.files./etc/cfn/scripts/watchmaker-install.sh.content.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1038, - "startColumn": 37, - "endLine": 1038, - "endColumn": 46, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Parameters/VpcId", + "category": "Best Practice", + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 8, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" + } + ] + }, + "integration/module-sub-resources.yaml": { + "filePath": "integration/module-sub-resources.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "integration/ref-no-value.yaml": { + "filePath": "integration/ref-no-value.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 7, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "ruleId": "E3003", + "severity": "ERROR", + "message": "'Key' is a required property", "source": "CFN_LINT", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "IamRole1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-launch.commands.10-watchmaker-launch.command.Fn::Join.1.3.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1101, - "startColumn": 57, - "endLine": 1101, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.Tags", + "suggestedFix": "Tag Key cannot be null or AWS::NoValue", + "category": "Resource", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 11, + "ruleDescription": "Required Resource properties are missing", "phase": "LINT" }, { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "ruleId": "E3003", + "severity": "ERROR", + "message": "'DefaultCacheBehavior' is a required property", "source": "CFN_LINT", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "CloudFront2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-launch.commands.10-watchmaker-launch.command.Fn::Join.1.4.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1119, - "startColumn": 57, - "endLine": 1119, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.DistributionConfig", + "suggestedFix": "Add DefaultCacheBehavior to the Fn::If branch", + "category": "Resource", + "startLine": 43, + "startColumn": 7, + "endLine": 43, + "endColumn": 25, + "ruleDescription": "Required Resource properties are missing", "phase": "LINT" }, { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "ruleId": "E3003", + "severity": "ERROR", + "message": "'TargetOriginId' is a required property", "source": "CFN_LINT", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "CloudFront2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-launch.commands.10-watchmaker-launch.command.Fn::Join.1.5.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1137, - "startColumn": 57, - "endLine": 1137, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.DistributionConfig.DefaultCacheBehavior.Fn::If.2", + "suggestedFix": "Add TargetOriginId to the DefaultCacheBehavior", + "category": "Resource", + "startLine": 49, + "startColumn": 13, + "endLine": 49, + "endColumn": 14, + "ruleDescription": "Required Resource properties are missing", "phase": "LINT" }, { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "ruleId": "E3003", + "severity": "ERROR", + "message": "'ViewerProtocolPolicy' is a required property", "source": "CFN_LINT", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "CloudFront2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-launch.commands.10-watchmaker-launch.command.Fn::Join.1.6.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1155, - "startColumn": 57, - "endLine": 1155, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.DistributionConfig.DefaultCacheBehavior.Fn::If.2", + "suggestedFix": "Add ViewerProtocolPolicy to the DefaultCacheBehavior", + "category": "Resource", + "startLine": 49, + "startColumn": 13, + "endLine": 49, + "endColumn": 14, + "ruleDescription": "Required Resource properties are missing", "phase": "LINT" }, { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "ruleId": "E3024", + "severity": "ERROR", + "message": "'Key' is a required property", "source": "CFN_LINT", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "IamRole1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-launch.commands.10-watchmaker-launch.command.Fn::Join.1.7.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1173, - "startColumn": 57, - "endLine": 1173, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.Tags", + "suggestedFix": "Tag Key cannot be null or AWS::NoValue", + "category": "Resource", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 11, + "ruleDescription": "Validate tag configuration", "phase": "LINT" }, { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "ruleId": "E3530", + "severity": "ERROR", + "message": "'Statement' is a required property", "source": "CFN_LINT", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "IamRole1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-launch.commands.10-watchmaker-launch.command.Fn::Join.1.8.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1191, - "startColumn": 57, - "endLine": 1191, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.AssumeRolePolicyDocument", + "suggestedFix": "Add a Statement array to the AssumeRolePolicyDocument", + "category": "Resource", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 31, + "ruleDescription": "Validate IAM trust policies", "phase": "LINT" }, { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "ruleId": "E3530", + "severity": "ERROR", + "message": "'Statement' is a required property", "source": "CFN_LINT", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "IamRole3", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-update.commands.10-watchmaker-update.command.Fn::Join.1.4.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1226, - "startColumn": 57, - "endLine": 1226, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.AssumeRolePolicyDocument", + "suggestedFix": "Add a Statement array to the AssumeRolePolicyDocument", + "category": "Resource", + "startLine": 30, + "startColumn": 7, + "endLine": 30, + "endColumn": 31, + "ruleDescription": "Validate IAM trust policies", "phase": "LINT" }, { - "ruleId": "I1022", + "ruleId": "I9040", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Resource 'IamRole3' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "IamRole3", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-update.commands.10-watchmaker-update.command.Fn::Join.1.5.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1244, - "startColumn": 57, - "endLine": 1244, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 31, + "startColumn": 7, + "endLine": 31, + "endColumn": 11, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I1022", + "ruleId": "I9040", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Resource 'CloudFront2' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "CloudFront2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-update.commands.10-watchmaker-update.command.Fn::Join.1.6.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1262, - "startColumn": 57, - "endLine": 1262, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 42, + "startColumn": 5, + "endLine": 42, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "integration/ref-types.yaml": { + "filePath": "integration/ref-types.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 13, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 1, + "informational": 40, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "ruleId": "E1041", + "severity": "ERROR", + "message": "{'Ref': 'FargateTaskRole'} does not match destination format of 'AWS::EC2::VPC.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "Subnet2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-update.commands.10-watchmaker-update.command.Fn::Join.1.7.Fn::If.1.Fn::Join", + "propertyPath": "Properties.VpcId", + "suggestedFix": "Use a Ref to a resource whose type matches the expected format", "category": "Intrinsic Function", - "startLine": 1280, - "startColumn": 57, - "endLine": 1280, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", + "startLine": 45, + "startColumn": 7, + "endLine": 45, + "endColumn": 12, + "ruleDescription": "Check if Ref matches destination format", "phase": "LINT" }, { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", "source": "CFN_LINT", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "LaunchConfiguration", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-update.commands.10-watchmaker-update.command.Fn::Join.1.8.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1298, - "startColumn": 57, - "endLine": 1298, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "category": "Deprecation", + "startLine": 111, + "startColumn": 3, + "endLine": 111, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" }, { - "ruleId": "I1022", + "ruleId": "I9001", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "Vpc", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-update.commands.10-watchmaker-update.command.Fn::Join.1.9.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1316, - "startColumn": 57, - "endLine": 1316, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I1022", + "ruleId": "I9001", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "Subnet1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags.0.Value.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1440, - "startColumn": 29, - "endLine": 1440, - "endColumn": 38, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 39, + "startColumn": 7, + "endLine": 39, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I1022", + "ruleId": "I9001", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "Subnet1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.UserData.Fn::Base64.Fn::Join.1.88.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1596, - "startColumn": 45, - "endLine": 1596, - "endColumn": 54, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 40, + "startColumn": 7, + "endLine": 40, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc'" + } }, { - "ruleId": "I1022", + "ruleId": "I9001", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "Subnet2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.UserData.Fn::Base64.Fn::Join.1.89.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1613, - "startColumn": 45, - "endLine": 1613, - "endColumn": 54, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 44, + "startColumn": 7, + "endLine": 44, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I1022", + "ruleId": "I9001", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "Subnet2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.UserData.Fn::Base64.Fn::Join.1.98.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1642, - "startColumn": 45, - "endLine": 1642, - "endColumn": 54, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 45, + "startColumn": 7, + "endLine": 45, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'FargateTaskRole'" + } }, { - "ruleId": "I1022", + "ruleId": "I9001", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "SecurityGroup1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.UserData.Fn::Base64.Fn::Join.1.99.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1659, - "startColumn": 45, - "endLine": 1659, - "endColumn": 54, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 49, + "startColumn": 7, + "endLine": 49, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I1022", + "ruleId": "I9001", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstanceLogGroup", + "logicalId": "SecurityGroup1", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.LogGroupName.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1691, - "startColumn": 21, - "endLine": 1691, - "endColumn": 30, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 50, + "startColumn": 7, + "endLine": 50, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstanceLogGroup", + "logicalId": "SecurityGroup2", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::EC2::SecurityGroup" }, + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 1687, - "startColumn": 9, - "endLine": 1687, - "endColumn": 36, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 54, + "startColumn": 7, + "endLine": 54, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstanceLogGroup", + "logicalId": "LoadBalancer", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 1687, - "startColumn": 9, - "endLine": 1687, - "endColumn": 36, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 58, + "startColumn": 7, + "endLine": 58, + "endColumn": 11, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "LoadBalancer", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.BlockDeviceMappings", + "propertyPath": "Properties.Scheme", "category": "Best Practice", - "startLine": 1342, - "startColumn": 17, - "endLine": 1342, - "endColumn": 37, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 59, + "startColumn": 7, + "endLine": 59, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "TaskDefinitionWithRefToResource", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 1398, - "startColumn": 17, - "endLine": 1398, - "endColumn": 25, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 72, + "startColumn": 7, + "endLine": 72, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'AmiId' (type AWS::EC2::Image::Id)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "TaskDefinitionWithRefToResource", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 1401, - "startColumn": 17, - "endLine": 1401, - "endColumn": 30, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 83, + "startColumn": 7, + "endLine": 83, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "parameter with AllowedValues" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "TaskDefinitionWithRefToResource", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.KeyName", + "propertyPath": "Properties.ExecutionRoleArn", "category": "Best Practice", - "startLine": 1404, - "startColumn": 17, - "endLine": 1404, - "endColumn": 25, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 84, + "startColumn": 7, + "endLine": 84, + "endColumn": 23, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "parameter 'KeyPairName' (type AWS::EC2::KeyPair::KeyName)" + "resolutionSource": "GetAtt FargateExecutionRole.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "TaskDefinitionWithRefToResource", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkInterfaces", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 1407, - "startColumn": 17, - "endLine": 1407, - "endColumn": 35, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 85, + "startColumn": 7, + "endLine": 85, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -18361,44 +11924,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "TaskDefinitionWithRefToResource", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.UserData", - "category": "Best Practice", - "startLine": 1451, - "startColumn": 17, - "endLine": 1451, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.NetworkMode", + "category": "Best Practice", + "startLine": 86, + "startColumn": 7, + "endLine": 86, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Base64 with unresolvable argument)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstanceLogGroup", + "logicalId": "TaskDefinitionWithRefToResource", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 1690, - "startColumn": 17, - "endLine": 1690, + "startLine": 87, + "startColumn": 7, + "endLine": 87, "endColumn": 30, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -18406,1643 +11968,1740 @@ } }, { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'WatchmakerInstanceLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstanceLogGroup", + "logicalId": "TaskDefinitionWithRefToResource", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 1689, - "startColumn": 13, - "endLine": 1689, - "endColumn": 24, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "quickstart/cis_benchmark.yaml": { - "filePath": "quickstart/cis_benchmark.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 79, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 75, - "informational": 142, - "debug": 0 + "startLine": 89, + "startColumn": 7, + "endLine": 89, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FargateTaskRole.Arn" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctiontForEvaluateCisBenchmarkingPreconditions", + "logicalId": "TaskDefinitionWithRefToParameter", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 176, - "startColumn": 9, - "endLine": 176, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 93, + "startColumn": 7, + "endLine": 93, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateRootAccountRule", + "logicalId": "TaskDefinitionWithRefToParameter", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 309, - "startColumn": 9, - "endLine": 309, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "propertyPath": "Properties.Cpu", + "category": "Best Practice", + "startLine": 104, + "startColumn": 7, + "endLine": 104, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForVpcFlowLogRule", + "logicalId": "TaskDefinitionWithRefToParameter", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 481, - "startColumn": 9, - "endLine": 481, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "propertyPath": "Properties.ExecutionRoleArn", + "category": "Best Practice", + "startLine": 105, + "startColumn": 7, + "endLine": 105, + "endColumn": 23, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "lifecycle": "create-only", + "resolutionSource": "GetAtt FargateExecutionRole.Arn" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForVpcDefaultSecurityGroupsRule", + "logicalId": "TaskDefinitionWithRefToParameter", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 551, - "startColumn": 9, - "endLine": 551, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "propertyPath": "Properties.Memory", + "category": "Best Practice", + "startLine": 106, + "startColumn": 7, + "endLine": 106, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForRoleForMfaOnUsersRule", + "logicalId": "TaskDefinitionWithRefToParameter", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 666, - "startColumn": 9, - "endLine": 666, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "propertyPath": "Properties.NetworkMode", + "category": "Best Practice", + "startLine": 107, + "startColumn": 7, + "endLine": 107, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluatePolicyPermissionsRule", + "logicalId": "TaskDefinitionWithRefToParameter", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 760, - "startColumn": 9, - "endLine": 760, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "propertyPath": "Properties.RequiresCompatibilities", + "category": "Best Practice", + "startLine": 108, + "startColumn": 7, + "endLine": 108, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateUserPolicyAssociationRule", + "logicalId": "TaskDefinitionWithRefToParameter", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 850, - "startColumn": 9, - "endLine": 850, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "propertyPath": "Properties.TaskRoleArn", + "category": "Best Practice", + "startLine": 110, + "startColumn": 7, + "endLine": 110, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "lifecycle": "create-only", + "resolutionSource": "GetAtt FargateTaskRole.Arn" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateCloudTrailRule", + "logicalId": "LaunchConfiguration", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 966, - "startColumn": 9, - "endLine": 966, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 114, + "startColumn": 7, + "endLine": 114, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateCloudTrailBucketRule", + "logicalId": "LaunchConfiguration", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 1082, - "startColumn": 9, - "endLine": 1082, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 115, + "startColumn": 7, + "endLine": 115, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AssociatePublicIpAddress' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateCloudTrailLogIntegrityRule", + "logicalId": "LaunchConfiguration", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 1178, - "startColumn": 9, - "endLine": 1178, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "propertyPath": "Properties.AssociatePublicIpAddress", + "category": "Best Practice", + "startLine": 116, + "startColumn": 7, + "endLine": 116, + "endColumn": 31, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForInstanceRoleUseRule", + "logicalId": "LaunchConfiguration", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 1260, - "startColumn": 9, - "endLine": 1260, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "propertyPath": "Properties.SecurityGroups", + "category": "Best Practice", + "startLine": 117, + "startColumn": 7, + "endLine": 117, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Cluster' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateKeyRotationRule", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::Cluster" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 1357, - "startColumn": 9, - "endLine": 1357, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 10, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FargateExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateConfigInAllRegionsRule", + "logicalId": "FargateExecutionRole", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 1465, - "startColumn": 9, - "endLine": 1465, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 11, + "startColumn": 5, + "endLine": 11, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FargateTaskRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForVpcPeeringRouteTablesRule", + "logicalId": "FargateTaskRole", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 1550, - "startColumn": 9, - "endLine": 1550, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 24, + "startColumn": 5, + "endLine": 24, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "GetCloudTrailCloudWatchLog", + "logicalId": "Vpc", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 1633, - "startColumn": 9, - "endLine": 1633, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 34, + "startColumn": 5, + "endLine": 34, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Subnet1' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "FunctionToFormatCloudWatchEvent", + "logicalId": "Subnet1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 1889, - "startColumn": 9, - "endLine": 1889, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 38, + "startColumn": 5, + "endLine": 38, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Subnet2' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "FunctionToDisableUnusedCredentials", + "logicalId": "Subnet2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 2334, - "startColumn": 9, - "endLine": 2334, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 43, + "startColumn": 5, + "endLine": 43, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SecurityGroup1' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "FunctiontForEvaluateCisBenchmarkingPreconditions", + "logicalId": "SecurityGroup1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 121, - "startColumn": 7, - "endLine": 121, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 48, + "startColumn": 5, + "endLine": 48, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctiontForEvaluateCisBenchmarkingPreconditions' dependency already enforced by a 'GetAtt' at 'Properties.ServiceToken'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SecurityGroup2' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ResourceForEvaluateCisBenchmarkingPreconditions", + "logicalId": "SecurityGroup2", "entityType": "Resource", - "resourceType": "Custom::ResourceForEvaluateCisBenchmarkingPreconditions" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 181, - "startColumn": 7, - "endLine": 181, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 53, + "startColumn": 5, + "endLine": 53, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LoadBalancer' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateRootAccountRule", + "logicalId": "LoadBalancer", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 227, - "startColumn": 7, - "endLine": 227, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 57, + "startColumn": 5, + "endLine": 57, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForEvaluateRootAccountRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "EvaluateRootAccountFunctionPermission", + "logicalId": "LogGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 315, - "startColumn": 7, - "endLine": 315, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 65, + "startColumn": 3, + "endLine": 65, + "endColumn": 11, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TaskDefinitionWithRefToResource' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForVpcFlowLogRule", + "logicalId": "TaskDefinitionWithRefToResource", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 421, - "startColumn": 7, - "endLine": 421, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 71, + "startColumn": 5, + "endLine": 71, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForVpcFlowLogRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TaskDefinitionWithRefToParameter' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallVpcFlowLogLambda", + "logicalId": "TaskDefinitionWithRefToParameter", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 486, - "startColumn": 7, - "endLine": 486, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 92, + "startColumn": 5, + "endLine": 92, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "integration/resources-cloudformation-init.yaml": { + "filePath": "integration/resources-cloudformation-init.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W3005", + "ruleId": "W2509", "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "message": "Parameter 'DBPassword' appears to be a password but does not have NoEcho set to true", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForVpcDefaultSecurityGroupsRule", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "logicalId": "DBPassword", + "entityType": "Parameter" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 497, - "startColumn": 7, - "endLine": 497, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "propertyPath": "Parameters/DBPassword", + "category": "Security", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 13, + "ruleDescription": "Password parameter should have NoEcho", "phase": "LINT" }, { - "ruleId": "W3005", + "ruleId": "W9010", "severity": "WARN", - "message": "'FunctionForVpcDefaultSecurityGroupsRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", - "source": "CFN_LINT", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallVpcDefaultSecurityGroupsLambda", + "logicalId": "MyInstance", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 556, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 94, "startColumn": 7, - "endLine": 556, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 94, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForVpcDefaultSecurityGroupsRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForVpcDefaultSecurityGroupss", + "logicalId": "MyInstance", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 565, + "startLine": 94, "startColumn": 7, - "endLine": 565, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 94, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForVpcFlowLogRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForVpcFlowLogs", + "logicalId": "MyInstance", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 584, - "startColumn": 7, - "endLine": 584, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 93, + "startColumn": 5, + "endLine": 93, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "issues/sam_w_conditions.yaml": { + "filePath": "issues/sam_w_conditions.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 17, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 37, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "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": "FunctionForRoleForMfaOnUsersRule", + "logicalId": "VmdEventsQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 606, - "startColumn": 7, - "endLine": 606, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 203, + "startColumn": 3, + "endLine": 203, + "endColumn": 17, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForRoleForMfaOnUsersRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", + "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": "ConfigPermissionToCallMfaForUsersLambda", + "logicalId": "VmdEventsQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 671, - "startColumn": 7, - "endLine": 671, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 203, + "startColumn": 3, + "endLine": 203, + "endColumn": 17, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "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": "FunctionForEvaluatePolicyPermissionsRule", + "logicalId": "VmdEventsDeadLetterQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 699, - "startColumn": 7, - "endLine": 699, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 214, + "startColumn": 3, + "endLine": 214, + "endColumn": 27, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForEvaluatePolicyPermissionsRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", + "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": "ConfigPermissionToCallEvaluatePolicyPermissionsLambda", + "logicalId": "VmdEventsDeadLetterQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 765, - "startColumn": 7, - "endLine": 765, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 214, + "startColumn": 3, + "endLine": 214, + "endColumn": 27, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForEvaluatePolicyPermissionsRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", + "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": "ConfigRuleForEvaluatePolicyPermissions", + "logicalId": "DmdEventsQueue", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 773, - "startColumn": 7, - "endLine": 773, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 328, + "startColumn": 3, + "endLine": 328, + "endColumn": 17, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "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": "FunctionForEvaluateUserPolicyAssociationRule", + "logicalId": "DmdEventsQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 795, - "startColumn": 7, - "endLine": 795, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 328, + "startColumn": 3, + "endLine": 328, + "endColumn": 17, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForEvaluateUserPolicyAssociationRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", + "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": "ConfigPermissionToCallEvaluateUserPolicyAssociationLambda", + "logicalId": "DmdEventsDeadLetterQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 855, - "startColumn": 7, - "endLine": 855, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 339, + "startColumn": 3, + "endLine": 339, + "endColumn": 27, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForEvaluateUserPolicyAssociationRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", + "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": "ConfigRuleForEvaluateUserPolicyAssociations", + "logicalId": "DmdEventsDeadLetterQueue", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 863, - "startColumn": 7, - "endLine": 863, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 339, + "startColumn": 3, + "endLine": 339, + "endColumn": 27, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ManagedPolicyName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateCloudTrailRule", + "logicalId": "DeniedPolicies", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.ManagedPolicyName", "category": "Best Practice", - "startLine": 886, + "startLine": 118, "startColumn": 7, - "endLine": 886, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 118, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:${GlobalPrefix}-${ComponentShortName}-DeniedPolicies-${TenantAwsResource})" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForEvaluateCloudTrailRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLambda", + "logicalId": "DeniedPolicies", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 971, + "startLine": 119, "startColumn": 7, - "endLine": 971, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 119, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForEvaluateCloudTrailRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForEvaluateCloudTrail", + "logicalId": "DeniedPolicies", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 979, + "startLine": 120, "startColumn": 7, - "endLine": 979, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 120, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ManagedPolicyName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateCloudTrailBucketRule", + "logicalId": "LogMonitoringPolicy", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.ManagedPolicyName", "category": "Best Practice", - "startLine": 999, + "startLine": 138, "startColumn": 7, - "endLine": 999, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 138, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:${GlobalPrefix}-${ComponentShortName}-LogMonitoringPolicy-${TenantAwsResource})" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForEvaluateCloudTrailBucketRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateCloudTrailBucketLambda", + "logicalId": "LogMonitoringPolicy", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 1087, + "startLine": 139, "startColumn": 7, - "endLine": 1087, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 139, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForEvaluateCloudTrailBucketRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForEvaluateCloudTrailBucket", + "logicalId": "LogMonitoringPolicy", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 1095, + "startLine": 140, "startColumn": 7, - "endLine": 1095, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 140, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateCloudTrailLogIntegrityRule", + "logicalId": "TenantInfoReadPolicy", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 1116, + "startLine": 154, "startColumn": 7, - "endLine": 1116, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 154, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForEvaluateCloudTrailLogIntegrityRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLogIntegrityLambda", + "logicalId": "VmdEventsQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.QueueName", "category": "Best Practice", - "startLine": 1184, + "startLine": 207, "startColumn": 7, - "endLine": 1184, + "endLine": 207, "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:${Solution}-${Environment}-${ComponentShortName}-VmdEventsQueue-${TenantAwsResource}.fifo)" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForEvaluateCloudTrailLogIntegrityRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForEvaluateCloudTrailLogIntegrity", + "logicalId": "VmdEventsQueue", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.FifoQueue", "category": "Best Practice", - "startLine": 1193, + "startLine": 209, "startColumn": 7, - "endLine": 1193, + "endLine": 209, "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForInstanceRoleUseRule", + "logicalId": "VmdEventsDeadLetterQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.QueueName", "category": "Best Practice", - "startLine": 1213, + "startLine": 218, "startColumn": 7, - "endLine": 1213, + "endLine": 218, "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:${Solution}-${Environment}-${ComponentShortName}-VmdEventsDeadLetterQueue-${TenantAwsResource}.fifo)" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForInstanceRoleUseRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallInstanceRoleUseLambda", + "logicalId": "VmdEventsDeadLetterQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.FifoQueue", "category": "Best Practice", - "startLine": 1266, + "startLine": 220, "startColumn": 7, - "endLine": 1266, + "endLine": 220, "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForInstanceRoleUseRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForInstanceRoleUses", + "logicalId": "VmdEventsSubscription", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 1275, + "startLine": 265, "startColumn": 7, - "endLine": 1275, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 265, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateKeyRotationRule", + "logicalId": "VmdEventsSubscription", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Endpoint", "category": "Best Practice", - "startLine": 1298, + "startLine": 266, "startColumn": 7, - "endLine": 1298, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 266, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt VmdEventsQueue.Arn" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForEvaluateKeyRotationRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Region' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateKeyRotationLambda", + "logicalId": "VmdEventsSubscription", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Region", "category": "Best Practice", - "startLine": 1363, + "startLine": 267, "startColumn": 7, - "endLine": 1363, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 267, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "parameter 'VmdEventsSourceRegion' (type String)" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForEvaluateKeyRotationRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForEvaluateKeyRotations", + "logicalId": "VmdEventsSubscription", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.TopicArn", "category": "Best Practice", - "startLine": 1372, + "startLine": 268, "startColumn": 7, - "endLine": 1372, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 268, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'VmdEventsSourceArn' (type String)" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateConfigInAllRegionsRule", + "logicalId": "DmdEventsQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.QueueName", "category": "Best Practice", - "startLine": 1394, + "startLine": 332, "startColumn": 7, - "endLine": 1394, + "endLine": 332, "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:${Solution}-${Environment}-${ComponentShortName}-DmdEventsQueue-${TenantAwsResource}.fifo)" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForEvaluateConfigInAllRegionsRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "EvaluateConfigInAllRegionsFunctionPermission", + "logicalId": "DmdEventsQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.FifoQueue", "category": "Best Practice", - "startLine": 1470, + "startLine": 334, "startColumn": 7, - "endLine": 1470, + "endLine": 334, "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForVpcPeeringRouteTablesRule", + "logicalId": "DmdEventsDeadLetterQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.QueueName", "category": "Best Practice", - "startLine": 1499, + "startLine": 343, "startColumn": 7, - "endLine": 1499, + "endLine": 343, "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:${Solution}-${Environment}-${ComponentShortName}-DmdEventsDeadLetterQueue-${TenantAwsResource}.fifo)" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForVpcPeeringRouteTablesRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallVpcPeeringRouteTablesLambda", + "logicalId": "DmdEventsDeadLetterQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.FifoQueue", "category": "Best Practice", - "startLine": 1555, + "startLine": 345, "startColumn": 7, - "endLine": 1555, + "endLine": 345, "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForVpcPeeringRouteTablesRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForVpcPeeringRouteTabless", + "logicalId": "DmdEventsSubscription", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 1564, + "startLine": 390, "startColumn": 7, - "endLine": 1564, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 390, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "GetCloudTrailCloudWatchLog", + "logicalId": "DmdEventsSubscription", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Endpoint", "category": "Best Practice", - "startLine": 1601, + "startLine": 391, "startColumn": 7, - "endLine": 1601, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 391, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt DmdEventsQueue.Arn" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'GetCloudTrailCloudWatchLog' dependency already enforced by a 'GetAtt' at 'Properties.ServiceToken'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Region' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ResourceForGetCloudTrailCloudWatchLog", + "logicalId": "DmdEventsSubscription", "entityType": "Resource", - "resourceType": "Custom::ResourceForGetCloudTrailCloudWatchLog" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Region", "category": "Best Practice", - "startLine": 1638, + "startLine": 392, "startColumn": 7, - "endLine": 1638, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 392, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "parameter 'DmdEventsSourceRegion' (type String)" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ResourceForGetCloudTrailCloudWatchLog' dependency already enforced by a 'GetAtt' at 'Properties.LogGroupName'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "UnauthorizedAttemptsCloudWatchFilter", + "logicalId": "DmdEventsSubscription", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.TopicArn", "category": "Best Practice", - "startLine": 1647, + "startLine": 393, "startColumn": 7, - "endLine": 1647, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 393, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'DmdEventsSourceArn' (type String)" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ResourceForGetCloudTrailCloudWatchLog' dependency already enforced by a 'GetAtt' at 'Properties.LogGroupName'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'VmdEventsLambda' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "IAMRootActivityCloudWatchMetric", + "logicalId": "VmdEventsLambda", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1681, - "startColumn": 7, - "endLine": 1681, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 171, + "startColumn": 5, + "endLine": 171, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ResourceForGetCloudTrailCloudWatchLog' dependency already enforced by a 'GetAtt' at 'Properties.LogGroupName'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'VmdEventsQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ConsoleSigninWithoutMfaCloudWatchMetric", + "logicalId": "VmdEventsQueue", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1718, - "startColumn": 7, - "endLine": 1718, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 206, + "startColumn": 5, + "endLine": 206, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ResourceForGetCloudTrailCloudWatchLog' dependency already enforced by a 'GetAtt' at 'Properties.LogGroupName'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'VmdEventsLambdaErrorsGreaterThanZeroAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ConsoleLoginFailureCloudWatchMetric", + "logicalId": "VmdEventsLambdaErrorsGreaterThanZeroAlarm", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::CloudWatch::Alarm" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1757, - "startColumn": 7, - "endLine": 1757, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 274, + "startColumn": 5, + "endLine": 274, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ResourceForGetCloudTrailCloudWatchLog' dependency already enforced by a 'GetAtt' at 'Properties.LogGroupName'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DmdEventsLambda' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "KMSCustomerKeyDeletionCloudWatchMetric", + "logicalId": "DmdEventsLambda", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1794, - "startColumn": 7, - "endLine": 1794, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 296, + "startColumn": 5, + "endLine": 296, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'SnsTopicForCloudWatchEvents' dependency already enforced by a 'Ref' at 'Properties.Policies.0.PolicyDocument.Statement.0.Resource'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DmdEventsQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "RoleForCloudWatchEvents", + "logicalId": "DmdEventsQueue", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1830, - "startColumn": 7, - "endLine": 1830, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 331, + "startColumn": 5, + "endLine": 331, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'RoleForCloudWatchEvents' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DmdEventsLambdaErrorsGreaterThanZeroAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "FunctionToFormatCloudWatchEvent", + "logicalId": "DmdEventsLambdaErrorsGreaterThanZeroAlarm", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::CloudWatch::Alarm" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1856, - "startColumn": 7, - "endLine": 1856, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 399, + "startColumn": 5, + "endLine": 399, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "lsp/comprehensive.json": { + "filePath": "lsp/comprehensive.json", + "status": "OK", + "metadata": { + "resourcesScanned": 12, + "counts": { + "fatal": 4, + "errors": 1, + "warnings": 8, + "informational": 29, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W3005", - "severity": "WARN", - "message": "'SnsTopicForCloudWatchEvents' dependency already enforced by a 'Ref' at 'Properties.Code.ZipFile'", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'MaxSize' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "FunctionToFormatCloudWatchEvent", + "logicalId": "AutoScalingGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 1856, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'MaxSize'", + "category": "Schema", + "startLine": 564, "startColumn": 7, - "endLine": 1856, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 564, + "endColumn": 18, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionToFormatCloudWatchEvent' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'MinSize' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "LambdaPermissionForCloudTrailCloudWatchEventRules", + "logicalId": "AutoScalingGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 1894, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'MinSize'", + "category": "Schema", + "startLine": 564, "startColumn": 7, - "endLine": 1894, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 564, + "endColumn": 18, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ResourceForGetCloudTrailCloudWatchLog' dependency already enforced by a 'GetAtt' at 'Properties.LogGroupName'", - "source": "CFN_LINT", + "ruleId": "F6101", + "severity": "FATAL", + "message": "Fn::Sub variable '${MaxScaling}' does not reference a valid resource, parameter, or pseudo-parameter", + "source": "SCHEMA", "entity": { - "logicalId": "BillingChangesCloudWatchFilter", - "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "logicalId": "ComplexOutput", + "entityType": "Output" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 2183, - "startColumn": 7, - "endLine": 2183, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "propertyPath": "Outputs/ComplexOutput/Value.Fn::Sub", + "category": "Structure", + "startLine": 943, + "startColumn": 5, + "endLine": 943, + "endColumn": 19, + "ruleDescription": "Output value must be a string", + "phase": "SCHEMA" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'RoleForDisableUnusedCredentialsFunction' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "F8611", + "severity": "FATAL", + "message": "'Fn::FindInMap' is not supported in the Rules section - allowed: ['Ref', 'Fn::ValueOf', 'Fn::ValueOfAll', 'Fn::RefAll', 'Fn::Contains', 'Fn::EachMemberEquals', 'Fn::EachMemberIn', 'Fn::Equals', 'Fn::And', 'Fn::Or', 'Fn::Not', 'Fn::If', 'Fn::Select']", + "source": "SCHEMA", "entity": { - "logicalId": "FunctionToDisableUnusedCredentials", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "logicalId": "ValidateRegionAndEnvironment", + "entityType": "Rule" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 2253, - "startColumn": 7, - "endLine": 2253, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "propertyPath": "Rules/ValidateRegionAndEnvironment", + "category": "Structure", + "startLine": 197, + "startColumn": 5, + "endLine": 197, + "endColumn": 34, + "ruleDescription": "Disallowed function in Rules section", + "phase": "PARSE" + }, + { + "ruleId": "E9006", + "severity": "ERROR", + "message": "'8.0' is not one of ['5.5.62', '5.6.51', '5.7.33', '5.7.34', '5.7.36', '5.7.37', '5.7.38', '5.7.39', '5.7.40', '5.7.41', '5.7.42', '5.7.43', '5.7.44', '5.7.44-rds.20240408', '5.7.44-rds.20240529', '5.7.44-rds.20240808', '5.7.44-rds.20250103', '5.7.44-rds.20250213', '5.7.44-rds.20250508', '5.7.44-rds.20250818', '5.7.44-rds.20251212', '5.7.44-rds.20260212', '5.7.44-rds.20260521', '5.7.44-rds.20260624', '5.7.44-rds.20260902', '8.0.11', '8.0.13', '8.0.15', '8.0.16', '8.0.17', '8.0.19', '8.0.20', '8.0.21', '8.0.23', '8.0.25', '8.0.26', '8.0.27', '8.0.28', '8.0.29', '8.0.30', '8.0.31', '8.0.32', '8.0.33', '8.0.34', '8.0.35', '8.0.36', '8.0.37', '8.0.39', '8.0.40', '8.0.41', '8.0.42', '8.0.43', '8.0.44', '8.0.45', '8.0.46', '8.0.46-rds.20260624', '8.0.46-rds.20260908', '8.4.10', '8.4.11', '8.4.3', '8.4.4', '8.4.5', '8.4.6', '8.4.7', '8.4.8', '8.4.9']", + "source": "CFN_LINT", + "entity": { + "logicalId": "Database", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.EngineVersion", + "category": "Schema", + "startLine": 647, + "startColumn": 9, + "endLine": 647, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Property value not valid for conditional extension enum", + "phase": "SCHEMA" }, { - "ruleId": "W3005", + "ruleId": "W1011", "severity": "WARN", - "message": "'FunctionToDisableUnusedCredentials' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", + "message": "Use dynamic references (e.g., SSM SecureString) instead of parameter 'DatabasePassword' for secrets", "source": "CFN_LINT", "entity": { - "logicalId": "LambdaPermissionForDisableUnusedCredentials", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 2339, - "startColumn": 7, - "endLine": 2339, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "propertyPath": "Properties.MasterUserPassword", + "category": "Security", + "startLine": 664, + "startColumn": 9, + "endLine": 664, + "endColumn": 28, + "ruleDescription": "Instead of REFing a parameter for a secret use a dynamic reference", "phase": "LINT" }, { - "ruleId": "W9003", + "ruleId": "W1028", "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", + "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", "source": "CFN_LINT", "entity": { - "logicalId": "UnauthorizedAttemptsCloudWatchFilter", - "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "logicalId": "ConditionalOutput", + "entityType": "Output" }, - "propertyPath": "Properties.MetricTransformations.0.MetricValue", + "propertyPath": "Outputs/ConditionalOutput/Value.Fn::If.2", "category": "Best Practice", - "startLine": 1657, - "startColumn": 13, - "endLine": 1657, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 996, + "startColumn": 5, + "endLine": 996, + "endColumn": 23, + "ruleDescription": "Check Fn::If has a path that cannot be reached", + "phase": "LINT" }, { - "ruleId": "W9003", + "ruleId": "W2508", "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", + "source": "ENGINE", "entity": { - "logicalId": "IAMRootActivityCloudWatchMetric", + "logicalId": "BastionSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.MetricTransformations.0.MetricValue", - "category": "Best Practice", - "startLine": 1695, - "startColumn": 13, - "endLine": 1695, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Properties.SecurityGroupIngress", + "suggestedFix": "Restrict the CIDR range to specific IP addresses", + "category": "Security", + "startLine": 495, + "startColumn": 9, + "endLine": 495, + "endColumn": 30, + "ruleDescription": "Security group allows open access to sensitive port", + "phase": "LINT" }, { - "ruleId": "W9003", + "ruleId": "W2531", "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "ConsoleSigninWithoutMfaCloudWatchMetric", + "logicalId": "LambdaFunction", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.MetricTransformations.0.MetricValue", - "category": "Best Practice", - "startLine": 1733, - "startColumn": 13, - "endLine": 1733, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 738, + "startColumn": 9, + "endLine": 738, + "endColumn": 17, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.9", + "lifecycle": "deprecated" + } }, { - "ruleId": "W9003", + "ruleId": "W8001", "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", + "message": "Condition 'IsNotProduction' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "ConsoleLoginFailureCloudWatchMetric", - "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "logicalId": "IsNotProduction", + "entityType": "Condition" }, - "propertyPath": "Properties.MetricTransformations.0.MetricValue", + "propertyPath": "Conditions/IsNotProduction", "category": "Best Practice", - "startLine": 1770, - "startColumn": 13, - "endLine": 1770, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 125, + "startColumn": 5, + "endLine": 125, + "endColumn": 21, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { - "ruleId": "W9003", + "ruleId": "W8001", "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", + "message": "Condition 'ComplexCondition' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "KMSCustomerKeyDeletionCloudWatchMetric", - "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "logicalId": "ComplexCondition", + "entityType": "Condition" }, - "propertyPath": "Properties.MetricTransformations.0.MetricValue", + "propertyPath": "Conditions/ComplexCondition", "category": "Best Practice", - "startLine": 1807, - "startColumn": 13, - "endLine": 1807, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 155, + "startColumn": 5, + "endLine": 155, + "endColumn": 22, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { "ruleId": "W9003", "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", + "message": "100 (from Fn::If on condition 'IsProduction') is not of type 'string' - automatically coerced (number to string)", "source": "CFN_LINT", "entity": { - "logicalId": "BillingChangesCloudWatchFilter", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.MetricTransformations.0.MetricValue", + "propertyPath": "Properties.AllocatedStorage", "category": "Best Practice", - "startLine": 2197, - "startColumn": 13, - "endLine": 2197, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "startLine": 648, + "startColumn": 9, + "endLine": 648, + "endColumn": 26, + "conditionScenario": { + "IsProduction": true + }, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "phase": "SCHEMA", + "context": { + "resolutionSource": "Fn::If on condition 'IsProduction'" + } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "FunctiontForEvaluateCisBenchmarkingPreconditions", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 124, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 656, "startColumn": 9, - "endLine": 124, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 656, + "endColumn": 26, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForIamPasswordPolicy", + "logicalId": "VPC", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 202, + "startLine": 362, "startColumn": 9, - "endLine": 202, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "endLine": 362, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -20052,86 +13711,87 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateRootAccountRule", + "logicalId": "PublicSubnet", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 231, + "startLine": 390, "startColumn": 9, - "endLine": 231, - "endColumn": 21, + "endLine": 390, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EvaluateRootAccountFunctionPermission", + "logicalId": "PublicSubnet", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 317, + "startLine": 393, "startColumn": 9, - "endLine": 317, - "endColumn": 21, + "endLine": 393, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionForEvaluateRootAccountRule.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EvaluateRootAccountFunctionPermission", + "logicalId": "PublicSubnet", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 318, + "startLine": 401, "startColumn": 9, - "endLine": 318, - "endColumn": 15, + "endLine": 401, + "endColumn": 26, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Select with unresolvable arguments)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EvaluateRootAccountFunctionPermission", + "logicalId": "WebSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 319, + "startLine": 443, "startColumn": 9, - "endLine": 319, - "endColumn": 18, + "endLine": 443, + "endColumn": 26, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -20141,43 +13801,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForEvaluateRootAccount", + "logicalId": "WebSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 328, + "startLine": 444, "startColumn": 9, - "endLine": 328, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "endLine": 444, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForRequiredTags", + "logicalId": "BastionSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 342, + "startLine": 491, "startColumn": 9, - "endLine": 342, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "endLine": 491, + "endColumn": 26, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -20187,267 +13846,274 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForEncryptedVolumes", + "logicalId": "BastionSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 373, + "startLine": 492, "startColumn": 9, - "endLine": 373, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "endLine": 492, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchTemplateName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForRestrictedSsh", + "logicalId": "LaunchTemplate", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::EC2::LaunchTemplate" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.LaunchTemplateName", "category": "Best Practice", - "startLine": 389, + "startLine": 508, "startColumn": 9, - "endLine": 389, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "endLine": 508, + "endColumn": 28, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForUnrestrictedPorts", + "logicalId": "AutoScalingGroup", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.AutoScalingGroupName", "category": "Best Practice", - "startLine": 405, + "startLine": 565, "startColumn": 9, - "endLine": 405, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "endLine": 565, + "endColumn": 30, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchTemplate' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionForVpcFlowLogRule", + "logicalId": "AutoScalingGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.LaunchTemplate", "category": "Best Practice", - "startLine": 425, + "startLine": 568, "startColumn": 9, - "endLine": 425, - "endColumn": 21, + "endLine": 568, + "endColumn": 24, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallVpcFlowLogLambda", + "logicalId": "AutoScalingGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.VPCZoneIdentifier", "category": "Best Practice", - "startLine": 488, + "startLine": 582, "startColumn": 9, - "endLine": 488, - "endColumn": 21, + "endLine": 582, + "endColumn": 27, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionForVpcFlowLogRule.Arn" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'DBInstanceIdentifier' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallVpcFlowLogLambda", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.DBInstanceIdentifier", "category": "Best Practice", - "startLine": 489, + "startLine": 634, "startColumn": 9, - "endLine": 489, - "endColumn": 15, + "endLine": 634, + "endColumn": 30, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallVpcFlowLogLambda", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 490, + "startLine": 646, "startColumn": 9, - "endLine": 490, - "endColumn": 18, + "endLine": 646, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionForVpcDefaultSecurityGroupsRule", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 501, + "startLine": 656, "startColumn": 9, - "endLine": 501, - "endColumn": 21, + "endLine": 656, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProduction'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallVpcDefaultSecurityGroupsLambda", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 558, + "startLine": 663, "startColumn": 9, - "endLine": 558, - "endColumn": 21, + "endLine": 663, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionForVpcDefaultSecurityGroupsRule.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallVpcDefaultSecurityGroupsLambda", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.BackupRetentionPeriod", "category": "Best Practice", - "startLine": 559, + "startLine": 672, "startColumn": 9, - "endLine": 559, - "endColumn": 15, + "endLine": 672, + "endColumn": 31, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only", + "resolutionSource": "Fn::If on condition 'IsProduction'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'MultiAZ' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallVpcDefaultSecurityGroupsLambda", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.MultiAZ", "category": "Best Practice", - "startLine": 560, + "startLine": 679, "startColumn": 9, - "endLine": 560, - "endColumn": 18, + "endLine": 679, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (condition reference: IsProduction)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForVpcDefaultSecurityGroupss", + "logicalId": "DatabaseSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 569, + "startLine": 716, "startColumn": 9, - "endLine": 569, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "endLine": 716, + "endColumn": 26, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -20457,24 +14123,24 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForVpcFlowLogs", + "logicalId": "DatabaseSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 588, + "startLine": 717, "startColumn": 9, - "endLine": 588, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "endLine": 717, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" } }, { @@ -20483,531 +14149,550 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionForRoleForMfaOnUsersRule", + "logicalId": "LambdaFunction", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 610, + "startLine": 735, "startColumn": 9, - "endLine": 610, - "endColumn": 21, + "endLine": 735, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallMfaForUsersLambda", + "logicalId": "LambdaRole", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 673, + "startLine": 802, "startColumn": 9, - "endLine": 673, - "endColumn": 21, + "endLine": 802, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionForRoleForMfaOnUsersRule.Arn" + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallMfaForUsersLambda", + "logicalId": "DatabaseAlarm", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::CloudWatch::Alarm" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.AlarmName", "category": "Best Practice", - "startLine": 674, + "startLine": 846, "startColumn": 9, - "endLine": 674, - "endColumn": 15, + "endLine": 846, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallMfaForUsersLambda", + "logicalId": "SNSTopic", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.TopicName", "category": "Best Practice", - "startLine": 675, + "startLine": 877, "startColumn": 9, - "endLine": 675, - "endColumn": 18, + "endLine": 877, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { - "ruleId": "I9001", + "ruleId": "I9003", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BastionSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForMfaForUsers", + "logicalId": "BastionSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 681, - "startColumn": 9, - "endLine": 681, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 490, + "startColumn": 7, + "endLine": 490, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'DatabaseSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluatePolicyPermissionsRule", + "logicalId": "DatabaseSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 703, - "startColumn": 9, - "endLine": 703, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 715, + "startColumn": 7, + "endLine": 715, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'LambdaRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluatePolicyPermissionsLambda", + "logicalId": "LambdaRole", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 767, - "startColumn": 9, - "endLine": 767, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionForEvaluatePolicyPermissionsRule.Arn" - } + "startLine": 801, + "startColumn": 7, + "endLine": 801, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Resource 'DatabaseAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluatePolicyPermissionsLambda", + "logicalId": "DatabaseAlarm", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::CloudWatch::Alarm" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 768, - "startColumn": 9, - "endLine": 768, + "startLine": 845, + "startColumn": 7, + "endLine": 845, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "lsp/comprehensive.yaml": { + "filePath": "lsp/comprehensive.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 12, + "counts": { + "fatal": 4, + "errors": 1, + "warnings": 10, + "informational": 29, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3003", + "severity": "FATAL", + "message": "'MaxSize' is a required property", + "source": "SCHEMA", + "entity": { + "logicalId": "AutoScalingGroup", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'MaxSize'", + "category": "Schema", + "startLine": 236, + "startColumn": 5, + "endLine": 236, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'MinSize' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "ConfigPermissionToCallEvaluatePolicyPermissionsLambda", + "logicalId": "AutoScalingGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 769, - "startColumn": 9, - "endLine": 769, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'MinSize'", + "category": "Schema", + "startLine": 236, + "startColumn": 5, + "endLine": 236, + "endColumn": 15, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F6101", + "severity": "FATAL", + "message": "Fn::Sub variable '${MaxScaling}' does not reference a valid resource, parameter, or pseudo-parameter", + "source": "SCHEMA", "entity": { - "logicalId": "ConfigRuleForEvaluatePolicyPermissions", - "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "logicalId": "ComplexOutput", + "entityType": "Output" }, - "propertyPath": "Properties.ConfigRuleName", - "category": "Best Practice", - "startLine": 777, - "startColumn": 9, - "endLine": 777, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Outputs/ComplexOutput/Value.Fn::Sub", + "category": "Structure", + "startLine": 421, + "startColumn": 3, + "endLine": 421, + "endColumn": 16, + "ruleDescription": "Output value must be a string", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F8611", + "severity": "FATAL", + "message": "'Fn::FindInMap' is not supported in the Rules section - allowed: ['Ref', 'Fn::ValueOf', 'Fn::ValueOfAll', 'Fn::RefAll', 'Fn::Contains', 'Fn::EachMemberEquals', 'Fn::EachMemberIn', 'Fn::Equals', 'Fn::And', 'Fn::Or', 'Fn::Not', 'Fn::If', 'Fn::Select']", + "source": "SCHEMA", "entity": { - "logicalId": "FunctionForEvaluateUserPolicyAssociationRule", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "logicalId": "ValidateRegionAndEnvironment", + "entityType": "Rule" }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 799, - "startColumn": 9, - "endLine": 799, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Rules/ValidateRegionAndEnvironment", + "category": "Structure", + "startLine": 110, + "startColumn": 3, + "endLine": 110, + "endColumn": 31, + "ruleDescription": "Disallowed function in Rules section", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E9006", + "severity": "ERROR", + "message": "'8.0' is not one of ['5.5.62', '5.6.51', '5.7.33', '5.7.34', '5.7.36', '5.7.37', '5.7.38', '5.7.39', '5.7.40', '5.7.41', '5.7.42', '5.7.43', '5.7.44', '5.7.44-rds.20240408', '5.7.44-rds.20240529', '5.7.44-rds.20240808', '5.7.44-rds.20250103', '5.7.44-rds.20250213', '5.7.44-rds.20250508', '5.7.44-rds.20250818', '5.7.44-rds.20251212', '5.7.44-rds.20260212', '5.7.44-rds.20260521', '5.7.44-rds.20260624', '5.7.44-rds.20260902', '8.0.11', '8.0.13', '8.0.15', '8.0.16', '8.0.17', '8.0.19', '8.0.20', '8.0.21', '8.0.23', '8.0.25', '8.0.26', '8.0.27', '8.0.28', '8.0.29', '8.0.30', '8.0.31', '8.0.32', '8.0.33', '8.0.34', '8.0.35', '8.0.36', '8.0.37', '8.0.39', '8.0.40', '8.0.41', '8.0.42', '8.0.43', '8.0.44', '8.0.45', '8.0.46', '8.0.46-rds.20260624', '8.0.46-rds.20260908', '8.4.10', '8.4.11', '8.4.3', '8.4.4', '8.4.5', '8.4.6', '8.4.7', '8.4.8', '8.4.9']", + "source": "CFN_LINT", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateUserPolicyAssociationLambda", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 857, - "startColumn": 9, - "endLine": 857, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionForEvaluateUserPolicyAssociationRule.Arn" - } + "propertyPath": "Properties.EngineVersion", + "category": "Schema", + "startLine": 271, + "startColumn": 7, + "endLine": 271, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Property value not valid for conditional extension enum", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1011", + "severity": "WARN", + "message": "Use dynamic references (e.g., SSM SecureString) instead of parameter 'DatabasePassword' for secrets", + "source": "CFN_LINT", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateUserPolicyAssociationLambda", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 858, - "startColumn": 9, - "endLine": 858, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.MasterUserPassword", + "category": "Security", + "startLine": 276, + "startColumn": 7, + "endLine": 276, + "endColumn": 25, + "ruleDescription": "Instead of REFing a parameter for a secret use a dynamic reference", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", + "source": "CFN_LINT", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateUserPolicyAssociationLambda", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "logicalId": "ConditionalOutput", + "entityType": "Output" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Outputs/ConditionalOutput/Value.Fn::If.2", "category": "Best Practice", - "startLine": 859, - "startColumn": 9, - "endLine": 859, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 442, + "startColumn": 3, + "endLine": 442, + "endColumn": 20, + "ruleDescription": "Check Fn::If has a path that cannot be reached", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "ruleId": "W1103", + "severity": "WARN", + "message": "'!Implies' is not a supported function", "source": "ENGINE", - "entity": { - "logicalId": "ConfigRuleForEvaluateUserPolicyAssociations", - "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" - }, - "propertyPath": "Properties.ConfigRuleName", - "category": "Best Practice", - "startLine": 867, - "startColumn": 9, - "endLine": 867, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "category": "Intrinsic Function", + "ruleDescription": "Unknown intrinsic function name", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "ruleId": "W2508", + "severity": "WARN", + "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateCloudTrailRule", + "logicalId": "BastionSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 890, - "startColumn": 9, - "endLine": 890, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", + "propertyPath": "Properties.SecurityGroupIngress", + "suggestedFix": "Restrict the CIDR range to specific IP addresses", + "category": "Security", + "startLine": 206, + "startColumn": 7, + "endLine": 206, + "endColumn": 27, + "ruleDescription": "Security group allows open access to sensitive port", + "phase": "LINT" + }, + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "LambdaFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 306, + "startColumn": 7, + "endLine": 306, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "python3.9", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'IsNotProduction' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLambda", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "logicalId": "IsNotProduction", + "entityType": "Condition" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Conditions/IsNotProduction", "category": "Best Practice", - "startLine": 973, - "startColumn": 9, - "endLine": 973, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionForEvaluateCloudTrailRule.Arn" - } + "startLine": 93, + "startColumn": 3, + "endLine": 93, + "endColumn": 18, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'ComplexCondition' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLambda", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "logicalId": "ComplexCondition", + "entityType": "Condition" }, - "propertyPath": "Properties.Action", + "propertyPath": "Conditions/ComplexCondition", "category": "Best Practice", - "startLine": 974, - "startColumn": 9, - "endLine": 974, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 101, + "startColumn": 3, + "endLine": 101, + "endColumn": 19, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "-1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLambda", + "logicalId": "WebSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.SecurityGroupEgress.0.IpProtocol", "category": "Best Practice", - "startLine": 975, - "startColumn": 9, - "endLine": 975, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 195, + "startColumn": 11, + "endLine": 195, + "endColumn": 21, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "100 (from Fn::If on condition 'IsProduction') is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "ConfigRuleForEvaluateCloudTrail", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.AllocatedStorage", "category": "Best Practice", - "startLine": 983, - "startColumn": 9, - "endLine": 983, + "startLine": 272, + "startColumn": 7, + "endLine": 272, "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "conditionScenario": { + "IsProduction": true + }, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Property type coercion warning", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "resolutionSource": "Fn::If on condition 'IsProduction'" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateCloudTrailBucketRule", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 1003, - "startColumn": 9, - "endLine": 1003, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 274, + "startColumn": 7, + "endLine": 274, + "endColumn": 23, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateCloudTrailBucketLambda", + "logicalId": "VPC", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 1089, - "startColumn": 9, - "endLine": 1089, - "endColumn": 21, + "startLine": 142, + "startColumn": 7, + "endLine": 142, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionForEvaluateCloudTrailBucketRule.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateCloudTrailBucketLambda", + "logicalId": "PublicSubnet", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1090, - "startColumn": 9, - "endLine": 1090, - "endColumn": 15, + "startLine": 158, + "startColumn": 7, + "endLine": 158, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateCloudTrailBucketLambda", + "logicalId": "PublicSubnet", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 1091, - "startColumn": 9, - "endLine": 1091, - "endColumn": 18, + "startLine": 159, + "startColumn": 7, + "endLine": 159, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -21017,42 +14702,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForEvaluateCloudTrailBucket", + "logicalId": "PublicSubnet", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 1099, - "startColumn": 9, - "endLine": 1099, + "startLine": 160, + "startColumn": 7, + "endLine": 160, "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Select with unresolvable arguments)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateCloudTrailLogIntegrityRule", + "logicalId": "WebSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 1120, - "startColumn": 9, - "endLine": 1120, - "endColumn": 21, + "startLine": 176, + "startColumn": 7, + "endLine": 176, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -21062,42 +14747,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLogIntegrityLambda", + "logicalId": "WebSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1186, - "startColumn": 9, - "endLine": 1186, - "endColumn": 21, + "startLine": 177, + "startColumn": 7, + "endLine": 177, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionForEvaluateCloudTrailLogIntegrityRule.Arn" + "resolutionSource": "Ref to 'VPC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLogIntegrityLambda", + "logicalId": "BastionSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 1187, - "startColumn": 9, - "endLine": 1187, - "endColumn": 15, + "startLine": 204, + "startColumn": 7, + "endLine": 204, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -21107,266 +14792,274 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLogIntegrityLambda", + "logicalId": "BastionSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1188, - "startColumn": 9, - "endLine": 1188, - "endColumn": 18, + "startLine": 205, + "startColumn": 7, + "endLine": 205, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchTemplateName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForEvaluateCloudTrailLogIntegrity", + "logicalId": "LaunchTemplate", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::EC2::LaunchTemplate" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.LaunchTemplateName", "category": "Best Practice", - "startLine": 1197, - "startColumn": 9, - "endLine": 1197, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "startLine": 216, + "startColumn": 7, + "endLine": 216, + "endColumn": 25, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionForInstanceRoleUseRule", + "logicalId": "AutoScalingGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.AutoScalingGroupName", "category": "Best Practice", - "startLine": 1217, - "startColumn": 9, - "endLine": 1217, - "endColumn": 21, + "startLine": 237, + "startColumn": 7, + "endLine": 237, + "endColumn": 27, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchTemplate' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallInstanceRoleUseLambda", + "logicalId": "AutoScalingGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.LaunchTemplate", "category": "Best Practice", - "startLine": 1268, - "startColumn": 9, - "endLine": 1268, + "startLine": 238, + "startColumn": 7, + "endLine": 238, "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionForInstanceRoleUseRule.Arn" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallInstanceRoleUseLambda", + "logicalId": "AutoScalingGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.VPCZoneIdentifier", "category": "Best Practice", - "startLine": 1269, - "startColumn": 9, - "endLine": 1269, - "endColumn": 15, + "startLine": 242, + "startColumn": 7, + "endLine": 242, + "endColumn": 24, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'DBInstanceIdentifier' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallInstanceRoleUseLambda", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.DBInstanceIdentifier", "category": "Best Practice", - "startLine": 1270, - "startColumn": 9, - "endLine": 1270, - "endColumn": 18, + "startLine": 268, + "startColumn": 7, + "endLine": 268, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForInstanceRoleUses", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 1279, - "startColumn": 9, - "endLine": 1279, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "startLine": 270, + "startColumn": 7, + "endLine": 270, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateKeyRotationRule", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 1302, - "startColumn": 9, - "endLine": 1302, - "endColumn": 21, + "startLine": 274, + "startColumn": 7, + "endLine": 274, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProduction'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateKeyRotationLambda", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 1365, - "startColumn": 9, - "endLine": 1365, + "startLine": 275, + "startColumn": 7, + "endLine": 275, "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionForEvaluateKeyRotationRule.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateKeyRotationLambda", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.BackupRetentionPeriod", "category": "Best Practice", - "startLine": 1366, - "startColumn": 9, - "endLine": 1366, - "endColumn": 15, + "startLine": 279, + "startColumn": 7, + "endLine": 279, + "endColumn": 28, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only", + "resolutionSource": "Fn::If on condition 'IsProduction'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'MultiAZ' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateKeyRotationLambda", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.MultiAZ", "category": "Best Practice", - "startLine": 1367, - "startColumn": 9, - "endLine": 1367, - "endColumn": 18, + "startLine": 280, + "startColumn": 7, + "endLine": 280, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (condition reference: IsProduction)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForEvaluateKeyRotations", + "logicalId": "DatabaseSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 1376, - "startColumn": 9, - "endLine": 1376, + "startLine": 293, + "startColumn": 7, + "endLine": 293, "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -21376,23 +15069,24 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateConfigInAllRegionsRule", + "logicalId": "DatabaseSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1398, - "startColumn": 9, - "endLine": 1398, - "endColumn": 21, + "startLine": 294, + "startColumn": 7, + "endLine": 294, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" } }, { @@ -21401,391 +15095,500 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EvaluateConfigInAllRegionsFunctionPermission", + "logicalId": "LambdaFunction", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 1472, - "startColumn": 9, - "endLine": 1472, - "endColumn": 21, + "startLine": 305, + "startColumn": 7, + "endLine": 305, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionForEvaluateConfigInAllRegionsRule.Arn" + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EvaluateConfigInAllRegionsFunctionPermission", + "logicalId": "LambdaRole", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 1473, - "startColumn": 9, - "endLine": 1473, + "startLine": 343, + "startColumn": 7, + "endLine": 343, "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EvaluateConfigInAllRegionsFunctionPermission", + "logicalId": "DatabaseAlarm", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::CloudWatch::Alarm" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.AlarmName", "category": "Best Practice", - "startLine": 1474, - "startColumn": 9, - "endLine": 1474, - "endColumn": 18, + "startLine": 369, + "startColumn": 7, + "endLine": 369, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForEvaluateConfigInAllRegions", + "logicalId": "SNSTopic", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.TopicName", "category": "Best Practice", - "startLine": 1481, - "startColumn": 9, - "endLine": 1481, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "startLine": 390, + "startColumn": 7, + "endLine": 390, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { - "ruleId": "I9001", + "ruleId": "I9003", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BastionSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FunctionForVpcPeeringRouteTablesRule", + "logicalId": "BastionSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1503, - "startColumn": 9, - "endLine": 1503, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 203, + "startColumn": 5, + "endLine": 203, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DatabaseSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "DatabaseSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 292, + "startColumn": 5, + "endLine": 292, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LambdaRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "LambdaRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 342, + "startColumn": 5, + "endLine": 342, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DatabaseAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "DatabaseAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 368, + "startColumn": 5, + "endLine": 368, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "lsp/condition-usage.json": { + "filePath": "lsp/condition-usage.json", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 6, + "informational": 13, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3016", + "severity": "ERROR", + "message": "UpdatePolicy is not supported on resource type 'AWS::S3::Bucket'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ProductionBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "UpdatePolicy", + "suggestedFix": "Remove UpdatePolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::ElastiCache::ReplicationGroup, AWS::Elasticsearch::Domain, AWS::Lambda::Alias, AWS::OpenSearchService::Domain", + "category": "Resource", + "startLine": 75, + "startColumn": 7, + "endLine": 75, + "endColumn": 20, + "ruleDescription": "Check UpdatePolicy values for Resources", + "phase": "LINT" + }, + { + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", + "source": "CFN_LINT", + "entity": { + "logicalId": "ProductionBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.BucketName.Fn::If.2", + "category": "Best Practice", + "startLine": 62, + "startColumn": 13, + "endLine": 62, + "endColumn": 27, + "ruleDescription": "Check Fn::If has a path that cannot be reached", + "phase": "LINT" + }, + { + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", + "source": "CFN_LINT", + "entity": { + "logicalId": "ProductionBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.VersioningConfiguration.Status.Fn::If.2", + "category": "Best Practice", + "startLine": 70, + "startColumn": 15, + "endLine": 70, + "endColumn": 25, + "ruleDescription": "Check Fn::If has a path that cannot be reached", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2501", + "severity": "WARN", + "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", + "source": "CFN_LINT", "entity": { - "logicalId": "ConfigPermissionToCallVpcPeeringRouteTablesLambda", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 1557, + "propertyPath": "Properties.MasterUserPassword", + "category": "Security", + "startLine": 97, "startColumn": 9, - "endLine": 1557, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionForVpcPeeringRouteTablesRule.Arn" - } + "endLine": 97, + "endColumn": 28, + "ruleDescription": "Check if Password Properties are correctly configured", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'NotProduction' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "ConfigPermissionToCallVpcPeeringRouteTablesLambda", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "logicalId": "NotProduction", + "entityType": "Condition" }, - "propertyPath": "Properties.Action", + "propertyPath": "Conditions/NotProduction", "category": "Best Practice", - "startLine": 1558, - "startColumn": 9, - "endLine": 1558, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 47, + "startColumn": 5, + "endLine": 47, + "endColumn": 19, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallVpcPeeringRouteTablesLambda", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 1559, - "startColumn": 9, - "endLine": 1559, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 93, + "startColumn": 7, + "endLine": 93, "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForVpcPeeringRouteTabless", + "logicalId": "ConditionalResource", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ConfigRuleName", - "category": "Best Practice", - "startLine": 1568, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 104, "startColumn": 9, - "endLine": 1568, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 104, + "endColumn": 17, + "ruleDescription": "Hardcoded AMI ID", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "SnsTopicForCloudWatchEvents", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.TopicName", "category": "Best Practice", - "startLine": 1589, - "startColumn": 9, - "endLine": 1589, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 90, + "startColumn": 5, + "endLine": 90, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "GetCloudTrailCloudWatchLog", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 1603, - "startColumn": 9, - "endLine": 1603, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 90, + "startColumn": 5, + "endLine": 90, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "UnauthorizedAttemptsCloudWatchFilter", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 1651, - "startColumn": 9, - "endLine": 1651, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ResourceForGetCloudTrailCloudWatchLog.LogName", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 93, + "startColumn": 7, + "endLine": 93, + "endColumn": 18, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UnauthorizedAttemptCloudWatchAlarm", + "logicalId": "ProductionBucket", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.AlarmName", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 1662, + "startLine": 58, "startColumn": 9, - "endLine": 1662, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "endLine": 58, + "endColumn": 20, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProduction'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "IAMRootActivityCloudWatchMetric", + "logicalId": "DevelopmentBucket", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 1685, + "startLine": 87, "startColumn": 9, - "endLine": 1685, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "endLine": 87, + "endColumn": 20, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ResourceForGetCloudTrailCloudWatchLog.LogName", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "IAMRootActivityCloudWatchAlarm", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.AlarmName", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 1700, + "startLine": 95, "startColumn": 9, - "endLine": 1700, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "endLine": 95, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConsoleSigninWithoutMfaCloudWatchMetric", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 1722, + "startLine": 96, "startColumn": 9, - "endLine": 1722, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "endLine": 96, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ResourceForGetCloudTrailCloudWatchLog.LogName", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConsoleSigninWithoutMFACloudWatchAlarm", + "logicalId": "ConditionalResource", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.AlarmName", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 1738, + "startLine": 104, "startColumn": 9, - "endLine": 1738, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "endLine": 104, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -21795,406 +15598,474 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConsoleLoginFailureCloudWatchMetric", + "logicalId": "ConditionalResource", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 1761, + "startLine": 105, "startColumn": 9, - "endLine": 1761, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "endLine": 105, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ResourceForGetCloudTrailCloudWatchLog.LogName", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "conditional-create-only", + "resolutionSource": "Fn::If on condition 'IsProductionAndCreateDB'" } }, { - "ruleId": "I9001", + "ruleId": "I9003", "severity": "INFO", - "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ProductionBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConsoleLoginFailureCloudWatchAlarm", + "logicalId": "ProductionBucket", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.AlarmName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1775, - "startColumn": 9, - "endLine": 1775, + "startLine": 57, + "startColumn": 7, + "endLine": 57, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Resource 'DevelopmentBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "KMSCustomerKeyDeletionCloudWatchMetric", + "logicalId": "DevelopmentBucket", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1798, - "startColumn": 9, - "endLine": 1798, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ResourceForGetCloudTrailCloudWatchLog.LogName", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 86, + "startColumn": 7, + "endLine": 86, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "message": "Resource 'Database' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "KMSCustomerKeyDeletionCloudWatchAlarm", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.AlarmName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1812, - "startColumn": 9, - "endLine": 1812, + "startLine": 93, + "startColumn": 7, + "endLine": 93, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "lsp/condition-usage.yaml": { + "filePath": "lsp/condition-usage.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 8, + "counts": { + "fatal": 0, + "errors": 7, + "warnings": 7, + "informational": 21, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E1028", + "severity": "ERROR", + "message": "Fn::If first element must be the name of a condition, not an expression", + "source": "SCHEMA", + "entity": { + "logicalId": "LogicalConditionResource", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.AlarmName.Fn::If.0", + "category": "Intrinsic Function", + "startLine": 172, + "startColumn": 18, + "endLine": 172, + "endColumn": 19, + "ruleDescription": "Fn::If condition must exist in Conditions section", + "phase": "PARSE" + }, + { + "ruleId": "E1028", + "severity": "ERROR", + "message": "Fn::If first element must be the name of a condition, not an expression", + "source": "SCHEMA", + "entity": { + "logicalId": "LogicalConditionResource", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Threshold.Fn::If.0", + "category": "Intrinsic Function", + "startLine": 184, + "startColumn": 17, + "endLine": 184, + "endColumn": 18, + "ruleDescription": "Fn::If condition must exist in Conditions section", + "phase": "PARSE" + }, + { + "ruleId": "E1028", + "severity": "ERROR", + "message": "Fn::If first element must be the name of a condition, not an expression", + "source": "SCHEMA", + "entity": { + "logicalId": "LogicalConditionResource", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.TreatMissingData.Fn::If.0", + "category": "Intrinsic Function", + "startLine": 192, + "startColumn": 18, + "endLine": 192, + "endColumn": 19, + "ruleDescription": "Fn::If condition must exist in Conditions section", + "phase": "PARSE" + }, + { + "ruleId": "E1028", + "severity": "ERROR", + "message": "Fn::If first element must be the name of a condition, not an expression", + "source": "SCHEMA", + "entity": { + "logicalId": "LogicalConditionalOutput", + "entityType": "Output" + }, + "propertyPath": "Outputs/LogicalConditionalOutput/Value/Fn::If/0", + "category": "Intrinsic Function", + "startLine": 236, + "startColumn": 18, + "endLine": 236, + "endColumn": 19, + "ruleDescription": "Fn::If condition must exist in Conditions section", + "phase": "PARSE" + }, + { + "ruleId": "E1028", + "severity": "ERROR", + "message": "Fn::If first element must be the name of a condition, not an expression", + "source": "SCHEMA", + "entity": { + "logicalId": "LogicalConditionalOutput", + "entityType": "Output" + }, + "propertyPath": "Outputs/LogicalConditionalOutput/Value/Fn::If/2/Fn::If/0", + "category": "Intrinsic Function", + "startLine": 241, + "startColumn": 21, + "endLine": 241, + "endColumn": 22, + "ruleDescription": "Fn::If condition must exist in Conditions section", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E1028", + "severity": "ERROR", + "message": "Fn::If first element must be the name of a condition, not an expression", + "source": "SCHEMA", "entity": { - "logicalId": "FunctionToFormatCloudWatchEvent", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "logicalId": "EdgeCaseOutput", + "entityType": "Output" }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 1860, - "startColumn": 9, - "endLine": 1860, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Outputs/EdgeCaseOutput/Value/Fn::If/0", + "category": "Intrinsic Function", + "startLine": 251, + "startColumn": 19, + "endLine": 251, + "endColumn": 20, + "ruleDescription": "Fn::If condition must exist in Conditions section", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3016", + "severity": "ERROR", + "message": "UpdatePolicy is not supported on resource type 'AWS::S3::Bucket'", + "source": "CFN_LINT", "entity": { - "logicalId": "LambdaPermissionForCloudTrailCloudWatchEventRules", + "logicalId": "ProductionBucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 1897, - "startColumn": 9, - "endLine": 1897, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionToFormatCloudWatchEvent.Arn" - } + "propertyPath": "UpdatePolicy", + "suggestedFix": "Remove UpdatePolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::ElastiCache::ReplicationGroup, AWS::Elasticsearch::Domain, AWS::Lambda::Alias, AWS::OpenSearchService::Domain", + "category": "Resource", + "startLine": 78, + "startColumn": 5, + "endLine": 78, + "endColumn": 17, + "ruleDescription": "Check UpdatePolicy values for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", + "source": "CFN_LINT", "entity": { - "logicalId": "LambdaPermissionForCloudTrailCloudWatchEventRules", + "logicalId": "ProductionBucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.BucketName.Fn::If.2", "category": "Best Practice", - "startLine": 1898, - "startColumn": 9, - "endLine": 1898, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 57, + "startColumn": 54, + "endLine": 57, + "endColumn": 55, + "ruleDescription": "Check Fn::If has a path that cannot be reached", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", + "source": "CFN_LINT", "entity": { - "logicalId": "LambdaPermissionForCloudTrailCloudWatchEventRules", + "logicalId": "ProductionBucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.VersioningConfiguration.Status.Fn::If.2", "category": "Best Practice", - "startLine": 1899, - "startColumn": 9, - "endLine": 1899, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 62, + "startColumn": 43, + "endLine": 62, + "endColumn": 44, + "ruleDescription": "Check Fn::If has a path that cannot be reached", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", + "source": "CFN_LINT", "entity": { - "logicalId": "DetectS3BucketPolicyChanges", + "logicalId": "ProductionBucket", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.PublicAccessBlockConfiguration.BlockPublicAcls.Fn::If.2", "category": "Best Practice", - "startLine": 1907, - "startColumn": 9, - "endLine": 1907, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 69, + "startColumn": 13, + "endLine": 69, + "endColumn": 14, + "ruleDescription": "Check Fn::If has a path that cannot be reached", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", + "source": "CFN_LINT", "entity": { - "logicalId": "DetectConfigChanges", + "logicalId": "ProductionBucket", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.PublicAccessBlockConfiguration.BlockPublicPolicy.Fn::If.2", "category": "Best Practice", - "startLine": 1938, - "startColumn": 9, - "endLine": 1938, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 76, + "startColumn": 15, + "endLine": 76, + "endColumn": 16, + "ruleDescription": "Check Fn::If has a path that cannot be reached", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2501", + "severity": "WARN", + "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", + "source": "CFN_LINT", "entity": { - "logicalId": "KmsKeyUseCloudWatchEventRule", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 1963, - "startColumn": 9, - "endLine": 1963, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.MasterUserPassword", + "category": "Security", + "startLine": 98, + "startColumn": 7, + "endLine": 98, + "endColumn": 25, + "ruleDescription": "Check if Password Properties are correctly configured", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "CloudTrailCloudWatchEventRule", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 1985, - "startColumn": 9, - "endLine": 1985, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 94, + "startColumn": 5, + "endLine": 94, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", "source": "ENGINE", "entity": { - "logicalId": "IamPolicyChangesCloudWatchEventRule", + "logicalId": "ConditionalResource", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 2008, - "startColumn": 9, - "endLine": 2008, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 104, + "startColumn": 7, + "endLine": 104, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "BillingChangeCloudWatchEventRule", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 2046, - "startColumn": 9, - "endLine": 2046, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 91, + "startColumn": 3, + "endLine": 91, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "Ec2TerminationCloudWatchEventRule", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 2070, - "startColumn": 9, - "endLine": 2070, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 91, + "startColumn": 3, + "endLine": 91, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "SecurityGroupChangesCloudWatchEventRule", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 2093, - "startColumn": 9, - "endLine": 2093, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 94, + "startColumn": 5, + "endLine": 94, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NetworkAclChangesCloudWatchEventRule", + "logicalId": "ProductionBucket", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 2121, - "startColumn": 9, - "endLine": 2121, - "endColumn": 13, + "startLine": 57, + "startColumn": 7, + "endLine": 57, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProduction'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NetworkChangeCloudWatchEventRule", + "logicalId": "DevelopmentBucket", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 2151, - "startColumn": 9, - "endLine": 2151, - "endColumn": 13, + "startLine": 89, + "startColumn": 7, + "endLine": 89, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22204,47 +16075,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BillingChangesCloudWatchFilter", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 2187, - "startColumn": 9, - "endLine": 2187, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "startLine": 96, + "startColumn": 7, + "endLine": 96, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ResourceForGetCloudTrailCloudWatchLog.LogName", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BillingChangesCloudWatchAlarm", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.AlarmName", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 2202, - "startColumn": 9, - "endLine": 2202, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "startLine": 97, + "startColumn": 7, + "endLine": 97, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22254,19 +16121,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionToDisableUnusedCredentials", + "logicalId": "ConditionalResource", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 2255, - "startColumn": 9, - "endLine": 2255, - "endColumn": 21, + "startLine": 104, + "startColumn": 7, + "endLine": 104, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22276,42 +16144,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaPermissionForDisableUnusedCredentials", + "logicalId": "ConditionalResource", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 2342, - "startColumn": 9, - "endLine": 2342, - "endColumn": 21, + "startLine": 107, + "startColumn": 7, + "endLine": 107, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionToDisableUnusedCredentials.Arn" + "lifecycle": "conditional-create-only", + "resolutionSource": "Fn::If on condition 'IsProductionAndCreateDB'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaPermissionForDisableUnusedCredentials", + "logicalId": "ConditionalResource", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.SecurityGroups", "category": "Best Practice", - "startLine": 2343, - "startColumn": 9, - "endLine": 2343, - "endColumn": 15, + "startLine": 109, + "startColumn": 7, + "endLine": 109, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22321,19 +16191,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaPermissionForDisableUnusedCredentials", + "logicalId": "ProductionSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 2344, - "startColumn": 9, - "endLine": 2344, - "endColumn": 18, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 137, + "startColumn": 7, + "endLine": 137, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22343,19 +16213,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ScheduledRuleForDisableUnusedCredentials", + "logicalId": "DevSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 2349, - "startColumn": 9, - "endLine": 2349, - "endColumn": 13, + "startLine": 143, + "startColumn": 7, + "endLine": 143, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22363,777 +16233,852 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MasterConfigRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MasterConfigRole", + "logicalId": "NestedConditionResource", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 78, + "startLine": 149, "startColumn": 7, - "endLine": 78, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 149, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProduction'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FunctiontForEvaluateCisBenchmarkingPreconditions' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctiontForEvaluateCisBenchmarkingPreconditions", + "logicalId": "LogicalConditionResource", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::CloudWatch::Alarm" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AlarmName", "category": "Best Practice", - "startLine": 123, + "startLine": 171, "startColumn": 7, - "endLine": 123, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 171, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition '__inline_cond_131'" + } }, { - "ruleId": "I9040", + "ruleId": "I9003", "severity": "INFO", - "message": "Resource 'FunctionForEvaluateRootAccountRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", "source": "ENGINE", - "entity": { - "logicalId": "FunctionForEvaluateRootAccountRule", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 230, - "startColumn": 7, - "endLine": 230, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FunctionForVpcFlowLogRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'ProductionBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FunctionForVpcFlowLogRule", + "logicalId": "ProductionBucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 424, - "startColumn": 7, - "endLine": 424, - "endColumn": 17, + "startLine": 55, + "startColumn": 5, + "endLine": 55, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FunctionForVpcDefaultSecurityGroupsRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'DevelopmentBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FunctionForVpcDefaultSecurityGroupsRule", + "logicalId": "DevelopmentBucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 500, - "startColumn": 7, - "endLine": 500, - "endColumn": 17, + "startLine": 88, + "startColumn": 5, + "endLine": 88, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FunctionForRoleForMfaOnUsersRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'Database' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FunctionForRoleForMfaOnUsersRule", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 609, - "startColumn": 7, - "endLine": 609, - "endColumn": 17, + "startLine": 94, + "startColumn": 5, + "endLine": 94, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FunctionForEvaluatePolicyPermissionsRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'ProductionSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluatePolicyPermissionsRule", + "logicalId": "ProductionSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 702, - "startColumn": 7, - "endLine": 702, - "endColumn": 17, + "startLine": 136, + "startColumn": 5, + "endLine": 136, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FunctionForEvaluateUserPolicyAssociationRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'DevSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateUserPolicyAssociationRule", + "logicalId": "DevSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 798, - "startColumn": 7, - "endLine": 798, - "endColumn": 17, + "startLine": 142, + "startColumn": 5, + "endLine": 142, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FunctionForEvaluateCloudTrailRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'LogicalConditionResource' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateCloudTrailRule", + "logicalId": "LogicalConditionResource", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::CloudWatch::Alarm" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 889, - "startColumn": 7, - "endLine": 889, - "endColumn": 17, + "startLine": 170, + "startColumn": 5, + "endLine": 170, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "lsp/constants.json": { + "filePath": "lsp/constants.json", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 5, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FunctionForEvaluateCloudTrailBucketRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FunctionForEvaluateCloudTrailBucketRule", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1002, - "startColumn": 7, - "endLine": 1002, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleId": "F0005", + "severity": "FATAL", + "message": "'Constants' is not a valid top-level template section", + "source": "SCHEMA", + "propertyPath": "Constants", + "category": "Structure", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 13, + "ruleDescription": "Top-level keys must be valid section names", + "phase": "SCHEMA" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FunctionForEvaluateCloudTrailLogIntegrityRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F1018", + "severity": "FATAL", + "message": "Fn::Sub variable '${sub}' does not reference a valid resource, parameter, or pseudo-parameter", + "source": "SCHEMA", "entity": { - "logicalId": "FunctionForEvaluateCloudTrailLogIntegrityRule", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1119, - "startColumn": 7, - "endLine": 1119, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Metadata.Test", + "category": "Intrinsic Function", + "startLine": 19, + "startColumn": 9, + "endLine": 19, + "endColumn": 14, + "ruleDescription": "Sub variables must resolve", + "phase": "SCHEMA" }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FunctionForInstanceRoleUseRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + { + "ruleId": "F1018", + "severity": "FATAL", + "message": "Fn::Sub variable '${foo}' does not reference a valid resource, parameter, or pseudo-parameter", + "source": "SCHEMA", "entity": { - "logicalId": "FunctionForInstanceRoleUseRule", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1216, - "startColumn": 7, - "endLine": 1216, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.BucketName", + "category": "Intrinsic Function", + "startLine": 27, + "startColumn": 9, + "endLine": 27, + "endColumn": 20, + "ruleDescription": "Sub variables must resolve", + "phase": "SCHEMA", + "context": { + "resolutionSource": "dynamic (Sub:${foo})" + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FunctionForEvaluateKeyRotationRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F1020", + "severity": "FATAL", + "message": "'obj' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'Bucket', 'PersonalS3']", + "source": "SCHEMA", "entity": { - "logicalId": "FunctionForEvaluateKeyRotationRule", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1301, - "startColumn": 7, - "endLine": 1301, + "propertyPath": "Metadata.TestObj", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 22, + "startColumn": 9, + "endLine": 22, "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FunctionForEvaluateConfigInAllRegionsRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F1020", + "severity": "FATAL", + "message": "'foo' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'Bucket', 'PersonalS3']", + "source": "SCHEMA", "entity": { - "logicalId": "FunctionForEvaluateConfigInAllRegionsRule", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1397, - "startColumn": 7, - "endLine": 1397, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.Tags.0.Value", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 33, + "startColumn": 13, + "endLine": 33, + "endColumn": 19, + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FunctionForVpcPeeringRouteTablesRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionForVpcPeeringRouteTablesRule", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 1502, - "startColumn": 7, - "endLine": 1502, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 27, + "startColumn": 9, + "endLine": 27, + "endColumn": 20, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:${foo})" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SnsTopicForCloudWatchEvents' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SnsTopicForCloudWatchEvents", + "logicalId": "PersonalS3", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 1588, - "startColumn": 7, - "endLine": 1588, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 43, + "startColumn": 9, + "endLine": 43, + "endColumn": 20, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'GetCloudTrailCloudWatchLog' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'PersonalS3' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "GetCloudTrailCloudWatchLog", + "logicalId": "PersonalS3", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1602, + "startLine": 42, "startColumn": 7, - "endLine": 1602, - "endColumn": 17, + "endLine": 42, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "lsp/constants.yaml": { + "filePath": "lsp/constants.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 5, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'UnauthorizedAttemptCloudWatchAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F0005", + "severity": "FATAL", + "message": "'Constants' is not a valid top-level template section", + "source": "SCHEMA", + "propertyPath": "Constants", + "category": "Structure", + "startLine": 4, + "startColumn": 1, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Top-level keys must be valid section names", + "phase": "SCHEMA" + }, + { + "ruleId": "F1018", + "severity": "FATAL", + "message": "Fn::Sub variable '${sub}' does not reference a valid resource, parameter, or pseudo-parameter", + "source": "SCHEMA", "entity": { - "logicalId": "UnauthorizedAttemptCloudWatchAlarm", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1661, + "propertyPath": "Metadata.Test", + "category": "Intrinsic Function", + "startLine": 15, "startColumn": 7, - "endLine": 1661, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 15, + "endColumn": 11, + "ruleDescription": "Sub variables must resolve", + "phase": "SCHEMA" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'IAMRootActivityCloudWatchAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F1018", + "severity": "FATAL", + "message": "Fn::Sub variable '${foo}' does not reference a valid resource, parameter, or pseudo-parameter", + "source": "SCHEMA", "entity": { - "logicalId": "IAMRootActivityCloudWatchAlarm", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1699, + "propertyPath": "Properties.BucketName", + "category": "Intrinsic Function", + "startLine": 18, "startColumn": 7, - "endLine": 1699, + "endLine": 18, "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Sub variables must resolve", + "phase": "SCHEMA", + "context": { + "resolutionSource": "dynamic (Sub:${foo})" + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ConsoleSigninWithoutMFACloudWatchAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F1020", + "severity": "FATAL", + "message": "'obj' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'Bucket', 'PersonalS3']", + "source": "SCHEMA", "entity": { - "logicalId": "ConsoleSigninWithoutMFACloudWatchAlarm", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1737, + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata.TestObj", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 16, "startColumn": 7, - "endLine": 1737, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 16, + "endColumn": 14, + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ConsoleLoginFailureCloudWatchAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F1020", + "severity": "FATAL", + "message": "'foo' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'Bucket', 'PersonalS3']", + "source": "SCHEMA", "entity": { - "logicalId": "ConsoleLoginFailureCloudWatchAlarm", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1774, - "startColumn": 7, - "endLine": 1774, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.Tags.0.Value", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 21, + "startColumn": 11, + "endLine": 21, + "endColumn": 16, + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'KMSCustomerKeyDeletionCloudWatchAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "KMSCustomerKeyDeletionCloudWatchAlarm", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 1811, + "startLine": 18, "startColumn": 7, - "endLine": 1811, + "endLine": 18, "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:${foo})" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'RoleForCloudWatchEvents' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RoleForCloudWatchEvents", + "logicalId": "PersonalS3", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 1831, + "startLine": 26, "startColumn": 7, - "endLine": 1831, + "endLine": 26, "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FunctionToFormatCloudWatchEvent' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'PersonalS3' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FunctionToFormatCloudWatchEvent", + "logicalId": "PersonalS3", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1859, - "startColumn": 7, - "endLine": 1859, - "endColumn": 17, + "startLine": 25, + "startColumn": 5, + "endLine": 25, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "lsp/parameter_usage.json": { + "filePath": "lsp/parameter_usage.json", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 3, + "informational": 10, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DetectS3BucketPolicyChanges' of type 'AWS::Events::Rule' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3001", + "severity": "ERROR", + "message": "Resource 'Bucket1' has invalid property 'Conditions'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", + "source": "CFN_LINT", "entity": { - "logicalId": "DetectS3BucketPolicyChanges", + "logicalId": "Bucket1", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 1906, + "category": "Resource", + "startLine": 31, "startColumn": 7, - "endLine": 1906, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 31, + "endColumn": 18, + "ruleDescription": "Basic CloudFormation Resource Check", + "phase": "PARSE" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DetectConfigChanges' of type 'AWS::Events::Rule' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'EnvMap' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "DetectConfigChanges", - "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "logicalId": "EnvMap", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/EnvMap", "category": "Best Practice", - "startLine": 1937, - "startColumn": 7, - "endLine": 1937, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", + "startLine": 11, + "startColumn": 5, + "endLine": 11, + "endColumn": 12, + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'KmsKeyUseCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'IsProduction' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "KmsKeyUseCloudWatchEventRule", - "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "logicalId": "IsProduction", + "entityType": "Condition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Conditions/IsProduction", "category": "Best Practice", - "startLine": 1962, - "startColumn": 7, - "endLine": 1962, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", + "startLine": 21, + "startColumn": 5, + "endLine": 21, + "endColumn": 18, + "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CloudTrailCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'IsDevEnv' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "CloudTrailCloudWatchEventRule", - "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "logicalId": "IsDevEnv", + "entityType": "Condition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Conditions/IsDevEnv", "category": "Best Practice", - "startLine": 1984, - "startColumn": 7, - "endLine": 1984, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", + "startLine": 24, + "startColumn": 5, + "endLine": 24, + "endColumn": 14, + "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'IamPolicyChangesCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "IamPolicyChangesCloudWatchEventRule", + "logicalId": "Bucket1", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 2007, - "startColumn": 7, - "endLine": 2007, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 33, + "startColumn": 9, + "endLine": 33, + "endColumn": 20, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BillingChangeCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BillingChangeCloudWatchEventRule", + "logicalId": "Bucket2", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 2045, - "startColumn": 7, - "endLine": 2045, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 41, + "startColumn": 9, + "endLine": 41, + "endColumn": 20, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Ec2TerminationCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2TerminationCloudWatchEventRule", + "logicalId": "Bucket3", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 2069, - "startColumn": 7, - "endLine": 2069, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 49, + "startColumn": 9, + "endLine": 49, + "endColumn": 20, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SecurityGroupChangesCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroupChangesCloudWatchEventRule", + "logicalId": "Bucket4", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 2092, - "startColumn": 7, - "endLine": 2092, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 57, + "startColumn": 9, + "endLine": 57, + "endColumn": 20, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'NetworkAclChangesCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NetworkAclChangesCloudWatchEventRule", + "logicalId": "Bucket5", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 2120, - "startColumn": 7, - "endLine": 2120, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 65, + "startColumn": 9, + "endLine": 65, + "endColumn": 20, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'NetworkChangeCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Resource 'Bucket1' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "NetworkChangeCloudWatchEventRule", + "logicalId": "Bucket1", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 2150, + "startLine": 32, "startColumn": 7, - "endLine": 2150, - "endColumn": 17, + "endLine": 32, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BillingChangesCloudWatchAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Resource 'Bucket2' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BillingChangesCloudWatchAlarm", + "logicalId": "Bucket2", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 2201, + "startLine": 40, "startColumn": 7, - "endLine": 2201, - "endColumn": 17, + "endLine": 40, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'RoleForDisableUnusedCredentialsFunction' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'Bucket3' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RoleForDisableUnusedCredentialsFunction", + "logicalId": "Bucket3", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 2221, + "startLine": 48, "startColumn": 7, - "endLine": 2221, - "endColumn": 17, + "endLine": 48, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FunctionToDisableUnusedCredentials' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'Bucket4' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FunctionToDisableUnusedCredentials", + "logicalId": "Bucket4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 2254, + "startLine": 56, "startColumn": 7, - "endLine": 2254, - "endColumn": 17, + "endLine": 56, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ScheduledRuleForDisableUnusedCredentials' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Resource 'Bucket5' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ScheduledRuleForDisableUnusedCredentials", + "logicalId": "Bucket5", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 2348, + "startLine": 64, "startColumn": 7, - "endLine": 2348, - "endColumn": 17, + "endLine": 64, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "quickstart/config-rules.json": { - "filePath": "quickstart/config-rules.json", + "lsp/parameter_usage.yaml": { + "filePath": "lsp/parameter_usage.yaml", "status": "OK", "metadata": { - "resourcesScanned": 12, + "resourcesScanned": 7, "counts": { "fatal": 0, - "errors": 2, - "warnings": 5, - "informational": 15, + "errors": 1, + "warnings": 3, + "informational": 14, "debug": 0 }, "suppressed": 0, @@ -23142,164 +17087,93 @@ }, "diagnostics": [ { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs' was deprecated on '2016-08-30'. Creation was disabled on '2016-09-30', and updates were disabled on '2016-10-31'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "rAMIComplianceFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 194, - "startColumn": 5, - "endLine": 194, - "endColumn": 13, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs", - "lifecycle": "end-of-life" - } - }, - { - "ruleId": "E2533", + "ruleId": "E3001", "severity": "ERROR", - "message": "Runtime 'nodejs' was deprecated on '2016-08-30'. Creation was disabled on '2016-09-30', and updates were disabled on '2016-10-31'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "rCloudTrailValidationFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 291, - "startColumn": 5, - "endLine": 291, - "endColumn": 13, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs", - "lifecycle": "end-of-life" - } - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rConfigRulesLambdaRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "rAMIComplianceFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 141, - "startColumn": 4, - "endLine": 141, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rConfigRulesLambdaRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "Resource 'Bucket1' has invalid property 'Conditions'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", "source": "CFN_LINT", "entity": { - "logicalId": "rCloudTrailValidationFunction", + "logicalId": "Bucket1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 239, - "startColumn": 4, - "endLine": 239, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "category": "Resource", + "startLine": 27, + "startColumn": 5, + "endLine": 27, + "endColumn": 15, + "ruleDescription": "Basic CloudFormation Resource Check", + "phase": "PARSE" }, { - "ruleId": "W8003", + "ruleId": "W7001", "severity": "WARN", - "message": "Fn::Equals in condition 'cApprovedAMIsRule' will always return True", + "message": "Mapping 'EnvMap' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "cApprovedAMIsRule", - "entityType": "Condition" + "logicalId": "EnvMap", + "entityType": "Mapping" }, - "propertyPath": "Conditions/cApprovedAMIsRule", + "propertyPath": "Mappings/EnvMap", "category": "Best Practice", - "startLine": 38, + "startLine": 12, "startColumn": 3, - "endLine": 38, - "endColumn": 21, - "ruleDescription": "Fn::Equals will always return true or false", - "phase": "PARSE" + "endLine": 12, + "endColumn": 9, + "ruleDescription": "Check if Mappings are Used", + "phase": "LINT" }, { - "ruleId": "W9003", + "ruleId": "W8001", "severity": "WARN", - "message": "'30' is not of type 'integer' - automatically coerced (string to integer)", + "message": "Condition 'IsProduction' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "rAMIComplianceFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "logicalId": "IsProduction", + "entityType": "Condition" }, - "propertyPath": "Properties.Timeout", + "propertyPath": "Conditions/IsProduction", "category": "Best Practice", - "startLine": 195, - "startColumn": 5, - "endLine": 195, - "endColumn": 13, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 20, + "startColumn": 3, + "endLine": 20, + "endColumn": 15, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { - "ruleId": "W9003", + "ruleId": "W8001", "severity": "WARN", - "message": "'30' is not of type 'integer' - automatically coerced (string to integer)", + "message": "Condition 'IsDevEnv' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "rCloudTrailValidationFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "logicalId": "IsDevEnv", + "entityType": "Condition" }, - "propertyPath": "Properties.Timeout", + "propertyPath": "Conditions/IsDevEnv", "category": "Best Practice", - "startLine": 292, - "startColumn": 5, - "endLine": 292, - "endColumn": 13, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 21, + "startColumn": 3, + "endLine": 21, + "endColumn": 11, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigRuleForSSH", + "logicalId": "Bucket1", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 48, - "startColumn": 5, - "endLine": 48, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "startLine": 29, + "startColumn": 7, + "endLine": 29, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -23309,20 +17183,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigRuleForRequiredTags", + "logicalId": "Bucket2", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 63, - "startColumn": 5, - "endLine": 63, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -23332,20 +17205,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigRuleForUnrestrictedPorts", + "logicalId": "Bucket3", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 83, - "startColumn": 5, - "endLine": 83, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "startLine": 42, + "startColumn": 7, + "endLine": 42, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -23355,20 +17227,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigRulesLambdaRole", + "logicalId": "Bucket4", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 110, - "startColumn": 5, - "endLine": 110, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "startLine": 48, + "startColumn": 7, + "endLine": 48, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -23378,19 +17249,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigRulesLambdaProfile", + "logicalId": "Bucket5", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 133, - "startColumn": 5, - "endLine": 133, - "endColumn": 10, + "startLine": 53, + "startColumn": 7, + "endLine": 53, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -23400,20 +17271,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigRuleForAMICompliance", + "logicalId": "Bucket6", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 205, - "startColumn": 5, - "endLine": 205, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "startLine": 58, + "startColumn": 7, + "endLine": 58, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -23423,176 +17293,314 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigPermissionToCallLambdaAMICompliance", + "logicalId": "Bucket7", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 230, - "startColumn": 5, - "endLine": 230, - "endColumn": 18, + "startLine": 64, + "startColumn": 7, + "endLine": 64, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt rAMIComplianceFunction.Arn" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Resource 'Bucket1' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket1", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 28, + "startColumn": 5, + "endLine": 28, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Bucket2' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket2", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 34, + "startColumn": 5, + "endLine": 34, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Bucket3' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket3", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 41, + "startColumn": 5, + "endLine": 41, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Bucket4' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rConfigPermissionToCallLambdaAMICompliance", + "logicalId": "Bucket4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 233, + "startLine": 47, "startColumn": 5, - "endLine": 233, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 47, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Resource 'Bucket5' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rConfigPermissionToCallLambdaAMICompliance", + "logicalId": "Bucket5", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 234, + "startLine": 52, "startColumn": 5, - "endLine": 234, + "endLine": 52, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Resource 'Bucket6' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rConfigRuleForCloudTrail", + "logicalId": "Bucket6", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 301, + "startLine": 57, "startColumn": 5, - "endLine": 301, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 57, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'Bucket7' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rConfigPermissionToCallLambdaCloudTrail", + "logicalId": "Bucket7", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 322, + "startLine": 63, "startColumn": 5, - "endLine": 322, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt rCloudTrailValidationFunction.Arn" - } + "endLine": 63, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "lsp/simple.json": { + "filePath": "lsp/simple.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rConfigPermissionToCallLambdaCloudTrail", + "logicalId": "MyS3Bucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 325, + "startLine": 4, "startColumn": 5, - "endLine": 325, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 4, + "endColumn": 16, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "lsp/simple.yaml": { + "filePath": "lsp/simple.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rConfigPermissionToCallLambdaCloudTrail", + "logicalId": "MyS3Bucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 326, - "startColumn": 5, - "endLine": 326, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "lsp/test-template.yaml": { + "filePath": "lsp/test-template.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 0, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3038", + "severity": "ERROR", + "message": "Resource type 'AWS::Serverless::Function' requires the AWS::Serverless-2016-10-31 transform", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyFunction", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "category": "Structure", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Check if Serverless Resources have Serverless Transform", + "phase": "LINT" + }, + { + "ruleId": "E3038", + "severity": "ERROR", + "message": "Resource type 'AWS::Serverless::Api' requires the AWS::Serverless-2016-10-31 transform", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyApi", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Api" + }, + "category": "Structure", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 8, + "ruleDescription": "Check if Serverless Resources have Serverless Transform", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'rConfigRulesLambdaRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'MyFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rConfigRulesLambdaRole", + "logicalId": "MyFunction", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 99, - "startColumn": 4, - "endLine": 99, + "startLine": 4, + "startColumn": 5, + "endLine": 4, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23600,35 +17608,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'rCloudTrailValidationFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'MyApi' of type 'AWS::Serverless::Api' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rCloudTrailValidationFunction", + "logicalId": "MyApi", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Serverless::Api" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 240, - "startColumn": 4, - "endLine": 240, + "startLine": 8, + "startColumn": 5, + "endLine": 8, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "quickstart/iam.json": { - "filePath": "quickstart/iam.json", - "status": "OK", + "malformed.yaml": { + "filePath": "malformed.yaml", + "status": "ERROR", "metadata": { - "resourcesScanned": 18, + "resourcesScanned": 0, "counts": { - "fatal": 0, + "fatal": 1, "errors": 0, - "warnings": 5, - "informational": 8, + "warnings": 0, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -23637,102 +17645,82 @@ }, "diagnostics": [ { - "ruleId": "W2512", - "severity": "WARN", - "message": "IAM policy uses NotAction which grants all actions except those listed - consider using Action instead", - "source": "ENGINE", - "entity": { - "logicalId": "rSysAdminPolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" - }, - "category": "Security", - "startLine": 61, - "startColumn": 3, - "endLine": 61, - "endColumn": 19, - "ruleDescription": "IAM policy with NotAction", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rSysAdminRole' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", - "source": "CFN_LINT", - "entity": { - "logicalId": "rSysAdminProfile", - "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 45, - "startColumn": 4, - "endLine": 45, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rIAMAdminRole' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", - "source": "CFN_LINT", - "entity": { - "logicalId": "rIAMAdminProfile", - "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 139, - "startColumn": 4, - "endLine": 139, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "ruleId": "F1101", + "severity": "FATAL", + "message": "YAML parse error: mapping values are not allowed in this context at byte 10 line 1 column 11", + "source": "SCHEMA", + "category": "Structure", + "startLine": 1, + "startColumn": 11, + "endLine": 1, + "endColumn": 11, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" + } + ] + }, + "public/lambda-poller.json": { + "filePath": "public/lambda-poller.json", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 9, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rInstanceOpsRole' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs6.10' was deprecated on '2019-08-12'. Creation was disabled on '2019-07-12', and updates were disabled on '2019-08-12'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "rInstanceOpsProfile", + "logicalId": "PollerFunction", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 211, - "startColumn": 4, - "endLine": 211, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 92, + "startColumn": 17, + "endLine": 92, + "endColumn": 25, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs6.10", + "lifecycle": "end-of-life" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rReadOnlyAdminRole' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rReadOnlyAdminProfile", + "logicalId": "PollerFunctionIamRole", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 324, - "startColumn": 4, - "endLine": 324, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 37, + "startColumn": 17, + "endLine": 37, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", @@ -23740,16 +17728,17 @@ "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rSysAdminProfile", + "logicalId": "PollerEventRuleIamRole", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 47, - "startColumn": 5, - "endLine": 47, - "endColumn": 10, + "startLine": 133, + "startColumn": 17, + "endLine": 133, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -23759,19 +17748,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rIAMAdminProfile", + "logicalId": "PollerFunctionEventInvokePermission", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 141, - "startColumn": 5, - "endLine": 141, - "endColumn": 10, + "startLine": 192, + "startColumn": 17, + "endLine": 192, + "endColumn": 24, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -23781,41 +17770,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rInstanceOpsProfile", + "logicalId": "PollerFunctionEventInvokePermission", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 213, - "startColumn": 5, - "endLine": 213, - "endColumn": 10, + "startLine": 193, + "startColumn": 17, + "endLine": 193, + "endColumn": 30, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'PollerFunction'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rReadOnlyAdminProfile", + "logicalId": "PollerFunctionEventInvokePermission", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 326, - "startColumn": 5, - "endLine": 326, - "endColumn": 10, + "startLine": 196, + "startColumn": 17, + "endLine": 196, + "endColumn": 27, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -23823,97 +17813,100 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'rSysAdminRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rSysAdminRole", + "logicalId": "PollerFunctionEventInvokePermission", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 24, - "startColumn": 4, - "endLine": 24, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 197, + "startColumn": 17, + "endLine": 197, + "endColumn": 27, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt PollerEventRule.Arn" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'rIAMAdminRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'PollerFunctionIamRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rIAMAdminRole", + "logicalId": "PollerFunctionIamRole", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 119, - "startColumn": 4, - "endLine": 119, - "endColumn": 15, + "startLine": 20, + "startColumn": 13, + "endLine": 20, + "endColumn": 24, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'rInstanceOpsRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'PollerEventRuleIamRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rInstanceOpsRole", + "logicalId": "PollerEventRuleIamRole", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 191, - "startColumn": 4, - "endLine": 191, - "endColumn": 15, + "startLine": 116, + "startColumn": 13, + "endLine": 116, + "endColumn": 24, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'rReadOnlyAdminRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'PollerEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rReadOnlyAdminRole", + "logicalId": "PollerEventRule", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Events::Rule" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 304, - "startColumn": 4, - "endLine": 304, - "endColumn": 15, + "startLine": 162, + "startColumn": 13, + "endLine": 162, + "endColumn": 24, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "quickstart/nat-instance.json": { - "filePath": "quickstart/nat-instance.json", + "public/lambda-poller.yaml": { + "filePath": "public/lambda-poller.yaml", "status": "OK", "metadata": { "resourcesScanned": 5, "counts": { "fatal": 0, - "errors": 0, - "warnings": 3, - "informational": 14, + "errors": 1, + "warnings": 0, + "informational": 9, "debug": 0 }, "suppressed": 0, @@ -23922,162 +17915,45 @@ }, "diagnostics": [ { - "ruleId": "W1030", - "severity": "WARN", - "message": "{'Ref': 'pNatAmi'} is not a 'AWS::EC2::Image.Id' when 'Ref' is resolved", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNatInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "suggestedFix": "Use parameter type AWS::EC2::Image::Id", - "category": "Best Practice", - "startLine": 129, - "startColumn": 5, - "endLine": 129, - "endColumn": 13, - "ruleDescription": "Validate the values that come from a Ref function", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'pVpcId' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "pVpcId", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/pVpcId", - "category": "Best Practice", - "startLine": 57, - "startColumn": 3, - "endLine": 57, - "endColumn": 10, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2506", - "severity": "WARN", - "message": "Parameter 'pNatAmi' is used as an ImageId but has Type 'String' - consider using 'AWS::EC2::Image::Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "pNatAmi", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/pNatAmi", - "category": "Best Practice", - "startLine": 47, - "startColumn": 3, - "endLine": 47, - "endColumn": 11, - "ruleDescription": "Check if ImageId Parameters have the correct type", - "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "rNatInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.Tags.0.Value.Fn::Join", - "category": "Intrinsic Function", - "startLine": 106, - "startColumn": 7, - "endLine": 106, - "endColumn": 16, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs6.10' was deprecated on '2019-08-12'. Creation was disabled on '2019-07-12', and updates were disabled on '2019-08-12'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "rNatInstance", + "logicalId": "PollerFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.UserData.Fn::Base64.Fn::Join", - "category": "Intrinsic Function", - "startLine": 113, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 151, "startColumn": 7, - "endLine": 113, - "endColumn": 16, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNatInstanceEni", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkInterface" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 78, - "startColumn": 5, - "endLine": 78, + "endLine": 151, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/networkinterface", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNatInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 96, - "startColumn": 5, - "endLine": 96, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "actualValue": "nodejs6.10", + "lifecycle": "end-of-life" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rNatInstance", + "logicalId": "PollerFunctionIamRole", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.KeyName", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 100, - "startColumn": 5, - "endLine": 100, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 27, + "startColumn": 7, + "endLine": 27, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24087,43 +17963,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rNatInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.UserData", - "category": "Best Practice", - "startLine": 111, - "startColumn": 5, - "endLine": 111, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rNatInstance", + "logicalId": "PollerEventRuleIamRole", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 129, - "startColumn": 5, - "endLine": 129, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 172, + "startColumn": 7, + "endLine": 172, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24133,20 +17986,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rNatInstance", + "logicalId": "PollerFunctionEventInvokePermission", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.NetworkInterfaces", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 132, - "startColumn": 5, - "endLine": 132, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 197, + "startColumn": 7, + "endLine": 197, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24156,74 +18008,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AssociateEipNat", - "entityType": "Resource", - "resourceType": "AWS::EC2::EIPAssociation" - }, - "propertyPath": "Properties.AllocationId", - "category": "Best Practice", - "startLine": 143, - "startColumn": 5, - "endLine": 143, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/tree/master/aws-ec2-eipassociation", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt rEipNat.AllocationId", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkInterfaceId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AssociateEipNat", + "logicalId": "PollerFunctionEventInvokePermission", "entityType": "Resource", - "resourceType": "AWS::EC2::EIPAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.NetworkInterfaceId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 149, - "startColumn": 5, - "endLine": 149, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/tree/master/aws-ec2-eipassociation", + "startLine": 198, + "startColumn": 7, + "endLine": 198, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'rNatInstanceEni'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "Ref to 'PollerFunction'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rRouteProdPrivateNatInstance", + "logicalId": "PollerFunctionEventInvokePermission", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 157, - "startColumn": 5, - "endLine": 157, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "startLine": 199, + "startColumn": 7, + "endLine": 199, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24233,67 +18053,98 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rRouteProdPrivateNatInstance", + "logicalId": "PollerFunctionEventInvokePermission", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 158, - "startColumn": 5, - "endLine": 158, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "startLine": 200, + "startColumn": 7, + "endLine": 200, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt PollerEventRule.Arn" } }, { - "ruleId": "I9003", + "ruleId": "I9040", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "message": "Resource 'PollerFunctionIamRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", + "entity": { + "logicalId": "PollerFunctionIamRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "startLine": 17, + "startColumn": 5, + "endLine": 17, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'rEipNat' of type 'AWS::EC2::EIP' supports Tags but none are configured", + "message": "Resource 'PollerEventRuleIamRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rEipNat", + "logicalId": "PollerEventRuleIamRole", "entityType": "Resource", - "resourceType": "AWS::EC2::EIP" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 71, - "startColumn": 4, - "endLine": 71, + "startLine": 162, + "startColumn": 5, + "endLine": 162, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'PollerEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "PollerEventRule", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 185, + "startColumn": 5, + "endLine": 185, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "quickstart/nist_application.yaml": { - "filePath": "quickstart/nist_application.yaml", + "public/rds-cluster.yaml": { + "filePath": "public/rds-cluster.yaml", "status": "OK", "metadata": { - "resourcesScanned": 28, + "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 0, - "warnings": 81, - "informational": 76, + "errors": 1, + "warnings": 1, + "informational": 7, "debug": 0 }, "suppressed": 0, @@ -24302,2812 +18153,2621 @@ }, "diagnostics": [ { - "ruleId": "W1011", - "severity": "WARN", - "message": "Use dynamic references (e.g., SSM SecureString) instead of parameter 'pDBPassword' for secrets", - "source": "CFN_LINT", - "entity": { - "logicalId": "rRDSInstanceMySQL", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 1016, - "startColumn": 7, - "endLine": 1016, - "endColumn": 25, - "ruleDescription": "Instead of REFing a parameter for a secret use a dynamic reference", - "phase": "LINT" - }, - { - "ruleId": "W1030", - "severity": "WARN", - "message": "{'Ref': 'pAppAmi'} is not a 'AWS::EC2::Image.Id' when 'Ref' is resolved", - "source": "CFN_LINT", - "entity": { - "logicalId": "rAutoScalingConfigApp", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.ImageId", - "suggestedFix": "Use parameter type AWS::EC2::Image::Id", - "category": "Best Practice", - "startLine": 378, - "startColumn": 7, - "endLine": 378, - "endColumn": 14, - "ruleDescription": "Validate the values that come from a Ref function", - "phase": "LINT" - }, - { - "ruleId": "W1030", - "severity": "WARN", - "message": "{'Ref': 'pWebServerAMI'} is not a 'AWS::EC2::Image.Id' when 'Ref' is resolved", - "source": "CFN_LINT", - "entity": { - "logicalId": "rAutoScalingConfigWeb", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.ImageId", - "suggestedFix": "Use parameter type AWS::EC2::Image::Id", - "category": "Best Practice", - "startLine": 510, - "startColumn": 7, - "endLine": 510, - "endColumn": 14, - "ruleDescription": "Validate the values that come from a Ref function", - "phase": "LINT" - }, - { - "ruleId": "W1030", - "severity": "WARN", - "message": "{'Ref': 'pWebServerAMI'} is not a 'AWS::EC2::Image.Id' when 'Ref' is resolved", + "ruleId": "E9006", + "severity": "ERROR", + "message": "'aurora' is not one of ['aurora-mysql', 'aurora-postgresql', 'mysql', 'postgres']", "source": "CFN_LINT", "entity": { - "logicalId": "rPostProcInstance", + "logicalId": "DBCluster", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.ImageId", - "suggestedFix": "Use parameter type AWS::EC2::Image::Id", - "category": "Best Practice", - "startLine": 800, + "propertyPath": "Properties.Engine", + "category": "Schema", + "startLine": 24, "startColumn": 7, - "endLine": 800, - "endColumn": 14, - "ruleDescription": "Validate the values that come from a Ref function", - "phase": "LINT" + "endLine": 24, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Property value not valid for conditional extension enum", + "phase": "SCHEMA" }, { - "ruleId": "W2010", + "ruleId": "W1011", "severity": "WARN", - "message": "Don't use 'NoEcho' parameter 'pDBPassword' in resource metadata", + "message": "Use dynamic references (e.g., SSM SecureString) instead of parameter 'DatabaseMasterPassword' for secrets", "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingConfigApp", + "logicalId": "DBCluster", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.install_wordpress.files./tmp/create-wp-config.content.Fn::Join.1.9", - "suggestedFix": "Move the parameter reference out of Metadata or remove NoEcho", + "propertyPath": "Properties.MasterUserPassword", "category": "Security", - "startLine": 343, - "startColumn": 24, - "endLine": 343, + "startLine": 22, + "startColumn": 7, + "endLine": 22, "endColumn": 25, - "ruleDescription": "NoEcho parameters are not masked when used in Metadata and Outputs", - "phase": "LINT" - }, - { - "ruleId": "W2506", - "severity": "WARN", - "message": "Parameter 'pAppAmi' is used as an ImageId but has Type 'String' - consider using 'AWS::EC2::Image::Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "pAppAmi", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/pAppAmi", - "category": "Best Practice", - "startLine": 125, - "startColumn": 3, - "endLine": 125, - "endColumn": 10, - "ruleDescription": "Check if ImageId Parameters have the correct type", - "phase": "LINT" - }, - { - "ruleId": "W2506", - "severity": "WARN", - "message": "Parameter 'pWebServerAMI' is used as an ImageId but has Type 'String' - consider using 'AWS::EC2::Image::Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "pWebServerAMI", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/pWebServerAMI", - "category": "Best Practice", - "startLine": 213, - "startColumn": 3, - "endLine": 213, - "endColumn": 16, - "ruleDescription": "Check if ImageId Parameters have the correct type", - "phase": "LINT" - }, - { - "ruleId": "W2511", - "severity": "WARN", - "message": "IAM Policy Version should be updated to '2012-10-17'", - "source": "CFN_LINT", - "entity": { - "logicalId": "rS3AccessLogsPolicy", - "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" - }, - "propertyPath": "Properties.PolicyDocument.Version", - "suggestedFix": "Update the policy document Version to '2012-10-17'", - "category": "Security", - "startLine": 1058, - "startColumn": 9, - "endLine": 1058, - "endColumn": 16, - "ruleDescription": "Check IAM Resource Policies syntax", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rRDSInstanceMySQL' dependency already enforced by a 'GetAtt' at 'Metadata.AWS::CloudFormation::Init.install_wordpress.files./tmp/create-wp-config.content.Fn::Join.1.12'", - "source": "CFN_LINT", - "entity": { - "logicalId": "rAutoScalingConfigApp", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 219, - "startColumn": 5, - "endLine": 219, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rELBApp' dependency already enforced by a 'GetAtt' at 'Metadata.AWS::CloudFormation::Init.nginx.files./tmp/nginx/default.conf.content.Fn::Join.1.9'", - "source": "CFN_LINT", - "entity": { - "logicalId": "rAutoScalingConfigWeb", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 417, - "startColumn": 5, - "endLine": 417, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rAutoScalingConfigApp' dependency already enforced by a 'Ref' at 'Properties.LaunchConfigurationName'", - "source": "CFN_LINT", - "entity": { - "logicalId": "rAutoScalingGroupApp", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 577, - "startColumn": 5, - "endLine": 577, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "ruleDescription": "Instead of REFing a parameter for a secret use a dynamic reference", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rAutoScalingConfigWeb' dependency already enforced by a 'Ref' at 'Properties.LaunchConfigurationName'", + "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": "rAutoScalingGroupWeb", + "logicalId": "DBCluster", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 603, - "startColumn": 5, - "endLine": 603, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rAutoScalingGroupWeb' dependency already enforced by a 'Ref' at 'Properties.Dimensions.0.Value'", + "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": "rCWAlarmLowCPUWeb", + "logicalId": "DBCluster", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 698, - "startColumn": 5, - "endLine": 698, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rS3ELBAccessLogs' dependency already enforced by a 'Ref' at 'Properties.AccessLoggingPolicy.S3BucketName'", + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "rELBApp", + "logicalId": "DBCluster", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 723, + "startLine": 20, "startColumn": 5, - "endLine": 723, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 20, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rSecurityGroupApp' dependency already enforced by a 'Ref' at 'Properties.SecurityGroups.0'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rELBApp", + "logicalId": "DBCluster", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 723, - "startColumn": 5, - "endLine": 723, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "parameter 'DatabaseMasterUsername' (type String)" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rS3ELBAccessLogs' dependency already enforced by a 'Ref' at 'Properties.AccessLoggingPolicy.S3BucketName'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DatabaseName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rELBWeb", + "logicalId": "DBCluster", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.DatabaseName", "category": "Best Practice", - "startLine": 759, - "startColumn": 5, - "endLine": 759, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'DatabaseName' (type String)" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rSecurityGroupWeb' dependency already enforced by a 'Ref' at 'Properties.SecurityGroups.0'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rELBWeb", + "logicalId": "DBCluster", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 759, - "startColumn": 5, - "endLine": 759, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 24, + "startColumn": 7, + "endLine": 24, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rDBSubnetGroup' dependency already enforced by a 'Ref' at 'Properties.DBSubnetGroupName'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'EngineMode' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rRDSInstanceMySQL", + "logicalId": "DBCluster", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.EngineMode", "category": "Best Practice", - "startLine": 1003, - "startColumn": 5, - "endLine": 1003, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + } + ] + }, + "public/watchmaker.json": { + "filePath": "public/watchmaker.json", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 41, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rSecurityGroupRDS' dependency already enforced by a 'Ref' at 'Properties.VPCSecurityGroups.0'", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "rRDSInstanceMySQL", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 1003, - "startColumn": 5, - "endLine": 1003, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "propertyPath": "Metadata.AWS::CloudFormation::Init.cw-agent-install.commands.01-get-cloudwatch-agent.command.Fn::Join", + "category": "Intrinsic Function", + "startLine": 647, + "startColumn": 37, + "endLine": 647, + "endColumn": 46, + "ruleDescription": "Use Sub instead of Join", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rWebContentBucket' dependency already enforced by a 'Ref' at 'Properties.Bucket'", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "rWebContentS3Policy", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 1198, - "startColumn": 5, - "endLine": 1198, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "propertyPath": "Metadata.AWS::CloudFormation::Init.cw-agent-install.commands.02-extract-cloudwatch-agent.command.Fn::Join", + "category": "Intrinsic Function", + "startLine": 662, + "startColumn": 37, + "endLine": 662, + "endColumn": 46, + "ruleDescription": "Use Sub instead of Join", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rWebContentBucket' dependency already enforced by a 'Ref' at 'Properties.PolicyDocument.Statement.0.Resource.Fn::Join.1.3'", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "rWebContentS3Policy", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 1198, - "startColumn": 5, - "endLine": 1198, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "propertyPath": "Metadata.AWS::CloudFormation::Init.cw-agent-install.commands.10-install-cloudwatch-agent.command.Fn::Join", + "category": "Intrinsic Function", + "startLine": 673, + "startColumn": 37, + "endLine": 673, + "endColumn": 46, + "ruleDescription": "Use Sub instead of Join", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rWebContentBucket' dependency already enforced by a 'Ref' at 'Properties.PolicyDocument.Statement.1.Resource.Fn::Join.1.3'", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", - "entity": { - "logicalId": "rWebContentS3Policy", - "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 1198, - "startColumn": 5, - "endLine": 1198, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.finalize.commands.10-signal-success.command.Fn::Join.1.4.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 816, + "startColumn": 57, + "endLine": 816, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", "phase": "LINT" }, { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "rS3AccessLogsPolicy", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::EC2::Instance" }, - "category": "Best Practice", - "startLine": 1026, - "startColumn": 3, - "endLine": 1026, - "endColumn": 22, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "propertyPath": "Metadata.AWS::CloudFormation::Init.finalize.commands.10-signal-success.command.Fn::Join.1.5.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 833, + "startColumn": 57, + "endLine": 833, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", "phase": "LINT" }, { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "rS3ELBAccessLogs", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "category": "Best Practice", - "startLine": 1060, - "startColumn": 3, - "endLine": 1060, - "endColumn": 19, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "propertyPath": "Metadata.AWS::CloudFormation::Init.make-app.commands.05-get-appscript.command.Fn::Join", + "category": "Intrinsic Function", + "startLine": 869, + "startColumn": 37, + "endLine": 869, + "endColumn": 46, + "ruleDescription": "Use Sub instead of Join", "phase": "LINT" }, { - "ruleId": "W3045", - "severity": "WARN", - "message": "AccessControl property is deprecated. Use bucket policies instead", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "rS3ELBAccessLogs", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.AccessControl", - "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", - "category": "Deprecation", - "startLine": 1063, - "startColumn": 7, - "endLine": 1063, - "endColumn": 20, - "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", - "phase": "LINT", - "context": { - "actualValue": "Private" - } + "propertyPath": "Metadata.AWS::CloudFormation::Init.make-app.commands.10-make-app.command.Fn::Join", + "category": "Intrinsic Function", + "startLine": 887, + "startColumn": 37, + "endLine": 887, + "endColumn": 46, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "W3045", - "severity": "WARN", - "message": "AccessControl property is deprecated. Use bucket policies instead", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "rWebContentBucket", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.AccessControl", - "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", - "category": "Deprecation", - "startLine": 1180, - "startColumn": 7, - "endLine": 1180, - "endColumn": 20, - "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", - "phase": "LINT", - "context": { - "actualValue": "Private" - } + "propertyPath": "Metadata.AWS::CloudFormation::Init.setup.files./etc/cfn/cfn-hup.conf.content.Fn::Join.1.7.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 932, + "startColumn": 57, + "endLine": 932, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "W3697", - "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingConfigApp", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EC2::Instance" }, - "category": "Deprecation", - "startLine": 218, - "startColumn": 3, - "endLine": 218, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" + "propertyPath": "Metadata.AWS::CloudFormation::Init.setup.files./etc/cfn/cfn-hup.conf.content.Fn::Join.1.8.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 950, + "startColumn": 57, + "endLine": 950, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "W3697", - "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingConfigWeb", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EC2::Instance" }, - "category": "Deprecation", - "startLine": 416, - "startColumn": 3, - "endLine": 416, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" + "propertyPath": "Metadata.AWS::CloudFormation::Init.setup.files./etc/cfn/hooks.d/cfn-auto-reloader.conf.content.Fn::Join.1.7.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 993, + "startColumn": 57, + "endLine": 993, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'True' is not of type 'boolean' - automatically coerced (string to boolean)", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingConfigWeb", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.AssociatePublicIpAddress", - "category": "Best Practice", - "startLine": 509, - "startColumn": 7, - "endLine": 509, - "endColumn": 31, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Metadata.AWS::CloudFormation::Init.setup.files./etc/cfn/hooks.d/cfn-auto-reloader.conf.content.Fn::Join.1.8.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1010, + "startColumn": 57, + "endLine": 1010, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingDownApp", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::ScalingPolicy" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ScalingAdjustment", - "category": "Best Practice", - "startLine": 566, - "startColumn": 7, - "endLine": 566, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Metadata.AWS::CloudFormation::Init.setup.files./etc/cfn/scripts/watchmaker-install.sh.content.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1038, + "startColumn": 37, + "endLine": 1038, + "endColumn": 46, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'-1' is not of type 'integer' - automatically coerced (string to integer)", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingDownWeb", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::ScalingPolicy" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ScalingAdjustment", - "category": "Best Practice", - "startLine": 574, - "startColumn": 7, - "endLine": 574, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-launch.commands.10-watchmaker-launch.command.Fn::Join.1.3.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1101, + "startColumn": 57, + "endLine": 1101, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'300' is not of type 'integer' - automatically coerced (string to integer)", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingGroupApp", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.HealthCheckGracePeriod", - "category": "Best Practice", - "startLine": 582, - "startColumn": 7, - "endLine": 582, - "endColumn": 29, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-launch.commands.10-watchmaker-launch.command.Fn::Join.1.4.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1119, + "startColumn": 57, + "endLine": 1119, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingGroupApp", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags.0.PropagateAtLaunch", - "category": "Best Practice", - "startLine": 592, - "startColumn": 9, - "endLine": 592, - "endColumn": 26, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-launch.commands.10-watchmaker-launch.command.Fn::Join.1.5.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1137, + "startColumn": 57, + "endLine": 1137, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingGroupApp", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags.1.PropagateAtLaunch", - "category": "Best Practice", - "startLine": 595, - "startColumn": 9, - "endLine": 595, - "endColumn": 26, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-launch.commands.10-watchmaker-launch.command.Fn::Join.1.6.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1155, + "startColumn": 57, + "endLine": 1155, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'300' is not of type 'integer' - automatically coerced (string to integer)", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingGroupWeb", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.HealthCheckGracePeriod", - "category": "Best Practice", - "startLine": 608, - "startColumn": 7, - "endLine": 608, - "endColumn": 29, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-launch.commands.10-watchmaker-launch.command.Fn::Join.1.7.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1173, + "startColumn": 57, + "endLine": 1173, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingGroupWeb", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags.0.PropagateAtLaunch", - "category": "Best Practice", - "startLine": 618, - "startColumn": 9, - "endLine": 618, - "endColumn": 26, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-launch.commands.10-watchmaker-launch.command.Fn::Join.1.8.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1191, + "startColumn": 57, + "endLine": 1191, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingGroupWeb", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags.1.PropagateAtLaunch", - "category": "Best Practice", - "startLine": 621, - "startColumn": 9, - "endLine": 621, - "endColumn": 26, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-update.commands.10-watchmaker-update.command.Fn::Join.1.4.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1226, + "startColumn": 57, + "endLine": 1226, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'-1' is not of type 'integer' - automatically coerced (string to integer)", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingUpApp", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::ScalingPolicy" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ScalingAdjustment", - "category": "Best Practice", - "startLine": 634, - "startColumn": 7, - "endLine": 634, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-update.commands.10-watchmaker-update.command.Fn::Join.1.5.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1244, + "startColumn": 57, + "endLine": 1244, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingUpWeb", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::ScalingPolicy" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ScalingAdjustment", - "category": "Best Practice", - "startLine": 642, - "startColumn": 7, - "endLine": 642, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-update.commands.10-watchmaker-update.command.Fn::Join.1.6.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1262, + "startColumn": 57, + "endLine": 1262, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "rCWAlarmHighCPUApp", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.EvaluationPeriods", - "category": "Best Practice", - "startLine": 655, - "startColumn": 7, - "endLine": 655, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-update.commands.10-watchmaker-update.command.Fn::Join.1.7.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1280, + "startColumn": 57, + "endLine": 1280, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'60' is not of type 'integer' - automatically coerced (string to integer)", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "rCWAlarmHighCPUApp", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Period", - "category": "Best Practice", - "startLine": 658, - "startColumn": 7, - "endLine": 658, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-update.commands.10-watchmaker-update.command.Fn::Join.1.8.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1298, + "startColumn": 57, + "endLine": 1298, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'50' is not of type 'number' - automatically coerced (string to number)", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "rCWAlarmHighCPUApp", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Threshold", - "category": "Best Practice", - "startLine": 660, - "startColumn": 7, - "endLine": 660, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-update.commands.10-watchmaker-update.command.Fn::Join.1.9.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1316, + "startColumn": 57, + "endLine": 1316, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "rCWAlarmHighCPUWeb", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.EvaluationPeriods", - "category": "Best Practice", - "startLine": 673, - "startColumn": 7, - "endLine": 673, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Properties.Tags.0.Value.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1440, + "startColumn": 29, + "endLine": 1440, + "endColumn": 38, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'60' is not of type 'integer' - automatically coerced (string to integer)", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "rCWAlarmHighCPUWeb", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Period", - "category": "Best Practice", - "startLine": 676, - "startColumn": 7, - "endLine": 676, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Properties.UserData.Fn::Base64.Fn::Join.1.88.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1596, + "startColumn": 45, + "endLine": 1596, + "endColumn": 54, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'50' is not of type 'number' - automatically coerced (string to number)", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "rCWAlarmHighCPUWeb", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Threshold", - "category": "Best Practice", - "startLine": 678, - "startColumn": 7, - "endLine": 678, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Properties.UserData.Fn::Base64.Fn::Join.1.89.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1613, + "startColumn": 45, + "endLine": 1613, + "endColumn": 54, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "rCWAlarmLowCPUApp", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.EvaluationPeriods", - "category": "Best Practice", - "startLine": 690, - "startColumn": 7, - "endLine": 690, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Properties.UserData.Fn::Base64.Fn::Join.1.98.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1642, + "startColumn": 45, + "endLine": 1642, + "endColumn": 54, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'60' is not of type 'integer' - automatically coerced (string to integer)", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "rCWAlarmLowCPUApp", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Period", - "category": "Best Practice", - "startLine": 693, - "startColumn": 7, - "endLine": 693, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Properties.UserData.Fn::Base64.Fn::Join.1.99.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1659, + "startColumn": 45, + "endLine": 1659, + "endColumn": 54, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'10' is not of type 'number' - automatically coerced (string to number)", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "rCWAlarmLowCPUApp", + "logicalId": "WatchmakerInstanceLogGroup", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.Threshold", - "category": "Best Practice", - "startLine": 695, - "startColumn": 7, - "endLine": 695, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Properties.LogGroupName.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1691, + "startColumn": 21, + "endLine": 1691, + "endColumn": 30, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", + "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": "rCWAlarmLowCPUWeb", + "logicalId": "WatchmakerInstanceLogGroup", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.EvaluationPeriods", "category": "Best Practice", - "startLine": 708, - "startColumn": 7, - "endLine": 708, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 1687, + "startColumn": 9, + "endLine": 1687, + "endColumn": 36, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'60' is not of type 'integer' - automatically coerced (string to integer)", + "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": "rCWAlarmLowCPUWeb", + "logicalId": "WatchmakerInstanceLogGroup", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.Period", "category": "Best Practice", - "startLine": 711, - "startColumn": 7, - "endLine": 711, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 1687, + "startColumn": 9, + "endLine": 1687, + "endColumn": 36, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'10' is not of type 'number' - automatically coerced (string to number)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rCWAlarmLowCPUWeb", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Threshold", + "propertyPath": "Properties.BlockDeviceMappings", "category": "Best Practice", - "startLine": 713, - "startColumn": 7, - "endLine": 713, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 1342, + "startColumn": 17, + "endLine": 1342, + "endColumn": 37, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'60' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rELBApp", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.AccessLoggingPolicy.EmitInterval", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 729, - "startColumn": 9, - "endLine": 729, - "endColumn": 21, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 1398, + "startColumn": 17, + "endLine": 1398, + "endColumn": 25, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'AmiId' (type AWS::EC2::Image::Id)" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rELBApp", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.AccessLoggingPolicy.Enabled", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 730, - "startColumn": 9, - "endLine": 730, - "endColumn": 16, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 1401, + "startColumn": 17, + "endLine": 1401, + "endColumn": 30, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "parameter with AllowedValues" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'60' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rELBWeb", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.AccessLoggingPolicy.EmitInterval", + "propertyPath": "Properties.KeyName", "category": "Best Practice", - "startLine": 765, - "startColumn": 9, - "endLine": 765, - "endColumn": 21, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 1404, + "startColumn": 17, + "endLine": 1404, + "endColumn": 25, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'KeyPairName' (type AWS::EC2::KeyPair::KeyName)" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rELBWeb", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.AccessLoggingPolicy.Enabled", + "propertyPath": "Properties.NetworkInterfaces", "category": "Best Practice", - "startLine": 766, - "startColumn": 9, - "endLine": 766, - "endColumn": 16, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 1407, + "startColumn": 17, + "endLine": 1407, + "endColumn": 35, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rRDSInstanceMySQL", + "logicalId": "WatchmakerInstance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.MultiAZ", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 1020, - "startColumn": 7, - "endLine": 1020, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 1451, + "startColumn": 17, + "endLine": 1451, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Base64 with unresolvable argument)" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rRDSInstanceMySQL", + "logicalId": "WatchmakerInstanceLogGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 1021, - "startColumn": 7, - "endLine": 1021, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 1690, + "startColumn": 17, + "endLine": 1690, + "endColumn": 30, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "rSecurityGroupApp", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupEgress.0.FromPort", + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", "category": "Best Practice", - "startLine": 1070, - "startColumn": 9, - "endLine": 1070, - "endColumn": 17, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'WatchmakerInstanceLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rSecurityGroupApp", + "logicalId": "WatchmakerInstanceLogGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.SecurityGroupEgress.0.ToPort", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1072, - "startColumn": 9, - "endLine": 1072, - "endColumn": 15, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 1689, + "startColumn": 13, + "endLine": 1689, + "endColumn": 24, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "quickstart/cis_benchmark.yaml": { + "filePath": "quickstart/cis_benchmark.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 79, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 75, + "informational": 142, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W9003", + "ruleId": "W2531", "severity": "WARN", - "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "rSecurityGroupApp", + "logicalId": "FunctiontForEvaluateCisBenchmarkingPreconditions", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SecurityGroupEgress.1.FromPort", - "category": "Best Practice", - "startLine": 1074, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 176, "startColumn": 9, - "endLine": 1074, - "endColumn": 17, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 176, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } }, { - "ruleId": "W9003", + "ruleId": "W2531", "severity": "WARN", - "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "rSecurityGroupApp", + "logicalId": "FunctionForEvaluateRootAccountRule", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SecurityGroupEgress.1.ToPort", - "category": "Best Practice", - "startLine": 1076, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 309, "startColumn": 9, - "endLine": 1076, - "endColumn": 15, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 309, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } }, { - "ruleId": "W9003", + "ruleId": "W2531", "severity": "WARN", - "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "rSecurityGroupApp", + "logicalId": "FunctionForVpcFlowLogRule", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SecurityGroupIngress.0.FromPort", - "category": "Best Practice", - "startLine": 1080, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 481, "startColumn": 9, - "endLine": 1080, - "endColumn": 17, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 481, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } }, { - "ruleId": "W9003", + "ruleId": "W2531", "severity": "WARN", - "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "rSecurityGroupApp", + "logicalId": "FunctionForVpcDefaultSecurityGroupsRule", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SecurityGroupIngress.0.ToPort", - "category": "Best Practice", - "startLine": 1082, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 551, "startColumn": 9, - "endLine": 1082, - "endColumn": 15, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 551, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } }, { - "ruleId": "W9003", + "ruleId": "W2531", "severity": "WARN", - "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "rSecurityGroupAppInstance", + "logicalId": "FunctionForRoleForMfaOnUsersRule", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SecurityGroupIngress.0.FromPort", - "category": "Best Practice", - "startLine": 1098, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 666, "startColumn": 9, - "endLine": 1098, - "endColumn": 17, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 666, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } }, { - "ruleId": "W9003", + "ruleId": "W2531", "severity": "WARN", - "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "rSecurityGroupAppInstance", + "logicalId": "FunctionForEvaluatePolicyPermissionsRule", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SecurityGroupIngress.0.ToPort", - "category": "Best Practice", - "startLine": 1100, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 760, "startColumn": 9, - "endLine": 1100, - "endColumn": 15, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 760, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } }, { - "ruleId": "W9003", + "ruleId": "W2531", "severity": "WARN", - "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "rSecurityGroupAppInstance", + "logicalId": "FunctionForEvaluateUserPolicyAssociationRule", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SecurityGroupIngress.1.FromPort", - "category": "Best Practice", - "startLine": 1103, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 850, "startColumn": 9, - "endLine": 1103, - "endColumn": 17, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 850, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } }, { - "ruleId": "W9003", + "ruleId": "W2531", "severity": "WARN", - "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "rSecurityGroupAppInstance", + "logicalId": "FunctionForEvaluateCloudTrailRule", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SecurityGroupIngress.1.ToPort", - "category": "Best Practice", - "startLine": 1105, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 966, "startColumn": 9, - "endLine": 1105, - "endColumn": 15, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 966, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } }, { - "ruleId": "W9003", + "ruleId": "W2531", "severity": "WARN", - "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "rSecurityGroupAppInstance", + "logicalId": "FunctionForEvaluateCloudTrailBucketRule", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SecurityGroupIngress.2.FromPort", - "category": "Best Practice", - "startLine": 1108, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1082, "startColumn": 9, - "endLine": 1108, - "endColumn": 17, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 1082, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } }, { - "ruleId": "W9003", + "ruleId": "W2531", "severity": "WARN", - "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "rSecurityGroupAppInstance", + "logicalId": "FunctionForEvaluateCloudTrailLogIntegrityRule", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SecurityGroupIngress.2.ToPort", - "category": "Best Practice", - "startLine": 1110, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1178, "startColumn": 9, - "endLine": 1110, - "endColumn": 15, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 1178, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } }, { - "ruleId": "W9003", + "ruleId": "W2531", "severity": "WARN", - "message": "'3306' is not of type 'integer' - automatically coerced (string to integer)", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "rSecurityGroupRDS", + "logicalId": "FunctionForInstanceRoleUseRule", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SecurityGroupIngress.0.FromPort", - "category": "Best Practice", - "startLine": 1124, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1260, "startColumn": 9, - "endLine": 1124, - "endColumn": 17, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 1260, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } }, { - "ruleId": "W9003", + "ruleId": "W2531", "severity": "WARN", - "message": "'3306' is not of type 'integer' - automatically coerced (string to integer)", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "rSecurityGroupRDS", + "logicalId": "FunctionForEvaluateKeyRotationRule", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SecurityGroupIngress.0.ToPort", - "category": "Best Practice", - "startLine": 1128, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1357, "startColumn": 9, - "endLine": 1128, - "endColumn": 15, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 1357, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } }, { - "ruleId": "W9003", + "ruleId": "W2531", "severity": "WARN", - "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "rSecurityGroupWeb", + "logicalId": "FunctionForEvaluateConfigInAllRegionsRule", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SecurityGroupIngress.0.FromPort", - "category": "Best Practice", - "startLine": 1143, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1465, "startColumn": 9, - "endLine": 1143, - "endColumn": 17, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 1465, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } }, { - "ruleId": "W9003", + "ruleId": "W2531", "severity": "WARN", - "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "rSecurityGroupWeb", + "logicalId": "FunctionForVpcPeeringRouteTablesRule", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SecurityGroupIngress.0.ToPort", - "category": "Best Practice", - "startLine": 1145, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1550, "startColumn": 9, - "endLine": 1145, - "endColumn": 15, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 1550, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } }, { - "ruleId": "W9003", + "ruleId": "W2531", "severity": "WARN", - "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "rSecurityGroupWebInstance", + "logicalId": "GetCloudTrailCloudWatchLog", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SecurityGroupIngress.0.FromPort", - "category": "Best Practice", - "startLine": 1155, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1633, "startColumn": 9, - "endLine": 1155, - "endColumn": 17, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 1633, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } }, { - "ruleId": "W9003", + "ruleId": "W2531", "severity": "WARN", - "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "rSecurityGroupWebInstance", + "logicalId": "FunctionToFormatCloudWatchEvent", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SecurityGroupIngress.0.ToPort", - "category": "Best Practice", - "startLine": 1157, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1889, "startColumn": 9, - "endLine": 1157, - "endColumn": 15, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 1889, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } }, { - "ruleId": "W9003", + "ruleId": "W2531", "severity": "WARN", - "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "rSecurityGroupWebInstance", + "logicalId": "FunctionToDisableUnusedCredentials", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SecurityGroupIngress.1.FromPort", - "category": "Best Practice", - "startLine": 1160, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 2334, "startColumn": 9, - "endLine": 1160, - "endColumn": 17, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 2334, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } }, { - "ruleId": "W9003", + "ruleId": "W3005", "severity": "WARN", - "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "rSecurityGroupWebInstance", + "logicalId": "FunctiontForEvaluateCisBenchmarkingPreconditions", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SecurityGroupIngress.1.ToPort", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 1162, - "startColumn": 9, - "endLine": 1162, - "endColumn": 15, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 121, + "startColumn": 7, + "endLine": 121, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "W9003", + "ruleId": "W3005", "severity": "WARN", - "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", + "message": "'FunctiontForEvaluateCisBenchmarkingPreconditions' dependency already enforced by a 'GetAtt' at 'Properties.ServiceToken'", "source": "CFN_LINT", "entity": { - "logicalId": "rSecurityGroupWebInstance", + "logicalId": "ResourceForEvaluateCisBenchmarkingPreconditions", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "Custom::ResourceForEvaluateCisBenchmarkingPreconditions" }, - "propertyPath": "Properties.SecurityGroupIngress.2.FromPort", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 1165, - "startColumn": 9, - "endLine": 1165, - "endColumn": 17, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 181, + "startColumn": 7, + "endLine": 181, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "W9003", + "ruleId": "W3005", "severity": "WARN", - "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "rSecurityGroupWebInstance", + "logicalId": "FunctionForEvaluateRootAccountRule", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SecurityGroupIngress.2.ToPort", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 1167, - "startColumn": 9, - "endLine": 1167, - "endColumn": 15, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 227, + "startColumn": 7, + "endLine": 227, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "W9003", + "ruleId": "W3005", "severity": "WARN", - "message": "'2555' is not of type 'integer' - automatically coerced (string to integer)", + "message": "'FunctionForEvaluateRootAccountRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", "source": "CFN_LINT", "entity": { - "logicalId": "rWebContentBucket", + "logicalId": "EvaluateRootAccountFunctionPermission", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.LifecycleConfiguration.Rules.0.ExpirationInDays", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 1183, - "startColumn": 11, - "endLine": 1183, - "endColumn": 27, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 315, + "startColumn": 7, + "endLine": 315, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "W9003", + "ruleId": "W3005", "severity": "WARN", - "message": "'90' is not of type 'integer' - automatically coerced (string to integer)", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "rWebContentBucket", + "logicalId": "FunctionForVpcFlowLogRule", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.LifecycleConfiguration.Rules.0.Transition.TransitionInDays", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 1192, - "startColumn": 13, - "endLine": 1192, - "endColumn": 29, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "LandingPageURL", - "entityType": "Output" - }, - "propertyPath": "Outputs/LandingPageURL/Value.Fn::Join", - "category": "Intrinsic Function", - "startLine": 92, - "startColumn": 3, - "endLine": 92, - "endColumn": 17, - "ruleDescription": "Use Sub instead of Join", + "startLine": 421, + "startColumn": 7, + "endLine": 421, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForVpcFlowLogRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", "source": "CFN_LINT", "entity": { - "logicalId": "WebsiteURL", - "entityType": "Output" + "logicalId": "ConfigPermissionToCallVpcFlowLogLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Outputs/WebsiteURL/Value.Fn::Join", - "category": "Intrinsic Function", - "startLine": 105, - "startColumn": 3, - "endLine": 105, - "endColumn": 13, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 486, + "startColumn": 7, + "endLine": 486, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "ruleId": "W3005", + "severity": "WARN", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingConfigApp", + "logicalId": "FunctionForVpcDefaultSecurityGroupsRule", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.copy_landing_content.sources./var/www/html.Fn::Join", - "category": "Intrinsic Function", - "startLine": 236, - "startColumn": 15, - "endLine": 236, - "endColumn": 23, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 497, + "startColumn": 7, + "endLine": 497, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForVpcDefaultSecurityGroupsRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingConfigApp", + "logicalId": "ConfigPermissionToCallVpcDefaultSecurityGroupsLambda", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.installDeepSecurityAgent.commands.0-download-DSA.command.Fn::Join", - "category": "Intrinsic Function", - "startLine": 244, - "startColumn": 17, - "endLine": 244, - "endColumn": 25, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 556, + "startColumn": 7, + "endLine": 556, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForVpcDefaultSecurityGroupsRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingConfigApp", + "logicalId": "ConfigRuleForVpcDefaultSecurityGroupss", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.installDeepSecurityAgent.commands.3-activate-DSA.command.Fn::Join", - "category": "Intrinsic Function", - "startLine": 255, - "startColumn": 17, - "endLine": 255, - "endColumn": 25, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 565, + "startColumn": 7, + "endLine": 565, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForVpcFlowLogRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingConfigApp", + "logicalId": "ConfigRuleForVpcFlowLogs", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.install_cfn.files./etc/cfn/cfn-hup.conf.content.Fn::Join", - "category": "Intrinsic Function", - "startLine": 264, - "startColumn": 17, - "endLine": 264, - "endColumn": 25, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 584, + "startColumn": 7, + "endLine": 584, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "ruleId": "W3005", + "severity": "WARN", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingConfigApp", + "logicalId": "FunctionForRoleForMfaOnUsersRule", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.install_cfn.files./etc/cfn/hooks.d/cfn-auto-reloader.conf.content.Fn::Join", - "category": "Intrinsic Function", - "startLine": 284, - "startColumn": 17, - "endLine": 284, - "endColumn": 25, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 606, + "startColumn": 7, + "endLine": 606, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForRoleForMfaOnUsersRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingConfigApp", + "logicalId": "ConfigPermissionToCallMfaForUsersLambda", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.install_wordpress.files./tmp/create-wp-config.content.Fn::Join", - "category": "Intrinsic Function", - "startLine": 324, - "startColumn": 17, - "endLine": 324, - "endColumn": 25, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 671, + "startColumn": 7, + "endLine": 671, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "ruleId": "W3005", + "severity": "WARN", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingConfigApp", + "logicalId": "FunctionForEvaluatePolicyPermissionsRule", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.UserData.Fn::Base64.Fn::Join", - "category": "Intrinsic Function", - "startLine": 388, - "startColumn": 11, - "endLine": 388, - "endColumn": 19, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 699, + "startColumn": 7, + "endLine": 699, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForEvaluatePolicyPermissionsRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingConfigWeb", + "logicalId": "ConfigPermissionToCallEvaluatePolicyPermissionsLambda", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.installDeepSecurityAgent.commands.0-download-DSA.command.Fn::Join", - "category": "Intrinsic Function", - "startLine": 430, - "startColumn": 17, - "endLine": 430, - "endColumn": 25, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 765, + "startColumn": 7, + "endLine": 765, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForEvaluatePolicyPermissionsRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingConfigWeb", + "logicalId": "ConfigRuleForEvaluatePolicyPermissions", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.installDeepSecurityAgent.commands.3-activate-DSA.command.Fn::Join", - "category": "Intrinsic Function", - "startLine": 441, - "startColumn": 17, - "endLine": 441, - "endColumn": 25, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 773, + "startColumn": 7, + "endLine": 773, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingConfigWeb", + "logicalId": "FunctionForEvaluateUserPolicyAssociationRule", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.nginx.files./tmp/nginx/default.conf.content.Fn::Join", - "category": "Intrinsic Function", - "startLine": 450, - "startColumn": 17, - "endLine": 450, - "endColumn": 25, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 795, + "startColumn": 7, + "endLine": 795, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForEvaluateUserPolicyAssociationRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingConfigWeb", + "logicalId": "ConfigPermissionToCallEvaluateUserPolicyAssociationLambda", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.UserData.Fn::Base64.Fn::Join", - "category": "Intrinsic Function", - "startLine": 520, - "startColumn": 11, - "endLine": 520, - "endColumn": 19, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 855, + "startColumn": 7, + "endLine": 855, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForEvaluateUserPolicyAssociationRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", "source": "CFN_LINT", "entity": { - "logicalId": "rPostProcInstance", + "logicalId": "ConfigRuleForEvaluateUserPolicyAssociations", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "Properties.UserData.Fn::Base64.Fn::Join.1.44.Fn::Join", - "category": "Intrinsic Function", - "startLine": 923, - "startColumn": 15, - "endLine": 923, - "endColumn": 23, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 863, + "startColumn": 7, + "endLine": 863, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for 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)", + "ruleId": "W3005", + "severity": "WARN", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "rRDSInstanceMySQL", + "logicalId": "FunctionForEvaluateCloudTrailRule", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 1002, - "startColumn": 3, - "endLine": 1002, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 886, + "startColumn": 7, + "endLine": 886, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "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)", + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForEvaluateCloudTrailRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", "source": "CFN_LINT", "entity": { - "logicalId": "rRDSInstanceMySQL", + "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLambda", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 1002, - "startColumn": 3, - "endLine": 1002, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 971, + "startColumn": 7, + "endLine": 971, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForEvaluateCloudTrailRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", + "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingConfigApp", + "logicalId": "ConfigRuleForEvaluateCloudTrail", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 378, + "startLine": 979, "startColumn": 7, - "endLine": 378, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 979, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingConfigApp", + "logicalId": "FunctionForEvaluateCloudTrailBucketRule", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 380, + "startLine": 999, "startColumn": 7, - "endLine": 380, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'pAppInstanceType' (type String)" - } + "endLine": 999, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForEvaluateCloudTrailBucketRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", + "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingConfigApp", + "logicalId": "ConfigPermissionToCallEvaluateCloudTrailBucketLambda", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.KeyName", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 382, + "startLine": 1087, "startColumn": 7, - "endLine": 382, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 1087, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForEvaluateCloudTrailBucketRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", + "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingConfigApp", + "logicalId": "ConfigRuleForEvaluateCloudTrailBucket", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "Properties.SecurityGroups", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 384, + "startLine": 1095, "startColumn": 7, - "endLine": 384, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 1095, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingConfigApp", + "logicalId": "FunctionForEvaluateCloudTrailLogIntegrityRule", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.UserData", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 386, + "startLine": 1116, "startColumn": 7, - "endLine": 386, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 1116, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AssociatePublicIpAddress' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForEvaluateCloudTrailLogIntegrityRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", + "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingConfigWeb", + "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLogIntegrityLambda", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.AssociatePublicIpAddress", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 509, - "startColumn": 7, - "endLine": 509, - "endColumn": 31, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 1184, + "startColumn": 7, + "endLine": 1184, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForEvaluateCloudTrailLogIntegrityRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", + "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingConfigWeb", + "logicalId": "ConfigRuleForEvaluateCloudTrailLogIntegrity", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 510, + "startLine": 1193, "startColumn": 7, - "endLine": 510, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 1193, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingConfigWeb", + "logicalId": "FunctionForInstanceRoleUseRule", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 512, + "startLine": 1213, "startColumn": 7, - "endLine": 512, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'pWebInstanceType' (type String)" - } + "endLine": 1213, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForInstanceRoleUseRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", + "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingConfigWeb", + "logicalId": "ConfigPermissionToCallInstanceRoleUseLambda", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.KeyName", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 514, + "startLine": 1266, "startColumn": 7, - "endLine": 514, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 1266, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForInstanceRoleUseRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", + "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingConfigWeb", + "logicalId": "ConfigRuleForInstanceRoleUses", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "Properties.SecurityGroups", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 516, + "startLine": 1275, "startColumn": 7, - "endLine": 516, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 1275, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingConfigWeb", + "logicalId": "FunctionForEvaluateKeyRotationRule", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.UserData", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 518, + "startLine": 1298, "startColumn": 7, - "endLine": 518, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 1298, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForEvaluateKeyRotationRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", + "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingDownApp", + "logicalId": "ConfigPermissionToCallEvaluateKeyRotationLambda", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::ScalingPolicy" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.AutoScalingGroupName", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 563, + "startLine": 1363, "startColumn": 7, - "endLine": 563, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rAutoScalingGroupApp'" - } + "endLine": 1363, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForEvaluateKeyRotationRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", + "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingDownWeb", + "logicalId": "ConfigRuleForEvaluateKeyRotations", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::ScalingPolicy" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "Properties.AutoScalingGroupName", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 571, + "startLine": 1372, "startColumn": 7, - "endLine": 571, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rAutoScalingGroupWeb'" - } + "endLine": 1372, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingGroupApp", + "logicalId": "FunctionForEvaluateConfigInAllRegionsRule", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.LaunchConfigurationName", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 584, + "startLine": 1394, "startColumn": 7, - "endLine": 584, - "endColumn": 30, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'rAutoScalingConfigApp'" - } + "endLine": 1394, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForEvaluateConfigInAllRegionsRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", + "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingGroupApp", + "logicalId": "EvaluateConfigInAllRegionsFunctionPermission", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VPCZoneIdentifier", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 598, + "startLine": 1470, "startColumn": 7, - "endLine": 598, - "endColumn": 24, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 1470, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingGroupWeb", + "logicalId": "FunctionForVpcPeeringRouteTablesRule", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.LaunchConfigurationName", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 610, - "startColumn": 7, - "endLine": 610, - "endColumn": 30, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'rAutoScalingConfigWeb'" - } + "startLine": 1499, + "startColumn": 7, + "endLine": 1499, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForVpcPeeringRouteTablesRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", + "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingGroupWeb", + "logicalId": "ConfigPermissionToCallVpcPeeringRouteTablesLambda", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VPCZoneIdentifier", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 624, + "startLine": 1555, "startColumn": 7, - "endLine": 624, - "endColumn": 24, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 1555, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForVpcPeeringRouteTablesRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", + "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingUpApp", + "logicalId": "ConfigRuleForVpcPeeringRouteTabless", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::ScalingPolicy" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "Properties.AutoScalingGroupName", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 631, + "startLine": 1564, "startColumn": 7, - "endLine": 631, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rAutoScalingGroupApp'" - } + "endLine": 1564, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "rAutoScalingUpWeb", + "logicalId": "GetCloudTrailCloudWatchLog", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::ScalingPolicy" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AutoScalingGroupName", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 639, + "startLine": 1601, "startColumn": 7, - "endLine": 639, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rAutoScalingGroupWeb'" - } + "endLine": 1601, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HealthCheck' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'GetCloudTrailCloudWatchLog' dependency already enforced by a 'GetAtt' at 'Properties.ServiceToken'", + "source": "CFN_LINT", "entity": { - "logicalId": "rELBApp", + "logicalId": "ResourceForGetCloudTrailCloudWatchLog", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "Custom::ResourceForGetCloudTrailCloudWatchLog" }, - "propertyPath": "Properties.HealthCheck", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 734, + "startLine": 1638, "startColumn": 7, - "endLine": 734, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 1638, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'ResourceForGetCloudTrailCloudWatchLog' dependency already enforced by a 'GetAtt' at 'Properties.LogGroupName'", + "source": "CFN_LINT", "entity": { - "logicalId": "rELBApp", + "logicalId": "UnauthorizedAttemptsCloudWatchFilter", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::Logs::MetricFilter" }, - "propertyPath": "Properties.Scheme", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 745, + "startLine": 1647, "startColumn": 7, - "endLine": 745, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 1647, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Subnets' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'ResourceForGetCloudTrailCloudWatchLog' dependency already enforced by a 'GetAtt' at 'Properties.LogGroupName'", + "source": "CFN_LINT", "entity": { - "logicalId": "rELBApp", + "logicalId": "IAMRootActivityCloudWatchMetric", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::Logs::MetricFilter" }, - "propertyPath": "Properties.Subnets", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 748, + "startLine": 1681, "startColumn": 7, - "endLine": 748, - "endColumn": 14, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 1681, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HealthCheck' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'ResourceForGetCloudTrailCloudWatchLog' dependency already enforced by a 'GetAtt' at 'Properties.LogGroupName'", + "source": "CFN_LINT", "entity": { - "logicalId": "rELBWeb", + "logicalId": "ConsoleSigninWithoutMfaCloudWatchMetric", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::Logs::MetricFilter" }, - "propertyPath": "Properties.HealthCheck", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 770, + "startLine": 1718, "startColumn": 7, - "endLine": 770, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 1718, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Subnets' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'ResourceForGetCloudTrailCloudWatchLog' dependency already enforced by a 'GetAtt' at 'Properties.LogGroupName'", + "source": "CFN_LINT", "entity": { - "logicalId": "rELBWeb", + "logicalId": "ConsoleLoginFailureCloudWatchMetric", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::Logs::MetricFilter" }, - "propertyPath": "Properties.Subnets", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 783, + "startLine": 1757, "startColumn": 7, - "endLine": 783, - "endColumn": 14, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 1757, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'ResourceForGetCloudTrailCloudWatchLog' dependency already enforced by a 'GetAtt' at 'Properties.LogGroupName'", + "source": "CFN_LINT", "entity": { - "logicalId": "rPostProcInstance", + "logicalId": "KMSCustomerKeyDeletionCloudWatchMetric", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Logs::MetricFilter" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 800, + "startLine": 1794, "startColumn": 7, - "endLine": 800, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 1794, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'SnsTopicForCloudWatchEvents' dependency already enforced by a 'Ref' at 'Properties.Policies.0.PolicyDocument.Statement.0.Resource'", + "source": "CFN_LINT", "entity": { - "logicalId": "rPostProcInstance", + "logicalId": "RoleForCloudWatchEvents", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 802, + "startLine": 1830, "startColumn": 7, - "endLine": 802, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "parameter 'pAppInstanceType' (type String)" - } + "endLine": 1830, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'RoleForCloudWatchEvents' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "rPostProcInstance", + "logicalId": "FunctionToFormatCloudWatchEvent", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SecurityGroupIds", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 804, + "startLine": 1856, "startColumn": 7, - "endLine": 804, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 1856, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'SnsTopicForCloudWatchEvents' dependency already enforced by a 'Ref' at 'Properties.Code.ZipFile'", + "source": "CFN_LINT", "entity": { - "logicalId": "rPostProcInstance", + "logicalId": "FunctionToFormatCloudWatchEvent", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 806, + "startLine": 1856, "startColumn": 7, - "endLine": 806, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'pAppPrivateSubnetA' (type AWS::EC2::Subnet::Id)" - } + "endLine": 1856, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionToFormatCloudWatchEvent' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", + "source": "CFN_LINT", "entity": { - "logicalId": "rPostProcInstance", + "logicalId": "LambdaPermissionForCloudTrailCloudWatchEventRules", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.UserData", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 811, + "startLine": 1894, "startColumn": 7, - "endLine": 811, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Base64 with unresolvable argument)" - } + "endLine": 1894, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'ResourceForGetCloudTrailCloudWatchLog' dependency already enforced by a 'GetAtt' at 'Properties.LogGroupName'", + "source": "CFN_LINT", "entity": { - "logicalId": "rPostProcInstanceProfile", + "logicalId": "BillingChangesCloudWatchFilter", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::Logs::MetricFilter" }, - "propertyPath": "Properties.Path", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 955, + "startLine": 2183, "startColumn": 7, - "endLine": 955, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 2183, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'RoleForDisableUnusedCredentialsFunction' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "rPostProcInstanceRole", + "logicalId": "FunctionToDisableUnusedCredentials", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Path", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 970, + "startLine": 2253, "startColumn": 7, - "endLine": 970, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 2253, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DBName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionToDisableUnusedCredentials' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", + "source": "CFN_LINT", "entity": { - "logicalId": "rRDSInstanceMySQL", + "logicalId": "LambdaPermissionForDisableUnusedCredentials", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.DBName", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 1011, + "startLine": 2339, "startColumn": 7, - "endLine": 1011, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'pDBName' (type String)" - } + "endLine": 2339, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DBSubnetGroupName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "rRDSInstanceMySQL", + "logicalId": "UnauthorizedAttemptsCloudWatchFilter", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Logs::MetricFilter" }, - "propertyPath": "Properties.DBSubnetGroupName", + "propertyPath": "Properties.MetricTransformations.0.MetricValue", "category": "Best Practice", - "startLine": 1013, - "startColumn": 7, - "endLine": 1013, + "startLine": 1657, + "startColumn": 13, + "endLine": 1657, "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rDBSubnetGroup'" - } + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "rRDSInstanceMySQL", + "logicalId": "IAMRootActivityCloudWatchMetric", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Logs::MetricFilter" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.MetricTransformations.0.MetricValue", "category": "Best Practice", - "startLine": 1015, - "startColumn": 7, - "endLine": 1015, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 1695, + "startColumn": 13, + "endLine": 1695, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "rRDSInstanceMySQL", + "logicalId": "ConsoleSigninWithoutMfaCloudWatchMetric", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Logs::MetricFilter" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.MetricTransformations.0.MetricValue", "category": "Best Practice", - "startLine": 1018, - "startColumn": 7, - "endLine": 1018, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'pDBUser' (type String)" - } + "startLine": 1733, + "startColumn": 13, + "endLine": 1733, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'MultiAZ' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "rRDSInstanceMySQL", + "logicalId": "ConsoleLoginFailureCloudWatchMetric", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Logs::MetricFilter" }, - "propertyPath": "Properties.MultiAZ", + "propertyPath": "Properties.MetricTransformations.0.MetricValue", "category": "Best Practice", - "startLine": 1020, - "startColumn": 7, - "endLine": 1020, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 1770, + "startColumn": 13, + "endLine": 1770, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "rRDSInstanceMySQL", + "logicalId": "KMSCustomerKeyDeletionCloudWatchMetric", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Logs::MetricFilter" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.MetricTransformations.0.MetricValue", "category": "Best Practice", - "startLine": 1021, - "startColumn": 7, - "endLine": 1021, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 1807, + "startColumn": 13, + "endLine": 1807, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "rRDSInstanceMySQL", + "logicalId": "BillingChangesCloudWatchFilter", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Logs::MetricFilter" }, - "propertyPath": "Properties.BackupRetentionPeriod", + "propertyPath": "Properties.MetricTransformations.0.MetricValue", "category": "Best Practice", - "startLine": 1022, - "startColumn": 7, - "endLine": 1022, - "endColumn": 28, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 2197, + "startColumn": 13, + "endLine": 2197, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rS3AccessLogsPolicy", + "logicalId": "FunctiontForEvaluateCisBenchmarkingPreconditions", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 1029, - "startColumn": 7, - "endLine": 1029, - "endColumn": 13, + "startLine": 124, + "startColumn": 9, + "endLine": 124, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rS3ELBAccessLogs'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rSecurityGroupApp", + "logicalId": "ConfigRuleForIamPasswordPolicy", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.ConfigRuleName", "category": "Best Practice", - "startLine": 1067, - "startColumn": 7, - "endLine": 1067, + "startLine": 202, + "startColumn": 9, + "endLine": 202, "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -27117,87 +20777,86 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rSecurityGroupApp", + "logicalId": "FunctionForEvaluateRootAccountRule", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 1089, - "startColumn": 7, - "endLine": 1089, - "endColumn": 12, + "startLine": 231, + "startColumn": 9, + "endLine": 231, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'pProductionVPC' (type AWS::EC2::VPC::Id)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rSecurityGroupAppInstance", + "logicalId": "EvaluateRootAccountFunctionPermission", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 1094, - "startColumn": 7, - "endLine": 1094, - "endColumn": 23, + "startLine": 317, + "startColumn": 9, + "endLine": 317, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt FunctionForEvaluateRootAccountRule.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rSecurityGroupAppInstance", + "logicalId": "EvaluateRootAccountFunctionPermission", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 1117, - "startColumn": 7, - "endLine": 1117, - "endColumn": 12, + "startLine": 318, + "startColumn": 9, + "endLine": 318, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'pProductionVPC' (type AWS::EC2::VPC::Id)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rSecurityGroupRDS", + "logicalId": "EvaluateRootAccountFunctionPermission", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 1122, - "startColumn": 7, - "endLine": 1122, - "endColumn": 23, + "startLine": 319, + "startColumn": 9, + "endLine": 319, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -27207,42 +20866,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rSecurityGroupRDS", + "logicalId": "ConfigRuleForEvaluateRootAccount", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ConfigRuleName", "category": "Best Practice", - "startLine": 1135, - "startColumn": 7, - "endLine": 1135, - "endColumn": 12, + "startLine": 328, + "startColumn": 9, + "endLine": 328, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'pProductionVPC' (type AWS::EC2::VPC::Id)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rSecurityGroupWeb", + "logicalId": "ConfigRuleForRequiredTags", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.ConfigRuleName", "category": "Best Practice", - "startLine": 1140, - "startColumn": 7, - "endLine": 1140, + "startLine": 342, + "startColumn": 9, + "endLine": 342, "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -27252,42 +20912,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rSecurityGroupWeb", + "logicalId": "ConfigRuleForEncryptedVolumes", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ConfigRuleName", "category": "Best Practice", - "startLine": 1146, - "startColumn": 7, - "endLine": 1146, - "endColumn": 12, + "startLine": 373, + "startColumn": 9, + "endLine": 373, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'pProductionVPC' (type AWS::EC2::VPC::Id)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rSecurityGroupWebInstance", + "logicalId": "ConfigRuleForRestrictedSsh", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.ConfigRuleName", "category": "Best Practice", - "startLine": 1151, - "startColumn": 7, - "endLine": 1151, + "startLine": 389, + "startColumn": 9, + "endLine": 389, "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -27297,409 +20958,406 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rSecurityGroupWebInstance", + "logicalId": "ConfigRuleForUnrestrictedPorts", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ConfigRuleName", "category": "Best Practice", - "startLine": 1174, - "startColumn": 7, - "endLine": 1174, - "endColumn": 12, + "startLine": 405, + "startColumn": 9, + "endLine": 405, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'pProductionVPC' (type AWS::EC2::VPC::Id)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rWebContentS3Policy", + "logicalId": "FunctionForVpcFlowLogRule", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 1200, - "startColumn": 7, - "endLine": 1200, - "endColumn": 13, + "startLine": 425, + "startColumn": 9, + "endLine": 425, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rWebContentBucket'" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'rCWAlarmHighCPUApp' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "rCWAlarmHighCPUApp", - "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 645, - "startColumn": 5, - "endLine": 645, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'rCWAlarmHighCPUWeb' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rCWAlarmHighCPUWeb", + "logicalId": "ConfigPermissionToCallVpcFlowLogLambda", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 663, - "startColumn": 5, - "endLine": 663, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 488, + "startColumn": 9, + "endLine": 488, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FunctionForVpcFlowLogRule.Arn" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'rCWAlarmLowCPUApp' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rCWAlarmLowCPUApp", + "logicalId": "ConfigPermissionToCallVpcFlowLogLambda", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 681, - "startColumn": 5, - "endLine": 681, + "startLine": 489, + "startColumn": 9, + "endLine": 489, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'rCWAlarmLowCPUWeb' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rCWAlarmLowCPUWeb", + "logicalId": "ConfigPermissionToCallVpcFlowLogLambda", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 699, - "startColumn": 5, - "endLine": 699, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 490, + "startColumn": 9, + "endLine": 490, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'rDBSubnetGroup' of type 'AWS::RDS::DBSubnetGroup' supports Tags but none are configured", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rDBSubnetGroup", + "logicalId": "FunctionForVpcDefaultSecurityGroupsRule", "entityType": "Resource", - "resourceType": "AWS::RDS::DBSubnetGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 716, - "startColumn": 5, - "endLine": 716, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 501, + "startColumn": 9, + "endLine": 501, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'rPostProcInstanceRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rPostProcInstanceRole", + "logicalId": "ConfigPermissionToCallVpcDefaultSecurityGroupsLambda", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 960, - "startColumn": 5, - "endLine": 960, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 558, + "startColumn": 9, + "endLine": 558, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FunctionForVpcDefaultSecurityGroupsRule.Arn" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'rRDSInstanceMySQL' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rRDSInstanceMySQL", + "logicalId": "ConfigPermissionToCallVpcDefaultSecurityGroupsLambda", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 1006, - "startColumn": 5, - "endLine": 1006, + "startLine": 559, + "startColumn": 9, + "endLine": 559, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'rS3ELBAccessLogs' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rS3ELBAccessLogs", + "logicalId": "ConfigPermissionToCallVpcDefaultSecurityGroupsLambda", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 1062, - "startColumn": 5, - "endLine": 1062, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 560, + "startColumn": 9, + "endLine": 560, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'rSecurityGroupWeb' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rSecurityGroupWeb", + "logicalId": "ConfigRuleForVpcDefaultSecurityGroupss", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ConfigRuleName", "category": "Best Practice", - "startLine": 1139, - "startColumn": 5, - "endLine": 1139, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 569, + "startColumn": 9, + "endLine": 569, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'rWebContentBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rWebContentBucket", + "logicalId": "ConfigRuleForVpcFlowLogs", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ConfigRuleName", "category": "Best Practice", - "startLine": 1179, - "startColumn": 5, - "endLine": 1179, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "quickstart/nist_config_rules.yaml": { - "filePath": "quickstart/nist_config_rules.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 12, - "counts": { - "fatal": 0, - "errors": 2, - "warnings": 5, - "informational": 15, - "debug": 0 + "startLine": 588, + "startColumn": 9, + "endLine": 588, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs' was deprecated on '2016-08-30'. Creation was disabled on '2016-09-30', and updates were disabled on '2016-10-31'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rAMIComplianceFunction", + "logicalId": "FunctionForRoleForMfaOnUsersRule", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 94, - "startColumn": 7, - "endLine": 94, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 610, + "startColumn": 9, + "endLine": 610, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs", - "lifecycle": "end-of-life" + "lifecycle": "create-only" } }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs' was deprecated on '2016-08-30'. Creation was disabled on '2016-09-30', and updates were disabled on '2016-10-31'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rCloudTrailValidationFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 159, - "startColumn": 7, - "endLine": 159, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "logicalId": "ConfigPermissionToCallMfaForUsersLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 673, + "startColumn": 9, + "endLine": 673, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs", - "lifecycle": "end-of-life" + "lifecycle": "create-only", + "resolutionSource": "GetAtt FunctionForRoleForMfaOnUsersRule.Arn" } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rConfigRulesLambdaRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rAMIComplianceFunction", + "logicalId": "ConfigPermissionToCallMfaForUsersLambda", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 35, - "startColumn": 5, - "endLine": 35, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 674, + "startColumn": 9, + "endLine": 674, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rConfigRulesLambdaRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rCloudTrailValidationFunction", + "logicalId": "ConfigPermissionToCallMfaForUsersLambda", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 98, - "startColumn": 5, - "endLine": 98, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 675, + "startColumn": 9, + "endLine": 675, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W8003", - "severity": "WARN", - "message": "Fn::Equals in condition 'cApprovedAMIsRule' will always return True", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "cApprovedAMIsRule", - "entityType": "Condition" + "logicalId": "ConfigRuleForMfaForUsers", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "Conditions/cApprovedAMIsRule", + "propertyPath": "Properties.ConfigRuleName", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 20, - "ruleDescription": "Fn::Equals will always return true or false", - "phase": "PARSE" + "startLine": 681, + "startColumn": 9, + "endLine": 681, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'30' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rAMIComplianceFunction", + "logicalId": "FunctionForEvaluatePolicyPermissionsRule", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Timeout", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 95, - "startColumn": 7, - "endLine": 95, - "endColumn": 14, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 703, + "startColumn": 9, + "endLine": 703, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'30' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rCloudTrailValidationFunction", + "logicalId": "ConfigPermissionToCallEvaluatePolicyPermissionsLambda", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Timeout", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 160, - "startColumn": 7, - "endLine": 160, - "endColumn": 14, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 767, + "startColumn": 9, + "endLine": 767, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FunctionForEvaluatePolicyPermissionsRule.Arn" + } }, { "ruleId": "I9001", @@ -27707,16 +21365,16 @@ "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigPermissionToCallLambdaAMICompliance", + "logicalId": "ConfigPermissionToCallEvaluatePolicyPermissionsLambda", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 165, - "startColumn": 7, - "endLine": 165, - "endColumn": 13, + "startLine": 768, + "startColumn": 9, + "endLine": 768, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -27726,42 +21384,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigPermissionToCallLambdaAMICompliance", + "logicalId": "ConfigPermissionToCallEvaluatePolicyPermissionsLambda", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 166, - "startColumn": 7, - "endLine": 166, - "endColumn": 19, + "startLine": 769, + "startColumn": 9, + "endLine": 769, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt rAMIComplianceFunction.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigPermissionToCallLambdaAMICompliance", + "logicalId": "ConfigRuleForEvaluatePolicyPermissions", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.ConfigRuleName", "category": "Best Practice", - "startLine": 170, - "startColumn": 7, - "endLine": 170, - "endColumn": 16, + "startLine": 777, + "startColumn": 9, + "endLine": 777, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -27771,19 +21429,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigPermissionToCallLambdaCloudTrail", + "logicalId": "FunctionForEvaluateUserPolicyAssociationRule", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 174, - "startColumn": 7, - "endLine": 174, - "endColumn": 13, + "startLine": 799, + "startColumn": 9, + "endLine": 799, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -27796,39 +21454,39 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigPermissionToCallLambdaCloudTrail", + "logicalId": "ConfigPermissionToCallEvaluateUserPolicyAssociationLambda", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 175, - "startColumn": 7, - "endLine": 175, - "endColumn": 19, + "startLine": 857, + "startColumn": 9, + "endLine": 857, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt rCloudTrailValidationFunction.Arn" + "resolutionSource": "GetAtt FunctionForEvaluateUserPolicyAssociationRule.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigPermissionToCallLambdaCloudTrail", + "logicalId": "ConfigPermissionToCallEvaluateUserPolicyAssociationLambda", "entityType": "Resource", "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 179, - "startColumn": 7, - "endLine": 179, - "endColumn": 16, + "startLine": 858, + "startColumn": 9, + "endLine": 858, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -27838,20 +21496,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigRuleForAMICompliance", + "logicalId": "ConfigPermissionToCallEvaluateUserPolicyAssociationLambda", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 185, - "startColumn": 7, - "endLine": 185, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "startLine": 859, + "startColumn": 9, + "endLine": 859, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -27864,16 +21521,16 @@ "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigRuleForCloudTrail", + "logicalId": "ConfigRuleForEvaluateUserPolicyAssociations", "entityType": "Resource", "resourceType": "AWS::Config::ConfigRule" }, "propertyPath": "Properties.ConfigRuleName", "category": "Best Practice", - "startLine": 205, - "startColumn": 7, - "endLine": 205, - "endColumn": 21, + "startLine": 867, + "startColumn": 9, + "endLine": 867, + "endColumn": 23, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -27884,20 +21541,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigRuleForRequiredTags", + "logicalId": "FunctionForEvaluateCloudTrailRule", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 223, - "startColumn": 7, - "endLine": 223, + "startLine": 890, + "startColumn": 9, + "endLine": 890, "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -27907,43 +21563,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigRuleForSSH", + "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLambda", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 238, - "startColumn": 7, - "endLine": 238, + "startLine": 973, + "startColumn": 9, + "endLine": 973, "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt FunctionForEvaluateCloudTrailRule.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigRuleForUnrestrictedPorts", + "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLambda", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 251, - "startColumn": 7, - "endLine": 251, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "startLine": 974, + "startColumn": 9, + "endLine": 974, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -27953,19 +21608,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigRulesLambdaProfile", + "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLambda", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 277, - "startColumn": 7, - "endLine": 277, - "endColumn": 11, + "startLine": 975, + "startColumn": 9, + "endLine": 975, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -27975,20 +21630,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigRulesLambdaRole", + "logicalId": "ConfigRuleForEvaluateCloudTrail", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.ConfigRuleName", "category": "Best Practice", - "startLine": 292, - "startColumn": 7, - "endLine": 292, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "startLine": 983, + "startColumn": 9, + "endLine": 983, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -27996,1340 +21651,1231 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'rCloudTrailValidationFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rCloudTrailValidationFunction", + "logicalId": "FunctionForEvaluateCloudTrailBucketRule", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 99, - "startColumn": 5, - "endLine": 99, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'rConfigRulesLambdaRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "rConfigRulesLambdaRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 282, - "startColumn": 5, - "endLine": 282, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "quickstart/nist_high_main.yaml": { - "filePath": "quickstart/nist_high_main.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 6, - "counts": { - "fatal": 0, - "errors": 5, - "warnings": 35, - "informational": 18, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3005", - "severity": "ERROR", - "message": "'ProductionVpcTemplate' will not exist when condition 'EulaAccepted' is False", - "source": "CFN_LINT", - "entity": { - "logicalId": "ApplicationTemplate", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Add a Condition to 'ApplicationTemplate' that implies 'EulaAccepted'", - "category": "Reference", - "startLine": 277, - "startColumn": 5, - "endLine": 277, - "endColumn": 14, - "ruleDescription": "Check DependsOn values for Resources", - "phase": "LINT" - }, - { - "ruleId": "E3005", - "severity": "ERROR", - "message": "'IamTemplate' will not exist when condition 'EulaAccepted' is False", - "source": "CFN_LINT", - "entity": { - "logicalId": "ConfigRulesTemplate", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Add a Condition to 'ConfigRulesTemplate' that implies 'EulaAccepted'", - "category": "Reference", - "startLine": 388, - "startColumn": 5, - "endLine": 388, - "endColumn": 14, - "ruleDescription": "Check DependsOn values for Resources", - "phase": "LINT" - }, - { - "ruleId": "E3005", - "severity": "ERROR", - "message": "'LoggingTemplate' will not exist when condition 'EulaAccepted' is False", - "source": "CFN_LINT", - "entity": { - "logicalId": "ConfigRulesTemplate", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Add a Condition to 'ConfigRulesTemplate' that implies 'EulaAccepted'", - "category": "Reference", - "startLine": 388, - "startColumn": 5, - "endLine": 388, - "endColumn": 14, - "ruleDescription": "Check DependsOn values for Resources", - "phase": "LINT" - }, - { - "ruleId": "E3005", - "severity": "ERROR", - "message": "'ProductionVpcTemplate' will not exist when condition 'EulaAccepted' is False", - "source": "CFN_LINT", - "entity": { - "logicalId": "ConfigRulesTemplate", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Add a Condition to 'ConfigRulesTemplate' that implies 'EulaAccepted'", - "category": "Reference", - "startLine": 388, - "startColumn": 5, - "endLine": 388, - "endColumn": 14, - "ruleDescription": "Check DependsOn values for Resources", - "phase": "LINT" - }, - { - "ruleId": "E3005", - "severity": "ERROR", - "message": "'ProductionVpcTemplate' will not exist when condition 'EulaAccepted' is False", - "source": "CFN_LINT", - "entity": { - "logicalId": "ManagementVpcTemplate", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Add a Condition to 'ManagementVpcTemplate' that implies 'EulaAccepted'", - "category": "Reference", - "startLine": 445, - "startColumn": 5, - "endLine": 445, - "endColumn": 14, - "ruleDescription": "Check DependsOn values for Resources", - "phase": "LINT" - }, - { - "ruleId": "W1001", - "severity": "WARN", - "message": "Reference to 'ProductionVpcTemplate' which is conditional on 'EulaAccepted' - target may not exist", - "source": "CFN_LINT", - "entity": { - "logicalId": "ApplicationTemplate", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "propertyPath": "Properties.Parameters.pAppPrivateSubnetA", - "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", - "category": "Best Practice", - "startLine": 292, - "startColumn": 9, - "endLine": 292, - "endColumn": 27, - "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", - "phase": "LINT" - }, - { - "ruleId": "W1001", - "severity": "WARN", - "message": "Reference to 'ProductionVpcTemplate' which is conditional on 'EulaAccepted' - target may not exist", - "source": "CFN_LINT", - "entity": { - "logicalId": "ApplicationTemplate", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "propertyPath": "Properties.Parameters.pAppPrivateSubnetB", - "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", - "category": "Best Practice", - "startLine": 296, - "startColumn": 9, - "endLine": 296, - "endColumn": 27, - "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", - "phase": "LINT" - }, - { - "ruleId": "W1001", - "severity": "WARN", - "message": "Reference to 'ProductionVpcTemplate' which is conditional on 'EulaAccepted' - target may not exist", - "source": "CFN_LINT", - "entity": { - "logicalId": "ApplicationTemplate", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "propertyPath": "Properties.Parameters.pDBPrivateSubnetA", - "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", - "category": "Best Practice", - "startLine": 310, - "startColumn": 9, - "endLine": 310, - "endColumn": 26, - "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", - "phase": "LINT" - }, - { - "ruleId": "W1001", - "severity": "WARN", - "message": "Reference to 'ProductionVpcTemplate' which is conditional on 'EulaAccepted' - target may not exist", - "source": "CFN_LINT", - "entity": { - "logicalId": "ApplicationTemplate", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "propertyPath": "Properties.Parameters.pDBPrivateSubnetB", - "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", - "category": "Best Practice", - "startLine": 314, - "startColumn": 9, - "endLine": 314, - "endColumn": 26, - "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", - "phase": "LINT" - }, - { - "ruleId": "W1001", - "severity": "WARN", - "message": "Reference to 'ProductionVpcTemplate' which is conditional on 'EulaAccepted' - target may not exist", - "source": "CFN_LINT", - "entity": { - "logicalId": "ApplicationTemplate", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "propertyPath": "Properties.Parameters.pDMZSubnetA", - "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 319, + "startLine": 1003, "startColumn": 9, - "endLine": 319, - "endColumn": 20, - "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", - "phase": "LINT" + "endLine": 1003, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W1001", - "severity": "WARN", - "message": "Reference to 'ProductionVpcTemplate' which is conditional on 'EulaAccepted' - target may not exist", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ApplicationTemplate", + "logicalId": "ConfigPermissionToCallEvaluateCloudTrailBucketLambda", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Parameters.pDMZSubnetB", - "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 323, + "startLine": 1089, "startColumn": 9, - "endLine": 323, - "endColumn": 20, - "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", - "phase": "LINT" + "endLine": 1089, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FunctionForEvaluateCloudTrailBucketRule.Arn" + } }, { - "ruleId": "W1001", - "severity": "WARN", - "message": "Reference to 'ProductionVpcTemplate' which is conditional on 'EulaAccepted' - target may not exist", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ApplicationTemplate", + "logicalId": "ConfigPermissionToCallEvaluateCloudTrailBucketLambda", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Parameters.pProductionVPC", - "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 344, + "startLine": 1090, "startColumn": 9, - "endLine": 344, - "endColumn": 23, - "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", - "phase": "LINT" + "endLine": 1090, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W1001", - "severity": "WARN", - "message": "Reference to 'LoggingTemplate' which is conditional on 'EulaAccepted' - target may not exist", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ApplicationTemplate", + "logicalId": "ConfigPermissionToCallEvaluateCloudTrailBucketLambda", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Parameters.pSecurityAlarmTopic", - "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 352, + "startLine": 1091, "startColumn": 9, - "endLine": 352, - "endColumn": 28, - "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", - "phase": "LINT" + "endLine": 1091, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W1001", - "severity": "WARN", - "message": "Reference to 'ProductionVpcTemplate' which is conditional on 'EulaAccepted' - target may not exist", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ManagementVpcTemplate", + "logicalId": "ConfigRuleForEvaluateCloudTrailBucket", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "Properties.Parameters.pProductionVPC", - "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", + "propertyPath": "Properties.ConfigRuleName", "category": "Best Practice", - "startLine": 489, + "startLine": 1099, "startColumn": 9, - "endLine": 489, + "endLine": 1099, "endColumn": 23, - "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W1001", - "severity": "WARN", - "message": "Reference to 'ProductionVpcTemplate' which is conditional on 'EulaAccepted' - target may not exist", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ManagementVpcTemplate", + "logicalId": "FunctionForEvaluateCloudTrailLogIntegrityRule", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Parameters.pRouteTableProdPrivate", - "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 497, + "startLine": 1120, "startColumn": 9, - "endLine": 497, - "endColumn": 31, - "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", - "phase": "LINT" + "endLine": 1120, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W1001", - "severity": "WARN", - "message": "Reference to 'ProductionVpcTemplate' which is conditional on 'EulaAccepted' - target may not exist", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ManagementVpcTemplate", + "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLogIntegrityLambda", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Parameters.pRouteTableProdPublic", - "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 501, + "startLine": 1186, "startColumn": 9, - "endLine": 501, - "endColumn": 30, - "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", - "phase": "LINT" + "endLine": 1186, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FunctionForEvaluateCloudTrailLogIntegrityRule.Arn" + } }, { - "ruleId": "W2502", - "severity": "WARN", - "message": "Resource 'ApplicationTemplate' has DependsOn 'ProductionVpcTemplate' which is conditional (condition 'EulaAccepted'), but 'ApplicationTemplate' does not have a matching condition", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApplicationTemplate", + "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLogIntegrityLambda", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "DependsOn", - "suggestedFix": "Add Condition: EulaAccepted to resource 'ApplicationTemplate'", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 277, - "startColumn": 5, - "endLine": 277, - "endColumn": 14, - "ruleDescription": "DependsOn conditional resource without matching condition", - "phase": "LINT" + "startLine": 1187, + "startColumn": 9, + "endLine": 1187, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2502", - "severity": "WARN", - "message": "Resource 'ConfigRulesTemplate' has DependsOn 'IamTemplate' which is conditional (condition 'EulaAccepted'), but 'ConfigRulesTemplate' does not have a matching condition", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigRulesTemplate", + "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLogIntegrityLambda", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "DependsOn", - "suggestedFix": "Add Condition: EulaAccepted to resource 'ConfigRulesTemplate'", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 388, - "startColumn": 5, - "endLine": 388, - "endColumn": 14, - "ruleDescription": "DependsOn conditional resource without matching condition", - "phase": "LINT", + "startLine": 1188, + "startColumn": 9, + "endLine": 1188, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { - "extra": { - "source_condition": "LoadConfigRulesTemplate" - } + "lifecycle": "create-only" } }, { - "ruleId": "W2502", - "severity": "WARN", - "message": "Resource 'ConfigRulesTemplate' has DependsOn 'LoggingTemplate' which is conditional (condition 'EulaAccepted'), but 'ConfigRulesTemplate' does not have a matching condition", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigRulesTemplate", + "logicalId": "ConfigRuleForEvaluateCloudTrailLogIntegrity", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "DependsOn", - "suggestedFix": "Add Condition: EulaAccepted to resource 'ConfigRulesTemplate'", + "propertyPath": "Properties.ConfigRuleName", "category": "Best Practice", - "startLine": 388, - "startColumn": 5, - "endLine": 388, - "endColumn": 14, - "ruleDescription": "DependsOn conditional resource without matching condition", - "phase": "LINT", + "startLine": 1197, + "startColumn": 9, + "endLine": 1197, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { - "extra": { - "source_condition": "LoadConfigRulesTemplate" - } + "lifecycle": "create-only" } }, { - "ruleId": "W2502", - "severity": "WARN", - "message": "Resource 'ConfigRulesTemplate' has DependsOn 'ProductionVpcTemplate' which is conditional (condition 'EulaAccepted'), but 'ConfigRulesTemplate' does not have a matching condition", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigRulesTemplate", + "logicalId": "FunctionForInstanceRoleUseRule", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Add Condition: EulaAccepted to resource 'ConfigRulesTemplate'", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 388, - "startColumn": 5, - "endLine": 388, - "endColumn": 14, - "ruleDescription": "DependsOn conditional resource without matching condition", - "phase": "LINT", + "startLine": 1217, + "startColumn": 9, + "endLine": 1217, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { - "extra": { - "source_condition": "LoadConfigRulesTemplate" - } + "lifecycle": "create-only" } }, { - "ruleId": "W2502", - "severity": "WARN", - "message": "Resource 'ManagementVpcTemplate' has DependsOn 'ProductionVpcTemplate' which is conditional (condition 'EulaAccepted'), but 'ManagementVpcTemplate' does not have a matching condition", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ManagementVpcTemplate", + "logicalId": "ConfigPermissionToCallInstanceRoleUseLambda", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "DependsOn", - "suggestedFix": "Add Condition: EulaAccepted to resource 'ManagementVpcTemplate'", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 445, - "startColumn": 5, - "endLine": 445, - "endColumn": 14, - "ruleDescription": "DependsOn conditional resource without matching condition", - "phase": "LINT" + "startLine": 1268, + "startColumn": 9, + "endLine": 1268, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FunctionForInstanceRoleUseRule.Arn" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ManagementVpcTemplate' dependency already enforced by a 'GetAtt' at 'Properties.Parameters.pDeepSecurityAgentDownload'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ApplicationTemplate", + "logicalId": "ConfigPermissionToCallInstanceRoleUseLambda", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 277, - "startColumn": 5, - "endLine": 277, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1269, + "startColumn": 9, + "endLine": 1269, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ManagementVpcTemplate' dependency already enforced by a 'GetAtt' at 'Properties.Parameters.pDeepSecurityHeartbeat'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ApplicationTemplate", + "logicalId": "ConfigPermissionToCallInstanceRoleUseLambda", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 277, - "startColumn": 5, - "endLine": 277, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1270, + "startColumn": 9, + "endLine": 1270, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ProductionVpcTemplate' dependency already enforced by a 'GetAtt' at 'Properties.Parameters.pAppPrivateSubnetA'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ApplicationTemplate", + "logicalId": "ConfigRuleForInstanceRoleUses", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.ConfigRuleName", "category": "Best Practice", - "startLine": 277, - "startColumn": 5, - "endLine": 277, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1279, + "startColumn": 9, + "endLine": 1279, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ProductionVpcTemplate' dependency already enforced by a 'GetAtt' at 'Properties.Parameters.pAppPrivateSubnetB'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ApplicationTemplate", + "logicalId": "FunctionForEvaluateKeyRotationRule", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 277, - "startColumn": 5, - "endLine": 277, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1302, + "startColumn": 9, + "endLine": 1302, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ProductionVpcTemplate' dependency already enforced by a 'GetAtt' at 'Properties.Parameters.pDBPrivateSubnetA'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ApplicationTemplate", + "logicalId": "ConfigPermissionToCallEvaluateKeyRotationLambda", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 277, - "startColumn": 5, - "endLine": 277, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1365, + "startColumn": 9, + "endLine": 1365, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FunctionForEvaluateKeyRotationRule.Arn" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ProductionVpcTemplate' dependency already enforced by a 'GetAtt' at 'Properties.Parameters.pDBPrivateSubnetB'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ApplicationTemplate", + "logicalId": "ConfigPermissionToCallEvaluateKeyRotationLambda", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 277, - "startColumn": 5, - "endLine": 277, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1366, + "startColumn": 9, + "endLine": 1366, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ProductionVpcTemplate' dependency already enforced by a 'GetAtt' at 'Properties.Parameters.pDMZSubnetA'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ApplicationTemplate", + "logicalId": "ConfigPermissionToCallEvaluateKeyRotationLambda", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 277, - "startColumn": 5, - "endLine": 277, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1367, + "startColumn": 9, + "endLine": 1367, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ProductionVpcTemplate' dependency already enforced by a 'GetAtt' at 'Properties.Parameters.pDMZSubnetB'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ApplicationTemplate", + "logicalId": "ConfigRuleForEvaluateKeyRotations", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.ConfigRuleName", "category": "Best Practice", - "startLine": 277, - "startColumn": 5, - "endLine": 277, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1376, + "startColumn": 9, + "endLine": 1376, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ProductionVpcTemplate' dependency already enforced by a 'GetAtt' at 'Properties.Parameters.pProductionVPC'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ApplicationTemplate", + "logicalId": "FunctionForEvaluateConfigInAllRegionsRule", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 277, - "startColumn": 5, - "endLine": 277, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1398, + "startColumn": 9, + "endLine": 1398, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ProductionVpcTemplate' dependency already enforced by a 'GetAtt' at 'Properties.Parameters.pProductionVPC'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ManagementVpcTemplate", + "logicalId": "EvaluateConfigInAllRegionsFunctionPermission", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 445, - "startColumn": 5, - "endLine": 445, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1472, + "startColumn": 9, + "endLine": 1472, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FunctionForEvaluateConfigInAllRegionsRule.Arn" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ProductionVpcTemplate' dependency already enforced by a 'GetAtt' at 'Properties.Parameters.pRouteTableProdPrivate'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ManagementVpcTemplate", + "logicalId": "EvaluateConfigInAllRegionsFunctionPermission", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 445, - "startColumn": 5, - "endLine": 445, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1473, + "startColumn": 9, + "endLine": 1473, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ProductionVpcTemplate' dependency already enforced by a 'GetAtt' at 'Properties.Parameters.pRouteTableProdPublic'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ManagementVpcTemplate", + "logicalId": "EvaluateConfigInAllRegionsFunctionPermission", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 445, - "startColumn": 5, - "endLine": 445, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1474, + "startColumn": 9, + "endLine": 1474, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'LoadConfigRulesTemplateAuto' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LoadConfigRulesTemplateAuto", - "entityType": "Condition" + "logicalId": "ConfigRuleForEvaluateConfigInAllRegions", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "Conditions/LoadConfigRulesTemplateAuto", + "propertyPath": "Properties.ConfigRuleName", "category": "Best Practice", - "startLine": 11, - "startColumn": 3, - "endLine": 11, - "endColumn": 30, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" + "startLine": 1481, + "startColumn": 9, + "endLine": 1481, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'30' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ApplicationTemplate", + "logicalId": "FunctionForVpcPeeringRouteTablesRule", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.TimeoutInMinutes", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 384, - "startColumn": 7, - "endLine": 384, - "endColumn": 23, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 1503, + "startColumn": 9, + "endLine": 1503, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'20' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConfigRulesTemplate", + "logicalId": "ConfigPermissionToCallVpcPeeringRouteTablesLambda", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.TimeoutInMinutes", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 408, - "startColumn": 7, - "endLine": 408, - "endColumn": 23, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 1557, + "startColumn": 9, + "endLine": 1557, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FunctionForVpcPeeringRouteTablesRule.Arn" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'20' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "IamTemplate", + "logicalId": "ConfigPermissionToCallVpcPeeringRouteTablesLambda", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.TimeoutInMinutes", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 421, - "startColumn": 7, - "endLine": 421, - "endColumn": 23, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 1558, + "startColumn": 9, + "endLine": 1558, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'20' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LoggingTemplate", + "logicalId": "ConfigPermissionToCallVpcPeeringRouteTablesLambda", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.TimeoutInMinutes", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 442, - "startColumn": 7, - "endLine": 442, - "endColumn": 23, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 1559, + "startColumn": 9, + "endLine": 1559, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'20' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ManagementVpcTemplate", + "logicalId": "ConfigRuleForVpcPeeringRouteTabless", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "Properties.TimeoutInMinutes", + "propertyPath": "Properties.ConfigRuleName", "category": "Best Practice", - "startLine": 523, - "startColumn": 7, - "endLine": 523, + "startLine": 1568, + "startColumn": 9, + "endLine": 1568, "endColumn": 23, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'20' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ProductionVpcTemplate", + "logicalId": "SnsTopicForCloudWatchEvents", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.TimeoutInMinutes", + "propertyPath": "Properties.TopicName", "category": "Best Practice", - "startLine": 577, - "startColumn": 7, - "endLine": 577, - "endColumn": 23, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 1589, + "startColumn": 9, + "endLine": 1589, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ApplicationTemplate", + "logicalId": "GetCloudTrailCloudWatchLog", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 276, - "startColumn": 3, - "endLine": 276, - "endColumn": 22, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 1603, + "startColumn": 9, + "endLine": 1603, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ApplicationTemplate", + "logicalId": "UnauthorizedAttemptsCloudWatchFilter", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Logs::MetricFilter" }, + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 276, - "startColumn": 3, - "endLine": 276, - "endColumn": 22, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 1651, + "startColumn": 9, + "endLine": 1651, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt ResourceForGetCloudTrailCloudWatchLog.LogName", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConfigRulesTemplate", + "logicalId": "UnauthorizedAttemptCloudWatchAlarm", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::CloudWatch::Alarm" }, + "propertyPath": "Properties.AlarmName", "category": "Best Practice", - "startLine": 386, - "startColumn": 3, - "endLine": 386, - "endColumn": 22, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 1662, + "startColumn": 9, + "endLine": 1662, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConfigRulesTemplate", + "logicalId": "IAMRootActivityCloudWatchMetric", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Logs::MetricFilter" }, + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 386, - "startColumn": 3, - "endLine": 386, - "endColumn": 22, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 1685, + "startColumn": 9, + "endLine": 1685, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt ResourceForGetCloudTrailCloudWatchLog.LogName", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "IamTemplate", + "logicalId": "IAMRootActivityCloudWatchAlarm", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::CloudWatch::Alarm" }, + "propertyPath": "Properties.AlarmName", "category": "Best Practice", - "startLine": 410, - "startColumn": 3, - "endLine": 410, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 1700, + "startColumn": 9, + "endLine": 1700, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "IamTemplate", + "logicalId": "ConsoleSigninWithoutMfaCloudWatchMetric", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Logs::MetricFilter" }, + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 410, - "startColumn": 3, - "endLine": 410, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 1722, + "startColumn": 9, + "endLine": 1722, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt ResourceForGetCloudTrailCloudWatchLog.LogName", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LoggingTemplate", + "logicalId": "ConsoleSigninWithoutMFACloudWatchAlarm", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::CloudWatch::Alarm" }, + "propertyPath": "Properties.AlarmName", "category": "Best Practice", - "startLine": 423, - "startColumn": 3, - "endLine": 423, + "startLine": 1738, + "startColumn": 9, + "endLine": 1738, "endColumn": 18, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LoggingTemplate", + "logicalId": "ConsoleLoginFailureCloudWatchMetric", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Logs::MetricFilter" }, + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 423, - "startColumn": 3, - "endLine": 423, - "endColumn": 18, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 1761, + "startColumn": 9, + "endLine": 1761, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt ResourceForGetCloudTrailCloudWatchLog.LogName", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ManagementVpcTemplate", + "logicalId": "ConsoleLoginFailureCloudWatchAlarm", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::CloudWatch::Alarm" }, + "propertyPath": "Properties.AlarmName", "category": "Best Practice", - "startLine": 444, - "startColumn": 3, - "endLine": 444, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 1775, + "startColumn": 9, + "endLine": 1775, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ManagementVpcTemplate", + "logicalId": "KMSCustomerKeyDeletionCloudWatchMetric", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Logs::MetricFilter" }, + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 444, - "startColumn": 3, - "endLine": 444, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 1798, + "startColumn": 9, + "endLine": 1798, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt ResourceForGetCloudTrailCloudWatchLog.LogName", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ProductionVpcTemplate", + "logicalId": "KMSCustomerKeyDeletionCloudWatchAlarm", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::CloudWatch::Alarm" }, + "propertyPath": "Properties.AlarmName", "category": "Best Practice", - "startLine": 525, - "startColumn": 3, - "endLine": 525, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 1812, + "startColumn": 9, + "endLine": 1812, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ProductionVpcTemplate", + "logicalId": "FunctionToFormatCloudWatchEvent", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 525, - "startColumn": 3, - "endLine": 525, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 1860, + "startColumn": 9, + "endLine": 1860, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ApplicationTemplate' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ApplicationTemplate", + "logicalId": "LambdaPermissionForCloudTrailCloudWatchEventRules", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 280, - "startColumn": 5, - "endLine": 280, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1897, + "startColumn": 9, + "endLine": 1897, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FunctionToFormatCloudWatchEvent.Arn" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ConfigRulesTemplate' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigRulesTemplate", + "logicalId": "LambdaPermissionForCloudTrailCloudWatchEventRules", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 393, - "startColumn": 5, - "endLine": 393, + "startLine": 1898, + "startColumn": 9, + "endLine": 1898, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'IamTemplate' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "IamTemplate", + "logicalId": "LambdaPermissionForCloudTrailCloudWatchEventRules", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 412, - "startColumn": 5, - "endLine": 412, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1899, + "startColumn": 9, + "endLine": 1899, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LoggingTemplate' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LoggingTemplate", + "logicalId": "DetectS3BucketPolicyChanges", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 425, - "startColumn": 5, - "endLine": 425, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1907, + "startColumn": 9, + "endLine": 1907, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ManagementVpcTemplate' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ManagementVpcTemplate", + "logicalId": "DetectConfigChanges", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 446, - "startColumn": 5, - "endLine": 446, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 1938, + "startColumn": 9, + "endLine": 1938, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ProductionVpcTemplate' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProductionVpcTemplate", + "logicalId": "KmsKeyUseCloudWatchEventRule", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 527, - "startColumn": 5, - "endLine": 527, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "quickstart/nist_iam.yaml": { - "filePath": "quickstart/nist_iam.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 18, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 5, - "informational": 8, - "debug": 0 + "startLine": 1963, + "startColumn": 9, + "endLine": 1963, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W2512", - "severity": "WARN", - "message": "IAM policy uses NotAction which grants all actions except those listed - consider using Action instead", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rSysAdminPolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" - }, - "category": "Security", - "startLine": 275, - "startColumn": 3, - "endLine": 275, - "endColumn": 18, - "ruleDescription": "IAM policy with NotAction", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rIAMAdminRole' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", - "source": "CFN_LINT", - "entity": { - "logicalId": "rIAMAdminProfile", + "logicalId": "CloudTrailCloudWatchEventRule", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 57, - "startColumn": 5, - "endLine": 57, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 1985, + "startColumn": 9, + "endLine": 1985, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rInstanceOpsRole' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rInstanceOpsProfile", + "logicalId": "IamPolicyChangesCloudWatchEventRule", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 137, - "startColumn": 5, - "endLine": 137, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 2008, + "startColumn": 9, + "endLine": 2008, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rReadOnlyAdminRole' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rReadOnlyAdminProfile", + "logicalId": "BillingChangeCloudWatchEventRule", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 236, - "startColumn": 5, - "endLine": 236, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 2046, + "startColumn": 9, + "endLine": 2046, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rSysAdminRole' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rSysAdminProfile", + "logicalId": "Ec2TerminationCloudWatchEventRule", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 312, - "startColumn": 5, - "endLine": 312, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 2070, + "startColumn": 9, + "endLine": 2070, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rIAMAdminProfile", + "logicalId": "SecurityGroupChangesCloudWatchEventRule", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 59, - "startColumn": 7, - "endLine": 59, - "endColumn": 11, + "startLine": 2093, + "startColumn": 9, + "endLine": 2093, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -29339,19 +22885,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rInstanceOpsProfile", + "logicalId": "NetworkAclChangesCloudWatchEventRule", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 139, - "startColumn": 7, - "endLine": 139, - "endColumn": 11, + "startLine": 2121, + "startColumn": 9, + "endLine": 2121, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -29361,19 +22907,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rReadOnlyAdminProfile", + "logicalId": "NetworkChangeCloudWatchEventRule", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 238, - "startColumn": 7, - "endLine": 238, - "endColumn": 11, + "startLine": 2151, + "startColumn": 9, + "endLine": 2151, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -29383,1118 +22929,1102 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rSysAdminProfile", + "logicalId": "BillingChangesCloudWatchFilter", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::Logs::MetricFilter" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 314, - "startColumn": 7, - "endLine": 314, - "endColumn": 11, + "startLine": 2187, + "startColumn": 9, + "endLine": 2187, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt ResourceForGetCloudTrailCloudWatchLog.LogName", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'rIAMAdminRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rIAMAdminRole", + "logicalId": "BillingChangesCloudWatchAlarm", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::CloudWatch::Alarm" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AlarmName", "category": "Best Practice", - "startLine": 64, - "startColumn": 5, - "endLine": 64, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 2202, + "startColumn": 9, + "endLine": 2202, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'rInstanceOpsRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rInstanceOpsRole", + "logicalId": "FunctionToDisableUnusedCredentials", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 144, - "startColumn": 5, - "endLine": 144, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 2255, + "startColumn": 9, + "endLine": 2255, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'rReadOnlyAdminRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rReadOnlyAdminRole", + "logicalId": "LambdaPermissionForDisableUnusedCredentials", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 243, - "startColumn": 5, - "endLine": 243, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 2342, + "startColumn": 9, + "endLine": 2342, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FunctionToDisableUnusedCredentials.Arn" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'rSysAdminRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rSysAdminRole", + "logicalId": "LambdaPermissionForDisableUnusedCredentials", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 319, - "startColumn": 5, - "endLine": 319, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "quickstart/nist_logging.yaml": { - "filePath": "quickstart/nist_logging.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 24, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 39, - "informational": 35, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3045", - "severity": "ERROR", - "message": "A bucket with 'AccessControl' set should also have at least one 'OwnershipControl' configured", - "source": "CFN_LINT", - "entity": { - "logicalId": "rArchiveLogsBucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties", - "suggestedFix": "Add OwnershipControls to the bucket when using AccessControl", - "category": "Resource", - "startLine": 43, - "startColumn": 5, - "endLine": 43, + "startLine": 2343, + "startColumn": 9, + "endLine": 2343, "endColumn": 15, - "ruleDescription": "Validate AccessControl are set with OwnershipControls", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rArchiveLogsBucket' dependency already enforced by a 'Ref' at 'Properties.Bucket'", - "source": "CFN_LINT", - "entity": { - "logicalId": "rArchiveLogsBucketPolicy", - "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 61, - "startColumn": 5, - "endLine": 61, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rArchiveLogsBucket' dependency already enforced by a 'Ref' at 'Properties.PolicyDocument.Statement.0.Resource.0.Fn::Join.1.3'", - "source": "CFN_LINT", - "entity": { - "logicalId": "rArchiveLogsBucketPolicy", - "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 61, - "startColumn": 5, - "endLine": 61, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rArchiveLogsBucket' dependency already enforced by a 'Ref' at 'Properties.PolicyDocument.Statement.1.Resource.0.Fn::Join.1.3'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rArchiveLogsBucketPolicy", + "logicalId": "LambdaPermissionForDisableUnusedCredentials", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 61, - "startColumn": 5, - "endLine": 61, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 2344, + "startColumn": 9, + "endLine": 2344, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rArchiveLogsBucket' dependency already enforced by a 'Ref' at 'Properties.PolicyDocument.Statement.2.Resource.0.Fn::Join.1.3'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rArchiveLogsBucketPolicy", + "logicalId": "ScheduledRuleForDisableUnusedCredentials", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 61, - "startColumn": 5, - "endLine": 61, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 2349, + "startColumn": 9, + "endLine": 2349, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rCloudTrailRole' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MasterConfigRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rCloudTrailProfile", + "logicalId": "MasterConfigRole", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 180, - "startColumn": 5, - "endLine": 180, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 78, + "startColumn": 7, + "endLine": 78, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rCloudTrailBucket' dependency already enforced by a 'Ref' at 'Properties.Bucket'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctiontForEvaluateCisBenchmarkingPreconditions' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rCloudTrailS3Policy", + "logicalId": "FunctiontForEvaluateCisBenchmarkingPreconditions", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 232, - "startColumn": 5, - "endLine": 232, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 123, + "startColumn": 7, + "endLine": 123, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rCloudTrailBucket' dependency already enforced by a 'Ref' at 'Properties.PolicyDocument.Statement.0.Resource.0.Fn::Join.1.3'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionForEvaluateRootAccountRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rCloudTrailS3Policy", + "logicalId": "FunctionForEvaluateRootAccountRule", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 232, - "startColumn": 5, - "endLine": 232, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 230, + "startColumn": 7, + "endLine": 230, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rCloudTrailBucket' dependency already enforced by a 'Ref' at 'Properties.PolicyDocument.Statement.1.Resource.0.Fn::Join.1.3'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionForVpcFlowLogRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rCloudTrailS3Policy", + "logicalId": "FunctionForVpcFlowLogRule", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 232, - "startColumn": 5, - "endLine": 232, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 424, + "startColumn": 7, + "endLine": 424, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rCloudTrailBucket' dependency already enforced by a 'Ref' at 'Properties.PolicyDocument.Statement.2.Resource.0.Fn::Join.1.3'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionForVpcDefaultSecurityGroupsRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rCloudTrailS3Policy", + "logicalId": "FunctionForVpcDefaultSecurityGroupsRule", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 232, - "startColumn": 5, - "endLine": 232, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 500, + "startColumn": 7, + "endLine": 500, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rCloudTrailBucket' dependency already enforced by a 'Ref' at 'Properties.PolicyDocument.Statement.3.Resource.0.Fn::Join.1.3'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionForRoleForMfaOnUsersRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rCloudTrailS3Policy", + "logicalId": "FunctionForRoleForMfaOnUsersRule", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 232, - "startColumn": 5, - "endLine": 232, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 609, + "startColumn": 7, + "endLine": 609, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rCloudTrailBucket' dependency already enforced by a 'Ref' at 'Properties.PolicyDocument.Statement.4.Resource.0.Fn::Join.1.3'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionForEvaluatePolicyPermissionsRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rCloudTrailS3Policy", + "logicalId": "FunctionForEvaluatePolicyPermissionsRule", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 232, - "startColumn": 5, - "endLine": 232, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 702, + "startColumn": 7, + "endLine": 702, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionForEvaluateUserPolicyAssociationRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rArchiveLogsBucket", + "logicalId": "FunctionForEvaluateUserPolicyAssociationRule", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 41, - "startColumn": 3, - "endLine": 41, - "endColumn": 21, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "startLine": 798, + "startColumn": 7, + "endLine": 798, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionForEvaluateCloudTrailRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rCloudTrailBucket", + "logicalId": "FunctionForEvaluateCloudTrailRule", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 119, - "startColumn": 3, - "endLine": 119, - "endColumn": 20, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "startLine": 889, + "startColumn": 7, + "endLine": 889, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3045", - "severity": "WARN", - "message": "AccessControl property is deprecated. Use bucket policies instead", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionForEvaluateCloudTrailBucketRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rArchiveLogsBucket", + "logicalId": "FunctionForEvaluateCloudTrailBucketRule", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AccessControl", - "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", - "category": "Deprecation", - "startLine": 44, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1002, "startColumn": 7, - "endLine": 44, - "endColumn": 20, - "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", - "phase": "LINT", - "context": { - "actualValue": "LogDeliveryWrite" - } + "endLine": 1002, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W3045", - "severity": "WARN", - "message": "AccessControl property is deprecated. Use bucket policies instead", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionForEvaluateCloudTrailLogIntegrityRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rCloudTrailBucket", + "logicalId": "FunctionForEvaluateCloudTrailLogIntegrityRule", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AccessControl", - "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", - "category": "Deprecation", - "startLine": 122, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1119, "startColumn": 7, - "endLine": 122, - "endColumn": 20, - "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", - "phase": "LINT", - "context": { - "actualValue": "Private" - } + "endLine": 1119, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'2555' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionForInstanceRoleUseRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rArchiveLogsBucket", + "logicalId": "FunctionForInstanceRoleUseRule", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.LifecycleConfiguration.Rules.0.ExpirationInDays", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 47, - "startColumn": 11, - "endLine": 47, - "endColumn": 27, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 1216, + "startColumn": 7, + "endLine": 1216, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'90' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionForEvaluateKeyRotationRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rArchiveLogsBucket", + "logicalId": "FunctionForEvaluateKeyRotationRule", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.LifecycleConfiguration.Rules.0.Transition.TransitionInDays", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 56, - "startColumn": 13, - "endLine": 56, - "endColumn": 29, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 1301, + "startColumn": 7, + "endLine": 1301, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionForEvaluateConfigInAllRegionsRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rCloudTrailChangeAlarm", + "logicalId": "FunctionForEvaluateConfigInAllRegionsRule", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.EvaluationPeriods", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 151, + "startLine": 1397, "startColumn": 7, - "endLine": 151, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 1397, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'300' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionForVpcPeeringRouteTablesRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rCloudTrailChangeAlarm", + "logicalId": "FunctionForVpcPeeringRouteTablesRule", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Period", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 154, + "startLine": 1502, "startColumn": 7, - "endLine": 154, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 1502, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'1' is not of type 'number' - automatically coerced (string to number)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SnsTopicForCloudWatchEvents' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rCloudTrailChangeAlarm", + "logicalId": "SnsTopicForCloudWatchEvents", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.Threshold", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 156, + "startLine": 1588, "startColumn": 7, - "endLine": 156, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 1588, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'90' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'GetCloudTrailCloudWatchLog' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rCloudTrailLogGroup", + "logicalId": "GetCloudTrailCloudWatchLog", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RetentionInDays", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 160, + "startLine": 1602, "startColumn": 7, - "endLine": 160, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 1602, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'UnauthorizedAttemptCloudWatchAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rIAMCreateAccessKeyAlarm", + "logicalId": "UnauthorizedAttemptCloudWatchAlarm", "entityType": "Resource", "resourceType": "AWS::CloudWatch::Alarm" }, - "propertyPath": "Properties.EvaluationPeriods", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 399, + "startLine": 1661, "startColumn": 7, - "endLine": 399, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 1661, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'300' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'IAMRootActivityCloudWatchAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rIAMCreateAccessKeyAlarm", + "logicalId": "IAMRootActivityCloudWatchAlarm", "entityType": "Resource", "resourceType": "AWS::CloudWatch::Alarm" }, - "propertyPath": "Properties.Period", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 402, + "startLine": 1699, "startColumn": 7, - "endLine": 402, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 1699, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'1' is not of type 'number' - automatically coerced (string to number)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ConsoleSigninWithoutMFACloudWatchAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rIAMCreateAccessKeyAlarm", + "logicalId": "ConsoleSigninWithoutMFACloudWatchAlarm", "entityType": "Resource", "resourceType": "AWS::CloudWatch::Alarm" }, - "propertyPath": "Properties.Threshold", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 404, + "startLine": 1737, "startColumn": 7, - "endLine": 404, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 1737, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ConsoleLoginFailureCloudWatchAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rIAMPolicyChangesAlarm", + "logicalId": "ConsoleLoginFailureCloudWatchAlarm", "entityType": "Resource", "resourceType": "AWS::CloudWatch::Alarm" }, - "propertyPath": "Properties.EvaluationPeriods", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 414, + "startLine": 1774, "startColumn": 7, - "endLine": 414, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 1774, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'300' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'KMSCustomerKeyDeletionCloudWatchAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rIAMPolicyChangesAlarm", + "logicalId": "KMSCustomerKeyDeletionCloudWatchAlarm", "entityType": "Resource", "resourceType": "AWS::CloudWatch::Alarm" }, - "propertyPath": "Properties.Period", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 417, + "startLine": 1811, "startColumn": 7, - "endLine": 417, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 1811, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'1' is not of type 'number' - automatically coerced (string to number)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'RoleForCloudWatchEvents' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rIAMPolicyChangesAlarm", + "logicalId": "RoleForCloudWatchEvents", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Threshold", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 419, + "startLine": 1831, "startColumn": 7, - "endLine": 419, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 1831, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionToFormatCloudWatchEvent' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rNetworkAclChangesAlarm", + "logicalId": "FunctionToFormatCloudWatchEvent", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.EvaluationPeriods", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 450, + "startLine": 1859, "startColumn": 7, - "endLine": 450, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 1859, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'300' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DetectS3BucketPolicyChanges' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rNetworkAclChangesAlarm", + "logicalId": "DetectS3BucketPolicyChanges", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.Period", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 453, + "startLine": 1906, "startColumn": 7, - "endLine": 453, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 1906, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'1' is not of type 'number' - automatically coerced (string to number)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DetectConfigChanges' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rNetworkAclChangesAlarm", + "logicalId": "DetectConfigChanges", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.Threshold", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 455, + "startLine": 1937, "startColumn": 7, - "endLine": 455, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 1937, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'KmsKeyUseCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rRootActivityAlarm", + "logicalId": "KmsKeyUseCloudWatchEventRule", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.EvaluationPeriods", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 478, + "startLine": 1962, "startColumn": 7, - "endLine": 478, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 1962, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'300' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CloudTrailCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rRootActivityAlarm", + "logicalId": "CloudTrailCloudWatchEventRule", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.Period", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 481, + "startLine": 1984, "startColumn": 7, - "endLine": 481, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 1984, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'1' is not of type 'number' - automatically coerced (string to number)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'IamPolicyChangesCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rRootActivityAlarm", + "logicalId": "IamPolicyChangesCloudWatchEventRule", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.Threshold", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 483, + "startLine": 2007, "startColumn": 7, - "endLine": 483, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 2007, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BillingChangeCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rSecurityGroupChangesAlarm", + "logicalId": "BillingChangeCloudWatchEventRule", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.EvaluationPeriods", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 501, + "startLine": 2045, "startColumn": 7, - "endLine": 501, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 2045, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'300' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Ec2TerminationCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rSecurityGroupChangesAlarm", + "logicalId": "Ec2TerminationCloudWatchEventRule", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.Period", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 504, + "startLine": 2069, "startColumn": 7, - "endLine": 504, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 2069, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'1' is not of type 'number' - automatically coerced (string to number)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SecurityGroupChangesCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rSecurityGroupChangesAlarm", + "logicalId": "SecurityGroupChangesCloudWatchEventRule", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.Threshold", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 506, + "startLine": 2092, "startColumn": 7, - "endLine": 506, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 2092, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'NetworkAclChangesCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rUnauthorizedAttemptAlarm", + "logicalId": "NetworkAclChangesCloudWatchEventRule", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.EvaluationPeriods", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 529, + "startLine": 2120, "startColumn": 7, - "endLine": 529, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 2120, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'300' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'NetworkChangeCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rUnauthorizedAttemptAlarm", + "logicalId": "NetworkChangeCloudWatchEventRule", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.Period", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 532, + "startLine": 2150, "startColumn": 7, - "endLine": 532, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 2150, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'5' is not of type 'number' - automatically coerced (string to number)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BillingChangesCloudWatchAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rUnauthorizedAttemptAlarm", + "logicalId": "BillingChangesCloudWatchAlarm", "entityType": "Resource", "resourceType": "AWS::CloudWatch::Alarm" }, - "propertyPath": "Properties.Threshold", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 534, + "startLine": 2201, "startColumn": 7, - "endLine": 534, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 2201, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'RoleForDisableUnusedCredentialsFunction' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rCloudTrailLogGroup", + "logicalId": "RoleForDisableUnusedCredentialsFunction", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::IAM::Role" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 158, - "startColumn": 3, - "endLine": 158, - "endColumn": 22, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 2221, + "startColumn": 7, + "endLine": 2221, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'FunctionToDisableUnusedCredentials' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "rCloudTrailLogGroup", + "logicalId": "FunctionToDisableUnusedCredentials", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 158, - "startColumn": 3, - "endLine": 158, - "endColumn": 22, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 2254, + "startColumn": 7, + "endLine": 2254, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Resource 'ScheduledRuleForDisableUnusedCredentials' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rArchiveLogsBucketPolicy", + "logicalId": "ScheduledRuleForDisableUnusedCredentials", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 63, + "startLine": 2348, "startColumn": 7, - "endLine": 63, + "endLine": 2348, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "quickstart/config-rules.json": { + "filePath": "quickstart/config-rules.json", + "status": "OK", + "metadata": { + "resourcesScanned": 12, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 5, + "informational": 15, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs' was deprecated on '2016-08-30'. Creation was disabled on '2016-09-30', and updates were disabled on '2016-10-31'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAMIComplianceFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 194, + "startColumn": 5, + "endLine": 194, "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rArchiveLogsBucket'" + "actualValue": "nodejs", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs' was deprecated on '2016-08-30'. Creation was disabled on '2016-09-30', and updates were disabled on '2016-10-31'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "rCloudTrailChange", + "logicalId": "rCloudTrailValidationFunction", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.LogGroupName", - "category": "Best Practice", - "startLine": 135, - "startColumn": 7, - "endLine": 135, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 291, + "startColumn": 5, + "endLine": 291, + "endColumn": 13, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rCloudTrailLogGroup'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "actualValue": "nodejs", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'rConfigRulesLambdaRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "rCloudTrailChangeAlarm", + "logicalId": "rAMIComplianceFunction", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AlarmName", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 149, - "startColumn": 7, - "endLine": 149, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 141, + "startColumn": 4, + "endLine": 141, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'rConfigRulesLambdaRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "rCloudTrailProfile", + "logicalId": "rCloudTrailValidationFunction", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Path", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 182, - "startColumn": 7, - "endLine": 182, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 239, + "startColumn": 4, + "endLine": 239, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W8003", + "severity": "WARN", + "message": "Fn::Equals in condition 'cApprovedAMIsRule' will always return True", + "source": "CFN_LINT", "entity": { - "logicalId": "rCloudTrailRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "logicalId": "cApprovedAMIsRule", + "entityType": "Condition" }, - "propertyPath": "Properties.Path", + "propertyPath": "Conditions/cApprovedAMIsRule", "category": "Best Practice", - "startLine": 196, - "startColumn": 7, - "endLine": 196, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 38, + "startColumn": 3, + "endLine": 38, + "endColumn": 21, + "ruleDescription": "Fn::Equals will always return true or false", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "'30' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAMIComplianceFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Timeout", + "category": "Best Practice", + "startLine": 195, + "startColumn": 5, + "endLine": 195, + "endColumn": 13, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'30' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", "entity": { - "logicalId": "rCloudTrailS3Policy", + "logicalId": "rCloudTrailValidationFunction", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.Timeout", "category": "Best Practice", - "startLine": 234, - "startColumn": 7, - "endLine": 234, + "startLine": 292, + "startColumn": 5, + "endLine": 292, "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rCloudTrailBucket'" - } + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rCloudWatchLogsRole", + "logicalId": "rConfigRuleForSSH", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.ConfigRuleName", "category": "Best Practice", - "startLine": 334, - "startColumn": 7, - "endLine": 334, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "startLine": 48, + "startColumn": 5, + "endLine": 48, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -30504,47 +24034,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rIAMCreateAccessKey", + "logicalId": "rConfigRuleForRequiredTags", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.ConfigRuleName", "category": "Best Practice", - "startLine": 383, - "startColumn": 7, - "endLine": 383, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "startLine": 63, + "startColumn": 5, + "endLine": 63, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rCloudTrailLogGroup'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rIAMCreateAccessKeyAlarm", + "logicalId": "rConfigRuleForUnrestrictedPorts", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "Properties.AlarmName", + "propertyPath": "Properties.ConfigRuleName", "category": "Best Practice", - "startLine": 397, - "startColumn": 7, - "endLine": 397, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "startLine": 83, + "startColumn": 5, + "endLine": 83, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -30554,20 +24080,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rIAMPolicyChangesAlarm", + "logicalId": "rConfigRulesLambdaRole", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.AlarmName", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 412, - "startColumn": 7, - "endLine": 412, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "startLine": 110, + "startColumn": 5, + "endLine": 110, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -30577,124 +24103,109 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rIAMPolicyChangesMetricFilter", + "logicalId": "rConfigRulesLambdaProfile", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 424, - "startColumn": 7, - "endLine": 424, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "startLine": 133, + "startColumn": 5, + "endLine": 133, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rCloudTrailLogGroup'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rIAMRootActivity", + "logicalId": "rConfigRuleForAMICompliance", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.ConfigRuleName", "category": "Best Practice", - "startLine": 435, - "startColumn": 7, - "endLine": 435, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "startLine": 205, + "startColumn": 5, + "endLine": 205, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rCloudTrailLogGroup'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rNetworkAclChangesAlarm", + "logicalId": "rConfigPermissionToCallLambdaAMICompliance", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.AlarmName", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 448, - "startColumn": 7, - "endLine": 448, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "startLine": 230, + "startColumn": 5, + "endLine": 230, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt rAMIComplianceFunction.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rNetworkAclChangesMetricFilter", + "logicalId": "rConfigPermissionToCallLambdaAMICompliance", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 463, - "startColumn": 7, - "endLine": 463, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "startLine": 233, + "startColumn": 5, + "endLine": 233, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rCloudTrailLogGroup'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rRootActivityAlarm", + "logicalId": "rConfigPermissionToCallLambdaAMICompliance", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.AlarmName", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 476, - "startColumn": 7, - "endLine": 476, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "startLine": 234, + "startColumn": 5, + "endLine": 234, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -30704,20 +24215,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rSecurityGroupChangesAlarm", + "logicalId": "rConfigRuleForCloudTrail", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Config::ConfigRule" }, - "propertyPath": "Properties.AlarmName", + "propertyPath": "Properties.ConfigRuleName", "category": "Best Practice", - "startLine": 499, - "startColumn": 7, - "endLine": 499, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "startLine": 301, + "startColumn": 5, + "endLine": 301, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -30727,47 +24238,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rSecurityGroupChangesMetricFilter", + "logicalId": "rConfigPermissionToCallLambdaCloudTrail", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 514, - "startColumn": 7, - "endLine": 514, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "startLine": 322, + "startColumn": 5, + "endLine": 322, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'rCloudTrailLogGroup'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt rCloudTrailValidationFunction.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rUnauthorizedAttemptAlarm", + "logicalId": "rConfigPermissionToCallLambdaCloudTrail", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.AlarmName", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 527, - "startColumn": 7, - "endLine": 527, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "startLine": 325, + "startColumn": 5, + "endLine": 325, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -30777,46 +24283,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rUnauthorizedAttempts", + "logicalId": "rConfigPermissionToCallLambdaCloudTrail", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 539, - "startColumn": 7, - "endLine": 539, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "startLine": 326, + "startColumn": 5, + "endLine": 326, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rCloudTrailLogGroup'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'rArchiveLogsBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'rConfigRulesLambdaRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rArchiveLogsBucket", + "logicalId": "rConfigRulesLambdaRole", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 43, - "startColumn": 5, - "endLine": 43, + "startLine": 99, + "startColumn": 4, + "endLine": 99, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -30824,199 +24325,244 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'rCloudTrailBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'rCloudTrailValidationFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rCloudTrailBucket", + "logicalId": "rCloudTrailValidationFunction", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 121, - "startColumn": 5, - "endLine": 121, + "startLine": 240, + "startColumn": 4, + "endLine": 240, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "quickstart/iam.json": { + "filePath": "quickstart/iam.json", + "status": "OK", + "metadata": { + "resourcesScanned": 18, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 5, + "informational": 8, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'rCloudTrailChangeAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "ruleId": "W2512", + "severity": "WARN", + "message": "IAM policy uses NotAction which grants all actions except those listed - consider using Action instead", "source": "ENGINE", "entity": { - "logicalId": "rCloudTrailChangeAlarm", + "logicalId": "rSysAdminPolicy", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Security", + "startLine": 61, + "startColumn": 3, + "endLine": 61, + "endColumn": 19, + "ruleDescription": "IAM policy with NotAction", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rSysAdminRole' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSysAdminProfile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 144, - "startColumn": 5, - "endLine": 144, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 45, + "startColumn": 4, + "endLine": 45, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'rCloudTrailLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'rIAMAdminRole' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", + "source": "CFN_LINT", "entity": { - "logicalId": "rCloudTrailLogGroup", + "logicalId": "rIAMAdminProfile", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 159, - "startColumn": 5, - "endLine": 159, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 139, + "startColumn": 4, + "endLine": 139, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'rCloudTrailLoggingLocal' of type 'AWS::CloudTrail::Trail' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'rInstanceOpsRole' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", + "source": "CFN_LINT", "entity": { - "logicalId": "rCloudTrailLoggingLocal", + "logicalId": "rInstanceOpsProfile", "entityType": "Resource", - "resourceType": "AWS::CloudTrail::Trail" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 164, - "startColumn": 5, - "endLine": 164, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 211, + "startColumn": 4, + "endLine": 211, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'rCloudTrailRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'rReadOnlyAdminRole' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", + "source": "CFN_LINT", "entity": { - "logicalId": "rCloudTrailRole", + "logicalId": "rReadOnlyAdminProfile", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 187, - "startColumn": 5, - "endLine": 187, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 324, + "startColumn": 4, + "endLine": 324, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'rCloudWatchLogsRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rCloudWatchLogsRole", + "logicalId": "rSysAdminProfile", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 325, + "startLine": 47, "startColumn": 5, - "endLine": 325, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 47, + "endColumn": 10, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'rIAMCreateAccessKeyAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rIAMCreateAccessKeyAlarm", + "logicalId": "rIAMAdminProfile", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 392, + "startLine": 141, "startColumn": 5, - "endLine": 392, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 141, + "endColumn": 10, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'rIAMPolicyChangesAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rIAMPolicyChangesAlarm", + "logicalId": "rInstanceOpsProfile", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 408, + "startLine": 213, "startColumn": 5, - "endLine": 408, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 213, + "endColumn": 10, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'rNetworkAclChangesAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rNetworkAclChangesAlarm", + "logicalId": "rReadOnlyAdminProfile", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 443, + "startLine": 326, "startColumn": 5, - "endLine": 443, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 326, + "endColumn": 10, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'rRootActivityAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Resource 'rSysAdminRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rRootActivityAlarm", + "logicalId": "rSysAdminRole", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 472, - "startColumn": 5, - "endLine": 472, + "startLine": 24, + "startColumn": 4, + "endLine": 24, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -31024,19 +24570,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'rSecurityAlarmTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'rIAMAdminRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rSecurityAlarmTopic", + "logicalId": "rIAMAdminRole", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 486, - "startColumn": 5, - "endLine": 486, + "startLine": 119, + "startColumn": 4, + "endLine": 119, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -31044,19 +24590,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'rSecurityGroupChangesAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Resource 'rInstanceOpsRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rSecurityGroupChangesAlarm", + "logicalId": "rInstanceOpsRole", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 494, - "startColumn": 5, - "endLine": 494, + "startLine": 191, + "startColumn": 4, + "endLine": 191, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -31064,19 +24610,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'rUnauthorizedAttemptAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Resource 'rReadOnlyAdminRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rUnauthorizedAttemptAlarm", + "logicalId": "rReadOnlyAdminRole", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 523, - "startColumn": 5, - "endLine": 523, + "startLine": 304, + "startColumn": 4, + "endLine": 304, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" diff --git a/src/resources/expected/validation_reports8.json b/src/resources/expected/validation_reports8.json index ab30c4bb..25b0a08a 100644 --- a/src/resources/expected/validation_reports8.json +++ b/src/resources/expected/validation_reports8.json @@ -1,4 +1,7183 @@ { + "quickstart/nat-instance.json": { + "filePath": "quickstart/nat-instance.json", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 3, + "informational": 14, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W1030", + "severity": "WARN", + "message": "{'Ref': 'pNatAmi'} is not a 'AWS::EC2::Image.Id' when 'Ref' is resolved", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNatInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "suggestedFix": "Use parameter type AWS::EC2::Image::Id", + "category": "Best Practice", + "startLine": 129, + "startColumn": 5, + "endLine": 129, + "endColumn": 13, + "ruleDescription": "Validate the values that come from a Ref function", + "phase": "LINT" + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'pVpcId' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "pVpcId", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/pVpcId", + "category": "Best Practice", + "startLine": 57, + "startColumn": 3, + "endLine": 57, + "endColumn": 10, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "W2506", + "severity": "WARN", + "message": "Parameter 'pNatAmi' is used as an ImageId but has Type 'String' - consider using 'AWS::EC2::Image::Id'", + "source": "CFN_LINT", + "entity": { + "logicalId": "pNatAmi", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/pNatAmi", + "category": "Best Practice", + "startLine": 47, + "startColumn": 3, + "endLine": 47, + "endColumn": 11, + "ruleDescription": "Check if ImageId Parameters have the correct type", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNatInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.Tags.0.Value.Fn::Join", + "category": "Intrinsic Function", + "startLine": 106, + "startColumn": 7, + "endLine": 106, + "endColumn": 16, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNatInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.UserData.Fn::Base64.Fn::Join", + "category": "Intrinsic Function", + "startLine": 113, + "startColumn": 7, + "endLine": 113, + "endColumn": 16, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNatInstanceEni", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkInterface" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 78, + "startColumn": 5, + "endLine": 78, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/networkinterface", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNatInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 96, + "startColumn": 5, + "endLine": 96, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNatInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.KeyName", + "category": "Best Practice", + "startLine": 100, + "startColumn": 5, + "endLine": 100, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNatInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 111, + "startColumn": 5, + "endLine": 111, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNatInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 129, + "startColumn": 5, + "endLine": 129, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNatInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.NetworkInterfaces", + "category": "Best Practice", + "startLine": 132, + "startColumn": 5, + "endLine": 132, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AssociateEipNat", + "entityType": "Resource", + "resourceType": "AWS::EC2::EIPAssociation" + }, + "propertyPath": "Properties.AllocationId", + "category": "Best Practice", + "startLine": 143, + "startColumn": 5, + "endLine": 143, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/tree/master/aws-ec2-eipassociation", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt rEipNat.AllocationId", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkInterfaceId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AssociateEipNat", + "entityType": "Resource", + "resourceType": "AWS::EC2::EIPAssociation" + }, + "propertyPath": "Properties.NetworkInterfaceId", + "category": "Best Practice", + "startLine": 149, + "startColumn": 5, + "endLine": 149, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/tree/master/aws-ec2-eipassociation", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rNatInstanceEni'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteProdPrivateNatInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" + }, + "propertyPath": "Properties.DestinationCidrBlock", + "category": "Best Practice", + "startLine": 157, + "startColumn": 5, + "endLine": 157, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRouteProdPrivateNatInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Route" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 158, + "startColumn": 5, + "endLine": 158, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rEipNat' of type 'AWS::EC2::EIP' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rEipNat", + "entityType": "Resource", + "resourceType": "AWS::EC2::EIP" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 71, + "startColumn": 4, + "endLine": 71, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "quickstart/nist_application.yaml": { + "filePath": "quickstart/nist_application.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 28, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 81, + "informational": 76, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W1011", + "severity": "WARN", + "message": "Use dynamic references (e.g., SSM SecureString) instead of parameter 'pDBPassword' for secrets", + "source": "CFN_LINT", + "entity": { + "logicalId": "rRDSInstanceMySQL", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.MasterUserPassword", + "category": "Security", + "startLine": 1016, + "startColumn": 7, + "endLine": 1016, + "endColumn": 25, + "ruleDescription": "Instead of REFing a parameter for a secret use a dynamic reference", + "phase": "LINT" + }, + { + "ruleId": "W1030", + "severity": "WARN", + "message": "{'Ref': 'pAppAmi'} is not a 'AWS::EC2::Image.Id' when 'Ref' is resolved", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingConfigApp", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.ImageId", + "suggestedFix": "Use parameter type AWS::EC2::Image::Id", + "category": "Best Practice", + "startLine": 378, + "startColumn": 7, + "endLine": 378, + "endColumn": 14, + "ruleDescription": "Validate the values that come from a Ref function", + "phase": "LINT" + }, + { + "ruleId": "W1030", + "severity": "WARN", + "message": "{'Ref': 'pWebServerAMI'} is not a 'AWS::EC2::Image.Id' when 'Ref' is resolved", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingConfigWeb", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.ImageId", + "suggestedFix": "Use parameter type AWS::EC2::Image::Id", + "category": "Best Practice", + "startLine": 510, + "startColumn": 7, + "endLine": 510, + "endColumn": 14, + "ruleDescription": "Validate the values that come from a Ref function", + "phase": "LINT" + }, + { + "ruleId": "W1030", + "severity": "WARN", + "message": "{'Ref': 'pWebServerAMI'} is not a 'AWS::EC2::Image.Id' when 'Ref' is resolved", + "source": "CFN_LINT", + "entity": { + "logicalId": "rPostProcInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "suggestedFix": "Use parameter type AWS::EC2::Image::Id", + "category": "Best Practice", + "startLine": 800, + "startColumn": 7, + "endLine": 800, + "endColumn": 14, + "ruleDescription": "Validate the values that come from a Ref function", + "phase": "LINT" + }, + { + "ruleId": "W2010", + "severity": "WARN", + "message": "Don't use 'NoEcho' parameter 'pDBPassword' in resource metadata", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingConfigApp", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.install_wordpress.files./tmp/create-wp-config.content.Fn::Join.1.9", + "suggestedFix": "Move the parameter reference out of Metadata or remove NoEcho", + "category": "Security", + "startLine": 343, + "startColumn": 24, + "endLine": 343, + "endColumn": 25, + "ruleDescription": "NoEcho parameters are not masked when used in Metadata and Outputs", + "phase": "LINT" + }, + { + "ruleId": "W2506", + "severity": "WARN", + "message": "Parameter 'pAppAmi' is used as an ImageId but has Type 'String' - consider using 'AWS::EC2::Image::Id'", + "source": "CFN_LINT", + "entity": { + "logicalId": "pAppAmi", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/pAppAmi", + "category": "Best Practice", + "startLine": 125, + "startColumn": 3, + "endLine": 125, + "endColumn": 10, + "ruleDescription": "Check if ImageId Parameters have the correct type", + "phase": "LINT" + }, + { + "ruleId": "W2506", + "severity": "WARN", + "message": "Parameter 'pWebServerAMI' is used as an ImageId but has Type 'String' - consider using 'AWS::EC2::Image::Id'", + "source": "CFN_LINT", + "entity": { + "logicalId": "pWebServerAMI", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/pWebServerAMI", + "category": "Best Practice", + "startLine": 213, + "startColumn": 3, + "endLine": 213, + "endColumn": 16, + "ruleDescription": "Check if ImageId Parameters have the correct type", + "phase": "LINT" + }, + { + "ruleId": "W2511", + "severity": "WARN", + "message": "IAM Policy Version should be updated to '2012-10-17'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rS3AccessLogsPolicy", + "entityType": "Resource", + "resourceType": "AWS::S3::BucketPolicy" + }, + "propertyPath": "Properties.PolicyDocument.Version", + "suggestedFix": "Update the policy document Version to '2012-10-17'", + "category": "Security", + "startLine": 1058, + "startColumn": 9, + "endLine": 1058, + "endColumn": 16, + "ruleDescription": "Check IAM Resource Policies syntax", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rRDSInstanceMySQL' dependency already enforced by a 'GetAtt' at 'Metadata.AWS::CloudFormation::Init.install_wordpress.files./tmp/create-wp-config.content.Fn::Join.1.12'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingConfigApp", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 219, + "startColumn": 5, + "endLine": 219, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rELBApp' dependency already enforced by a 'GetAtt' at 'Metadata.AWS::CloudFormation::Init.nginx.files./tmp/nginx/default.conf.content.Fn::Join.1.9'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingConfigWeb", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 417, + "startColumn": 5, + "endLine": 417, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rAutoScalingConfigApp' dependency already enforced by a 'Ref' at 'Properties.LaunchConfigurationName'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingGroupApp", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 577, + "startColumn": 5, + "endLine": 577, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rAutoScalingConfigWeb' dependency already enforced by a 'Ref' at 'Properties.LaunchConfigurationName'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingGroupWeb", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 603, + "startColumn": 5, + "endLine": 603, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rAutoScalingGroupWeb' dependency already enforced by a 'Ref' at 'Properties.Dimensions.0.Value'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCWAlarmLowCPUWeb", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 698, + "startColumn": 5, + "endLine": 698, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rS3ELBAccessLogs' dependency already enforced by a 'Ref' at 'Properties.AccessLoggingPolicy.S3BucketName'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rELBApp", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 723, + "startColumn": 5, + "endLine": 723, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rSecurityGroupApp' dependency already enforced by a 'Ref' at 'Properties.SecurityGroups.0'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rELBApp", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 723, + "startColumn": 5, + "endLine": 723, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rS3ELBAccessLogs' dependency already enforced by a 'Ref' at 'Properties.AccessLoggingPolicy.S3BucketName'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rELBWeb", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 759, + "startColumn": 5, + "endLine": 759, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rSecurityGroupWeb' dependency already enforced by a 'Ref' at 'Properties.SecurityGroups.0'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rELBWeb", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 759, + "startColumn": 5, + "endLine": 759, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rDBSubnetGroup' dependency already enforced by a 'Ref' at 'Properties.DBSubnetGroupName'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rRDSInstanceMySQL", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1003, + "startColumn": 5, + "endLine": 1003, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rSecurityGroupRDS' dependency already enforced by a 'Ref' at 'Properties.VPCSecurityGroups.0'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rRDSInstanceMySQL", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1003, + "startColumn": 5, + "endLine": 1003, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rWebContentBucket' dependency already enforced by a 'Ref' at 'Properties.Bucket'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rWebContentS3Policy", + "entityType": "Resource", + "resourceType": "AWS::S3::BucketPolicy" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1198, + "startColumn": 5, + "endLine": 1198, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rWebContentBucket' dependency already enforced by a 'Ref' at 'Properties.PolicyDocument.Statement.0.Resource.Fn::Join.1.3'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rWebContentS3Policy", + "entityType": "Resource", + "resourceType": "AWS::S3::BucketPolicy" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1198, + "startColumn": 5, + "endLine": 1198, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rWebContentBucket' dependency already enforced by a 'Ref' at 'Properties.PolicyDocument.Statement.1.Resource.Fn::Join.1.3'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rWebContentS3Policy", + "entityType": "Resource", + "resourceType": "AWS::S3::BucketPolicy" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1198, + "startColumn": 5, + "endLine": 1198, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "source": "CFN_LINT", + "entity": { + "logicalId": "rS3AccessLogsPolicy", + "entityType": "Resource", + "resourceType": "AWS::S3::BucketPolicy" + }, + "category": "Best Practice", + "startLine": 1026, + "startColumn": 3, + "endLine": 1026, + "endColumn": 22, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "phase": "LINT" + }, + { + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "source": "CFN_LINT", + "entity": { + "logicalId": "rS3ELBAccessLogs", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "category": "Best Practice", + "startLine": 1060, + "startColumn": 3, + "endLine": 1060, + "endColumn": 19, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "phase": "LINT" + }, + { + "ruleId": "W3045", + "severity": "WARN", + "message": "AccessControl property is deprecated. Use bucket policies instead", + "source": "CFN_LINT", + "entity": { + "logicalId": "rS3ELBAccessLogs", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.AccessControl", + "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", + "category": "Deprecation", + "startLine": 1063, + "startColumn": 7, + "endLine": 1063, + "endColumn": 20, + "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", + "phase": "LINT", + "context": { + "actualValue": "Private" + } + }, + { + "ruleId": "W3045", + "severity": "WARN", + "message": "AccessControl property is deprecated. Use bucket policies instead", + "source": "CFN_LINT", + "entity": { + "logicalId": "rWebContentBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.AccessControl", + "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", + "category": "Deprecation", + "startLine": 1180, + "startColumn": 7, + "endLine": 1180, + "endColumn": 20, + "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", + "phase": "LINT", + "context": { + "actualValue": "Private" + } + }, + { + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingConfigApp", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "category": "Deprecation", + "startLine": 218, + "startColumn": 3, + "endLine": 218, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" + }, + { + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingConfigWeb", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "category": "Deprecation", + "startLine": 416, + "startColumn": 3, + "endLine": 416, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'True' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingConfigWeb", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.AssociatePublicIpAddress", + "category": "Best Practice", + "startLine": 509, + "startColumn": 7, + "endLine": 509, + "endColumn": 31, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingDownApp", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::ScalingPolicy" + }, + "propertyPath": "Properties.ScalingAdjustment", + "category": "Best Practice", + "startLine": 566, + "startColumn": 7, + "endLine": 566, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'-1' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingDownWeb", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::ScalingPolicy" + }, + "propertyPath": "Properties.ScalingAdjustment", + "category": "Best Practice", + "startLine": 574, + "startColumn": 7, + "endLine": 574, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'300' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingGroupApp", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Properties.HealthCheckGracePeriod", + "category": "Best Practice", + "startLine": 582, + "startColumn": 7, + "endLine": 582, + "endColumn": 29, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingGroupApp", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Properties.Tags.0.PropagateAtLaunch", + "category": "Best Practice", + "startLine": 592, + "startColumn": 9, + "endLine": 592, + "endColumn": 26, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingGroupApp", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Properties.Tags.1.PropagateAtLaunch", + "category": "Best Practice", + "startLine": 595, + "startColumn": 9, + "endLine": 595, + "endColumn": 26, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'300' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingGroupWeb", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Properties.HealthCheckGracePeriod", + "category": "Best Practice", + "startLine": 608, + "startColumn": 7, + "endLine": 608, + "endColumn": 29, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingGroupWeb", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Properties.Tags.0.PropagateAtLaunch", + "category": "Best Practice", + "startLine": 618, + "startColumn": 9, + "endLine": 618, + "endColumn": 26, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingGroupWeb", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Properties.Tags.1.PropagateAtLaunch", + "category": "Best Practice", + "startLine": 621, + "startColumn": 9, + "endLine": 621, + "endColumn": 26, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'-1' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingUpApp", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::ScalingPolicy" + }, + "propertyPath": "Properties.ScalingAdjustment", + "category": "Best Practice", + "startLine": 634, + "startColumn": 7, + "endLine": 634, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingUpWeb", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::ScalingPolicy" + }, + "propertyPath": "Properties.ScalingAdjustment", + "category": "Best Practice", + "startLine": 642, + "startColumn": 7, + "endLine": 642, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCWAlarmHighCPUApp", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.EvaluationPeriods", + "category": "Best Practice", + "startLine": 655, + "startColumn": 7, + "endLine": 655, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'60' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCWAlarmHighCPUApp", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Period", + "category": "Best Practice", + "startLine": 658, + "startColumn": 7, + "endLine": 658, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'50' is not of type 'number' - automatically coerced (string to number)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCWAlarmHighCPUApp", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Threshold", + "category": "Best Practice", + "startLine": 660, + "startColumn": 7, + "endLine": 660, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCWAlarmHighCPUWeb", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.EvaluationPeriods", + "category": "Best Practice", + "startLine": 673, + "startColumn": 7, + "endLine": 673, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'60' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCWAlarmHighCPUWeb", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Period", + "category": "Best Practice", + "startLine": 676, + "startColumn": 7, + "endLine": 676, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'50' is not of type 'number' - automatically coerced (string to number)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCWAlarmHighCPUWeb", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Threshold", + "category": "Best Practice", + "startLine": 678, + "startColumn": 7, + "endLine": 678, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCWAlarmLowCPUApp", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.EvaluationPeriods", + "category": "Best Practice", + "startLine": 690, + "startColumn": 7, + "endLine": 690, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'60' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCWAlarmLowCPUApp", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Period", + "category": "Best Practice", + "startLine": 693, + "startColumn": 7, + "endLine": 693, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'10' is not of type 'number' - automatically coerced (string to number)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCWAlarmLowCPUApp", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Threshold", + "category": "Best Practice", + "startLine": 695, + "startColumn": 7, + "endLine": 695, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCWAlarmLowCPUWeb", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.EvaluationPeriods", + "category": "Best Practice", + "startLine": 708, + "startColumn": 7, + "endLine": 708, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'60' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCWAlarmLowCPUWeb", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Period", + "category": "Best Practice", + "startLine": 711, + "startColumn": 7, + "endLine": 711, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'10' is not of type 'number' - automatically coerced (string to number)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCWAlarmLowCPUWeb", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Threshold", + "category": "Best Practice", + "startLine": 713, + "startColumn": 7, + "endLine": 713, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'60' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rELBApp", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.AccessLoggingPolicy.EmitInterval", + "category": "Best Practice", + "startLine": 729, + "startColumn": 9, + "endLine": 729, + "endColumn": 21, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rELBApp", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.AccessLoggingPolicy.Enabled", + "category": "Best Practice", + "startLine": 730, + "startColumn": 9, + "endLine": 730, + "endColumn": 16, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'60' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rELBWeb", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.AccessLoggingPolicy.EmitInterval", + "category": "Best Practice", + "startLine": 765, + "startColumn": 9, + "endLine": 765, + "endColumn": 21, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rELBWeb", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.AccessLoggingPolicy.Enabled", + "category": "Best Practice", + "startLine": 766, + "startColumn": 9, + "endLine": 766, + "endColumn": 16, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rRDSInstanceMySQL", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.MultiAZ", + "category": "Best Practice", + "startLine": 1020, + "startColumn": 7, + "endLine": 1020, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rRDSInstanceMySQL", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 1021, + "startColumn": 7, + "endLine": 1021, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupApp", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupEgress.0.FromPort", + "category": "Best Practice", + "startLine": 1070, + "startColumn": 9, + "endLine": 1070, + "endColumn": 17, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupApp", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupEgress.0.ToPort", + "category": "Best Practice", + "startLine": 1072, + "startColumn": 9, + "endLine": 1072, + "endColumn": 15, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupApp", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupEgress.1.FromPort", + "category": "Best Practice", + "startLine": 1074, + "startColumn": 9, + "endLine": 1074, + "endColumn": 17, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupApp", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupEgress.1.ToPort", + "category": "Best Practice", + "startLine": 1076, + "startColumn": 9, + "endLine": 1076, + "endColumn": 15, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupApp", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0.FromPort", + "category": "Best Practice", + "startLine": 1080, + "startColumn": 9, + "endLine": 1080, + "endColumn": 17, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupApp", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0.ToPort", + "category": "Best Practice", + "startLine": 1082, + "startColumn": 9, + "endLine": 1082, + "endColumn": 15, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupAppInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0.FromPort", + "category": "Best Practice", + "startLine": 1098, + "startColumn": 9, + "endLine": 1098, + "endColumn": 17, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupAppInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0.ToPort", + "category": "Best Practice", + "startLine": 1100, + "startColumn": 9, + "endLine": 1100, + "endColumn": 15, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupAppInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.1.FromPort", + "category": "Best Practice", + "startLine": 1103, + "startColumn": 9, + "endLine": 1103, + "endColumn": 17, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupAppInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.1.ToPort", + "category": "Best Practice", + "startLine": 1105, + "startColumn": 9, + "endLine": 1105, + "endColumn": 15, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupAppInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.2.FromPort", + "category": "Best Practice", + "startLine": 1108, + "startColumn": 9, + "endLine": 1108, + "endColumn": 17, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupAppInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.2.ToPort", + "category": "Best Practice", + "startLine": 1110, + "startColumn": 9, + "endLine": 1110, + "endColumn": 15, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'3306' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupRDS", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0.FromPort", + "category": "Best Practice", + "startLine": 1124, + "startColumn": 9, + "endLine": 1124, + "endColumn": 17, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'3306' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupRDS", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0.ToPort", + "category": "Best Practice", + "startLine": 1128, + "startColumn": 9, + "endLine": 1128, + "endColumn": 15, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupWeb", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0.FromPort", + "category": "Best Practice", + "startLine": 1143, + "startColumn": 9, + "endLine": 1143, + "endColumn": 17, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupWeb", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0.ToPort", + "category": "Best Practice", + "startLine": 1145, + "startColumn": 9, + "endLine": 1145, + "endColumn": 15, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupWebInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0.FromPort", + "category": "Best Practice", + "startLine": 1155, + "startColumn": 9, + "endLine": 1155, + "endColumn": 17, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'443' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupWebInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0.ToPort", + "category": "Best Practice", + "startLine": 1157, + "startColumn": 9, + "endLine": 1157, + "endColumn": 15, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupWebInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.1.FromPort", + "category": "Best Practice", + "startLine": 1160, + "startColumn": 9, + "endLine": 1160, + "endColumn": 17, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'80' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupWebInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.1.ToPort", + "category": "Best Practice", + "startLine": 1162, + "startColumn": 9, + "endLine": 1162, + "endColumn": 15, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupWebInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.2.FromPort", + "category": "Best Practice", + "startLine": 1165, + "startColumn": 9, + "endLine": 1165, + "endColumn": 17, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'22' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupWebInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.2.ToPort", + "category": "Best Practice", + "startLine": 1167, + "startColumn": 9, + "endLine": 1167, + "endColumn": 15, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'2555' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rWebContentBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.LifecycleConfiguration.Rules.0.ExpirationInDays", + "category": "Best Practice", + "startLine": 1183, + "startColumn": 11, + "endLine": 1183, + "endColumn": 27, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'90' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rWebContentBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.LifecycleConfiguration.Rules.0.Transition.TransitionInDays", + "category": "Best Practice", + "startLine": 1192, + "startColumn": 13, + "endLine": 1192, + "endColumn": 29, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "LandingPageURL", + "entityType": "Output" + }, + "propertyPath": "Outputs/LandingPageURL/Value.Fn::Join", + "category": "Intrinsic Function", + "startLine": 92, + "startColumn": 3, + "endLine": 92, + "endColumn": 17, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WebsiteURL", + "entityType": "Output" + }, + "propertyPath": "Outputs/WebsiteURL/Value.Fn::Join", + "category": "Intrinsic Function", + "startLine": 105, + "startColumn": 3, + "endLine": 105, + "endColumn": 13, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingConfigApp", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.copy_landing_content.sources./var/www/html.Fn::Join", + "category": "Intrinsic Function", + "startLine": 236, + "startColumn": 15, + "endLine": 236, + "endColumn": 23, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingConfigApp", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.installDeepSecurityAgent.commands.0-download-DSA.command.Fn::Join", + "category": "Intrinsic Function", + "startLine": 244, + "startColumn": 17, + "endLine": 244, + "endColumn": 25, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingConfigApp", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.installDeepSecurityAgent.commands.3-activate-DSA.command.Fn::Join", + "category": "Intrinsic Function", + "startLine": 255, + "startColumn": 17, + "endLine": 255, + "endColumn": 25, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingConfigApp", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.install_cfn.files./etc/cfn/cfn-hup.conf.content.Fn::Join", + "category": "Intrinsic Function", + "startLine": 264, + "startColumn": 17, + "endLine": 264, + "endColumn": 25, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingConfigApp", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.install_cfn.files./etc/cfn/hooks.d/cfn-auto-reloader.conf.content.Fn::Join", + "category": "Intrinsic Function", + "startLine": 284, + "startColumn": 17, + "endLine": 284, + "endColumn": 25, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingConfigApp", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.install_wordpress.files./tmp/create-wp-config.content.Fn::Join", + "category": "Intrinsic Function", + "startLine": 324, + "startColumn": 17, + "endLine": 324, + "endColumn": 25, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingConfigApp", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.UserData.Fn::Base64.Fn::Join", + "category": "Intrinsic Function", + "startLine": 388, + "startColumn": 11, + "endLine": 388, + "endColumn": 19, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingConfigWeb", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.installDeepSecurityAgent.commands.0-download-DSA.command.Fn::Join", + "category": "Intrinsic Function", + "startLine": 430, + "startColumn": 17, + "endLine": 430, + "endColumn": 25, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingConfigWeb", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.installDeepSecurityAgent.commands.3-activate-DSA.command.Fn::Join", + "category": "Intrinsic Function", + "startLine": 441, + "startColumn": 17, + "endLine": 441, + "endColumn": 25, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingConfigWeb", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.nginx.files./tmp/nginx/default.conf.content.Fn::Join", + "category": "Intrinsic Function", + "startLine": 450, + "startColumn": 17, + "endLine": 450, + "endColumn": 25, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAutoScalingConfigWeb", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.UserData.Fn::Base64.Fn::Join", + "category": "Intrinsic Function", + "startLine": 520, + "startColumn": 11, + "endLine": 520, + "endColumn": 19, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "rPostProcInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.UserData.Fn::Base64.Fn::Join.1.44.Fn::Join", + "category": "Intrinsic Function", + "startLine": 923, + "startColumn": 15, + "endLine": 923, + "endColumn": 23, + "ruleDescription": "Use Sub instead of Join", + "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": "rRDSInstanceMySQL", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 1002, + "startColumn": 3, + "endLine": 1002, + "endColumn": 20, + "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": "rRDSInstanceMySQL", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 1002, + "startColumn": 3, + "endLine": 1002, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rAutoScalingConfigApp", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 378, + "startColumn": 7, + "endLine": 378, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rAutoScalingConfigApp", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 380, + "startColumn": 7, + "endLine": 380, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'pAppInstanceType' (type String)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rAutoScalingConfigApp", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.KeyName", + "category": "Best Practice", + "startLine": 382, + "startColumn": 7, + "endLine": 382, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rAutoScalingConfigApp", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.SecurityGroups", + "category": "Best Practice", + "startLine": 384, + "startColumn": 7, + "endLine": 384, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rAutoScalingConfigApp", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 386, + "startColumn": 7, + "endLine": 386, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AssociatePublicIpAddress' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rAutoScalingConfigWeb", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.AssociatePublicIpAddress", + "category": "Best Practice", + "startLine": 509, + "startColumn": 7, + "endLine": 509, + "endColumn": 31, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rAutoScalingConfigWeb", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 510, + "startColumn": 7, + "endLine": 510, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rAutoScalingConfigWeb", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 512, + "startColumn": 7, + "endLine": 512, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'pWebInstanceType' (type String)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rAutoScalingConfigWeb", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.KeyName", + "category": "Best Practice", + "startLine": 514, + "startColumn": 7, + "endLine": 514, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rAutoScalingConfigWeb", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.SecurityGroups", + "category": "Best Practice", + "startLine": 516, + "startColumn": 7, + "endLine": 516, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rAutoScalingConfigWeb", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 518, + "startColumn": 7, + "endLine": 518, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rAutoScalingDownApp", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::ScalingPolicy" + }, + "propertyPath": "Properties.AutoScalingGroupName", + "category": "Best Practice", + "startLine": 563, + "startColumn": 7, + "endLine": 563, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rAutoScalingGroupApp'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rAutoScalingDownWeb", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::ScalingPolicy" + }, + "propertyPath": "Properties.AutoScalingGroupName", + "category": "Best Practice", + "startLine": 571, + "startColumn": 7, + "endLine": 571, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rAutoScalingGroupWeb'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rAutoScalingGroupApp", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Properties.LaunchConfigurationName", + "category": "Best Practice", + "startLine": 584, + "startColumn": 7, + "endLine": 584, + "endColumn": 30, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'rAutoScalingConfigApp'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rAutoScalingGroupApp", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Properties.VPCZoneIdentifier", + "category": "Best Practice", + "startLine": 598, + "startColumn": 7, + "endLine": 598, + "endColumn": 24, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rAutoScalingGroupWeb", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Properties.LaunchConfigurationName", + "category": "Best Practice", + "startLine": 610, + "startColumn": 7, + "endLine": 610, + "endColumn": 30, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'rAutoScalingConfigWeb'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rAutoScalingGroupWeb", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Properties.VPCZoneIdentifier", + "category": "Best Practice", + "startLine": 624, + "startColumn": 7, + "endLine": 624, + "endColumn": 24, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rAutoScalingUpApp", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::ScalingPolicy" + }, + "propertyPath": "Properties.AutoScalingGroupName", + "category": "Best Practice", + "startLine": 631, + "startColumn": 7, + "endLine": 631, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rAutoScalingGroupApp'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rAutoScalingUpWeb", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::ScalingPolicy" + }, + "propertyPath": "Properties.AutoScalingGroupName", + "category": "Best Practice", + "startLine": 639, + "startColumn": 7, + "endLine": 639, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rAutoScalingGroupWeb'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HealthCheck' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rELBApp", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.HealthCheck", + "category": "Best Practice", + "startLine": 734, + "startColumn": 7, + "endLine": 734, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rELBApp", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.Scheme", + "category": "Best Practice", + "startLine": 745, + "startColumn": 7, + "endLine": 745, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Subnets' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rELBApp", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.Subnets", + "category": "Best Practice", + "startLine": 748, + "startColumn": 7, + "endLine": 748, + "endColumn": 14, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HealthCheck' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rELBWeb", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.HealthCheck", + "category": "Best Practice", + "startLine": 770, + "startColumn": 7, + "endLine": 770, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Subnets' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rELBWeb", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.Subnets", + "category": "Best Practice", + "startLine": 783, + "startColumn": 7, + "endLine": 783, + "endColumn": 14, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rPostProcInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 800, + "startColumn": 7, + "endLine": 800, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rPostProcInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 802, + "startColumn": 7, + "endLine": 802, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "parameter 'pAppInstanceType' (type String)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rPostProcInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.SecurityGroupIds", + "category": "Best Practice", + "startLine": 804, + "startColumn": 7, + "endLine": 804, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rPostProcInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 806, + "startColumn": 7, + "endLine": 806, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'pAppPrivateSubnetA' (type AWS::EC2::Subnet::Id)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rPostProcInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 811, + "startColumn": 7, + "endLine": 811, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Base64 with unresolvable argument)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rPostProcInstanceProfile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 955, + "startColumn": 7, + "endLine": 955, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rPostProcInstanceRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 970, + "startColumn": 7, + "endLine": 970, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DBName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRDSInstanceMySQL", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.DBName", + "category": "Best Practice", + "startLine": 1011, + "startColumn": 7, + "endLine": 1011, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'pDBName' (type String)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DBSubnetGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRDSInstanceMySQL", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.DBSubnetGroupName", + "category": "Best Practice", + "startLine": 1013, + "startColumn": 7, + "endLine": 1013, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rDBSubnetGroup'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRDSInstanceMySQL", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 1015, + "startColumn": 7, + "endLine": 1015, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRDSInstanceMySQL", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.MasterUsername", + "category": "Best Practice", + "startLine": 1018, + "startColumn": 7, + "endLine": 1018, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'pDBUser' (type String)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'MultiAZ' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRDSInstanceMySQL", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.MultiAZ", + "category": "Best Practice", + "startLine": 1020, + "startColumn": 7, + "endLine": 1020, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRDSInstanceMySQL", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 1021, + "startColumn": 7, + "endLine": 1021, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRDSInstanceMySQL", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.BackupRetentionPeriod", + "category": "Best Practice", + "startLine": 1022, + "startColumn": 7, + "endLine": 1022, + "endColumn": 28, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rS3AccessLogsPolicy", + "entityType": "Resource", + "resourceType": "AWS::S3::BucketPolicy" + }, + "propertyPath": "Properties.Bucket", + "category": "Best Practice", + "startLine": 1029, + "startColumn": 7, + "endLine": 1029, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rS3ELBAccessLogs'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupApp", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 1067, + "startColumn": 7, + "endLine": 1067, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupApp", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 1089, + "startColumn": 7, + "endLine": 1089, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'pProductionVPC' (type AWS::EC2::VPC::Id)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupAppInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 1094, + "startColumn": 7, + "endLine": 1094, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupAppInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 1117, + "startColumn": 7, + "endLine": 1117, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'pProductionVPC' (type AWS::EC2::VPC::Id)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupRDS", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 1122, + "startColumn": 7, + "endLine": 1122, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupRDS", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 1135, + "startColumn": 7, + "endLine": 1135, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'pProductionVPC' (type AWS::EC2::VPC::Id)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupWeb", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 1140, + "startColumn": 7, + "endLine": 1140, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupWeb", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 1146, + "startColumn": 7, + "endLine": 1146, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'pProductionVPC' (type AWS::EC2::VPC::Id)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupWebInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 1151, + "startColumn": 7, + "endLine": 1151, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupWebInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 1174, + "startColumn": 7, + "endLine": 1174, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'pProductionVPC' (type AWS::EC2::VPC::Id)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rWebContentS3Policy", + "entityType": "Resource", + "resourceType": "AWS::S3::BucketPolicy" + }, + "propertyPath": "Properties.Bucket", + "category": "Best Practice", + "startLine": 1200, + "startColumn": 7, + "endLine": 1200, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rWebContentBucket'" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rCWAlarmHighCPUApp' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rCWAlarmHighCPUApp", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 645, + "startColumn": 5, + "endLine": 645, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rCWAlarmHighCPUWeb' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rCWAlarmHighCPUWeb", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 663, + "startColumn": 5, + "endLine": 663, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rCWAlarmLowCPUApp' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rCWAlarmLowCPUApp", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 681, + "startColumn": 5, + "endLine": 681, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rCWAlarmLowCPUWeb' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rCWAlarmLowCPUWeb", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 699, + "startColumn": 5, + "endLine": 699, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rDBSubnetGroup' of type 'AWS::RDS::DBSubnetGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rDBSubnetGroup", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBSubnetGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 716, + "startColumn": 5, + "endLine": 716, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rPostProcInstanceRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rPostProcInstanceRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 960, + "startColumn": 5, + "endLine": 960, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rRDSInstanceMySQL' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rRDSInstanceMySQL", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1006, + "startColumn": 5, + "endLine": 1006, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rS3ELBAccessLogs' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rS3ELBAccessLogs", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1062, + "startColumn": 5, + "endLine": 1062, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rSecurityGroupWeb' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupWeb", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1139, + "startColumn": 5, + "endLine": 1139, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rWebContentBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rWebContentBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1179, + "startColumn": 5, + "endLine": 1179, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "quickstart/nist_config_rules.yaml": { + "filePath": "quickstart/nist_config_rules.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 12, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 5, + "informational": 15, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs' was deprecated on '2016-08-30'. Creation was disabled on '2016-09-30', and updates were disabled on '2016-10-31'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAMIComplianceFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 94, + "startColumn": 7, + "endLine": 94, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs", + "lifecycle": "end-of-life" + } + }, + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs' was deprecated on '2016-08-30'. Creation was disabled on '2016-09-30', and updates were disabled on '2016-10-31'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCloudTrailValidationFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 159, + "startColumn": 7, + "endLine": 159, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs", + "lifecycle": "end-of-life" + } + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rConfigRulesLambdaRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAMIComplianceFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 35, + "startColumn": 5, + "endLine": 35, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rConfigRulesLambdaRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCloudTrailValidationFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 98, + "startColumn": 5, + "endLine": 98, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W8003", + "severity": "WARN", + "message": "Fn::Equals in condition 'cApprovedAMIsRule' will always return True", + "source": "CFN_LINT", + "entity": { + "logicalId": "cApprovedAMIsRule", + "entityType": "Condition" + }, + "propertyPath": "Conditions/cApprovedAMIsRule", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 20, + "ruleDescription": "Fn::Equals will always return true or false", + "phase": "PARSE" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'30' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAMIComplianceFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Timeout", + "category": "Best Practice", + "startLine": 95, + "startColumn": 7, + "endLine": 95, + "endColumn": 14, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'30' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCloudTrailValidationFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Timeout", + "category": "Best Practice", + "startLine": 160, + "startColumn": 7, + "endLine": 160, + "endColumn": 14, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rConfigPermissionToCallLambdaAMICompliance", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 165, + "startColumn": 7, + "endLine": 165, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rConfigPermissionToCallLambdaAMICompliance", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 166, + "startColumn": 7, + "endLine": 166, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt rAMIComplianceFunction.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rConfigPermissionToCallLambdaAMICompliance", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 170, + "startColumn": 7, + "endLine": 170, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rConfigPermissionToCallLambdaCloudTrail", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 174, + "startColumn": 7, + "endLine": 174, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rConfigPermissionToCallLambdaCloudTrail", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 175, + "startColumn": 7, + "endLine": 175, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt rCloudTrailValidationFunction.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rConfigPermissionToCallLambdaCloudTrail", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 179, + "startColumn": 7, + "endLine": 179, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rConfigRuleForAMICompliance", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "Properties.ConfigRuleName", + "category": "Best Practice", + "startLine": 185, + "startColumn": 7, + "endLine": 185, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rConfigRuleForCloudTrail", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "Properties.ConfigRuleName", + "category": "Best Practice", + "startLine": 205, + "startColumn": 7, + "endLine": 205, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rConfigRuleForRequiredTags", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "Properties.ConfigRuleName", + "category": "Best Practice", + "startLine": 223, + "startColumn": 7, + "endLine": 223, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rConfigRuleForSSH", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "Properties.ConfigRuleName", + "category": "Best Practice", + "startLine": 238, + "startColumn": 7, + "endLine": 238, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rConfigRuleForUnrestrictedPorts", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "Properties.ConfigRuleName", + "category": "Best Practice", + "startLine": 251, + "startColumn": 7, + "endLine": 251, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rConfigRulesLambdaProfile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 277, + "startColumn": 7, + "endLine": 277, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rConfigRulesLambdaRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 292, + "startColumn": 7, + "endLine": 292, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rCloudTrailValidationFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rCloudTrailValidationFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 99, + "startColumn": 5, + "endLine": 99, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rConfigRulesLambdaRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rConfigRulesLambdaRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 282, + "startColumn": 5, + "endLine": 282, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "quickstart/nist_high_main.yaml": { + "filePath": "quickstart/nist_high_main.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 6, + "counts": { + "fatal": 0, + "errors": 5, + "warnings": 35, + "informational": 18, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3005", + "severity": "ERROR", + "message": "'ProductionVpcTemplate' will not exist when condition 'EulaAccepted' is False", + "source": "CFN_LINT", + "entity": { + "logicalId": "ApplicationTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Add a Condition to 'ApplicationTemplate' that implies 'EulaAccepted'", + "category": "Reference", + "startLine": 277, + "startColumn": 5, + "endLine": 277, + "endColumn": 14, + "ruleDescription": "Check DependsOn values for Resources", + "phase": "LINT" + }, + { + "ruleId": "E3005", + "severity": "ERROR", + "message": "'IamTemplate' will not exist when condition 'EulaAccepted' is False", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConfigRulesTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Add a Condition to 'ConfigRulesTemplate' that implies 'EulaAccepted'", + "category": "Reference", + "startLine": 388, + "startColumn": 5, + "endLine": 388, + "endColumn": 14, + "ruleDescription": "Check DependsOn values for Resources", + "phase": "LINT" + }, + { + "ruleId": "E3005", + "severity": "ERROR", + "message": "'LoggingTemplate' will not exist when condition 'EulaAccepted' is False", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConfigRulesTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Add a Condition to 'ConfigRulesTemplate' that implies 'EulaAccepted'", + "category": "Reference", + "startLine": 388, + "startColumn": 5, + "endLine": 388, + "endColumn": 14, + "ruleDescription": "Check DependsOn values for Resources", + "phase": "LINT" + }, + { + "ruleId": "E3005", + "severity": "ERROR", + "message": "'ProductionVpcTemplate' will not exist when condition 'EulaAccepted' is False", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConfigRulesTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Add a Condition to 'ConfigRulesTemplate' that implies 'EulaAccepted'", + "category": "Reference", + "startLine": 388, + "startColumn": 5, + "endLine": 388, + "endColumn": 14, + "ruleDescription": "Check DependsOn values for Resources", + "phase": "LINT" + }, + { + "ruleId": "E3005", + "severity": "ERROR", + "message": "'ProductionVpcTemplate' will not exist when condition 'EulaAccepted' is False", + "source": "CFN_LINT", + "entity": { + "logicalId": "ManagementVpcTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Add a Condition to 'ManagementVpcTemplate' that implies 'EulaAccepted'", + "category": "Reference", + "startLine": 445, + "startColumn": 5, + "endLine": 445, + "endColumn": 14, + "ruleDescription": "Check DependsOn values for Resources", + "phase": "LINT" + }, + { + "ruleId": "W1001", + "severity": "WARN", + "message": "Reference to 'ProductionVpcTemplate' which is conditional on 'EulaAccepted' - target may not exist", + "source": "CFN_LINT", + "entity": { + "logicalId": "ApplicationTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Parameters.pAppPrivateSubnetA", + "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", + "category": "Best Practice", + "startLine": 292, + "startColumn": 9, + "endLine": 292, + "endColumn": 27, + "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", + "phase": "LINT" + }, + { + "ruleId": "W1001", + "severity": "WARN", + "message": "Reference to 'ProductionVpcTemplate' which is conditional on 'EulaAccepted' - target may not exist", + "source": "CFN_LINT", + "entity": { + "logicalId": "ApplicationTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Parameters.pAppPrivateSubnetB", + "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", + "category": "Best Practice", + "startLine": 296, + "startColumn": 9, + "endLine": 296, + "endColumn": 27, + "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", + "phase": "LINT" + }, + { + "ruleId": "W1001", + "severity": "WARN", + "message": "Reference to 'ProductionVpcTemplate' which is conditional on 'EulaAccepted' - target may not exist", + "source": "CFN_LINT", + "entity": { + "logicalId": "ApplicationTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Parameters.pDBPrivateSubnetA", + "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", + "category": "Best Practice", + "startLine": 310, + "startColumn": 9, + "endLine": 310, + "endColumn": 26, + "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", + "phase": "LINT" + }, + { + "ruleId": "W1001", + "severity": "WARN", + "message": "Reference to 'ProductionVpcTemplate' which is conditional on 'EulaAccepted' - target may not exist", + "source": "CFN_LINT", + "entity": { + "logicalId": "ApplicationTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Parameters.pDBPrivateSubnetB", + "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", + "category": "Best Practice", + "startLine": 314, + "startColumn": 9, + "endLine": 314, + "endColumn": 26, + "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", + "phase": "LINT" + }, + { + "ruleId": "W1001", + "severity": "WARN", + "message": "Reference to 'ProductionVpcTemplate' which is conditional on 'EulaAccepted' - target may not exist", + "source": "CFN_LINT", + "entity": { + "logicalId": "ApplicationTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Parameters.pDMZSubnetA", + "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", + "category": "Best Practice", + "startLine": 319, + "startColumn": 9, + "endLine": 319, + "endColumn": 20, + "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", + "phase": "LINT" + }, + { + "ruleId": "W1001", + "severity": "WARN", + "message": "Reference to 'ProductionVpcTemplate' which is conditional on 'EulaAccepted' - target may not exist", + "source": "CFN_LINT", + "entity": { + "logicalId": "ApplicationTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Parameters.pDMZSubnetB", + "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", + "category": "Best Practice", + "startLine": 323, + "startColumn": 9, + "endLine": 323, + "endColumn": 20, + "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", + "phase": "LINT" + }, + { + "ruleId": "W1001", + "severity": "WARN", + "message": "Reference to 'ProductionVpcTemplate' which is conditional on 'EulaAccepted' - target may not exist", + "source": "CFN_LINT", + "entity": { + "logicalId": "ApplicationTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Parameters.pProductionVPC", + "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", + "category": "Best Practice", + "startLine": 344, + "startColumn": 9, + "endLine": 344, + "endColumn": 23, + "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", + "phase": "LINT" + }, + { + "ruleId": "W1001", + "severity": "WARN", + "message": "Reference to 'LoggingTemplate' which is conditional on 'EulaAccepted' - target may not exist", + "source": "CFN_LINT", + "entity": { + "logicalId": "ApplicationTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Parameters.pSecurityAlarmTopic", + "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", + "category": "Best Practice", + "startLine": 352, + "startColumn": 9, + "endLine": 352, + "endColumn": 28, + "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", + "phase": "LINT" + }, + { + "ruleId": "W1001", + "severity": "WARN", + "message": "Reference to 'ProductionVpcTemplate' which is conditional on 'EulaAccepted' - target may not exist", + "source": "CFN_LINT", + "entity": { + "logicalId": "ManagementVpcTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Parameters.pProductionVPC", + "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", + "category": "Best Practice", + "startLine": 489, + "startColumn": 9, + "endLine": 489, + "endColumn": 23, + "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", + "phase": "LINT" + }, + { + "ruleId": "W1001", + "severity": "WARN", + "message": "Reference to 'ProductionVpcTemplate' which is conditional on 'EulaAccepted' - target may not exist", + "source": "CFN_LINT", + "entity": { + "logicalId": "ManagementVpcTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Parameters.pRouteTableProdPrivate", + "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", + "category": "Best Practice", + "startLine": 497, + "startColumn": 9, + "endLine": 497, + "endColumn": 31, + "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", + "phase": "LINT" + }, + { + "ruleId": "W1001", + "severity": "WARN", + "message": "Reference to 'ProductionVpcTemplate' which is conditional on 'EulaAccepted' - target may not exist", + "source": "CFN_LINT", + "entity": { + "logicalId": "ManagementVpcTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Parameters.pRouteTableProdPublic", + "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", + "category": "Best Practice", + "startLine": 501, + "startColumn": 9, + "endLine": 501, + "endColumn": 30, + "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", + "phase": "LINT" + }, + { + "ruleId": "W2502", + "severity": "WARN", + "message": "Resource 'ApplicationTemplate' has DependsOn 'ProductionVpcTemplate' which is conditional (condition 'EulaAccepted'), but 'ApplicationTemplate' does not have a matching condition", + "source": "ENGINE", + "entity": { + "logicalId": "ApplicationTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Add Condition: EulaAccepted to resource 'ApplicationTemplate'", + "category": "Best Practice", + "startLine": 277, + "startColumn": 5, + "endLine": 277, + "endColumn": 14, + "ruleDescription": "DependsOn conditional resource without matching condition", + "phase": "LINT" + }, + { + "ruleId": "W2502", + "severity": "WARN", + "message": "Resource 'ConfigRulesTemplate' has DependsOn 'IamTemplate' which is conditional (condition 'EulaAccepted'), but 'ConfigRulesTemplate' does not have a matching condition", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigRulesTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Add Condition: EulaAccepted to resource 'ConfigRulesTemplate'", + "category": "Best Practice", + "startLine": 388, + "startColumn": 5, + "endLine": 388, + "endColumn": 14, + "ruleDescription": "DependsOn conditional resource without matching condition", + "phase": "LINT", + "context": { + "extra": { + "source_condition": "LoadConfigRulesTemplate" + } + } + }, + { + "ruleId": "W2502", + "severity": "WARN", + "message": "Resource 'ConfigRulesTemplate' has DependsOn 'LoggingTemplate' which is conditional (condition 'EulaAccepted'), but 'ConfigRulesTemplate' does not have a matching condition", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigRulesTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Add Condition: EulaAccepted to resource 'ConfigRulesTemplate'", + "category": "Best Practice", + "startLine": 388, + "startColumn": 5, + "endLine": 388, + "endColumn": 14, + "ruleDescription": "DependsOn conditional resource without matching condition", + "phase": "LINT", + "context": { + "extra": { + "source_condition": "LoadConfigRulesTemplate" + } + } + }, + { + "ruleId": "W2502", + "severity": "WARN", + "message": "Resource 'ConfigRulesTemplate' has DependsOn 'ProductionVpcTemplate' which is conditional (condition 'EulaAccepted'), but 'ConfigRulesTemplate' does not have a matching condition", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigRulesTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Add Condition: EulaAccepted to resource 'ConfigRulesTemplate'", + "category": "Best Practice", + "startLine": 388, + "startColumn": 5, + "endLine": 388, + "endColumn": 14, + "ruleDescription": "DependsOn conditional resource without matching condition", + "phase": "LINT", + "context": { + "extra": { + "source_condition": "LoadConfigRulesTemplate" + } + } + }, + { + "ruleId": "W2502", + "severity": "WARN", + "message": "Resource 'ManagementVpcTemplate' has DependsOn 'ProductionVpcTemplate' which is conditional (condition 'EulaAccepted'), but 'ManagementVpcTemplate' does not have a matching condition", + "source": "ENGINE", + "entity": { + "logicalId": "ManagementVpcTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Add Condition: EulaAccepted to resource 'ManagementVpcTemplate'", + "category": "Best Practice", + "startLine": 445, + "startColumn": 5, + "endLine": 445, + "endColumn": 14, + "ruleDescription": "DependsOn conditional resource without matching condition", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'ManagementVpcTemplate' dependency already enforced by a 'GetAtt' at 'Properties.Parameters.pDeepSecurityAgentDownload'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ApplicationTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 277, + "startColumn": 5, + "endLine": 277, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'ManagementVpcTemplate' dependency already enforced by a 'GetAtt' at 'Properties.Parameters.pDeepSecurityHeartbeat'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ApplicationTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 277, + "startColumn": 5, + "endLine": 277, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'ProductionVpcTemplate' dependency already enforced by a 'GetAtt' at 'Properties.Parameters.pAppPrivateSubnetA'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ApplicationTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 277, + "startColumn": 5, + "endLine": 277, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'ProductionVpcTemplate' dependency already enforced by a 'GetAtt' at 'Properties.Parameters.pAppPrivateSubnetB'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ApplicationTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 277, + "startColumn": 5, + "endLine": 277, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'ProductionVpcTemplate' dependency already enforced by a 'GetAtt' at 'Properties.Parameters.pDBPrivateSubnetA'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ApplicationTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 277, + "startColumn": 5, + "endLine": 277, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'ProductionVpcTemplate' dependency already enforced by a 'GetAtt' at 'Properties.Parameters.pDBPrivateSubnetB'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ApplicationTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 277, + "startColumn": 5, + "endLine": 277, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'ProductionVpcTemplate' dependency already enforced by a 'GetAtt' at 'Properties.Parameters.pDMZSubnetA'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ApplicationTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 277, + "startColumn": 5, + "endLine": 277, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'ProductionVpcTemplate' dependency already enforced by a 'GetAtt' at 'Properties.Parameters.pDMZSubnetB'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ApplicationTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 277, + "startColumn": 5, + "endLine": 277, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'ProductionVpcTemplate' dependency already enforced by a 'GetAtt' at 'Properties.Parameters.pProductionVPC'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ApplicationTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 277, + "startColumn": 5, + "endLine": 277, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'ProductionVpcTemplate' dependency already enforced by a 'GetAtt' at 'Properties.Parameters.pProductionVPC'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ManagementVpcTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 445, + "startColumn": 5, + "endLine": 445, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'ProductionVpcTemplate' dependency already enforced by a 'GetAtt' at 'Properties.Parameters.pRouteTableProdPrivate'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ManagementVpcTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 445, + "startColumn": 5, + "endLine": 445, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'ProductionVpcTemplate' dependency already enforced by a 'GetAtt' at 'Properties.Parameters.pRouteTableProdPublic'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ManagementVpcTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 445, + "startColumn": 5, + "endLine": 445, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'LoadConfigRulesTemplateAuto' is not used by any resource or Fn::If", + "source": "CFN_LINT", + "entity": { + "logicalId": "LoadConfigRulesTemplateAuto", + "entityType": "Condition" + }, + "propertyPath": "Conditions/LoadConfigRulesTemplateAuto", + "category": "Best Practice", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 30, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'30' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "ApplicationTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.TimeoutInMinutes", + "category": "Best Practice", + "startLine": 384, + "startColumn": 7, + "endLine": 384, + "endColumn": 23, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'20' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConfigRulesTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.TimeoutInMinutes", + "category": "Best Practice", + "startLine": 408, + "startColumn": 7, + "endLine": 408, + "endColumn": 23, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'20' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "IamTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.TimeoutInMinutes", + "category": "Best Practice", + "startLine": 421, + "startColumn": 7, + "endLine": 421, + "endColumn": 23, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'20' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "LoggingTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.TimeoutInMinutes", + "category": "Best Practice", + "startLine": 442, + "startColumn": 7, + "endLine": 442, + "endColumn": 23, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'20' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "ManagementVpcTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.TimeoutInMinutes", + "category": "Best Practice", + "startLine": 523, + "startColumn": 7, + "endLine": 523, + "endColumn": 23, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'20' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "ProductionVpcTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.TimeoutInMinutes", + "category": "Best Practice", + "startLine": 577, + "startColumn": 7, + "endLine": 577, + "endColumn": 23, + "ruleDescription": "Property type coercion warning", + "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": "ApplicationTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "category": "Best Practice", + "startLine": 276, + "startColumn": 3, + "endLine": 276, + "endColumn": 22, + "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": "ApplicationTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "category": "Best Practice", + "startLine": 276, + "startColumn": 3, + "endLine": 276, + "endColumn": 22, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "ConfigRulesTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "category": "Best Practice", + "startLine": 386, + "startColumn": 3, + "endLine": 386, + "endColumn": 22, + "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": "ConfigRulesTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "category": "Best Practice", + "startLine": 386, + "startColumn": 3, + "endLine": 386, + "endColumn": 22, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "IamTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "category": "Best Practice", + "startLine": 410, + "startColumn": 3, + "endLine": 410, + "endColumn": 14, + "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": "IamTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "category": "Best Practice", + "startLine": 410, + "startColumn": 3, + "endLine": 410, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "LoggingTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "category": "Best Practice", + "startLine": 423, + "startColumn": 3, + "endLine": 423, + "endColumn": 18, + "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": "LoggingTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "category": "Best Practice", + "startLine": 423, + "startColumn": 3, + "endLine": 423, + "endColumn": 18, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "ManagementVpcTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "category": "Best Practice", + "startLine": 444, + "startColumn": 3, + "endLine": 444, + "endColumn": 24, + "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": "ManagementVpcTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "category": "Best Practice", + "startLine": 444, + "startColumn": 3, + "endLine": 444, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "ProductionVpcTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "category": "Best Practice", + "startLine": 525, + "startColumn": 3, + "endLine": 525, + "endColumn": 24, + "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": "ProductionVpcTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "category": "Best Practice", + "startLine": 525, + "startColumn": 3, + "endLine": 525, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ApplicationTemplate' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ApplicationTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 280, + "startColumn": 5, + "endLine": 280, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ConfigRulesTemplate' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigRulesTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 393, + "startColumn": 5, + "endLine": 393, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'IamTemplate' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "IamTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 412, + "startColumn": 5, + "endLine": 412, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LoggingTemplate' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "LoggingTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 425, + "startColumn": 5, + "endLine": 425, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ManagementVpcTemplate' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ManagementVpcTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 446, + "startColumn": 5, + "endLine": 446, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ProductionVpcTemplate' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ProductionVpcTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 527, + "startColumn": 5, + "endLine": 527, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "quickstart/nist_iam.yaml": { + "filePath": "quickstart/nist_iam.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 18, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 5, + "informational": 8, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2512", + "severity": "WARN", + "message": "IAM policy uses NotAction which grants all actions except those listed - consider using Action instead", + "source": "ENGINE", + "entity": { + "logicalId": "rSysAdminPolicy", + "entityType": "Resource", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "category": "Security", + "startLine": 275, + "startColumn": 3, + "endLine": 275, + "endColumn": 18, + "ruleDescription": "IAM policy with NotAction", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rIAMAdminRole' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rIAMAdminProfile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 57, + "startColumn": 5, + "endLine": 57, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rInstanceOpsRole' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rInstanceOpsProfile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 137, + "startColumn": 5, + "endLine": 137, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rReadOnlyAdminRole' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rReadOnlyAdminProfile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 236, + "startColumn": 5, + "endLine": 236, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rSysAdminRole' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSysAdminProfile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 312, + "startColumn": 5, + "endLine": 312, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rIAMAdminProfile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 59, + "startColumn": 7, + "endLine": 59, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rInstanceOpsProfile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 139, + "startColumn": 7, + "endLine": 139, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rReadOnlyAdminProfile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 238, + "startColumn": 7, + "endLine": 238, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rSysAdminProfile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 314, + "startColumn": 7, + "endLine": 314, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rIAMAdminRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rIAMAdminRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 64, + "startColumn": 5, + "endLine": 64, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rInstanceOpsRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rInstanceOpsRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 144, + "startColumn": 5, + "endLine": 144, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rReadOnlyAdminRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rReadOnlyAdminRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 243, + "startColumn": 5, + "endLine": 243, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rSysAdminRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rSysAdminRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 319, + "startColumn": 5, + "endLine": 319, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "quickstart/nist_logging.yaml": { + "filePath": "quickstart/nist_logging.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 24, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 39, + "informational": 35, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3045", + "severity": "ERROR", + "message": "A bucket with 'AccessControl' set should also have at least one 'OwnershipControl' configured", + "source": "CFN_LINT", + "entity": { + "logicalId": "rArchiveLogsBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties", + "suggestedFix": "Add OwnershipControls to the bucket when using AccessControl", + "category": "Resource", + "startLine": 43, + "startColumn": 5, + "endLine": 43, + "endColumn": 15, + "ruleDescription": "Validate AccessControl are set with OwnershipControls", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rArchiveLogsBucket' dependency already enforced by a 'Ref' at 'Properties.Bucket'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rArchiveLogsBucketPolicy", + "entityType": "Resource", + "resourceType": "AWS::S3::BucketPolicy" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 61, + "startColumn": 5, + "endLine": 61, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rArchiveLogsBucket' dependency already enforced by a 'Ref' at 'Properties.PolicyDocument.Statement.0.Resource.0.Fn::Join.1.3'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rArchiveLogsBucketPolicy", + "entityType": "Resource", + "resourceType": "AWS::S3::BucketPolicy" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 61, + "startColumn": 5, + "endLine": 61, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rArchiveLogsBucket' dependency already enforced by a 'Ref' at 'Properties.PolicyDocument.Statement.1.Resource.0.Fn::Join.1.3'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rArchiveLogsBucketPolicy", + "entityType": "Resource", + "resourceType": "AWS::S3::BucketPolicy" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 61, + "startColumn": 5, + "endLine": 61, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rArchiveLogsBucket' dependency already enforced by a 'Ref' at 'Properties.PolicyDocument.Statement.2.Resource.0.Fn::Join.1.3'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rArchiveLogsBucketPolicy", + "entityType": "Resource", + "resourceType": "AWS::S3::BucketPolicy" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 61, + "startColumn": 5, + "endLine": 61, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rCloudTrailRole' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCloudTrailProfile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 180, + "startColumn": 5, + "endLine": 180, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rCloudTrailBucket' dependency already enforced by a 'Ref' at 'Properties.Bucket'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCloudTrailS3Policy", + "entityType": "Resource", + "resourceType": "AWS::S3::BucketPolicy" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 232, + "startColumn": 5, + "endLine": 232, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rCloudTrailBucket' dependency already enforced by a 'Ref' at 'Properties.PolicyDocument.Statement.0.Resource.0.Fn::Join.1.3'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCloudTrailS3Policy", + "entityType": "Resource", + "resourceType": "AWS::S3::BucketPolicy" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 232, + "startColumn": 5, + "endLine": 232, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rCloudTrailBucket' dependency already enforced by a 'Ref' at 'Properties.PolicyDocument.Statement.1.Resource.0.Fn::Join.1.3'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCloudTrailS3Policy", + "entityType": "Resource", + "resourceType": "AWS::S3::BucketPolicy" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 232, + "startColumn": 5, + "endLine": 232, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rCloudTrailBucket' dependency already enforced by a 'Ref' at 'Properties.PolicyDocument.Statement.2.Resource.0.Fn::Join.1.3'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCloudTrailS3Policy", + "entityType": "Resource", + "resourceType": "AWS::S3::BucketPolicy" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 232, + "startColumn": 5, + "endLine": 232, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rCloudTrailBucket' dependency already enforced by a 'Ref' at 'Properties.PolicyDocument.Statement.3.Resource.0.Fn::Join.1.3'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCloudTrailS3Policy", + "entityType": "Resource", + "resourceType": "AWS::S3::BucketPolicy" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 232, + "startColumn": 5, + "endLine": 232, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rCloudTrailBucket' dependency already enforced by a 'Ref' at 'Properties.PolicyDocument.Statement.4.Resource.0.Fn::Join.1.3'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCloudTrailS3Policy", + "entityType": "Resource", + "resourceType": "AWS::S3::BucketPolicy" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 232, + "startColumn": 5, + "endLine": 232, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "source": "CFN_LINT", + "entity": { + "logicalId": "rArchiveLogsBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "category": "Best Practice", + "startLine": 41, + "startColumn": 3, + "endLine": 41, + "endColumn": 21, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "phase": "LINT" + }, + { + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCloudTrailBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "category": "Best Practice", + "startLine": 119, + "startColumn": 3, + "endLine": 119, + "endColumn": 20, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "phase": "LINT" + }, + { + "ruleId": "W3045", + "severity": "WARN", + "message": "AccessControl property is deprecated. Use bucket policies instead", + "source": "CFN_LINT", + "entity": { + "logicalId": "rArchiveLogsBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.AccessControl", + "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", + "category": "Deprecation", + "startLine": 44, + "startColumn": 7, + "endLine": 44, + "endColumn": 20, + "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", + "phase": "LINT", + "context": { + "actualValue": "LogDeliveryWrite" + } + }, + { + "ruleId": "W3045", + "severity": "WARN", + "message": "AccessControl property is deprecated. Use bucket policies instead", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCloudTrailBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.AccessControl", + "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", + "category": "Deprecation", + "startLine": 122, + "startColumn": 7, + "endLine": 122, + "endColumn": 20, + "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", + "phase": "LINT", + "context": { + "actualValue": "Private" + } + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'2555' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rArchiveLogsBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.LifecycleConfiguration.Rules.0.ExpirationInDays", + "category": "Best Practice", + "startLine": 47, + "startColumn": 11, + "endLine": 47, + "endColumn": 27, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'90' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rArchiveLogsBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.LifecycleConfiguration.Rules.0.Transition.TransitionInDays", + "category": "Best Practice", + "startLine": 56, + "startColumn": 13, + "endLine": 56, + "endColumn": 29, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCloudTrailChangeAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.EvaluationPeriods", + "category": "Best Practice", + "startLine": 151, + "startColumn": 7, + "endLine": 151, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'300' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCloudTrailChangeAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Period", + "category": "Best Practice", + "startLine": 154, + "startColumn": 7, + "endLine": 154, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'1' is not of type 'number' - automatically coerced (string to number)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCloudTrailChangeAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Threshold", + "category": "Best Practice", + "startLine": 156, + "startColumn": 7, + "endLine": 156, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'90' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCloudTrailLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "propertyPath": "Properties.RetentionInDays", + "category": "Best Practice", + "startLine": 160, + "startColumn": 7, + "endLine": 160, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rIAMCreateAccessKeyAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.EvaluationPeriods", + "category": "Best Practice", + "startLine": 399, + "startColumn": 7, + "endLine": 399, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'300' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rIAMCreateAccessKeyAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Period", + "category": "Best Practice", + "startLine": 402, + "startColumn": 7, + "endLine": 402, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'1' is not of type 'number' - automatically coerced (string to number)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rIAMCreateAccessKeyAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Threshold", + "category": "Best Practice", + "startLine": 404, + "startColumn": 7, + "endLine": 404, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rIAMPolicyChangesAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.EvaluationPeriods", + "category": "Best Practice", + "startLine": 414, + "startColumn": 7, + "endLine": 414, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'300' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rIAMPolicyChangesAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Period", + "category": "Best Practice", + "startLine": 417, + "startColumn": 7, + "endLine": 417, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'1' is not of type 'number' - automatically coerced (string to number)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rIAMPolicyChangesAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Threshold", + "category": "Best Practice", + "startLine": 419, + "startColumn": 7, + "endLine": 419, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNetworkAclChangesAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.EvaluationPeriods", + "category": "Best Practice", + "startLine": 450, + "startColumn": 7, + "endLine": 450, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'300' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNetworkAclChangesAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Period", + "category": "Best Practice", + "startLine": 453, + "startColumn": 7, + "endLine": 453, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'1' is not of type 'number' - automatically coerced (string to number)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rNetworkAclChangesAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Threshold", + "category": "Best Practice", + "startLine": 455, + "startColumn": 7, + "endLine": 455, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rRootActivityAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.EvaluationPeriods", + "category": "Best Practice", + "startLine": 478, + "startColumn": 7, + "endLine": 478, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'300' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rRootActivityAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Period", + "category": "Best Practice", + "startLine": 481, + "startColumn": 7, + "endLine": 481, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'1' is not of type 'number' - automatically coerced (string to number)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rRootActivityAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Threshold", + "category": "Best Practice", + "startLine": 483, + "startColumn": 7, + "endLine": 483, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupChangesAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.EvaluationPeriods", + "category": "Best Practice", + "startLine": 501, + "startColumn": 7, + "endLine": 501, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'300' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupChangesAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Period", + "category": "Best Practice", + "startLine": 504, + "startColumn": 7, + "endLine": 504, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'1' is not of type 'number' - automatically coerced (string to number)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSecurityGroupChangesAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Threshold", + "category": "Best Practice", + "startLine": 506, + "startColumn": 7, + "endLine": 506, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'1' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rUnauthorizedAttemptAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.EvaluationPeriods", + "category": "Best Practice", + "startLine": 529, + "startColumn": 7, + "endLine": 529, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'300' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rUnauthorizedAttemptAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Period", + "category": "Best Practice", + "startLine": 532, + "startColumn": 7, + "endLine": 532, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'5' is not of type 'number' - automatically coerced (string to number)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rUnauthorizedAttemptAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Threshold", + "category": "Best Practice", + "startLine": 534, + "startColumn": 7, + "endLine": 534, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Property type coercion warning", + "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": "rCloudTrailLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "category": "Best Practice", + "startLine": 158, + "startColumn": 3, + "endLine": 158, + "endColumn": 22, + "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": "rCloudTrailLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "category": "Best Practice", + "startLine": 158, + "startColumn": 3, + "endLine": 158, + "endColumn": 22, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rArchiveLogsBucketPolicy", + "entityType": "Resource", + "resourceType": "AWS::S3::BucketPolicy" + }, + "propertyPath": "Properties.Bucket", + "category": "Best Practice", + "startLine": 63, + "startColumn": 7, + "endLine": 63, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rArchiveLogsBucket'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rCloudTrailChange", + "entityType": "Resource", + "resourceType": "AWS::Logs::MetricFilter" + }, + "propertyPath": "Properties.LogGroupName", + "category": "Best Practice", + "startLine": 135, + "startColumn": 7, + "endLine": 135, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rCloudTrailLogGroup'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rCloudTrailChangeAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.AlarmName", + "category": "Best Practice", + "startLine": 149, + "startColumn": 7, + "endLine": 149, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rCloudTrailProfile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 182, + "startColumn": 7, + "endLine": 182, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rCloudTrailRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 196, + "startColumn": 7, + "endLine": 196, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rCloudTrailS3Policy", + "entityType": "Resource", + "resourceType": "AWS::S3::BucketPolicy" + }, + "propertyPath": "Properties.Bucket", + "category": "Best Practice", + "startLine": 234, + "startColumn": 7, + "endLine": 234, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rCloudTrailBucket'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rCloudWatchLogsRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 334, + "startColumn": 7, + "endLine": 334, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rIAMCreateAccessKey", + "entityType": "Resource", + "resourceType": "AWS::Logs::MetricFilter" + }, + "propertyPath": "Properties.LogGroupName", + "category": "Best Practice", + "startLine": 383, + "startColumn": 7, + "endLine": 383, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rCloudTrailLogGroup'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rIAMCreateAccessKeyAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.AlarmName", + "category": "Best Practice", + "startLine": 397, + "startColumn": 7, + "endLine": 397, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rIAMPolicyChangesAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.AlarmName", + "category": "Best Practice", + "startLine": 412, + "startColumn": 7, + "endLine": 412, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rIAMPolicyChangesMetricFilter", + "entityType": "Resource", + "resourceType": "AWS::Logs::MetricFilter" + }, + "propertyPath": "Properties.LogGroupName", + "category": "Best Practice", + "startLine": 424, + "startColumn": 7, + "endLine": 424, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rCloudTrailLogGroup'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rIAMRootActivity", + "entityType": "Resource", + "resourceType": "AWS::Logs::MetricFilter" + }, + "propertyPath": "Properties.LogGroupName", + "category": "Best Practice", + "startLine": 435, + "startColumn": 7, + "endLine": 435, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rCloudTrailLogGroup'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNetworkAclChangesAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.AlarmName", + "category": "Best Practice", + "startLine": 448, + "startColumn": 7, + "endLine": 448, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rNetworkAclChangesMetricFilter", + "entityType": "Resource", + "resourceType": "AWS::Logs::MetricFilter" + }, + "propertyPath": "Properties.LogGroupName", + "category": "Best Practice", + "startLine": 463, + "startColumn": 7, + "endLine": 463, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rCloudTrailLogGroup'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rRootActivityAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.AlarmName", + "category": "Best Practice", + "startLine": 476, + "startColumn": 7, + "endLine": 476, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupChangesAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.AlarmName", + "category": "Best Practice", + "startLine": 499, + "startColumn": 7, + "endLine": 499, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupChangesMetricFilter", + "entityType": "Resource", + "resourceType": "AWS::Logs::MetricFilter" + }, + "propertyPath": "Properties.LogGroupName", + "category": "Best Practice", + "startLine": 514, + "startColumn": 7, + "endLine": 514, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rCloudTrailLogGroup'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rUnauthorizedAttemptAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.AlarmName", + "category": "Best Practice", + "startLine": 527, + "startColumn": 7, + "endLine": 527, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rUnauthorizedAttempts", + "entityType": "Resource", + "resourceType": "AWS::Logs::MetricFilter" + }, + "propertyPath": "Properties.LogGroupName", + "category": "Best Practice", + "startLine": 539, + "startColumn": 7, + "endLine": 539, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'rCloudTrailLogGroup'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rArchiveLogsBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rArchiveLogsBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 43, + "startColumn": 5, + "endLine": 43, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rCloudTrailBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rCloudTrailBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 121, + "startColumn": 5, + "endLine": 121, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rCloudTrailChangeAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rCloudTrailChangeAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 144, + "startColumn": 5, + "endLine": 144, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rCloudTrailLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rCloudTrailLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 159, + "startColumn": 5, + "endLine": 159, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rCloudTrailLoggingLocal' of type 'AWS::CloudTrail::Trail' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rCloudTrailLoggingLocal", + "entityType": "Resource", + "resourceType": "AWS::CloudTrail::Trail" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 164, + "startColumn": 5, + "endLine": 164, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rCloudTrailRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rCloudTrailRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 187, + "startColumn": 5, + "endLine": 187, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rCloudWatchLogsRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rCloudWatchLogsRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 325, + "startColumn": 5, + "endLine": 325, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rIAMCreateAccessKeyAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rIAMCreateAccessKeyAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 392, + "startColumn": 5, + "endLine": 392, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rIAMPolicyChangesAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rIAMPolicyChangesAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 408, + "startColumn": 5, + "endLine": 408, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rNetworkAclChangesAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rNetworkAclChangesAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 443, + "startColumn": 5, + "endLine": 443, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rRootActivityAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rRootActivityAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 472, + "startColumn": 5, + "endLine": 472, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rSecurityAlarmTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityAlarmTopic", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 486, + "startColumn": 5, + "endLine": 486, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rSecurityGroupChangesAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rSecurityGroupChangesAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 494, + "startColumn": 5, + "endLine": 494, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rUnauthorizedAttemptAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rUnauthorizedAttemptAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 523, + "startColumn": 5, + "endLine": 523, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, "quickstart/nist_vpc_management.yaml": { "filePath": "quickstart/nist_vpc_management.yaml", "status": "OK", @@ -23107,260 +30286,6 @@ } ] }, - "security/conditional_scenario_correctness.yaml": { - "filePath": "security/conditional_scenario_correctness.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 1, - "errors": 1, - "warnings": 3, - "informational": 6, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F3037", - "severity": "FATAL", - "message": "Array items are not unique", - "source": "SCHEMA", - "entity": { - "logicalId": "NestedUniqueFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "category": "Schema", - "startLine": 128, - "startColumn": 7, - "endLine": 128, - "endColumn": 11, - "conditionScenario": { - "Enabled02": false - }, - "ruleDescription": "Array items not unique", - "phase": "SCHEMA", - "context": { - "actualValue": [ - { - "Key": "Stage", - "Value": "prod" - }, - { - "Key": "Stage", - "Value": "dev" - } - ] - } - }, - { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'not-an-address' is not a valid IPv4 address for record type 'A'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Record", - "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" - }, - "propertyPath": "Properties.ResourceRecords.0", - "category": "Resource", - "startLine": 159, - "startColumn": 81, - "endLine": 159, - "endColumn": 82, - "ruleDescription": "Validate Route53 RecordSets", - "phase": "LINT" - }, - { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'Enabled01' to False from current status True", - "source": "CFN_LINT", - "entity": { - "logicalId": "RepeatedConditionFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Architectures.1.Fn::If.1.Fn::If.2", - "category": "Best Practice", - "startLine": 120, - "startColumn": 62, - "endLine": 120, - "endColumn": 63, - "ruleDescription": "Check Fn::If has a path that cannot be reached", - "phase": "LINT" - }, - { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'Enabled04' to False from current status True", - "source": "CFN_LINT", - "entity": { - "logicalId": "TaggedTopic", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Fn::If.Fn::If.1.Tags.Fn::If.2", - "category": "Best Practice", - "startLine": 142, - "startColumn": 5, - "endLine": 142, - "endColumn": 11, - "ruleDescription": "Check Fn::If has a path that cannot be reached", - "phase": "LINT" - }, - { - "ruleId": "W2530", - "severity": "WARN", - "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", - "source": "CFN_LINT", - "entity": { - "logicalId": "SnapStartFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.SnapStart.ApplyOn", - "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", - "category": "Best Practice", - "startLine": 139, - "startColumn": 54, - "endLine": 139, - "endColumn": 61, - "ruleDescription": "Validate that SnapStart is properly configured", - "phase": "LINT" - }, - { - "ruleId": "I2530", - "severity": "INFO", - "message": "Runtime 'java21' should consider using SnapStart for improved performance", - "source": "CFN_LINT", - "entity": { - "logicalId": "SnapStartFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.SnapStart.ApplyOn", - "suggestedFix": "Add SnapStart with ApplyOn set to 'PublishedVersions'", - "category": "Best Practice", - "startLine": 139, - "startColumn": 7, - "endLine": 139, - "endColumn": 16, - "documentationUrl": "https://docs.aws.amazon.com/lambda/latest/dg/snapstart.html", - "ruleDescription": "Validate that SnapStart is configured for >= Java11 runtimes", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Record", - "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" - }, - "propertyPath": "Properties.HostedZoneName", - "category": "Best Practice", - "startLine": 154, - "startColumn": 7, - "endLine": 154, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SharedRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SharedRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 94, - "startColumn": 5, - "endLine": 94, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ComplementaryArchitectureFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ComplementaryArchitectureFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 103, - "startColumn": 5, - "endLine": 103, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'RepeatedConditionFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "RepeatedConditionFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 113, - "startColumn": 5, - "endLine": 113, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SnapStartFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SnapStartFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 134, - "startColumn": 5, - "endLine": 134, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, "security/cross_reference_fanout.yaml": { "filePath": "security/cross_reference_fanout.yaml", "status": "OK", @@ -55760,343 +62685,6 @@ } ] }, - "security/independent_conditions_list_items.yaml": { - "filePath": "security/independent_conditions_list_items.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Analyzer", - "entityType": "Resource", - "resourceType": "AWS::AccessAnalyzer::Analyzer" - }, - "propertyPath": "Properties.Type", - "category": "Best Practice", - "startLine": 83, - "startColumn": 7, - "endLine": 83, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-accessanalyzer.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - } - ] - }, - "security/independent_conditions_object_keys.yaml": { - "filePath": "security/independent_conditions_object_keys.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FunctionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FunctionRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 74, - "startColumn": 5, - "endLine": 74, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Function' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Function", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 83, - "startColumn": 5, - "endLine": 83, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "security/independent_conditions_properties.yaml": { - "filePath": "security/independent_conditions_properties.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 2, - "errors": 0, - "warnings": 2, - "informational": 3, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F3031", - "severity": "FATAL", - "message": "'' does not match pattern '^([a-zA-Z0-9_-]{1,64}|arn:[a-zA-Z0-9-]+:lambda:[a-zA-Z0-9-]+:\\d{12}:function:[a-zA-Z0-9_-]{1,64})$'", - "source": "SCHEMA", - "entity": { - "logicalId": "Function", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.FunctionName", - "category": "Schema", - "startLine": 100, - "startColumn": 7, - "endLine": 100, - "endColumn": 19, - "conditionScenario": { - "Enabled12": true - }, - "ruleDescription": "Value does not match pattern", - "phase": "SCHEMA", - "context": { - "actualValue": "", - "expectedConstraint": "^([a-zA-Z0-9_-]{1,64}|arn:[a-zA-Z0-9-]+:lambda:[a-zA-Z0-9-]+:\\d{12}:function:[a-zA-Z0-9_-]{1,64})$", - "resolutionSource": "Fn::If on condition 'Enabled12'" - } - }, - { - "ruleId": "F3033", - "severity": "FATAL", - "message": "length 0 is below minimum 1", - "source": "SCHEMA", - "entity": { - "logicalId": "Function", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.FunctionName", - "category": "Schema", - "startLine": 100, - "startColumn": 7, - "endLine": 100, - "endColumn": 19, - "conditionScenario": { - "Enabled12": true - }, - "ruleDescription": "String length out of bounds", - "phase": "SCHEMA", - "context": { - "actualValue": "", - "resolutionSource": "Fn::If on condition 'Enabled12'", - "extra": { - "actual_length": 0, - "min_length": 1 - } - } - }, - { - "ruleId": "W2530", - "severity": "WARN", - "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", - "source": "CFN_LINT", - "entity": { - "logicalId": "Function", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.SnapStart.ApplyOn", - "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", - "category": "Best Practice", - "startLine": 102, - "startColumn": 35, - "endLine": 102, - "endColumn": 42, - "ruleDescription": "Validate that SnapStart is properly configured", - "phase": "LINT" - }, - { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'KmsKeyArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", - "source": "ENGINE", - "entity": { - "logicalId": "Function", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.KmsKeyArn", - "category": "Best Practice", - "startLine": 92, - "startColumn": 7, - "endLine": 92, - "endColumn": 16, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Function", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 100, - "startColumn": 7, - "endLine": 100, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'Enabled12'" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FunctionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FunctionRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 74, - "startColumn": 5, - "endLine": 74, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Function' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Function", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 103, - "startColumn": 7, - "endLine": 103, - "endColumn": 11, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "security/independent_conditions_statements.yaml": { - "filePath": "security/independent_conditions_statements.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 1, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3510", - "severity": "ERROR", - "message": "[] is too short (minimum 1 item)", - "source": "CFN_LINT", - "entity": { - "logicalId": "Role", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Policies.0.PolicyDocument.Statement", - "category": "Resource", - "startLine": 85, - "startColumn": 13, - "endLine": 85, - "endColumn": 22, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Role' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Role", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 74, - "startColumn": 5, - "endLine": 74, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, "security/many_conditions.yaml": { "filePath": "security/many_conditions.yaml", "status": "OK", @@ -141261,69 +147849,5 @@ "phase": "LINT" } ] - }, - "security/yaml_alias_expanded_depth.yaml": { - "filePath": "security/yaml_alias_expanded_depth.yaml", - "status": "ERROR", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F1101", - "severity": "FATAL", - "message": "Template exceeds the maximum structural nesting depth of 512 at line 12", - "source": "SCHEMA", - "category": "Structure", - "startLine": 12, - "startColumn": 83, - "endLine": 12, - "endColumn": 83, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" - } - ] - }, - "security/yaml_alias_expansion.yaml": { - "filePath": "security/yaml_alias_expansion.yaml", - "status": "ERROR", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F1101", - "severity": "FATAL", - "message": "Template exceeds the maximum YAML alias expansion of 1048576 nodes at line 12", - "source": "SCHEMA", - "category": "Structure", - "startLine": 12, - "startColumn": 20, - "endLine": 12, - "endColumn": 20, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" - } - ] } } From 15f578c36b7bc2f0b30b2e839b76cc1c4498fbe2 Mon Sep 17 00:00:00 2001 From: Satyaki Ghosh Date: Tue, 13 Oct 2026 14:01:28 -0400 Subject: [PATCH 8/8] Update snapshots --- .../tests/kotlin/src/test/kotlin/SmokeTest.kt | 29 + .../expected/validation_reports1.json | 10155 +-- .../expected/validation_reports2.json | 64511 ++++++++-------- .../expected/validation_reports3.json | 24807 +++--- .../expected/validation_reports4.json | 5076 +- .../expected/validation_reports5.json | 25384 +++--- .../expected/validation_reports6.json | 22904 +++--- .../expected/validation_reports7.json | 27798 +++---- .../expected/validation_reports8.json | 7791 ++ 9 files changed, 95528 insertions(+), 92927 deletions(-) diff --git a/src/bindings-jvm/tests/kotlin/src/test/kotlin/SmokeTest.kt b/src/bindings-jvm/tests/kotlin/src/test/kotlin/SmokeTest.kt index 2089f346..00c31a3f 100644 --- a/src/bindings-jvm/tests/kotlin/src/test/kotlin/SmokeTest.kt +++ b/src/bindings-jvm/tests/kotlin/src/test/kotlin/SmokeTest.kt @@ -10,6 +10,7 @@ import software.amazon.cloudformation.validate.engine.* import software.amazon.cloudformation.validate.gson.buildBindingsGson import software.amazon.cloudformation.validate.rules.* import software.amazon.cloudformation.validate.schemavalidator.SchemaValidatorConfig +import software.amazon.cloudformation.validate.templatemodel.JsonValueEnum import java.io.File class SmokeTest { @@ -573,6 +574,20 @@ class SmokeTest { assertEquals(1L, counts["errors"]) } + @Test + fun explicitJsonNullContextSurvivesFfi() { + val report = CEL.validateTemplate( + templateFile("bad/resources/properties/list_duplicates.yaml"), + detailedConfig(), + ) + val diagnostic = report.diagnostics.first { it.entity?.logicalId == "IamGroupWithConditions" } + + assertTrue( + diagnostic.context?.actualValue is JsonValueEnum.Null, + "an explicit JSON null must remain distinct from an absent violation-context value", + ) + } + @TestFactory fun regoDetailedMatchesSnapshot(): List = snapshotDetailedTests("rego", REGO) @@ -698,10 +713,24 @@ class SmokeTest { report["metadata"] = metadata } + @Suppress("UNCHECKED_CAST") + private fun stripNullActualValuesOmittedByGson(report: MutableMap) { + val diagnostics = report["diagnostics"] as? List> ?: return + report["diagnostics"] = diagnostics.map { diagnostic -> + val normalized = LinkedHashMap(diagnostic) + val context = diagnostic["context"] as? Map + if (context?.containsKey("actualValue") == true && context["actualValue"] == null) { + normalized["context"] = LinkedHashMap(context).apply { remove("actualValue") } + } + normalized + } + } + @Suppress("UNCHECKED_CAST") private fun stripSnapshotExcludedFields(report: Map, filePath: String? = null): Map { val out = LinkedHashMap(report) excludeSnapshotRules(out) + stripNullActualValuesOmittedByGson(out) if (filePath != null) out["filePath"] = filePath out.remove("version") out.remove("performance") diff --git a/src/resources/expected/validation_reports1.json b/src/resources/expected/validation_reports1.json index cf5374d6..5b90a5a8 100644 --- a/src/resources/expected/validation_reports1.json +++ b/src/resources/expected/validation_reports1.json @@ -331,12 +331,12 @@ "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SnapStart", + "propertyPath": "Properties.SnapStart.ApplyOn", "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", - "startLine": 39, - "startColumn": 7, - "endLine": 39, + "startLine": 40, + "startColumn": 9, + "endLine": 40, "endColumn": 16, "ruleDescription": "Validate that SnapStart is properly configured", "phase": "LINT" @@ -351,12 +351,12 @@ "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SnapStart", + "propertyPath": "Properties.SnapStart.ApplyOn", "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", - "startLine": 50, - "startColumn": 7, - "endLine": 50, + "startLine": 51, + "startColumn": 9, + "endLine": 51, "endColumn": 16, "ruleDescription": "Validate that SnapStart is properly configured", "phase": "LINT" @@ -1544,6 +1544,208 @@ } ] }, + "bad/E3023_cname_conditional_record_counts.yaml": { + "filePath": "bad/E3023_cname_conditional_record_counts.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 4, + "warnings": 0, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3023", + "severity": "ERROR", + "message": "CNAME records must have at most 1 ResourceRecord", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConditionalList", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.ResourceRecords", + "category": "Resource", + "startLine": 19, + "startColumn": 11, + "endLine": 19, + "endColumn": 12, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" + }, + { + "ruleId": "E3023", + "severity": "ERROR", + "message": "CNAME records must have at most 1 ResourceRecord", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConditionalList", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.ResourceRecords", + "category": "Resource", + "startLine": 20, + "startColumn": 11, + "endLine": 20, + "endColumn": 12, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" + }, + { + "ruleId": "E3023", + "severity": "ERROR", + "message": "CNAME records must have at most 1 ResourceRecord", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConditionalProperties", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.ResourceRecords", + "category": "Resource", + "startLine": 29, + "startColumn": 9, + "endLine": 29, + "endColumn": 24, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" + }, + { + "ruleId": "E3023", + "severity": "ERROR", + "message": "CNAME records must have at most 1 ResourceRecord", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConditionalProperties", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.ResourceRecords", + "category": "Resource", + "startLine": 34, + "startColumn": 9, + "endLine": 34, + "endColumn": 24, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalList", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.HostedZoneName", + "category": "Best Practice", + "startLine": 13, + "startColumn": 7, + "endLine": 13, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SingleRecordBranches", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.HostedZoneName", + "category": "Best Practice", + "startLine": 38, + "startColumn": 7, + "endLine": 38, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + } + ] + }, + "bad/E3023_cname_projection_covering.yaml": { + "filePath": "bad/E3023_cname_projection_covering.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3023", + "severity": "ERROR", + "message": "CNAME record Name 'example.com.' must not match HostedZoneName 'example.com.' exactly", + "source": "CFN_LINT", + "entity": { + "logicalId": "Record", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.Name", + "category": "Resource", + "startLine": 76, + "startColumn": 50, + "endLine": 76, + "endColumn": 51, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Record", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.HostedZoneName", + "category": "Best Practice", + "startLine": 75, + "startColumn": 7, + "endLine": 75, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + } + ] + }, "bad/E3023_conditional_record_items.yaml": { "filePath": "bad/E3023_conditional_record_items.yaml", "status": "OK", @@ -1646,16 +1848,16 @@ } ] }, - "bad/E3031_cognito_user_pool_domain_pattern.yaml": { - "filePath": "bad/E3031_cognito_user_pool_domain_pattern.yaml", + "bad/E3023_record_value_projection_covering.yaml": { + "filePath": "bad/E3023_record_value_projection_covering.yaml", "status": "OK", "metadata": { - "resourcesScanned": 7, + "resourcesScanned": 2, "counts": { "fatal": 0, - "errors": 6, + "errors": 2, "warnings": 0, - "informational": 12, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -1664,299 +1866,494 @@ }, "diagnostics": [ { - "ruleId": "E3031", + "ruleId": "E3023", "severity": "ERROR", - "message": "'-myprefix' does not match pattern '^[a-z0-9](?:[a-z0-9\\-]{0,61}[a-z0-9])?$'", + "message": "CNAME records must have at most 1 ResourceRecord", "source": "CFN_LINT", "entity": { - "logicalId": "PrefixLeadingHyphen", + "logicalId": "CnameCountRecord", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.Domain", - "category": "Schema", - "startLine": 18, + "propertyPath": "Properties.ResourceRecords", + "category": "Resource", + "startLine": 69, "startColumn": 7, - "endLine": 18, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Check if property values adhere to a specific pattern", - "phase": "SCHEMA", - "context": { - "actualValue": "-myprefix" - } + "endLine": 69, + "endColumn": 22, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "E3031", + "ruleId": "E3023", "severity": "ERROR", - "message": "'myprefix-' does not match pattern '^[a-z0-9](?:[a-z0-9\\-]{0,61}[a-z0-9])?$'", + "message": "'not-an-ip' is not a valid IPv4 address for record type 'A'", "source": "CFN_LINT", "entity": { - "logicalId": "PrefixTrailingHyphen", + "logicalId": "AddressRecord", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.Domain", - "category": "Schema", - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Check if property values adhere to a specific pattern", - "phase": "SCHEMA", - "context": { - "actualValue": "myprefix-" - } + "propertyPath": "Properties.ResourceRecords.1", + "category": "Resource", + "startLine": 91, + "startColumn": 43, + "endLine": 91, + "endColumn": 44, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "E3031", - "severity": "ERROR", - "message": "'---' does not match pattern '^[a-z0-9](?:[a-z0-9\\-]{0,61}[a-z0-9])?$'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "PrefixOnlyHyphens", + "logicalId": "CnameCountRecord", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.Domain", - "category": "Schema", - "startLine": 28, + "propertyPath": "Properties.HostedZoneName", + "category": "Best Practice", + "startLine": 65, "startColumn": 7, - "endLine": 28, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Check if property values adhere to a specific pattern", + "endLine": 65, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "---" + "lifecycle": "create-only" } }, { - "ruleId": "E3031", - "severity": "ERROR", - "message": "'MyPrefix' does not match pattern '^[a-z0-9](?:[a-z0-9\\-]{0,61}[a-z0-9])?$'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "PrefixUppercase", + "logicalId": "AddressRecord", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.Domain", - "category": "Schema", - "startLine": 33, + "propertyPath": "Properties.HostedZoneName", + "category": "Best Practice", + "startLine": 85, "startColumn": 7, - "endLine": 33, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Check if property values adhere to a specific pattern", + "endLine": 85, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "MyPrefix" + "lifecycle": "create-only" } + } + ] + }, + "bad/E3023_recordsetgroup_projection_covering.yaml": { + "filePath": "bad/E3023_recordsetgroup_projection_covering.yaml", + "status": "ANALYSIS_INCOMPLETE", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 1, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG", + "budgetExhaustions": [ + { + "kind": "schemaScenarioAssignments", + "description": "Checking resource schemas required more conditional value assignments than the supported limit.", + "limit": 256, + "analysisIncomplete": true + } + ] + }, + "diagnostics": [ { - "ruleId": "E3031", + "ruleId": "E3023", "severity": "ERROR", - "message": "'nodots' does not match pattern '^[a-z0-9](?:[a-z0-9\\-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9\\-]*[a-z0-9])?)+$'", + "message": "CNAME records must have at most 1 ResourceRecord", "source": "CFN_LINT", "entity": { - "logicalId": "CustomDomainWithoutDots", + "logicalId": "CnameGroup", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.Domain", - "category": "Schema", - "startLine": 38, - "startColumn": 7, - "endLine": 38, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Check if property values adhere to a specific pattern", - "phase": "SCHEMA", - "context": { - "actualValue": "nodots" - } + "propertyPath": "Properties.RecordSets.0.ResourceRecords", + "category": "Resource", + "startLine": 42, + "startColumn": 11, + "endLine": 42, + "endColumn": 26, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "E3031", + "ruleId": "E3023", "severity": "ERROR", - "message": "'-auth.example.com' does not match pattern '^[a-z0-9](?:[a-z0-9\\-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9\\-]*[a-z0-9])?)+$'", + "message": "'not-an-ip' is not a valid IPv4 address for record type 'A'", "source": "CFN_LINT", "entity": { - "logicalId": "CustomDomainLeadingHyphen", + "logicalId": "AddressGroup", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.Domain", - "category": "Schema", - "startLine": 45, - "startColumn": 7, - "endLine": 45, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Check if property values adhere to a specific pattern", - "phase": "SCHEMA", + "propertyPath": "Properties.RecordSets.0.ResourceRecords.1", + "category": "Resource", + "startLine": 65, + "startColumn": 47, + "endLine": 65, + "endColumn": 48, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" + }, + { + "ruleId": "W9052", + "severity": "WARN", + "message": "Deterministic validation budgets were exhausted; analysis may be incomplete and some findings may be omitted", + "source": "ENGINE", + "category": "Structure", + "ruleDescription": "Deterministic validation budgets were exhausted; see report metadata for completeness impact", + "phase": "LINT", "context": { - "actualValue": "-auth.example.com" + "extra": { + "budgetExhaustions": [ + { + "kind": "schemaScenarioAssignments", + "description": "Checking resource schemas required more conditional value assignments than the supported limit.", + "limit": 256, + "analysisIncomplete": true + } + ] + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PrefixLeadingHyphen", + "logicalId": "CnameGroup", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.UserPoolId", + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 17, + "startLine": 37, "startColumn": 7, - "endLine": 17, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 37, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserPool'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Domain' is create-only; updating it will cause resource replacement", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PrefixLeadingHyphen", + "logicalId": "AddressGroup", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.Domain", + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 18, + "startLine": 58, "startColumn": 7, - "endLine": 18, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 58, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } + } + ] + }, + "bad/E3029_alias_projection_covering.yaml": { + "filePath": "bad/E3029_alias_projection_covering.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3029", + "severity": "ERROR", + "message": "TTL must not be set when AliasTarget is specified", + "source": "CFN_LINT", "entity": { - "logicalId": "PrefixTrailingHyphen", + "logicalId": "Record", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.UserPoolId", - "category": "Best Practice", - "startLine": 22, + "propertyPath": "Properties.TTL", + "category": "Resource", + "startLine": 30, "startColumn": 7, - "endLine": 22, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserPool'" - } + "endLine": 30, + "endColumn": 10, + "ruleDescription": "Validate Route53 record set aliases", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Domain' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3029", + "severity": "ERROR", + "message": "AliasTarget cannot be used with record type 'NS'", + "source": "CFN_LINT", "entity": { - "logicalId": "PrefixTrailingHyphen", + "logicalId": "Record", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.Domain", - "category": "Best Practice", - "startLine": 23, + "propertyPath": "Properties.AliasTarget", + "category": "Resource", + "startLine": 31, "startColumn": 7, - "endLine": 23, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 31, + "endColumn": 18, + "ruleDescription": "Validate Route53 record set aliases", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PrefixOnlyHyphens", + "logicalId": "Record", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.UserPoolId", + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", "startLine": 27, "startColumn": 7, "endLine": 27, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserPool'" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9002", "severity": "INFO", - "message": "Property 'Domain' is create-only; updating it will cause resource replacement", + "message": "'TTL' is ignored in this configuration (from extension)", "source": "ENGINE", "entity": { - "logicalId": "PrefixOnlyHyphens", + "logicalId": "Record", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.Domain", + "propertyPath": "Properties.TTL", "category": "Best Practice", - "startLine": 28, + "startLine": 30, "startColumn": 7, - "endLine": 28, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 30, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Property is ignored in this configuration (from extension)", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "resolutionSource": "parameter with AllowedValues" } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "PrefixUppercase", - "entityType": "Resource", + } + ] + }, + "bad/E3031_cognito_user_pool_domain_pattern.yaml": { + "filePath": "bad/E3031_cognito_user_pool_domain_pattern.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 7, + "counts": { + "fatal": 0, + "errors": 6, + "warnings": 0, + "informational": 12, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3031", + "severity": "ERROR", + "message": "'-myprefix' does not match pattern '^[a-z0-9](?:[a-z0-9\\-]{0,61}[a-z0-9])?$'", + "source": "CFN_LINT", + "entity": { + "logicalId": "PrefixLeadingHyphen", + "entityType": "Resource", + "resourceType": "AWS::Cognito::UserPoolDomain" + }, + "propertyPath": "Properties.Domain", + "category": "Schema", + "startLine": 18, + "startColumn": 7, + "endLine": 18, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Check if property values adhere to a specific pattern", + "phase": "SCHEMA", + "context": { + "actualValue": "-myprefix" + } + }, + { + "ruleId": "E3031", + "severity": "ERROR", + "message": "'myprefix-' does not match pattern '^[a-z0-9](?:[a-z0-9\\-]{0,61}[a-z0-9])?$'", + "source": "CFN_LINT", + "entity": { + "logicalId": "PrefixTrailingHyphen", + "entityType": "Resource", + "resourceType": "AWS::Cognito::UserPoolDomain" + }, + "propertyPath": "Properties.Domain", + "category": "Schema", + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Check if property values adhere to a specific pattern", + "phase": "SCHEMA", + "context": { + "actualValue": "myprefix-" + } + }, + { + "ruleId": "E3031", + "severity": "ERROR", + "message": "'---' does not match pattern '^[a-z0-9](?:[a-z0-9\\-]{0,61}[a-z0-9])?$'", + "source": "CFN_LINT", + "entity": { + "logicalId": "PrefixOnlyHyphens", + "entityType": "Resource", + "resourceType": "AWS::Cognito::UserPoolDomain" + }, + "propertyPath": "Properties.Domain", + "category": "Schema", + "startLine": 28, + "startColumn": 7, + "endLine": 28, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Check if property values adhere to a specific pattern", + "phase": "SCHEMA", + "context": { + "actualValue": "---" + } + }, + { + "ruleId": "E3031", + "severity": "ERROR", + "message": "'MyPrefix' does not match pattern '^[a-z0-9](?:[a-z0-9\\-]{0,61}[a-z0-9])?$'", + "source": "CFN_LINT", + "entity": { + "logicalId": "PrefixUppercase", + "entityType": "Resource", + "resourceType": "AWS::Cognito::UserPoolDomain" + }, + "propertyPath": "Properties.Domain", + "category": "Schema", + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Check if property values adhere to a specific pattern", + "phase": "SCHEMA", + "context": { + "actualValue": "MyPrefix" + } + }, + { + "ruleId": "E3031", + "severity": "ERROR", + "message": "'nodots' does not match pattern '^[a-z0-9](?:[a-z0-9\\-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9\\-]*[a-z0-9])?)+$'", + "source": "CFN_LINT", + "entity": { + "logicalId": "CustomDomainWithoutDots", + "entityType": "Resource", + "resourceType": "AWS::Cognito::UserPoolDomain" + }, + "propertyPath": "Properties.Domain", + "category": "Schema", + "startLine": 38, + "startColumn": 7, + "endLine": 38, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Check if property values adhere to a specific pattern", + "phase": "SCHEMA", + "context": { + "actualValue": "nodots" + } + }, + { + "ruleId": "E3031", + "severity": "ERROR", + "message": "'-auth.example.com' does not match pattern '^[a-z0-9](?:[a-z0-9\\-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9\\-]*[a-z0-9])?)+$'", + "source": "CFN_LINT", + "entity": { + "logicalId": "CustomDomainLeadingHyphen", + "entityType": "Resource", + "resourceType": "AWS::Cognito::UserPoolDomain" + }, + "propertyPath": "Properties.Domain", + "category": "Schema", + "startLine": 45, + "startColumn": 7, + "endLine": 45, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Check if property values adhere to a specific pattern", + "phase": "SCHEMA", + "context": { + "actualValue": "-auth.example.com" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PrefixLeadingHyphen", + "entityType": "Resource", "resourceType": "AWS::Cognito::UserPoolDomain" }, "propertyPath": "Properties.UserPoolId", "category": "Best Practice", - "startLine": 32, + "startLine": 17, "startColumn": 7, - "endLine": 32, + "endLine": 17, "endColumn": 17, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -1972,15 +2369,15 @@ "message": "Property 'Domain' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PrefixUppercase", + "logicalId": "PrefixLeadingHyphen", "entityType": "Resource", "resourceType": "AWS::Cognito::UserPoolDomain" }, "propertyPath": "Properties.Domain", "category": "Best Practice", - "startLine": 33, + "startLine": 18, "startColumn": 7, - "endLine": 33, + "endLine": 18, "endColumn": 13, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -1995,15 +2392,15 @@ "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CustomDomainWithoutDots", + "logicalId": "PrefixTrailingHyphen", "entityType": "Resource", "resourceType": "AWS::Cognito::UserPoolDomain" }, "propertyPath": "Properties.UserPoolId", "category": "Best Practice", - "startLine": 37, + "startLine": 22, "startColumn": 7, - "endLine": 37, + "endLine": 22, "endColumn": 17, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -2019,15 +2416,15 @@ "message": "Property 'Domain' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CustomDomainWithoutDots", + "logicalId": "PrefixTrailingHyphen", "entityType": "Resource", "resourceType": "AWS::Cognito::UserPoolDomain" }, "propertyPath": "Properties.Domain", "category": "Best Practice", - "startLine": 38, + "startLine": 23, "startColumn": 7, - "endLine": 38, + "endLine": 23, "endColumn": 13, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -2042,15 +2439,15 @@ "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CustomDomainLeadingHyphen", + "logicalId": "PrefixOnlyHyphens", "entityType": "Resource", "resourceType": "AWS::Cognito::UserPoolDomain" }, "propertyPath": "Properties.UserPoolId", "category": "Best Practice", - "startLine": 44, + "startLine": 27, "startColumn": 7, - "endLine": 44, + "endLine": 27, "endColumn": 17, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -2066,15 +2463,15 @@ "message": "Property 'Domain' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CustomDomainLeadingHyphen", + "logicalId": "PrefixOnlyHyphens", "entityType": "Resource", "resourceType": "AWS::Cognito::UserPoolDomain" }, "propertyPath": "Properties.Domain", "category": "Best Practice", - "startLine": 45, + "startLine": 28, "startColumn": 7, - "endLine": 45, + "endLine": 28, "endColumn": 13, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -2082,54 +2479,195 @@ "context": { "lifecycle": "create-only" } - } - ] - }, - "bad/E3032_E3002_E3689_conditional_constraints.yaml": { - "filePath": "bad/E3032_E3002_E3689_conditional_constraints.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 8, - "warnings": 1, - "informational": 26, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3002", - "severity": "ERROR", - "message": "'admin' must not be one of ['admin'] for a PostgreSQL-compatible engine, where it is a reserved word", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ClusterReservedMasterUsername", + "logicalId": "PrefixUppercase", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::Cognito::UserPoolDomain" }, - "propertyPath": "Properties.MasterUsername", - "category": "Schema", - "startLine": 53, + "propertyPath": "Properties.UserPoolId", + "category": "Best Practice", + "startLine": 32, "startColumn": 7, - "endLine": 53, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Resource properties are invalid", + "endLine": 32, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "MasterUsername" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserPool'" } }, { - "ruleId": "E3032", - "severity": "ERROR", - "message": "Array length 1 is below minimum 2 for a table with local secondary indexes", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Domain' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PrefixUppercase", + "entityType": "Resource", + "resourceType": "AWS::Cognito::UserPoolDomain" + }, + "propertyPath": "Properties.Domain", + "category": "Best Practice", + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CustomDomainWithoutDots", + "entityType": "Resource", + "resourceType": "AWS::Cognito::UserPoolDomain" + }, + "propertyPath": "Properties.UserPoolId", + "category": "Best Practice", + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserPool'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Domain' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CustomDomainWithoutDots", + "entityType": "Resource", + "resourceType": "AWS::Cognito::UserPoolDomain" + }, + "propertyPath": "Properties.Domain", + "category": "Best Practice", + "startLine": 38, + "startColumn": 7, + "endLine": 38, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CustomDomainLeadingHyphen", + "entityType": "Resource", + "resourceType": "AWS::Cognito::UserPoolDomain" + }, + "propertyPath": "Properties.UserPoolId", + "category": "Best Practice", + "startLine": 44, + "startColumn": 7, + "endLine": 44, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserPool'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Domain' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CustomDomainLeadingHyphen", + "entityType": "Resource", + "resourceType": "AWS::Cognito::UserPoolDomain" + }, + "propertyPath": "Properties.Domain", + "category": "Best Practice", + "startLine": 45, + "startColumn": 7, + "endLine": 45, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + } + ] + }, + "bad/E3032_E3002_E3689_conditional_constraints.yaml": { + "filePath": "bad/E3032_E3002_E3689_conditional_constraints.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 8, + "warnings": 1, + "informational": 26, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3002", + "severity": "ERROR", + "message": "'admin' must not be one of ['admin'] for a PostgreSQL-compatible engine, where it is a reserved word", + "source": "CFN_LINT", + "entity": { + "logicalId": "ClusterReservedMasterUsername", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBCluster" + }, + "propertyPath": "Properties.MasterUsername", + "category": "Schema", + "startLine": 53, + "startColumn": 7, + "endLine": 53, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Resource properties are invalid", + "phase": "SCHEMA", + "context": { + "property": "MasterUsername" + } + }, + { + "ruleId": "E3032", + "severity": "ERROR", + "message": "Array length 1 is below minimum 2 for a table with local secondary indexes", + "source": "CFN_LINT", "entity": { "logicalId": "TableWithLsiSingleKey", "entityType": "Resource", @@ -2820,16 +3358,16 @@ } ] }, - "bad/E3059_subnet_outside_every_vpc_cidr.yaml": { - "filePath": "bad/E3059_subnet_outside_every_vpc_cidr.yaml", + "bad/E3048_fargate_projection_covering.yaml": { + "filePath": "bad/E3048_fargate_projection_covering.yaml", "status": "OK", "metadata": { - "resourcesScanned": 6, + "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 3, + "errors": 1, "warnings": 0, - "informational": 15, + "informational": 7, "debug": 0 }, "suppressed": 0, @@ -2838,116 +3376,317 @@ }, "diagnostics": [ { - "ruleId": "E3059", - "severity": "ERROR", - "message": "Subnet CIDR '10.2.0.0/24' is not within any VPC CIDR ['10.0.0.0/16', '10.1.0.0/16']", - "source": "CFN_LINT", - "entity": { - "logicalId": "OutsideBothBlocks", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Resource", - "startLine": 25, - "startColumn": 7, - "endLine": 25, - "endColumn": 16, - "ruleDescription": "Validate subnet CIDRs are within the CIDRs of the VPC", - "phase": "LINT" - }, - { - "ruleId": "E3059", - "severity": "ERROR", - "message": "Subnet CIDR '172.16.0.0/24' is not within any VPC CIDR ['10.0.0.0/16', '10.1.0.0/16']", - "source": "CFN_LINT", - "entity": { - "logicalId": "OutsideOnlyInProd", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Resource", - "startLine": 30, - "startColumn": 7, - "endLine": 30, - "endColumn": 16, - "ruleDescription": "Validate subnet CIDRs are within the CIDRs of the VPC", - "phase": "LINT" - }, - { - "ruleId": "E3059", + "ruleId": "E3048", "severity": "ERROR", - "message": "Subnet CIDR '10.6.0.0/24' is not within VPC CIDR '10.5.0.0/16'", + "message": "Fargate requires NetworkMode to be specified as 'awsvpc'", "source": "CFN_LINT", "entity": { - "logicalId": "OutsidePlainVpc", + "logicalId": "Task", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties", + "suggestedFix": "Set NetworkMode to 'awsvpc'", "category": "Resource", - "startLine": 39, - "startColumn": 7, - "endLine": 39, - "endColumn": 16, - "ruleDescription": "Validate subnet CIDRs are within the CIDRs of the VPC", + "startLine": 69, + "startColumn": 5, + "endLine": 69, + "endColumn": 15, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Vpc", + "logicalId": "Task", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 15, + "startLine": 70, "startColumn": 7, - "endLine": 15, - "endColumn": 16, + "endLine": 70, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsFargate'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecondaryBlock", + "logicalId": "Task", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCCidrBlock" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 19, + "startLine": 71, "startColumn": 7, - "endLine": 19, - "endColumn": 12, + "endLine": 71, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" + "resolutionSource": "Fn::If on condition 'IsNotFargate'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecondaryBlock", + "logicalId": "Task", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCCidrBlock" + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Memory", + "category": "Best Practice", + "startLine": 72, + "startColumn": 7, + "endLine": 72, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Task", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.NetworkMode", + "category": "Best Practice", + "startLine": 73, + "startColumn": 7, + "endLine": 73, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'NetworkFirst'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Task", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 74, + "startColumn": 7, + "endLine": 74, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'PlacementConstraints' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Task", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.PlacementConstraints", + "category": "Best Practice", + "startLine": 78, + "startColumn": 7, + "endLine": 78, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsNotFargate'" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Task' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Task", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 69, + "startColumn": 5, + "endLine": 69, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/E3059_subnet_outside_every_vpc_cidr.yaml": { + "filePath": "bad/E3059_subnet_outside_every_vpc_cidr.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 6, + "counts": { + "fatal": 0, + "errors": 3, + "warnings": 0, + "informational": 15, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3059", + "severity": "ERROR", + "message": "Subnet CIDR '10.2.0.0/24' is not within any VPC CIDR ['10.0.0.0/16', '10.1.0.0/16']", + "source": "CFN_LINT", + "entity": { + "logicalId": "OutsideBothBlocks", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Resource", + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 16, + "ruleDescription": "Validate subnet CIDRs are within the CIDRs of the VPC", + "phase": "LINT" + }, + { + "ruleId": "E3059", + "severity": "ERROR", + "message": "Subnet CIDR '172.16.0.0/24' is not within any VPC CIDR ['10.0.0.0/16', '10.1.0.0/16']", + "source": "CFN_LINT", + "entity": { + "logicalId": "OutsideOnlyInProd", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Resource", + "startLine": 30, + "startColumn": 7, + "endLine": 30, + "endColumn": 16, + "ruleDescription": "Validate subnet CIDRs are within the CIDRs of the VPC", + "phase": "LINT" + }, + { + "ruleId": "E3059", + "severity": "ERROR", + "message": "Subnet CIDR '10.6.0.0/24' is not within VPC CIDR '10.5.0.0/16'", + "source": "CFN_LINT", + "entity": { + "logicalId": "OutsidePlainVpc", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Resource", + "startLine": 39, + "startColumn": 7, + "endLine": 39, + "endColumn": 16, + "ruleDescription": "Validate subnet CIDRs are within the CIDRs of the VPC", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Vpc", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 15, + "startColumn": 7, + "endLine": 15, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SecondaryBlock", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPCCidrBlock" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 19, + "startColumn": 7, + "endLine": 19, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SecondaryBlock", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPCCidrBlock" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", @@ -6222,16 +6961,16 @@ } ] }, - "bad/F6101_getatt_ref_typed_object_attribute.yaml": { - "filePath": "bad/F6101_getatt_ref_typed_object_attribute.yaml", + "bad/F3032_whole_properties_item_cardinality.yaml": { + "filePath": "bad/F3032_whole_properties_item_cardinality.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 1, "counts": { - "fatal": 2, + "fatal": 1, "errors": 0, "warnings": 0, - "informational": 7, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -6240,27 +6979,92 @@ }, "diagnostics": [ { - "ruleId": "F3012", + "ruleId": "F3032", "severity": "FATAL", - "message": "GetAtt Database.Endpoint (AWS::RDS::DBInstance) returns 'object', but property expects 'string'", + "message": "expected maximum item count: 16, found: 17", "source": "SCHEMA", "entity": { - "logicalId": "Parameter", + "logicalId": "Function", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Value", + "propertyPath": "Properties.VpcConfig.SubnetIds", "category": "Schema", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 12, - "ruleDescription": "Property type mismatch", + "startLine": 80, + "startColumn": 5, + "endLine": 80, + "endColumn": 15, + "conditionScenario": { + "Enabled00": true, + "Enabled01": true, + "Enabled02": true, + "Enabled03": true, + "Enabled04": true, + "Enabled05": true, + "Enabled06": true, + "Enabled07": true, + "Enabled08": true, + "Enabled09": false, + "Enabled10": false, + "Enabled11": false, + "Enabled12": false, + "Enabled13": false, + "Enabled14": false, + "Enabled15": false, + "Enabled16": false, + "OuterEnabled": true + }, + "ruleDescription": "Array item count out of bounds", "phase": "SCHEMA", "context": { - "expectedConstraint": "string", - "resolutionSource": "GetAtt Database.Endpoint" - } + "extra": { + "actual_count": 17, + "max_items": 16, + "min_items": 0 + } + } + } + ] + }, + "bad/F6101_getatt_ref_typed_object_attribute.yaml": { + "filePath": "bad/F6101_getatt_ref_typed_object_attribute.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 2, + "errors": 0, + "warnings": 0, + "informational": 7, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3012", + "severity": "FATAL", + "message": "GetAtt Database.Endpoint (AWS::RDS::DBInstance) returns 'object', but property expects 'string'", + "source": "SCHEMA", + "entity": { + "logicalId": "Parameter", + "entityType": "Resource", + "resourceType": "AWS::SSM::Parameter" + }, + "propertyPath": "Properties.Value", + "category": "Schema", + "startLine": 28, + "startColumn": 7, + "endLine": 28, + "endColumn": 12, + "ruleDescription": "Property type mismatch", + "phase": "SCHEMA", + "context": { + "expectedConstraint": "string", + "resolutionSource": "GetAtt Database.Endpoint" + } }, { "ruleId": "F6101", @@ -7979,16 +8783,16 @@ } ] }, - "bad/W3010_full_coverage.yaml": { - "filePath": "bad/W3010_full_coverage.yaml", + "bad/W2530_snapstart_conditional_apply_on.yaml": { + "filePath": "bad/W2530_snapstart_conditional_apply_on.yaml", "status": "OK", "metadata": { - "resourcesScanned": 9, + "resourcesScanned": 7, "counts": { "fatal": 0, "errors": 0, - "warnings": 12, - "informational": 29, + "warnings": 8, + "informational": 7, "debug": 0 }, "suppressed": 0, @@ -7997,688 +8801,535 @@ }, "diagnostics": [ { - "ruleId": "W3010", + "ruleId": "W2530", "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1a'", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", "source": "CFN_LINT", "entity": { - "logicalId": "Asg", + "logicalId": "PropertiesTrueBranch", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AvailabilityZones.0", + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", - "startLine": 9, + "startLine": 17, "startColumn": 11, - "endLine": 9, - "endColumn": 12, - "ruleDescription": "Availability zone properties should not be hardcoded", + "endLine": 17, + "endColumn": 18, + "ruleDescription": "Validate that SnapStart is properly configured", "phase": "LINT" }, { - "ruleId": "W3010", + "ruleId": "W2530", "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1b'", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", "source": "CFN_LINT", "entity": { - "logicalId": "Asg", + "logicalId": "PropertiesFalseBranch", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AvailabilityZones.1", + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", - "startLine": 10, + "startLine": 41, "startColumn": 11, - "endLine": 10, - "endColumn": 12, - "ruleDescription": "Availability zone properties should not be hardcoded", + "endLine": 41, + "endColumn": 18, + "ruleDescription": "Validate that SnapStart is properly configured", "phase": "LINT" }, { - "ruleId": "W3010", + "ruleId": "W2530", "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1a'", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", "source": "CFN_LINT", "entity": { - "logicalId": "Host", + "logicalId": "ApplyOnTrueBranch", "entityType": "Resource", - "resourceType": "AWS::EC2::Host" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 23, - "ruleDescription": "Availability zone properties should not be hardcoded", + "startLine": 52, + "startColumn": 34, + "endLine": 52, + "endColumn": 35, + "ruleDescription": "Validate that SnapStart is properly configured", "phase": "LINT" }, { - "ruleId": "W3010", + "ruleId": "W2530", "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1a'", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", "source": "CFN_LINT", "entity": { - "logicalId": "Instance", + "logicalId": "ApplyOnFalseBranch", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", - "startLine": 22, - "startColumn": 7, - "endLine": 22, - "endColumn": 23, - "ruleDescription": "Availability zone properties should not be hardcoded", + "startLine": 63, + "startColumn": 40, + "endLine": 63, + "endColumn": 41, + "ruleDescription": "Validate that SnapStart is properly configured", "phase": "LINT" }, { - "ruleId": "W3010", + "ruleId": "W2530", "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1a'", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", "source": "CFN_LINT", "entity": { - "logicalId": "Lt", + "logicalId": "ApplyOnBesideNoValue", "entityType": "Resource", - "resourceType": "AWS::EC2::LaunchTemplate" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.LaunchTemplateData.Placement.AvailabilityZone", + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", - "startLine": 30, - "startColumn": 11, - "endLine": 30, - "endColumn": 27, - "ruleDescription": "Availability zone properties should not be hardcoded", + "startLine": 74, + "startColumn": 53, + "endLine": 74, + "endColumn": 54, + "ruleDescription": "Validate that SnapStart is properly configured", "phase": "LINT" }, { - "ruleId": "W3010", + "ruleId": "W2530", "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1a'", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", "source": "CFN_LINT", "entity": { - "logicalId": "Subnet", + "logicalId": "SnapStartBesideNoValue", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", - "startLine": 36, - "startColumn": 7, - "endLine": 36, - "endColumn": 23, - "ruleDescription": "Availability zone properties should not be hardcoded", + "startLine": 87, + "startColumn": 11, + "endLine": 87, + "endColumn": 18, + "ruleDescription": "Validate that SnapStart is properly configured", "phase": "LINT" }, { - "ruleId": "W3010", + "ruleId": "W2530", "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1a'", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", "source": "CFN_LINT", "entity": { - "logicalId": "Volume", + "logicalId": "EveryBranchEnables", "entityType": "Resource", - "resourceType": "AWS::EC2::Volume" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", - "startLine": 40, - "startColumn": 7, - "endLine": 40, - "endColumn": 23, - "ruleDescription": "Availability zone properties should not be hardcoded", + "startLine": 99, + "startColumn": 11, + "endLine": 99, + "endColumn": 18, + "ruleDescription": "Validate that SnapStart is properly configured", "phase": "LINT" }, { - "ruleId": "W3010", + "ruleId": "W2530", "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1a'", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", "source": "CFN_LINT", "entity": { - "logicalId": "Elb", + "logicalId": "EveryBranchEnables", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AvailabilityZones.0", + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", - "startLine": 46, + "startLine": 100, "startColumn": 11, - "endLine": 46, - "endColumn": 12, - "ruleDescription": "Availability zone properties should not be hardcoded", + "endLine": 100, + "endColumn": 18, + "ruleDescription": "Validate that SnapStart is properly configured", "phase": "LINT" }, { - "ruleId": "W3010", - "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1a'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'PropertiesTrueBranch' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Tg", + "logicalId": "PropertiesTrueBranch", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Targets.0.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 59, - "startColumn": 11, - "endLine": 59, - "endColumn": 27, - "ruleDescription": "Availability zone properties should not be hardcoded", + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3010", - "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1a'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'PropertiesFalseBranch' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Rds", + "logicalId": "PropertiesFalseBranch", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 63, - "startColumn": 7, - "endLine": 63, - "endColumn": 23, - "ruleDescription": "Availability zone properties should not be hardcoded", + "startLine": 26, + "startColumn": 5, + "endLine": 26, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ApplyOnTrueBranch' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Rds", + "logicalId": "ApplyOnTrueBranch", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 62, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 44, "startColumn": 5, - "endLine": 62, + "endLine": 44, "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ApplyOnFalseBranch' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Instance", + "logicalId": "ApplyOnFalseBranch", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 55, + "startColumn": 5, + "endLine": 55, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'ApplyOnBesideNoValue' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Volume", + "logicalId": "ApplyOnBesideNoValue", "entityType": "Resource", - "resourceType": "AWS::EC2::Volume" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 37, - "startColumn": 3, - "endLine": 37, - "endColumn": 9, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 66, + "startColumn": 5, + "endLine": 66, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'SnapStartBesideNoValue' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Volume", + "logicalId": "SnapStartBesideNoValue", "entityType": "Resource", - "resourceType": "AWS::EC2::Volume" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 37, - "startColumn": 3, - "endLine": 37, - "endColumn": 9, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 77, + "startColumn": 5, + "endLine": 77, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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)", + "message": "Resource 'EveryBranchEnables' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "EveryBranchEnables", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 90, + "startColumn": 5, + "endLine": 90, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/W2530_snapstart_version_not_coexisting.yaml": { + "filePath": "bad/W2530_snapstart_version_not_coexisting.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 9, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 4, + "informational": 10, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2530", + "severity": "WARN", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", "source": "CFN_LINT", "entity": { - "logicalId": "Rds", + "logicalId": "VersionOnlyDependsOnFunction", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", - "startLine": 60, - "startColumn": 3, - "endLine": 60, - "endColumn": 6, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 32, + "startColumn": 9, + "endLine": 32, + "endColumn": 16, + "ruleDescription": "Validate that SnapStart is properly configured", "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)", + "ruleId": "W2530", + "severity": "WARN", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", "source": "CFN_LINT", "entity": { - "logicalId": "Rds", + "logicalId": "VersionOnlyDescribesFunction", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", - "startLine": 60, - "startColumn": 3, - "endLine": 60, - "endColumn": 6, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 48, + "startColumn": 9, + "endLine": 48, + "endColumn": 16, + "ruleDescription": "Validate that SnapStart is properly configured", "phase": "LINT" }, { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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)", + "ruleId": "W2530", + "severity": "WARN", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", "source": "CFN_LINT", "entity": { - "logicalId": "Rds", + "logicalId": "VersionInOtherEnvironment", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties", + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", - "startLine": 62, - "startColumn": 5, - "endLine": 62, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "startLine": 65, + "startColumn": 11, + "endLine": 65, + "endColumn": 18, + "ruleDescription": "Validate that SnapStart is properly configured", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W2530", + "severity": "WARN", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", + "source": "CFN_LINT", "entity": { - "logicalId": "Asg", + "logicalId": "VersionNamesOtherFunctionWhenEnabled", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.LaunchConfigurationName", + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", - "startLine": 13, - "startColumn": 7, - "endLine": 13, - "endColumn": 30, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 82, + "startColumn": 34, + "endLine": 82, + "endColumn": 35, + "ruleDescription": "Validate that SnapStart is properly configured", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Host", + "logicalId": "OrderedVersion", "entityType": "Resource", - "resourceType": "AWS::EC2::Host" + "resourceType": "AWS::Lambda::Version" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 17, + "startLine": 37, "startColumn": 7, - "endLine": 17, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 37, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'PublishedFunction'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Host", + "logicalId": "DescribedVersion", "entityType": "Resource", - "resourceType": "AWS::EC2::Host" + "resourceType": "AWS::Lambda::Version" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 18, + "startLine": 52, "startColumn": 7, - "endLine": 18, + "endLine": 52, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'PublishedFunction'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Instance", + "logicalId": "DescribedVersion", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Lambda::Version" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 22, + "startLine": 53, "startColumn": 7, - "endLine": 22, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 53, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VersionOnlyDescribesFunction'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Instance", + "logicalId": "DevOnlyVersion", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Lambda::Version" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 23, + "startLine": 71, "startColumn": 7, - "endLine": 23, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 71, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VersionInOtherEnvironment'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Instance", + "logicalId": "SwitchedVersion", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Lambda::Version" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 24, + "startLine": 86, "startColumn": 7, - "endLine": 24, + "endLine": 86, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 34, - "startColumn": 7, - "endLine": 34, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 36, - "startColumn": 7, - "endLine": 36, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZones' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Elb", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" - }, - "propertyPath": "Properties.AvailabilityZones", - "category": "Best Practice", - "startLine": 45, - "startColumn": 7, - "endLine": 45, - "endColumn": 24, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Tg", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" - }, - "propertyPath": "Properties.Port", - "category": "Best Practice", - "startLine": 54, - "startColumn": 7, - "endLine": 54, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Tg", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" - }, - "propertyPath": "Properties.Protocol", - "category": "Best Practice", - "startLine": 55, - "startColumn": 7, - "endLine": 55, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Tg", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 56, - "startColumn": 7, - "endLine": 56, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Rds", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 63, - "startColumn": 7, - "endLine": 63, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Rds", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 65, - "startColumn": 7, - "endLine": 65, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsUsEast1'" } }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Asg' of type 'AWS::AutoScaling::AutoScalingGroup' supports Tags but none are configured", + "message": "Resource 'PublishedFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Asg", + "logicalId": "PublishedFunction", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 7, + "startLine": 15, "startColumn": 5, - "endLine": 7, + "endLine": 15, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -8686,19 +9337,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Host' of type 'AWS::EC2::Host' supports Tags but none are configured", + "message": "Resource 'VersionOnlyDependsOnFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Host", + "logicalId": "VersionOnlyDependsOnFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::Host" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 16, + "startLine": 24, "startColumn": 5, - "endLine": 16, + "endLine": 24, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -8706,19 +9357,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'VersionOnlyDescribesFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Instance", + "logicalId": "VersionOnlyDescribesFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 21, + "startLine": 40, "startColumn": 5, - "endLine": 21, + "endLine": 40, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -8726,19 +9377,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Subnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'VersionInOtherEnvironment' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Subnet", + "logicalId": "VersionInOtherEnvironment", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 33, + "startLine": 56, "startColumn": 5, - "endLine": 33, + "endLine": 56, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -8746,95 +9397,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Volume' of type 'AWS::EC2::Volume' supports Tags but none are configured", + "message": "Resource 'VersionNamesOtherFunctionWhenEnabled' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Volume", + "logicalId": "VersionNamesOtherFunctionWhenEnabled", "entityType": "Resource", - "resourceType": "AWS::EC2::Volume" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 39, + "startLine": 74, "startColumn": 5, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Elb' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Elb", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 44, - "startColumn": 5, - "endLine": 44, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Tg' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Tg", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 53, - "startColumn": 5, - "endLine": 53, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Rds' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Rds", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 62, - "startColumn": 5, - "endLine": 62, + "endLine": 74, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/W3030_enum_case_insensitive_mismatch.yaml": { - "filePath": "bad/W3030_enum_case_insensitive_mismatch.yaml", + "bad/W3010_full_coverage.yaml": { + "filePath": "bad/W3010_full_coverage.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 9, "counts": { "fatal": 0, "errors": 0, - "warnings": 1, - "informational": 2, + "warnings": 12, + "informational": 29, "debug": 0 }, "suppressed": 0, @@ -8843,251 +9434,364 @@ }, "diagnostics": [ { - "ruleId": "W3030", + "ruleId": "W3010", "severity": "WARN", - "message": "'BOGUS' is not one of ['managed', 'unmanaged'] (case-insensitive)", + "message": "Avoid hardcoding availability zones 'us-east-1a'", "source": "CFN_LINT", "entity": { - "logicalId": "ComputeEnvironment", + "logicalId": "Asg", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.Type", - "category": "Schema", - "startLine": 13, - "startColumn": 7, - "endLine": 13, - "endColumn": 11, - "ruleDescription": "Value not in allowed enum", - "phase": "SCHEMA", - "context": { - "actualValue": "BOGUS", - "extra": { - "allowed_values": [ - "managed", - "unmanaged" - ] - } - } + "propertyPath": "Properties.AvailabilityZones.0", + "category": "Best Practice", + "startLine": 9, + "startColumn": 11, + "endLine": 9, + "endColumn": 12, + "ruleDescription": "Availability zone properties should not be hardcoded", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3010", + "severity": "WARN", + "message": "Avoid hardcoding availability zones 'us-east-1b'", + "source": "CFN_LINT", "entity": { - "logicalId": "ComputeEnvironment", + "logicalId": "Asg", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.AvailabilityZones.1", "category": "Best Practice", - "startLine": 13, - "startColumn": 7, - "endLine": 13, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 10, + "startColumn": 11, + "endLine": 10, + "endColumn": 12, + "ruleDescription": "Availability zone properties should not be hardcoded", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Tags' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3010", + "severity": "WARN", + "message": "Avoid hardcoding availability zones 'us-east-1a'", + "source": "CFN_LINT", "entity": { - "logicalId": "ComputeEnvironment", + "logicalId": "Host", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::EC2::Host" }, - "propertyPath": "Properties.Tags", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 15, + "startLine": 17, "startColumn": 7, - "endLine": 15, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - } - ] - }, - "bad/W3660_api_gateway_body_mixing.yaml": { - "filePath": "bad/W3660_api_gateway_body_mixing.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 6, - "informational": 13, - "debug": 0 + "endLine": 17, + "endColumn": 23, + "ruleDescription": "Availability zone properties should not be hardcoded", + "phase": "LINT" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W3660", + "ruleId": "W3010", "severity": "WARN", - "message": "Defining 'Body' with a relation to resource 'Authorizer' of type 'AWS::ApiGateway::Authorizer' may result in drift and orphaned resources", + "message": "Avoid hardcoding availability zones 'us-east-1a'", "source": "CFN_LINT", "entity": { - "logicalId": "Api", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Body", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 6, + "startLine": 22, "startColumn": 7, - "endLine": 6, - "endColumn": 11, - "ruleDescription": "Validate if multiple resources are modifying a Rest API definition", + "endLine": 22, + "endColumn": 23, + "ruleDescription": "Availability zone properties should not be hardcoded", "phase": "LINT" }, { - "ruleId": "W3660", + "ruleId": "W3010", "severity": "WARN", - "message": "Defining 'Body' with a relation to resource 'Method' of type 'AWS::ApiGateway::Method' may result in drift and orphaned resources", + "message": "Avoid hardcoding availability zones 'us-east-1a'", "source": "CFN_LINT", "entity": { - "logicalId": "Api", + "logicalId": "Lt", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::EC2::LaunchTemplate" }, - "propertyPath": "Properties.Body", + "propertyPath": "Properties.LaunchTemplateData.Placement.AvailabilityZone", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 11, - "ruleDescription": "Validate if multiple resources are modifying a Rest API definition", + "startLine": 30, + "startColumn": 11, + "endLine": 30, + "endColumn": 27, + "ruleDescription": "Availability zone properties should not be hardcoded", "phase": "LINT" }, { - "ruleId": "W3660", + "ruleId": "W3010", "severity": "WARN", - "message": "Defining 'Body' with a relation to resource 'Model' of type 'AWS::ApiGateway::Model' may result in drift and orphaned resources", + "message": "Avoid hardcoding availability zones 'us-east-1a'", "source": "CFN_LINT", "entity": { - "logicalId": "Api", + "logicalId": "Subnet", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Body", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 6, + "startLine": 36, "startColumn": 7, - "endLine": 6, - "endColumn": 11, - "ruleDescription": "Validate if multiple resources are modifying a Rest API definition", + "endLine": 36, + "endColumn": 23, + "ruleDescription": "Availability zone properties should not be hardcoded", "phase": "LINT" }, { - "ruleId": "W3660", + "ruleId": "W3010", "severity": "WARN", - "message": "Defining 'Body' with a relation to resource 'Resource' of type 'AWS::ApiGateway::Resource' may result in drift and orphaned resources", + "message": "Avoid hardcoding availability zones 'us-east-1a'", "source": "CFN_LINT", "entity": { - "logicalId": "Api", + "logicalId": "Volume", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::EC2::Volume" }, - "propertyPath": "Properties.Body", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 6, + "startLine": 40, "startColumn": 7, - "endLine": 6, - "endColumn": 11, - "ruleDescription": "Validate if multiple resources are modifying a Rest API definition", + "endLine": 40, + "endColumn": 23, + "ruleDescription": "Availability zone properties should not be hardcoded", "phase": "LINT" }, { - "ruleId": "W3660", + "ruleId": "W3010", "severity": "WARN", - "message": "Defining 'Body' with a relation to resource 'Response' of type 'AWS::ApiGateway::GatewayResponse' may result in drift and orphaned resources", + "message": "Avoid hardcoding availability zones 'us-east-1a'", "source": "CFN_LINT", "entity": { - "logicalId": "Api", + "logicalId": "Elb", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" }, - "propertyPath": "Properties.Body", + "propertyPath": "Properties.AvailabilityZones.0", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 11, - "ruleDescription": "Validate if multiple resources are modifying a Rest API definition", + "startLine": 46, + "startColumn": 11, + "endLine": 46, + "endColumn": 12, + "ruleDescription": "Availability zone properties should not be hardcoded", "phase": "LINT" }, { - "ruleId": "W3660", + "ruleId": "W3010", "severity": "WARN", - "message": "Defining 'Body' with a relation to resource 'Validator' of type 'AWS::ApiGateway::RequestValidator' may result in drift and orphaned resources", + "message": "Avoid hardcoding availability zones 'us-east-1a'", "source": "CFN_LINT", "entity": { - "logicalId": "Api", + "logicalId": "Tg", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Body", + "propertyPath": "Properties.Targets.0.AvailabilityZone", "category": "Best Practice", - "startLine": 6, + "startLine": 59, + "startColumn": 11, + "endLine": 59, + "endColumn": 27, + "ruleDescription": "Availability zone properties should not be hardcoded", + "phase": "LINT" + }, + { + "ruleId": "W3010", + "severity": "WARN", + "message": "Avoid hardcoding availability zones 'us-east-1a'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Rds", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 63, "startColumn": 7, - "endLine": 6, - "endColumn": 11, - "ruleDescription": "Validate if multiple resources are modifying a Rest API definition", + "endLine": 63, + "endColumn": 23, + "ruleDescription": "Availability zone properties should not be hardcoded", + "phase": "LINT" + }, + { + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", + "entity": { + "logicalId": "Rds", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 62, + "startColumn": 5, + "endLine": 62, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" + }, + { + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", + "entity": { + "logicalId": "Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", + "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": "Volume", + "entityType": "Resource", + "resourceType": "AWS::EC2::Volume" + }, + "category": "Best Practice", + "startLine": 37, + "startColumn": 3, + "endLine": 37, + "endColumn": 9, + "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": "Volume", + "entityType": "Resource", + "resourceType": "AWS::EC2::Volume" + }, + "category": "Best Practice", + "startLine": 37, + "startColumn": 3, + "endLine": 37, + "endColumn": 9, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "Rds", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 60, + "startColumn": 3, + "endLine": 60, + "endColumn": 6, + "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": "Rds", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 60, + "startColumn": 3, + "endLine": 60, + "endColumn": 6, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "Rds", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 62, + "startColumn": 5, + "endLine": 62, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Method", + "logicalId": "Asg", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.LaunchConfigurationName", "category": "Best Practice", - "startLine": 14, + "startLine": 13, "startColumn": 7, - "endLine": 14, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 13, + "endColumn": 30, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Api'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Method", + "logicalId": "Host", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::EC2::Host" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 15, + "startLine": 17, "startColumn": 7, - "endLine": 15, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 17, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9097,20 +9801,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Method", + "logicalId": "Host", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::EC2::Host" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 16, + "startLine": 18, "startColumn": 7, - "endLine": 16, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 18, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9120,44 +9824,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Model", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 21, + "startLine": 22, "startColumn": 7, - "endLine": 21, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 22, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Api'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Model", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Model" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ContentType", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 22, + "startLine": 23, "startColumn": 7, - "endLine": 22, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 23, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9167,44 +9870,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 26, + "startLine": 24, "startColumn": 7, - "endLine": 26, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 24, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Api'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource", + "logicalId": "Subnet", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 27, + "startLine": 34, "startColumn": 7, - "endLine": 27, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 34, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9214,20 +9915,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource", + "logicalId": "Subnet", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 28, + "startLine": 35, "startColumn": 7, - "endLine": 28, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 35, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9237,518 +9937,617 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Response", + "logicalId": "Subnet", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::GatewayResponse" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 32, + "startLine": 36, "startColumn": 7, - "endLine": 32, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 36, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Api'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResponseType' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZones' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Response", + "logicalId": "Elb", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::GatewayResponse" + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" }, - "propertyPath": "Properties.ResponseType", + "propertyPath": "Properties.AvailabilityZones", "category": "Best Practice", - "startLine": 33, + "startLine": 45, "startColumn": 7, - "endLine": 33, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 45, + "endColumn": 24, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Validator", + "logicalId": "Tg", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RequestValidator" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 37, + "startLine": 54, "startColumn": 7, - "endLine": 37, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 54, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Api'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Authorizer", + "logicalId": "Tg", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Authorizer" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 41, + "startLine": 55, "startColumn": 7, - "endLine": 41, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 55, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Api'" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Api' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Api", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/W3671_spotfleet_ebs_iops.yaml": { - "filePath": "bad/W3671_spotfleet_ebs_iops.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 3, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W3671", - "severity": "WARN", - "message": "Iops is ignored when VolumeType is 'gp2'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Fleet", + "logicalId": "Tg", "entityType": "Resource", - "resourceType": "AWS::EC2::SpotFleet" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.SpotFleetRequestConfigData.LaunchSpecifications.0.BlockDeviceMappings.0.Ebs.Iops", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 16, - "startColumn": 19, - "endLine": 16, - "endColumn": 23, - "ruleDescription": "Iops is ignored for certain EBS volume types", - "phase": "LINT" + "startLine": 56, + "startColumn": 7, + "endLine": 56, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SpotFleetRequestConfigData.IamFleetRole' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Fleet", + "logicalId": "Rds", "entityType": "Resource", - "resourceType": "AWS::EC2::SpotFleet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SpotFleetRequestConfigData.IamFleetRole", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 7, - "startColumn": 9, - "endLine": 7, - "endColumn": 21, + "startLine": 63, + "startColumn": 7, + "endLine": 63, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SpotFleetRequestConfigData.LaunchSpecifications' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Fleet", + "logicalId": "Rds", "entityType": "Resource", - "resourceType": "AWS::EC2::SpotFleet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SpotFleetRequestConfigData.LaunchSpecifications", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 9, - "startColumn": 9, - "endLine": 9, - "endColumn": 29, + "startLine": 65, + "startColumn": 7, + "endLine": 65, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Fleet' of type 'AWS::EC2::SpotFleet' supports Tags but none are configured", + "message": "Resource 'Asg' of type 'AWS::AutoScaling::AutoScalingGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Fleet", + "logicalId": "Asg", "entityType": "Resource", - "resourceType": "AWS::EC2::SpotFleet" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 7, "startColumn": 5, - "endLine": 5, + "endLine": 7, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/W3687_ports_ignored_by_protocol.yaml": { - "filePath": "bad/W3687_ports_ignored_by_protocol.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 0, - "errors": 3, - "warnings": 6, - "informational": 13, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3687", - "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value icmp", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Host' of type 'AWS::EC2::Host' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "Host", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Host" }, - "propertyPath": "Properties.SecurityGroupIngress.3", - "category": "Resource", - "startLine": 28, - "startColumn": 21, - "endLine": 28, - "endColumn": 22, - "ruleDescription": "Validate to and from ports based on the protocol", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E3687", - "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value udp", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.SecurityGroupEgress.1", - "category": "Resource", - "startLine": 35, - "startColumn": 21, - "endLine": 35, - "endColumn": 22, - "ruleDescription": "Validate to and from ports based on the protocol", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 21, + "startColumn": 5, + "endLine": 21, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E3687", - "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value tcp", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Subnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "StandaloneEgressTcpWithoutPorts", + "logicalId": "Subnet", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties", - "category": "Resource", - "startLine": 47, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 33, "startColumn": 5, - "endLine": 47, + "endLine": 33, "endColumn": 15, - "ruleDescription": "Validate to and from ports based on the protocol", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3687", - "severity": "WARN", - "message": "['FromPort', 'ToPort'] are ignored when using 'IpProtocol' value 'esp'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Volume' of type 'AWS::EC2::Volume' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "Volume", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Volume" }, - "propertyPath": "Properties.SecurityGroupIngress.0.FromPort", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, - "startColumn": 11, - "endLine": 17, - "endColumn": 19, - "ruleDescription": "Validate that ports aren't specified for certain protocols", + "startLine": 39, + "startColumn": 5, + "endLine": 39, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3687", - "severity": "WARN", - "message": "['FromPort', 'ToPort'] are ignored when using 'IpProtocol' value '50'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Elb' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "Elb", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" }, - "propertyPath": "Properties.SecurityGroupIngress.1.FromPort", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 21, - "startColumn": 11, - "endLine": 21, - "endColumn": 19, - "ruleDescription": "Validate that ports aren't specified for certain protocols", + "startLine": 44, + "startColumn": 5, + "endLine": 44, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3687", - "severity": "WARN", - "message": "['FromPort', 'ToPort'] are ignored when using 'IpProtocol' value '-1'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Tg' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "Tg", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.SecurityGroupIngress.2.FromPort", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 25, - "startColumn": 11, - "endLine": 25, - "endColumn": 19, - "ruleDescription": "Validate that ports aren't specified for certain protocols", + "startLine": 53, + "startColumn": 5, + "endLine": 53, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3687", - "severity": "WARN", - "message": "['FromPort', 'ToPort'] are ignored when using 'IpProtocol' value 'gre'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Rds' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "Rds", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SecurityGroupEgress.0.FromPort", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 32, - "startColumn": 11, - "endLine": 32, - "endColumn": 19, - "ruleDescription": "Validate that ports aren't specified for certain protocols", + "startLine": 62, + "startColumn": 5, + "endLine": 62, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/W3030_enum_case_insensitive_mismatch.yaml": { + "filePath": "bad/W3030_enum_case_insensitive_mismatch.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W3687", + "ruleId": "W3030", "severity": "WARN", - "message": "['FromPort', 'ToPort'] are ignored when using 'IpProtocol' value 'esp'", + "message": "'BOGUS' is not one of ['managed', 'unmanaged'] (case-insensitive)", "source": "CFN_LINT", "entity": { - "logicalId": "StandaloneIngressEsp", + "logicalId": "ComputeEnvironment", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Batch::ComputeEnvironment" }, - "propertyPath": "Properties.FromPort", - "category": "Best Practice", - "startLine": 42, + "propertyPath": "Properties.Type", + "category": "Schema", + "startLine": 13, "startColumn": 7, - "endLine": 42, - "endColumn": 15, - "ruleDescription": "Validate that ports aren't specified for certain protocols", - "phase": "LINT" + "endLine": 13, + "endColumn": 11, + "ruleDescription": "Value not in allowed enum", + "phase": "SCHEMA", + "context": { + "actualValue": "BOGUS", + "extra": { + "allowed_values": [ + "managed", + "unmanaged" + ] + } + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "50 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "ComputeEnvironment", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Batch::ComputeEnvironment" }, - "propertyPath": "Properties.SecurityGroupIngress.1.IpProtocol", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 20, - "startColumn": 11, - "endLine": 20, - "endColumn": 21, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 13, + "startColumn": 7, + "endLine": 13, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Tags' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Vpc", + "logicalId": "ComputeEnvironment", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Batch::ComputeEnvironment" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", "category": "Best Practice", - "startLine": 9, + "startLine": 15, "startColumn": 7, - "endLine": 9, - "endColumn": 16, + "endLine": 15, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } + } + ] + }, + "bad/W3660_api_gateway_body_mixing.yaml": { + "filePath": "bad/W3660_api_gateway_body_mixing.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 7, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 6, + "informational": 13, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3660", + "severity": "WARN", + "message": "Defining 'Body' with a relation to resource 'Authorizer' of type 'AWS::ApiGateway::Authorizer' may result in drift and orphaned resources", + "source": "CFN_LINT", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "Api", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::RestApi" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Body", "category": "Best Practice", - "startLine": 13, + "startLine": 6, "startColumn": 7, - "endLine": 13, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 6, + "endColumn": 11, + "ruleDescription": "Validate if multiple resources are modifying a Rest API definition", + "phase": "LINT" + }, + { + "ruleId": "W3660", + "severity": "WARN", + "message": "Defining 'Body' with a relation to resource 'Method' of type 'AWS::ApiGateway::Method' may result in drift and orphaned resources", + "source": "CFN_LINT", + "entity": { + "logicalId": "Api", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "propertyPath": "Properties.Body", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 11, + "ruleDescription": "Validate if multiple resources are modifying a Rest API definition", + "phase": "LINT" + }, + { + "ruleId": "W3660", + "severity": "WARN", + "message": "Defining 'Body' with a relation to resource 'Model' of type 'AWS::ApiGateway::Model' may result in drift and orphaned resources", + "source": "CFN_LINT", + "entity": { + "logicalId": "Api", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "propertyPath": "Properties.Body", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 11, + "ruleDescription": "Validate if multiple resources are modifying a Rest API definition", + "phase": "LINT" + }, + { + "ruleId": "W3660", + "severity": "WARN", + "message": "Defining 'Body' with a relation to resource 'Resource' of type 'AWS::ApiGateway::Resource' may result in drift and orphaned resources", + "source": "CFN_LINT", + "entity": { + "logicalId": "Api", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "propertyPath": "Properties.Body", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 11, + "ruleDescription": "Validate if multiple resources are modifying a Rest API definition", + "phase": "LINT" + }, + { + "ruleId": "W3660", + "severity": "WARN", + "message": "Defining 'Body' with a relation to resource 'Response' of type 'AWS::ApiGateway::GatewayResponse' may result in drift and orphaned resources", + "source": "CFN_LINT", + "entity": { + "logicalId": "Api", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "propertyPath": "Properties.Body", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 11, + "ruleDescription": "Validate if multiple resources are modifying a Rest API definition", + "phase": "LINT" + }, + { + "ruleId": "W3660", + "severity": "WARN", + "message": "Defining 'Body' with a relation to resource 'Validator' of type 'AWS::ApiGateway::RequestValidator' may result in drift and orphaned resources", + "source": "CFN_LINT", + "entity": { + "logicalId": "Api", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "propertyPath": "Properties.Body", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 11, + "ruleDescription": "Validate if multiple resources are modifying a Rest API definition", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "Method", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", "startLine": 14, "startColumn": 7, "endLine": 14, - "endColumn": 12, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" + "resolutionSource": "Ref to 'Api'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressEsp", + "logicalId": "Method", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 40, + "startLine": 15, "startColumn": 7, - "endLine": 40, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 15, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'SecurityGroup'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressEsp", + "logicalId": "Method", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 41, + "startLine": 16, "startColumn": 7, - "endLine": 41, + "endLine": 16, "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9758,43 +10557,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressEsp", + "logicalId": "Model", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 42, + "startLine": 21, "startColumn": 7, - "endLine": 42, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 21, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Api'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'ContentType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressEsp", + "logicalId": "Model", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ApiGateway::Model" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.ContentType", "category": "Best Practice", - "startLine": 43, + "startLine": 22, "startColumn": 7, - "endLine": 43, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 22, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9804,20 +10604,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressEsp", + "logicalId": "Resource", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.CidrIp", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 44, + "startLine": 26, "startColumn": 7, - "endLine": 44, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 26, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Api'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Resource", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Resource" + }, + "propertyPath": "Properties.ParentId", + "category": "Best Practice", + "startLine": 27, + "startColumn": 7, + "endLine": 27, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9827,44 +10651,67 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneEgressTcpWithoutPorts", + "logicalId": "Resource", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 48, + "startLine": 28, "startColumn": 7, - "endLine": 48, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 28, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Response", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::GatewayResponse" + }, + "propertyPath": "Properties.RestApiId", + "category": "Best Practice", + "startLine": 32, + "startColumn": 7, + "endLine": 32, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SecurityGroup'" + "resolutionSource": "Ref to 'Api'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'ResponseType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneEgressTcpWithoutPorts", + "logicalId": "Response", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::ApiGateway::GatewayResponse" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.ResponseType", "category": "Best Practice", - "startLine": 49, + "startLine": 33, "startColumn": 7, - "endLine": 49, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 33, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9874,78 +10721,83 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneEgressTcpWithoutPorts", + "logicalId": "Validator", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::ApiGateway::RequestValidator" }, - "propertyPath": "Properties.CidrIp", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 50, + "startLine": 37, "startColumn": 7, - "endLine": 50, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 37, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Api'" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Vpc", + "logicalId": "Authorizer", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::ApiGateway::Authorizer" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 41, + "startColumn": 7, + "endLine": 41, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Api'" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'Api' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "Api", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::RestApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, + "startLine": 5, "startColumn": 5, - "endLine": 12, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/W3688_snapshot_identifier_from_parameter.yaml": { - "filePath": "bad/W3688_snapshot_identifier_from_parameter.yaml", + "bad/W3671_spotfleet_ebs_iops.yaml": { + "filePath": "bad/W3671_spotfleet_ebs_iops.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, - "warnings": 3, - "informational": 11, + "warnings": 1, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -9954,257 +10806,525 @@ }, "diagnostics": [ { - "ruleId": "W3688", + "ruleId": "W3671", "severity": "WARN", - "message": "MasterUsername is ignored when SnapshotIdentifier is present", + "message": "Iops is ignored when VolumeType is 'gp2'", "source": "CFN_LINT", "entity": { - "logicalId": "Restored", + "logicalId": "Fleet", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::SpotFleet" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.SpotFleetRequestConfigData.LaunchSpecifications.0.BlockDeviceMappings.0.Ebs.Iops", "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 21, - "ruleDescription": "When restoring DBCluster certain properties are ignored", + "startLine": 16, + "startColumn": 19, + "endLine": 16, + "endColumn": 23, + "ruleDescription": "Iops is ignored for certain EBS volume types", "phase": "LINT" }, { - "ruleId": "W3689", - "severity": "WARN", - "message": "'MasterUsername' is ignored when SourceDBClusterIdentifier is present", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SpotFleetRequestConfigData.IamFleetRole' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Cloned", + "logicalId": "Fleet", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::SpotFleet" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.SpotFleetRequestConfigData.IamFleetRole", "category": "Best Practice", - "startLine": 25, - "startColumn": 7, - "endLine": 25, + "startLine": 7, + "startColumn": 9, + "endLine": 7, "endColumn": 21, - "ruleDescription": "When using a source DB certain properties are ignored", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3689", - "severity": "WARN", - "message": "'StorageEncrypted' is ignored when SourceDBClusterIdentifier is present", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SpotFleetRequestConfigData.LaunchSpecifications' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Cloned", + "logicalId": "Fleet", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::SpotFleet" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.SpotFleetRequestConfigData.LaunchSpecifications", "category": "Best Practice", - "startLine": 26, - "startColumn": 7, - "endLine": 26, - "endColumn": 23, - "ruleDescription": "When using a source DB certain properties are ignored", - "phase": "LINT" + "startLine": 9, + "startColumn": 9, + "endLine": 9, + "endColumn": 29, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'Fleet' of type 'AWS::EC2::SpotFleet' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Restored", + "logicalId": "Fleet", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::SpotFleet" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 14, + "startLine": 5, "startColumn": 5, - "endLine": 14, + "endLine": 5, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/W3687_ports_ignored_by_protocol.yaml": { + "filePath": "bad/W3687_ports_ignored_by_protocol.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 0, + "errors": 3, + "warnings": 6, + "informational": 13, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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)", + "ruleId": "E3687", + "severity": "ERROR", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value icmp", "source": "CFN_LINT", "entity": { - "logicalId": "Cloned", + "logicalId": "SecurityGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.3", + "category": "Resource", + "startLine": 28, + "startColumn": 21, + "endLine": 28, + "endColumn": 22, + "ruleDescription": "Validate to and from ports based on the protocol", + "phase": "LINT" + }, + { + "ruleId": "E3687", + "severity": "ERROR", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value udp", + "source": "CFN_LINT", + "entity": { + "logicalId": "SecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupEgress.1", + "category": "Resource", + "startLine": 35, + "startColumn": 21, + "endLine": 35, + "endColumn": 22, + "ruleDescription": "Validate to and from ports based on the protocol", + "phase": "LINT" + }, + { + "ruleId": "E3687", + "severity": "ERROR", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value tcp", + "source": "CFN_LINT", + "entity": { + "logicalId": "StandaloneEgressTcpWithoutPorts", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupEgress" }, "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 22, + "category": "Resource", + "startLine": 47, "startColumn": 5, - "endLine": 22, + "endLine": 47, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Validate to and from ports based on the protocol", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3687", + "severity": "WARN", + "message": "['FromPort', 'ToPort'] are ignored when using 'IpProtocol' value 'esp'", + "source": "CFN_LINT", "entity": { - "logicalId": "Restored", + "logicalId": "SecurityGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.SecurityGroupIngress.0.FromPort", "category": "Best Practice", - "startLine": 15, + "startLine": 17, + "startColumn": 11, + "endLine": 17, + "endColumn": 19, + "ruleDescription": "Validate that ports aren't specified for certain protocols", + "phase": "LINT" + }, + { + "ruleId": "W3687", + "severity": "WARN", + "message": "['FromPort', 'ToPort'] are ignored when using 'IpProtocol' value '50'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.1.FromPort", + "category": "Best Practice", + "startLine": 21, + "startColumn": 11, + "endLine": 21, + "endColumn": 19, + "ruleDescription": "Validate that ports aren't specified for certain protocols", + "phase": "LINT" + }, + { + "ruleId": "W3687", + "severity": "WARN", + "message": "['FromPort', 'ToPort'] are ignored when using 'IpProtocol' value '-1'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.2.FromPort", + "category": "Best Practice", + "startLine": 25, + "startColumn": 11, + "endLine": 25, + "endColumn": 19, + "ruleDescription": "Validate that ports aren't specified for certain protocols", + "phase": "LINT" + }, + { + "ruleId": "W3687", + "severity": "WARN", + "message": "['FromPort', 'ToPort'] are ignored when using 'IpProtocol' value 'gre'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupEgress.0.FromPort", + "category": "Best Practice", + "startLine": 32, + "startColumn": 11, + "endLine": 32, + "endColumn": 19, + "ruleDescription": "Validate that ports aren't specified for certain protocols", + "phase": "LINT" + }, + { + "ruleId": "W3687", + "severity": "WARN", + "message": "['FromPort', 'ToPort'] are ignored when using 'IpProtocol' value 'esp'", + "source": "CFN_LINT", + "entity": { + "logicalId": "StandaloneIngressEsp", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupIngress" + }, + "propertyPath": "Properties.FromPort", + "category": "Best Practice", + "startLine": 42, "startColumn": 7, - "endLine": 15, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 42, + "endColumn": 15, + "ruleDescription": "Validate that ports aren't specified for certain protocols", + "phase": "LINT" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "50 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", + "entity": { + "logicalId": "SecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.1.IpProtocol", + "category": "Best Practice", + "startLine": 20, + "startColumn": 11, + "endLine": 20, + "endColumn": 21, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SnapshotIdentifier' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Restored", + "logicalId": "Vpc", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.SnapshotIdentifier", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 16, + "startLine": 9, "startColumn": 7, - "endLine": 16, - "endColumn": 25, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "endLine": 9, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'SnapshotId' (type String)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Restored", + "logicalId": "SecurityGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 17, + "startLine": 13, "startColumn": 7, - "endLine": 17, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "endLine": 13, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Cloned", + "logicalId": "SecurityGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 23, + "startLine": 14, "startColumn": 7, - "endLine": 23, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "endLine": 14, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceDBClusterIdentifier' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Cloned", + "logicalId": "StandaloneIngressEsp", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.SourceDBClusterIdentifier", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 24, + "startLine": 40, "startColumn": 7, - "endLine": 24, - "endColumn": 32, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "endLine": 40, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "parameter 'SourceClusterId' (type String)" + "resolutionSource": "Ref to 'SecurityGroup'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Cloned", + "logicalId": "StandaloneIngressEsp", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 25, + "startLine": 41, "startColumn": 7, - "endLine": 25, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "endLine": 41, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Cloned", + "logicalId": "StandaloneIngressEsp", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 26, + "startLine": 42, "startColumn": 7, - "endLine": 26, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "endLine": 42, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "StandaloneIngressEsp", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupIngress" + }, + "propertyPath": "Properties.ToPort", + "category": "Best Practice", + "startLine": 43, + "startColumn": 7, + "endLine": 43, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "StandaloneIngressEsp", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupIngress" + }, + "propertyPath": "Properties.CidrIp", + "category": "Best Practice", + "startLine": 44, + "startColumn": 7, + "endLine": 44, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "StandaloneEgressTcpWithoutPorts", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupEgress" + }, + "propertyPath": "Properties.GroupId", + "category": "Best Practice", + "startLine": 48, + "startColumn": 7, + "endLine": 48, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SecurityGroup'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "StandaloneEgressTcpWithoutPorts", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupEgress" + }, + "propertyPath": "Properties.IpProtocol", + "category": "Best Practice", + "startLine": 49, + "startColumn": 7, + "endLine": 49, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "StandaloneEgressTcpWithoutPorts", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupEgress" + }, + "propertyPath": "Properties.CidrIp", + "category": "Best Practice", + "startLine": 50, + "startColumn": 7, + "endLine": 50, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -10214,19 +11334,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Restored' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", + "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Restored", + "logicalId": "Vpc", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 14, + "startLine": 8, "startColumn": 5, - "endLine": 14, + "endLine": 8, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -10234,35 +11354,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Cloned' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", + "message": "Resource 'SecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Cloned", + "logicalId": "SecurityGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 22, + "startLine": 12, "startColumn": 5, - "endLine": 22, + "endLine": 12, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/W4011_context_missing_why.yaml": { - "filePath": "bad/W4011_context_missing_why.yaml", + "bad/W3688_snapshot_identifier_from_parameter.yaml": { + "filePath": "bad/W3688_snapshot_identifier_from_parameter.yaml", "status": "OK", "metadata": { - "resourcesScanned": 4, + "resourcesScanned": 2, "counts": { "fatal": 0, "errors": 0, "warnings": 3, - "informational": 12, + "informational": 11, "debug": 0 }, "suppressed": 0, @@ -10271,270 +11391,279 @@ }, "diagnostics": [ { - "ruleId": "W4011", + "ruleId": "W3688", "severity": "WARN", - "message": "Metadata.com.aws.cloudformation.Context has no 'why' and no trust declaration with conf 'low'.", - "source": "ENGINE", + "message": "MasterUsername is ignored when SnapshotIdentifier is present", + "source": "CFN_LINT", "entity": { - "logicalId": "OrderQueue", + "logicalId": "Restored", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Metadata.com.aws.cloudformation.Context", - "suggestedFix": "Add 'why' stating the resource's purpose and notable design choices without restating its type or property values, or set trust to {src: infer, conf: low, note: \"rationale not documented\"} when the rationale is unknown.", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 14, + "startLine": 17, "startColumn": 7, - "endLine": 14, - "endColumn": 37, - "ruleDescription": "Metadata Context block has no 'why' rationale and no low-confidence trust declaration", + "endLine": 17, + "endColumn": 21, + "ruleDescription": "When restoring DBCluster certain properties are ignored", "phase": "LINT" }, { - "ruleId": "W4011", + "ruleId": "W3689", "severity": "WARN", - "message": "Metadata.com.aws.cloudformation.Context has no 'why' and no trust declaration with conf 'low'.", - "source": "ENGINE", + "message": "'MasterUsername' is ignored when SourceDBClusterIdentifier is present", + "source": "CFN_LINT", "entity": { - "logicalId": "Notifier", + "logicalId": "Cloned", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Metadata.com.aws.cloudformation.Context", - "suggestedFix": "Add 'why' stating the resource's purpose and notable design choices without restating its type or property values, or set trust to {src: infer, conf: low, note: \"rationale not documented\"} when the rationale is unknown.", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 21, + "startLine": 25, "startColumn": 7, - "endLine": 21, - "endColumn": 37, - "ruleDescription": "Metadata Context block has no 'why' rationale and no low-confidence trust declaration", + "endLine": 25, + "endColumn": 21, + "ruleDescription": "When using a source DB certain properties are ignored", "phase": "LINT" }, { - "ruleId": "W4011", + "ruleId": "W3689", "severity": "WARN", - "message": "Metadata.com.aws.cloudformation.Context has no 'why' and no trust declaration with conf 'low'.", - "source": "ENGINE", + "message": "'StorageEncrypted' is ignored when SourceDBClusterIdentifier is present", + "source": "CFN_LINT", "entity": { - "logicalId": "ServiceLogGroup", + "logicalId": "Cloned", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Metadata.com.aws.cloudformation.Context", - "suggestedFix": "Add 'why' stating the resource's purpose and notable design choices without restating its type or property values, or set trust to {src: infer, conf: low, note: \"rationale not documented\"} when the rationale is unknown.", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 48, + "startLine": 26, "startColumn": 7, - "endLine": 48, - "endColumn": 37, - "ruleDescription": "Metadata Context block has no 'why' rationale and no low-confidence trust declaration", + "endLine": 26, + "endColumn": 23, + "ruleDescription": "When using a source DB certain properties are ignored", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I3013", "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": 11, - "startColumn": 3, - "endLine": 11, - "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)", + "message": "'BackupRetentionPeriod' 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", + "logicalId": "Restored", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::RDS::DBCluster" }, + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 11, - "startColumn": 3, - "endLine": 11, - "endColumn": 13, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 14, + "startColumn": 5, + "endLine": 14, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I3013", "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)", + "message": "'BackupRetentionPeriod' 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": "LegacyTable", + "logicalId": "Cloned", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBCluster" }, + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 27, - "startColumn": 3, - "endLine": 27, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 22, + "startColumn": 5, + "endLine": 22, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LegacyTable", + "logicalId": "Restored", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBCluster" }, + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 27, - "startColumn": 3, - "endLine": 27, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 15, + "startColumn": 7, + "endLine": 15, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'SnapshotIdentifier' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ServiceLogGroup", + "logicalId": "Restored", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::RDS::DBCluster" }, + "propertyPath": "Properties.SnapshotIdentifier", "category": "Best Practice", - "startLine": 43, - "startColumn": 3, - "endLine": 43, - "endColumn": 18, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 16, + "startColumn": 7, + "endLine": 16, + "endColumn": 25, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'SnapshotId' (type String)" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ServiceLogGroup", + "logicalId": "Restored", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::RDS::DBCluster" }, + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 43, - "startColumn": 3, - "endLine": 43, - "endColumn": 18, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "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", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "OrderQueue", + "logicalId": "Cloned", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 11, - "startColumn": 3, - "endLine": 11, + "startLine": 23, + "startColumn": 7, + "endLine": 23, "endColumn": 13, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'SourceDBClusterIdentifier' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LegacyTable", + "logicalId": "Cloned", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.SourceDBClusterIdentifier", "category": "Best Practice", - "startLine": 30, + "startLine": 24, "startColumn": 7, - "endLine": 30, - "endColumn": 16, + "endLine": 24, + "endColumn": 32, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter 'SourceClusterId' (type String)" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'OrderQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OrderQueue", + "logicalId": "Cloned", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 11, - "startColumn": 3, - "endLine": 11, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Notifier' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Notifier", + "logicalId": "Cloned", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 18, - "startColumn": 3, - "endLine": 18, - "endColumn": 11, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 26, + "startColumn": 7, + "endLine": 26, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LegacyTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'Restored' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LegacyTable", + "logicalId": "Restored", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBCluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 29, + "startLine": 14, "startColumn": 5, - "endLine": 29, + "endLine": 14, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -10542,35 +11671,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ServiceLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Resource 'Cloned' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ServiceLogGroup", + "logicalId": "Cloned", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::RDS::DBCluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 45, + "startLine": 22, "startColumn": 5, - "endLine": 45, + "endLine": 22, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/W4012_context_schema_violation.yaml": { - "filePath": "bad/W4012_context_schema_violation.yaml", + "bad/W4011_context_missing_why.yaml": { + "filePath": "bad/W4011_context_missing_why.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 4, "counts": { "fatal": 0, "errors": 0, - "warnings": 16, - "informational": 5, + "warnings": 3, + "informational": 12, "debug": 0 }, "suppressed": 0, @@ -10584,407 +11713,301 @@ "message": "Metadata.com.aws.cloudformation.Context has no 'why' and no trust declaration with conf 'low'.", "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "OrderQueue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, "propertyPath": "Metadata.com.aws.cloudformation.Context", "suggestedFix": "Add 'why' stating the resource's purpose and notable design choices without restating its type or property values, or set trust to {src: infer, conf: low, note: \"rationale not documented\"} when the rationale is unknown.", "category": "Best Practice", - "startLine": 25, + "startLine": 14, "startColumn": 7, - "endLine": 25, + "endLine": 14, "endColumn": 37, "ruleDescription": "Metadata Context block has no 'why' rationale and no low-confidence trust declaration", "phase": "LINT" }, { - "ruleId": "W4012", + "ruleId": "W4011", "severity": "WARN", - "message": "'arch' is an array; it must be a string.", + "message": "Metadata.com.aws.cloudformation.Context has no 'why' and no trust declaration with conf 'low'.", "source": "ENGINE", "entity": { - "logicalId": "com.aws.cloudformation.Context", - "entityType": "Metadata" + "logicalId": "Notifier", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Metadata/com.aws.cloudformation.Context/arch", + "propertyPath": "Metadata.com.aws.cloudformation.Context", + "suggestedFix": "Add 'why' stating the resource's purpose and notable design choices without restating its type or property values, or set trust to {src: infer, conf: low, note: \"rationale not documented\"} when the rationale is unknown.", "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 9, - "ruleDescription": "Metadata Context block does not match the Metadata Context schema", + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 37, + "ruleDescription": "Metadata Context block has no 'why' rationale and no low-confidence trust declaration", "phase": "LINT" }, { - "ruleId": "W4012", + "ruleId": "W4011", "severity": "WARN", - "message": "'why' belongs at resource level, not template level. Template-level fields: arch, must, owner, ref; resource-level fields: deps, must, mutability, mutable, trust, why.", + "message": "Metadata.com.aws.cloudformation.Context has no 'why' and no trust declaration with conf 'low'.", "source": "ENGINE", "entity": { - "logicalId": "com.aws.cloudformation.Context", - "entityType": "Metadata" + "logicalId": "ServiceLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Metadata/com.aws.cloudformation.Context/why", + "propertyPath": "Metadata.com.aws.cloudformation.Context", + "suggestedFix": "Add 'why' stating the resource's purpose and notable design choices without restating its type or property values, or set trust to {src: infer, conf: low, note: \"rationale not documented\"} when the rationale is unknown.", "category": "Best Practice", - "startLine": 11, - "startColumn": 5, - "endLine": 11, - "endColumn": 8, - "ruleDescription": "Metadata Context block does not match the Metadata Context schema", + "startLine": 48, + "startColumn": 7, + "endLine": 48, + "endColumn": 37, + "ruleDescription": "Metadata Context block has no 'why' rationale and no low-confidence trust declaration", "phase": "LINT" }, { - "ruleId": "W4012", - "severity": "WARN", - "message": "'ref.0' is missing required field 'at'; 'ref' must be an array whose entries are each a string or an object with required 'at'.", - "source": "ENGINE", + "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": "com.aws.cloudformation.Context", - "entityType": "Metadata" + "logicalId": "OrderQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Metadata/com.aws.cloudformation.Context/ref/0", "category": "Best Practice", - "startLine": 13, - "startColumn": 12, - "endLine": 13, + "startLine": 11, + "startColumn": 3, + "endLine": 11, "endColumn": 13, - "ruleDescription": "Metadata Context block does not match the Metadata Context schema", + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W4012", - "severity": "WARN", - "message": "'ref.1' does not match any supported shape; 'ref' must be an array whose entries are each a string or an object with required 'at'.", - "source": "ENGINE", + "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": "com.aws.cloudformation.Context", - "entityType": "Metadata" + "logicalId": "OrderQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Metadata/com.aws.cloudformation.Context/ref/1", "category": "Best Practice", - "startLine": 14, - "startColumn": 9, - "endLine": 14, - "endColumn": 10, - "ruleDescription": "Metadata Context block does not match the Metadata Context schema", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 13, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W4012", - "severity": "WARN", - "message": "'gaps' is not a recognized template-level Context field; allowed fields: arch, must, owner, ref.", - "source": "ENGINE", + "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": "com.aws.cloudformation.Context", - "entityType": "Metadata" + "logicalId": "LegacyTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Metadata/com.aws.cloudformation.Context/gaps", "category": "Best Practice", - "startLine": 15, - "startColumn": 5, - "endLine": 15, - "endColumn": 9, - "ruleDescription": "Metadata Context block does not match the Metadata Context schema", + "startLine": 27, + "startColumn": 3, + "endLine": 27, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W4012", - "severity": "WARN", - "message": "Metadata.com.aws.cloudformation.Context must be a mapping of Context fields; found a string.", - "source": "ENGINE", + "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": "Bucket", + "logicalId": "LegacyTable", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Metadata.com.aws.cloudformation.Context", "category": "Best Practice", - "startLine": 21, - "startColumn": 7, - "endLine": 21, - "endColumn": 37, - "ruleDescription": "Metadata Context block does not match the Metadata Context schema", + "startLine": 27, + "startColumn": 3, + "endLine": 27, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W4012", - "severity": "WARN", - "message": "'why' is a number; it must be a string.", - "source": "ENGINE", + "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", + "logicalId": "ServiceLogGroup", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Metadata.com.aws.cloudformation.Context.why", "category": "Best Practice", - "startLine": 26, - "startColumn": 9, - "endLine": 26, - "endColumn": 12, - "ruleDescription": "Metadata Context block does not match the Metadata Context schema", + "startLine": 43, + "startColumn": 3, + "endLine": 43, + "endColumn": 18, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W4012", - "severity": "WARN", - "message": "'must' is a string; it must be an array of strings.", - "source": "ENGINE", + "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", + "logicalId": "ServiceLogGroup", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Metadata.com.aws.cloudformation.Context.must", "category": "Best Practice", - "startLine": 27, - "startColumn": 9, - "endLine": 27, - "endColumn": 13, - "ruleDescription": "Metadata Context block does not match the Metadata Context schema", + "startLine": 43, + "startColumn": 3, + "endLine": 43, + "endColumn": 18, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W4012", - "severity": "WARN", - "message": "'mutable' value 'sometimes' is not recognized; allowed values: must-never-change, change-with-constraints, review-required, free-to-tune.", - "source": "ENGINE", + "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", + "logicalId": "OrderQueue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Metadata.com.aws.cloudformation.Context.mutable", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 28, - "startColumn": 9, - "endLine": 28, - "endColumn": 16, - "ruleDescription": "Metadata Context block does not match the Metadata Context schema", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 13, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "W4012", - "severity": "WARN", - "message": "'mutability.QueueName' value 'never-ish' is not recognized; allowed values: must-never-change, change-with-constraints, review-required, free-to-tune.", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "LegacyTable", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Metadata.com.aws.cloudformation.Context.mutability.QueueName", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", "startLine": 30, - "startColumn": 11, + "startColumn": 7, "endLine": 30, - "endColumn": 20, - "ruleDescription": "Metadata Context block does not match the Metadata Context schema", - "phase": "LINT" + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W4012", - "severity": "WARN", - "message": "'trust' is missing required field 'src'; 'trust' must be an object with required 'src' and 'conf'.", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'OrderQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "OrderQueue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Metadata.com.aws.cloudformation.Context.trust", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 31, - "startColumn": 9, - "endLine": 31, - "endColumn": 14, - "ruleDescription": "Metadata Context block does not match the Metadata Context schema", - "phase": "LINT" - }, - { - "ruleId": "W4012", - "severity": "WARN", - "message": "'trust.conf' value 'certain' is not recognized; allowed values: high, medium, low.", - "source": "ENGINE", - "entity": { - "logicalId": "Queue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Metadata.com.aws.cloudformation.Context.trust.conf", - "category": "Best Practice", - "startLine": 32, - "startColumn": 11, - "endLine": 32, - "endColumn": 15, - "ruleDescription": "Metadata Context block does not match the Metadata Context schema", - "phase": "LINT" - }, - { - "ruleId": "W4012", - "severity": "WARN", - "message": "'trust.extra' is not a recognized field of 'trust'; allowed fields: cite, conf, note, src.", - "source": "ENGINE", - "entity": { - "logicalId": "Queue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Metadata.com.aws.cloudformation.Context.trust.extra", - "category": "Best Practice", - "startLine": 33, - "startColumn": 11, - "endLine": 33, - "endColumn": 16, - "ruleDescription": "Metadata Context block does not match the Metadata Context schema", - "phase": "LINT" - }, - { - "ruleId": "W4012", - "severity": "WARN", - "message": "'ref' belongs at template level, not resource level. Template-level fields: arch, must, owner, ref; resource-level fields: deps, must, mutability, mutable, trust, why.", - "source": "ENGINE", - "entity": { - "logicalId": "Queue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Metadata.com.aws.cloudformation.Context.ref", - "category": "Best Practice", - "startLine": 34, - "startColumn": 9, - "endLine": 34, - "endColumn": 12, - "ruleDescription": "Metadata Context block does not match the Metadata Context schema", - "phase": "LINT" - }, - { - "ruleId": "W4012", - "severity": "WARN", - "message": "'unknown' is not a recognized resource-level Context field; allowed fields: deps, must, mutability, mutable, trust, why.", - "source": "ENGINE", - "entity": { - "logicalId": "Queue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Metadata.com.aws.cloudformation.Context.unknown", - "category": "Best Practice", - "startLine": 35, - "startColumn": 9, - "endLine": 35, - "endColumn": 16, - "ruleDescription": "Metadata Context block does not match the Metadata Context schema", - "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": 22, - "startColumn": 3, - "endLine": 22, - "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": 22, + "startLine": 11, "startColumn": 3, - "endLine": 22, - "endColumn": 8, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 11, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "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", + "message": "Resource 'Notifier' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "Notifier", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 22, + "startLine": 18, "startColumn": 3, - "endLine": 22, - "endColumn": 8, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "endLine": 18, + "endColumn": 11, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'LegacyTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "LegacyTable", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 18, - "startColumn": 3, - "endLine": 18, - "endColumn": 9, + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 15, "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", + "message": "Resource 'ServiceLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "ServiceLogGroup", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::Logs::LogGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 22, - "startColumn": 3, - "endLine": 22, - "endColumn": 8, + "startLine": 45, + "startColumn": 5, + "endLine": 45, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/W4012_resource_context_intrinsics.yaml": { - "filePath": "bad/W4012_resource_context_intrinsics.yaml", + "bad/W4012_context_schema_violation.yaml": { + "filePath": "bad/W4012_context_schema_violation.yaml", "status": "OK", "metadata": { - "resourcesScanned": 4, + "resourcesScanned": 2, "counts": { "fatal": 0, "errors": 0, - "warnings": 5, - "informational": 16, + "warnings": 16, + "informational": 5, "debug": 0 }, "suppressed": 0, @@ -10993,299 +12016,339 @@ }, "diagnostics": [ { - "ruleId": "W4012", + "ruleId": "W4011", "severity": "WARN", - "message": "Metadata.com.aws.cloudformation.Context uses intrinsic function 'Fn::If'; it must match the Context schema directly.", + "message": "Metadata.com.aws.cloudformation.Context has no 'why' and no trust declaration with conf 'low'.", "source": "ENGINE", "entity": { - "logicalId": "ConditionalContextQueue", + "logicalId": "Queue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, "propertyPath": "Metadata.com.aws.cloudformation.Context", + "suggestedFix": "Add 'why' stating the resource's purpose and notable design choices without restating its type or property values, or set trust to {src: infer, conf: low, note: \"rationale not documented\"} when the rationale is unknown.", "category": "Best Practice", - "startLine": 18, + "startLine": 25, "startColumn": 7, - "endLine": 18, + "endLine": 25, "endColumn": 37, - "ruleDescription": "Metadata Context block does not match the Metadata Context schema", + "ruleDescription": "Metadata Context block has no 'why' rationale and no low-confidence trust declaration", "phase": "LINT" }, { "ruleId": "W4012", "severity": "WARN", - "message": "'why' uses intrinsic function 'Fn::Sub'; 'why' must be a string.", + "message": "'arch' is an array; it must be a string.", "source": "ENGINE", "entity": { - "logicalId": "IntrinsicFieldQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" }, - "propertyPath": "Metadata.com.aws.cloudformation.Context.why", + "propertyPath": "Metadata/com.aws.cloudformation.Context/arch", "category": "Best Practice", - "startLine": 26, - "startColumn": 9, - "endLine": 26, - "endColumn": 12, + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 9, "ruleDescription": "Metadata Context block does not match the Metadata Context schema", "phase": "LINT" }, { "ruleId": "W4012", "severity": "WARN", - "message": "'must.0' uses intrinsic function 'Fn::Sub'; 'must' must be an array of strings.", + "message": "'why' belongs at resource level, not template level. Template-level fields: arch, must, owner, ref; resource-level fields: deps, must, mutability, mutable, trust, why.", "source": "ENGINE", "entity": { - "logicalId": "IntrinsicFieldQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" }, - "propertyPath": "Metadata.com.aws.cloudformation.Context.must.0", + "propertyPath": "Metadata/com.aws.cloudformation.Context/why", "category": "Best Practice", - "startLine": 28, - "startColumn": 18, - "endLine": 28, - "endColumn": 19, + "startLine": 11, + "startColumn": 5, + "endLine": 11, + "endColumn": 8, "ruleDescription": "Metadata Context block does not match the Metadata Context schema", "phase": "LINT" }, { "ruleId": "W4012", "severity": "WARN", - "message": "'mutability' uses intrinsic function 'Fn::Sub'; 'mutability' must be a mapping of property name to one of: must-never-change, change-with-constraints, review-required, free-to-tune.", + "message": "'ref.0' is missing required field 'at'; 'ref' must be an array whose entries are each a string or an object with required 'at'.", "source": "ENGINE", "entity": { - "logicalId": "SubMutabilityQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" }, - "propertyPath": "Metadata.com.aws.cloudformation.Context.mutability", + "propertyPath": "Metadata/com.aws.cloudformation.Context/ref/0", "category": "Best Practice", - "startLine": 37, - "startColumn": 9, - "endLine": 37, - "endColumn": 19, + "startLine": 13, + "startColumn": 12, + "endLine": 13, + "endColumn": 13, "ruleDescription": "Metadata Context block does not match the Metadata Context schema", "phase": "LINT" }, { "ruleId": "W4012", "severity": "WARN", - "message": "'mutability' uses intrinsic function 'Fn::If'; 'mutability' must be a mapping of property name to one of: must-never-change, change-with-constraints, review-required, free-to-tune.", + "message": "'ref.1' does not match any supported shape; 'ref' must be an array whose entries are each a string or an object with required 'at'.", "source": "ENGINE", "entity": { - "logicalId": "ConditionalMutabilityQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" }, - "propertyPath": "Metadata.com.aws.cloudformation.Context.mutability", + "propertyPath": "Metadata/com.aws.cloudformation.Context/ref/1", "category": "Best Practice", - "startLine": 43, + "startLine": 14, "startColumn": 9, - "endLine": 43, - "endColumn": 19, + "endLine": 14, + "endColumn": 10, "ruleDescription": "Metadata Context block does not match the Metadata Context schema", "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", + "ruleId": "W4012", + "severity": "WARN", + "message": "'gaps' is not a recognized template-level Context field; allowed fields: arch, must, owner, ref.", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalContextQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" }, + "propertyPath": "Metadata/com.aws.cloudformation.Context/gaps", "category": "Best Practice", "startLine": 15, - "startColumn": 3, + "startColumn": 5, "endLine": 15, - "endColumn": 26, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endColumn": 9, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", "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", + "ruleId": "W4012", + "severity": "WARN", + "message": "Metadata.com.aws.cloudformation.Context must be a mapping of Context fields; found a string.", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalContextQueue", + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata.com.aws.cloudformation.Context", + "category": "Best Practice", + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 37, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", + "phase": "LINT" + }, + { + "ruleId": "W4012", + "severity": "WARN", + "message": "'why' is a number; it must be a string.", + "source": "ENGINE", + "entity": { + "logicalId": "Queue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, + "propertyPath": "Metadata.com.aws.cloudformation.Context.why", "category": "Best Practice", - "startLine": 15, - "startColumn": 3, - "endLine": 15, - "endColumn": 26, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 26, + "startColumn": 9, + "endLine": 26, + "endColumn": 12, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", "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", + "ruleId": "W4012", + "severity": "WARN", + "message": "'must' is a string; it must be an array of strings.", + "source": "ENGINE", "entity": { - "logicalId": "IntrinsicFieldQueue", + "logicalId": "Queue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, + "propertyPath": "Metadata.com.aws.cloudformation.Context.must", "category": "Best Practice", - "startLine": 22, - "startColumn": 3, - "endLine": 22, - "endColumn": 22, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 27, + "startColumn": 9, + "endLine": 27, + "endColumn": 13, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", "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", + "ruleId": "W4012", + "severity": "WARN", + "message": "'mutable' value 'sometimes' is not recognized; allowed values: must-never-change, change-with-constraints, review-required, free-to-tune.", + "source": "ENGINE", "entity": { - "logicalId": "IntrinsicFieldQueue", + "logicalId": "Queue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, + "propertyPath": "Metadata.com.aws.cloudformation.Context.mutable", "category": "Best Practice", - "startLine": 22, - "startColumn": 3, - "endLine": 22, - "endColumn": 22, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 28, + "startColumn": 9, + "endLine": 28, + "endColumn": 16, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", "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", + "ruleId": "W4012", + "severity": "WARN", + "message": "'mutability.QueueName' value 'never-ish' is not recognized; allowed values: must-never-change, change-with-constraints, review-required, free-to-tune.", + "source": "ENGINE", "entity": { - "logicalId": "SubMutabilityQueue", + "logicalId": "Queue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, + "propertyPath": "Metadata.com.aws.cloudformation.Context.mutability.QueueName", "category": "Best Practice", - "startLine": 32, - "startColumn": 3, - "endLine": 32, - "endColumn": 21, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 30, + "startColumn": 11, + "endLine": 30, + "endColumn": 20, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", "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", + "ruleId": "W4012", + "severity": "WARN", + "message": "'trust' is missing required field 'src'; 'trust' must be an object with required 'src' and 'conf'.", + "source": "ENGINE", "entity": { - "logicalId": "SubMutabilityQueue", + "logicalId": "Queue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Metadata.com.aws.cloudformation.Context.trust", + "category": "Best Practice", + "startLine": 31, + "startColumn": 9, + "endLine": 31, + "endColumn": 14, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", + "phase": "LINT" + }, + { + "ruleId": "W4012", + "severity": "WARN", + "message": "'trust.conf' value 'certain' is not recognized; allowed values: high, medium, low.", + "source": "ENGINE", + "entity": { + "logicalId": "Queue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, + "propertyPath": "Metadata.com.aws.cloudformation.Context.trust.conf", "category": "Best Practice", "startLine": 32, - "startColumn": 3, + "startColumn": 11, "endLine": 32, - "endColumn": 21, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endColumn": 15, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", "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", + "ruleId": "W4012", + "severity": "WARN", + "message": "'trust.extra' is not a recognized field of 'trust'; allowed fields: cite, conf, note, src.", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalMutabilityQueue", + "logicalId": "Queue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, + "propertyPath": "Metadata.com.aws.cloudformation.Context.trust.extra", "category": "Best Practice", - "startLine": 38, - "startColumn": 3, - "endLine": 38, - "endColumn": 29, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 33, + "startColumn": 11, + "endLine": 33, + "endColumn": 16, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", "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", + "ruleId": "W4012", + "severity": "WARN", + "message": "'ref' belongs at template level, not resource level. Template-level fields: arch, must, owner, ref; resource-level fields: deps, must, mutability, mutable, trust, why.", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalMutabilityQueue", + "logicalId": "Queue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, + "propertyPath": "Metadata.com.aws.cloudformation.Context.ref", "category": "Best Practice", - "startLine": 38, - "startColumn": 3, - "endLine": 38, - "endColumn": 29, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 34, + "startColumn": 9, + "endLine": 34, + "endColumn": 12, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", "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", + "ruleId": "W4012", + "severity": "WARN", + "message": "'unknown' is not a recognized resource-level Context field; allowed fields: deps, must, mutability, mutable, trust, why.", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalContextQueue", + "logicalId": "Queue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties", + "propertyPath": "Metadata.com.aws.cloudformation.Context.unknown", "category": "Best Practice", - "startLine": 15, - "startColumn": 3, - "endLine": 15, - "endColumn": 26, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "startLine": 35, + "startColumn": 9, + "endLine": 35, + "endColumn": 16, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I3011", "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)", + "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": "IntrinsicFieldQueue", + "logicalId": "Queue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties", "category": "Best Practice", "startLine": 22, "startColumn": 3, "endLine": 22, - "endColumn": 22, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "endColumn": 8, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I3011", "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)", + "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": "SubMutabilityQueue", + "logicalId": "Queue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties", "category": "Best Practice", - "startLine": 32, + "startLine": 22, "startColumn": 3, - "endLine": 32, - "endColumn": 21, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "endLine": 22, + "endColumn": 8, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { @@ -11294,46 +12357,46 @@ "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": "ConditionalMutabilityQueue", + "logicalId": "Queue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, "propertyPath": "Properties", "category": "Best Practice", - "startLine": 38, + "startLine": 22, "startColumn": 3, - "endLine": 38, - "endColumn": 29, + "endLine": 22, + "endColumn": 8, "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ConditionalContextQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConditionalContextQueue", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 15, + "startLine": 18, "startColumn": 3, - "endLine": 15, - "endColumn": 26, + "endLine": 18, + "endColumn": 9, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'IntrinsicFieldQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Resource 'Queue' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "IntrinsicFieldQueue", + "logicalId": "Queue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, @@ -11343,102 +12406,121 @@ "startLine": 22, "startColumn": 3, "endLine": 22, - "endColumn": 22, + "endColumn": 8, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/W4012_resource_context_intrinsics.yaml": { + "filePath": "bad/W4012_resource_context_intrinsics.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 5, + "informational": 16, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SubMutabilityQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "ruleId": "W4012", + "severity": "WARN", + "message": "Metadata.com.aws.cloudformation.Context uses intrinsic function 'Fn::If'; it must match the Context schema directly.", "source": "ENGINE", "entity": { - "logicalId": "SubMutabilityQueue", + "logicalId": "ConditionalContextQueue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Metadata.com.aws.cloudformation.Context", "category": "Best Practice", - "startLine": 32, - "startColumn": 3, - "endLine": 32, - "endColumn": 21, - "ruleDescription": "Resource should have Tags", + "startLine": 18, + "startColumn": 7, + "endLine": 18, + "endColumn": 37, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ConditionalMutabilityQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "ruleId": "W4012", + "severity": "WARN", + "message": "'why' uses intrinsic function 'Fn::Sub'; 'why' must be a string.", "source": "ENGINE", "entity": { - "logicalId": "ConditionalMutabilityQueue", + "logicalId": "IntrinsicFieldQueue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Metadata.com.aws.cloudformation.Context.why", "category": "Best Practice", - "startLine": 38, - "startColumn": 3, - "endLine": 38, - "endColumn": 29, - "ruleDescription": "Resource should have Tags", + "startLine": 26, + "startColumn": 9, + "endLine": 26, + "endColumn": 12, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", "phase": "LINT" - } - ] - }, - "bad/W4012_template_context_intrinsic.yaml": { - "filePath": "bad/W4012_template_context_intrinsic.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 4, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W2001", + "ruleId": "W4012", "severity": "WARN", - "message": "Parameter 'Environment' is not referenced anywhere in the template", - "source": "CFN_LINT", + "message": "'must.0' uses intrinsic function 'Fn::Sub'; 'must' must be an array of strings.", + "source": "ENGINE", "entity": { - "logicalId": "Environment", - "entityType": "Parameter" + "logicalId": "IntrinsicFieldQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Parameters/Environment", + "propertyPath": "Metadata.com.aws.cloudformation.Context.must.0", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "startLine": 28, + "startColumn": 18, + "endLine": 28, + "endColumn": 19, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", "phase": "LINT" }, { "ruleId": "W4012", "severity": "WARN", - "message": "'arch' uses intrinsic function 'Fn::Sub'; 'arch' must be a string.", + "message": "'mutability' uses intrinsic function 'Fn::Sub'; 'mutability' must be a mapping of property name to one of: must-never-change, change-with-constraints, review-required, free-to-tune.", "source": "ENGINE", "entity": { - "logicalId": "com.aws.cloudformation.Context", - "entityType": "Metadata" + "logicalId": "SubMutabilityQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Metadata/com.aws.cloudformation.Context/arch", + "propertyPath": "Metadata.com.aws.cloudformation.Context.mutability", "category": "Best Practice", - "startLine": 11, - "startColumn": 5, - "endLine": 11, - "endColumn": 9, + "startLine": 37, + "startColumn": 9, + "endLine": 37, + "endColumn": 19, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", + "phase": "LINT" + }, + { + "ruleId": "W4012", + "severity": "WARN", + "message": "'mutability' uses intrinsic function 'Fn::If'; 'mutability' must be a mapping of property name to one of: must-never-change, change-with-constraints, review-required, free-to-tune.", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalMutabilityQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Metadata.com.aws.cloudformation.Context.mutability", + "category": "Best Practice", + "startLine": 43, + "startColumn": 9, + "endLine": 43, + "endColumn": 19, "ruleDescription": "Metadata Context block does not match the Metadata Context schema", "phase": "LINT" }, @@ -11448,15 +12530,15 @@ "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", + "logicalId": "ConditionalContextQueue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, "category": "Best Practice", - "startLine": 13, + "startLine": 15, "startColumn": 3, - "endLine": 13, - "endColumn": 8, + "endLine": 15, + "endColumn": 26, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -11466,362 +12548,294 @@ "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", + "logicalId": "ConditionalContextQueue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, "category": "Best Practice", - "startLine": 13, + "startLine": 15, "startColumn": 3, - "endLine": 13, - "endColumn": 8, + "endLine": 15, + "endColumn": 26, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I3011", "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)", + "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", + "logicalId": "IntrinsicFieldQueue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties", "category": "Best Practice", - "startLine": 13, + "startLine": 22, "startColumn": 3, - "endLine": 13, - "endColumn": 8, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "endLine": 22, + "endColumn": 22, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'Queue' of type 'AWS::SQS::Queue' supports Tags but none are configured", - "source": "ENGINE", + "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", + "logicalId": "IntrinsicFieldQueue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 13, + "startLine": 22, "startColumn": 3, - "endLine": 13, - "endColumn": 8, - "ruleDescription": "Resource should have Tags", + "endLine": 22, + "endColumn": 22, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "bad/W9006_every_allowed_value_too_long.json": { - "filePath": "bad/W9006_every_allowed_value_too_long.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W9006", - "severity": "WARN", - "message": "String length 78 exceeds maximum 63 for property 'BucketName'", - "source": "ENGINE", + "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": "Bucket", + "logicalId": "SubMutabilityQueue", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 14, - "startColumn": 23, - "endLine": 14, - "endColumn": 34, - "ruleDescription": "String length estimation through Fn::Sub", - "phase": "LINT", - "context": { - "actualValue": "this-allowed-value-is-deliberately-longer-than-the-sixty-three-character-limit", - "extra": { - "actual_length": 78 - } - } + "startLine": 32, + "startColumn": 3, + "endLine": 32, + "endColumn": 21, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "Bucket", + "logicalId": "SubMutabilityQueue", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 14, - "startColumn": 23, - "endLine": 14, - "endColumn": 34, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" - } + "startLine": 32, + "startColumn": 3, + "endLine": 32, + "endColumn": 21, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "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": "Bucket", + "logicalId": "ConditionalMutabilityQueue", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", + "startLine": 38, + "startColumn": 3, + "endLine": 38, + "endColumn": 29, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "bad/W9007_duplicate_objects_different_key_order.yaml": { - "filePath": "bad/W9007_duplicate_objects_different_key_order.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 1, - "informational": 3, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3037", - "severity": "FATAL", - "message": "Array items are not unique", - "source": "SCHEMA", + "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": "Task", + "logicalId": "ConditionalMutabilityQueue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.PlacementConstraints", - "category": "Schema", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Array items not unique", - "phase": "SCHEMA", - "context": { - "actualValue": [ - { - "Type": "memberOf", - "Expression": "attribute:ecs.instance-type =~ t3.*" - }, - { - "Expression": "attribute:ecs.instance-type =~ t3.*", - "Type": "memberOf" - } - ] - } + "category": "Best Practice", + "startLine": 38, + "startColumn": 3, + "endLine": 38, + "endColumn": 29, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "W9007", - "severity": "WARN", - "message": "Array property 'PlacementConstraints' contains duplicate values", - "source": "ENGINE", + "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": "Task", + "logicalId": "ConditionalContextQueue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.PlacementConstraints", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 27, - "ruleDescription": "Array items must be unique when required", + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 26, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "Task", + "logicalId": "IntrinsicFieldQueue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 22, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'PlacementConstraints' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "Task", + "logicalId": "SubMutabilityQueue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.PlacementConstraints", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 32, + "startColumn": 3, + "endLine": 32, + "endColumn": 21, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "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": "ConditionalMutabilityQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 38, + "startColumn": 3, + "endLine": 38, + "endColumn": 29, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Task' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'ConditionalContextQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Task", + "logicalId": "ConditionalContextQueue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::SQS::Queue" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 26, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/W9053_equivalent_conditions.yaml": { - "filePath": "bad/W9053_equivalent_conditions.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'IsProd' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'IntrinsicFieldQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "IsProd", - "entityType": "Condition" + "logicalId": "IntrinsicFieldQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Conditions/IsProd", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 8, + "startLine": 22, "startColumn": 3, - "endLine": 8, - "endColumn": 9, - "ruleDescription": "Check if Conditions are Used", + "endLine": 22, + "endColumn": 22, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W9053", - "severity": "WARN", - "message": "Condition 'IsProduction' is equivalent to condition 'IsProd' - consider consolidating", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SubMutabilityQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", + "entity": { + "logicalId": "SubMutabilityQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, + "startLine": 32, "startColumn": 3, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Conditions are semantically equivalent and can be consolidated", - "phase": "PARSE" + "endLine": 32, + "endColumn": 21, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'ConditionalMutabilityQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "ConditionalMutabilityQueue", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SQS::Queue" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 11, + "startLine": 38, "startColumn": 3, - "endLine": 11, - "endColumn": 9, + "endLine": 38, + "endColumn": 29, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/aurora_with_allocated_storage.yaml": { - "filePath": "bad/aurora_with_allocated_storage.yaml", + "bad/W4012_template_context_intrinsic.yaml": { + "filePath": "bad/W4012_template_context_intrinsic.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, - "warnings": 1, - "informational": 6, + "warnings": 2, + "informational": 4, "debug": 0 }, "suppressed": 0, @@ -11830,24 +12844,40 @@ }, "diagnostics": [ { - "ruleId": "W9003", + "ruleId": "W2001", "severity": "WARN", - "message": "100 is not of type 'string' - automatically coerced (number to string)", + "message": "Parameter 'Environment' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "AuroraDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "Environment", + "entityType": "Parameter" }, - "propertyPath": "Properties.AllocatedStorage", + "propertyPath": "Parameters/Environment", "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 14, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "W4012", + "severity": "WARN", + "message": "'arch' uses intrinsic function 'Fn::Sub'; 'arch' must be a string.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context/arch", + "category": "Best Practice", + "startLine": 11, + "startColumn": 5, + "endLine": 11, + "endColumn": 9, + "ruleDescription": "Metadata Context block does not match the Metadata Context schema", + "phase": "LINT" }, { "ruleId": "I3011", @@ -11855,15 +12885,15 @@ "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": "AuroraDB", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::SQS::Queue" }, "category": "Best Practice", - "startLine": 3, + "startLine": 13, "startColumn": 3, - "endLine": 3, - "endColumn": 11, + "endLine": 13, + "endColumn": 8, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -11873,105 +12903,156 @@ "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": "AuroraDB", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::SQS::Queue" }, "category": "Best Practice", - "startLine": 3, + "startLine": 13, "startColumn": 3, - "endLine": 3, - "endColumn": 11, + "endLine": 13, + "endColumn": 8, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "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", + "message": "Resource 'Queue' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AuroraDB", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 8, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/W9006_every_allowed_value_too_long.json": { + "filePath": "bad/W9006_every_allowed_value_too_long.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W9006", + "severity": "WARN", + "message": "String length 78 exceeds maximum 63 for property 'BucketName'", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.BucketName", + "category": "Best Practice", + "startLine": 14, + "startColumn": 23, + "endLine": 14, + "endColumn": 34, + "ruleDescription": "String length estimation through Fn::Sub", + "phase": "LINT", "context": { - "lifecycle": "conditional-create-only" + "actualValue": "this-allowed-value-is-deliberately-longer-than-the-sixty-three-character-limit", + "extra": { + "actual_length": 78 + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AuroraDB", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.DBClusterIdentifier", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 14, + "startColumn": 23, + "endLine": 14, + "endColumn": 34, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'AuroraDB' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AuroraDB", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/cloudfront_bad_alias.yaml": { - "filePath": "bad/cloudfront_bad_alias.yaml", + "bad/W9007_duplicate_objects_different_key_order.yaml": { + "filePath": "bad/W9007_duplicate_objects_different_key_order.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 1, + "fatal": 1, + "errors": 0, + "warnings": 1, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -11980,33 +13061,111 @@ }, "diagnostics": [ { - "ruleId": "E3013", - "severity": "ERROR", - "message": "CloudFront alias 'not a valid domain' is not a valid domain name", - "source": "CFN_LINT", + "ruleId": "F3037", + "severity": "FATAL", + "message": "Array items are not unique", + "source": "SCHEMA", "entity": { - "logicalId": "Dist", + "logicalId": "Task", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.DistributionConfig.Aliases.0", - "category": "Resource", - "startLine": 8, - "startColumn": 13, - "endLine": 8, - "endColumn": 14, - "ruleDescription": "CloudFront Aliases", + "propertyPath": "Properties.PlacementConstraints", + "category": "Schema", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Array items not unique", + "phase": "SCHEMA", + "context": { + "actualValue": [ + { + "Type": "memberOf", + "Expression": "attribute:ecs.instance-type =~ t3.*" + }, + { + "Expression": "attribute:ecs.instance-type =~ t3.*", + "Type": "memberOf" + } + ] + } + }, + { + "ruleId": "W9007", + "severity": "WARN", + "message": "Array property 'PlacementConstraints' contains duplicate values", + "source": "ENGINE", + "entity": { + "logicalId": "Task", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.PlacementConstraints", + "category": "Best Practice", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 27, + "ruleDescription": "Array items must be unique when required", "phase": "LINT" }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Task", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'PlacementConstraints' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Task", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.PlacementConstraints", + "category": "Best Practice", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Dist' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", + "message": "Resource 'Task' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Dist", + "logicalId": "Task", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -12020,15 +13179,15 @@ } ] }, - "bad/cloudfront_bad_origin.yaml": { - "filePath": "bad/cloudfront_bad_origin.yaml", + "bad/W9053_equivalent_conditions.yaml": { + "filePath": "bad/W9053_equivalent_conditions.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 1, - "warnings": 0, + "errors": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -12038,57 +13197,68 @@ }, "diagnostics": [ { - "ruleId": "E3057", - "severity": "ERROR", - "message": "TargetOriginId 'NonExistentOrigin' does not match any Origin Id in the distribution", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'IsProd' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "Distribution", - "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "logicalId": "IsProd", + "entityType": "Condition" }, - "propertyPath": "Properties.DistributionConfig.DefaultCacheBehavior.TargetOriginId", - "suggestedFix": "Set TargetOriginId to match one of the Origin Ids defined in Origins", - "category": "Resource", - "startLine": 13, - "startColumn": 11, - "endLine": 13, - "endColumn": 25, - "ruleDescription": "Validate that CloudFront TargetOriginId is a specified Origin", + "propertyPath": "Conditions/IsProd", + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 9, + "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, + { + "ruleId": "W9053", + "severity": "WARN", + "message": "Condition 'IsProduction' is equivalent to condition 'IsProd' - consider consolidating", + "source": "ENGINE", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Conditions are semantically equivalent and can be consolidated", + "phase": "PARSE" + }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Distribution' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Distribution", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 9, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/codepipeline_bad_artifact_counts.yaml": { - "filePath": "bad/codepipeline_bad_artifact_counts.yaml", + "bad/aurora_with_allocated_storage.yaml": { + "filePath": "bad/aurora_with_allocated_storage.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 1, - "errors": 1, + "fatal": 0, + "errors": 0, "warnings": 1, - "informational": 1, + "informational": 6, "debug": 0 }, "suppressed": 0, @@ -12097,76 +13267,130 @@ }, "diagnostics": [ { - "ruleId": "F3014", - "severity": "FATAL", - "message": "Exactly one of ['ArtifactStore', 'ArtifactStores'] must be specified", - "source": "SCHEMA", + "ruleId": "W9003", + "severity": "WARN", + "message": "100 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "Pipeline", + "logicalId": "AuroraDB", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties", - "category": "Schema", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", - "ruleDescription": "Exactly one of properties required (requiredXor)", + "propertyPath": "Properties.AllocatedStorage", + "category": "Best Practice", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Property type coercion warning", "phase": "SCHEMA" }, { - "ruleId": "E3702", - "severity": "ERROR", - "message": "Action 'BuildAction' (AWS/Build/CodeBuild) has 0 input artifacts, expected at least 1", + "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": "Pipeline", + "logicalId": "AuroraDB", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::RDS::DBInstance" }, - "category": "Resource", + "category": "Best Practice", "startLine": 3, "startColumn": 3, "endLine": 3, "endColumn": 11, - "ruleDescription": "Validate the number of input and output artifacts in a CodePipeline", + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", - "source": "ENGINE", + "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": "Pipeline", + "logicalId": "AuroraDB", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.RoleArn", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 14, - "ruleDescription": "Hardcoded ARN property", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Pipeline' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Pipeline", + "logicalId": "AuroraDB", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 5, + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AuroraDB", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.DBClusterIdentifier", + "category": "Best Practice", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'AuroraDB' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "AuroraDB", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, "startColumn": 5, "endLine": 5, "endColumn": 15, @@ -12175,15 +13399,132 @@ } ] }, - "bad/codepipeline_bad_artifacts.yaml": { - "filePath": "bad/codepipeline_bad_artifacts.yaml", + "bad/cloudfront_bad_alias.yaml": { + "filePath": "bad/cloudfront_bad_alias.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3013", + "severity": "ERROR", + "message": "CloudFront alias 'not a valid domain' is not a valid domain name", + "source": "CFN_LINT", + "entity": { + "logicalId": "Dist", + "entityType": "Resource", + "resourceType": "AWS::CloudFront::Distribution" + }, + "propertyPath": "Properties.DistributionConfig.Aliases.0", + "category": "Resource", + "startLine": 8, + "startColumn": 13, + "endLine": 8, + "endColumn": 14, + "ruleDescription": "CloudFront Aliases", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Dist' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Dist", + "entityType": "Resource", + "resourceType": "AWS::CloudFront::Distribution" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/cloudfront_bad_origin.yaml": { + "filePath": "bad/cloudfront_bad_origin.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3057", + "severity": "ERROR", + "message": "TargetOriginId 'NonExistentOrigin' does not match any Origin Id in the distribution", + "source": "CFN_LINT", + "entity": { + "logicalId": "Distribution", + "entityType": "Resource", + "resourceType": "AWS::CloudFront::Distribution" + }, + "propertyPath": "Properties.DistributionConfig.DefaultCacheBehavior.TargetOriginId", + "suggestedFix": "Set TargetOriginId to match one of the Origin Ids defined in Origins", + "category": "Resource", + "startLine": 13, + "startColumn": 11, + "endLine": 13, + "endColumn": 25, + "ruleDescription": "Validate that CloudFront TargetOriginId is a specified Origin", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Distribution' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Distribution", + "entityType": "Resource", + "resourceType": "AWS::CloudFront::Distribution" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/codepipeline_bad_artifact_counts.yaml": { + "filePath": "bad/codepipeline_bad_artifact_counts.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 1, "errors": 1, - "warnings": 2, + "warnings": 1, "informational": 1, "debug": 0 }, @@ -12213,9 +13554,9 @@ "phase": "SCHEMA" }, { - "ruleId": "E3701", + "ruleId": "E3702", "severity": "ERROR", - "message": "InputArtifact 'NonExistentArtifact' in stage 'Build' action 'BuildAction' does not reference a previously defined OutputArtifact", + "message": "Action 'BuildAction' (AWS/Build/CodeBuild) has 0 input artifacts, expected at least 1", "source": "CFN_LINT", "entity": { "logicalId": "Pipeline", @@ -12227,7 +13568,7 @@ "startColumn": 3, "endLine": 3, "endColumn": 11, - "ruleDescription": "Validate input and output artifact names are used properly", + "ruleDescription": "Validate the number of input and output artifacts in a CodePipeline", "phase": "LINT" }, { @@ -12249,24 +13590,6 @@ "ruleDescription": "Hardcoded ARN property", "phase": "LINT" }, - { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", - "entity": { - "logicalId": "Pipeline", - "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" - }, - "category": "Security", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" - }, { "ruleId": "I9040", "severity": "INFO", @@ -12289,16 +13612,16 @@ } ] }, - "bad/conditions.yaml": { - "filePath": "bad/conditions.yaml", + "bad/codepipeline_bad_artifacts.yaml": { + "filePath": "bad/codepipeline_bad_artifacts.yaml", "status": "OK", "metadata": { - "resourcesScanned": 4, + "resourcesScanned": 1, "counts": { - "fatal": 5, - "errors": 7, - "warnings": 10, - "informational": 8, + "fatal": 1, + "errors": 1, + "warnings": 2, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -12307,45 +13630,159 @@ }, "diagnostics": [ { - "ruleId": "F3002", + "ruleId": "F3014", "severity": "FATAL", - "message": "Additional properties are not allowed ('BadKey' was unexpected)", + "message": "Exactly one of ['ArtifactStore', 'ArtifactStores'] must be specified", "source": "SCHEMA", "entity": { - "logicalId": "EC2Instance", + "logicalId": "Pipeline", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties.Tags.1.BadKey", + "propertyPath": "Properties", "category": "Schema", - "startLine": 60, - "startColumn": 17, - "endLine": 60, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Additional properties are not allowed", - "phase": "SCHEMA", - "context": { - "property": "BadKey", - "extra": { - "allowed_properties": [ - "AdditionalInfo", - "Affinity", - "AvailabilityZone", - "BlockDeviceMappings", - "CpuOptions", - "CreditSpecification", - "DisableApiTermination", - "EbsOptimized", - "ElasticGpuSpecifications", - "ElasticInferenceAccelerators", - "EnclaveOptions", - "HibernationOptions", - "HostId", - "HostResourceGroupArn", - "IamInstanceProfile", - "ImageId", - "InstanceId", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", + "ruleDescription": "Exactly one of properties required (requiredXor)", + "phase": "SCHEMA" + }, + { + "ruleId": "E3701", + "severity": "ERROR", + "message": "InputArtifact 'NonExistentArtifact' in stage 'Build' action 'BuildAction' does not reference a previously defined OutputArtifact", + "source": "CFN_LINT", + "entity": { + "logicalId": "Pipeline", + "entityType": "Resource", + "resourceType": "AWS::CodePipeline::Pipeline" + }, + "category": "Resource", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Validate input and output artifact names are used properly", + "phase": "LINT" + }, + { + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", + "entity": { + "logicalId": "Pipeline", + "entityType": "Resource", + "resourceType": "AWS::CodePipeline::Pipeline" + }, + "propertyPath": "Properties.RoleArn", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 14, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "Pipeline", + "entityType": "Resource", + "resourceType": "AWS::CodePipeline::Pipeline" + }, + "category": "Security", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Pipeline' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Pipeline", + "entityType": "Resource", + "resourceType": "AWS::CodePipeline::Pipeline" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/conditions.yaml": { + "filePath": "bad/conditions.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 5, + "errors": 7, + "warnings": 10, + "informational": 8, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3002", + "severity": "FATAL", + "message": "Additional properties are not allowed ('BadKey' was unexpected)", + "source": "SCHEMA", + "entity": { + "logicalId": "EC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.Tags.1.BadKey", + "category": "Schema", + "startLine": 60, + "startColumn": 17, + "endLine": 60, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Additional properties are not allowed", + "phase": "SCHEMA", + "context": { + "property": "BadKey", + "extra": { + "allowed_properties": [ + "AdditionalInfo", + "Affinity", + "AvailabilityZone", + "BlockDeviceMappings", + "CpuOptions", + "CreditSpecification", + "DisableApiTermination", + "EbsOptimized", + "ElasticGpuSpecifications", + "ElasticInferenceAccelerators", + "EnclaveOptions", + "HibernationOptions", + "HostId", + "HostResourceGroupArn", + "IamInstanceProfile", + "ImageId", + "InstanceId", "InstanceInitiatedShutdownBehavior", "InstanceType", "Ipv6AddressCount", @@ -17508,1341 +18945,71 @@ "entityType": "Resource", "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.MaxSize", - "category": "Resource", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 14, - "ruleDescription": "MaxSize must be greater than or equal to MinSize", - "phase": "LINT" - }, - { - "ruleId": "W3697", - "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", - "source": "CFN_LINT", - "entity": { - "logicalId": "LC", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "category": "Deprecation", - "startLine": 11, - "startColumn": 3, - "endLine": 11, - "endColumn": 5, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "10 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", - "entity": { - "logicalId": "BadASG", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties.MinSize", - "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 14, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "5 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", - "entity": { - "logicalId": "BadASG", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties.MaxSize", - "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 14, - "ruleDescription": "Property type coercion warning", - "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": "BadValkey", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" - }, - "category": "Best Practice", - "startLine": 67, - "startColumn": 3, - "endLine": 67, - "endColumn": 12, - "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": "BadValkey", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" - }, - "category": "Best Practice", - "startLine": 67, - "startColumn": 3, - "endLine": 67, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" - }, - { - "ruleId": "I3042", - "severity": "INFO", - "message": "ARN in Resource BadEnvLambda contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", - "source": "CFN_LINT", - "entity": { - "logicalId": "BadEnvLambda", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Role.Fn::Sub", - "category": "Best Practice", - "startLine": 45, - "startColumn": 7, - "endLine": 45, - "endColumn": 14, - "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", - "phase": "LINT" - }, - { - "ruleId": "I3042", - "severity": "INFO", - "message": "ARN in Resource BadImageLambda contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", - "source": "CFN_LINT", - "entity": { - "logicalId": "BadImageLambda", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Role.Fn::Sub", - "category": "Best Practice", - "startLine": 58, - "startColumn": 7, - "endLine": 58, - "endColumn": 14, - "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BadASG", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties.LaunchConfigurationName", - "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 30, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'LC'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LC", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LC", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 15, - "startColumn": 7, - "endLine": 15, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BadListener", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" - }, - "propertyPath": "Properties.LoadBalancerArn", - "category": "Best Practice", - "startLine": 20, - "startColumn": 7, - "endLine": 20, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ALB'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TG", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" - }, - "propertyPath": "Properties.Port", - "category": "Best Practice", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TG", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" - }, - "propertyPath": "Properties.Protocol", - "category": "Best Practice", - "startLine": 36, - "startColumn": 7, - "endLine": 36, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TG", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 37, - "startColumn": 7, - "endLine": 37, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BadEnvLambda", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 42, - "startColumn": 7, - "endLine": 42, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BadImageLambda", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 55, - "startColumn": 7, - "endLine": 55, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PackageType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BadImageLambda", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.PackageType", - "category": "Best Practice", - "startLine": 56, - "startColumn": 7, - "endLine": 56, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BadFargateService", - "entityType": "Resource", - "resourceType": "AWS::ECS::Service" - }, - "propertyPath": "Properties.LaunchType", - "category": "Best Practice", - "startLine": 76, - "startColumn": 7, - "endLine": 76, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDef", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 88, - "startColumn": 7, - "endLine": 88, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDef", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 89, - "startColumn": 7, - "endLine": 89, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDef", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Cpu", - "category": "Best Practice", - "startLine": 91, - "startColumn": 7, - "endLine": 91, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDef", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Memory", - "category": "Best Practice", - "startLine": 92, - "startColumn": 7, - "endLine": 92, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDef", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 93, - "startColumn": 7, - "endLine": 93, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BadASG' of type 'AWS::AutoScaling::AutoScalingGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BadASG", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BadListener' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BadListener", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 19, - "startColumn": 5, - "endLine": 19, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ALB' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ALB", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 28, - "startColumn": 5, - "endLine": 28, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TG' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TG", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 34, - "startColumn": 5, - "endLine": 34, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BadEnvLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BadEnvLambda", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 41, - "startColumn": 5, - "endLine": 41, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BadImageLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BadImageLambda", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 54, - "startColumn": 5, - "endLine": 54, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BadRestApi' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BadRestApi", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 64, - "startColumn": 5, - "endLine": 64, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BadValkey' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BadValkey", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 69, - "startColumn": 5, - "endLine": 69, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BadFargateService' of type 'AWS::ECS::Service' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BadFargateService", - "entityType": "Resource", - "resourceType": "AWS::ECS::Service" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 75, - "startColumn": 5, - "endLine": 75, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDef", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 87, - "startColumn": 5, - "endLine": 87, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/deprecated_type.yaml": { - "filePath": "bad/deprecated_type.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 2, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W9009", - "severity": "WARN", - "message": "Resource type 'AWS::SDB::Domain' is deprecated - consider using a newer alternative", - "source": "ENGINE", - "entity": { - "logicalId": "Domain", - "entityType": "Resource", - "resourceType": "AWS::SDB::Domain" - }, - "suggestedFix": "Replace AWS::SDB::Domain with a supported alternative", - "category": "Deprecation", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 9, - "ruleDescription": "Resource type sunset or shutdown", - "phase": "LINT", - "context": { - "lifecycle": "deprecated" - } - }, - { - "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": "Domain", - "entityType": "Resource", - "resourceType": "AWS::SDB::Domain" - }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 9, - "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": "Domain", - "entityType": "Resource", - "resourceType": "AWS::SDB::Domain" - }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 9, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" - } - ] - }, - "bad/duplicate.json": { - "filePath": "bad/duplicate.json", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 3, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F0000", - "severity": "FATAL", - "message": "Duplicate key 'MySNSTopic'", - "source": "SCHEMA", - "entity": { - "logicalId": "MySNSTopic", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Resources/MySNSTopic", - "category": "Structure", - "startLine": 5, - "startColumn": 3, - "endLine": 5, - "endColumn": 14, - "ruleDescription": "Duplicate key in template", - "phase": "PARSE" - }, - { - "ruleId": "F0000", - "severity": "FATAL", - "message": "Duplicate key 'MySNSTopic'", - "source": "SCHEMA", - "entity": { - "logicalId": "MySNSTopic", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Resources/MySNSTopic", - "category": "Structure", - "startLine": 17, - "startColumn": 3, - "endLine": 17, - "endColumn": 14, - "ruleDescription": "Duplicate key in template", - "phase": "PARSE" - }, - { - "ruleId": "F0000", - "severity": "FATAL", - "message": "Duplicate key 'MySNSTopic'", - "source": "SCHEMA", - "entity": { - "logicalId": "MySNSTopic", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Resources/MySNSTopic", - "category": "Structure", - "startLine": 23, - "startColumn": 3, - "endLine": 23, - "endColumn": 14, - "ruleDescription": "Duplicate key in template", - "phase": "PARSE" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MySNSTopic", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.TopicName", - "category": "Best Practice", - "startLine": 26, - "startColumn": 6, - "endLine": 26, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyEipNat' of type 'AWS::EC2::EIP' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MyEipNat", - "entityType": "Resource", - "resourceType": "AWS::EC2::EIP" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 13, - "startColumn": 4, - "endLine": 13, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MySNSTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MySNSTopic", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 25, - "startColumn": 4, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/duplicate.yaml": { - "filePath": "bad/duplicate.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 3, - "errors": 1, - "warnings": 0, - "informational": 2, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F0000", - "severity": "FATAL", - "message": "Duplicate key 'mySnsTopic'", - "source": "SCHEMA", - "entity": { - "logicalId": "mySnsTopic", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Resources/mySnsTopic", - "category": "Structure", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 13, - "ruleDescription": "Duplicate key in template", - "phase": "PARSE" - }, - { - "ruleId": "F0000", - "severity": "FATAL", - "message": "Duplicate key 'mySnsTopic'", - "source": "SCHEMA", - "entity": { - "logicalId": "mySnsTopic", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Resources/mySnsTopic", - "category": "Structure", - "startLine": 9, - "startColumn": 3, - "endLine": 9, - "endColumn": 13, - "ruleDescription": "Duplicate key in template", - "phase": "PARSE" - }, - { - "ruleId": "F0000", - "severity": "FATAL", - "message": "Duplicate key 'mySnsTopic'", - "source": "SCHEMA", - "entity": { - "logicalId": "mySnsTopic", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Resources/mySnsTopic", - "category": "Structure", - "startLine": 13, - "startColumn": 3, - "endLine": 13, - "endColumn": 13, - "ruleDescription": "Duplicate key in template", - "phase": "PARSE" - }, - { - "ruleId": "E3001", - "severity": "ERROR", - "message": "Resource 'mySnsTopic' has invalid property 'Parameters'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", - "source": "CFN_LINT", - "entity": { - "logicalId": "mySnsTopic", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "category": "Resource", - "startLine": 15, - "startColumn": 5, - "endLine": 15, - "endColumn": 15, - "ruleDescription": "Basic CloudFormation Resource Check", - "phase": "PARSE" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "myS3Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'mySnsTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "mySnsTopic", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 13, - "startColumn": 3, - "endLine": 13, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/duplicate_primary_id.yaml": { - "filePath": "bad/duplicate_primary_id.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 2, - "warnings": 0, - "informational": 4, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3019", - "severity": "ERROR", - "message": "Primary identifiers {'BucketName': 'my-duplicate-bucket'} should have unique values across the resources {'BucketA', 'BucketB'}", - "source": "CFN_LINT", - "entity": { - "logicalId": "BucketA", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Resource", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 17, - "ruleDescription": "Validate that all resources have unique primary identifiers", - "phase": "LINT" - }, - { - "ruleId": "E3019", - "severity": "ERROR", - "message": "Primary identifiers {'BucketName': 'my-duplicate-bucket'} should have unique values across the resources {'BucketA', 'BucketB'}", - "source": "CFN_LINT", - "entity": { - "logicalId": "BucketB", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Resource", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 17, - "ruleDescription": "Validate that all resources have unique primary identifiers", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BucketA", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BucketB", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BucketA' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BucketA", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BucketB' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BucketB", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/duplicate_primary_id_multi.yaml": { - "filePath": "bad/duplicate_primary_id_multi.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 4, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BucketA", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsA'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BucketB", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 15, + "propertyPath": "Properties.MaxSize", + "category": "Resource", + "startLine": 9, "startColumn": 7, - "endLine": 15, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsA'" - } + "endLine": 9, + "endColumn": 14, + "ruleDescription": "MaxSize must be greater than or equal to MinSize", + "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BucketA' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "source": "CFN_LINT", "entity": { - "logicalId": "BucketA", + "logicalId": "LC", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "category": "Deprecation", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 5, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BucketB' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "10 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "BucketB", + "logicalId": "BadASG", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.MinSize", "category": "Best Practice", - "startLine": 14, - "startColumn": 5, - "endLine": 14, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/dynamodb_attribute_mismatch.yaml": { - "filePath": "bad/dynamodb_attribute_mismatch.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 5, - "debug": 0 + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 14, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3039", - "severity": "ERROR", - "message": "AttributeDefinitions does not match KeySchema attributes. missing definitions: [sk]", + "ruleId": "W9003", + "severity": "WARN", + "message": "5 is not of type 'string' - automatically coerced (number to string)", "source": "CFN_LINT", "entity": { - "logicalId": "BadTable", + "logicalId": "BadASG", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties", - "category": "Resource", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "AttributeDefinitions / KeySchemas mismatch", - "phase": "LINT" + "propertyPath": "Properties.MaxSize", + "category": "Best Practice", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 14, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { "ruleId": "I3011", @@ -18850,15 +19017,15 @@ "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": "BadTable", + "logicalId": "BadValkey", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, "category": "Best Practice", - "startLine": 3, + "startLine": 67, "startColumn": 3, - "endLine": 3, - "endColumn": 11, + "endLine": 67, + "endColumn": 12, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -18868,135 +19035,119 @@ "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": "BadTable", + "logicalId": "BadValkey", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, "category": "Best Practice", - "startLine": 3, + "startLine": 67, "startColumn": 3, - "endLine": 3, - "endColumn": 11, + "endLine": 67, + "endColumn": 12, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3042", "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "ARN in Resource BadEnvLambda contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", + "source": "CFN_LINT", "entity": { - "logicalId": "BadTable", + "logicalId": "BadEnvLambda", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.TableName", + "propertyPath": "Properties.Role.Fn::Sub", "category": "Best Practice", - "startLine": 6, + "startLine": 45, "startColumn": 7, - "endLine": 6, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 45, + "endColumn": 14, + "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3042", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "message": "ARN in Resource BadImageLambda contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", + "source": "CFN_LINT", "entity": { - "logicalId": "BadTable", + "logicalId": "BadImageLambda", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.Role.Fn::Sub", "category": "Best Practice", - "startLine": 11, + "startLine": 58, "startColumn": 7, - "endLine": 11, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 58, + "endColumn": 14, + "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", + "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BadTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BadTable", + "logicalId": "BadASG", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.LaunchConfigurationName", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/dynamodb_prod_no_kms.yaml": { - "filePath": "bad/dynamodb_prod_no_kms.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 30, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'LC'" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ProdTable", + "logicalId": "LC", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProdTable", + "logicalId": "LC", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.TableName", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 7, + "startLine": 15, "startColumn": 7, - "endLine": 7, - "endColumn": 16, + "endLine": 15, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -19006,136 +19157,131 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProdTable", + "logicalId": "BadListener", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.LoadBalancerArn", "category": "Best Practice", - "startLine": 11, + "startLine": 20, "startColumn": 7, - "endLine": 11, - "endColumn": 16, + "endLine": 20, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ALB'" } - } - ] - }, - "bad/dynamodb_provisioned_no_throughput.yaml": { - "filePath": "bad/dynamodb_provisioned_no_throughput.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 1, - "warnings": 0, - "informational": 5, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'ProvisionedThroughput' is a required property (from extension)", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DDBTable", + "logicalId": "TG", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties", - "suggestedFix": "Add 'ProvisionedThroughput'", - "category": "Schema", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.Port", + "category": "Best Practice", + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3639", - "severity": "ERROR", - "message": "ProvisionedThroughput is required when BillingMode is 'PROVISIONED'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DDBTable", + "logicalId": "TG", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.ProvisionedThroughput", - "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", - "category": "Resource", - "startLine": 5, - "startColumn": 5, - "endLine": 5, + "propertyPath": "Properties.Protocol", + "category": "Best Practice", + "startLine": 36, + "startColumn": 7, + "endLine": 36, "endColumn": 15, - "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DDBTable", + "logicalId": "TG", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DDBTable", + "logicalId": "BadEnvLambda", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 42, + "startColumn": 7, + "endLine": 42, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DDBTable", + "logicalId": "BadImageLambda", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.TableName", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 6, + "startLine": 55, "startColumn": 7, - "endLine": 6, - "endColumn": 16, + "endLine": 55, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -19145,159 +19291,132 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'PackageType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DDBTable", + "logicalId": "BadImageLambda", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.PackageType", "category": "Best Practice", - "startLine": 11, + "startLine": 56, "startColumn": 7, - "endLine": 11, - "endColumn": 16, + "endLine": 56, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DDBTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DDBTable", + "logicalId": "BadFargateService", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/ecr_policy_no_statement.yaml": { - "filePath": "bad/ecr_policy_no_statement.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 1, - "debug": 0 + "startLine": 76, + "startColumn": 7, + "endLine": 76, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3513", - "severity": "ERROR", - "message": "ECR repository policy must have a Statement property", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Repo", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::ECR::Repository" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RepositoryPolicyText", - "suggestedFix": "Add a Statement array to the RepositoryPolicyText", - "category": "Resource", - "startLine": 6, + "propertyPath": "Properties.NetworkMode", + "category": "Best Practice", + "startLine": 88, "startColumn": 7, - "endLine": 6, - "endColumn": 27, - "ruleDescription": "Validate ECR repository policy", - "phase": "LINT" + "endLine": 88, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Repo' of type 'AWS::ECR::Repository' supports Tags but none are configured", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Repo", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::ECR::Repository" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/ecs_awsvpc_port_mismatch.yaml": { - "filePath": "bad/ecs_awsvpc_port_mismatch.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 3, - "debug": 0 + "startLine": 89, + "startColumn": 7, + "endLine": 89, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3053", - "severity": "ERROR", - "message": "HostPort 8080 must equal ContainerPort 80 when NetworkMode is awsvpc", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Task", + "logicalId": "TaskDef", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions[0].PortMappings[0].HostPort", - "suggestedFix": "Set HostPort equal to ContainerPort or remove HostPort", - "category": "Resource", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Validate ECS task definition has correct values for HostPort", - "phase": "LINT" + "propertyPath": "Properties.Cpu", + "category": "Best Practice", + "startLine": 91, + "startColumn": 7, + "endLine": 91, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Task", + "logicalId": "TaskDef", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 6, + "startLine": 92, "startColumn": 7, - "endLine": 6, - "endColumn": 18, + "endLine": 92, + "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -19311,15 +19430,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Task", + "logicalId": "TaskDef", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 7, + "startLine": 93, "startColumn": 7, - "endLine": 7, + "endLine": 93, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -19331,203 +19450,159 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Task' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'BadASG' of type 'AWS::AutoScaling::AutoScalingGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Task", + "logicalId": "BadASG", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 7, "startColumn": 5, - "endLine": 5, + "endLine": 7, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/ecs_dynamic_port_no_traffic.yaml": { - "filePath": "bad/ecs_dynamic_port_no_traffic.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 1, - "informational": 7, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E1151", - "severity": "ERROR", - "message": "'vpc-12345' does not match format 'AWS::EC2::VPC.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BadListener' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "TargetGroup", + "logicalId": "BadListener", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "Properties.VpcId", - "category": "Intrinsic Function", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 12, - "ruleDescription": "Validate VPC id format", - "phase": "SCHEMA", - "context": { - "actualValue": "vpc-12345" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 19, + "startColumn": 5, + "endLine": 19, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W3049", - "severity": "WARN", - "message": "Container 'app' uses dynamic host port 0, so each task registers on an ephemeral port, but TargetGroup 'TargetGroup' health-checks the fixed port '8080'. The health check will not follow the traffic port unless '8080' is separately served on every target. Use HealthCheckPort 'traffic-port' to health-check the port each target actually receives traffic on", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ALB' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "TargetGroup", + "logicalId": "ALB", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.HealthCheckPort", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 18, - "startColumn": 7, - "endLine": 18, - "endColumn": 22, - "relatedResources": [ - { - "resource": { - "id": "Service", - "resourceType": "AWS::ECS::Service" - }, - "location": { - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 20 - }, - "message": "Dynamic host port defined here" - } - ], - "ruleDescription": "ELB target group health check uses a fixed port that will not follow an ECS dynamic host port", + "startLine": 28, + "startColumn": 5, + "endLine": 28, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Resource 'TG' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "TG", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 34, + "startColumn": 5, + "endLine": 34, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Resource 'BadEnvLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup", + "logicalId": "BadEnvLambda", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 15, - "startColumn": 7, - "endLine": 15, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 41, + "startColumn": 5, + "endLine": 41, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Resource 'BadImageLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup", + "logicalId": "BadImageLambda", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 16, - "startColumn": 7, - "endLine": 16, + "startLine": 54, + "startColumn": 5, + "endLine": 54, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'BadRestApi' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup", + "logicalId": "BadRestApi", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::ApiGateway::RestApi" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 64, + "startColumn": 5, + "endLine": 64, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'BadValkey' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "BadValkey", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 69, "startColumn": 5, - "endLine": 5, + "endLine": 69, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19535,19 +19610,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TargetGroup' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "message": "Resource 'BadFargateService' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup", + "logicalId": "BadFargateService", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 14, + "startLine": 75, "startColumn": 5, - "endLine": 14, + "endLine": 75, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19555,35 +19630,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Service' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Service", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 21, + "startLine": 87, "startColumn": 5, - "endLine": 21, + "endLine": 87, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/ecs_fargate_mismatch.yaml": { - "filePath": "bad/ecs_fargate_mismatch.yaml", + "bad/deprecated_type.yaml": { + "filePath": "bad/deprecated_type.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 8, + "errors": 0, + "warnings": 1, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -19592,44 +19667,156 @@ }, "diagnostics": [ { - "ruleId": "E1154", - "severity": "ERROR", - "message": "'subnet-123' does not match format 'AWS::EC2::Subnet.Id'", - "source": "CFN_LINT", + "ruleId": "W9009", + "severity": "WARN", + "message": "Resource type 'AWS::SDB::Domain' is deprecated - consider using a newer alternative", + "source": "ENGINE", "entity": { - "logicalId": "Service", + "logicalId": "Domain", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::SDB::Domain" }, - "propertyPath": "Properties.NetworkConfiguration.AwsvpcConfiguration.Subnets.0", - "category": "Intrinsic Function", - "startLine": 22, - "startColumn": 15, - "endLine": 22, - "endColumn": 16, - "ruleDescription": "Validate VPC subnet id format", - "phase": "SCHEMA", + "suggestedFix": "Replace AWS::SDB::Domain with a supported alternative", + "category": "Deprecation", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Resource type sunset or shutdown", + "phase": "LINT", "context": { - "actualValue": "subnet-123" + "lifecycle": "deprecated" } }, + { + "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": "Domain", + "entityType": "Resource", + "resourceType": "AWS::SDB::Domain" + }, + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "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": "Domain", + "entityType": "Resource", + "resourceType": "AWS::SDB::Domain" + }, + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + } + ] + }, + "bad/duplicate.json": { + "filePath": "bad/duplicate.json", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 3, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F0000", + "severity": "FATAL", + "message": "Duplicate key 'MySNSTopic'", + "source": "SCHEMA", + "entity": { + "logicalId": "MySNSTopic", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Resources/MySNSTopic", + "category": "Structure", + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 14, + "ruleDescription": "Duplicate key in template", + "phase": "PARSE" + }, + { + "ruleId": "F0000", + "severity": "FATAL", + "message": "Duplicate key 'MySNSTopic'", + "source": "SCHEMA", + "entity": { + "logicalId": "MySNSTopic", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Resources/MySNSTopic", + "category": "Structure", + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 14, + "ruleDescription": "Duplicate key in template", + "phase": "PARSE" + }, + { + "ruleId": "F0000", + "severity": "FATAL", + "message": "Duplicate key 'MySNSTopic'", + "source": "SCHEMA", + "entity": { + "logicalId": "MySNSTopic", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Resources/MySNSTopic", + "category": "Structure", + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 14, + "ruleDescription": "Duplicate key in template", + "phase": "PARSE" + }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "MySNSTopic", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.TopicName", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "startLine": 26, + "startColumn": 6, + "endLine": 26, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -19637,171 +19824,191 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyEipNat' of type 'AWS::EC2::EIP' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "MyEipNat", + "entityType": "Resource", + "resourceType": "AWS::EC2::EIP" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 13, + "startColumn": 4, + "endLine": 13, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MySNSTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "MySNSTopic", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 25, + "startColumn": 4, + "endLine": 25, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/duplicate.yaml": { + "filePath": "bad/duplicate.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 3, + "errors": 1, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F0000", + "severity": "FATAL", + "message": "Duplicate key 'mySnsTopic'", + "source": "SCHEMA", "entity": { - "logicalId": "TaskDef", + "logicalId": "mySnsTopic", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.Cpu", - "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Resources/mySnsTopic", + "category": "Structure", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 13, + "ruleDescription": "Duplicate key in template", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F0000", + "severity": "FATAL", + "message": "Duplicate key 'mySnsTopic'", + "source": "SCHEMA", "entity": { - "logicalId": "TaskDef", + "logicalId": "mySnsTopic", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.Memory", - "category": "Best Practice", + "propertyPath": "Resources/mySnsTopic", + "category": "Structure", "startLine": 9, - "startColumn": 7, + "startColumn": 3, "endLine": 9, "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Duplicate key in template", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F0000", + "severity": "FATAL", + "message": "Duplicate key 'mySnsTopic'", + "source": "SCHEMA", "entity": { - "logicalId": "TaskDef", + "logicalId": "mySnsTopic", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Resources/mySnsTopic", + "category": "Structure", + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 13, + "ruleDescription": "Duplicate key in template", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "E3001", + "severity": "ERROR", + "message": "Resource 'mySnsTopic' has invalid property 'Parameters'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", + "source": "CFN_LINT", "entity": { - "logicalId": "Service", + "logicalId": "mySnsTopic", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.LaunchType", - "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "category": "Resource", + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 15, + "ruleDescription": "Basic CloudFormation Resource Check", + "phase": "PARSE" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'myS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "myS3Bucket", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Service' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Resource 'mySnsTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Service", + "logicalId": "mySnsTopic", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 16, - "startColumn": 5, - "endLine": 16, - "endColumn": 15, + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/ecs_role_no_boundary.yaml": { - "filePath": "bad/ecs_role_no_boundary.yaml", + "bad/duplicate_primary_id.yaml": { + "filePath": "bad/duplicate_primary_id.yaml", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 2, "counts": { "fatal": 0, - "errors": 0, + "errors": 2, "warnings": 0, - "informational": 6, + "informational": 4, "debug": 0 }, "suppressed": 0, @@ -19810,70 +20017,81 @@ }, "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3019", + "severity": "ERROR", + "message": "Primary identifiers {'BucketName': 'my-duplicate-bucket'} should have unique values across the resources {'BucketA', 'BucketB'}", + "source": "CFN_LINT", "entity": { - "logicalId": "TaskDef", + "logicalId": "BucketA", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.TaskRoleArn", - "category": "Best Practice", - "startLine": 26, + "propertyPath": "Properties.BucketName", + "category": "Resource", + "startLine": 6, "startColumn": 7, - "endLine": 26, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt TaskRole.Arn" - } + "endLine": 6, + "endColumn": 17, + "ruleDescription": "Validate that all resources have unique primary identifiers", + "phase": "LINT" + }, + { + "ruleId": "E3019", + "severity": "ERROR", + "message": "Primary identifiers {'BucketName': 'my-duplicate-bucket'} should have unique values across the resources {'BucketA', 'BucketB'}", + "source": "CFN_LINT", + "entity": { + "logicalId": "BucketB", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.BucketName", + "category": "Resource", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 17, + "ruleDescription": "Validate that all resources have unique primary identifiers", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "BucketA", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ExecutionRoleArn", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 27, + "startLine": 6, "startColumn": 7, - "endLine": 27, - "endColumn": 23, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 6, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ExecRole.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "BucketB", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 28, + "startLine": 10, "startColumn": 7, - "endLine": 28, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 10, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -19883,12 +20101,12 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TaskRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'BucketA' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskRole", + "logicalId": "BucketA", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -19903,55 +20121,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ExecRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ExecRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 15, - "startColumn": 5, - "endLine": 15, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'BucketB' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "BucketB", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 25, + "startLine": 9, "startColumn": 5, - "endLine": 25, + "endLine": 9, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/elb_http_443.yaml": { - "filePath": "bad/elb_http_443.yaml", + "bad/duplicate_primary_id_multi.yaml": { + "filePath": "bad/duplicate_primary_id_multi.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 2, "counts": { "fatal": 0, "errors": 0, - "warnings": 2, - "informational": 2, + "warnings": 0, + "informational": 4, "debug": 0 }, "suppressed": 0, @@ -19960,196 +20158,95 @@ }, "diagnostics": [ { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'LoadBalancerArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Listener", + "logicalId": "BucketA", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.LoadBalancerArn", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 6, + "startLine": 11, "startColumn": 7, - "endLine": 6, - "endColumn": 22, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" - }, - { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", - "entity": { - "logicalId": "Listener", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" - }, - "category": "Security", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "endLine": 11, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsA'" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Listener", + "logicalId": "BucketB", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.LoadBalancerArn", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 6, + "startLine": 15, "startColumn": 7, - "endLine": 6, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", + "endLine": 15, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsA'" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Listener' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", + "message": "Resource 'BucketA' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Listener", + "logicalId": "BucketA", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 10, "startColumn": 5, - "endLine": 5, + "endLine": 10, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/empty_file.yaml": { - "filePath": "bad/empty_file.yaml", - "status": "ERROR", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F1101", - "severity": "FATAL", - "message": "Empty YAML document", - "source": "SCHEMA", - "category": "Structure", - "startLine": 1, - "startColumn": 1, - "endLine": 1, - "endColumn": 1, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" - } - ] - }, - "bad/equals_wrong_arity.yaml": { - "filePath": "bad/equals_wrong_arity.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 1, - "informational": 1, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E8003", - "severity": "ERROR", - "message": "Fn::Equals: expected maximum item count: 2, found: 3", - "source": "SCHEMA", - "entity": { - "logicalId": "Bad", - "entityType": "Condition" - }, - "propertyPath": "Conditions/Bad/Fn::Equals", - "category": "Intrinsic Function", - "startLine": 4, - "startColumn": 5, - "endLine": 4, - "endColumn": 15, - "ruleDescription": "Fn::Equals must take exactly two scalar operands", - "phase": "PARSE" - }, - { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'Bad' is not used by any resource or Fn::If", - "source": "CFN_LINT", - "entity": { - "logicalId": "Bad", - "entityType": "Condition" - }, - "propertyPath": "Conditions/Bad", - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 6, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'R' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'BucketB' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "R", + "logicalId": "BucketB", "entityType": "Resource", "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, - "startColumn": 3, - "endLine": 9, - "endColumn": 4, + "startLine": 14, + "startColumn": 5, + "endLine": 14, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/fargate_bad_cpu_memory.yaml": { - "filePath": "bad/fargate_bad_cpu_memory.yaml", + "bad/dynamodb_attribute_mismatch.yaml": { + "filePath": "bad/dynamodb_attribute_mismatch.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, @@ -20157,7 +20254,7 @@ "fatal": 0, "errors": 1, "warnings": 0, - "informational": 7, + "informational": 5, "debug": 0 }, "suppressed": 0, @@ -20166,140 +20263,76 @@ }, "diagnostics": [ { - "ruleId": "E3047", + "ruleId": "E3039", "severity": "ERROR", - "message": "Cpu '256' is not compatible with Memory '8192' for Fargate", + "message": "AttributeDefinitions does not match KeySchema attributes. missing definitions: [sk]", "source": "CFN_LINT", "entity": { - "logicalId": "TaskDef", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", - "category": "Resource", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", - "context": { - "extra": { - "cpu": "256", - "memory": "8192" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDef", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Family", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDef", + "logicalId": "BadTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", - "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties", + "category": "Resource", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "AttributeDefinitions / KeySchemas mismatch", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "TaskDef", + "logicalId": "BadTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "TaskDef", + "logicalId": "BadTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "BadTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 10, + "startLine": 6, "startColumn": 7, - "endLine": 10, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 6, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -20309,35 +20342,34 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "BadTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 12, + "startLine": 11, "startColumn": 7, - "endLine": 12, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 11, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'BadTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "BadTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -20351,16 +20383,16 @@ } ] }, - "bad/fargate_daemon.yaml": { - "filePath": "bad/fargate_daemon.yaml", + "bad/dynamodb_prod_no_kms.yaml": { + "filePath": "bad/dynamodb_prod_no_kms.yaml", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 2, + "errors": 0, "warnings": 0, - "informational": 12, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -20369,87 +20401,39 @@ }, "diagnostics": [ { - "ruleId": "E3044", - "severity": "ERROR", - "message": "Fargate launch type does not support DAEMON scheduling strategy", - "source": "CFN_LINT", - "entity": { - "logicalId": "FargateDaemon", - "entityType": "Resource", - "resourceType": "AWS::ECS::Service" - }, - "propertyPath": "Properties.SchedulingStrategy", - "suggestedFix": "Use REPLICA scheduling strategy with Fargate", - "category": "Resource", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 25, - "ruleDescription": "ECS service using FARGATE or EXTERNAL cannot use DAEMON scheduling", - "phase": "LINT", - "context": { - "extra": { - "launch_type": "FARGATE", - "scheduling_strategy": "DAEMON" - } - } - }, - { - "ruleId": "E3052", - "severity": "ERROR", - "message": "NetworkConfiguration required when TaskDefinition NetworkMode is 'awsvpc'", + "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": "FargateDaemon", + "logicalId": "ProdTable", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::DynamoDB::Table" }, - "category": "Resource", + "category": "Best Practice", "startLine": 3, "startColumn": 3, "endLine": 3, - "endColumn": 16, - "ruleDescription": "Validate ECS service requires NetworkConfiguration", + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FargateDaemon", - "entityType": "Resource", - "resourceType": "AWS::ECS::Service" - }, - "propertyPath": "Properties.LaunchType", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SchedulingStrategy' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateDaemon", + "logicalId": "ProdTable", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.SchedulingStrategy", + "propertyPath": "Properties.TableName", "category": "Best Practice", "startLine": 7, "startColumn": 7, "endLine": 7, - "endColumn": 25, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -20459,135 +20443,136 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateDaemon", + "logicalId": "ProdTable", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cluster", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 9, + "startLine": 11, "startColumn": 7, - "endLine": 9, - "endColumn": 14, + "endLine": 11, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Cluster'" + "lifecycle": "conditional-create-only" } + } + ] + }, + "bad/dynamodb_provisioned_no_throughput.yaml": { + "filePath": "bad/dynamodb_provisioned_no_throughput.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 1, + "warnings": 0, + "informational": 5, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'ProvisionedThroughput' is a required property (from extension)", + "source": "SCHEMA", "entity": { - "logicalId": "TaskDef", + "logicalId": "DDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Family", - "category": "Best Practice", - "startLine": 13, - "startColumn": 7, - "endLine": 13, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties", + "suggestedFix": "Add 'ProvisionedThroughput'", + "category": "Schema", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3639", + "severity": "ERROR", + "message": "ProvisionedThroughput is required when BillingMode is 'PROVISIONED'", + "source": "CFN_LINT", "entity": { - "logicalId": "TaskDef", + "logicalId": "DDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.ProvisionedThroughput", + "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", + "category": "Resource", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "TaskDef", + "logicalId": "DDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 16, - "startColumn": 7, - "endLine": 16, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "TaskDef", + "logicalId": "DDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "DDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 18, + "startLine": 6, "startColumn": 7, - "endLine": 18, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 6, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -20597,35 +20582,34 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "DDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 19, + "startLine": 11, "startColumn": 7, - "endLine": 19, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 11, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FargateDaemon' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Resource 'DDBTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateDaemon", + "logicalId": "DDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -20636,59 +20620,78 @@ "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/ecr_policy_no_statement.yaml": { + "filePath": "bad/ecr_policy_no_statement.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3513", + "severity": "ERROR", + "message": "ECR repository policy must have a Statement property", + "source": "CFN_LINT", "entity": { - "logicalId": "TaskDef", + "logicalId": "Repo", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::ECR::Repository" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.RepositoryPolicyText", + "suggestedFix": "Add a Statement array to the RepositoryPolicyText", + "category": "Resource", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 27, + "ruleDescription": "Validate ECR repository policy", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Cluster' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Resource 'Repo' of type 'AWS::ECR::Repository' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "Repo", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::ECR::Repository" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 23, - "startColumn": 3, - "endLine": 23, - "endColumn": 10, + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/findinmap_bad.yaml": { - "filePath": "bad/findinmap_bad.yaml", + "bad/ecs_awsvpc_port_mismatch.yaml": { + "filePath": "bad/ecs_awsvpc_port_mismatch.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 1, - "errors": 0, + "fatal": 0, + "errors": 1, "warnings": 0, - "informational": 1, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -20697,44 +20700,90 @@ }, "diagnostics": [ { - "ruleId": "F1012", - "severity": "FATAL", - "message": "Fn::FindInMap references non-existent mapping 'NonExistentMap'", - "source": "SCHEMA", + "ruleId": "E3053", + "severity": "ERROR", + "message": "HostPort 8080 must equal ContainerPort 80 when NetworkMode is awsvpc", + "source": "CFN_LINT", "entity": { - "logicalId": "Bucket", + "logicalId": "Task", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECS::TaskDefinition" }, - "category": "Intrinsic Function", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 9, - "ruleDescription": "FindInMap map name must exist in Mappings", - "phase": "SCHEMA" + "propertyPath": "Properties.ContainerDefinitions[0].PortMappings[0].HostPort", + "suggestedFix": "Set HostPort equal to ContainerPort or remove HostPort", + "category": "Resource", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Validate ECS task definition has correct values for HostPort", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "Task", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", "startLine": 6, "startColumn": 7, "endLine": 6, - "endColumn": 17, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Task", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Task' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Task", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] } diff --git a/src/resources/expected/validation_reports2.json b/src/resources/expected/validation_reports2.json index 7c25829a..5046c747 100644 --- a/src/resources/expected/validation_reports2.json +++ b/src/resources/expected/validation_reports2.json @@ -1,14 +1,14 @@ { - "bad/formatters.yaml": { - "filePath": "bad/formatters.yaml", + "bad/ecs_dynamic_port_no_traffic.yaml": { + "filePath": "bad/ecs_dynamic_port_no_traffic.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 3, "counts": { "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 5, + "errors": 1, + "warnings": 1, + "informational": 7, "debug": 0 }, "suppressed": 0, @@ -17,95 +17,122 @@ }, "diagnostics": [ { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1151", + "severity": "ERROR", + "message": "'vpc-12345' does not match format 'AWS::EC2::VPC.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "myTable", + "logicalId": "TargetGroup", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.TableName.Fn::Sub", - "category": "Best Practice", - "startLine": 9, + "propertyPath": "Properties.VpcId", + "category": "Intrinsic Function", + "startLine": 17, "startColumn": 7, - "endLine": 9, - "endColumn": 14, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "endLine": 17, + "endColumn": 12, + "ruleDescription": "Validate VPC id format", + "phase": "SCHEMA", + "context": { + "actualValue": "vpc-12345" + } }, { - "ruleId": "W9003", + "ruleId": "W3049", "severity": "WARN", - "message": "'5' is not of type 'integer' - automatically coerced (string to integer)", + "message": "Container 'app' uses dynamic host port 0, so each task registers on an ephemeral port, but TargetGroup 'TargetGroup' health-checks the fixed port '8080'. The health check will not follow the traffic port unless '8080' is separately served on every target. Use HealthCheckPort 'traffic-port' to health-check the port each target actually receives traffic on", "source": "CFN_LINT", "entity": { - "logicalId": "myTable", + "logicalId": "TargetGroup", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.ProvisionedThroughput.WriteCapacityUnits", + "propertyPath": "Properties.HealthCheckPort", "category": "Best Practice", "startLine": 18, - "startColumn": 9, + "startColumn": 7, "endLine": 18, - "endColumn": 27, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endColumn": 22, + "relatedResources": [ + { + "resource": { + "id": "Service", + "resourceType": "AWS::ECS::Service" + }, + "location": { + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 20 + }, + "message": "Dynamic host port defined here" + } + ], + "ruleDescription": "ELB target group health check uses a fixed port that will not follow an ECS dynamic host port", + "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "myTable", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ECS::TaskDefinition" }, + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", "startLine": 6, - "startColumn": 3, + "startColumn": 7, "endLine": 6, - "endColumn": 10, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "myTable", + "logicalId": "TargetGroup", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 6, - "startColumn": 3, - "endLine": 6, - "endColumn": 10, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 15, + "startColumn": 7, + "endLine": 15, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myTable", + "logicalId": "TargetGroup", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.TableName", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 9, + "startLine": 16, "startColumn": 7, - "endLine": 9, - "endColumn": 16, + "endLine": 16, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -115,115 +142,97 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myTable", + "logicalId": "TargetGroup", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 13, + "startLine": 17, "startColumn": 7, - "endLine": 13, - "endColumn": 16, + "endLine": 17, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myTable", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 8, + "startLine": 5, "startColumn": 5, - "endLine": 8, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/functions/findinmap_default_value_no_transform.yaml": { - "filePath": "bad/functions/findinmap_default_value_no_transform.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F1101", - "severity": "FATAL", - "message": "Fn::FindInMap: the 'DefaultValue' element requires the AWS::LanguageExtensions transform; without it Fn::FindInMap accepts at most 3 elements", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TargetGroup' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Topic", + "logicalId": "TargetGroup", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.DisplayName", - "category": "Structure", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", "startLine": 14, - "startColumn": 7, + "startColumn": 5, "endLine": 14, - "endColumn": 18, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Topic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Service' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Topic", + "logicalId": "Service", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 13, + "startLine": 21, "startColumn": 5, - "endLine": 13, + "endLine": 21, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/functions/foreach_no_transform.yaml": { - "filePath": "bad/functions/foreach_no_transform.yaml", + "bad/ecs_fargate_mismatch.yaml": { + "filePath": "bad/ecs_fargate_mismatch.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 2, "counts": { - "fatal": 4, - "errors": 0, + "fatal": 0, + "errors": 1, "warnings": 0, - "informational": 0, + "informational": 8, "debug": 0 }, "suppressed": 0, @@ -232,264 +241,216 @@ }, "diagnostics": [ { - "ruleId": "F0006", - "severity": "FATAL", - "message": "Logical ID 'Fn::ForEach::Buckets' must be alphanumeric (A-Za-z0-9)", - "source": "SCHEMA", - "entity": { - "logicalId": "Fn::ForEach::Buckets", - "entityType": "Resource", - "resourceType": "" - }, - "category": "Structure", - "startLine": 11, - "startColumn": 5, - "endLine": 11, - "endColumn": 25, - "ruleDescription": "Logical IDs must be alphanumeric", - "phase": "SCHEMA" - }, - { - "ruleId": "F1032", - "severity": "FATAL", - "message": "Fn::ForEach requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use 'Fn::ForEach::Buckets'", - "source": "SCHEMA", + "ruleId": "E1154", + "severity": "ERROR", + "message": "'subnet-123' does not match format 'AWS::EC2::Subnet.Id'", + "source": "CFN_LINT", "entity": { - "logicalId": "Fn::ForEach::Buckets", + "logicalId": "Service", "entityType": "Resource", - "resourceType": "" - }, - "category": "Intrinsic Function", - "startLine": 11, - "startColumn": 5, - "endLine": 11, - "endColumn": 25, - "ruleDescription": "Fn::ForEach requires the AWS::LanguageExtensions transform", - "phase": "PARSE" - }, - { - "ruleId": "F1032", - "severity": "FATAL", - "message": "Fn::ForEach requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use 'Fn::ForEach::BucketOutputs'", - "source": "SCHEMA", - "entity": { - "logicalId": "Fn::ForEach::BucketOutputs", - "entityType": "Output" - }, - "propertyPath": "Outputs/Fn::ForEach::BucketOutputs", - "category": "Intrinsic Function", - "startLine": 33, - "startColumn": 5, - "endLine": 33, - "endColumn": 31, - "ruleDescription": "Fn::ForEach requires the AWS::LanguageExtensions transform", - "phase": "PARSE" - }, - { - "ruleId": "F1032", - "severity": "FATAL", - "message": "Fn::ForEach requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use 'Fn::ForEach::GetAttLoop'", - "source": "SCHEMA", - "entity": { - "logicalId": "Fn::ForEach::BucketOutputs", - "entityType": "Output" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Outputs/Fn::ForEach::BucketOutputs/2/Fn::ForEach::GetAttLoop", + "propertyPath": "Properties.NetworkConfiguration.AwsvpcConfiguration.Subnets.0", "category": "Intrinsic Function", - "startLine": 36, - "startColumn": 11, - "endLine": 36, - "endColumn": 34, - "ruleDescription": "Fn::ForEach requires the AWS::LanguageExtensions transform", - "phase": "PARSE" - } - ] - }, - "bad/functions/get_stack_output.json": { - "filePath": "bad/functions/get_stack_output.json", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 0, - "errors": 4, - "warnings": 0, - "informational": 4, - "debug": 0 + "startLine": 22, + "startColumn": 15, + "endLine": 22, + "endColumn": 16, + "ruleDescription": "Validate VPC subnet id format", + "phase": "SCHEMA", + "context": { + "actualValue": "subnet-123" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E1033", - "severity": "ERROR", - "message": "'OutputName' is a required property", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Topic1", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", - "category": "Intrinsic Function", - "startLine": 8, - "startColumn": 11, - "endLine": 8, - "endColumn": 30, - "ruleDescription": "GetStackOutput validation of parameters", - "phase": "PARSE" + "propertyPath": "Properties.Family", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E1033", - "severity": "ERROR", - "message": "'StackName' is a required property", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Topic2", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", - "category": "Intrinsic Function", - "startLine": 18, - "startColumn": 11, - "endLine": 18, - "endColumn": 30, - "ruleDescription": "GetStackOutput validation of parameters", - "phase": "PARSE" + "propertyPath": "Properties.NetworkMode", + "category": "Best Practice", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E1033", - "severity": "ERROR", - "message": "'invalid' is not of type 'object'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Topic3", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", - "category": "Intrinsic Function", - "startLine": 28, - "startColumn": 11, - "endLine": 28, - "endColumn": 30, - "ruleDescription": "GetStackOutput validation of parameters", - "phase": "PARSE" + "propertyPath": "Properties.Cpu", + "category": "Best Practice", + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E1033", - "severity": "ERROR", - "message": "Additional properties are not allowed ('BadKey' was unexpected)", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Topic4", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.DisplayName.Fn::GetStackOutput.BadKey", - "category": "Intrinsic Function", - "startLine": 39, - "startColumn": 13, - "endLine": 39, - "endColumn": 20, - "ruleDescription": "GetStackOutput validation of parameters", - "phase": "PARSE" + "propertyPath": "Properties.Memory", + "category": "Best Practice", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Topic1' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic1", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 6, + "startLine": 10, "startColumn": 7, - "endLine": 6, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 10, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Topic2' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic2", + "logicalId": "Service", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 16, + "startLine": 17, "startColumn": 7, - "endLine": 16, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 17, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Topic3' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Topic3", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 26, - "startColumn": 7, - "endLine": 26, - "endColumn": 18, + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Topic4' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Service' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Topic4", + "logicalId": "Service", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 34, - "startColumn": 7, - "endLine": 34, - "endColumn": 18, + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/functions/get_stack_output.yaml": { - "filePath": "bad/functions/get_stack_output.yaml", + "bad/ecs_role_no_boundary.yaml": { + "filePath": "bad/ecs_role_no_boundary.yaml", "status": "OK", "metadata": { - "resourcesScanned": 5, + "resourcesScanned": 3, "counts": { "fatal": 0, - "errors": 4, + "errors": 0, "warnings": 0, - "informational": 8, + "informational": 6, "debug": 0 }, "suppressed": 0, @@ -498,152 +459,112 @@ }, "diagnostics": [ { - "ruleId": "E1033", - "severity": "ERROR", - "message": "'OutputName' is a required property", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Topic1", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", - "category": "Intrinsic Function", - "startLine": 8, - "startColumn": 9, - "endLine": 8, - "endColumn": 27, - "ruleDescription": "GetStackOutput validation of parameters", - "phase": "PARSE" + "propertyPath": "Properties.TaskRoleArn", + "category": "Best Practice", + "startLine": 26, + "startColumn": 7, + "endLine": 26, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt TaskRole.Arn" + } }, { - "ruleId": "E1033", - "severity": "ERROR", - "message": "'StackName' is a required property", - "source": "SCHEMA", - "entity": { - "logicalId": "Topic2", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", - "category": "Intrinsic Function", - "startLine": 15, - "startColumn": 9, - "endLine": 15, - "endColumn": 27, - "ruleDescription": "GetStackOutput validation of parameters", - "phase": "PARSE" - }, - { - "ruleId": "E1033", - "severity": "ERROR", - "message": "'invalid' is not of type 'object'", - "source": "SCHEMA", - "entity": { - "logicalId": "Topic3", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", - "category": "Intrinsic Function", - "startLine": 22, - "startColumn": 9, - "endLine": 22, - "endColumn": 27, - "ruleDescription": "GetStackOutput validation of parameters", - "phase": "PARSE" - }, - { - "ruleId": "E1033", - "severity": "ERROR", - "message": "Additional properties are not allowed ('BadKey' was unexpected)", - "source": "SCHEMA", - "entity": { - "logicalId": "Topic4", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.DisplayName.Fn::GetStackOutput.BadKey", - "category": "Intrinsic Function", - "startLine": 31, - "startColumn": 11, - "endLine": 31, - "endColumn": 17, - "ruleDescription": "GetStackOutput validation of parameters", - "phase": "PARSE" - }, - { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Topic5", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ECS::TaskDefinition" }, + "propertyPath": "Properties.ExecutionRoleArn", "category": "Best Practice", - "startLine": 33, - "startColumn": 3, - "endLine": 33, - "endColumn": 9, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 27, + "startColumn": 7, + "endLine": 27, + "endColumn": 23, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt ExecRole.Arn" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Topic5", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ECS::TaskDefinition" }, + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 33, - "startColumn": 3, - "endLine": 33, - "endColumn": 9, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 28, + "startColumn": 7, + "endLine": 28, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9040", "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", + "message": "Resource 'TaskRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Topic5", + "logicalId": "TaskRole", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 35, + "startLine": 5, "startColumn": 5, - "endLine": 35, + "endLine": 5, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Topic1' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'ExecRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Topic1", + "logicalId": "ExecRole", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, + "startLine": 15, "startColumn": 5, - "endLine": 6, + "endLine": 15, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -651,87 +572,158 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Topic2' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Topic2", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 13, + "startLine": 25, "startColumn": 5, - "endLine": 13, + "endLine": 25, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/elb_http_443.yaml": { + "filePath": "bad/elb_http_443.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Topic3' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'LoadBalancerArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", "source": "ENGINE", "entity": { - "logicalId": "Topic3", + "logicalId": "Listener", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.LoadBalancerArn", "category": "Best Practice", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 22, + "ruleDescription": "Hardcoded ARN property", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "Listener", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + }, + "category": "Security", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" + }, + { + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Topic4' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic4", + "logicalId": "Listener", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.LoadBalancerArn", "category": "Best Practice", - "startLine": 26, - "startColumn": 5, - "endLine": 26, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Topic5' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Resource 'Listener' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Topic5", + "logicalId": "Listener", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 35, + "startLine": 5, "startColumn": 5, - "endLine": 35, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/functions/import_value.yaml": { - "filePath": "bad/functions/import_value.yaml", + "bad/empty_file.yaml": { + "filePath": "bad/empty_file.yaml", + "status": "ERROR", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F1101", + "severity": "FATAL", + "message": "Empty YAML document", + "source": "SCHEMA", + "category": "Structure", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 1, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" + } + ] + }, + "bad/equals_wrong_arity.yaml": { + "filePath": "bad/equals_wrong_arity.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, @@ -739,7 +731,7 @@ "fatal": 0, "errors": 1, "warnings": 1, - "informational": 3, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -750,230 +742,274 @@ { "ruleId": "E8003", "severity": "ERROR", - "message": "Fn::Equals: argument 1: {'Fn::ImportValue': 'PrimaryRegion'} is not of type 'string'", + "message": "Fn::Equals: expected maximum item count: 2, found: 3", "source": "SCHEMA", "entity": { - "logicalId": "primaryRegion", + "logicalId": "Bad", "entityType": "Condition" }, - "propertyPath": "Conditions/primaryRegion/Fn::Equals", + "propertyPath": "Conditions/Bad/Fn::Equals", "category": "Intrinsic Function", "startLine": 4, - "startColumn": 3, + "startColumn": 5, "endLine": 4, - "endColumn": 13, + "endColumn": 15, "ruleDescription": "Fn::Equals must take exactly two scalar operands", "phase": "PARSE" }, { "ruleId": "W8001", "severity": "WARN", - "message": "Condition 'primaryRegion' is not used by any resource or Fn::If", + "message": "Condition 'Bad' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "primaryRegion", + "logicalId": "Bad", "entityType": "Condition" }, - "propertyPath": "Conditions/primaryRegion", + "propertyPath": "Conditions/Bad", "category": "Best Practice", - "startLine": 4, + "startLine": 3, "startColumn": 3, - "endLine": 4, - "endColumn": 16, + "endLine": 3, + "endColumn": 6, "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'R' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "subnet", + "logicalId": "R", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 9, - "startColumn": 7, + "startColumn": 3, "endLine": 9, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", + "endColumn": 4, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/fargate_bad_cpu_memory.yaml": { + "filePath": "bad/fargate_bad_cpu_memory.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 7, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3047", + "severity": "ERROR", + "message": "Cpu '256' is not compatible with Memory '8192' for Fargate", + "source": "CFN_LINT", + "entity": { + "logicalId": "TaskDef", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "category": "Resource", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import)" + "extra": { + "cpu": "256", + "memory": "8192" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "subnet", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 12, + "startLine": 6, "startColumn": 7, - "endLine": 12, - "endColumn": 12, + "endLine": 6, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import)" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'subnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "subnet", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/functions/length_no_transform.yaml": { - "filePath": "bad/functions/length_no_transform.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 4, - "debug": 0 + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F1030", - "severity": "FATAL", - "message": "Fn::Length requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use it", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.DelaySeconds", - "category": "Intrinsic Function", - "startLine": 13, + "propertyPath": "Properties.Memory", + "category": "Best Practice", + "startLine": 8, "startColumn": 7, - "endLine": 13, - "endColumn": 19, - "ruleDescription": "Fn::Length requires the AWS::LanguageExtensions transform", - "phase": "PARSE" + "endLine": 8, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ECS::TaskDefinition" }, + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 10, - "startColumn": 3, - "endLine": 10, - "endColumn": 8, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ECS::TaskDefinition" }, + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", "startLine": 10, - "startColumn": 3, + "startColumn": 7, "endLine": 10, - "endColumn": 8, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "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", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", "startLine": 12, - "startColumn": 5, + "startColumn": 7, "endLine": 12, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Queue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, + "startLine": 5, "startColumn": 5, - "endLine": 12, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/functions/relationship_conditions.yaml": { - "filePath": "bad/functions/relationship_conditions.yaml", + "bad/fargate_daemon.yaml": { + "filePath": "bad/fargate_daemon.yaml", "status": "OK", "metadata": { - "resourcesScanned": 5, + "resourcesScanned": 3, "counts": { "fatal": 0, - "errors": 1, - "warnings": 7, - "informational": 6, + "errors": 2, + "warnings": 0, + "informational": 12, "debug": 0 }, "suppressed": 0, @@ -982,180 +1018,202 @@ }, "diagnostics": [ { - "ruleId": "E2533", + "ruleId": "E3044", "severity": "ERROR", - "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", + "message": "Fargate launch type does not support DAEMON scheduling strategy", "source": "CFN_LINT", "entity": { - "logicalId": "AMIIDLookup", + "logicalId": "FargateDaemon", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 44, + "propertyPath": "Properties.SchedulingStrategy", + "suggestedFix": "Use REPLICA scheduling strategy with Fargate", + "category": "Resource", + "startLine": 7, "startColumn": 7, - "endLine": 44, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", + "endLine": 7, + "endColumn": 25, + "ruleDescription": "ECS service using FARGATE or EXTERNAL cannot use DAEMON scheduling", + "phase": "LINT", "context": { - "actualValue": "nodejs4.3", - "lifecycle": "end-of-life" + "extra": { + "launch_type": "FARGATE", + "scheduling_strategy": "DAEMON" + } } }, { - "ruleId": "W1001", - "severity": "WARN", - "message": "Reference to 'LambdaExecutionRole' which is conditional on 'isPrimary' - target may not exist", + "ruleId": "E3052", + "severity": "ERROR", + "message": "NetworkConfiguration required when TaskDefinition NetworkMode is 'awsvpc'", "source": "CFN_LINT", "entity": { - "logicalId": "InstanceProfile", + "logicalId": "FargateDaemon", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.Roles.0", - "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", - "category": "Best Practice", - "startLine": 32, - "startColumn": 14, - "endLine": 32, - "endColumn": 15, - "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", + "category": "Resource", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 16, + "ruleDescription": "Validate ECS service requires NetworkConfiguration", "phase": "LINT" }, { - "ruleId": "W1001", - "severity": "WARN", - "message": "Reference to 'LambdaExecutionRole' which is conditional on 'isPrimary' - target may not exist", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AMIIDLookup", + "logicalId": "FargateDaemon", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.Role", - "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", + "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 37, + "startLine": 6, "startColumn": 7, - "endLine": 37, - "endColumn": 11, - "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", - "phase": "LINT" + "endLine": 6, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W1001", - "severity": "WARN", - "message": "Reference to 'LambdaExecutionRole' which is conditional on 'isPrimary' - target may not exist", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SchedulingStrategy' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SubCondRefParam", + "logicalId": "FargateDaemon", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.Value", - "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", + "propertyPath": "Properties.SchedulingStrategy", "category": "Best Practice", - "startLine": 53, + "startLine": 7, "startColumn": 7, - "endLine": 53, - "endColumn": 12, - "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", - "phase": "LINT" + "endLine": 7, + "endColumn": 25, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W1001", - "severity": "WARN", - "message": "Reference to 'LambdaExecutionRole' which is conditional on 'isPrimary' - target may not exist", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SubCondGetAttParam", + "logicalId": "FargateDaemon", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.Value", - "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", + "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 59, + "startLine": 9, "startColumn": 7, - "endLine": 59, - "endColumn": 12, - "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", - "phase": "LINT" + "endLine": 9, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Cluster'" + } }, { - "ruleId": "W1001", - "severity": "WARN", - "message": "Reference to 'LambdaExecutionRole' which is conditional on 'isPrimary' - target may not exist", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "lambdaArn", - "entityType": "Output" + "logicalId": "TaskDef", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Outputs/lambdaArn/Value.Fn::GetAtt", - "suggestedFix": "Add a Condition to the output that implies the target's condition", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 62, - "startColumn": 3, - "endLine": 62, - "endColumn": 12, - "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", - "phase": "LINT" + "startLine": 13, + "startColumn": 7, + "endLine": 13, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'isProduction' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "isProduction", - "entityType": "Condition" + "logicalId": "TaskDef", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Conditions/isProduction", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 15, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'isDevelopment' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "isDevelopment", - "entityType": "Condition" + "logicalId": "TaskDef", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Conditions/isDevelopment", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 8, - "startColumn": 3, - "endLine": 8, - "endColumn": 16, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" + "startLine": 16, + "startColumn": 7, + "endLine": 16, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaExecutionRole", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 26, + "startLine": 17, "startColumn": 7, - "endLine": 26, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 17, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -1165,19 +1223,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "InstanceProfile", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 30, + "startLine": 18, "startColumn": 7, - "endLine": 30, - "endColumn": 11, + "endLine": 18, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -1185,41 +1244,44 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaExecutionRole", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 14, - "startColumn": 5, - "endLine": 14, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 19, + "startColumn": 7, + "endLine": 19, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'AMIIDLookup' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'FargateDaemon' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AMIIDLookup", + "logicalId": "FargateDaemon", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 35, + "startLine": 5, "startColumn": 5, - "endLine": 35, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -1227,19 +1289,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SubCondRefParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", + "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubCondRefParam", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 51, + "startLine": 12, "startColumn": 5, - "endLine": 51, + "endLine": 12, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -1247,35 +1309,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SubCondGetAttParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", + "message": "Resource 'Cluster' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubCondGetAttParam", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::ECS::Cluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 57, - "startColumn": 5, - "endLine": 57, - "endColumn": 15, + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 10, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/functions/sub_needed.yaml": { - "filePath": "bad/functions/sub_needed.yaml", + "bad/findinmap_bad.yaml": { + "filePath": "bad/findinmap_bad.yaml", "status": "OK", "metadata": { - "resourcesScanned": 5, + "resourcesScanned": 1, "counts": { - "fatal": 0, - "errors": 10, - "warnings": 4, - "informational": 9, + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -1284,480 +1346,538 @@ }, "diagnostics": [ { - "ruleId": "E1029", - "severity": "ERROR", - "message": "Found an embedded parameter '${AMIId}' outside of an 'Fn::Sub' at Properties.ImageId", - "source": "CFN_LINT", + "ruleId": "F1012", + "severity": "FATAL", + "message": "Fn::FindInMap references non-existent mapping 'NonExistentMap'", + "source": "SCHEMA", "entity": { - "logicalId": "myInstance", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ImageId", - "suggestedFix": "Wrap the string with Fn::Sub", "category": "Intrinsic Function", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 14, - "ruleDescription": "Substitution variable ${X} requires Fn::Sub", - "phase": "LINT" + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "FindInMap map name must exist in Mappings", + "phase": "SCHEMA" }, { - "ruleId": "E1029", - "severity": "ERROR", - "message": "Found an embedded parameter '${AMIId}' outside of an 'Fn::Sub' at Properties.PolicyDocument.Statement.0.Resource", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "myPolicy", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Resource", - "suggestedFix": "Wrap the string with Fn::Sub", - "category": "Intrinsic Function", - "startLine": 25, - "startColumn": 11, - "endLine": 25, - "endColumn": 19, - "ruleDescription": "Substitution variable ${X} requires Fn::Sub", - "phase": "LINT" + "propertyPath": "Properties.BucketName", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + } + ] + }, + "bad/formatters.yaml": { + "filePath": "bad/formatters.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 5, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "E1029", - "severity": "ERROR", - "message": "Found an embedded parameter '${AWS::AccountId}' outside of an 'Fn::Sub' at Properties.PolicyDocument.Statement.0.Resource", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "myPolicy", + "logicalId": "myTable", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Resource", - "suggestedFix": "Wrap the string with Fn::Sub", - "category": "Intrinsic Function", - "startLine": 25, - "startColumn": 11, - "endLine": 25, - "endColumn": 19, - "ruleDescription": "Substitution variable ${X} requires Fn::Sub", + "propertyPath": "Properties.TableName.Fn::Sub", + "category": "Best Practice", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 14, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" }, { - "ruleId": "E1029", - "severity": "ERROR", - "message": "Found an embedded parameter '${AMIId}' outside of an 'Fn::Sub' at Properties.PolicyDocument.Statement.1.NotResource", + "ruleId": "W9003", + "severity": "WARN", + "message": "'5' is not of type 'integer' - automatically coerced (string to integer)", "source": "CFN_LINT", "entity": { - "logicalId": "myPolicy", + "logicalId": "myTable", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.PolicyDocument.Statement.1.NotResource", - "suggestedFix": "Wrap the string with Fn::Sub", - "category": "Intrinsic Function", - "startLine": 29, - "startColumn": 11, - "endLine": 29, - "endColumn": 22, - "ruleDescription": "Substitution variable ${X} requires Fn::Sub", - "phase": "LINT" + "propertyPath": "Properties.ProvisionedThroughput.WriteCapacityUnits", + "category": "Best Practice", + "startLine": 18, + "startColumn": 9, + "endLine": 18, + "endColumn": 27, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "E1029", - "severity": "ERROR", - "message": "Found an embedded parameter '${AWS::AccountId}' outside of an 'Fn::Sub' at Properties.PolicyDocument.Statement.1.NotResource", + "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": "myPolicy", + "logicalId": "myTable", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.PolicyDocument.Statement.1.NotResource", - "suggestedFix": "Wrap the string with Fn::Sub", - "category": "Intrinsic Function", - "startLine": 29, - "startColumn": 11, - "endLine": 29, - "endColumn": 22, - "ruleDescription": "Substitution variable ${X} requires Fn::Sub", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 10, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "E1029", - "severity": "ERROR", - "message": "Found an embedded parameter '${definition_substitution_1}' outside of an 'Fn::Sub' at Properties.DefinitionString.Fn::Join.1.5", + "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": "TestBadStateMachine1", + "logicalId": "myTable", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.DefinitionString.Fn::Join.1.5", - "suggestedFix": "Wrap the string with Fn::Sub", - "category": "Intrinsic Function", - "startLine": 46, - "startColumn": 13, - "endLine": 46, - "endColumn": 14, - "ruleDescription": "Substitution variable ${X} requires Fn::Sub", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 10, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "E1029", - "severity": "ERROR", - "message": "Found an embedded parameter '${definition_substitution_1}' outside of an 'Fn::Sub' at Properties.DefinitionString.Fn::Join.1.5", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "TestBadStateMachine2", + "logicalId": "myTable", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.DefinitionString.Fn::Join.1.5", - "suggestedFix": "Wrap the string with Fn::Sub", - "category": "Intrinsic Function", - "startLine": 67, - "startColumn": 13, - "endLine": 67, - "endColumn": 14, - "ruleDescription": "Substitution variable ${X} requires Fn::Sub", - "phase": "LINT" + "propertyPath": "Properties.TableName", + "category": "Best Practice", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'${AMIId}' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "myTable", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 11, + "propertyPath": "Properties.KeySchema", + "category": "Best Practice", + "startLine": 13, "startColumn": 7, - "endLine": 11, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", + "endLine": 13, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "${AMIId}" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'arn:aws:iam::${AWS::AccountId}:user/${aws:username}-${AMIId}' does not match '^(arn:(aws[A-Za-z\\-]*?|[A-Za-z?*\\-]*[?*][A-Za-z?*\\-]*):[^:*?]+:[^:]*(:(?:\\d{12}|\\*|aws)?:.+|)|\\*)$'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "myPolicy", + "logicalId": "myTable", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Resource", - "category": "Resource", - "startLine": 25, - "startColumn": 11, - "endLine": 25, - "endColumn": 19, - "ruleDescription": "Validate identity based IAM policies", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/functions/findinmap_default_value_no_transform.yaml": { + "filePath": "bad/functions/findinmap_default_value_no_transform.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'arn:aws:iam::${AWS::AccountId}:user/${aws:username}-${AMIId}' does not match '^(arn:(aws[A-Za-z\\-]*?|[A-Za-z?*\\-]*[?*][A-Za-z?*\\-]*):[^:*?]+:[^:]*(:(?:\\d{12}|\\*|aws)?:.+|)|\\*)$'", - "source": "CFN_LINT", + "ruleId": "F1101", + "severity": "FATAL", + "message": "Fn::FindInMap: the 'DefaultValue' element requires the AWS::LanguageExtensions transform; without it Fn::FindInMap accepts at most 3 elements", + "source": "SCHEMA", "entity": { - "logicalId": "myPolicy", + "logicalId": "Topic", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.PolicyDocument.Statement.1.NotResource", - "category": "Resource", - "startLine": 29, - "startColumn": 11, - "endLine": 29, - "endColumn": 22, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.DisplayName", + "category": "Structure", + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 18, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" }, { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Topic' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TestBadStateMachine1", + "logicalId": "Topic", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.RoleArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 54, - "startColumn": 7, - "endLine": 54, - "endColumn": 14, - "ruleDescription": "Hardcoded ARN property", + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/functions/foreach_no_transform.yaml": { + "filePath": "bad/functions/foreach_no_transform.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 4, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", - "source": "ENGINE", + "ruleId": "F0006", + "severity": "FATAL", + "message": "Logical ID 'Fn::ForEach::Buckets' must be alphanumeric (A-Za-z0-9)", + "source": "SCHEMA", "entity": { - "logicalId": "TestBadStateMachine2", + "logicalId": "Fn::ForEach::Buckets", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "" }, - "propertyPath": "Properties.RoleArn", - "category": "Best Practice", - "startLine": 73, - "startColumn": 7, - "endLine": 73, - "endColumn": 14, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" + "category": "Structure", + "startLine": 11, + "startColumn": 5, + "endLine": 11, + "endColumn": 25, + "ruleDescription": "Logical IDs must be alphanumeric", + "phase": "SCHEMA" }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", + "ruleId": "F1032", + "severity": "FATAL", + "message": "Fn::ForEach requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use 'Fn::ForEach::Buckets'", + "source": "SCHEMA", "entity": { - "logicalId": "TestBadStateMachine1", + "logicalId": "Fn::ForEach::Buckets", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "" }, - "category": "Security", - "startLine": 35, - "startColumn": 3, - "endLine": 35, - "endColumn": 23, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "category": "Intrinsic Function", + "startLine": 11, + "startColumn": 5, + "endLine": 11, + "endColumn": 25, + "ruleDescription": "Fn::ForEach requires the AWS::LanguageExtensions transform", + "phase": "PARSE" }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", + "ruleId": "F1032", + "severity": "FATAL", + "message": "Fn::ForEach requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use 'Fn::ForEach::BucketOutputs'", + "source": "SCHEMA", "entity": { - "logicalId": "TestBadStateMachine2", - "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "logicalId": "Fn::ForEach::BucketOutputs", + "entityType": "Output" }, - "category": "Security", - "startLine": 56, - "startColumn": 3, - "endLine": 56, - "endColumn": 23, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "propertyPath": "Outputs/Fn::ForEach::BucketOutputs", + "category": "Intrinsic Function", + "startLine": 33, + "startColumn": 5, + "endLine": 33, + "endColumn": 31, + "ruleDescription": "Fn::ForEach requires the AWS::LanguageExtensions transform", + "phase": "PARSE" }, { - "ruleId": "I3510", - "severity": "INFO", - "message": "action 'iam:UploadSSHPublicKey' requires a resource of ['arn:${Partition}:iam::${Account}:user/.*']", - "source": "CFN_LINT", + "ruleId": "F1032", + "severity": "FATAL", + "message": "Fn::ForEach requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use 'Fn::ForEach::GetAttLoop'", + "source": "SCHEMA", "entity": { - "logicalId": "myPolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "logicalId": "Fn::ForEach::BucketOutputs", + "entityType": "Output" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Resource", - "category": "Security", - "startLine": 25, + "propertyPath": "Outputs/Fn::ForEach::BucketOutputs/2/Fn::ForEach::GetAttLoop", + "category": "Intrinsic Function", + "startLine": 36, "startColumn": 11, - "endLine": 25, - "endColumn": 19, - "ruleDescription": "Validate statement resources match the actions", - "phase": "LINT" + "endLine": 36, + "endColumn": 34, + "ruleDescription": "Fn::ForEach requires the AWS::LanguageExtensions transform", + "phase": "PARSE" + } + ] + }, + "bad/functions/get_stack_output.json": { + "filePath": "bad/functions/get_stack_output.json", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 0, + "errors": 4, + "warnings": 0, + "informational": 4, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I3510", - "severity": "INFO", - "message": "action 'iam:GetLoginProfile' requires a resource of ['arn:${Partition}:iam::${Account}:user/.*']", - "source": "CFN_LINT", + "ruleId": "E1033", + "severity": "ERROR", + "message": "'OutputName' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "myPolicy", + "logicalId": "Topic1", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.PolicyDocument.Statement.1.NotResource", - "category": "Security", - "startLine": 29, + "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", + "category": "Intrinsic Function", + "startLine": 8, "startColumn": 11, - "endLine": 29, - "endColumn": 22, - "ruleDescription": "Validate statement resources match the actions", - "phase": "LINT" + "endLine": 8, + "endColumn": 30, + "ruleDescription": "GetStackOutput validation of parameters", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E1033", + "severity": "ERROR", + "message": "'StackName' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "myInstance", + "logicalId": "Topic2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", + "category": "Intrinsic Function", + "startLine": 18, + "startColumn": 11, + "endLine": 18, + "endColumn": 30, + "ruleDescription": "GetStackOutput validation of parameters", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AdditionalInfo' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "E1033", + "severity": "ERROR", + "message": "'invalid' is not of type 'object'", + "source": "SCHEMA", "entity": { - "logicalId": "myInstance", + "logicalId": "Topic3", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.AdditionalInfo", - "category": "Best Practice", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Sub:${AMIId})" - } + "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", + "category": "Intrinsic Function", + "startLine": 28, + "startColumn": 11, + "endLine": 28, + "endColumn": 30, + "ruleDescription": "GetStackOutput validation of parameters", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E1033", + "severity": "ERROR", + "message": "Additional properties are not allowed ('BadKey' was unexpected)", + "source": "SCHEMA", "entity": { - "logicalId": "mySnsTopic", + "logicalId": "Topic4", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.TopicName", - "category": "Best Practice", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.DisplayName.Fn::GetStackOutput.BadKey", + "category": "Intrinsic Function", + "startLine": 39, + "startColumn": 13, + "endLine": 39, + "endColumn": 20, + "ruleDescription": "GetStackOutput validation of parameters", + "phase": "PARSE" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'Topic1' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "Topic1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'mySnsTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Topic2' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySnsTopic", + "logicalId": "Topic2", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 32, - "startColumn": 5, - "endLine": 32, - "endColumn": 15, + "startLine": 16, + "startColumn": 7, + "endLine": 16, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TestBadStateMachine1' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "message": "Resource 'Topic3' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TestBadStateMachine1", + "logicalId": "Topic3", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 37, - "startColumn": 5, - "endLine": 37, - "endColumn": 15, + "startLine": 26, + "startColumn": 7, + "endLine": 26, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TestBadStateMachine2' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "message": "Resource 'Topic4' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TestBadStateMachine2", + "logicalId": "Topic4", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 58, - "startColumn": 5, - "endLine": 58, - "endColumn": 15, + "startLine": 34, + "startColumn": 7, + "endLine": 34, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/functions/tojsonstring_no_transform.yaml": { - "filePath": "bad/functions/tojsonstring_no_transform.yaml", + "bad/functions/get_stack_output.yaml": { + "filePath": "bad/functions/get_stack_output.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 5, "counts": { - "fatal": 3, - "errors": 0, + "fatal": 0, + "errors": 4, "warnings": 0, - "informational": 1, + "informational": 8, "debug": 0 }, "suppressed": 0, @@ -1766,92 +1886,247 @@ }, "diagnostics": [ { - "ruleId": "F1031", - "severity": "FATAL", - "message": "Fn::ToJsonString requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use it", + "ruleId": "E1033", + "severity": "ERROR", + "message": "'OutputName' is a required property", "source": "SCHEMA", "entity": { - "logicalId": "Topic", + "logicalId": "Topic1", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.DisplayName", + "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", "category": "Intrinsic Function", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 18, - "ruleDescription": "Fn::ToJsonString requires the AWS::LanguageExtensions transform", + "startLine": 8, + "startColumn": 9, + "endLine": 8, + "endColumn": 27, + "ruleDescription": "GetStackOutput validation of parameters", "phase": "PARSE" }, { - "ruleId": "F1031", - "severity": "FATAL", - "message": "Fn::ToJsonString requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use it", + "ruleId": "E1033", + "severity": "ERROR", + "message": "'StackName' is a required property", "source": "SCHEMA", "entity": { - "logicalId": "Topic", + "logicalId": "Topic2", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Metadata.Custom", + "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", "category": "Intrinsic Function", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 13, - "ruleDescription": "Fn::ToJsonString requires the AWS::LanguageExtensions transform", + "startLine": 15, + "startColumn": 9, + "endLine": 15, + "endColumn": 27, + "ruleDescription": "GetStackOutput validation of parameters", "phase": "PARSE" }, { - "ruleId": "F1031", - "severity": "FATAL", - "message": "Fn::ToJsonString requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use it", + "ruleId": "E1033", + "severity": "ERROR", + "message": "'invalid' is not of type 'object'", "source": "SCHEMA", "entity": { - "logicalId": "JsonOutput", - "entityType": "Output" + "logicalId": "Topic3", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Outputs/JsonOutput/Value", + "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", "category": "Intrinsic Function", - "startLine": 19, - "startColumn": 5, - "endLine": 19, - "endColumn": 10, - "ruleDescription": "Fn::ToJsonString requires the AWS::LanguageExtensions transform", + "startLine": 22, + "startColumn": 9, + "endLine": 22, + "endColumn": 27, + "ruleDescription": "GetStackOutput validation of parameters", "phase": "PARSE" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Topic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "ruleId": "E1033", + "severity": "ERROR", + "message": "Additional properties are not allowed ('BadKey' was unexpected)", + "source": "SCHEMA", + "entity": { + "logicalId": "Topic4", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.DisplayName.Fn::GetStackOutput.BadKey", + "category": "Intrinsic Function", + "startLine": 31, + "startColumn": 11, + "endLine": 31, + "endColumn": 17, + "ruleDescription": "GetStackOutput validation of parameters", + "phase": "PARSE" + }, + { + "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": "Topic5", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "category": "Best Practice", + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 9, + "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": "Topic5", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "category": "Best Practice", + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 9, + "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": "Topic5", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 35, + "startColumn": 5, + "endLine": 35, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Topic1' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Topic", + "logicalId": "Topic1", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, + "startLine": 6, "startColumn": 5, - "endLine": 9, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Topic2' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Topic2", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Topic3' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Topic3", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 20, + "startColumn": 5, + "endLine": 20, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Topic4' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Topic4", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 26, + "startColumn": 5, + "endLine": 26, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Topic5' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Topic5", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 35, + "startColumn": 5, + "endLine": 35, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/functions_base64.yaml": { - "filePath": "bad/functions_base64.yaml", + "bad/functions/import_value.yaml": { + "filePath": "bad/functions/import_value.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 2, - "errors": 2, - "warnings": 0, + "fatal": 0, + "errors": 1, + "warnings": 1, "informational": 3, "debug": 0 }, @@ -1861,138 +2136,96 @@ }, "diagnostics": [ { - "ruleId": "F1012", - "severity": "FATAL", - "message": "Fn::FindInMap references non-existent mapping 'amimap'", + "ruleId": "E8003", + "severity": "ERROR", + "message": "Fn::Equals: argument 1: {'Fn::ImportValue': 'PrimaryRegion'} is not of type 'string'", "source": "SCHEMA", "entity": { - "logicalId": "myInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "primaryRegion", + "entityType": "Condition" }, + "propertyPath": "Conditions/primaryRegion/Fn::Equals", "category": "Intrinsic Function", - "startLine": 6, + "startLine": 4, "startColumn": 3, - "endLine": 6, + "endLine": 4, "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "FindInMap map name must exist in Mappings", - "phase": "SCHEMA" + "ruleDescription": "Fn::Equals must take exactly two scalar operands", + "phase": "PARSE" }, { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource myInstance. Circular dependency with [myInstance -> myInstance]", - "source": "SCHEMA", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'primaryRegion' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "myInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "primaryRegion", + "entityType": "Condition" }, - "propertyPath": "Resources/myInstance", - "category": "Reference", - "startLine": 6, + "propertyPath": "Conditions/primaryRegion", + "category": "Best Practice", + "startLine": 4, "startColumn": 3, - "endLine": 6, - "endColumn": 13, - "ruleDescription": "Circular dependency detected", + "endLine": 4, + "endColumn": 16, + "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, - { - "ruleId": "E1011", - "severity": "ERROR", - "message": "'Fn::GetAtt' is not supported as an argument to 'Fn::FindInMap'", - "source": "SCHEMA", - "entity": { - "logicalId": "myInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId.Fn::FindInMap.2", - "category": "Intrinsic Function", - "startLine": 9, - "startColumn": 65, - "endLine": 9, - "endColumn": 66, - "ruleDescription": "Fn::FindInMap operands must be strings or one of Ref/Fn::FindInMap", - "phase": "PARSE" - }, - { - "ruleId": "E1021", - "severity": "ERROR", - "message": "['Random String'] is not of type 'string'", - "source": "SCHEMA", - "entity": { - "logicalId": "myInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.UserData.Fn::Base64", - "category": "Intrinsic Function", - "startLine": 11, - "startColumn": 9, - "endLine": 11, - "endColumn": 19, - "ruleDescription": "Fn::Base64 argument must be a string or a string-producing intrinsic", - "phase": "PARSE" - }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "subnet", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", "startLine": 9, "startColumn": 7, "endLine": 9, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (mapping 'amimap' not found)" + "resolutionSource": "dynamic (cross-stack import)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "subnet", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 10, + "startLine": 12, "startColumn": 7, - "endLine": 10, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 12, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Base64 with non-string argument)" + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import)" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'subnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "subnet", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -2006,16 +2239,16 @@ } ] }, - "bad/functions_findinmap_enhanced_invalid_key.yaml": { - "filePath": "bad/functions_findinmap_enhanced_invalid_key.yaml", + "bad/functions/length_no_transform.yaml": { + "filePath": "bad/functions/length_no_transform.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 0, - "errors": 1, + "fatal": 1, + "errors": 0, "warnings": 0, - "informational": 2, + "informational": 4, "debug": 0 }, "suppressed": 0, @@ -2024,427 +2257,293 @@ }, "diagnostics": [ { - "ruleId": "E7001", - "severity": "ERROR", - "message": "Mapping 'MapName'.'TopKey1' key '{\"To\":\"Json\",\"String\":\"Function\"}' does not match format '^[a-zA-Z0-9]+$'", - "source": "CFN_LINT", + "ruleId": "F1030", + "severity": "FATAL", + "message": "Fn::Length requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use it", + "source": "SCHEMA", "entity": { - "logicalId": "MapName", - "entityType": "Mapping" + "logicalId": "Queue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Mappings/MapName/TopKey1/{\"To\":\"Json\",\"String\":\"Function\"}", - "category": "Structure", - "startLine": 6, + "propertyPath": "Properties.DelaySeconds", + "category": "Intrinsic Function", + "startLine": 13, "startColumn": 7, - "endLine": 6, - "endColumn": 40, - "ruleDescription": "Mappings are appropriately configured", + "endLine": 13, + "endColumn": 19, + "ruleDescription": "Fn::Length requires the AWS::LanguageExtensions transform", + "phase": "PARSE" + }, + { + "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": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 8, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "Cluster", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.ClusterName", "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "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": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Cluster' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Resource 'Queue' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::SQS::Queue" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, + "startLine": 12, "startColumn": 5, - "endLine": 10, + "endLine": 12, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/functions_getaz.yaml": { - "filePath": "bad/functions_getaz.yaml", + "bad/functions/relationship_conditions.yaml": { + "filePath": "bad/functions/relationship_conditions.yaml", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 5, "counts": { - "fatal": 1, - "errors": 4, - "warnings": 3, - "informational": 12, + "fatal": 0, + "errors": 1, + "warnings": 7, + "informational": 6, "debug": 0 }, - "suppressed": 1, + "suppressed": 0, "strict": false, "severityLevel": "DEBUG" }, "diagnostics": [ { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource mySubnet1. Circular dependency with [mySubnet1 -> mySubnet1]", - "source": "SCHEMA", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "mySubnet1", + "logicalId": "AMIIDLookup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Resources/mySubnet1", - "category": "Reference", - "startLine": 10, - "startColumn": 3, - "endLine": 10, - "endColumn": 12, - "ruleDescription": "Circular dependency detected", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 44, + "startColumn": 7, + "endLine": 44, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs4.3", + "lifecycle": "end-of-life" + } }, { - "ruleId": "E1017", - "severity": "ERROR", - "message": "'us-east-1a' is not a valid region for Fn::GetAZs (use '' for the current region)", - "source": "SCHEMA", + "ruleId": "W1001", + "severity": "WARN", + "message": "Reference to 'LambdaExecutionRole' which is conditional on 'isPrimary' - target may not exist", + "source": "CFN_LINT", "entity": { - "logicalId": "mySubnet2", + "logicalId": "InstanceProfile", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties.AvailabilityZone.Fn::Select.1.Fn::GetAZs", - "category": "Intrinsic Function", - "startLine": 27, - "startColumn": 13, - "endLine": 27, - "endColumn": 23, - "ruleDescription": "Fn::Select requires exactly two operands and a list source", - "phase": "PARSE" + "propertyPath": "Properties.Roles.0", + "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", + "category": "Best Practice", + "startLine": 32, + "startColumn": 14, + "endLine": 32, + "endColumn": 15, + "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", + "phase": "LINT" }, { - "ruleId": "E3060", - "severity": "ERROR", - "message": "'10.0.0.0/24' overlaps with '10.0.0.0/24'", + "ruleId": "W1001", + "severity": "WARN", + "message": "Reference to 'LambdaExecutionRole' which is conditional on 'isPrimary' - target may not exist", "source": "CFN_LINT", "entity": { - "logicalId": "mySubnet2", + "logicalId": "AMIIDLookup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.CidrBlock", - "category": "Resource", - "startLine": 23, + "propertyPath": "Properties.Role", + "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", + "category": "Best Practice", + "startLine": 37, "startColumn": 7, - "endLine": 23, - "endColumn": 16, - "relatedResources": [ - { - "resource": { - "id": "mySubnet1", - "resourceType": "AWS::EC2::Subnet" - }, - "location": { - "startLine": 10, - "startColumn": 3, - "endLine": 10, - "endColumn": 12 - }, - "message": "Overlapping subnet CIDR 10.0.0.0/24" - } - ], - "ruleDescription": "Validate subnet CIDRs do not overlap with other subnets", - "phase": "LINT", - "context": { - "extra": { - "cidr": "10.0.0.0/24" - } - } - }, - { - "ruleId": "E3060", - "severity": "ERROR", - "message": "'10.0.0.0/24' overlaps with '10.0.0.0/24'", - "source": "CFN_LINT", - "entity": { - "logicalId": "mySubnet3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Resource", - "startLine": 32, - "startColumn": 7, - "endLine": 32, - "endColumn": 16, - "relatedResources": [ - { - "resource": { - "id": "mySubnet1", - "resourceType": "AWS::EC2::Subnet" - }, - "location": { - "startLine": 10, - "startColumn": 3, - "endLine": 10, - "endColumn": 12 - }, - "message": "Overlapping subnet CIDR 10.0.0.0/24" - } - ], - "ruleDescription": "Validate subnet CIDRs do not overlap with other subnets", - "phase": "LINT", - "context": { - "extra": { - "cidr": "10.0.0.0/24" - } - } - }, - { - "ruleId": "E9004", - "severity": "ERROR", - "message": "'AvailbilityZone' is not one of ['AssignIpv6AddressOnCreation', 'AvailabilityZone', 'AvailabilityZoneId', 'BlockPublicAccessStates', 'BlockPublicAccessStates.InternetGatewayBlockMode', 'CidrBlock', 'EnableDns64', 'EnableLniAtDeviceIndex', 'Ipv4IpamPoolId', 'Ipv4NetmaskLength', 'Ipv6CidrBlock', 'Ipv6CidrBlocks', 'Ipv6IpamPoolId', 'Ipv6Native', 'Ipv6NetmaskLength', 'MapPublicIpOnLaunch', 'NetworkAclAssociationId', 'OutpostArn', 'PrivateDnsNameOptionsOnLaunch.EnableResourceNameDnsAAAARecord', 'PrivateDnsNameOptionsOnLaunch.EnableResourceNameDnsARecord', 'PrivateDnsNameOptionsOnLaunch.HostnameType', 'SubnetId', 'Tags', 'VpcId']", - "source": "SCHEMA", - "entity": { - "logicalId": "mySubnet3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "suggestedFix": "Check the resource type documentation for valid GetAtt attributes", - "category": "Intrinsic Function", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 23, - "ruleDescription": "GetAtt attribute must exist on target resource type", + "endLine": 37, + "endColumn": 11, + "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", "phase": "LINT" }, { - "ruleId": "W1030", + "ruleId": "W1001", "severity": "WARN", - "message": "{'Ref': 'VPC'} is not a 'AWS::EC2::VPC.Id' with pattern '^vpc-(([0-9A-Fa-f]{8})|([0-9A-Fa-f]{17}))$' when 'Ref' is resolved", + "message": "Reference to 'LambdaExecutionRole' which is conditional on 'isPrimary' - target may not exist", "source": "CFN_LINT", "entity": { - "logicalId": "mySubnet1", + "logicalId": "SubCondRefParam", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SSM::Parameter" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Value", + "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", "category": "Best Practice", - "startLine": 13, + "startLine": 53, "startColumn": 7, - "endLine": 13, + "endLine": 53, "endColumn": 12, - "ruleDescription": "Validate the values that come from a Ref function", + "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", "phase": "LINT" }, { - "ruleId": "W1030", + "ruleId": "W1001", "severity": "WARN", - "message": "{'Ref': 'VPC'} is not a 'AWS::EC2::VPC.Id' with pattern '^vpc-(([0-9A-Fa-f]{8})|([0-9A-Fa-f]{17}))$' when 'Ref' is resolved", + "message": "Reference to 'LambdaExecutionRole' which is conditional on 'isPrimary' - target may not exist", "source": "CFN_LINT", "entity": { - "logicalId": "mySubnet2", + "logicalId": "SubCondGetAttParam", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SSM::Parameter" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Value", + "suggestedFix": "Add a Condition to the referencing resource that implies the target's condition", "category": "Best Practice", - "startLine": 22, + "startLine": 59, "startColumn": 7, - "endLine": 22, + "endLine": 59, "endColumn": 12, - "ruleDescription": "Validate the values that come from a Ref function", + "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", "phase": "LINT" }, { - "ruleId": "W1030", + "ruleId": "W1001", "severity": "WARN", - "message": "{'Ref': 'VPC'} is not a 'AWS::EC2::VPC.Id' with pattern '^vpc-(([0-9A-Fa-f]{8})|([0-9A-Fa-f]{17}))$' when 'Ref' is resolved", + "message": "Reference to 'LambdaExecutionRole' which is conditional on 'isPrimary' - target may not exist", "source": "CFN_LINT", "entity": { - "logicalId": "mySubnet3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "logicalId": "lambdaArn", + "entityType": "Output" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Outputs/lambdaArn/Value.Fn::GetAtt", + "suggestedFix": "Add a Condition to the output that implies the target's condition", "category": "Best Practice", - "startLine": 31, - "startColumn": 7, - "endLine": 31, + "startLine": 62, + "startColumn": 3, + "endLine": 62, "endColumn": 12, - "ruleDescription": "Validate the values that come from a Ref function", + "ruleDescription": "Ref/GetAtt to resource that is available when conditions are applied", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "mySubnet1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 13, - "startColumn": 7, - "endLine": 13, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "mySubnet1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "mySubnet1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 15, - "startColumn": 7, - "endLine": 15, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Select with unresolvable arguments)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'isProduction' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "mySubnet2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "logicalId": "isProduction", + "entityType": "Condition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Conditions/isProduction", "category": "Best Practice", - "startLine": 22, - "startColumn": 7, - "endLine": 22, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 15, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'isDevelopment' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "mySubnet2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "logicalId": "isDevelopment", + "entityType": "Condition" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Conditions/isDevelopment", "category": "Best Practice", - "startLine": 23, - "startColumn": 7, - "endLine": 23, + "startLine": 8, + "startColumn": 3, + "endLine": 8, "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "mySubnet2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 24, - "startColumn": 7, - "endLine": 24, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Select with unresolvable arguments)" - } + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySubnet3", + "logicalId": "LambdaExecutionRole", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 31, + "startLine": 26, "startColumn": 7, - "endLine": 31, - "endColumn": 12, + "endLine": 26, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2454,19 +2553,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySubnet3", + "logicalId": "InstanceProfile", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 32, + "startLine": 30, "startColumn": 7, - "endLine": 32, - "endColumn": 16, + "endLine": 30, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2474,44 +2573,41 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySubnet3", + "logicalId": "LambdaExecutionRole", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Select with unresolvable arguments)" - } + "startLine": 14, + "startColumn": 5, + "endLine": 14, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'mySubnet1' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'AMIIDLookup' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySubnet1", + "logicalId": "AMIIDLookup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, + "startLine": 35, "startColumn": 5, - "endLine": 12, + "endLine": 35, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -2519,19 +2615,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'mySubnet2' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'SubCondRefParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySubnet2", + "logicalId": "SubCondRefParam", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SSM::Parameter" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 21, + "startLine": 51, "startColumn": 5, - "endLine": 21, + "endLine": 51, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -2539,35 +2635,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'mySubnet3' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'SubCondGetAttParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySubnet3", + "logicalId": "SubCondGetAttParam", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SSM::Parameter" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 30, + "startLine": 57, "startColumn": 5, - "endLine": 30, + "endLine": 57, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/functions_join.yaml": { - "filePath": "bad/functions_join.yaml", + "bad/functions/sub_needed.yaml": { + "filePath": "bad/functions/sub_needed.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 5, "counts": { "fatal": 0, - "errors": 2, - "warnings": 0, - "informational": 6, + "errors": 10, + "warnings": 4, + "informational": 9, "debug": 0 }, "suppressed": 0, @@ -2576,9 +2672,9 @@ }, "diagnostics": [ { - "ruleId": "E1152", + "ruleId": "E1029", "severity": "ERROR", - "message": "'ami-1234' does not match format 'AWS::EC2::Image.Id'", + "message": "Found an embedded parameter '${AMIId}' outside of an 'Fn::Sub' at Properties.ImageId", "source": "CFN_LINT", "entity": { "logicalId": "myInstance", @@ -2586,551 +2682,325 @@ "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", + "suggestedFix": "Wrap the string with Fn::Sub", "category": "Intrinsic Function", - "startLine": 9, + "startLine": 11, "startColumn": 7, - "endLine": 9, + "endLine": 11, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-1234" - } + "ruleDescription": "Substitution variable ${X} requires Fn::Sub", + "phase": "LINT" }, { - "ruleId": "E1152", + "ruleId": "E1029", "severity": "ERROR", - "message": "'ami-1234' does not match format 'AWS::EC2::Image.Id'", + "message": "Found an embedded parameter '${AMIId}' outside of an 'Fn::Sub' at Properties.PolicyDocument.Statement.0.Resource", "source": "CFN_LINT", "entity": { - "logicalId": "myInstance2", + "logicalId": "myPolicy", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.PolicyDocument.Statement.0.Resource", + "suggestedFix": "Wrap the string with Fn::Sub", "category": "Intrinsic Function", - "startLine": 19, - "startColumn": 7, - "endLine": 19, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-1234" - } + "startLine": 25, + "startColumn": 11, + "endLine": 25, + "endColumn": 19, + "ruleDescription": "Substitution variable ${X} requires Fn::Sub", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E1029", + "severity": "ERROR", + "message": "Found an embedded parameter '${AWS::AccountId}' outside of an 'Fn::Sub' at Properties.PolicyDocument.Statement.0.Resource", + "source": "CFN_LINT", "entity": { - "logicalId": "myInstance", + "logicalId": "myPolicy", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.PolicyDocument.Statement.0.Resource", + "suggestedFix": "Wrap the string with Fn::Sub", + "category": "Intrinsic Function", + "startLine": 25, + "startColumn": 11, + "endLine": 25, + "endColumn": 19, + "ruleDescription": "Substitution variable ${X} requires Fn::Sub", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "E1029", + "severity": "ERROR", + "message": "Found an embedded parameter '${AMIId}' outside of an 'Fn::Sub' at Properties.PolicyDocument.Statement.1.NotResource", + "source": "CFN_LINT", "entity": { - "logicalId": "myInstance", + "logicalId": "myPolicy", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.UserData", - "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Base64 with non-string argument)" - } + "propertyPath": "Properties.PolicyDocument.Statement.1.NotResource", + "suggestedFix": "Wrap the string with Fn::Sub", + "category": "Intrinsic Function", + "startLine": 29, + "startColumn": 11, + "endLine": 29, + "endColumn": 22, + "ruleDescription": "Substitution variable ${X} requires Fn::Sub", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E1029", + "severity": "ERROR", + "message": "Found an embedded parameter '${AWS::AccountId}' outside of an 'Fn::Sub' at Properties.PolicyDocument.Statement.1.NotResource", + "source": "CFN_LINT", "entity": { - "logicalId": "myInstance2", + "logicalId": "myPolicy", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 19, - "startColumn": 7, - "endLine": 19, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "myInstance2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.UserData", - "category": "Best Practice", - "startLine": 20, - "startColumn": 7, - "endLine": 20, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Base64 with unresolvable argument)" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "myInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myInstance2' of type 'AWS::EC2::Instance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "myInstance2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 18, - "startColumn": 5, - "endLine": 18, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.PolicyDocument.Statement.1.NotResource", + "suggestedFix": "Wrap the string with Fn::Sub", + "category": "Intrinsic Function", + "startLine": 29, + "startColumn": 11, + "endLine": 29, + "endColumn": 22, + "ruleDescription": "Substitution variable ${X} requires Fn::Sub", "phase": "LINT" - } - ] - }, - "bad/functions_ref.yaml": { - "filePath": "bad/functions_ref.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 6, - "errors": 4, - "warnings": 5, - "informational": 23, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F1018", - "severity": "FATAL", - "message": "Fn::Sub variable '${Package}' does not reference a valid resource, parameter, or pseudo-parameter", - "source": "SCHEMA", + "ruleId": "E1029", + "severity": "ERROR", + "message": "Found an embedded parameter '${definition_substitution_1}' outside of an 'Fn::Sub' at Properties.DefinitionString.Fn::Join.1.5", + "source": "CFN_LINT", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "TestBadStateMachine1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.DefinitionString.Fn::Join.1.5", + "suggestedFix": "Wrap the string with Fn::Sub", "category": "Intrinsic Function", "startLine": 46, - "startColumn": 7, - "endLine": 46, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Sub variables must resolve", - "phase": "SCHEMA", - "context": { - "resolutionSource": "dynamic (Sub:yum install ${Package}\n)" - } - }, - { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'pIops' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'AnotherInstance', 'MyEC2Instance', 'mySecurityGroupVpc1', 'mySecurityGroupVpc2', 'myVpcId']", - "source": "SCHEMA", - "entity": { - "logicalId": "MyEC2Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 40, "startColumn": 13, - "endLine": 40, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" + "endLine": 46, + "endColumn": 14, + "ruleDescription": "Substitution variable ${X} requires Fn::Sub", + "phase": "LINT" }, { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'pIops' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'AnotherInstance', 'MyEC2Instance', 'mySecurityGroupVpc1', 'mySecurityGroupVpc2', 'myVpcId']", - "source": "SCHEMA", + "ruleId": "E1029", + "severity": "ERROR", + "message": "Found an embedded parameter '${definition_substitution_1}' outside of an 'Fn::Sub' at Properties.DefinitionString.Fn::Join.1.5", + "source": "CFN_LINT", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "TestBadStateMachine2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "propertyPath": "Properties.DefinitionString.Fn::Join.1.5", + "suggestedFix": "Wrap the string with Fn::Sub", "category": "Intrinsic Function", - "startLine": 59, + "startLine": 67, "startColumn": 13, - "endLine": 59, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" - }, - { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'httpdPackage' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'AnotherInstance', 'MyEC2Instance', 'mySecurityGroupVpc1', 'mySecurityGroupVpc2', 'myVpcId']", - "source": "SCHEMA", - "entity": { - "logicalId": "AnotherInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.UserData", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 65, - "startColumn": 7, - "endLine": 65, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA", - "context": { - "resolutionSource": "dynamic (Sub:yum install ${myPackage} ${Package})" - } - }, - { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource mySecurityGroupVpc1. Circular dependency with [mySecurityGroupVpc1 -> mySecurityGroupVpc2 -> mySecurityGroupVpc1]", - "source": "SCHEMA", - "entity": { - "logicalId": "mySecurityGroupVpc1", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Resources/mySecurityGroupVpc1", - "category": "Reference", - "startLine": 8, - "startColumn": 3, - "endLine": 8, - "endColumn": 22, - "ruleDescription": "Circular dependency detected", - "phase": "LINT" - }, - { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource mySecurityGroupVpc2. Circular dependency with [mySecurityGroupVpc2 -> mySecurityGroupVpc1 -> mySecurityGroupVpc2]", - "source": "SCHEMA", - "entity": { - "logicalId": "mySecurityGroupVpc2", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Resources/mySecurityGroupVpc2", - "category": "Reference", - "startLine": 20, - "startColumn": 3, - "endLine": 20, - "endColumn": 22, - "ruleDescription": "Circular dependency detected", + "endLine": 67, + "endColumn": 14, + "ruleDescription": "Substitution variable ${X} requires Fn::Sub", "phase": "LINT" }, { - "ruleId": "E1150", + "ruleId": "E1152", "severity": "ERROR", - "message": "'sg-1234567' does not match format 'AWS::EC2::SecurityGroup.Id'", + "message": "'${AMIId}' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupVpc1", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.SecurityGroupIngress.0.SourceSecurityGroupId", + "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 16, - "startColumn": 9, - "endLine": 16, - "endColumn": 30, - "ruleDescription": "Validate security group format", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", "phase": "SCHEMA", "context": { - "actualValue": "sg-1234567" + "actualValue": "${AMIId}" } }, { - "ruleId": "E3687", - "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", - "source": "CFN_LINT", - "entity": { - "logicalId": "mySecurityGroupVpc1", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.0", - "category": "Resource", - "startLine": 15, - "startColumn": 19, - "endLine": 15, - "endColumn": 20, - "ruleDescription": "Validate to and from ports based on the protocol", - "phase": "LINT" - }, - { - "ruleId": "E3687", + "ruleId": "E3510", "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "message": "'arn:aws:iam::${AWS::AccountId}:user/${aws:username}-${AMIId}' does not match '^(arn:(aws[A-Za-z\\-]*?|[A-Za-z?*\\-]*[?*][A-Za-z?*\\-]*):[^:*?]+:[^:]*(:(?:\\d{12}|\\*|aws)?:.+|)|\\*)$'", "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupVpc1", + "logicalId": "myPolicy", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.SecurityGroupIngress.1", + "propertyPath": "Properties.PolicyDocument.Statement.0.Resource", "category": "Resource", - "startLine": 18, - "startColumn": 19, - "endLine": 18, - "endColumn": 20, - "ruleDescription": "Validate to and from ports based on the protocol", + "startLine": 25, + "startColumn": 11, + "endLine": 25, + "endColumn": 19, + "ruleDescription": "Validate identity based IAM policies", "phase": "LINT" }, { - "ruleId": "E3687", + "ruleId": "E3510", "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "message": "'arn:aws:iam::${AWS::AccountId}:user/${aws:username}-${AMIId}' does not match '^(arn:(aws[A-Za-z\\-]*?|[A-Za-z?*\\-]*[?*][A-Za-z?*\\-]*):[^:*?]+:[^:]*(:(?:\\d{12}|\\*|aws)?:.+|)|\\*)$'", "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupVpc2", + "logicalId": "myPolicy", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.SecurityGroupIngress.0", + "propertyPath": "Properties.PolicyDocument.Statement.1.NotResource", "category": "Resource", - "startLine": 27, - "startColumn": 19, - "endLine": 27, - "endColumn": 20, - "ruleDescription": "Validate to and from ports based on the protocol", + "startLine": 29, + "startColumn": 11, + "endLine": 29, + "endColumn": 22, + "ruleDescription": "Validate identity based IAM policies", "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", - "entity": { - "logicalId": "mySecurityGroupVpc1", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.0.IpProtocol", - "category": "Best Practice", - "startLine": 15, - "startColumn": 9, - "endLine": 15, - "endColumn": 19, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", + "ruleId": "W9002", "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc1", + "logicalId": "TestBadStateMachine1", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.SecurityGroupIngress.1.IpProtocol", + "propertyPath": "Properties.RoleArn", "category": "Best Practice", - "startLine": 18, - "startColumn": 9, - "endLine": 18, - "endColumn": 19, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 54, + "startColumn": 7, + "endLine": 54, + "endColumn": 14, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" }, { - "ruleId": "W9003", + "ruleId": "W9002", "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc2", + "logicalId": "TestBadStateMachine2", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.SecurityGroupIngress.0.IpProtocol", + "propertyPath": "Properties.RoleArn", "category": "Best Practice", - "startLine": 27, - "startColumn": 9, - "endLine": 27, - "endColumn": 19, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 73, + "startColumn": 7, + "endLine": 73, + "endColumn": 14, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" }, { - "ruleId": "W9010", + "ruleId": "W9013", "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "TestBadStateMachine1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.ImageId", "category": "Security", - "startLine": 32, - "startColumn": 7, - "endLine": 32, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", + "startLine": 35, + "startColumn": 3, + "endLine": 35, + "endColumn": 23, + "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, { - "ruleId": "W9010", + "ruleId": "W9013", "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "TestBadStateMachine2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.ImageId", "category": "Security", - "startLine": 51, - "startColumn": 7, - "endLine": 51, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", + "startLine": 56, + "startColumn": 3, + "endLine": 56, + "endColumn": 23, + "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, { - "ruleId": "I3100", + "ruleId": "I3510", "severity": "INFO", - "message": "Previous generation instance type 't1.micro' - consider upgrading", + "message": "action 'iam:UploadSSHPublicKey' requires a resource of ['arn:${Partition}:iam::${Account}:user/.*']", "source": "CFN_LINT", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "myPolicy", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.InstanceType", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 33, - "startColumn": 7, - "endLine": 33, + "propertyPath": "Properties.PolicyDocument.Statement.0.Resource", + "category": "Security", + "startLine": 25, + "startColumn": 11, + "endLine": 25, "endColumn": 19, - "ruleDescription": "Checks for legacy instance type generations", + "ruleDescription": "Validate statement resources match the actions", "phase": "LINT" }, { - "ruleId": "I3100", + "ruleId": "I3510", "severity": "INFO", - "message": "Previous generation instance type 't1.micro' - consider upgrading", + "message": "action 'iam:GetLoginProfile' requires a resource of ['arn:${Partition}:iam::${Account}:user/.*']", "source": "CFN_LINT", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "myPolicy", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.InstanceType", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 52, - "startColumn": 7, - "endLine": 52, - "endColumn": 19, - "ruleDescription": "Checks for legacy instance type generations", + "propertyPath": "Properties.PolicyDocument.Statement.1.NotResource", + "category": "Security", + "startLine": 29, + "startColumn": 11, + "endLine": 29, + "endColumn": 22, + "ruleDescription": "Validate statement resources match the actions", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc1", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.ImageId", "category": "Best Practice", "startLine": 11, "startColumn": 7, "endLine": 11, - "endColumn": 23, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3140,42 +3010,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'AdditionalInfo' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc1", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.AdditionalInfo", "category": "Best Practice", "startLine": 12, "startColumn": 7, "endLine": 12, - "endColumn": 12, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'myVpcId' (type AWS::EC2::VPC::Id)" + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Sub:${AMIId})" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc2", + "logicalId": "mySnsTopic", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.TopicName", "category": "Best Practice", - "startLine": 23, + "startLine": 33, "startColumn": 7, - "endLine": 23, - "endColumn": 23, + "endLine": 33, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3183,280 +3055,297 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc2", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 24, - "startColumn": 7, - "endLine": 24, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'myVpcId' (type AWS::EC2::VPC::Id)" - } - }, + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Resource 'mySnsTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "mySnsTopic", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 32, - "startColumn": 7, + "startColumn": 5, "endLine": 32, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'TestBadStateMachine1' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "TestBadStateMachine1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 37, + "startColumn": 5, + "endLine": 37, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "message": "Resource 'TestBadStateMachine2' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "TestBadStateMachine2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.KeyName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 34, - "startColumn": 7, - "endLine": 34, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 58, + "startColumn": 5, + "endLine": 58, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/functions/tojsonstring_no_transform.yaml": { + "filePath": "bad/functions/tojsonstring_no_transform.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 3, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "F1031", + "severity": "FATAL", + "message": "Fn::ToJsonString requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use it", + "source": "SCHEMA", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "Topic", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.BlockDeviceMappings", - "category": "Best Practice", - "startLine": 35, + "propertyPath": "Properties.DisplayName", + "category": "Intrinsic Function", + "startLine": 10, "startColumn": 7, - "endLine": 35, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 10, + "endColumn": 18, + "ruleDescription": "Fn::ToJsonString requires the AWS::LanguageExtensions transform", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F1031", + "severity": "FATAL", + "message": "Fn::ToJsonString requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use it", + "source": "SCHEMA", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "Topic", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.NetworkInterfaces", - "category": "Best Practice", - "startLine": 43, + "propertyPath": "Metadata.Custom", + "category": "Intrinsic Function", + "startLine": 14, "startColumn": 7, - "endLine": 43, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 14, + "endColumn": 13, + "ruleDescription": "Fn::ToJsonString requires the AWS::LanguageExtensions transform", + "phase": "PARSE" }, { - "ruleId": "I9001", + "ruleId": "F1031", + "severity": "FATAL", + "message": "Fn::ToJsonString requires the AWS::LanguageExtensions transform, but it is not declared. Add 'Transform: AWS::LanguageExtensions' to use it", + "source": "SCHEMA", + "entity": { + "logicalId": "JsonOutput", + "entityType": "Output" + }, + "propertyPath": "Outputs/JsonOutput/Value", + "category": "Intrinsic Function", + "startLine": 19, + "startColumn": 5, + "endLine": 19, + "endColumn": 10, + "ruleDescription": "Fn::ToJsonString requires the AWS::LanguageExtensions transform", + "phase": "PARSE" + }, + { + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'Topic' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "Topic", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 46, - "startColumn": 7, - "endLine": 46, + "startLine": 9, + "startColumn": 5, + "endLine": 9, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Sub:yum install ${Package}\n)" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/functions_base64.yaml": { + "filePath": "bad/functions_base64.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 2, + "errors": 2, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F1012", + "severity": "FATAL", + "message": "Fn::FindInMap references non-existent mapping 'amimap'", + "source": "SCHEMA", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "myInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 51, - "startColumn": 7, - "endLine": 51, - "endColumn": 14, + "category": "Intrinsic Function", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 13, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "FindInMap map name must exist in Mappings", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource myInstance. Circular dependency with [myInstance -> myInstance]", + "source": "SCHEMA", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "myInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 52, - "startColumn": 7, - "endLine": 52, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "propertyPath": "Resources/myInstance", + "category": "Reference", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 13, + "ruleDescription": "Circular dependency detected", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E1011", + "severity": "ERROR", + "message": "'Fn::GetAtt' is not supported as an argument to 'Fn::FindInMap'", + "source": "SCHEMA", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "myInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.KeyName", - "category": "Best Practice", - "startLine": 53, - "startColumn": 7, - "endLine": 53, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.ImageId.Fn::FindInMap.2", + "category": "Intrinsic Function", + "startLine": 9, + "startColumn": 65, + "endLine": 9, + "endColumn": 66, + "ruleDescription": "Fn::FindInMap operands must be strings or one of Ref/Fn::FindInMap", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "E1021", + "severity": "ERROR", + "message": "['Random String'] is not of type 'string'", + "source": "SCHEMA", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "myInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.BlockDeviceMappings", - "category": "Best Practice", - "startLine": 54, - "startColumn": 7, - "endLine": 54, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "propertyPath": "Properties.UserData.Fn::Base64", + "category": "Intrinsic Function", + "startLine": 11, + "startColumn": 9, + "endLine": 11, + "endColumn": 19, + "ruleDescription": "Fn::Base64 argument must be a string or a string-producing intrinsic", + "phase": "PARSE" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "myInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.NetworkInterfaces", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 62, + "startLine": 9, "startColumn": 7, - "endLine": 62, - "endColumn": 24, + "endLine": 9, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (mapping 'amimap' not found)" } }, { @@ -3465,317 +3354,351 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "myInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 65, + "startLine": 10, "startColumn": 7, - "endLine": 65, + "endLine": 10, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Sub:yum install ${myPackage} ${Package})" + "resolutionSource": "dynamic (Base64 with non-string argument)" } }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'mySecurityGroupVpc1' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc1", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, + "startLine": 8, "startColumn": 5, - "endLine": 10, + "endLine": 8, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/functions_findinmap_enhanced_invalid_key.yaml": { + "filePath": "bad/functions_findinmap_enhanced_invalid_key.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'mySecurityGroupVpc2' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E7001", + "severity": "ERROR", + "message": "Mapping 'MapName'.'TopKey1' key '{\"To\":\"Json\",\"String\":\"Function\"}' does not match format '^[a-zA-Z0-9]+$'", + "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupVpc2", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "logicalId": "MapName", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 22, - "startColumn": 5, - "endLine": 22, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Mappings/MapName/TopKey1/{\"To\":\"Json\",\"String\":\"Function\"}", + "category": "Structure", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 40, + "ruleDescription": "Mappings are appropriately configured", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyEC2Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::Cluster" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ClusterName", "category": "Best Practice", - "startLine": 31, - "startColumn": 5, - "endLine": 31, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'AnotherInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'Cluster' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::Cluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 50, + "startLine": 10, "startColumn": 5, - "endLine": 50, + "endLine": 10, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/functions_select.yaml": { - "filePath": "bad/functions_select.yaml", + "bad/functions_getaz.yaml": { + "filePath": "bad/functions_getaz.yaml", "status": "OK", "metadata": { - "resourcesScanned": 4, + "resourcesScanned": 3, "counts": { - "fatal": 0, - "errors": 8, - "warnings": 0, + "fatal": 1, + "errors": 4, + "warnings": 3, "informational": 12, "debug": 0 }, - "suppressed": 0, + "suppressed": 1, "strict": false, "severityLevel": "DEBUG" }, "diagnostics": [ { - "ruleId": "E1017", - "severity": "ERROR", - "message": "'a' is not of type 'integer'", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource mySubnet1. Circular dependency with [mySubnet1 -> mySubnet1]", "source": "SCHEMA", "entity": { - "logicalId": "myInstance", + "logicalId": "mySubnet1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.AvailabilityZone.Fn::Select.0", - "category": "Intrinsic Function", - "startLine": 11, - "startColumn": 9, - "endLine": 11, - "endColumn": 10, - "ruleDescription": "Fn::Select requires exactly two operands and a list source", - "phase": "PARSE" + "propertyPath": "Resources/mySubnet1", + "category": "Reference", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 12, + "ruleDescription": "Circular dependency detected", + "phase": "LINT" }, { "ruleId": "E1017", "severity": "ERROR", - "message": "expected maximum item count: 2, found: 3", + "message": "'us-east-1a' is not a valid region for Fn::GetAZs (use '' for the current region)", "source": "SCHEMA", "entity": { - "logicalId": "myInstance1", + "logicalId": "mySubnet2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.AvailabilityZone.Fn::Select", + "propertyPath": "Properties.AvailabilityZone.Fn::Select.1.Fn::GetAZs", "category": "Intrinsic Function", - "startLine": 19, - "startColumn": 9, - "endLine": 19, - "endColumn": 19, + "startLine": 27, + "startColumn": 13, + "endLine": 27, + "endColumn": 23, "ruleDescription": "Fn::Select requires exactly two operands and a list source", "phase": "PARSE" }, { - "ruleId": "E1017", + "ruleId": "E3060", "severity": "ERROR", - "message": "'Fn::Join' is not supported as an argument to 'Fn::Select'", - "source": "SCHEMA", + "message": "'10.0.0.0/24' overlaps with '10.0.0.0/24'", + "source": "CFN_LINT", "entity": { - "logicalId": "myInstance2", + "logicalId": "mySubnet2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.AvailabilityZone.Fn::Select.1", - "category": "Intrinsic Function", - "startLine": 30, - "startColumn": 17, - "endLine": 30, - "endColumn": 18, - "ruleDescription": "Fn::Select requires exactly two operands and a list source", - "phase": "PARSE" + "propertyPath": "Properties.CidrBlock", + "category": "Resource", + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "mySubnet1", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 12 + }, + "message": "Overlapping subnet CIDR 10.0.0.0/24" + } + ], + "ruleDescription": "Validate subnet CIDRs do not overlap with other subnets", + "phase": "LINT", + "context": { + "extra": { + "cidr": "10.0.0.0/24" + } + } }, { - "ruleId": "E1017", + "ruleId": "E3060", "severity": "ERROR", - "message": "'foo' is not of type 'array'", - "source": "SCHEMA", + "message": "'10.0.0.0/24' overlaps with '10.0.0.0/24'", + "source": "CFN_LINT", "entity": { - "logicalId": "myInstance3", + "logicalId": "mySubnet3", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.AvailabilityZone.Fn::Select", - "category": "Intrinsic Function", - "startLine": 36, - "startColumn": 9, - "endLine": 36, - "endColumn": 19, - "ruleDescription": "Fn::Select requires exactly two operands and a list source", - "phase": "PARSE" + "propertyPath": "Properties.CidrBlock", + "category": "Resource", + "startLine": 32, + "startColumn": 7, + "endLine": 32, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "mySubnet1", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 12 + }, + "message": "Overlapping subnet CIDR 10.0.0.0/24" + } + ], + "ruleDescription": "Validate subnet CIDRs do not overlap with other subnets", + "phase": "LINT", + "context": { + "extra": { + "cidr": "10.0.0.0/24" + } + } }, { - "ruleId": "E1152", + "ruleId": "E9004", "severity": "ERROR", - "message": "'String' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "message": "'AvailbilityZone' is not one of ['AssignIpv6AddressOnCreation', 'AvailabilityZone', 'AvailabilityZoneId', 'BlockPublicAccessStates', 'BlockPublicAccessStates.InternetGatewayBlockMode', 'CidrBlock', 'EnableDns64', 'EnableLniAtDeviceIndex', 'Ipv4IpamPoolId', 'Ipv4NetmaskLength', 'Ipv6CidrBlock', 'Ipv6CidrBlocks', 'Ipv6IpamPoolId', 'Ipv6Native', 'Ipv6NetmaskLength', 'MapPublicIpOnLaunch', 'NetworkAclAssociationId', 'OutpostArn', 'PrivateDnsNameOptionsOnLaunch.EnableResourceNameDnsAAAARecord', 'PrivateDnsNameOptionsOnLaunch.EnableResourceNameDnsARecord', 'PrivateDnsNameOptionsOnLaunch.HostnameType', 'SubnetId', 'Tags', 'VpcId']", + "source": "SCHEMA", "entity": { - "logicalId": "myInstance", + "logicalId": "mySubnet3", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.AvailabilityZone", + "suggestedFix": "Check the resource type documentation for valid GetAtt attributes", "category": "Intrinsic Function", - "startLine": 9, + "startLine": 33, "startColumn": 7, - "endLine": 9, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "String" - } + "endLine": 33, + "endColumn": 23, + "ruleDescription": "GetAtt attribute must exist on target resource type", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'String' does not match format 'AWS::EC2::Image.Id'", + "ruleId": "W1030", + "severity": "WARN", + "message": "{'Ref': 'VPC'} is not a 'AWS::EC2::VPC.Id' with pattern '^vpc-(([0-9A-Fa-f]{8})|([0-9A-Fa-f]{17}))$' when 'Ref' is resolved", "source": "CFN_LINT", "entity": { - "logicalId": "myInstance1", + "logicalId": "mySubnet1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 17, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 13, "startColumn": 7, - "endLine": 17, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "String" - } + "endLine": 13, + "endColumn": 12, + "ruleDescription": "Validate the values that come from a Ref function", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'String' does not match format 'AWS::EC2::Image.Id'", + "ruleId": "W1030", + "severity": "WARN", + "message": "{'Ref': 'VPC'} is not a 'AWS::EC2::VPC.Id' with pattern '^vpc-(([0-9A-Fa-f]{8})|([0-9A-Fa-f]{17}))$' when 'Ref' is resolved", "source": "CFN_LINT", "entity": { - "logicalId": "myInstance2", + "logicalId": "mySubnet2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 26, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 22, "startColumn": 7, - "endLine": 26, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "String" - } + "endLine": 22, + "endColumn": 12, + "ruleDescription": "Validate the values that come from a Ref function", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'String' does not match format 'AWS::EC2::Image.Id'", + "ruleId": "W1030", + "severity": "WARN", + "message": "{'Ref': 'VPC'} is not a 'AWS::EC2::VPC.Id' with pattern '^vpc-(([0-9A-Fa-f]{8})|([0-9A-Fa-f]{17}))$' when 'Ref' is resolved", "source": "CFN_LINT", "entity": { - "logicalId": "myInstance3", + "logicalId": "mySubnet3", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 34, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 31, "startColumn": 7, - "endLine": 34, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "String" - } + "endLine": 31, + "endColumn": 12, + "ruleDescription": "Validate the values that come from a Ref function", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "mySubnet1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 9, + "startLine": 13, "startColumn": 7, - "endLine": 9, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 13, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3785,67 +3708,64 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "mySubnet1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 10, + "startLine": 14, "startColumn": 7, - "endLine": 10, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 14, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Select on non-list value)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance1", + "logicalId": "mySubnet1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 17, + "startLine": 15, "startColumn": 7, - "endLine": 17, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 15, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Select with unresolvable arguments)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance1", + "logicalId": "mySubnet2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 18, + "startLine": 22, "startColumn": 7, - "endLine": 18, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 22, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3855,20 +3775,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance2", + "logicalId": "mySubnet2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 26, + "startLine": 23, "startColumn": 7, - "endLine": 26, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 23, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3881,41 +3800,39 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance2", + "logicalId": "mySubnet2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 27, + "startLine": 24, "startColumn": 7, - "endLine": 27, + "endLine": 24, "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Select on non-list value)" + "resolutionSource": "dynamic (Select with unresolvable arguments)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance3", + "logicalId": "mySubnet3", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 34, + "startLine": 31, "startColumn": 7, - "endLine": 34, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 31, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3925,20 +3842,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance3", + "logicalId": "mySubnet3", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 35, + "startLine": 32, "startColumn": 7, - "endLine": 35, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 32, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3946,41 +3862,44 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "mySubnet3", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Select with unresolvable arguments)" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myInstance1' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'mySubnet1' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myInstance1", + "logicalId": "mySubnet1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 16, + "startLine": 12, "startColumn": 5, - "endLine": 16, + "endLine": 12, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -3988,19 +3907,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myInstance2' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'mySubnet2' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myInstance2", + "logicalId": "mySubnet2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 25, + "startLine": 21, "startColumn": 5, - "endLine": 25, + "endLine": 21, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -4008,35 +3927,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myInstance3' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'mySubnet3' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myInstance3", + "logicalId": "mySubnet3", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 33, + "startLine": 30, "startColumn": 5, - "endLine": 33, + "endLine": 30, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/generic.yaml": { - "filePath": "bad/generic.yaml", + "bad/functions_join.yaml": { + "filePath": "bad/functions_join.yaml", "status": "OK", "metadata": { - "resourcesScanned": 19, + "resourcesScanned": 2, "counts": { - "fatal": 23, - "errors": 1, - "warnings": 11, - "informational": 37, + "fatal": 0, + "errors": 2, + "warnings": 0, + "informational": 6, "debug": 0 }, "suppressed": 0, @@ -4045,884 +3964,464 @@ }, "diagnostics": [ { - "ruleId": "F0005", - "severity": "FATAL", - "message": "'Errors' is not a valid top-level template section", - "source": "SCHEMA", - "propertyPath": "Errors", - "category": "Structure", - "startLine": 4, - "startColumn": 1, - "endLine": 4, - "endColumn": 7, - "ruleDescription": "Top-level keys must be valid section names", - "phase": "SCHEMA" - }, - { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'pIops' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'ElasticLoadBalancer', 'MyEC2Instance', 'MyEC2Instance1', 'MyEC2Instance3', 'MyEc2BlockDevice', 'PermitAllInbound', 'RolePolicies', 'RootInstanceProfile', 'RootRole', 'SecurityGroup', 'conditionLoadBalancer', 'lambdaMap1', 'lambdaMap2', 'myAcl', 'myEc2Instance4', 'myIamProfile', 'myIamProfile2', 'myIamProfile3', 'myLambdaTwo', 'myParam']", - "source": "SCHEMA", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-1234' does not match format 'AWS::EC2::Image.Id'", + "source": "CFN_LINT", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "myInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 52, - "startColumn": 13, - "endLine": 52, - "endColumn": 17, + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-1234" + } }, { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'WebServerPort' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'ElasticLoadBalancer', 'MyEC2Instance', 'MyEC2Instance1', 'MyEC2Instance3', 'MyEc2BlockDevice', 'PermitAllInbound', 'RolePolicies', 'RootInstanceProfile', 'RootRole', 'SecurityGroup', 'conditionLoadBalancer', 'lambdaMap1', 'lambdaMap2', 'myAcl', 'myEc2Instance4', 'myIamProfile', 'myIamProfile2', 'myIamProfile3', 'myLambdaTwo', 'myParam']", - "source": "SCHEMA", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-1234' does not match format 'AWS::EC2::Image.Id'", + "source": "CFN_LINT", "entity": { - "logicalId": "ElasticLoadBalancer", + "logicalId": "myInstance2", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Listeners.0.InstancePort", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 119, - "startColumn": 11, - "endLine": 119, - "endColumn": 23, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" + "startLine": 19, + "startColumn": 7, + "endLine": 19, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-1234" + } }, { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'WebServerPort' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'ElasticLoadBalancer', 'MyEC2Instance', 'MyEC2Instance1', 'MyEC2Instance3', 'MyEc2BlockDevice', 'PermitAllInbound', 'RolePolicies', 'RootInstanceProfile', 'RootRole', 'SecurityGroup', 'conditionLoadBalancer', 'lambdaMap1', 'lambdaMap2', 'myAcl', 'myEc2Instance4', 'myIamProfile', 'myIamProfile2', 'myIamProfile3', 'myLambdaTwo', 'myParam']", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ElasticLoadBalancer", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.HealthCheck.Target.Fn::Join.1.1", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 128, - "startColumn": 20, - "endLine": 128, - "endColumn": 21, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" - }, - { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('Fn::If' was unexpected)", - "source": "SCHEMA", - "entity": { - "logicalId": "myIamProfile3", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Fn::If", - "category": "Schema", - "startLine": 34, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 9, "startColumn": 7, - "endLine": 34, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Additional properties are not allowed", + "endLine": 9, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "Fn::If", - "extra": { - "allowed_properties": [ - "Arn", - "AssumeRolePolicyDocument", - "Description", - "ManagedPolicyArns", - "MaxSessionDuration", - "Path", - "PermissionsBoundary", - "Policies", - "RoleId", - "RoleName", - "Tags" - ] - } + "lifecycle": "create-only" } }, { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('FakeKey' was unexpected)", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "myInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.FakeKey", - "category": "Schema", - "startLine": 46, + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 10, "startColumn": 7, - "endLine": 46, - "endColumn": 14, + "endLine": 10, + "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Additional properties are not allowed", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "FakeKey", - "extra": { - "allowed_properties": [ - "AdditionalInfo", - "Affinity", - "AvailabilityZone", - "BlockDeviceMappings", - "CpuOptions", - "CreditSpecification", - "DisableApiTermination", - "EbsOptimized", - "ElasticGpuSpecifications", - "ElasticInferenceAccelerators", - "EnclaveOptions", - "HibernationOptions", - "HostId", - "HostResourceGroupArn", - "IamInstanceProfile", - "ImageId", - "InstanceId", - "InstanceInitiatedShutdownBehavior", - "InstanceType", - "Ipv6AddressCount", - "Ipv6Addresses", - "KernelId", - "KeyName", - "LaunchTemplate", - "LicenseSpecifications", - "MetadataOptions", - "Monitoring", - "NetworkInterfaces", - "PlacementGroupName", - "PrivateDnsName", - "PrivateDnsNameOptions", - "PrivateIp", - "PrivateIpAddress", - "PropagateTagsToVolumeOnCreation", - "PublicDnsName", - "PublicIp", - "RamdiskId", - "SecurityGroupIds", - "SecurityGroups", - "SourceDestCheck", - "SsmAssociations", - "State", - "SubnetId", - "Tags", - "Tenancy", - "UserData", - "Volumes", - "VpcId" - ] - } + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Base64 with non-string argument)" } }, { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('BadSubX2Key' was unexpected)", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "myInstance2", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.BadSubX2Key", - "category": "Schema", - "startLine": 55, - "startColumn": 13, - "endLine": 55, - "endColumn": 24, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 19, + "startColumn": 7, + "endLine": 19, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Additional properties are not allowed", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "BadSubX2Key", - "extra": { - "allowed_properties": [ - "AdditionalInfo", - "Affinity", - "AvailabilityZone", - "BlockDeviceMappings", - "CpuOptions", - "CreditSpecification", - "DisableApiTermination", - "EbsOptimized", - "ElasticGpuSpecifications", - "ElasticInferenceAccelerators", - "EnclaveOptions", - "HibernationOptions", - "HostId", - "HostResourceGroupArn", - "IamInstanceProfile", - "ImageId", - "InstanceId", - "InstanceInitiatedShutdownBehavior", - "InstanceType", - "Ipv6AddressCount", - "Ipv6Addresses", - "KernelId", - "KeyName", - "LaunchTemplate", - "LicenseSpecifications", - "MetadataOptions", - "Monitoring", - "NetworkInterfaces", - "PlacementGroupName", - "PrivateDnsName", - "PrivateDnsNameOptions", - "PrivateIp", - "PrivateIpAddress", - "PropagateTagsToVolumeOnCreation", - "PublicDnsName", - "PublicIp", - "RamdiskId", - "SecurityGroupIds", - "SecurityGroups", - "SourceDestCheck", - "SsmAssociations", - "State", - "SubnetId", - "Tags", - "Tenancy", - "UserData", - "Volumes", - "VpcId" - ] - } + "lifecycle": "create-only" } }, { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('BadKey' was unexpected)", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "myInstance2", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.NetworkInterfaces.0.BadKey", - "category": "Schema", - "startLine": 59, - "startColumn": 11, - "endLine": 59, - "endColumn": 17, + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 20, + "startColumn": 7, + "endLine": 20, + "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Additional properties are not allowed", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "BadKey", - "extra": { - "allowed_properties": [ - "AdditionalInfo", - "Affinity", - "AvailabilityZone", - "BlockDeviceMappings", - "CpuOptions", - "CreditSpecification", - "DisableApiTermination", - "EbsOptimized", - "ElasticGpuSpecifications", - "ElasticInferenceAccelerators", - "EnclaveOptions", - "HibernationOptions", - "HostId", - "HostResourceGroupArn", - "IamInstanceProfile", - "ImageId", - "InstanceId", - "InstanceInitiatedShutdownBehavior", - "InstanceType", - "Ipv6AddressCount", - "Ipv6Addresses", - "KernelId", - "KeyName", - "LaunchTemplate", - "LicenseSpecifications", - "MetadataOptions", - "Monitoring", - "NetworkInterfaces", - "PlacementGroupName", - "PrivateDnsName", - "PrivateDnsNameOptions", - "PrivateIp", - "PrivateIpAddress", - "PropagateTagsToVolumeOnCreation", - "PublicDnsName", - "PublicIp", - "RamdiskId", - "SecurityGroupIds", - "SecurityGroups", - "SourceDestCheck", - "SsmAssociations", - "State", - "SubnetId", - "Tags", - "Tenancy", - "UserData", - "Volumes", - "VpcId" - ] - } + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Base64 with unresolvable argument)" } }, { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('PolicyDocument1' was unexpected. Did you mean 'PolicyDocument'?)", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "RootRole", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Policies.0.PolicyDocument1", - "category": "Schema", - "startLine": 84, - "startColumn": 11, - "endLine": 84, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Additional properties are not allowed", - "phase": "SCHEMA", - "context": { - "property": "PolicyDocument1", - "extra": { - "allowed_properties": [ - "Arn", - "AssumeRolePolicyDocument", - "Description", - "ManagedPolicyArns", - "MaxSessionDuration", - "Path", - "PermissionsBoundary", - "Policies", - "RoleId", - "RoleName", - "Tags" - ] - } - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('FakeKey' was unexpected)", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myInstance2' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ElasticLoadBalancer", + "logicalId": "myInstance2", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.HealthCheck.FakeKey", - "category": "Schema", - "startLine": 123, - "startColumn": 9, - "endLine": 123, - "endColumn": 16, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Additional properties are not allowed", - "phase": "SCHEMA", - "context": { - "property": "FakeKey", - "extra": { - "allowed_properties": [ - "AccessLoggingPolicy", - "AppCookieStickinessPolicy", - "AvailabilityZones", - "CanonicalHostedZoneName", - "CanonicalHostedZoneNameID", - "ConnectionDrainingPolicy", - "ConnectionSettings", - "CrossZone", - "DNSName", - "HealthCheck", - "Instances", - "LBCookieStickinessPolicy", - "Listeners", - "LoadBalancerName", - "Policies", - "Scheme", - "SecurityGroups", - "SourceSecurityGroup", - "Subnets", - "Tags" - ] - } - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 18, + "startColumn": 5, + "endLine": 18, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/functions_ref.yaml": { + "filePath": "bad/functions_ref.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 6, + "errors": 4, + "warnings": 5, + "informational": 23, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "F3003", + "ruleId": "F1018", "severity": "FATAL", - "message": "'AssumeRolePolicyDocument' is a required property", + "message": "Fn::Sub variable '${Package}' does not reference a valid resource, parameter, or pseudo-parameter", "source": "SCHEMA", "entity": { - "logicalId": "myIamProfile", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'AssumeRolePolicyDocument'", - "category": "Schema", - "startLine": 25, - "startColumn": 3, - "endLine": 25, + "propertyPath": "Properties.UserData", + "category": "Intrinsic Function", + "startLine": 46, + "startColumn": 7, + "endLine": 46, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Sub variables must resolve", + "phase": "SCHEMA", + "context": { + "resolutionSource": "dynamic (Sub:yum install ${Package}\n)" + } }, { - "ruleId": "F3003", + "ruleId": "F1020", "severity": "FATAL", - "message": "'AssumeRolePolicyDocument' is a required property", + "message": "'pIops' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'AnotherInstance', 'MyEC2Instance', 'mySecurityGroupVpc1', 'mySecurityGroupVpc2', 'myVpcId']", "source": "SCHEMA", "entity": { - "logicalId": "myIamProfile2", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'AssumeRolePolicyDocument'", - "category": "Schema", - "startLine": 29, - "startColumn": 5, - "endLine": 29, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Required property missing", + "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 40, + "startColumn": 13, + "endLine": 40, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Ref/GetAtt target must exist", "phase": "SCHEMA" }, { - "ruleId": "F3003", + "ruleId": "F1020", "severity": "FATAL", - "message": "'PolicyDocument' is a required property", + "message": "'pIops' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'AnotherInstance', 'MyEC2Instance', 'mySecurityGroupVpc1', 'mySecurityGroupVpc2', 'myVpcId']", "source": "SCHEMA", "entity": { - "logicalId": "RootRole", + "logicalId": "AnotherInstance", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Policies.0", - "suggestedFix": "Add the required property 'PolicyDocument'", - "category": "Schema", - "startLine": 83, - "startColumn": 21, - "endLine": 83, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Required property missing", + "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 59, + "startColumn": 13, + "endLine": 59, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Ref/GetAtt target must exist", "phase": "SCHEMA" }, { - "ruleId": "F3003", + "ruleId": "F1020", "severity": "FATAL", - "message": "'IpProtocol' is a required property", + "message": "'httpdPackage' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'AnotherInstance', 'MyEC2Instance', 'mySecurityGroupVpc1', 'mySecurityGroupVpc2', 'myVpcId']", "source": "SCHEMA", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "AnotherInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'IpProtocol'", - "category": "Schema", - "startLine": 138, - "startColumn": 5, - "endLine": 138, + "propertyPath": "Properties.UserData", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 65, + "startColumn": 7, + "endLine": 65, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA", + "context": { + "resolutionSource": "dynamic (Sub:yum install ${myPackage} ${Package})" + } }, { - "ruleId": "F3003", + "ruleId": "F3004", "severity": "FATAL", - "message": "'DefaultAction' is a required property", + "message": "Circular Dependencies for resource mySecurityGroupVpc1. Circular dependency with [mySecurityGroupVpc1 -> mySecurityGroupVpc2 -> mySecurityGroupVpc1]", "source": "SCHEMA", "entity": { - "logicalId": "myAcl", + "logicalId": "mySecurityGroupVpc1", "entityType": "Resource", - "resourceType": "AWS::WAFRegional::WebACL" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'DefaultAction'", - "category": "Schema", - "startLine": 142, - "startColumn": 5, - "endLine": 142, - "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" - }, - { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'MetricName' is a required property", - "source": "SCHEMA", - "entity": { - "logicalId": "myAcl", - "entityType": "Resource", - "resourceType": "AWS::WAFRegional::WebACL" - }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'MetricName'", - "category": "Schema", - "startLine": 142, - "startColumn": 5, - "endLine": 142, - "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" - }, - { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'Code' is a required property", - "source": "SCHEMA", - "entity": { - "logicalId": "myLambdaTwo", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'Code'", - "category": "Schema", - "startLine": 146, - "startColumn": 5, - "endLine": 146, - "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" - }, - { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'Role' is a required property", - "source": "SCHEMA", - "entity": { - "logicalId": "myLambdaTwo", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'Role'", - "category": "Schema", - "startLine": 146, - "startColumn": 5, - "endLine": 146, - "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" - }, - { - "ruleId": "F3006", - "severity": "FATAL", - "message": "Unknown resource type 'AWS::EC2::Instance1'", - "source": "SCHEMA", - "entity": { - "logicalId": "MyEC2Instance1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance1" - }, - "category": "Schema", - "startLine": 23, + "propertyPath": "Resources/mySecurityGroupVpc1", + "category": "Reference", + "startLine": 8, "startColumn": 3, - "endLine": 23, - "endColumn": 17, - "ruleDescription": "AWS resource type must be recognized and available in the configured region", - "phase": "SCHEMA", - "context": { - "extra": { - "resource_type": "AWS::EC2::Instance1" - } - } + "endLine": 8, + "endColumn": 22, + "ruleDescription": "Circular dependency detected", + "phase": "LINT" }, { - "ruleId": "F3012", + "ruleId": "F3004", "severity": "FATAL", - "message": "['1'] is not of type 'string'", + "message": "Circular Dependencies for resource mySecurityGroupVpc2. Circular dependency with [mySecurityGroupVpc2 -> mySecurityGroupVpc1 -> mySecurityGroupVpc2]", "source": "SCHEMA", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "mySecurityGroupVpc2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.NetworkInterfaces.0.DeviceIndex", - "category": "Schema", - "startLine": 57, - "startColumn": 11, - "endLine": 57, + "propertyPath": "Resources/mySecurityGroupVpc2", + "category": "Reference", + "startLine": 20, + "startColumn": 3, + "endLine": 20, "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type mismatch", - "phase": "SCHEMA", - "context": { - "actualValue": [ - "1" - ] - } + "ruleDescription": "Circular dependency detected", + "phase": "LINT" }, { - "ruleId": "F3012", - "severity": "FATAL", - "message": "'Test' is not of type 'integer'", - "source": "SCHEMA", + "ruleId": "E1150", + "severity": "ERROR", + "message": "'sg-1234567' does not match format 'AWS::EC2::SecurityGroup.Id'", + "source": "CFN_LINT", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "mySecurityGroupVpc1", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.FromPort", - "category": "Schema", - "startLine": 139, - "startColumn": 7, - "endLine": 139, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type mismatch", + "propertyPath": "Properties.SecurityGroupIngress.0.SourceSecurityGroupId", + "category": "Intrinsic Function", + "startLine": 16, + "startColumn": 9, + "endLine": 16, + "endColumn": 30, + "ruleDescription": "Validate security group format", "phase": "SCHEMA", "context": { - "actualValue": "Test", - "expectedConstraint": "integer" + "actualValue": "sg-1234567" } }, { - "ruleId": "F3014", - "severity": "FATAL", - "message": "Exactly one of ['CidrIp', 'CidrIpv6', 'SourcePrefixListId', 'SourceSecurityGroupId', 'SourceSecurityGroupName'] must be specified", - "source": "SCHEMA", - "entity": { - "logicalId": "SecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" - }, - "propertyPath": "Properties", - "category": "Schema", - "startLine": 138, - "startColumn": 5, - "endLine": 138, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Exactly one of properties required (requiredXor)", - "phase": "SCHEMA" - }, - { - "ruleId": "F6101", - "severity": "FATAL", - "message": "'DNE' is not one of ['CanonicalHostedZoneName', 'CanonicalHostedZoneNameID', 'DNSName', 'SourceSecurityGroup', 'SourceSecurityGroup.GroupName', 'SourceSecurityGroup.OwnerAlias']", - "source": "SCHEMA", - "entity": { - "logicalId": "myErrorOutput", - "entityType": "Output" - }, - "propertyPath": "Outputs/myErrorOutput/Value.Fn::GetAtt.1", - "category": "Structure", - "startLine": 228, - "startColumn": 3, - "endLine": 228, - "endColumn": 16, - "ruleDescription": "Output value must be a string", - "phase": "SCHEMA" - }, - { - "ruleId": "E3530", + "ruleId": "E3687", "severity": "ERROR", - "message": "'Statement' is a required property", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", "source": "CFN_LINT", "entity": { - "logicalId": "myIamProfile3", + "logicalId": "mySecurityGroupVpc1", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.AssumeRolePolicyDocument", - "suggestedFix": "Add a Statement array to the AssumeRolePolicyDocument", + "propertyPath": "Properties.SecurityGroupIngress.0", "category": "Resource", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 31, - "ruleDescription": "Validate IAM trust policies", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'myParam' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "myParam", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/myParam", - "category": "Best Practice", "startLine": 15, - "startColumn": 3, + "startColumn": 19, "endLine": 15, - "endColumn": 10, - "ruleDescription": "Check if Parameters are Used", + "endColumn": 20, + "ruleDescription": "Validate to and from ports based on the protocol", "phase": "LINT" }, { - "ruleId": "W3696", - "severity": "WARN", - "message": "Resource type 'AWS::WAFRegional::WebACL' is from a service that is sunsetting", + "ruleId": "E3687", + "severity": "ERROR", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", "source": "CFN_LINT", "entity": { - "logicalId": "myAcl", + "logicalId": "mySecurityGroupVpc1", "entityType": "Resource", - "resourceType": "AWS::WAFRegional::WebACL" - }, - "category": "Deprecation", - "startLine": 140, - "startColumn": 3, - "endLine": 140, - "endColumn": 8, - "ruleDescription": "Resource type is from a service that is sunsetting", - "phase": "SCHEMA" - }, - { - "ruleId": "W8003", - "severity": "WARN", - "message": "Fn::Equals in condition 'IsProduction' will always return True", - "source": "CFN_LINT", - "entity": { - "logicalId": "IsProduction", - "entityType": "Condition" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Conditions/IsProduction", - "category": "Best Practice", - "startLine": 20, - "startColumn": 3, - "endLine": 20, - "endColumn": 15, - "ruleDescription": "Fn::Equals will always return true or false", - "phase": "PARSE" + "propertyPath": "Properties.SecurityGroupIngress.1", + "category": "Resource", + "startLine": 18, + "startColumn": 19, + "endLine": 18, + "endColumn": 20, + "ruleDescription": "Validate to and from ports based on the protocol", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", + "ruleId": "E3687", + "severity": "ERROR", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", "source": "CFN_LINT", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "mySecurityGroupVpc2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.KeyName", - "category": "Best Practice", - "startLine": 45, - "startColumn": 7, - "endLine": 45, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Properties.SecurityGroupIngress.0", + "category": "Resource", + "startLine": 27, + "startColumn": 19, + "endLine": 27, + "endColumn": 20, + "ruleDescription": "Validate to and from ports based on the protocol", + "phase": "LINT" }, { "ruleId": "W9003", "severity": "WARN", - "message": "5 is not of type 'string' - automatically coerced (number to string)", + "message": "1 is not of type 'string' - automatically coerced (number to string)", "source": "CFN_LINT", "entity": { - "logicalId": "ElasticLoadBalancer", + "logicalId": "mySecurityGroupVpc1", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.HealthCheck.UnhealthyThreshold", + "propertyPath": "Properties.SecurityGroupIngress.0.IpProtocol", "category": "Best Practice", - "startLine": 132, + "startLine": 15, "startColumn": 9, - "endLine": 132, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", - "source": "CFN_LINT", - "entity": { - "logicalId": "conditionLoadBalancer", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" - }, - "propertyPath": "Properties.ConnectionDrainingPolicy.Enabled", - "category": "Best Practice", - "startLine": 150, - "startColumn": 5, - "endLine": 150, - "endColumn": 15, - "conditionScenario": { - "IsProduction": true - }, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "endLine": 15, + "endColumn": 19, "ruleDescription": "Property type coercion warning", "phase": "SCHEMA" }, { "ruleId": "W9003", "severity": "WARN", - "message": "'60' is not of type 'integer' - automatically coerced (string to integer)", + "message": "1 is not of type 'string' - automatically coerced (number to string)", "source": "CFN_LINT", "entity": { - "logicalId": "conditionLoadBalancer", + "logicalId": "mySecurityGroupVpc1", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ConnectionDrainingPolicy.Timeout", + "propertyPath": "Properties.SecurityGroupIngress.1.IpProtocol", "category": "Best Practice", - "startLine": 150, - "startColumn": 5, - "endLine": 150, - "endColumn": 15, - "conditionScenario": { - "IsProduction": true - }, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "startLine": 18, + "startColumn": 9, + "endLine": 18, + "endColumn": 19, "ruleDescription": "Property type coercion warning", "phase": "SCHEMA" }, { "ruleId": "W9003", "severity": "WARN", - "message": "true is not of type 'string' - automatically coerced (boolean to string)", + "message": "1 is not of type 'string' - automatically coerced (number to string)", "source": "CFN_LINT", "entity": { - "logicalId": "conditionLoadBalancer", + "logicalId": "mySecurityGroupVpc2", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags.{}.Value", + "propertyPath": "Properties.SecurityGroupIngress.0.IpProtocol", "category": "Best Practice", - "startLine": 150, - "startColumn": 5, - "endLine": 150, - "endColumn": 15, - "conditionScenario": { - "IsProduction": true - }, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "startLine": 27, + "startColumn": 9, + "endLine": 27, + "endColumn": 19, "ruleDescription": "Property type coercion warning", "phase": "SCHEMA" }, @@ -4938,28 +4437,9 @@ }, "propertyPath": "Properties.ImageId", "category": "Security", - "startLine": 43, - "startColumn": 7, - "endLine": 43, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", - "phase": "LINT" - }, - { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", - "source": "ENGINE", - "entity": { - "logicalId": "MyEC2Instance3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 63, + "startLine": 32, "startColumn": 7, - "endLine": 63, + "endLine": 32, "endColumn": 14, "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" @@ -4970,38 +4450,19 @@ "message": "Hardcoded AMI ID - use a parameter or mapping for portability", "source": "ENGINE", "entity": { - "logicalId": "MyEc2BlockDevice", + "logicalId": "AnotherInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Security", - "startLine": 219, + "startLine": 51, "startColumn": 7, - "endLine": 219, + "endLine": 51, "endColumn": 14, "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "ElasticLoadBalancer", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" - }, - "propertyPath": "Properties.HealthCheck.Target.Fn::Join", - "category": "Intrinsic Function", - "startLine": 125, - "startColumn": 11, - "endLine": 125, - "endColumn": 19, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, { "ruleId": "I3100", "severity": "INFO", @@ -5015,9 +4476,9 @@ "propertyPath": "Properties.InstanceType", "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 44, + "startLine": 33, "startColumn": 7, - "endLine": 44, + "endLine": 33, "endColumn": 19, "ruleDescription": "Checks for legacy instance type generations", "phase": "LINT" @@ -5028,16 +4489,16 @@ "message": "Previous generation instance type 't1.micro' - consider upgrading", "source": "CFN_LINT", "entity": { - "logicalId": "MyEc2BlockDevice", + "logicalId": "AnotherInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 220, + "startLine": 52, "startColumn": 7, - "endLine": 220, + "endLine": 52, "endColumn": 19, "ruleDescription": "Checks for legacy instance type generations", "phase": "LINT" @@ -5045,20 +4506,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "mySecurityGroupVpc1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 43, + "startLine": 11, "startColumn": 7, - "endLine": 43, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 11, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5068,43 +4528,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "mySecurityGroupVpc1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 44, + "startLine": 12, "startColumn": 7, - "endLine": 44, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 12, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter 'myVpcId' (type AWS::EC2::VPC::Id)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "mySecurityGroupVpc2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.KeyName", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 45, + "startLine": 23, "startColumn": 7, - "endLine": 45, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 23, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5114,42 +4573,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "mySecurityGroupVpc2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.BlockDeviceMappings", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 48, + "startLine": 24, "startColumn": 7, - "endLine": 48, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 24, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter 'myVpcId' (type AWS::EC2::VPC::Id)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { "logicalId": "MyEC2Instance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.NetworkInterfaces", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 56, + "startLine": 32, "startColumn": 7, - "endLine": 56, - "endColumn": 24, + "endLine": 32, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -5160,113 +4619,22 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance3", + "logicalId": "MyEC2Instance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 63, + "startLine": 33, "startColumn": 7, - "endLine": 63, - "endColumn": 14, + "endLine": 33, + "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "RootRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Path", - "category": "Best Practice", - "startLine": 81, - "startColumn": 7, - "endLine": 81, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "RootInstanceProfile", - "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" - }, - "propertyPath": "Properties.Path", - "category": "Best Practice", - "startLine": 105, - "startColumn": 7, - "endLine": 105, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZones' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ElasticLoadBalancer", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" - }, - "propertyPath": "Properties.AvailabilityZones", - "category": "Best Practice", - "startLine": 113, - "startColumn": 7, - "endLine": 113, - "endColumn": 24, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HealthCheck' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ElasticLoadBalancer", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" - }, - "propertyPath": "Properties.HealthCheck", - "category": "Best Practice", - "startLine": 122, - "startColumn": 7, - "endLine": 122, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", "context": { "lifecycle": "conditional-create-only" } @@ -5274,19 +4642,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.KeyName", "category": "Best Practice", - "startLine": 139, + "startLine": 34, "startColumn": 7, - "endLine": 139, - "endColumn": 15, + "endLine": 34, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -5297,85 +4665,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "myAcl", - "entityType": "Resource", - "resourceType": "AWS::WAFRegional::WebACL" - }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 143, - "startColumn": 7, - "endLine": 143, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "lambdaMap1", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 196, - "startColumn": 7, - "endLine": 196, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "lambdaMap2", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.BlockDeviceMappings", "category": "Best Practice", - "startLine": 204, + "startLine": 35, "startColumn": 7, - "endLine": 204, - "endColumn": 23, + "endLine": 35, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermitAllInbound", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.NetworkAclId", + "propertyPath": "Properties.NetworkInterfaces", "category": "Best Practice", - "startLine": 212, + "startLine": 43, "startColumn": 7, - "endLine": 212, - "endColumn": 19, + "endLine": 43, + "endColumn": 24, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -5386,24 +4711,25 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RuleNumber' is create-only; updating it will cause resource replacement", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermitAllInbound", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkAclEntry" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.RuleNumber", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 213, + "startLine": 46, "startColumn": 7, - "endLine": 213, - "endColumn": 17, + "endLine": 46, + "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Sub:yum install ${Package}\n)" } }, { @@ -5412,15 +4738,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEc2BlockDevice", + "logicalId": "AnotherInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 219, + "startLine": 51, "startColumn": 7, - "endLine": 219, + "endLine": 51, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -5435,15 +4761,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEc2BlockDevice", + "logicalId": "AnotherInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 220, + "startLine": 52, "startColumn": 7, - "endLine": 220, + "endLine": 52, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -5458,15 +4784,15 @@ "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEc2BlockDevice", + "logicalId": "AnotherInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.KeyName", "category": "Best Practice", - "startLine": 221, + "startLine": 53, "startColumn": 7, - "endLine": 221, + "endLine": 53, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -5481,15 +4807,15 @@ "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEc2BlockDevice", + "logicalId": "AnotherInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.BlockDeviceMappings", "category": "Best Practice", - "startLine": 222, + "startLine": 54, "startColumn": 7, - "endLine": 222, + "endLine": 54, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -5504,15 +4830,15 @@ "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEc2BlockDevice", + "logicalId": "AnotherInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.NetworkInterfaces", "category": "Best Practice", - "startLine": 223, + "startLine": 62, "startColumn": 7, - "endLine": 223, + "endLine": 62, "endColumn": 24, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -5522,190 +4848,54 @@ } }, { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myIamProfile' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "myIamProfile", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 25, - "startColumn": 3, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myIamProfile2' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "myIamProfile2", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 29, - "startColumn": 5, - "endLine": 29, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myIamProfile3' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "myIamProfile3", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 32, - "startColumn": 5, - "endLine": 32, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyEC2Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MyEC2Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 42, - "startColumn": 5, - "endLine": 42, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyEC2Instance3' of type 'AWS::EC2::Instance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MyEC2Instance3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 62, - "startColumn": 5, - "endLine": 62, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myEc2Instance4' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myEc2Instance4", + "logicalId": "AnotherInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 67, - "startColumn": 5, - "endLine": 67, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'RootRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "RootRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 71, - "startColumn": 5, - "endLine": 71, + "startLine": 65, + "startColumn": 7, + "endLine": 65, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Sub:yum install ${myPackage} ${Package})" + } }, { - "ruleId": "I9040", + "ruleId": "I9003", "severity": "INFO", - "message": "Resource 'ElasticLoadBalancer' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", "source": "ENGINE", - "entity": { - "logicalId": "ElasticLoadBalancer", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 112, - "startColumn": 5, - "endLine": 112, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myLambdaTwo' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'mySecurityGroupVpc1' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myLambdaTwo", + "logicalId": "mySecurityGroupVpc1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 146, + "startLine": 10, "startColumn": 5, - "endLine": 146, + "endLine": 10, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -5713,19 +4903,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'lambdaMap1' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'mySecurityGroupVpc2' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "lambdaMap1", + "logicalId": "mySecurityGroupVpc2", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 195, + "startLine": 22, "startColumn": 5, - "endLine": 195, + "endLine": 22, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -5733,19 +4923,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'lambdaMap2' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'MyEC2Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "lambdaMap2", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 203, + "startLine": 31, "startColumn": 5, - "endLine": 203, + "endLine": 31, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -5753,35 +4943,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyEc2BlockDevice' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'AnotherInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyEc2BlockDevice", + "logicalId": "AnotherInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 218, + "startLine": 50, "startColumn": 5, - "endLine": 218, + "endLine": 50, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/getatt_object_attribute_member.yaml": { - "filePath": "bad/getatt_object_attribute_member.yaml", + "bad/functions_select.yaml": { + "filePath": "bad/functions_select.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 4, "counts": { "fatal": 0, - "errors": 1, + "errors": 8, "warnings": 0, - "informational": 2, + "informational": 12, "debug": 0 }, "suppressed": 0, @@ -5790,204 +4980,237 @@ }, "diagnostics": [ { - "ruleId": "E9004", + "ruleId": "E1017", "severity": "ERROR", - "message": "'Tags.0' is not one of ['Arn', 'DomainName', 'DualStackDomainName', 'MetadataConfiguration.AnnotationTableConfiguration.TableArn', 'MetadataConfiguration.AnnotationTableConfiguration.TableName', 'MetadataConfiguration.Destination', 'MetadataConfiguration.InventoryTableConfiguration.TableArn', 'MetadataConfiguration.InventoryTableConfiguration.TableName', 'MetadataConfiguration.JournalTableConfiguration.TableArn', 'MetadataConfiguration.JournalTableConfiguration.TableName', 'MetadataTableConfiguration.S3TablesDestination.TableArn', 'MetadataTableConfiguration.S3TablesDestination.TableNamespace', 'RegionalDomainName', 'WebsiteURL']", + "message": "'a' is not of type 'integer'", "source": "SCHEMA", "entity": { - "logicalId": "Param", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Value", - "suggestedFix": "Check the resource type documentation for valid GetAtt attributes", + "propertyPath": "Properties.AvailabilityZone.Fn::Select.0", "category": "Intrinsic Function", - "startLine": 15, - "startColumn": 7, - "endLine": 15, - "endColumn": 12, - "ruleDescription": "GetAtt attribute must exist on target resource type", - "phase": "LINT" + "startLine": 11, + "startColumn": 9, + "endLine": 11, + "endColumn": 10, + "ruleDescription": "Fn::Select requires exactly two operands and a list source", + "phase": "PARSE" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E1017", + "severity": "ERROR", + "message": "expected maximum item count: 2, found: 3", + "source": "SCHEMA", "entity": { - "logicalId": "Bucket", + "logicalId": "myInstance1", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 9, - "startColumn": 3, - "endLine": 9, - "endColumn": 9, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.AvailabilityZone.Fn::Select", + "category": "Intrinsic Function", + "startLine": 19, + "startColumn": 9, + "endLine": 19, + "endColumn": 19, + "ruleDescription": "Fn::Select requires exactly two operands and a list source", + "phase": "PARSE" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Param' of type 'AWS::SSM::Parameter' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E1017", + "severity": "ERROR", + "message": "'Fn::Join' is not supported as an argument to 'Fn::Select'", + "source": "SCHEMA", "entity": { - "logicalId": "Param", + "logicalId": "myInstance2", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 13, - "startColumn": 5, - "endLine": 13, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/hard_coded_arn_properties.yaml": { - "filePath": "bad/hard_coded_arn_properties.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 6, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 6, - "debug": 0 + "propertyPath": "Properties.AvailabilityZone.Fn::Select.1", + "category": "Intrinsic Function", + "startLine": 30, + "startColumn": 17, + "endLine": 30, + "endColumn": 18, + "ruleDescription": "Fn::Select requires exactly two operands and a list source", + "phase": "PARSE" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1017", + "severity": "ERROR", + "message": "'foo' is not of type 'array'", + "source": "SCHEMA", + "entity": { + "logicalId": "myInstance3", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.AvailabilityZone.Fn::Select", + "category": "Intrinsic Function", + "startLine": 36, + "startColumn": 9, + "endLine": 36, + "endColumn": 19, + "ruleDescription": "Fn::Select requires exactly two operands and a list source", + "phase": "PARSE" + }, + { + "ruleId": "E1152", + "severity": "ERROR", + "message": "'String' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "S3BadBucket", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.NotificationConfiguration.TopicConfigurations.0.Topic.Fn::Sub", - "category": "Best Practice", + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", "startLine": 9, - "startColumn": 11, + "startColumn": 7, "endLine": 9, - "endColumn": 18, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "String" + } }, { - "ruleId": "W3045", - "severity": "WARN", - "message": "AccessControl property is deprecated. Use bucket policies instead", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'String' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "S3BadBucket", + "logicalId": "myInstance1", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.AccessControl", - "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", - "category": "Deprecation", - "startLine": 6, + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 17, "startColumn": 7, - "endLine": 6, - "endColumn": 20, - "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", - "phase": "LINT", + "endLine": 17, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", "context": { - "actualValue": "Private" + "actualValue": "String" } }, { - "ruleId": "I3042", - "severity": "INFO", - "message": "ARN in Resource S3BadBucket contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'String' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "S3BadBucket", + "logicalId": "myInstance2", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.NotificationConfiguration.TopicConfigurations.0.Topic.Fn::Sub", - "category": "Best Practice", - "startLine": 9, - "startColumn": 11, - "endLine": 9, - "endColumn": 18, - "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 26, + "startColumn": 7, + "endLine": 26, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "String" + } }, { - "ruleId": "I3042", - "severity": "INFO", - "message": "ARN in Resource SampleBadBucketPolicy contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'String' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "SampleBadBucketPolicy", + "logicalId": "myInstance3", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Resource.Fn::Sub", + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 34, + "startColumn": 7, + "endLine": 34, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "String" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 21, - "startColumn": 13, - "endLine": 21, - "endColumn": 20, - "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", - "phase": "LINT" + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleBadBucketPolicy", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 15, + "startLine": 10, "startColumn": 7, - "endLine": 15, - "endColumn": 13, + "endLine": 10, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'S3BadBucket'" + "resolutionSource": "dynamic (Select on non-list value)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleRole", + "logicalId": "myInstance1", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 36, + "startLine": 17, "startColumn": 7, - "endLine": 36, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 17, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5995,98 +5218,92 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'S3BadBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "S3BadBucket", + "logicalId": "myInstance1", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 18, + "startColumn": 7, + "endLine": 18, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SampleRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleRole", + "logicalId": "myInstance2", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ImageId", "category": "Best Practice", "startLine": 26, - "startColumn": 5, + "startColumn": 7, "endLine": 26, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/hardcoded_partition.yaml": { - "filePath": "bad/hardcoded_partition.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 4, - "debug": 0 + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic", + "logicalId": "myInstance2", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::EC2::Instance" }, - "category": "Security", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 8, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 27, + "startColumn": 7, + "endLine": 27, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Select on non-list value)" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "myInstance3", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 6, + "startLine": 34, "startColumn": 7, - "endLine": 6, - "endColumn": 17, + "endLine": 34, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6096,20 +5313,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic", + "logicalId": "myInstance3", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.TopicName", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 10, + "startLine": 35, "startColumn": 7, - "endLine": 10, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 35, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6119,19 +5336,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 8, "startColumn": 5, - "endLine": 5, + "endLine": 8, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -6139,139 +5356,39 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Topic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'myInstance1' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Topic", + "logicalId": "myInstance1", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, + "startLine": 16, "startColumn": 5, - "endLine": 9, + "endLine": 16, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/iam_bad_statement.yaml": { - "filePath": "bad/iam_bad_statement.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'Effect' is a required property", - "source": "CFN_LINT", - "entity": { - "logicalId": "Policy", - "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" - }, - "propertyPath": "Properties.PolicyDocument.Statement.0", - "category": "Resource", - "startLine": 10, - "startColumn": 19, - "endLine": 10, - "endColumn": 20, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" - } - ] - }, - "bad/iam_ref_with_path.yaml": { - "filePath": "bad/iam_ref_with_path.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 3, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3050", - "severity": "ERROR", - "message": "Ref to IAM role 'Role' with Path '/custom/path/' - use GetAtt Role.Arn instead", - "source": "CFN_LINT", - "entity": { - "logicalId": "Project", - "entityType": "Resource", - "resourceType": "AWS::CodeBuild::Project" - }, - "propertyPath": "Properties.ServiceRole", - "suggestedFix": "Switch from Ref to !GetAtt .Arn when Path is not '/'", - "category": "Resource", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 18, - "ruleDescription": "Check if REFing to a IAM resource with path set", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Role", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Path", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Role' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'myInstance2' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Role", + "logicalId": "myInstance2", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 25, "startColumn": 5, - "endLine": 5, + "endLine": 25, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -6279,35 +5396,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Project' of type 'AWS::CodeBuild::Project' supports Tags but none are configured", + "message": "Resource 'myInstance3' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Project", + "logicalId": "myInstance3", "entityType": "Resource", - "resourceType": "AWS::CodeBuild::Project" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 16, + "startLine": 33, "startColumn": 5, - "endLine": 16, + "endLine": 33, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/iam_wildcard_all_types.yaml": { - "filePath": "bad/iam_wildcard_all_types.yaml", + "bad/generic.yaml": { + "filePath": "bad/generic.yaml", "status": "OK", "metadata": { - "resourcesScanned": 4, + "resourcesScanned": 19, "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 2, + "fatal": 23, + "errors": 1, + "warnings": 11, + "informational": 37, "debug": 0 }, "suppressed": 0, @@ -6316,445 +5433,1066 @@ }, "diagnostics": [ { - "ruleId": "W2512", - "severity": "WARN", - "message": "IAM policy uses NotAction which grants all actions except those listed - consider using Action instead", - "source": "ENGINE", + "ruleId": "F0005", + "severity": "FATAL", + "message": "'Errors' is not a valid top-level template section", + "source": "SCHEMA", + "propertyPath": "Errors", + "category": "Structure", + "startLine": 4, + "startColumn": 1, + "endLine": 4, + "endColumn": 7, + "ruleDescription": "Top-level keys must be valid section names", + "phase": "SCHEMA" + }, + { + "ruleId": "F1020", + "severity": "FATAL", + "message": "'pIops' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'ElasticLoadBalancer', 'MyEC2Instance', 'MyEC2Instance1', 'MyEC2Instance3', 'MyEc2BlockDevice', 'PermitAllInbound', 'RolePolicies', 'RootInstanceProfile', 'RootRole', 'SecurityGroup', 'conditionLoadBalancer', 'lambdaMap1', 'lambdaMap2', 'myAcl', 'myEc2Instance4', 'myIamProfile', 'myIamProfile2', 'myIamProfile3', 'myLambdaTwo', 'myParam']", + "source": "SCHEMA", "entity": { - "logicalId": "NotActionUser", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::IAM::User" + "resourceType": "AWS::EC2::Instance" }, - "category": "Security", + "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 52, + "startColumn": 13, + "endLine": 52, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" + }, + { + "ruleId": "F1020", + "severity": "FATAL", + "message": "'WebServerPort' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'ElasticLoadBalancer', 'MyEC2Instance', 'MyEC2Instance1', 'MyEC2Instance3', 'MyEc2BlockDevice', 'PermitAllInbound', 'RolePolicies', 'RootInstanceProfile', 'RootRole', 'SecurityGroup', 'conditionLoadBalancer', 'lambdaMap1', 'lambdaMap2', 'myAcl', 'myEc2Instance4', 'myIamProfile', 'myIamProfile2', 'myIamProfile3', 'myLambdaTwo', 'myParam']", + "source": "SCHEMA", + "entity": { + "logicalId": "ElasticLoadBalancer", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.Listeners.0.InstancePort", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 119, + "startColumn": 11, + "endLine": 119, + "endColumn": 23, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" + }, + { + "ruleId": "F1020", + "severity": "FATAL", + "message": "'WebServerPort' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'ElasticLoadBalancer', 'MyEC2Instance', 'MyEC2Instance1', 'MyEC2Instance3', 'MyEc2BlockDevice', 'PermitAllInbound', 'RolePolicies', 'RootInstanceProfile', 'RootRole', 'SecurityGroup', 'conditionLoadBalancer', 'lambdaMap1', 'lambdaMap2', 'myAcl', 'myEc2Instance4', 'myIamProfile', 'myIamProfile2', 'myIamProfile3', 'myLambdaTwo', 'myParam']", + "source": "SCHEMA", + "entity": { + "logicalId": "ElasticLoadBalancer", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.HealthCheck.Target.Fn::Join.1.1", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 128, + "startColumn": 20, + "endLine": 128, + "endColumn": 21, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" + }, + { + "ruleId": "F3002", + "severity": "FATAL", + "message": "Additional properties are not allowed ('Fn::If' was unexpected)", + "source": "SCHEMA", + "entity": { + "logicalId": "myIamProfile3", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Fn::If", + "category": "Schema", "startLine": 34, - "startColumn": 3, + "startColumn": 7, "endLine": 34, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Additional properties are not allowed", + "phase": "SCHEMA", + "context": { + "property": "Fn::If", + "extra": { + "allowed_properties": [ + "Arn", + "AssumeRolePolicyDocument", + "Description", + "ManagedPolicyArns", + "MaxSessionDuration", + "Path", + "PermissionsBoundary", + "Policies", + "RoleId", + "RoleName", + "Tags" + ] + } + } + }, + { + "ruleId": "F3002", + "severity": "FATAL", + "message": "Additional properties are not allowed ('FakeKey' was unexpected)", + "source": "SCHEMA", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.FakeKey", + "category": "Schema", + "startLine": 46, + "startColumn": 7, + "endLine": 46, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Additional properties are not allowed", + "phase": "SCHEMA", + "context": { + "property": "FakeKey", + "extra": { + "allowed_properties": [ + "AdditionalInfo", + "Affinity", + "AvailabilityZone", + "BlockDeviceMappings", + "CpuOptions", + "CreditSpecification", + "DisableApiTermination", + "EbsOptimized", + "ElasticGpuSpecifications", + "ElasticInferenceAccelerators", + "EnclaveOptions", + "HibernationOptions", + "HostId", + "HostResourceGroupArn", + "IamInstanceProfile", + "ImageId", + "InstanceId", + "InstanceInitiatedShutdownBehavior", + "InstanceType", + "Ipv6AddressCount", + "Ipv6Addresses", + "KernelId", + "KeyName", + "LaunchTemplate", + "LicenseSpecifications", + "MetadataOptions", + "Monitoring", + "NetworkInterfaces", + "PlacementGroupName", + "PrivateDnsName", + "PrivateDnsNameOptions", + "PrivateIp", + "PrivateIpAddress", + "PropagateTagsToVolumeOnCreation", + "PublicDnsName", + "PublicIp", + "RamdiskId", + "SecurityGroupIds", + "SecurityGroups", + "SourceDestCheck", + "SsmAssociations", + "State", + "SubnetId", + "Tags", + "Tenancy", + "UserData", + "Volumes", + "VpcId" + ] + } + } + }, + { + "ruleId": "F3002", + "severity": "FATAL", + "message": "Additional properties are not allowed ('BadSubX2Key' was unexpected)", + "source": "SCHEMA", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.BadSubX2Key", + "category": "Schema", + "startLine": 55, + "startColumn": 13, + "endLine": 55, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Additional properties are not allowed", + "phase": "SCHEMA", + "context": { + "property": "BadSubX2Key", + "extra": { + "allowed_properties": [ + "AdditionalInfo", + "Affinity", + "AvailabilityZone", + "BlockDeviceMappings", + "CpuOptions", + "CreditSpecification", + "DisableApiTermination", + "EbsOptimized", + "ElasticGpuSpecifications", + "ElasticInferenceAccelerators", + "EnclaveOptions", + "HibernationOptions", + "HostId", + "HostResourceGroupArn", + "IamInstanceProfile", + "ImageId", + "InstanceId", + "InstanceInitiatedShutdownBehavior", + "InstanceType", + "Ipv6AddressCount", + "Ipv6Addresses", + "KernelId", + "KeyName", + "LaunchTemplate", + "LicenseSpecifications", + "MetadataOptions", + "Monitoring", + "NetworkInterfaces", + "PlacementGroupName", + "PrivateDnsName", + "PrivateDnsNameOptions", + "PrivateIp", + "PrivateIpAddress", + "PropagateTagsToVolumeOnCreation", + "PublicDnsName", + "PublicIp", + "RamdiskId", + "SecurityGroupIds", + "SecurityGroups", + "SourceDestCheck", + "SsmAssociations", + "State", + "SubnetId", + "Tags", + "Tenancy", + "UserData", + "Volumes", + "VpcId" + ] + } + } + }, + { + "ruleId": "F3002", + "severity": "FATAL", + "message": "Additional properties are not allowed ('BadKey' was unexpected)", + "source": "SCHEMA", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.NetworkInterfaces.0.BadKey", + "category": "Schema", + "startLine": 59, + "startColumn": 11, + "endLine": 59, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Additional properties are not allowed", + "phase": "SCHEMA", + "context": { + "property": "BadKey", + "extra": { + "allowed_properties": [ + "AdditionalInfo", + "Affinity", + "AvailabilityZone", + "BlockDeviceMappings", + "CpuOptions", + "CreditSpecification", + "DisableApiTermination", + "EbsOptimized", + "ElasticGpuSpecifications", + "ElasticInferenceAccelerators", + "EnclaveOptions", + "HibernationOptions", + "HostId", + "HostResourceGroupArn", + "IamInstanceProfile", + "ImageId", + "InstanceId", + "InstanceInitiatedShutdownBehavior", + "InstanceType", + "Ipv6AddressCount", + "Ipv6Addresses", + "KernelId", + "KeyName", + "LaunchTemplate", + "LicenseSpecifications", + "MetadataOptions", + "Monitoring", + "NetworkInterfaces", + "PlacementGroupName", + "PrivateDnsName", + "PrivateDnsNameOptions", + "PrivateIp", + "PrivateIpAddress", + "PropagateTagsToVolumeOnCreation", + "PublicDnsName", + "PublicIp", + "RamdiskId", + "SecurityGroupIds", + "SecurityGroups", + "SourceDestCheck", + "SsmAssociations", + "State", + "SubnetId", + "Tags", + "Tenancy", + "UserData", + "Volumes", + "VpcId" + ] + } + } + }, + { + "ruleId": "F3002", + "severity": "FATAL", + "message": "Additional properties are not allowed ('PolicyDocument1' was unexpected. Did you mean 'PolicyDocument'?)", + "source": "SCHEMA", + "entity": { + "logicalId": "RootRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Policies.0.PolicyDocument1", + "category": "Schema", + "startLine": 84, + "startColumn": 11, + "endLine": 84, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Additional properties are not allowed", + "phase": "SCHEMA", + "context": { + "property": "PolicyDocument1", + "extra": { + "allowed_properties": [ + "Arn", + "AssumeRolePolicyDocument", + "Description", + "ManagedPolicyArns", + "MaxSessionDuration", + "Path", + "PermissionsBoundary", + "Policies", + "RoleId", + "RoleName", + "Tags" + ] + } + } + }, + { + "ruleId": "F3002", + "severity": "FATAL", + "message": "Additional properties are not allowed ('FakeKey' was unexpected)", + "source": "SCHEMA", + "entity": { + "logicalId": "ElasticLoadBalancer", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.HealthCheck.FakeKey", + "category": "Schema", + "startLine": 123, + "startColumn": 9, + "endLine": 123, "endColumn": 16, - "ruleDescription": "IAM policy with NotAction", - "phase": "LINT" + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Additional properties are not allowed", + "phase": "SCHEMA", + "context": { + "property": "FakeKey", + "extra": { + "allowed_properties": [ + "AccessLoggingPolicy", + "AppCookieStickinessPolicy", + "AvailabilityZones", + "CanonicalHostedZoneName", + "CanonicalHostedZoneNameID", + "ConnectionDrainingPolicy", + "ConnectionSettings", + "CrossZone", + "DNSName", + "HealthCheck", + "Instances", + "LBCookieStickinessPolicy", + "Listeners", + "LoadBalancerName", + "Policies", + "Scheme", + "SecurityGroups", + "SourceSecurityGroup", + "Subnets", + "Tags" + ] + } + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'WildcardUser' of type 'AWS::IAM::User' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'AssumeRolePolicyDocument' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "WildcardUser", + "logicalId": "myIamProfile", "entityType": "Resource", - "resourceType": "AWS::IAM::User" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'AssumeRolePolicyDocument'", + "category": "Schema", + "startLine": 25, + "startColumn": 3, + "endLine": 25, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "F3003", + "severity": "FATAL", + "message": "'AssumeRolePolicyDocument' is a required property", + "source": "SCHEMA", + "entity": { + "logicalId": "myIamProfile2", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'AssumeRolePolicyDocument'", + "category": "Schema", + "startLine": 29, "startColumn": 5, - "endLine": 5, + "endLine": 29, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'NotActionUser' of type 'AWS::IAM::User' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'PolicyDocument' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "NotActionUser", + "logicalId": "RootRole", "entityType": "Resource", - "resourceType": "AWS::IAM::User" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 36, + "propertyPath": "Properties.Policies.0", + "suggestedFix": "Add the required property 'PolicyDocument'", + "category": "Schema", + "startLine": 83, + "startColumn": 21, + "endLine": 83, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "F3003", + "severity": "FATAL", + "message": "'IpProtocol' is a required property", + "source": "SCHEMA", + "entity": { + "logicalId": "SecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupIngress" + }, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'IpProtocol'", + "category": "Schema", + "startLine": 138, "startColumn": 5, - "endLine": 36, + "endLine": 138, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/if_wrong_arity.yaml": { - "filePath": "bad/if_wrong_arity.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 1, - "informational": 2, - "debug": 0 + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F0013", + "ruleId": "F3003", "severity": "FATAL", - "message": "Fn::If: must have exactly 3 elements, got 2", + "message": "'DefaultAction' is a required property", "source": "SCHEMA", "entity": { - "logicalId": "R", + "logicalId": "myAcl", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::WAFRegional::WebACL" }, - "propertyPath": "Properties.BucketName.Fn::If", - "category": "Intrinsic Function", - "startLine": 12, - "startColumn": 9, - "endLine": 12, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'DefaultAction'", + "category": "Schema", + "startLine": 142, + "startColumn": 5, + "endLine": 142, "endColumn": 15, - "ruleDescription": "Fn::If must have exactly 3 elements", - "phase": "PARSE" + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "F3003", + "severity": "FATAL", + "message": "'MetricName' is a required property", + "source": "SCHEMA", + "entity": { + "logicalId": "myAcl", + "entityType": "Resource", + "resourceType": "AWS::WAFRegional::WebACL" + }, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'MetricName'", + "category": "Schema", + "startLine": 142, + "startColumn": 5, + "endLine": 142, + "endColumn": 15, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "F3003", + "severity": "FATAL", + "message": "'Code' is a required property", + "source": "SCHEMA", + "entity": { + "logicalId": "myLambdaTwo", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'Code'", + "category": "Schema", + "startLine": 146, + "startColumn": 5, + "endLine": 146, + "endColumn": 15, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "F3003", + "severity": "FATAL", + "message": "'Role' is a required property", + "source": "SCHEMA", + "entity": { + "logicalId": "myLambdaTwo", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'Role'", + "category": "Schema", + "startLine": 146, + "startColumn": 5, + "endLine": 146, + "endColumn": 15, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "F3006", + "severity": "FATAL", + "message": "Unknown resource type 'AWS::EC2::Instance1'", + "source": "SCHEMA", + "entity": { + "logicalId": "MyEC2Instance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance1" + }, + "category": "Schema", + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 17, + "ruleDescription": "AWS resource type must be recognized and available in the configured region", + "phase": "SCHEMA", + "context": { + "extra": { + "resource_type": "AWS::EC2::Instance1" + } + } + }, + { + "ruleId": "F3012", + "severity": "FATAL", + "message": "['1'] is not of type 'string'", + "source": "SCHEMA", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.NetworkInterfaces.0.DeviceIndex", + "category": "Schema", + "startLine": 57, + "startColumn": 11, + "endLine": 57, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type mismatch", + "phase": "SCHEMA", + "context": { + "actualValue": [ + "1" + ] + } + }, + { + "ruleId": "F3012", + "severity": "FATAL", + "message": "'Test' is not of type 'integer'", + "source": "SCHEMA", + "entity": { + "logicalId": "SecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupIngress" + }, + "propertyPath": "Properties.FromPort", + "category": "Schema", + "startLine": 139, + "startColumn": 7, + "endLine": 139, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type mismatch", + "phase": "SCHEMA", + "context": { + "actualValue": "Test", + "expectedConstraint": "integer" + } + }, + { + "ruleId": "F3014", + "severity": "FATAL", + "message": "Exactly one of ['CidrIp', 'CidrIpv6', 'SourcePrefixListId', 'SourceSecurityGroupId', 'SourceSecurityGroupName'] must be specified", + "source": "SCHEMA", + "entity": { + "logicalId": "SecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupIngress" + }, + "propertyPath": "Properties", + "category": "Schema", + "startLine": 138, + "startColumn": 5, + "endLine": 138, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Exactly one of properties required (requiredXor)", + "phase": "SCHEMA" + }, + { + "ruleId": "F6101", + "severity": "FATAL", + "message": "'DNE' is not one of ['CanonicalHostedZoneName', 'CanonicalHostedZoneNameID', 'DNSName', 'SourceSecurityGroup', 'SourceSecurityGroup.GroupName', 'SourceSecurityGroup.OwnerAlias']", + "source": "SCHEMA", + "entity": { + "logicalId": "myErrorOutput", + "entityType": "Output" + }, + "propertyPath": "Outputs/myErrorOutput/Value.Fn::GetAtt.1", + "category": "Structure", + "startLine": 228, + "startColumn": 3, + "endLine": 228, + "endColumn": 16, + "ruleDescription": "Output value must be a string", + "phase": "SCHEMA" + }, + { + "ruleId": "E3530", + "severity": "ERROR", + "message": "'Statement' is a required property", + "source": "CFN_LINT", + "entity": { + "logicalId": "myIamProfile3", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.AssumeRolePolicyDocument", + "suggestedFix": "Add a Statement array to the AssumeRolePolicyDocument", + "category": "Resource", + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 31, + "ruleDescription": "Validate IAM trust policies", + "phase": "LINT" + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'myParam' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "myParam", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/myParam", + "category": "Best Practice", + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 10, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "W3696", + "severity": "WARN", + "message": "Resource type 'AWS::WAFRegional::WebACL' is from a service that is sunsetting", + "source": "CFN_LINT", + "entity": { + "logicalId": "myAcl", + "entityType": "Resource", + "resourceType": "AWS::WAFRegional::WebACL" + }, + "category": "Deprecation", + "startLine": 140, + "startColumn": 3, + "endLine": 140, + "endColumn": 8, + "ruleDescription": "Resource type is from a service that is sunsetting", + "phase": "SCHEMA" }, { "ruleId": "W8003", "severity": "WARN", - "message": "Fn::Equals in condition 'IsProd' will always return False", + "message": "Fn::Equals in condition 'IsProduction' will always return True", "source": "CFN_LINT", "entity": { - "logicalId": "IsProd", + "logicalId": "IsProduction", "entityType": "Condition" }, - "propertyPath": "Conditions/IsProd", + "propertyPath": "Conditions/IsProduction", "category": "Best Practice", - "startLine": 3, + "startLine": 20, "startColumn": 3, - "endLine": 3, - "endColumn": 9, + "endLine": 20, + "endColumn": 15, "ruleDescription": "Fn::Equals will always return true or false", "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "R", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.KeyName", "category": "Best Practice", - "startLine": 11, + "startLine": 45, "startColumn": 7, - "endLine": 11, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 45, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'R' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "5 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "R", + "logicalId": "ElasticLoadBalancer", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HealthCheck.UnhealthyThreshold", "category": "Best Practice", - "startLine": 10, + "startLine": 132, + "startColumn": 9, + "endLine": 132, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", + "entity": { + "logicalId": "conditionLoadBalancer", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.ConnectionDrainingPolicy.Enabled", + "category": "Best Practice", + "startLine": 150, "startColumn": 5, - "endLine": 10, + "endLine": 150, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/invalid_deletion_policy.yaml": { - "filePath": "bad/invalid_deletion_policy.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 1, - "informational": 1, - "debug": 0 + "conditionScenario": { + "IsProduction": true + }, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3016", - "severity": "FATAL", - "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got 'Remove'", - "source": "SCHEMA", + "ruleId": "W9003", + "severity": "WARN", + "message": "'60' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", "entity": { - "logicalId": "Bucket", + "logicalId": "conditionLoadBalancer", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" }, - "propertyPath": "DeletionPolicy", - "category": "Structure", - "startLine": 5, + "propertyPath": "Properties.ConnectionDrainingPolicy.Timeout", + "category": "Best Practice", + "startLine": 150, "startColumn": 5, - "endLine": 5, - "endColumn": 19, - "ruleDescription": "DeletionPolicy must be valid", + "endLine": 150, + "endColumn": 15, + "conditionScenario": { + "IsProduction": true + }, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Property type coercion warning", "phase": "SCHEMA" }, { - "ruleId": "W3011", + "ruleId": "W9003", "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "message": "true is not of type 'string' - automatically coerced (boolean to string)", "source": "CFN_LINT", "entity": { - "logicalId": "Bucket", + "logicalId": "conditionLoadBalancer", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" }, + "propertyPath": "Properties.Tags.{}.Value", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 9, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", - "phase": "LINT" + "startLine": 150, + "startColumn": 5, + "endLine": 150, + "endColumn": 15, + "conditionScenario": { + "IsProduction": true + }, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 9, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 43, + "startColumn": 7, + "endLine": 43, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" - } - ] - }, - "bad/invalid_mapping_structure.yaml": { - "filePath": "bad/invalid_mapping_structure.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 1, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F0017", - "severity": "FATAL", - "message": "Mapping 'BadMap' second level key 'Key1' must be a map", - "source": "SCHEMA", + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", "entity": { - "logicalId": "BadMap", - "entityType": "Mapping" + "logicalId": "MyEC2Instance3", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Mappings/BadMap/Key1", - "category": "Structure", - "startLine": 4, - "startColumn": 5, - "endLine": 4, - "endColumn": 9, - "ruleDescription": "Mapping level must be a map", - "phase": "PARSE" + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 63, + "startColumn": 7, + "endLine": 63, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", + "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W9010", "severity": "WARN", - "message": "Mapping 'BadMap' is not referenced by any Fn::FindInMap", - "source": "CFN_LINT", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", "entity": { - "logicalId": "BadMap", - "entityType": "Mapping" + "logicalId": "MyEc2BlockDevice", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Mappings/BadMap", - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 9, - "ruleDescription": "Check if Mappings are Used", + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 219, + "startColumn": 7, + "endLine": 219, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I1022", "severity": "INFO", - "message": "Resource 'R' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", "entity": { - "logicalId": "R", + "logicalId": "ElasticLoadBalancer", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 6, - "startColumn": 3, - "endLine": 6, - "endColumn": 4, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.HealthCheck.Target.Fn::Join", + "category": "Intrinsic Function", + "startLine": 125, + "startColumn": 11, + "endLine": 125, + "endColumn": 19, + "ruleDescription": "Use Sub instead of Join", "phase": "LINT" - } - ] - }, - "bad/invalid_update_replace_policy.yaml": { - "filePath": "bad/invalid_update_replace_policy.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 1, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F0018", - "severity": "FATAL", - "message": "UpdateReplacePolicy must be one of Delete, Retain, got 'Remove'", - "source": "SCHEMA", + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 't1.micro' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "Bucket", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "UpdateReplacePolicy", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 24, - "ruleDescription": "UpdateReplacePolicy must be valid", - "phase": "SCHEMA" + "propertyPath": "Properties.InstanceType", + "suggestedFix": "Upgrade to a current generation instance type", + "category": "Best Practice", + "startLine": 44, + "startColumn": 7, + "endLine": 44, + "endColumn": 19, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 't1.micro' - consider upgrading", "source": "CFN_LINT", "entity": { - "logicalId": "Bucket", + "logicalId": "MyEc2BlockDevice", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.InstanceType", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 9, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "startLine": 220, + "startColumn": 7, + "endLine": 220, + "endColumn": 19, + "ruleDescription": "Checks for legacy instance type generations", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 9, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/issues.yaml": { - "filePath": "bad/issues.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 4, - "debug": 0 + "startLine": 43, + "startColumn": 7, + "endLine": 43, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'PrivateSecurityGroup' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'RDSOptionGroup']", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "RDSOptionGroup", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::OptionGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.OptionConfigurations.0.VpcSecurityGroupMemberships.0", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 12, - "startColumn": 20, - "endLine": 12, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 44, + "startColumn": 7, + "endLine": 44, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'EngineName' is create-only; updating it will cause resource replacement", + "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RDSOptionGroup", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::OptionGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.EngineName", + "propertyPath": "Properties.KeyName", "category": "Best Practice", - "startLine": 6, + "startLine": 45, "startColumn": 7, - "endLine": 6, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "endLine": 45, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6764,43 +6502,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MajorEngineVersion' is create-only; updating it will cause resource replacement", + "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RDSOptionGroup", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::OptionGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.MajorEngineVersion", + "propertyPath": "Properties.BlockDeviceMappings", "category": "Best Practice", - "startLine": 7, + "startLine": 48, "startColumn": 7, - "endLine": 7, - "endColumn": 25, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "endLine": 48, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'OptionGroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RDSOptionGroup", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::OptionGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.OptionGroupDescription", + "propertyPath": "Properties.NetworkInterfaces", "category": "Best Practice", - "startLine": 8, + "startLine": 56, "startColumn": 7, - "endLine": 8, - "endColumn": 29, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "endLine": 56, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6808,213 +6546,180 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'RDSOptionGroup' of type 'AWS::RDS::OptionGroup' supports Tags but none are configured", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RDSOptionGroup", + "logicalId": "MyEC2Instance3", "entityType": "Resource", - "resourceType": "AWS::RDS::OptionGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/json_parse.json": { - "filePath": "bad/json_parse.json", - "status": "ERROR", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 + "startLine": 63, + "startColumn": 7, + "endLine": 63, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F1101", - "severity": "FATAL", - "message": "JSON parse error: expected `:` at line 5 column 11", - "source": "SCHEMA", - "category": "Structure", - "startLine": 5, - "startColumn": 11, - "endLine": 5, + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "RootRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 81, + "startColumn": 7, + "endLine": 81, "endColumn": 11, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" - } - ] - }, - "bad/lambda_image_handler_intrinsic.yaml": { - "filePath": "bad/lambda_image_handler_intrinsic.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 1, - "warnings": 0, - "informational": 2, - "debug": 0 + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'Role' is a required property", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Fn", + "logicalId": "RootInstanceProfile", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'Role'", - "category": "Schema", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 105, + "startColumn": 7, + "endLine": 105, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3685", - "severity": "ERROR", - "message": "Container image functions cannot specify Handler, Runtime, or Layers properties", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZones' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Fn", + "logicalId": "ElasticLoadBalancer", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" }, - "propertyPath": "Properties.Handler", - "category": "Resource", - "startLine": 12, + "propertyPath": "Properties.AvailabilityZones", + "category": "Best Practice", + "startLine": 113, "startColumn": 7, - "endLine": 12, - "endColumn": 14, - "ruleDescription": "Container image functions cannot use Handler, Runtime, or Layers", - "phase": "LINT" + "endLine": 113, + "endColumn": 24, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PackageType' is create-only; updating it will cause resource replacement", + "message": "Property 'HealthCheck' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Fn", + "logicalId": "ElasticLoadBalancer", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" }, - "propertyPath": "Properties.PackageType", + "propertyPath": "Properties.HealthCheck", "category": "Best Practice", - "startLine": 11, + "startLine": 122, "startColumn": 7, - "endLine": 11, + "endLine": 122, "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Fn' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Fn", + "logicalId": "SecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 10, - "startColumn": 5, - "endLine": 10, + "startLine": 139, + "startColumn": 7, + "endLine": 139, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/lambda_no_snapstart.yaml": { - "filePath": "bad/lambda_no_snapstart.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I2530", + "ruleId": "I9001", "severity": "INFO", - "message": "Runtime 'java21' should consider using SnapStart for improved performance", - "source": "CFN_LINT", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Func", + "logicalId": "myAcl", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::WAFRegional::WebACL" }, - "propertyPath": "Properties.SnapStart.ApplyOn", - "suggestedFix": "Add SnapStart with ApplyOn set to 'PublishedVersions'", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "documentationUrl": "https://docs.aws.amazon.com/lambda/latest/dg/snapstart.html", - "ruleDescription": "Validate that SnapStart is configured for >= Java11 runtimes", - "phase": "LINT" + "startLine": 143, + "startColumn": 7, + "endLine": 143, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Func", + "logicalId": "lambdaMap1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 6, + "startLine": 196, "startColumn": 7, - "endLine": 6, - "endColumn": 19, + "endLine": 196, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -7022,99 +6727,67 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Func' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Func", + "logicalId": "lambdaMap2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/lambda_permission_no_source_account.yaml": { - "filePath": "bad/lambda_permission_no_source_account.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 4, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W3663", - "severity": "WARN", - "message": "Lambda Permission with a SourceArn that has no account id should also specify SourceAccount", - "source": "CFN_LINT", - "entity": { - "logicalId": "Perm", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties", - "suggestedFix": "Add SourceAccount property", - "category": "Security", - "startLine": 4, - "startColumn": 5, - "endLine": 4, - "endColumn": 15, - "ruleDescription": "Validate SourceAccount is required property", - "phase": "LINT" + "startLine": 204, + "startColumn": 7, + "endLine": 204, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'SourceArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkAclId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Perm", + "logicalId": "PermitAllInbound", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::NetworkAclEntry" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.NetworkAclId", "category": "Best Practice", - "startLine": 8, + "startLine": 212, "startColumn": 7, - "endLine": 8, - "endColumn": 16, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" + "endLine": 212, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'RuleNumber' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Perm", + "logicalId": "PermitAllInbound", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::NetworkAclEntry" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.RuleNumber", "category": "Best Practice", - "startLine": 5, + "startLine": 213, "startColumn": 7, - "endLine": 5, - "endColumn": 13, + "endLine": 213, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -7124,19 +6797,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Perm", + "logicalId": "MyEc2BlockDevice", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 6, + "startLine": 219, "startColumn": 7, - "endLine": 6, - "endColumn": 19, + "endLine": 219, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -7146,343 +6820,240 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Perm", + "logicalId": "MyEc2BlockDevice", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 7, + "startLine": 220, "startColumn": 7, - "endLine": 7, - "endColumn": 16, + "endLine": 220, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Perm", + "logicalId": "MyEc2BlockDevice", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.KeyName", "category": "Best Practice", - "startLine": 8, + "startLine": 221, "startColumn": 7, - "endLine": 8, - "endColumn": 16, + "endLine": 221, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } - } - ] - }, - "bad/lambda_snapstart_bad_runtime.yaml": { - "filePath": "bad/lambda_snapstart_bad_runtime.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W2530", - "severity": "WARN", - "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SnapStartFunc", + "logicalId": "MyEc2BlockDevice", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.SnapStart", - "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", + "propertyPath": "Properties.BlockDeviceMappings", "category": "Best Practice", - "startLine": 13, + "startLine": 222, "startColumn": 7, - "endLine": 13, - "endColumn": 16, - "ruleDescription": "Validate that SnapStart is properly configured", - "phase": "LINT" - }, - { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", - "entity": { - "logicalId": "SnapStartFunc", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "category": "Security", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 16, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "endLine": 222, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SnapStartFunc", + "logicalId": "MyEc2BlockDevice", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.NetworkInterfaces", "category": "Best Practice", - "startLine": 6, + "startLine": 223, "startColumn": 7, - "endLine": 6, - "endColumn": 19, + "endLine": 223, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SnapStartFunc' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'myIamProfile' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SnapStartFunc", + "logicalId": "myIamProfile", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, + "startLine": 25, + "startColumn": 3, + "endLine": 25, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/lambda_snapstart_no_version.yaml": { - "filePath": "bad/lambda_snapstart_no_version.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 1, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2530", - "severity": "WARN", - "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", - "source": "CFN_LINT", - "entity": { - "logicalId": "Func", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.SnapStart", - "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", - "category": "Best Practice", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 16, - "ruleDescription": "Validate that SnapStart is properly configured", - "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Func' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'myIamProfile2' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Func", + "logicalId": "myIamProfile2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 29, "startColumn": 5, - "endLine": 5, + "endLine": 29, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/lambda_sqs_timeout.yaml": { - "filePath": "bad/lambda_sqs_timeout.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 7, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3505", - "severity": "ERROR", - "message": "Queue visibility timeout (10) is less than Function timeout (60) seconds", - "source": "CFN_LINT", - "entity": { - "logicalId": "Queue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.VisibilityTimeout", - "suggestedFix": "Set the SQS VisibilityTimeout to at least the Lambda function Timeout", - "category": "Resource", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 24, - "ruleDescription": "Validate SQS VisibilityTimeout is greater than a function's Timeout", - "phase": "LINT", - "context": { - "extra": { - "visibility_timeout": 10 - } - } }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'myIamProfile3' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "myIamProfile3", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::IAM::Role" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 8, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 32, + "startColumn": 5, + "endLine": 32, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'MyEC2Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 8, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 42, + "startColumn": 5, + "endLine": 42, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "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", + "message": "Resource 'MyEC2Instance3' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "MyEC2Instance3", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 62, "startColumn": 5, - "endLine": 5, + "endLine": 62, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'myEc2Instance4' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ESM", + "logicalId": "myEc2Instance4", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.EventSourceArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 21, - "startColumn": 7, - "endLine": 21, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt Queue.Arn" - } + "startLine": 67, + "startColumn": 5, + "endLine": 67, + "endColumn": 15, + "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", + "message": "Resource 'RootRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "RootRole", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 71, "startColumn": 5, - "endLine": 5, + "endLine": 71, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -7490,19 +7061,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Func' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'ElasticLoadBalancer' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Func", + "logicalId": "ElasticLoadBalancer", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, + "startLine": 112, "startColumn": 5, - "endLine": 9, + "endLine": 112, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -7510,116 +7081,95 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ESM' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", + "message": "Resource 'myLambdaTwo' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ESM", + "logicalId": "myLambdaTwo", "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 19, + "startLine": 146, "startColumn": 5, - "endLine": 19, + "endLine": 146, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/lambda_zip_no_handler.yaml": { - "filePath": "bad/lambda_zip_no_handler.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W2533", - "severity": "WARN", - "message": "Properties ['Handler', 'Runtime'] missing for zip file deployment at Resources/Func/Properties", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'lambdaMap1' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Func", + "logicalId": "lambdaMap1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Code", - "suggestedFix": "Add the missing properties for zip file deployment", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 11, - "ruleDescription": "Check required properties for Lambda if the deployment package is a .zip file", + "startLine": 195, + "startColumn": 5, + "endLine": 195, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'lambdaMap2' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Func", + "logicalId": "lambdaMap2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 203, + "startColumn": 5, + "endLine": 203, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Func' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'MyEc2BlockDevice' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Func", + "logicalId": "MyEc2BlockDevice", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 218, "startColumn": 5, - "endLine": 5, + "endLine": 218, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/lambda_zipfile_java.yaml": { - "filePath": "bad/lambda_zipfile_java.yaml", + "bad/getatt_object_attribute_member.yaml": { + "filePath": "bad/getatt_object_attribute_member.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 2, "counts": { "fatal": 0, "errors": 1, - "warnings": 1, - "informational": 3, + "warnings": 0, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -7628,115 +7178,76 @@ }, "diagnostics": [ { - "ruleId": "E3677", + "ruleId": "E9004", "severity": "ERROR", - "message": "Runtime 'java21' is not supported with Code.ZipFile - use nodejs or python", - "source": "CFN_LINT", - "entity": { - "logicalId": "LambdaFn", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "category": "Resource", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Lambda ZipFile requires nodejs or python runtime", - "phase": "LINT" - }, - { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", - "entity": { - "logicalId": "LambdaFn", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "category": "Security", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" - }, - { - "ruleId": "I2530", - "severity": "INFO", - "message": "Runtime 'java21' should consider using SnapStart for improved performance", - "source": "CFN_LINT", + "message": "'Tags.0' is not one of ['Arn', 'DomainName', 'DualStackDomainName', 'MetadataConfiguration.AnnotationTableConfiguration.TableArn', 'MetadataConfiguration.AnnotationTableConfiguration.TableName', 'MetadataConfiguration.Destination', 'MetadataConfiguration.InventoryTableConfiguration.TableArn', 'MetadataConfiguration.InventoryTableConfiguration.TableName', 'MetadataConfiguration.JournalTableConfiguration.TableArn', 'MetadataConfiguration.JournalTableConfiguration.TableName', 'MetadataTableConfiguration.S3TablesDestination.TableArn', 'MetadataTableConfiguration.S3TablesDestination.TableNamespace', 'RegionalDomainName', 'WebsiteURL']", + "source": "SCHEMA", "entity": { - "logicalId": "LambdaFn", + "logicalId": "Param", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SSM::Parameter" }, - "propertyPath": "Properties.SnapStart.ApplyOn", - "suggestedFix": "Add SnapStart with ApplyOn set to 'PublishedVersions'", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "documentationUrl": "https://docs.aws.amazon.com/lambda/latest/dg/snapstart.html", - "ruleDescription": "Validate that SnapStart is configured for >= Java11 runtimes", + "propertyPath": "Properties.Value", + "suggestedFix": "Check the resource type documentation for valid GetAtt attributes", + "category": "Intrinsic Function", + "startLine": 15, + "startColumn": 7, + "endLine": 15, + "endColumn": 12, + "ruleDescription": "GetAtt attribute must exist on target resource type", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LambdaFn", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 9, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LambdaFn' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'Param' of type 'AWS::SSM::Parameter' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LambdaFn", + "logicalId": "Param", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SSM::Parameter" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 13, "startColumn": 5, - "endLine": 5, + "endLine": 13, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/lifecycle_conditional_invalid_policies.yaml": { - "filePath": "bad/lifecycle_conditional_invalid_policies.yaml", + "bad/hard_coded_arn_properties.yaml": { + "filePath": "bad/hard_coded_arn_properties.yaml", "status": "OK", "metadata": { - "resourcesScanned": 7, + "resourcesScanned": 6, "counts": { - "fatal": 11, + "fatal": 0, "errors": 0, - "warnings": 4, + "warnings": 2, "informational": 6, "debug": 0 }, @@ -7746,418 +7257,305 @@ }, "diagnostics": [ { - "ruleId": "F0018", - "severity": "FATAL", - "message": "UpdateReplacePolicy must be one of Delete, Retain, got 'BadValue'", - "source": "SCHEMA", - "entity": { - "logicalId": "ConditionalInvalidUpdate", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "UpdateReplacePolicy", - "category": "Structure", - "startLine": 21, - "startColumn": 5, - "endLine": 21, - "endColumn": 24, - "ruleDescription": "UpdateReplacePolicy must be valid", - "phase": "SCHEMA" - }, - { - "ruleId": "F0018", - "severity": "FATAL", - "message": "UpdateReplacePolicy must be one of Delete, Retain, got null", - "source": "SCHEMA", - "entity": { - "logicalId": "DirectNoValuePolicies", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "UpdateReplacePolicy", - "category": "Structure", - "startLine": 30, - "startColumn": 5, - "endLine": 30, - "endColumn": 24, - "ruleDescription": "UpdateReplacePolicy must be valid", - "phase": "SCHEMA" - }, - { - "ruleId": "F0018", - "severity": "FATAL", - "message": "UpdateReplacePolicy must be one of Delete, Retain, got 'arn:aws:cloudformation:us-east-1:123456789012:stack/teststack/51af3dc0-da77-11e4-872e-1234567db123'", - "source": "SCHEMA", - "entity": { - "logicalId": "StackIdPolicies", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::WaitConditionHandle" - }, - "propertyPath": "UpdateReplacePolicy", - "category": "Structure", - "startLine": 35, - "startColumn": 5, - "endLine": 35, - "endColumn": 24, - "ruleDescription": "UpdateReplacePolicy must be valid", - "phase": "SCHEMA" - }, - { - "ruleId": "F0018", - "severity": "FATAL", - "message": "UpdateReplacePolicy must be one of Delete, Retain, got null", - "source": "SCHEMA", - "entity": { - "logicalId": "ConditionalNoValuePolicies", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "UpdateReplacePolicy", - "category": "Structure", - "startLine": 40, - "startColumn": 5, - "endLine": 40, - "endColumn": 24, - "ruleDescription": "UpdateReplacePolicy must be valid", - "phase": "SCHEMA" - }, - { - "ruleId": "F3016", - "severity": "FATAL", - "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got 'InvalidPolicy'", - "source": "SCHEMA", - "entity": { - "logicalId": "ConditionalInvalidDeletion", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "DeletionPolicy", - "category": "Structure", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 19, - "ruleDescription": "DeletionPolicy must be valid", - "phase": "SCHEMA" - }, - { - "ruleId": "F3016", - "severity": "FATAL", - "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got 'AlsoWrong'", - "source": "SCHEMA", - "entity": { - "logicalId": "BothBranchesInvalid", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "DeletionPolicy", - "category": "Structure", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 19, - "ruleDescription": "DeletionPolicy must be valid", - "phase": "SCHEMA" - }, - { - "ruleId": "F3016", - "severity": "FATAL", - "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got 'WrongOne'", - "source": "SCHEMA", - "entity": { - "logicalId": "BothBranchesInvalid", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "DeletionPolicy", - "category": "Structure", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 19, - "ruleDescription": "DeletionPolicy must be valid", - "phase": "SCHEMA" - }, - { - "ruleId": "F3016", - "severity": "FATAL", - "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got null", - "source": "SCHEMA", - "entity": { - "logicalId": "DirectNoValuePolicies", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "DeletionPolicy", - "category": "Structure", - "startLine": 29, - "startColumn": 5, - "endLine": 29, - "endColumn": 19, - "ruleDescription": "DeletionPolicy must be valid", - "phase": "SCHEMA" - }, - { - "ruleId": "F3016", - "severity": "FATAL", - "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got 'arn:aws:cloudformation:us-east-1:123456789012:stack/teststack/51af3dc0-da77-11e4-872e-1234567db123'", - "source": "SCHEMA", - "entity": { - "logicalId": "StackIdPolicies", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::WaitConditionHandle" - }, - "propertyPath": "DeletionPolicy", - "category": "Structure", - "startLine": 34, - "startColumn": 5, - "endLine": 34, - "endColumn": 19, - "ruleDescription": "DeletionPolicy must be valid", - "phase": "SCHEMA" - }, - { - "ruleId": "F3016", - "severity": "FATAL", - "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got null", - "source": "SCHEMA", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "ConditionalNoValuePolicies", + "logicalId": "S3BadBucket", "entityType": "Resource", "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "DeletionPolicy", - "category": "Structure", - "startLine": 39, - "startColumn": 5, - "endLine": 39, - "endColumn": 19, - "ruleDescription": "DeletionPolicy must be valid", - "phase": "SCHEMA" + "propertyPath": "Properties.NotificationConfiguration.TopicConfigurations.0.Topic.Fn::Sub", + "category": "Best Practice", + "startLine": 9, + "startColumn": 11, + "endLine": 9, + "endColumn": 18, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "F3016", - "severity": "FATAL", - "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got an object", - "source": "SCHEMA", + "ruleId": "W3045", + "severity": "WARN", + "message": "AccessControl property is deprecated. Use bucket policies instead", + "source": "CFN_LINT", "entity": { - "logicalId": "DynamicObjectPolicy", + "logicalId": "S3BadBucket", "entityType": "Resource", "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "DeletionPolicy", - "category": "Structure", - "startLine": 44, - "startColumn": 5, - "endLine": 44, - "endColumn": 19, - "ruleDescription": "DeletionPolicy must be valid", - "phase": "SCHEMA" + "propertyPath": "Properties.AccessControl", + "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", + "category": "Deprecation", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 20, + "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", + "phase": "LINT", + "context": { + "actualValue": "Private" + } }, { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "ruleId": "I3042", + "severity": "INFO", + "message": "ARN in Resource S3BadBucket contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", "source": "CFN_LINT", "entity": { - "logicalId": "ConditionalInvalidDeletion", + "logicalId": "S3BadBucket", "entityType": "Resource", "resourceType": "AWS::S3::Bucket" }, + "propertyPath": "Properties.NotificationConfiguration.TopicConfigurations.0.Topic.Fn::Sub", "category": "Best Practice", - "startLine": 15, - "startColumn": 3, - "endLine": 15, - "endColumn": 29, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "startLine": 9, + "startColumn": 11, + "endLine": 9, + "endColumn": 18, + "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", "phase": "LINT" - }, - { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + }, + { + "ruleId": "I3042", + "severity": "INFO", + "message": "ARN in Resource SampleBadBucketPolicy contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", "source": "CFN_LINT", "entity": { - "logicalId": "ConditionalInvalidUpdate", + "logicalId": "SampleBadBucketPolicy", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::S3::BucketPolicy" }, + "propertyPath": "Properties.PolicyDocument.Statement.0.Resource.Fn::Sub", "category": "Best Practice", - "startLine": 19, - "startColumn": 3, - "endLine": 19, - "endColumn": 27, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "startLine": 21, + "startColumn": 13, + "endLine": 21, + "endColumn": 20, + "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", "phase": "LINT" }, { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BothBranchesInvalid", + "logicalId": "SampleBadBucketPolicy", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::S3::BucketPolicy" }, + "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 23, - "startColumn": 3, - "endLine": 23, - "endColumn": 22, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", - "phase": "LINT" + "startLine": 15, + "startColumn": 7, + "endLine": 15, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'S3BadBucket'" + } }, { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DynamicObjectPolicy", + "logicalId": "SampleRole", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::IAM::Role" }, + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 42, - "startColumn": 3, - "endLine": 42, - "endColumn": 22, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", - "phase": "LINT" + "startLine": 36, + "startColumn": 7, + "endLine": 36, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ConditionalInvalidDeletion' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'S3BadBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConditionalInvalidDeletion", + "logicalId": "S3BadBucket", "entityType": "Resource", "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 15, - "startColumn": 3, - "endLine": 15, - "endColumn": 29, + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ConditionalInvalidUpdate' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'SampleRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConditionalInvalidUpdate", + "logicalId": "SampleRole", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 19, - "startColumn": 3, - "endLine": 19, - "endColumn": 27, + "startLine": 26, + "startColumn": 5, + "endLine": 26, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/hardcoded_partition.yaml": { + "filePath": "bad/hardcoded_partition.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 4, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BothBranchesInvalid' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "BothBranchesInvalid", + "logicalId": "Topic", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 23, + "category": "Security", + "startLine": 7, "startColumn": 3, - "endLine": 23, - "endColumn": 22, - "ruleDescription": "Resource should have Tags", + "endLine": 7, + "endColumn": 8, + "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DirectNoValuePolicies' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DirectNoValuePolicies", + "logicalId": "Bucket", "entityType": "Resource", "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 27, - "startColumn": 3, - "endLine": 27, - "endColumn": 24, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Topic", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.TopicName", + "category": "Best Practice", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ConditionalNoValuePolicies' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConditionalNoValuePolicies", + "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": 37, - "startColumn": 3, - "endLine": 37, - "endColumn": 29, + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DynamicObjectPolicy' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'Topic' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DynamicObjectPolicy", + "logicalId": "Topic", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 42, - "startColumn": 3, - "endLine": 42, - "endColumn": 22, + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/lifecycle_policy_shapes.yaml": { - "filePath": "bad/lifecycle_policy_shapes.yaml", + "bad/iam_bad_statement.yaml": { + "filePath": "bad/iam_bad_statement.yaml", "status": "OK", "metadata": { - "resourcesScanned": 11, + "resourcesScanned": 1, "counts": { - "fatal": 12, + "fatal": 0, "errors": 1, - "warnings": 1, - "informational": 5, + "warnings": 0, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -8166,384 +7564,389 @@ }, "diagnostics": [ { - "ruleId": "F0018", - "severity": "FATAL", - "message": "UpdateReplacePolicy must be one of Delete, Retain, got a list", - "source": "SCHEMA", - "entity": { - "logicalId": "ListPolicies", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "UpdateReplacePolicy", - "category": "Structure", - "startLine": 19, - "startColumn": 5, - "endLine": 19, - "endColumn": 24, - "ruleDescription": "UpdateReplacePolicy must be valid", - "phase": "SCHEMA" - }, - { - "ruleId": "F0018", - "severity": "FATAL", - "message": "UpdateReplacePolicy must be one of Delete, Retain, got an object", - "source": "SCHEMA", - "entity": { - "logicalId": "ObjectPolicies", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "UpdateReplacePolicy", - "category": "Structure", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 24, - "ruleDescription": "UpdateReplacePolicy must be valid", - "phase": "SCHEMA" - }, - { - "ruleId": "F0018", - "severity": "FATAL", - "message": "UpdateReplacePolicy must be one of Delete, Retain, got null", - "source": "SCHEMA", - "entity": { - "logicalId": "NoValuePoliciesWithoutTransform", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "UpdateReplacePolicy", - "category": "Structure", - "startLine": 65, - "startColumn": 5, - "endLine": 65, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "UpdateReplacePolicy must be valid", - "phase": "SCHEMA" - }, - { - "ruleId": "F1101", - "severity": "FATAL", - "message": "Ref is not supported as a top-level CreationPolicy value; CreationPolicy must be an object or Fn::If returning an object", - "source": "SCHEMA", + "ruleId": "E3510", + "severity": "ERROR", + "message": "'Effect' is a required property", + "source": "CFN_LINT", "entity": { - "logicalId": "CreationRootRef", + "logicalId": "Policy", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::WaitCondition" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "CreationPolicy", - "category": "Structure", - "startLine": 30, - "startColumn": 5, - "endLine": 30, - "endColumn": 19, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" + "propertyPath": "Properties.PolicyDocument.Statement.0", + "category": "Resource", + "startLine": 10, + "startColumn": 19, + "endLine": 10, + "endColumn": 20, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" + } + ] + }, + "bad/iam_ref_with_path.yaml": { + "filePath": "bad/iam_ref_with_path.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "F1101", - "severity": "FATAL", - "message": "Fn::FindInMap is not supported as a top-level CreationPolicy value; CreationPolicy must be an object or Fn::If returning an object", - "source": "SCHEMA", + "ruleId": "E3050", + "severity": "ERROR", + "message": "Ref to IAM role 'Role' with Path '/custom/path/' - use GetAtt Role.Arn instead", + "source": "CFN_LINT", "entity": { - "logicalId": "CreationRootFindInMap", + "logicalId": "Project", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::WaitCondition" + "resourceType": "AWS::CodeBuild::Project" }, - "propertyPath": "CreationPolicy", - "category": "Structure", - "startLine": 34, - "startColumn": 5, - "endLine": 34, - "endColumn": 19, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" + "propertyPath": "Properties.ServiceRole", + "suggestedFix": "Switch from Ref to !GetAtt .Arn when Path is not '/'", + "category": "Resource", + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 18, + "ruleDescription": "Check if REFing to a IAM resource with path set", + "phase": "LINT" }, { - "ruleId": "F1101", - "severity": "FATAL", - "message": "Fn::Select is not supported as a top-level CreationPolicy value; CreationPolicy must be an object or Fn::If returning an object", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CreationRootSelect", + "logicalId": "Role", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::WaitCondition" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "CreationPolicy", - "category": "Structure", - "startLine": 38, - "startColumn": 5, - "endLine": 38, - "endColumn": 19, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F1101", - "severity": "FATAL", - "message": "Fn::Sub is not supported as a top-level CreationPolicy value; CreationPolicy must be an object or Fn::If returning an object", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Role' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "CreationRootSub", + "logicalId": "Role", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::WaitCondition" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "CreationPolicy", - "category": "Structure", - "startLine": 45, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, "startColumn": 5, - "endLine": 45, - "endColumn": 19, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" - }, - { - "ruleId": "F1101", - "severity": "FATAL", - "message": "Fn::If branch in CreationPolicy must be an object, got a string", - "source": "SCHEMA", - "entity": { - "logicalId": "CreationConditionalInvalid", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::WaitCondition" - }, - "propertyPath": "CreationPolicy.Fn::If.2", - "category": "Structure", - "startLine": 51, - "startColumn": 63, - "endLine": 51, - "endColumn": 64, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "F1101", - "severity": "FATAL", - "message": "Ref is not supported as a top-level CreationPolicy value; CreationPolicy must be an object or Fn::If returning an object", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Project' of type 'AWS::CodeBuild::Project' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "CreationNoValueOnUnsupportedType", + "logicalId": "Project", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::CodeBuild::Project" }, - "propertyPath": "CreationPolicy", - "category": "Structure", - "startLine": 55, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 16, "startColumn": 5, - "endLine": 55, - "endColumn": 19, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" + "endLine": 16, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/iam_wildcard_all_types.yaml": { + "filePath": "bad/iam_wildcard_all_types.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "F3016", - "severity": "FATAL", - "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got a list", - "source": "SCHEMA", + "ruleId": "W2512", + "severity": "WARN", + "message": "IAM policy uses NotAction which grants all actions except those listed - consider using Action instead", + "source": "ENGINE", "entity": { - "logicalId": "ListPolicies", + "logicalId": "NotActionUser", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::IAM::User" }, - "propertyPath": "DeletionPolicy", - "category": "Structure", - "startLine": 18, - "startColumn": 5, - "endLine": 18, - "endColumn": 19, - "ruleDescription": "DeletionPolicy must be valid", - "phase": "SCHEMA" + "category": "Security", + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 16, + "ruleDescription": "IAM policy with NotAction", + "phase": "LINT" }, { - "ruleId": "F3016", - "severity": "FATAL", - "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got an object", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'WildcardUser' of type 'AWS::IAM::User' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ObjectPolicies", + "logicalId": "WildcardUser", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::IAM::User" }, - "propertyPath": "DeletionPolicy", - "category": "Structure", - "startLine": 23, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, "startColumn": 5, - "endLine": 23, - "endColumn": 19, - "ruleDescription": "DeletionPolicy must be valid", - "phase": "SCHEMA" + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "F3016", - "severity": "FATAL", - "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got null", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'NotActionUser' of type 'AWS::IAM::User' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "NoValuePoliciesWithoutTransform", + "logicalId": "NotActionUser", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::IAM::User" }, - "propertyPath": "DeletionPolicy", - "category": "Structure", - "startLine": 64, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 36, "startColumn": 5, - "endLine": 64, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "DeletionPolicy must be valid", - "phase": "SCHEMA" + "endLine": 36, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/if_wrong_arity.yaml": { + "filePath": "bad/if_wrong_arity.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 1, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "E3055", - "severity": "ERROR", - "message": "CreationPolicy is not supported on resource type 'AWS::S3::Bucket'", - "source": "CFN_LINT", + "ruleId": "F0013", + "severity": "FATAL", + "message": "Fn::If: must have exactly 3 elements, got 2", + "source": "SCHEMA", "entity": { - "logicalId": "CreationNoValueOnUnsupportedType", + "logicalId": "R", "entityType": "Resource", "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "CreationPolicy", - "suggestedFix": "Remove CreationPolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::CloudFormation::WaitCondition, AWS::EC2::Instance", - "category": "Resource", - "startLine": 55, - "startColumn": 5, - "endLine": 55, - "endColumn": 19, - "ruleDescription": "Check CreationPolicy values for Resources", - "phase": "LINT" + "propertyPath": "Properties.BucketName.Fn::If", + "category": "Intrinsic Function", + "startLine": 12, + "startColumn": 9, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Fn::If must have exactly 3 elements", + "phase": "PARSE" }, { "ruleId": "W8003", "severity": "WARN", - "message": "Fn::Equals in condition 'Never' will always return False", + "message": "Fn::Equals in condition 'IsProd' will always return False", "source": "CFN_LINT", "entity": { - "logicalId": "Never", + "logicalId": "IsProd", "entityType": "Condition" }, - "propertyPath": "Conditions/Never", + "propertyPath": "Conditions/IsProd", "category": "Best Practice", - "startLine": 13, + "startLine": 3, "startColumn": 3, - "endLine": 13, - "endColumn": 8, + "endLine": 3, + "endColumn": 9, "ruleDescription": "Fn::Equals will always return true or false", "phase": "PARSE" }, { - "ruleId": "I3013", + "ruleId": "I9001", "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", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "NoValuePoliciesWithoutTransform", + "logicalId": "R", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 62, - "startColumn": 3, - "endLine": 62, - "endColumn": 34, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ListPolicies' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'R' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ListPolicies", + "logicalId": "R", "entityType": "Resource", "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 16, - "startColumn": 3, - "endLine": 16, + "startLine": 10, + "startColumn": 5, + "endLine": 10, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/invalid_deletion_policy.yaml": { + "filePath": "bad/invalid_deletion_policy.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 1, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ObjectPolicies' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F3016", + "severity": "FATAL", + "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got 'Remove'", + "source": "SCHEMA", "entity": { - "logicalId": "ObjectPolicies", + "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": 21, - "startColumn": 3, - "endLine": 21, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "DeletionPolicy", + "category": "Structure", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 19, + "ruleDescription": "DeletionPolicy must be valid", + "phase": "SCHEMA" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CreationNoValueOnUnsupportedType' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "source": "CFN_LINT", "entity": { - "logicalId": "CreationNoValueOnUnsupportedType", + "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": 53, + "startLine": 3, "startColumn": 3, - "endLine": 53, - "endColumn": 35, - "ruleDescription": "Resource should have Tags", + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'NoValuePoliciesWithoutTransform' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "NoValuePoliciesWithoutTransform", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 62, + "startLine": 3, "startColumn": 3, - "endLine": 62, - "endColumn": 34, + "endLine": 3, + "endColumn": 9, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/limit_numbers.yaml": { - "filePath": "bad/limit_numbers.yaml", + "bad/invalid_mapping_structure.yaml": { + "filePath": "bad/invalid_mapping_structure.yaml", "status": "OK", "metadata": { - "resourcesScanned": 501, + "resourcesScanned": 1, "counts": { - "fatal": 5, + "fatal": 1, "errors": 0, - "warnings": 401, - "informational": 501, + "warnings": 1, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -8552,1673 +7955,2218 @@ }, "diagnostics": [ { - "ruleId": "F0003", - "severity": "FATAL", - "message": "Template has 201 parameters, maximum is 200", - "source": "SCHEMA", - "category": "Structure", - "startLine": 1, - "startColumn": 1, - "endLine": 1, - "endColumn": 11, - "ruleDescription": "Maximum 200 parameters", - "phase": "SCHEMA" - }, - { - "ruleId": "F0004", - "severity": "FATAL", - "message": "Template has 201 outputs, maximum is 200", - "source": "SCHEMA", - "category": "Structure", - "startLine": 1407, - "startColumn": 1, - "endLine": 1407, - "endColumn": 8, - "ruleDescription": "Maximum 200 outputs", - "phase": "SCHEMA" - }, - { - "ruleId": "F0007", - "severity": "FATAL", - "message": "Template has 501 resources, maximum is 500", - "source": "SCHEMA", - "category": "Structure", - "startLine": 404, - "startColumn": 1, - "endLine": 404, - "endColumn": 10, - "ruleDescription": "Maximum 500 resources", - "phase": "SCHEMA" - }, - { - "ruleId": "F0008", - "severity": "FATAL", - "message": "Template has 201 mappings, maximum is 200", - "source": "SCHEMA", - "category": "Structure", - "startLine": 1810, - "startColumn": 1, - "endLine": 1810, - "endColumn": 9, - "ruleDescription": "Maximum 200 mappings", - "phase": "SCHEMA" - }, - { - "ruleId": "F0050", + "ruleId": "F0017", "severity": "FATAL", - "message": "Mapping 'Mapping201'.'Key' has 202 attributes, maximum is 200", + "message": "Mapping 'BadMap' second level key 'Key1' must be a map", "source": "SCHEMA", "entity": { - "logicalId": "Mapping201", + "logicalId": "BadMap", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping201/Key", + "propertyPath": "Mappings/BadMap/Key1", "category": "Structure", - "startLine": 2412, + "startLine": 4, "startColumn": 5, - "endLine": 2412, - "endColumn": 8, - "ruleDescription": "Mapping must have valid 3-level structure", - "phase": "SCHEMA" + "endLine": 4, + "endColumn": 9, + "ruleDescription": "Mapping level must be a map", + "phase": "PARSE" }, { - "ruleId": "W2001", + "ruleId": "W7001", "severity": "WARN", - "message": "Parameter 'Parameter2' is not referenced anywhere in the template", + "message": "Mapping 'BadMap' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter2", - "entityType": "Parameter" + "logicalId": "BadMap", + "entityType": "Mapping" }, - "propertyPath": "Parameters/Parameter2", + "propertyPath": "Mappings/BadMap", "category": "Best Practice", - "startLine": 4, + "startLine": 3, "startColumn": 3, - "endLine": 4, - "endColumn": 13, - "ruleDescription": "Check if Parameters are Used", + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter3' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'R' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Parameter3", - "entityType": "Parameter" + "logicalId": "R", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/Parameter3", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 6, "startColumn": 3, "endLine": 6, - "endColumn": 13, - "ruleDescription": "Check if Parameters are Used", + "endColumn": 4, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/invalid_update_replace_policy.yaml": { + "filePath": "bad/invalid_update_replace_policy.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 1, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter4' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "F0018", + "severity": "FATAL", + "message": "UpdateReplacePolicy must be one of Delete, Retain, got 'Remove'", + "source": "SCHEMA", "entity": { - "logicalId": "Parameter4", - "entityType": "Parameter" + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/Parameter4", - "category": "Best Practice", - "startLine": 8, - "startColumn": 3, - "endLine": 8, - "endColumn": 13, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "propertyPath": "UpdateReplacePolicy", + "category": "Structure", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 24, + "ruleDescription": "UpdateReplacePolicy must be valid", + "phase": "SCHEMA" }, { - "ruleId": "W2001", + "ruleId": "W3011", "severity": "WARN", - "message": "Parameter 'Parameter5' is not referenced anywhere in the template", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter5", - "entityType": "Parameter" + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/Parameter5", "category": "Best Practice", - "startLine": 10, + "startLine": 3, "startColumn": 3, - "endLine": 10, - "endColumn": 13, - "ruleDescription": "Check if Parameters are Used", + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter6' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Parameter6", - "entityType": "Parameter" + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/Parameter6", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, + "startLine": 3, "startColumn": 3, - "endLine": 12, - "endColumn": 13, - "ruleDescription": "Check if Parameters are Used", + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/issues.yaml": { + "filePath": "bad/issues.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 4, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter7' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "F1020", + "severity": "FATAL", + "message": "'PrivateSecurityGroup' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'RDSOptionGroup']", + "source": "SCHEMA", "entity": { - "logicalId": "Parameter7", - "entityType": "Parameter" + "logicalId": "RDSOptionGroup", + "entityType": "Resource", + "resourceType": "AWS::RDS::OptionGroup" }, - "propertyPath": "Parameters/Parameter7", - "category": "Best Practice", - "startLine": 14, - "startColumn": 3, - "endLine": 14, - "endColumn": 13, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "propertyPath": "Properties.OptionConfigurations.0.VpcSecurityGroupMemberships.0", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 12, + "startColumn": 20, + "endLine": 12, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter8' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'EngineName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Parameter8", - "entityType": "Parameter" + "logicalId": "RDSOptionGroup", + "entityType": "Resource", + "resourceType": "AWS::RDS::OptionGroup" }, - "propertyPath": "Parameters/Parameter8", - "category": "Best Practice", - "startLine": 16, - "startColumn": 3, - "endLine": 16, - "endColumn": 13, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "propertyPath": "Properties.EngineName", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter9' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'MajorEngineVersion' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Parameter9", - "entityType": "Parameter" + "logicalId": "RDSOptionGroup", + "entityType": "Resource", + "resourceType": "AWS::RDS::OptionGroup" }, - "propertyPath": "Parameters/Parameter9", + "propertyPath": "Properties.MajorEngineVersion", "category": "Best Practice", - "startLine": 18, - "startColumn": 3, - "endLine": 18, - "endColumn": 13, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 25, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter10' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'OptionGroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Parameter10", - "entityType": "Parameter" + "logicalId": "RDSOptionGroup", + "entityType": "Resource", + "resourceType": "AWS::RDS::OptionGroup" }, - "propertyPath": "Parameters/Parameter10", + "propertyPath": "Properties.OptionGroupDescription", "category": "Best Practice", - "startLine": 20, - "startColumn": 3, - "endLine": 20, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 29, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter11' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'RDSOptionGroup' of type 'AWS::RDS::OptionGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Parameter11", - "entityType": "Parameter" + "logicalId": "RDSOptionGroup", + "entityType": "Resource", + "resourceType": "AWS::RDS::OptionGroup" }, - "propertyPath": "Parameters/Parameter11", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 22, - "startColumn": 3, - "endLine": 22, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/json_parse.json": { + "filePath": "bad/json_parse.json", + "status": "ERROR", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter12' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "F1101", + "severity": "FATAL", + "message": "JSON parse error: expected `:` at line 5 column 11", + "source": "SCHEMA", + "category": "Structure", + "startLine": 5, + "startColumn": 11, + "endLine": 5, + "endColumn": 11, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" + } + ] + }, + "bad/lambda_image_handler_intrinsic.yaml": { + "filePath": "bad/lambda_image_handler_intrinsic.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 1, + "warnings": 0, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3003", + "severity": "FATAL", + "message": "'Role' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Parameter12", - "entityType": "Parameter" + "logicalId": "Fn", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/Parameter12", - "category": "Best Practice", - "startLine": 24, - "startColumn": 3, - "endLine": 24, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'Role'", + "category": "Schema", + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter13' is not referenced anywhere in the template", + "ruleId": "E3685", + "severity": "ERROR", + "message": "Container image functions cannot specify Handler, Runtime, or Layers properties", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter13", - "entityType": "Parameter" + "logicalId": "Fn", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/Parameter13", - "category": "Best Practice", - "startLine": 26, - "startColumn": 3, - "endLine": 26, + "propertyPath": "Properties.Handler", + "category": "Resource", + "startLine": 12, + "startColumn": 7, + "endLine": 12, "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "ruleDescription": "Container image functions cannot use Handler, Runtime, or Layers", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter14' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'PackageType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Parameter14", - "entityType": "Parameter" + "logicalId": "Fn", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/Parameter14", + "propertyPath": "Properties.PackageType", "category": "Best Practice", - "startLine": 28, - "startColumn": 3, - "endLine": 28, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter15' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Fn' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Parameter15", - "entityType": "Parameter" + "logicalId": "Fn", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/Parameter15", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 30, - "startColumn": 3, - "endLine": 30, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/lambda_no_snapstart.yaml": { + "filePath": "bad/lambda_no_snapstart.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter16' is not referenced anywhere in the template", + "ruleId": "I2530", + "severity": "INFO", + "message": "Runtime 'java21' should consider using SnapStart for improved performance", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter16", - "entityType": "Parameter" + "logicalId": "Func", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/Parameter16", + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add SnapStart with ApplyOn set to 'PublishedVersions'", "category": "Best Practice", - "startLine": 32, - "startColumn": 3, - "endLine": 32, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "documentationUrl": "https://docs.aws.amazon.com/lambda/latest/dg/snapstart.html", + "ruleDescription": "Validate that SnapStart is configured for >= Java11 runtimes", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter17' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Parameter17", - "entityType": "Parameter" + "logicalId": "Func", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/Parameter17", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 34, - "startColumn": 3, - "endLine": 34, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter18' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Func' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Parameter18", - "entityType": "Parameter" + "logicalId": "Func", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/Parameter18", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 36, - "startColumn": 3, - "endLine": 36, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/lambda_permission_no_source_account.yaml": { + "filePath": "bad/lambda_permission_no_source_account.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 4, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W2001", + "ruleId": "W3663", "severity": "WARN", - "message": "Parameter 'Parameter19' is not referenced anywhere in the template", + "message": "Lambda Permission with a SourceArn that has no account id should also specify SourceAccount", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter19", - "entityType": "Parameter" + "logicalId": "Perm", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Parameters/Parameter19", - "category": "Best Practice", - "startLine": 38, - "startColumn": 3, - "endLine": 38, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "propertyPath": "Properties", + "suggestedFix": "Add SourceAccount property", + "category": "Security", + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 15, + "ruleDescription": "Validate SourceAccount is required property", "phase": "LINT" }, { - "ruleId": "W2001", + "ruleId": "W9002", "severity": "WARN", - "message": "Parameter 'Parameter20' is not referenced anywhere in the template", - "source": "CFN_LINT", + "message": "Property 'SourceArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", "entity": { - "logicalId": "Parameter20", - "entityType": "Parameter" + "logicalId": "Perm", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Parameters/Parameter20", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 40, - "startColumn": 3, - "endLine": 40, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 16, + "ruleDescription": "Hardcoded ARN property", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter21' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Parameter21", - "entityType": "Parameter" + "logicalId": "Perm", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Parameters/Parameter21", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 42, - "startColumn": 3, - "endLine": 42, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter22' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Parameter22", - "entityType": "Parameter" + "logicalId": "Perm", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Parameters/Parameter22", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 44, - "startColumn": 3, - "endLine": 44, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter23' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Parameter23", - "entityType": "Parameter" + "logicalId": "Perm", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Parameters/Parameter23", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 46, - "startColumn": 3, - "endLine": 46, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter24' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Parameter24", - "entityType": "Parameter" + "logicalId": "Perm", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Parameters/Parameter24", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 48, - "startColumn": 3, - "endLine": 48, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + } + ] + }, + "bad/lambda_snapstart_bad_runtime.yaml": { + "filePath": "bad/lambda_snapstart_bad_runtime.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W2001", + "ruleId": "W2530", "severity": "WARN", - "message": "Parameter 'Parameter25' is not referenced anywhere in the template", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter25", - "entityType": "Parameter" + "logicalId": "SnapStartFunc", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/Parameter25", + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", - "startLine": 50, - "startColumn": 3, - "endLine": 50, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "startLine": 14, + "startColumn": 9, + "endLine": 14, + "endColumn": 16, + "ruleDescription": "Validate that SnapStart is properly configured", "phase": "LINT" }, { - "ruleId": "W2001", + "ruleId": "W9013", "severity": "WARN", - "message": "Parameter 'Parameter26' is not referenced anywhere in the template", - "source": "CFN_LINT", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", "entity": { - "logicalId": "Parameter26", - "entityType": "Parameter" + "logicalId": "SnapStartFunc", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/Parameter26", - "category": "Best Practice", - "startLine": 52, + "category": "Security", + "startLine": 3, "startColumn": 3, - "endLine": 52, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "endLine": 3, + "endColumn": 16, + "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter27' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Parameter27", - "entityType": "Parameter" + "logicalId": "SnapStartFunc", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/Parameter27", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 54, - "startColumn": 3, - "endLine": 54, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter28' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SnapStartFunc' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Parameter28", - "entityType": "Parameter" + "logicalId": "SnapStartFunc", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/Parameter28", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 56, - "startColumn": 3, - "endLine": 56, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/lambda_snapstart_no_version.yaml": { + "filePath": "bad/lambda_snapstart_no_version.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W2001", + "ruleId": "W2530", "severity": "WARN", - "message": "Parameter 'Parameter29' is not referenced anywhere in the template", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter29", - "entityType": "Parameter" + "logicalId": "Func", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/Parameter29", + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", "category": "Best Practice", - "startLine": 58, - "startColumn": 3, - "endLine": 58, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "startLine": 13, + "startColumn": 9, + "endLine": 13, + "endColumn": 16, + "ruleDescription": "Validate that SnapStart is properly configured", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter30' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Func' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Parameter30", - "entityType": "Parameter" + "logicalId": "Func", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/Parameter30", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 60, - "startColumn": 3, - "endLine": 60, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/lambda_sqs_timeout.yaml": { + "filePath": "bad/lambda_sqs_timeout.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 7, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter31' is not referenced anywhere in the template", + "ruleId": "E3505", + "severity": "ERROR", + "message": "Queue visibility timeout (10) is less than Function timeout (60) seconds", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter31", - "entityType": "Parameter" + "logicalId": "Queue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Parameters/Parameter31", - "category": "Best Practice", - "startLine": 62, - "startColumn": 3, - "endLine": 62, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "propertyPath": "Properties.VisibilityTimeout", + "suggestedFix": "Set the SQS VisibilityTimeout to at least the Lambda function Timeout", + "category": "Resource", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 24, + "ruleDescription": "Validate SQS VisibilityTimeout is greater than a function's Timeout", + "phase": "LINT", + "context": { + "extra": { + "visibility_timeout": 10 + } + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter32' is not referenced anywhere in the template", + "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": "Parameter32", - "entityType": "Parameter" + "logicalId": "Queue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Parameters/Parameter32", "category": "Best Practice", - "startLine": 64, + "startLine": 3, "startColumn": 3, - "endLine": 64, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "endLine": 3, + "endColumn": 8, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter33' is not referenced anywhere in the template", + "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": "Parameter33", - "entityType": "Parameter" + "logicalId": "Queue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Parameters/Parameter33", "category": "Best Practice", - "startLine": 66, + "startLine": 3, "startColumn": 3, - "endLine": 66, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "endLine": 3, + "endColumn": 8, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter34' is not referenced anywhere in the template", + "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": "Parameter34", - "entityType": "Parameter" + "logicalId": "Queue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Parameters/Parameter34", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 68, - "startColumn": 3, - "endLine": 68, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter35' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Parameter35", - "entityType": "Parameter" + "logicalId": "ESM", + "entityType": "Resource", + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Parameters/Parameter35", + "propertyPath": "Properties.EventSourceArn", "category": "Best Practice", - "startLine": 70, - "startColumn": 3, - "endLine": 70, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt Queue.Arn" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter36' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Queue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Parameter36", - "entityType": "Parameter" + "logicalId": "Queue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Parameters/Parameter36", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 72, - "startColumn": 3, - "endLine": 72, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter37' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Func' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Parameter37", - "entityType": "Parameter" + "logicalId": "Func", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/Parameter37", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 74, - "startColumn": 3, - "endLine": 74, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter38' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ESM' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Parameter38", - "entityType": "Parameter" + "logicalId": "ESM", + "entityType": "Resource", + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Parameters/Parameter38", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 76, - "startColumn": 3, - "endLine": 76, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "startLine": 19, + "startColumn": 5, + "endLine": 19, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/lambda_zip_no_handler.yaml": { + "filePath": "bad/lambda_zip_no_handler.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W2001", + "ruleId": "W2533", "severity": "WARN", - "message": "Parameter 'Parameter39' is not referenced anywhere in the template", + "message": "Properties ['Handler', 'Runtime'] missing for zip file deployment at Resources/Func/Properties", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter39", - "entityType": "Parameter" + "logicalId": "Func", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/Parameter39", + "propertyPath": "Properties.Code", + "suggestedFix": "Add the missing properties for zip file deployment", "category": "Best Practice", - "startLine": 78, - "startColumn": 3, - "endLine": 78, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 11, + "ruleDescription": "Check required properties for Lambda if the deployment package is a .zip file", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter40' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Parameter40", - "entityType": "Parameter" + "logicalId": "Func", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/Parameter40", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 80, - "startColumn": 3, - "endLine": 80, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter41' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Func' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Parameter41", - "entityType": "Parameter" + "logicalId": "Func", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/Parameter41", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 82, - "startColumn": 3, - "endLine": 82, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/lambda_zipfile_java.yaml": { + "filePath": "bad/lambda_zipfile_java.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 1, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter42' is not referenced anywhere in the template", + "ruleId": "E3677", + "severity": "ERROR", + "message": "Runtime 'java21' is not supported with Code.ZipFile - use nodejs or python", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter42", - "entityType": "Parameter" + "logicalId": "LambdaFn", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/Parameter42", - "category": "Best Practice", - "startLine": 84, + "category": "Resource", + "startLine": 3, "startColumn": 3, - "endLine": 84, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Lambda ZipFile requires nodejs or python runtime", "phase": "LINT" }, { - "ruleId": "W2001", + "ruleId": "W9013", "severity": "WARN", - "message": "Parameter 'Parameter43' is not referenced anywhere in the template", - "source": "CFN_LINT", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", "entity": { - "logicalId": "Parameter43", - "entityType": "Parameter" + "logicalId": "LambdaFn", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/Parameter43", - "category": "Best Practice", - "startLine": 86, + "category": "Security", + "startLine": 3, "startColumn": 3, - "endLine": 86, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter44' is not referenced anywhere in the template", + "ruleId": "I2530", + "severity": "INFO", + "message": "Runtime 'java21' should consider using SnapStart for improved performance", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter44", - "entityType": "Parameter" + "logicalId": "LambdaFn", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/Parameter44", + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add SnapStart with ApplyOn set to 'PublishedVersions'", "category": "Best Practice", - "startLine": 88, - "startColumn": 3, - "endLine": 88, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "documentationUrl": "https://docs.aws.amazon.com/lambda/latest/dg/snapstart.html", + "ruleDescription": "Validate that SnapStart is configured for >= Java11 runtimes", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter45' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Parameter45", - "entityType": "Parameter" + "logicalId": "LambdaFn", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/Parameter45", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 90, - "startColumn": 3, - "endLine": 90, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter46' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LambdaFn' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Parameter46", - "entityType": "Parameter" + "logicalId": "LambdaFn", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/Parameter46", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 92, - "startColumn": 3, - "endLine": 92, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/lifecycle_conditional_invalid_policies.yaml": { + "filePath": "bad/lifecycle_conditional_invalid_policies.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 7, + "counts": { + "fatal": 11, + "errors": 0, + "warnings": 4, + "informational": 6, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter47' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "F0018", + "severity": "FATAL", + "message": "UpdateReplacePolicy must be one of Delete, Retain, got 'BadValue'", + "source": "SCHEMA", "entity": { - "logicalId": "Parameter47", - "entityType": "Parameter" + "logicalId": "ConditionalInvalidUpdate", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/Parameter47", - "category": "Best Practice", - "startLine": 94, - "startColumn": 3, - "endLine": 94, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "propertyPath": "UpdateReplacePolicy", + "category": "Structure", + "startLine": 21, + "startColumn": 5, + "endLine": 21, + "endColumn": 24, + "ruleDescription": "UpdateReplacePolicy must be valid", + "phase": "SCHEMA" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter48' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "F0018", + "severity": "FATAL", + "message": "UpdateReplacePolicy must be one of Delete, Retain, got null", + "source": "SCHEMA", "entity": { - "logicalId": "Parameter48", - "entityType": "Parameter" + "logicalId": "DirectNoValuePolicies", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/Parameter48", - "category": "Best Practice", - "startLine": 96, - "startColumn": 3, - "endLine": 96, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "propertyPath": "UpdateReplacePolicy", + "category": "Structure", + "startLine": 30, + "startColumn": 5, + "endLine": 30, + "endColumn": 24, + "ruleDescription": "UpdateReplacePolicy must be valid", + "phase": "SCHEMA" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter49' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "F0018", + "severity": "FATAL", + "message": "UpdateReplacePolicy must be one of Delete, Retain, got 'arn:aws:cloudformation:us-east-1:123456789012:stack/teststack/51af3dc0-da77-11e4-872e-1234567db123'", + "source": "SCHEMA", "entity": { - "logicalId": "Parameter49", - "entityType": "Parameter" + "logicalId": "StackIdPolicies", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::WaitConditionHandle" }, - "propertyPath": "Parameters/Parameter49", - "category": "Best Practice", - "startLine": 98, - "startColumn": 3, - "endLine": 98, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "propertyPath": "UpdateReplacePolicy", + "category": "Structure", + "startLine": 35, + "startColumn": 5, + "endLine": 35, + "endColumn": 24, + "ruleDescription": "UpdateReplacePolicy must be valid", + "phase": "SCHEMA" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter50' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "F0018", + "severity": "FATAL", + "message": "UpdateReplacePolicy must be one of Delete, Retain, got null", + "source": "SCHEMA", "entity": { - "logicalId": "Parameter50", - "entityType": "Parameter" + "logicalId": "ConditionalNoValuePolicies", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/Parameter50", - "category": "Best Practice", - "startLine": 100, - "startColumn": 3, - "endLine": 100, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "propertyPath": "UpdateReplacePolicy", + "category": "Structure", + "startLine": 40, + "startColumn": 5, + "endLine": 40, + "endColumn": 24, + "ruleDescription": "UpdateReplacePolicy must be valid", + "phase": "SCHEMA" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter51' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "F3016", + "severity": "FATAL", + "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got 'InvalidPolicy'", + "source": "SCHEMA", "entity": { - "logicalId": "Parameter51", - "entityType": "Parameter" + "logicalId": "ConditionalInvalidDeletion", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/Parameter51", - "category": "Best Practice", - "startLine": 102, - "startColumn": 3, - "endLine": 102, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "propertyPath": "DeletionPolicy", + "category": "Structure", + "startLine": 17, + "startColumn": 5, + "endLine": 17, + "endColumn": 19, + "ruleDescription": "DeletionPolicy must be valid", + "phase": "SCHEMA" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter52' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "F3016", + "severity": "FATAL", + "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got 'AlsoWrong'", + "source": "SCHEMA", "entity": { - "logicalId": "Parameter52", - "entityType": "Parameter" + "logicalId": "BothBranchesInvalid", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/Parameter52", - "category": "Best Practice", - "startLine": 104, - "startColumn": 3, - "endLine": 104, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "propertyPath": "DeletionPolicy", + "category": "Structure", + "startLine": 25, + "startColumn": 5, + "endLine": 25, + "endColumn": 19, + "ruleDescription": "DeletionPolicy must be valid", + "phase": "SCHEMA" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter53' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "F3016", + "severity": "FATAL", + "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got 'WrongOne'", + "source": "SCHEMA", "entity": { - "logicalId": "Parameter53", - "entityType": "Parameter" + "logicalId": "BothBranchesInvalid", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/Parameter53", - "category": "Best Practice", - "startLine": 106, - "startColumn": 3, - "endLine": 106, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "propertyPath": "DeletionPolicy", + "category": "Structure", + "startLine": 25, + "startColumn": 5, + "endLine": 25, + "endColumn": 19, + "ruleDescription": "DeletionPolicy must be valid", + "phase": "SCHEMA" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter54' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "F3016", + "severity": "FATAL", + "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got null", + "source": "SCHEMA", "entity": { - "logicalId": "Parameter54", - "entityType": "Parameter" + "logicalId": "DirectNoValuePolicies", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/Parameter54", - "category": "Best Practice", - "startLine": 108, - "startColumn": 3, - "endLine": 108, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "propertyPath": "DeletionPolicy", + "category": "Structure", + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 19, + "ruleDescription": "DeletionPolicy must be valid", + "phase": "SCHEMA" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter55' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "F3016", + "severity": "FATAL", + "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got 'arn:aws:cloudformation:us-east-1:123456789012:stack/teststack/51af3dc0-da77-11e4-872e-1234567db123'", + "source": "SCHEMA", "entity": { - "logicalId": "Parameter55", - "entityType": "Parameter" + "logicalId": "StackIdPolicies", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::WaitConditionHandle" }, - "propertyPath": "Parameters/Parameter55", - "category": "Best Practice", - "startLine": 110, - "startColumn": 3, - "endLine": 110, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "propertyPath": "DeletionPolicy", + "category": "Structure", + "startLine": 34, + "startColumn": 5, + "endLine": 34, + "endColumn": 19, + "ruleDescription": "DeletionPolicy must be valid", + "phase": "SCHEMA" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter56' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "F3016", + "severity": "FATAL", + "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got null", + "source": "SCHEMA", "entity": { - "logicalId": "Parameter56", - "entityType": "Parameter" + "logicalId": "ConditionalNoValuePolicies", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/Parameter56", - "category": "Best Practice", - "startLine": 112, - "startColumn": 3, - "endLine": 112, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "propertyPath": "DeletionPolicy", + "category": "Structure", + "startLine": 39, + "startColumn": 5, + "endLine": 39, + "endColumn": 19, + "ruleDescription": "DeletionPolicy must be valid", + "phase": "SCHEMA" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter57' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "F3016", + "severity": "FATAL", + "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got an object", + "source": "SCHEMA", "entity": { - "logicalId": "Parameter57", - "entityType": "Parameter" + "logicalId": "DynamicObjectPolicy", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/Parameter57", - "category": "Best Practice", - "startLine": 114, - "startColumn": 3, - "endLine": 114, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "propertyPath": "DeletionPolicy", + "category": "Structure", + "startLine": 44, + "startColumn": 5, + "endLine": 44, + "endColumn": 19, + "ruleDescription": "DeletionPolicy must be valid", + "phase": "SCHEMA" }, { - "ruleId": "W2001", + "ruleId": "W3011", "severity": "WARN", - "message": "Parameter 'Parameter58' is not referenced anywhere in the template", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter58", - "entityType": "Parameter" + "logicalId": "ConditionalInvalidDeletion", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/Parameter58", "category": "Best Practice", - "startLine": 116, + "startLine": 15, "startColumn": 3, - "endLine": 116, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "endLine": 15, + "endColumn": 29, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", "phase": "LINT" }, { - "ruleId": "W2001", + "ruleId": "W3011", "severity": "WARN", - "message": "Parameter 'Parameter59' is not referenced anywhere in the template", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter59", - "entityType": "Parameter" + "logicalId": "ConditionalInvalidUpdate", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/Parameter59", "category": "Best Practice", - "startLine": 118, + "startLine": 19, "startColumn": 3, - "endLine": 118, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "endLine": 19, + "endColumn": 27, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", "phase": "LINT" }, { - "ruleId": "W2001", + "ruleId": "W3011", "severity": "WARN", - "message": "Parameter 'Parameter60' is not referenced anywhere in the template", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter60", - "entityType": "Parameter" + "logicalId": "BothBranchesInvalid", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/Parameter60", "category": "Best Practice", - "startLine": 120, + "startLine": 23, "startColumn": 3, - "endLine": 120, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "endLine": 23, + "endColumn": 22, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", "phase": "LINT" }, { - "ruleId": "W2001", + "ruleId": "W3011", "severity": "WARN", - "message": "Parameter 'Parameter61' is not referenced anywhere in the template", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter61", - "entityType": "Parameter" + "logicalId": "DynamicObjectPolicy", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/Parameter61", "category": "Best Practice", - "startLine": 122, + "startLine": 42, "startColumn": 3, - "endLine": 122, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "endLine": 42, + "endColumn": 22, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter62' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ConditionalInvalidDeletion' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Parameter62", - "entityType": "Parameter" + "logicalId": "ConditionalInvalidDeletion", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/Parameter62", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 124, + "startLine": 15, "startColumn": 3, - "endLine": 124, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "endLine": 15, + "endColumn": 29, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter63' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ConditionalInvalidUpdate' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Parameter63", - "entityType": "Parameter" + "logicalId": "ConditionalInvalidUpdate", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/Parameter63", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 126, + "startLine": 19, "startColumn": 3, - "endLine": 126, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "endLine": 19, + "endColumn": 27, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter64' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BothBranchesInvalid' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Parameter64", - "entityType": "Parameter" + "logicalId": "BothBranchesInvalid", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/Parameter64", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 128, + "startLine": 23, "startColumn": 3, - "endLine": 128, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "endLine": 23, + "endColumn": 22, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter65' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DirectNoValuePolicies' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Parameter65", - "entityType": "Parameter" + "logicalId": "DirectNoValuePolicies", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/Parameter65", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 130, + "startLine": 27, "startColumn": 3, - "endLine": 130, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "endLine": 27, + "endColumn": 24, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter66' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ConditionalNoValuePolicies' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Parameter66", - "entityType": "Parameter" + "logicalId": "ConditionalNoValuePolicies", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/Parameter66", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 132, + "startLine": 37, "startColumn": 3, - "endLine": 132, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "endLine": 37, + "endColumn": 29, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter67' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DynamicObjectPolicy' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Parameter67", - "entityType": "Parameter" + "logicalId": "DynamicObjectPolicy", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/Parameter67", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 134, + "startLine": 42, "startColumn": 3, - "endLine": 134, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "endLine": 42, + "endColumn": 22, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/lifecycle_policy_shapes.yaml": { + "filePath": "bad/lifecycle_policy_shapes.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 11, + "counts": { + "fatal": 12, + "errors": 1, + "warnings": 1, + "informational": 5, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter68' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "F0018", + "severity": "FATAL", + "message": "UpdateReplacePolicy must be one of Delete, Retain, got a list", + "source": "SCHEMA", "entity": { - "logicalId": "Parameter68", - "entityType": "Parameter" + "logicalId": "ListPolicies", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/Parameter68", - "category": "Best Practice", - "startLine": 136, - "startColumn": 3, - "endLine": 136, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "propertyPath": "UpdateReplacePolicy", + "category": "Structure", + "startLine": 19, + "startColumn": 5, + "endLine": 19, + "endColumn": 24, + "ruleDescription": "UpdateReplacePolicy must be valid", + "phase": "SCHEMA" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter69' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "F0018", + "severity": "FATAL", + "message": "UpdateReplacePolicy must be one of Delete, Retain, got an object", + "source": "SCHEMA", "entity": { - "logicalId": "Parameter69", - "entityType": "Parameter" + "logicalId": "ObjectPolicies", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/Parameter69", - "category": "Best Practice", - "startLine": 138, - "startColumn": 3, - "endLine": 138, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "propertyPath": "UpdateReplacePolicy", + "category": "Structure", + "startLine": 25, + "startColumn": 5, + "endLine": 25, + "endColumn": 24, + "ruleDescription": "UpdateReplacePolicy must be valid", + "phase": "SCHEMA" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter70' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "F0018", + "severity": "FATAL", + "message": "UpdateReplacePolicy must be one of Delete, Retain, got null", + "source": "SCHEMA", "entity": { - "logicalId": "Parameter70", - "entityType": "Parameter" + "logicalId": "NoValuePoliciesWithoutTransform", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Parameters/Parameter70", - "category": "Best Practice", - "startLine": 140, - "startColumn": 3, - "endLine": 140, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "propertyPath": "UpdateReplacePolicy", + "category": "Structure", + "startLine": 65, + "startColumn": 5, + "endLine": 65, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "UpdateReplacePolicy must be valid", + "phase": "SCHEMA" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter71' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "F1101", + "severity": "FATAL", + "message": "Ref is not supported as a top-level CreationPolicy value; CreationPolicy must be an object or Fn::If returning an object", + "source": "SCHEMA", "entity": { - "logicalId": "Parameter71", - "entityType": "Parameter" + "logicalId": "CreationRootRef", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::WaitCondition" }, - "propertyPath": "Parameters/Parameter71", - "category": "Best Practice", - "startLine": 142, - "startColumn": 3, - "endLine": 142, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "propertyPath": "CreationPolicy", + "category": "Structure", + "startLine": 30, + "startColumn": 5, + "endLine": 30, + "endColumn": 19, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter72' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "F1101", + "severity": "FATAL", + "message": "Fn::FindInMap is not supported as a top-level CreationPolicy value; CreationPolicy must be an object or Fn::If returning an object", + "source": "SCHEMA", "entity": { - "logicalId": "Parameter72", - "entityType": "Parameter" + "logicalId": "CreationRootFindInMap", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::WaitCondition" }, - "propertyPath": "Parameters/Parameter72", - "category": "Best Practice", - "startLine": 144, - "startColumn": 3, - "endLine": 144, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "propertyPath": "CreationPolicy", + "category": "Structure", + "startLine": 34, + "startColumn": 5, + "endLine": 34, + "endColumn": 19, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" + }, + { + "ruleId": "F1101", + "severity": "FATAL", + "message": "Fn::Select is not supported as a top-level CreationPolicy value; CreationPolicy must be an object or Fn::If returning an object", + "source": "SCHEMA", + "entity": { + "logicalId": "CreationRootSelect", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::WaitCondition" + }, + "propertyPath": "CreationPolicy", + "category": "Structure", + "startLine": 38, + "startColumn": 5, + "endLine": 38, + "endColumn": 19, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" + }, + { + "ruleId": "F1101", + "severity": "FATAL", + "message": "Fn::Sub is not supported as a top-level CreationPolicy value; CreationPolicy must be an object or Fn::If returning an object", + "source": "SCHEMA", + "entity": { + "logicalId": "CreationRootSub", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::WaitCondition" + }, + "propertyPath": "CreationPolicy", + "category": "Structure", + "startLine": 45, + "startColumn": 5, + "endLine": 45, + "endColumn": 19, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" + }, + { + "ruleId": "F1101", + "severity": "FATAL", + "message": "Fn::If branch in CreationPolicy must be an object, got a string", + "source": "SCHEMA", + "entity": { + "logicalId": "CreationConditionalInvalid", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::WaitCondition" + }, + "propertyPath": "CreationPolicy.Fn::If.2", + "category": "Structure", + "startLine": 51, + "startColumn": 63, + "endLine": 51, + "endColumn": 64, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" + }, + { + "ruleId": "F1101", + "severity": "FATAL", + "message": "Ref is not supported as a top-level CreationPolicy value; CreationPolicy must be an object or Fn::If returning an object", + "source": "SCHEMA", + "entity": { + "logicalId": "CreationNoValueOnUnsupportedType", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "CreationPolicy", + "category": "Structure", + "startLine": 55, + "startColumn": 5, + "endLine": 55, + "endColumn": 19, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" + }, + { + "ruleId": "F3016", + "severity": "FATAL", + "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got a list", + "source": "SCHEMA", + "entity": { + "logicalId": "ListPolicies", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "DeletionPolicy", + "category": "Structure", + "startLine": 18, + "startColumn": 5, + "endLine": 18, + "endColumn": 19, + "ruleDescription": "DeletionPolicy must be valid", + "phase": "SCHEMA" + }, + { + "ruleId": "F3016", + "severity": "FATAL", + "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got an object", + "source": "SCHEMA", + "entity": { + "logicalId": "ObjectPolicies", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "DeletionPolicy", + "category": "Structure", + "startLine": 23, + "startColumn": 5, + "endLine": 23, + "endColumn": 19, + "ruleDescription": "DeletionPolicy must be valid", + "phase": "SCHEMA" + }, + { + "ruleId": "F3016", + "severity": "FATAL", + "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got null", + "source": "SCHEMA", + "entity": { + "logicalId": "NoValuePoliciesWithoutTransform", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "DeletionPolicy", + "category": "Structure", + "startLine": 64, + "startColumn": 5, + "endLine": 64, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "DeletionPolicy must be valid", + "phase": "SCHEMA" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter73' is not referenced anywhere in the template", + "ruleId": "E3055", + "severity": "ERROR", + "message": "CreationPolicy is not supported on resource type 'AWS::S3::Bucket'", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter73", - "entityType": "Parameter" + "logicalId": "CreationNoValueOnUnsupportedType", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/Parameter73", - "category": "Best Practice", - "startLine": 146, - "startColumn": 3, - "endLine": 146, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "propertyPath": "CreationPolicy", + "suggestedFix": "Remove CreationPolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::CloudFormation::WaitCondition, AWS::EC2::Instance", + "category": "Resource", + "startLine": 55, + "startColumn": 5, + "endLine": 55, + "endColumn": 19, + "ruleDescription": "Check CreationPolicy values for Resources", "phase": "LINT" }, { - "ruleId": "W2001", + "ruleId": "W8003", "severity": "WARN", - "message": "Parameter 'Parameter74' is not referenced anywhere in the template", + "message": "Fn::Equals in condition 'Never' will always return False", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter74", - "entityType": "Parameter" + "logicalId": "Never", + "entityType": "Condition" }, - "propertyPath": "Parameters/Parameter74", + "propertyPath": "Conditions/Never", "category": "Best Practice", - "startLine": 148, + "startLine": 13, "startColumn": 3, - "endLine": 148, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "endLine": 13, + "endColumn": 8, + "ruleDescription": "Fn::Equals will always return true or false", + "phase": "PARSE" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter75' is not referenced anywhere in the template", + "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": "Parameter75", - "entityType": "Parameter" + "logicalId": "NoValuePoliciesWithoutTransform", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Parameters/Parameter75", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 150, + "startLine": 62, "startColumn": 3, - "endLine": 150, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "endLine": 62, + "endColumn": 34, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter76' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ListPolicies' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Parameter76", - "entityType": "Parameter" + "logicalId": "ListPolicies", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/Parameter76", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 152, + "startLine": 16, "startColumn": 3, - "endLine": 152, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "endLine": 16, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter77' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ObjectPolicies' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Parameter77", - "entityType": "Parameter" + "logicalId": "ObjectPolicies", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/Parameter77", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 154, + "startLine": 21, "startColumn": 3, - "endLine": 154, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "endLine": 21, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter78' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CreationNoValueOnUnsupportedType' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Parameter78", - "entityType": "Parameter" + "logicalId": "CreationNoValueOnUnsupportedType", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/Parameter78", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 156, + "startLine": 53, "startColumn": 3, - "endLine": 156, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "endLine": 53, + "endColumn": 35, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter79' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'NoValuePoliciesWithoutTransform' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Parameter79", - "entityType": "Parameter" + "logicalId": "NoValuePoliciesWithoutTransform", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Parameters/Parameter79", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 158, + "startLine": 62, "startColumn": 3, - "endLine": 158, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", + "endLine": 62, + "endColumn": 34, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/limit_numbers.yaml": { + "filePath": "bad/limit_numbers.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 501, + "counts": { + "fatal": 5, + "errors": 0, + "warnings": 401, + "informational": 501, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter80' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "Parameter80", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/Parameter80", - "category": "Best Practice", - "startLine": 160, - "startColumn": 3, - "endLine": 160, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "ruleId": "F0003", + "severity": "FATAL", + "message": "Template has 201 parameters, maximum is 200", + "source": "SCHEMA", + "category": "Structure", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 11, + "ruleDescription": "Maximum 200 parameters", + "phase": "SCHEMA" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Parameter81' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "F0004", + "severity": "FATAL", + "message": "Template has 201 outputs, maximum is 200", + "source": "SCHEMA", + "category": "Structure", + "startLine": 1407, + "startColumn": 1, + "endLine": 1407, + "endColumn": 8, + "ruleDescription": "Maximum 200 outputs", + "phase": "SCHEMA" + }, + { + "ruleId": "F0007", + "severity": "FATAL", + "message": "Template has 501 resources, maximum is 500", + "source": "SCHEMA", + "category": "Structure", + "startLine": 404, + "startColumn": 1, + "endLine": 404, + "endColumn": 10, + "ruleDescription": "Maximum 500 resources", + "phase": "SCHEMA" + }, + { + "ruleId": "F0008", + "severity": "FATAL", + "message": "Template has 201 mappings, maximum is 200", + "source": "SCHEMA", + "category": "Structure", + "startLine": 1810, + "startColumn": 1, + "endLine": 1810, + "endColumn": 9, + "ruleDescription": "Maximum 200 mappings", + "phase": "SCHEMA" + }, + { + "ruleId": "F0050", + "severity": "FATAL", + "message": "Mapping 'Mapping201'.'Key' has 202 attributes, maximum is 200", + "source": "SCHEMA", "entity": { - "logicalId": "Parameter81", - "entityType": "Parameter" + "logicalId": "Mapping201", + "entityType": "Mapping" }, - "propertyPath": "Parameters/Parameter81", - "category": "Best Practice", - "startLine": 162, - "startColumn": 3, - "endLine": 162, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "propertyPath": "Mappings/Mapping201/Key", + "category": "Structure", + "startLine": 2412, + "startColumn": 5, + "endLine": 2412, + "endColumn": 8, + "ruleDescription": "Mapping must have valid 3-level structure", + "phase": "SCHEMA" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter82' is not referenced anywhere in the template", + "message": "Parameter 'Parameter2' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter82", + "logicalId": "Parameter2", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter82", + "propertyPath": "Parameters/Parameter2", "category": "Best Practice", - "startLine": 164, + "startLine": 4, "startColumn": 3, - "endLine": 164, - "endColumn": 14, + "endLine": 4, + "endColumn": 13, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter83' is not referenced anywhere in the template", + "message": "Parameter 'Parameter3' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter83", + "logicalId": "Parameter3", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter83", + "propertyPath": "Parameters/Parameter3", "category": "Best Practice", - "startLine": 166, + "startLine": 6, "startColumn": 3, - "endLine": 166, - "endColumn": 14, + "endLine": 6, + "endColumn": 13, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter84' is not referenced anywhere in the template", + "message": "Parameter 'Parameter4' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter84", + "logicalId": "Parameter4", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter84", + "propertyPath": "Parameters/Parameter4", "category": "Best Practice", - "startLine": 168, + "startLine": 8, "startColumn": 3, - "endLine": 168, - "endColumn": 14, + "endLine": 8, + "endColumn": 13, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter85' is not referenced anywhere in the template", + "message": "Parameter 'Parameter5' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter85", + "logicalId": "Parameter5", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter85", + "propertyPath": "Parameters/Parameter5", "category": "Best Practice", - "startLine": 170, + "startLine": 10, "startColumn": 3, - "endLine": 170, - "endColumn": 14, + "endLine": 10, + "endColumn": 13, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter86' is not referenced anywhere in the template", + "message": "Parameter 'Parameter6' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter86", + "logicalId": "Parameter6", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter86", + "propertyPath": "Parameters/Parameter6", "category": "Best Practice", - "startLine": 172, + "startLine": 12, "startColumn": 3, - "endLine": 172, - "endColumn": 14, + "endLine": 12, + "endColumn": 13, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter87' is not referenced anywhere in the template", + "message": "Parameter 'Parameter7' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter87", + "logicalId": "Parameter7", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter87", + "propertyPath": "Parameters/Parameter7", "category": "Best Practice", - "startLine": 174, + "startLine": 14, "startColumn": 3, - "endLine": 174, - "endColumn": 14, + "endLine": 14, + "endColumn": 13, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter88' is not referenced anywhere in the template", + "message": "Parameter 'Parameter8' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter88", + "logicalId": "Parameter8", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter88", + "propertyPath": "Parameters/Parameter8", "category": "Best Practice", - "startLine": 176, + "startLine": 16, "startColumn": 3, - "endLine": 176, - "endColumn": 14, + "endLine": 16, + "endColumn": 13, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter89' is not referenced anywhere in the template", + "message": "Parameter 'Parameter9' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter89", + "logicalId": "Parameter9", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter89", + "propertyPath": "Parameters/Parameter9", "category": "Best Practice", - "startLine": 178, + "startLine": 18, "startColumn": 3, - "endLine": 178, - "endColumn": 14, + "endLine": 18, + "endColumn": 13, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter90' is not referenced anywhere in the template", + "message": "Parameter 'Parameter10' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter90", + "logicalId": "Parameter10", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter90", + "propertyPath": "Parameters/Parameter10", "category": "Best Practice", - "startLine": 180, + "startLine": 20, "startColumn": 3, - "endLine": 180, + "endLine": 20, "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -10226,17 +10174,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter91' is not referenced anywhere in the template", + "message": "Parameter 'Parameter11' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter91", + "logicalId": "Parameter11", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter91", + "propertyPath": "Parameters/Parameter11", "category": "Best Practice", - "startLine": 182, + "startLine": 22, "startColumn": 3, - "endLine": 182, + "endLine": 22, "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -10244,17 +10192,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter92' is not referenced anywhere in the template", + "message": "Parameter 'Parameter12' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter92", + "logicalId": "Parameter12", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter92", + "propertyPath": "Parameters/Parameter12", "category": "Best Practice", - "startLine": 184, + "startLine": 24, "startColumn": 3, - "endLine": 184, + "endLine": 24, "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -10262,17 +10210,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter93' is not referenced anywhere in the template", + "message": "Parameter 'Parameter13' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter93", + "logicalId": "Parameter13", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter93", + "propertyPath": "Parameters/Parameter13", "category": "Best Practice", - "startLine": 186, + "startLine": 26, "startColumn": 3, - "endLine": 186, + "endLine": 26, "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -10280,17 +10228,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter94' is not referenced anywhere in the template", + "message": "Parameter 'Parameter14' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter94", + "logicalId": "Parameter14", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter94", + "propertyPath": "Parameters/Parameter14", "category": "Best Practice", - "startLine": 188, + "startLine": 28, "startColumn": 3, - "endLine": 188, + "endLine": 28, "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -10298,17 +10246,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter95' is not referenced anywhere in the template", + "message": "Parameter 'Parameter15' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter95", + "logicalId": "Parameter15", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter95", + "propertyPath": "Parameters/Parameter15", "category": "Best Practice", - "startLine": 190, + "startLine": 30, "startColumn": 3, - "endLine": 190, + "endLine": 30, "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -10316,17 +10264,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter96' is not referenced anywhere in the template", + "message": "Parameter 'Parameter16' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter96", + "logicalId": "Parameter16", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter96", + "propertyPath": "Parameters/Parameter16", "category": "Best Practice", - "startLine": 192, + "startLine": 32, "startColumn": 3, - "endLine": 192, + "endLine": 32, "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -10334,17 +10282,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter97' is not referenced anywhere in the template", + "message": "Parameter 'Parameter17' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter97", + "logicalId": "Parameter17", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter97", + "propertyPath": "Parameters/Parameter17", "category": "Best Practice", - "startLine": 194, + "startLine": 34, "startColumn": 3, - "endLine": 194, + "endLine": 34, "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -10352,17 +10300,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter98' is not referenced anywhere in the template", + "message": "Parameter 'Parameter18' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter98", + "logicalId": "Parameter18", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter98", + "propertyPath": "Parameters/Parameter18", "category": "Best Practice", - "startLine": 196, + "startLine": 36, "startColumn": 3, - "endLine": 196, + "endLine": 36, "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -10370,17 +10318,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter99' is not referenced anywhere in the template", + "message": "Parameter 'Parameter19' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter99", + "logicalId": "Parameter19", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter99", + "propertyPath": "Parameters/Parameter19", "category": "Best Practice", - "startLine": 198, + "startLine": 38, "startColumn": 3, - "endLine": 198, + "endLine": 38, "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -10388,1457 +10336,1457 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter100' is not referenced anywhere in the template", + "message": "Parameter 'Parameter20' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter100", + "logicalId": "Parameter20", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter100", + "propertyPath": "Parameters/Parameter20", "category": "Best Practice", - "startLine": 200, + "startLine": 40, "startColumn": 3, - "endLine": 200, - "endColumn": 15, + "endLine": 40, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter101' is not referenced anywhere in the template", + "message": "Parameter 'Parameter21' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter101", + "logicalId": "Parameter21", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter101", + "propertyPath": "Parameters/Parameter21", "category": "Best Practice", - "startLine": 202, + "startLine": 42, "startColumn": 3, - "endLine": 202, - "endColumn": 15, + "endLine": 42, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter102' is not referenced anywhere in the template", + "message": "Parameter 'Parameter22' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter102", + "logicalId": "Parameter22", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter102", + "propertyPath": "Parameters/Parameter22", "category": "Best Practice", - "startLine": 204, + "startLine": 44, "startColumn": 3, - "endLine": 204, - "endColumn": 15, + "endLine": 44, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter103' is not referenced anywhere in the template", + "message": "Parameter 'Parameter23' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter103", + "logicalId": "Parameter23", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter103", + "propertyPath": "Parameters/Parameter23", "category": "Best Practice", - "startLine": 206, + "startLine": 46, "startColumn": 3, - "endLine": 206, - "endColumn": 15, + "endLine": 46, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter104' is not referenced anywhere in the template", + "message": "Parameter 'Parameter24' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter104", + "logicalId": "Parameter24", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter104", + "propertyPath": "Parameters/Parameter24", "category": "Best Practice", - "startLine": 208, + "startLine": 48, "startColumn": 3, - "endLine": 208, - "endColumn": 15, + "endLine": 48, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter105' is not referenced anywhere in the template", + "message": "Parameter 'Parameter25' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter105", + "logicalId": "Parameter25", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter105", + "propertyPath": "Parameters/Parameter25", "category": "Best Practice", - "startLine": 210, + "startLine": 50, "startColumn": 3, - "endLine": 210, - "endColumn": 15, + "endLine": 50, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter106' is not referenced anywhere in the template", + "message": "Parameter 'Parameter26' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter106", + "logicalId": "Parameter26", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter106", + "propertyPath": "Parameters/Parameter26", "category": "Best Practice", - "startLine": 212, + "startLine": 52, "startColumn": 3, - "endLine": 212, - "endColumn": 15, + "endLine": 52, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter107' is not referenced anywhere in the template", + "message": "Parameter 'Parameter27' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter107", + "logicalId": "Parameter27", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter107", + "propertyPath": "Parameters/Parameter27", "category": "Best Practice", - "startLine": 214, + "startLine": 54, "startColumn": 3, - "endLine": 214, - "endColumn": 15, + "endLine": 54, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter108' is not referenced anywhere in the template", + "message": "Parameter 'Parameter28' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter108", + "logicalId": "Parameter28", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter108", + "propertyPath": "Parameters/Parameter28", "category": "Best Practice", - "startLine": 216, + "startLine": 56, "startColumn": 3, - "endLine": 216, - "endColumn": 15, + "endLine": 56, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter109' is not referenced anywhere in the template", + "message": "Parameter 'Parameter29' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter109", + "logicalId": "Parameter29", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter109", + "propertyPath": "Parameters/Parameter29", "category": "Best Practice", - "startLine": 218, + "startLine": 58, "startColumn": 3, - "endLine": 218, - "endColumn": 15, + "endLine": 58, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter110' is not referenced anywhere in the template", + "message": "Parameter 'Parameter30' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter110", + "logicalId": "Parameter30", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter110", + "propertyPath": "Parameters/Parameter30", "category": "Best Practice", - "startLine": 220, + "startLine": 60, "startColumn": 3, - "endLine": 220, - "endColumn": 15, + "endLine": 60, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter111' is not referenced anywhere in the template", + "message": "Parameter 'Parameter31' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter111", + "logicalId": "Parameter31", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter111", + "propertyPath": "Parameters/Parameter31", "category": "Best Practice", - "startLine": 222, + "startLine": 62, "startColumn": 3, - "endLine": 222, - "endColumn": 15, + "endLine": 62, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter112' is not referenced anywhere in the template", + "message": "Parameter 'Parameter32' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter112", + "logicalId": "Parameter32", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter112", + "propertyPath": "Parameters/Parameter32", "category": "Best Practice", - "startLine": 224, + "startLine": 64, "startColumn": 3, - "endLine": 224, - "endColumn": 15, + "endLine": 64, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter113' is not referenced anywhere in the template", + "message": "Parameter 'Parameter33' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter113", + "logicalId": "Parameter33", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter113", + "propertyPath": "Parameters/Parameter33", "category": "Best Practice", - "startLine": 226, + "startLine": 66, "startColumn": 3, - "endLine": 226, - "endColumn": 15, + "endLine": 66, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter114' is not referenced anywhere in the template", + "message": "Parameter 'Parameter34' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter114", + "logicalId": "Parameter34", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter114", + "propertyPath": "Parameters/Parameter34", "category": "Best Practice", - "startLine": 228, + "startLine": 68, "startColumn": 3, - "endLine": 228, - "endColumn": 15, + "endLine": 68, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter115' is not referenced anywhere in the template", + "message": "Parameter 'Parameter35' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter115", + "logicalId": "Parameter35", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter115", + "propertyPath": "Parameters/Parameter35", "category": "Best Practice", - "startLine": 230, + "startLine": 70, "startColumn": 3, - "endLine": 230, - "endColumn": 15, + "endLine": 70, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter116' is not referenced anywhere in the template", + "message": "Parameter 'Parameter36' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter116", + "logicalId": "Parameter36", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter116", + "propertyPath": "Parameters/Parameter36", "category": "Best Practice", - "startLine": 232, + "startLine": 72, "startColumn": 3, - "endLine": 232, - "endColumn": 15, + "endLine": 72, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter117' is not referenced anywhere in the template", + "message": "Parameter 'Parameter37' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter117", + "logicalId": "Parameter37", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter117", + "propertyPath": "Parameters/Parameter37", "category": "Best Practice", - "startLine": 234, + "startLine": 74, "startColumn": 3, - "endLine": 234, - "endColumn": 15, + "endLine": 74, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter118' is not referenced anywhere in the template", + "message": "Parameter 'Parameter38' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter118", + "logicalId": "Parameter38", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter118", + "propertyPath": "Parameters/Parameter38", "category": "Best Practice", - "startLine": 236, + "startLine": 76, "startColumn": 3, - "endLine": 236, - "endColumn": 15, + "endLine": 76, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter119' is not referenced anywhere in the template", + "message": "Parameter 'Parameter39' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter119", + "logicalId": "Parameter39", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter119", + "propertyPath": "Parameters/Parameter39", "category": "Best Practice", - "startLine": 238, + "startLine": 78, "startColumn": 3, - "endLine": 238, - "endColumn": 15, + "endLine": 78, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter120' is not referenced anywhere in the template", + "message": "Parameter 'Parameter40' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter120", + "logicalId": "Parameter40", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter120", + "propertyPath": "Parameters/Parameter40", "category": "Best Practice", - "startLine": 240, + "startLine": 80, "startColumn": 3, - "endLine": 240, - "endColumn": 15, + "endLine": 80, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter121' is not referenced anywhere in the template", + "message": "Parameter 'Parameter41' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter121", + "logicalId": "Parameter41", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter121", + "propertyPath": "Parameters/Parameter41", "category": "Best Practice", - "startLine": 242, + "startLine": 82, "startColumn": 3, - "endLine": 242, - "endColumn": 15, + "endLine": 82, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter122' is not referenced anywhere in the template", + "message": "Parameter 'Parameter42' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter122", + "logicalId": "Parameter42", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter122", + "propertyPath": "Parameters/Parameter42", "category": "Best Practice", - "startLine": 244, + "startLine": 84, "startColumn": 3, - "endLine": 244, - "endColumn": 15, + "endLine": 84, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter123' is not referenced anywhere in the template", + "message": "Parameter 'Parameter43' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter123", + "logicalId": "Parameter43", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter123", + "propertyPath": "Parameters/Parameter43", "category": "Best Practice", - "startLine": 246, + "startLine": 86, "startColumn": 3, - "endLine": 246, - "endColumn": 15, + "endLine": 86, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter124' is not referenced anywhere in the template", + "message": "Parameter 'Parameter44' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter124", + "logicalId": "Parameter44", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter124", + "propertyPath": "Parameters/Parameter44", "category": "Best Practice", - "startLine": 248, + "startLine": 88, "startColumn": 3, - "endLine": 248, - "endColumn": 15, + "endLine": 88, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter125' is not referenced anywhere in the template", + "message": "Parameter 'Parameter45' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter125", + "logicalId": "Parameter45", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter125", + "propertyPath": "Parameters/Parameter45", "category": "Best Practice", - "startLine": 250, + "startLine": 90, "startColumn": 3, - "endLine": 250, - "endColumn": 15, + "endLine": 90, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter126' is not referenced anywhere in the template", + "message": "Parameter 'Parameter46' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter126", + "logicalId": "Parameter46", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter126", + "propertyPath": "Parameters/Parameter46", "category": "Best Practice", - "startLine": 252, + "startLine": 92, "startColumn": 3, - "endLine": 252, - "endColumn": 15, + "endLine": 92, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter127' is not referenced anywhere in the template", + "message": "Parameter 'Parameter47' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter127", + "logicalId": "Parameter47", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter127", + "propertyPath": "Parameters/Parameter47", "category": "Best Practice", - "startLine": 254, + "startLine": 94, "startColumn": 3, - "endLine": 254, - "endColumn": 15, + "endLine": 94, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter128' is not referenced anywhere in the template", + "message": "Parameter 'Parameter48' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter128", + "logicalId": "Parameter48", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter128", + "propertyPath": "Parameters/Parameter48", "category": "Best Practice", - "startLine": 256, + "startLine": 96, "startColumn": 3, - "endLine": 256, - "endColumn": 15, + "endLine": 96, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter129' is not referenced anywhere in the template", + "message": "Parameter 'Parameter49' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter129", + "logicalId": "Parameter49", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter129", + "propertyPath": "Parameters/Parameter49", "category": "Best Practice", - "startLine": 258, + "startLine": 98, "startColumn": 3, - "endLine": 258, - "endColumn": 15, + "endLine": 98, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter130' is not referenced anywhere in the template", + "message": "Parameter 'Parameter50' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter130", + "logicalId": "Parameter50", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter130", + "propertyPath": "Parameters/Parameter50", "category": "Best Practice", - "startLine": 260, + "startLine": 100, "startColumn": 3, - "endLine": 260, - "endColumn": 15, + "endLine": 100, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter131' is not referenced anywhere in the template", + "message": "Parameter 'Parameter51' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter131", + "logicalId": "Parameter51", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter131", + "propertyPath": "Parameters/Parameter51", "category": "Best Practice", - "startLine": 262, + "startLine": 102, "startColumn": 3, - "endLine": 262, - "endColumn": 15, + "endLine": 102, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter132' is not referenced anywhere in the template", + "message": "Parameter 'Parameter52' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter132", + "logicalId": "Parameter52", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter132", + "propertyPath": "Parameters/Parameter52", "category": "Best Practice", - "startLine": 264, + "startLine": 104, "startColumn": 3, - "endLine": 264, - "endColumn": 15, + "endLine": 104, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter133' is not referenced anywhere in the template", + "message": "Parameter 'Parameter53' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter133", + "logicalId": "Parameter53", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter133", + "propertyPath": "Parameters/Parameter53", "category": "Best Practice", - "startLine": 266, + "startLine": 106, "startColumn": 3, - "endLine": 266, - "endColumn": 15, + "endLine": 106, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter134' is not referenced anywhere in the template", + "message": "Parameter 'Parameter54' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter134", + "logicalId": "Parameter54", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter134", + "propertyPath": "Parameters/Parameter54", "category": "Best Practice", - "startLine": 268, + "startLine": 108, "startColumn": 3, - "endLine": 268, - "endColumn": 15, + "endLine": 108, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter135' is not referenced anywhere in the template", + "message": "Parameter 'Parameter55' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter135", + "logicalId": "Parameter55", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter135", + "propertyPath": "Parameters/Parameter55", "category": "Best Practice", - "startLine": 270, + "startLine": 110, "startColumn": 3, - "endLine": 270, - "endColumn": 15, + "endLine": 110, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter136' is not referenced anywhere in the template", + "message": "Parameter 'Parameter56' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter136", + "logicalId": "Parameter56", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter136", + "propertyPath": "Parameters/Parameter56", "category": "Best Practice", - "startLine": 272, + "startLine": 112, "startColumn": 3, - "endLine": 272, - "endColumn": 15, + "endLine": 112, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter137' is not referenced anywhere in the template", + "message": "Parameter 'Parameter57' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter137", + "logicalId": "Parameter57", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter137", + "propertyPath": "Parameters/Parameter57", "category": "Best Practice", - "startLine": 274, + "startLine": 114, "startColumn": 3, - "endLine": 274, - "endColumn": 15, + "endLine": 114, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter138' is not referenced anywhere in the template", + "message": "Parameter 'Parameter58' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter138", + "logicalId": "Parameter58", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter138", + "propertyPath": "Parameters/Parameter58", "category": "Best Practice", - "startLine": 276, + "startLine": 116, "startColumn": 3, - "endLine": 276, - "endColumn": 15, + "endLine": 116, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter139' is not referenced anywhere in the template", + "message": "Parameter 'Parameter59' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter139", + "logicalId": "Parameter59", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter139", + "propertyPath": "Parameters/Parameter59", "category": "Best Practice", - "startLine": 278, + "startLine": 118, "startColumn": 3, - "endLine": 278, - "endColumn": 15, + "endLine": 118, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter140' is not referenced anywhere in the template", + "message": "Parameter 'Parameter60' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter140", + "logicalId": "Parameter60", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter140", + "propertyPath": "Parameters/Parameter60", "category": "Best Practice", - "startLine": 280, + "startLine": 120, "startColumn": 3, - "endLine": 280, - "endColumn": 15, + "endLine": 120, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter141' is not referenced anywhere in the template", + "message": "Parameter 'Parameter61' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter141", + "logicalId": "Parameter61", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter141", + "propertyPath": "Parameters/Parameter61", "category": "Best Practice", - "startLine": 282, + "startLine": 122, "startColumn": 3, - "endLine": 282, - "endColumn": 15, + "endLine": 122, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter142' is not referenced anywhere in the template", + "message": "Parameter 'Parameter62' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter142", + "logicalId": "Parameter62", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter142", + "propertyPath": "Parameters/Parameter62", "category": "Best Practice", - "startLine": 284, + "startLine": 124, "startColumn": 3, - "endLine": 284, - "endColumn": 15, + "endLine": 124, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter143' is not referenced anywhere in the template", + "message": "Parameter 'Parameter63' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter143", + "logicalId": "Parameter63", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter143", + "propertyPath": "Parameters/Parameter63", "category": "Best Practice", - "startLine": 286, + "startLine": 126, "startColumn": 3, - "endLine": 286, - "endColumn": 15, + "endLine": 126, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter144' is not referenced anywhere in the template", + "message": "Parameter 'Parameter64' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter144", + "logicalId": "Parameter64", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter144", + "propertyPath": "Parameters/Parameter64", "category": "Best Practice", - "startLine": 288, + "startLine": 128, "startColumn": 3, - "endLine": 288, - "endColumn": 15, + "endLine": 128, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter145' is not referenced anywhere in the template", + "message": "Parameter 'Parameter65' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter145", + "logicalId": "Parameter65", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter145", + "propertyPath": "Parameters/Parameter65", "category": "Best Practice", - "startLine": 290, + "startLine": 130, "startColumn": 3, - "endLine": 290, - "endColumn": 15, + "endLine": 130, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter146' is not referenced anywhere in the template", + "message": "Parameter 'Parameter66' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter146", + "logicalId": "Parameter66", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter146", + "propertyPath": "Parameters/Parameter66", "category": "Best Practice", - "startLine": 292, + "startLine": 132, "startColumn": 3, - "endLine": 292, - "endColumn": 15, + "endLine": 132, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter147' is not referenced anywhere in the template", + "message": "Parameter 'Parameter67' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter147", + "logicalId": "Parameter67", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter147", + "propertyPath": "Parameters/Parameter67", "category": "Best Practice", - "startLine": 294, + "startLine": 134, "startColumn": 3, - "endLine": 294, - "endColumn": 15, + "endLine": 134, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter148' is not referenced anywhere in the template", + "message": "Parameter 'Parameter68' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter148", + "logicalId": "Parameter68", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter148", + "propertyPath": "Parameters/Parameter68", "category": "Best Practice", - "startLine": 296, + "startLine": 136, "startColumn": 3, - "endLine": 296, - "endColumn": 15, + "endLine": 136, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter149' is not referenced anywhere in the template", + "message": "Parameter 'Parameter69' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter149", + "logicalId": "Parameter69", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter149", + "propertyPath": "Parameters/Parameter69", "category": "Best Practice", - "startLine": 298, + "startLine": 138, "startColumn": 3, - "endLine": 298, - "endColumn": 15, + "endLine": 138, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter150' is not referenced anywhere in the template", + "message": "Parameter 'Parameter70' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter150", + "logicalId": "Parameter70", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter150", + "propertyPath": "Parameters/Parameter70", "category": "Best Practice", - "startLine": 300, + "startLine": 140, "startColumn": 3, - "endLine": 300, - "endColumn": 15, + "endLine": 140, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter151' is not referenced anywhere in the template", + "message": "Parameter 'Parameter71' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter151", + "logicalId": "Parameter71", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter151", + "propertyPath": "Parameters/Parameter71", "category": "Best Practice", - "startLine": 302, + "startLine": 142, "startColumn": 3, - "endLine": 302, - "endColumn": 15, + "endLine": 142, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter152' is not referenced anywhere in the template", + "message": "Parameter 'Parameter72' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter152", + "logicalId": "Parameter72", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter152", + "propertyPath": "Parameters/Parameter72", "category": "Best Practice", - "startLine": 304, + "startLine": 144, "startColumn": 3, - "endLine": 304, - "endColumn": 15, + "endLine": 144, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter153' is not referenced anywhere in the template", + "message": "Parameter 'Parameter73' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter153", + "logicalId": "Parameter73", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter153", + "propertyPath": "Parameters/Parameter73", "category": "Best Practice", - "startLine": 306, + "startLine": 146, "startColumn": 3, - "endLine": 306, - "endColumn": 15, + "endLine": 146, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter154' is not referenced anywhere in the template", + "message": "Parameter 'Parameter74' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter154", + "logicalId": "Parameter74", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter154", + "propertyPath": "Parameters/Parameter74", "category": "Best Practice", - "startLine": 308, + "startLine": 148, "startColumn": 3, - "endLine": 308, - "endColumn": 15, + "endLine": 148, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter155' is not referenced anywhere in the template", + "message": "Parameter 'Parameter75' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter155", + "logicalId": "Parameter75", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter155", + "propertyPath": "Parameters/Parameter75", "category": "Best Practice", - "startLine": 310, + "startLine": 150, "startColumn": 3, - "endLine": 310, - "endColumn": 15, + "endLine": 150, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter156' is not referenced anywhere in the template", + "message": "Parameter 'Parameter76' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter156", + "logicalId": "Parameter76", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter156", + "propertyPath": "Parameters/Parameter76", "category": "Best Practice", - "startLine": 312, + "startLine": 152, "startColumn": 3, - "endLine": 312, - "endColumn": 15, + "endLine": 152, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter157' is not referenced anywhere in the template", + "message": "Parameter 'Parameter77' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter157", + "logicalId": "Parameter77", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter157", + "propertyPath": "Parameters/Parameter77", "category": "Best Practice", - "startLine": 314, + "startLine": 154, "startColumn": 3, - "endLine": 314, - "endColumn": 15, + "endLine": 154, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter158' is not referenced anywhere in the template", + "message": "Parameter 'Parameter78' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter158", + "logicalId": "Parameter78", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter158", + "propertyPath": "Parameters/Parameter78", "category": "Best Practice", - "startLine": 316, + "startLine": 156, "startColumn": 3, - "endLine": 316, - "endColumn": 15, + "endLine": 156, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter159' is not referenced anywhere in the template", + "message": "Parameter 'Parameter79' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter159", + "logicalId": "Parameter79", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter159", + "propertyPath": "Parameters/Parameter79", "category": "Best Practice", - "startLine": 318, + "startLine": 158, "startColumn": 3, - "endLine": 318, - "endColumn": 15, + "endLine": 158, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter160' is not referenced anywhere in the template", + "message": "Parameter 'Parameter80' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter160", + "logicalId": "Parameter80", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter160", + "propertyPath": "Parameters/Parameter80", "category": "Best Practice", - "startLine": 320, + "startLine": 160, "startColumn": 3, - "endLine": 320, - "endColumn": 15, + "endLine": 160, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter161' is not referenced anywhere in the template", + "message": "Parameter 'Parameter81' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter161", + "logicalId": "Parameter81", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter161", + "propertyPath": "Parameters/Parameter81", "category": "Best Practice", - "startLine": 322, + "startLine": 162, "startColumn": 3, - "endLine": 322, - "endColumn": 15, + "endLine": 162, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter162' is not referenced anywhere in the template", + "message": "Parameter 'Parameter82' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter162", + "logicalId": "Parameter82", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter162", + "propertyPath": "Parameters/Parameter82", "category": "Best Practice", - "startLine": 324, + "startLine": 164, "startColumn": 3, - "endLine": 324, - "endColumn": 15, + "endLine": 164, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter163' is not referenced anywhere in the template", + "message": "Parameter 'Parameter83' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter163", + "logicalId": "Parameter83", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter163", + "propertyPath": "Parameters/Parameter83", "category": "Best Practice", - "startLine": 326, + "startLine": 166, "startColumn": 3, - "endLine": 326, - "endColumn": 15, + "endLine": 166, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter164' is not referenced anywhere in the template", + "message": "Parameter 'Parameter84' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter164", + "logicalId": "Parameter84", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter164", + "propertyPath": "Parameters/Parameter84", "category": "Best Practice", - "startLine": 328, + "startLine": 168, "startColumn": 3, - "endLine": 328, - "endColumn": 15, + "endLine": 168, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter165' is not referenced anywhere in the template", + "message": "Parameter 'Parameter85' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter165", + "logicalId": "Parameter85", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter165", + "propertyPath": "Parameters/Parameter85", "category": "Best Practice", - "startLine": 330, + "startLine": 170, "startColumn": 3, - "endLine": 330, - "endColumn": 15, + "endLine": 170, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter166' is not referenced anywhere in the template", + "message": "Parameter 'Parameter86' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter166", + "logicalId": "Parameter86", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter166", + "propertyPath": "Parameters/Parameter86", "category": "Best Practice", - "startLine": 332, + "startLine": 172, "startColumn": 3, - "endLine": 332, - "endColumn": 15, + "endLine": 172, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter167' is not referenced anywhere in the template", + "message": "Parameter 'Parameter87' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter167", + "logicalId": "Parameter87", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter167", + "propertyPath": "Parameters/Parameter87", "category": "Best Practice", - "startLine": 334, + "startLine": 174, "startColumn": 3, - "endLine": 334, - "endColumn": 15, + "endLine": 174, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter168' is not referenced anywhere in the template", + "message": "Parameter 'Parameter88' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter168", + "logicalId": "Parameter88", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter168", + "propertyPath": "Parameters/Parameter88", "category": "Best Practice", - "startLine": 336, + "startLine": 176, "startColumn": 3, - "endLine": 336, - "endColumn": 15, + "endLine": 176, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter169' is not referenced anywhere in the template", + "message": "Parameter 'Parameter89' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter169", + "logicalId": "Parameter89", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter169", + "propertyPath": "Parameters/Parameter89", "category": "Best Practice", - "startLine": 338, + "startLine": 178, "startColumn": 3, - "endLine": 338, - "endColumn": 15, + "endLine": 178, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter170' is not referenced anywhere in the template", + "message": "Parameter 'Parameter90' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter170", + "logicalId": "Parameter90", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter170", + "propertyPath": "Parameters/Parameter90", "category": "Best Practice", - "startLine": 340, + "startLine": 180, "startColumn": 3, - "endLine": 340, - "endColumn": 15, + "endLine": 180, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter171' is not referenced anywhere in the template", + "message": "Parameter 'Parameter91' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter171", + "logicalId": "Parameter91", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter171", + "propertyPath": "Parameters/Parameter91", "category": "Best Practice", - "startLine": 342, + "startLine": 182, "startColumn": 3, - "endLine": 342, - "endColumn": 15, + "endLine": 182, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter172' is not referenced anywhere in the template", + "message": "Parameter 'Parameter92' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter172", + "logicalId": "Parameter92", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter172", + "propertyPath": "Parameters/Parameter92", "category": "Best Practice", - "startLine": 344, + "startLine": 184, "startColumn": 3, - "endLine": 344, - "endColumn": 15, + "endLine": 184, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter173' is not referenced anywhere in the template", + "message": "Parameter 'Parameter93' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter173", + "logicalId": "Parameter93", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter173", + "propertyPath": "Parameters/Parameter93", "category": "Best Practice", - "startLine": 346, + "startLine": 186, "startColumn": 3, - "endLine": 346, - "endColumn": 15, + "endLine": 186, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter174' is not referenced anywhere in the template", + "message": "Parameter 'Parameter94' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter174", + "logicalId": "Parameter94", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter174", + "propertyPath": "Parameters/Parameter94", "category": "Best Practice", - "startLine": 348, + "startLine": 188, "startColumn": 3, - "endLine": 348, - "endColumn": 15, + "endLine": 188, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter175' is not referenced anywhere in the template", + "message": "Parameter 'Parameter95' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter175", + "logicalId": "Parameter95", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter175", + "propertyPath": "Parameters/Parameter95", "category": "Best Practice", - "startLine": 350, + "startLine": 190, "startColumn": 3, - "endLine": 350, - "endColumn": 15, + "endLine": 190, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter176' is not referenced anywhere in the template", + "message": "Parameter 'Parameter96' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter176", + "logicalId": "Parameter96", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter176", + "propertyPath": "Parameters/Parameter96", "category": "Best Practice", - "startLine": 352, + "startLine": 192, "startColumn": 3, - "endLine": 352, - "endColumn": 15, + "endLine": 192, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter177' is not referenced anywhere in the template", + "message": "Parameter 'Parameter97' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter177", + "logicalId": "Parameter97", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter177", + "propertyPath": "Parameters/Parameter97", "category": "Best Practice", - "startLine": 354, + "startLine": 194, "startColumn": 3, - "endLine": 354, - "endColumn": 15, + "endLine": 194, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter178' is not referenced anywhere in the template", + "message": "Parameter 'Parameter98' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter178", + "logicalId": "Parameter98", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter178", + "propertyPath": "Parameters/Parameter98", "category": "Best Practice", - "startLine": 356, + "startLine": 196, "startColumn": 3, - "endLine": 356, - "endColumn": 15, + "endLine": 196, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter179' is not referenced anywhere in the template", + "message": "Parameter 'Parameter99' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter179", + "logicalId": "Parameter99", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter179", + "propertyPath": "Parameters/Parameter99", "category": "Best Practice", - "startLine": 358, + "startLine": 198, "startColumn": 3, - "endLine": 358, - "endColumn": 15, + "endLine": 198, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter180' is not referenced anywhere in the template", + "message": "Parameter 'Parameter100' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter180", + "logicalId": "Parameter100", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter180", + "propertyPath": "Parameters/Parameter100", "category": "Best Practice", - "startLine": 360, + "startLine": 200, "startColumn": 3, - "endLine": 360, + "endLine": 200, "endColumn": 15, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -11846,17 +11794,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter181' is not referenced anywhere in the template", + "message": "Parameter 'Parameter101' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter181", + "logicalId": "Parameter101", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter181", + "propertyPath": "Parameters/Parameter101", "category": "Best Practice", - "startLine": 362, + "startLine": 202, "startColumn": 3, - "endLine": 362, + "endLine": 202, "endColumn": 15, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -11864,17 +11812,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter182' is not referenced anywhere in the template", + "message": "Parameter 'Parameter102' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter182", + "logicalId": "Parameter102", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter182", + "propertyPath": "Parameters/Parameter102", "category": "Best Practice", - "startLine": 364, + "startLine": 204, "startColumn": 3, - "endLine": 364, + "endLine": 204, "endColumn": 15, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -11882,17 +11830,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter183' is not referenced anywhere in the template", + "message": "Parameter 'Parameter103' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter183", + "logicalId": "Parameter103", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter183", + "propertyPath": "Parameters/Parameter103", "category": "Best Practice", - "startLine": 366, + "startLine": 206, "startColumn": 3, - "endLine": 366, + "endLine": 206, "endColumn": 15, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -11900,17 +11848,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter184' is not referenced anywhere in the template", + "message": "Parameter 'Parameter104' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter184", + "logicalId": "Parameter104", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter184", + "propertyPath": "Parameters/Parameter104", "category": "Best Practice", - "startLine": 368, + "startLine": 208, "startColumn": 3, - "endLine": 368, + "endLine": 208, "endColumn": 15, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -11918,17 +11866,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter185' is not referenced anywhere in the template", + "message": "Parameter 'Parameter105' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter185", + "logicalId": "Parameter105", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter185", + "propertyPath": "Parameters/Parameter105", "category": "Best Practice", - "startLine": 370, + "startLine": 210, "startColumn": 3, - "endLine": 370, + "endLine": 210, "endColumn": 15, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -11936,17 +11884,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter186' is not referenced anywhere in the template", + "message": "Parameter 'Parameter106' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter186", + "logicalId": "Parameter106", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter186", + "propertyPath": "Parameters/Parameter106", "category": "Best Practice", - "startLine": 372, + "startLine": 212, "startColumn": 3, - "endLine": 372, + "endLine": 212, "endColumn": 15, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -11954,17 +11902,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter187' is not referenced anywhere in the template", + "message": "Parameter 'Parameter107' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter187", + "logicalId": "Parameter107", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter187", + "propertyPath": "Parameters/Parameter107", "category": "Best Practice", - "startLine": 374, + "startLine": 214, "startColumn": 3, - "endLine": 374, + "endLine": 214, "endColumn": 15, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -11972,17 +11920,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter188' is not referenced anywhere in the template", + "message": "Parameter 'Parameter108' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter188", + "logicalId": "Parameter108", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter188", + "propertyPath": "Parameters/Parameter108", "category": "Best Practice", - "startLine": 376, + "startLine": 216, "startColumn": 3, - "endLine": 376, + "endLine": 216, "endColumn": 15, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -11990,17 +11938,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter189' is not referenced anywhere in the template", + "message": "Parameter 'Parameter109' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter189", + "logicalId": "Parameter109", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter189", + "propertyPath": "Parameters/Parameter109", "category": "Best Practice", - "startLine": 378, + "startLine": 218, "startColumn": 3, - "endLine": 378, + "endLine": 218, "endColumn": 15, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -12008,17 +11956,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter190' is not referenced anywhere in the template", + "message": "Parameter 'Parameter110' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter190", + "logicalId": "Parameter110", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter190", + "propertyPath": "Parameters/Parameter110", "category": "Best Practice", - "startLine": 380, + "startLine": 220, "startColumn": 3, - "endLine": 380, + "endLine": 220, "endColumn": 15, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -12026,17 +11974,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter191' is not referenced anywhere in the template", + "message": "Parameter 'Parameter111' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter191", + "logicalId": "Parameter111", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter191", + "propertyPath": "Parameters/Parameter111", "category": "Best Practice", - "startLine": 382, + "startLine": 222, "startColumn": 3, - "endLine": 382, + "endLine": 222, "endColumn": 15, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -12044,17 +11992,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter192' is not referenced anywhere in the template", + "message": "Parameter 'Parameter112' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter192", + "logicalId": "Parameter112", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter192", + "propertyPath": "Parameters/Parameter112", "category": "Best Practice", - "startLine": 384, + "startLine": 224, "startColumn": 3, - "endLine": 384, + "endLine": 224, "endColumn": 15, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -12062,17 +12010,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter193' is not referenced anywhere in the template", + "message": "Parameter 'Parameter113' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter193", + "logicalId": "Parameter113", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter193", + "propertyPath": "Parameters/Parameter113", "category": "Best Practice", - "startLine": 386, + "startLine": 226, "startColumn": 3, - "endLine": 386, + "endLine": 226, "endColumn": 15, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -12080,17 +12028,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter194' is not referenced anywhere in the template", + "message": "Parameter 'Parameter114' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter194", + "logicalId": "Parameter114", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter194", + "propertyPath": "Parameters/Parameter114", "category": "Best Practice", - "startLine": 388, + "startLine": 228, "startColumn": 3, - "endLine": 388, + "endLine": 228, "endColumn": 15, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -12098,17 +12046,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter195' is not referenced anywhere in the template", + "message": "Parameter 'Parameter115' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter195", + "logicalId": "Parameter115", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter195", + "propertyPath": "Parameters/Parameter115", "category": "Best Practice", - "startLine": 390, + "startLine": 230, "startColumn": 3, - "endLine": 390, + "endLine": 230, "endColumn": 15, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -12116,17 +12064,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter196' is not referenced anywhere in the template", + "message": "Parameter 'Parameter116' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter196", + "logicalId": "Parameter116", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter196", + "propertyPath": "Parameters/Parameter116", "category": "Best Practice", - "startLine": 392, + "startLine": 232, "startColumn": 3, - "endLine": 392, + "endLine": 232, "endColumn": 15, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -12134,17 +12082,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter197' is not referenced anywhere in the template", + "message": "Parameter 'Parameter117' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter197", + "logicalId": "Parameter117", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter197", + "propertyPath": "Parameters/Parameter117", "category": "Best Practice", - "startLine": 394, + "startLine": 234, "startColumn": 3, - "endLine": 394, + "endLine": 234, "endColumn": 15, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -12152,17 +12100,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter198' is not referenced anywhere in the template", + "message": "Parameter 'Parameter118' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter198", + "logicalId": "Parameter118", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter198", + "propertyPath": "Parameters/Parameter118", "category": "Best Practice", - "startLine": 396, + "startLine": 236, "startColumn": 3, - "endLine": 396, + "endLine": 236, "endColumn": 15, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -12170,17 +12118,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter199' is not referenced anywhere in the template", + "message": "Parameter 'Parameter119' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter199", + "logicalId": "Parameter119", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter199", + "propertyPath": "Parameters/Parameter119", "category": "Best Practice", - "startLine": 398, + "startLine": 238, "startColumn": 3, - "endLine": 398, + "endLine": 238, "endColumn": 15, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -12188,17 +12136,17 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter200' is not referenced anywhere in the template", + "message": "Parameter 'Parameter120' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter200", + "logicalId": "Parameter120", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter200", + "propertyPath": "Parameters/Parameter120", "category": "Best Practice", - "startLine": 400, + "startLine": 240, "startColumn": 3, - "endLine": 400, + "endLine": 240, "endColumn": 15, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" @@ -12206,1637 +12154,1637 @@ { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Parameter201' is not referenced anywhere in the template", + "message": "Parameter 'Parameter121' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Parameter201", + "logicalId": "Parameter121", "entityType": "Parameter" }, - "propertyPath": "Parameters/Parameter201", + "propertyPath": "Parameters/Parameter121", "category": "Best Practice", - "startLine": 402, + "startLine": 242, "startColumn": 3, - "endLine": 402, + "endLine": 242, "endColumn": 15, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping1' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter122' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping1", - "entityType": "Mapping" + "logicalId": "Parameter122", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping1", + "propertyPath": "Parameters/Parameter122", "category": "Best Practice", - "startLine": 1811, + "startLine": 244, "startColumn": 3, - "endLine": 1811, - "endColumn": 11, - "ruleDescription": "Check if Mappings are Used", + "endLine": 244, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping2' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter123' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping2", - "entityType": "Mapping" + "logicalId": "Parameter123", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping2", + "propertyPath": "Parameters/Parameter123", "category": "Best Practice", - "startLine": 1814, + "startLine": 246, "startColumn": 3, - "endLine": 1814, - "endColumn": 11, - "ruleDescription": "Check if Mappings are Used", + "endLine": 246, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping3' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter124' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping3", - "entityType": "Mapping" + "logicalId": "Parameter124", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping3", + "propertyPath": "Parameters/Parameter124", "category": "Best Practice", - "startLine": 1817, + "startLine": 248, "startColumn": 3, - "endLine": 1817, - "endColumn": 11, - "ruleDescription": "Check if Mappings are Used", + "endLine": 248, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping4' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter125' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping4", - "entityType": "Mapping" + "logicalId": "Parameter125", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping4", + "propertyPath": "Parameters/Parameter125", "category": "Best Practice", - "startLine": 1820, + "startLine": 250, "startColumn": 3, - "endLine": 1820, - "endColumn": 11, - "ruleDescription": "Check if Mappings are Used", + "endLine": 250, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping5' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter126' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping5", - "entityType": "Mapping" + "logicalId": "Parameter126", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping5", + "propertyPath": "Parameters/Parameter126", "category": "Best Practice", - "startLine": 1823, + "startLine": 252, "startColumn": 3, - "endLine": 1823, - "endColumn": 11, - "ruleDescription": "Check if Mappings are Used", + "endLine": 252, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping6' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter127' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping6", - "entityType": "Mapping" + "logicalId": "Parameter127", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping6", + "propertyPath": "Parameters/Parameter127", "category": "Best Practice", - "startLine": 1826, + "startLine": 254, "startColumn": 3, - "endLine": 1826, - "endColumn": 11, - "ruleDescription": "Check if Mappings are Used", + "endLine": 254, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping7' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter128' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping7", - "entityType": "Mapping" + "logicalId": "Parameter128", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping7", + "propertyPath": "Parameters/Parameter128", "category": "Best Practice", - "startLine": 1829, + "startLine": 256, "startColumn": 3, - "endLine": 1829, - "endColumn": 11, - "ruleDescription": "Check if Mappings are Used", + "endLine": 256, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping8' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter129' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping8", - "entityType": "Mapping" + "logicalId": "Parameter129", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping8", + "propertyPath": "Parameters/Parameter129", "category": "Best Practice", - "startLine": 1832, + "startLine": 258, "startColumn": 3, - "endLine": 1832, - "endColumn": 11, - "ruleDescription": "Check if Mappings are Used", + "endLine": 258, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping9' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter130' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping9", - "entityType": "Mapping" + "logicalId": "Parameter130", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping9", + "propertyPath": "Parameters/Parameter130", "category": "Best Practice", - "startLine": 1835, + "startLine": 260, "startColumn": 3, - "endLine": 1835, - "endColumn": 11, - "ruleDescription": "Check if Mappings are Used", + "endLine": 260, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping10' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter131' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping10", - "entityType": "Mapping" + "logicalId": "Parameter131", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping10", + "propertyPath": "Parameters/Parameter131", "category": "Best Practice", - "startLine": 1838, + "startLine": 262, "startColumn": 3, - "endLine": 1838, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 262, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping11' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter132' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping11", - "entityType": "Mapping" + "logicalId": "Parameter132", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping11", + "propertyPath": "Parameters/Parameter132", "category": "Best Practice", - "startLine": 1841, + "startLine": 264, "startColumn": 3, - "endLine": 1841, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 264, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping12' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter133' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping12", - "entityType": "Mapping" + "logicalId": "Parameter133", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping12", + "propertyPath": "Parameters/Parameter133", "category": "Best Practice", - "startLine": 1844, + "startLine": 266, "startColumn": 3, - "endLine": 1844, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 266, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping13' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter134' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping13", - "entityType": "Mapping" + "logicalId": "Parameter134", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping13", + "propertyPath": "Parameters/Parameter134", "category": "Best Practice", - "startLine": 1847, + "startLine": 268, "startColumn": 3, - "endLine": 1847, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 268, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping14' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter135' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping14", - "entityType": "Mapping" + "logicalId": "Parameter135", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping14", + "propertyPath": "Parameters/Parameter135", "category": "Best Practice", - "startLine": 1850, + "startLine": 270, "startColumn": 3, - "endLine": 1850, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 270, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping15' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter136' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping15", - "entityType": "Mapping" + "logicalId": "Parameter136", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping15", + "propertyPath": "Parameters/Parameter136", "category": "Best Practice", - "startLine": 1853, + "startLine": 272, "startColumn": 3, - "endLine": 1853, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 272, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping16' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter137' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping16", - "entityType": "Mapping" + "logicalId": "Parameter137", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping16", + "propertyPath": "Parameters/Parameter137", "category": "Best Practice", - "startLine": 1856, + "startLine": 274, "startColumn": 3, - "endLine": 1856, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 274, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping17' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter138' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping17", - "entityType": "Mapping" + "logicalId": "Parameter138", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping17", + "propertyPath": "Parameters/Parameter138", "category": "Best Practice", - "startLine": 1859, + "startLine": 276, "startColumn": 3, - "endLine": 1859, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 276, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping18' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter139' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping18", - "entityType": "Mapping" + "logicalId": "Parameter139", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping18", + "propertyPath": "Parameters/Parameter139", "category": "Best Practice", - "startLine": 1862, + "startLine": 278, "startColumn": 3, - "endLine": 1862, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 278, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping19' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter140' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping19", - "entityType": "Mapping" + "logicalId": "Parameter140", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping19", + "propertyPath": "Parameters/Parameter140", "category": "Best Practice", - "startLine": 1865, + "startLine": 280, "startColumn": 3, - "endLine": 1865, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 280, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping20' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter141' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping20", - "entityType": "Mapping" + "logicalId": "Parameter141", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping20", + "propertyPath": "Parameters/Parameter141", "category": "Best Practice", - "startLine": 1868, + "startLine": 282, "startColumn": 3, - "endLine": 1868, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 282, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping21' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter142' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping21", - "entityType": "Mapping" + "logicalId": "Parameter142", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping21", + "propertyPath": "Parameters/Parameter142", "category": "Best Practice", - "startLine": 1871, + "startLine": 284, "startColumn": 3, - "endLine": 1871, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 284, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping22' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter143' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping22", - "entityType": "Mapping" + "logicalId": "Parameter143", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping22", + "propertyPath": "Parameters/Parameter143", "category": "Best Practice", - "startLine": 1874, - "startColumn": 3, - "endLine": 1874, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "startLine": 286, + "startColumn": 3, + "endLine": 286, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping23' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter144' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping23", - "entityType": "Mapping" + "logicalId": "Parameter144", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping23", + "propertyPath": "Parameters/Parameter144", "category": "Best Practice", - "startLine": 1877, + "startLine": 288, "startColumn": 3, - "endLine": 1877, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 288, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping24' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter145' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping24", - "entityType": "Mapping" + "logicalId": "Parameter145", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping24", + "propertyPath": "Parameters/Parameter145", "category": "Best Practice", - "startLine": 1880, + "startLine": 290, "startColumn": 3, - "endLine": 1880, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 290, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping25' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter146' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping25", - "entityType": "Mapping" + "logicalId": "Parameter146", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping25", + "propertyPath": "Parameters/Parameter146", "category": "Best Practice", - "startLine": 1883, + "startLine": 292, "startColumn": 3, - "endLine": 1883, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 292, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping26' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter147' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping26", - "entityType": "Mapping" + "logicalId": "Parameter147", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping26", + "propertyPath": "Parameters/Parameter147", "category": "Best Practice", - "startLine": 1886, + "startLine": 294, "startColumn": 3, - "endLine": 1886, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 294, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping27' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter148' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping27", - "entityType": "Mapping" + "logicalId": "Parameter148", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping27", + "propertyPath": "Parameters/Parameter148", "category": "Best Practice", - "startLine": 1889, + "startLine": 296, "startColumn": 3, - "endLine": 1889, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 296, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping28' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter149' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping28", - "entityType": "Mapping" + "logicalId": "Parameter149", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping28", + "propertyPath": "Parameters/Parameter149", "category": "Best Practice", - "startLine": 1892, + "startLine": 298, "startColumn": 3, - "endLine": 1892, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 298, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping29' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter150' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping29", - "entityType": "Mapping" + "logicalId": "Parameter150", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping29", + "propertyPath": "Parameters/Parameter150", "category": "Best Practice", - "startLine": 1895, + "startLine": 300, "startColumn": 3, - "endLine": 1895, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 300, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping30' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter151' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping30", - "entityType": "Mapping" + "logicalId": "Parameter151", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping30", + "propertyPath": "Parameters/Parameter151", "category": "Best Practice", - "startLine": 1898, + "startLine": 302, "startColumn": 3, - "endLine": 1898, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 302, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping31' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter152' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping31", - "entityType": "Mapping" + "logicalId": "Parameter152", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping31", + "propertyPath": "Parameters/Parameter152", "category": "Best Practice", - "startLine": 1901, + "startLine": 304, "startColumn": 3, - "endLine": 1901, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 304, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping32' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter153' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping32", - "entityType": "Mapping" + "logicalId": "Parameter153", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping32", + "propertyPath": "Parameters/Parameter153", "category": "Best Practice", - "startLine": 1904, + "startLine": 306, "startColumn": 3, - "endLine": 1904, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 306, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping33' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter154' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping33", - "entityType": "Mapping" + "logicalId": "Parameter154", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping33", + "propertyPath": "Parameters/Parameter154", "category": "Best Practice", - "startLine": 1907, + "startLine": 308, "startColumn": 3, - "endLine": 1907, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 308, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping34' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter155' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping34", - "entityType": "Mapping" + "logicalId": "Parameter155", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping34", + "propertyPath": "Parameters/Parameter155", "category": "Best Practice", - "startLine": 1910, + "startLine": 310, "startColumn": 3, - "endLine": 1910, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 310, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping35' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter156' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping35", - "entityType": "Mapping" + "logicalId": "Parameter156", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping35", + "propertyPath": "Parameters/Parameter156", "category": "Best Practice", - "startLine": 1913, + "startLine": 312, "startColumn": 3, - "endLine": 1913, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 312, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping36' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter157' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping36", - "entityType": "Mapping" + "logicalId": "Parameter157", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping36", + "propertyPath": "Parameters/Parameter157", "category": "Best Practice", - "startLine": 1916, + "startLine": 314, "startColumn": 3, - "endLine": 1916, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 314, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping37' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter158' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping37", - "entityType": "Mapping" + "logicalId": "Parameter158", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping37", + "propertyPath": "Parameters/Parameter158", "category": "Best Practice", - "startLine": 1919, + "startLine": 316, "startColumn": 3, - "endLine": 1919, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 316, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping38' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter159' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping38", - "entityType": "Mapping" + "logicalId": "Parameter159", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping38", + "propertyPath": "Parameters/Parameter159", "category": "Best Practice", - "startLine": 1922, + "startLine": 318, "startColumn": 3, - "endLine": 1922, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 318, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping39' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter160' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping39", - "entityType": "Mapping" + "logicalId": "Parameter160", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping39", + "propertyPath": "Parameters/Parameter160", "category": "Best Practice", - "startLine": 1925, + "startLine": 320, "startColumn": 3, - "endLine": 1925, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 320, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping40' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter161' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping40", - "entityType": "Mapping" + "logicalId": "Parameter161", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping40", + "propertyPath": "Parameters/Parameter161", "category": "Best Practice", - "startLine": 1928, + "startLine": 322, "startColumn": 3, - "endLine": 1928, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 322, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping41' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter162' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping41", - "entityType": "Mapping" + "logicalId": "Parameter162", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping41", + "propertyPath": "Parameters/Parameter162", "category": "Best Practice", - "startLine": 1931, + "startLine": 324, "startColumn": 3, - "endLine": 1931, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 324, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping42' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter163' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping42", - "entityType": "Mapping" + "logicalId": "Parameter163", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping42", + "propertyPath": "Parameters/Parameter163", "category": "Best Practice", - "startLine": 1934, + "startLine": 326, "startColumn": 3, - "endLine": 1934, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 326, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping43' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter164' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping43", - "entityType": "Mapping" + "logicalId": "Parameter164", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping43", + "propertyPath": "Parameters/Parameter164", "category": "Best Practice", - "startLine": 1937, + "startLine": 328, "startColumn": 3, - "endLine": 1937, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 328, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping44' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter165' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping44", - "entityType": "Mapping" + "logicalId": "Parameter165", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping44", + "propertyPath": "Parameters/Parameter165", "category": "Best Practice", - "startLine": 1940, + "startLine": 330, "startColumn": 3, - "endLine": 1940, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 330, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping45' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter166' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping45", - "entityType": "Mapping" + "logicalId": "Parameter166", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping45", + "propertyPath": "Parameters/Parameter166", "category": "Best Practice", - "startLine": 1943, + "startLine": 332, "startColumn": 3, - "endLine": 1943, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 332, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping46' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter167' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping46", - "entityType": "Mapping" + "logicalId": "Parameter167", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping46", + "propertyPath": "Parameters/Parameter167", "category": "Best Practice", - "startLine": 1946, + "startLine": 334, "startColumn": 3, - "endLine": 1946, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 334, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping47' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter168' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping47", - "entityType": "Mapping" + "logicalId": "Parameter168", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping47", + "propertyPath": "Parameters/Parameter168", "category": "Best Practice", - "startLine": 1949, + "startLine": 336, "startColumn": 3, - "endLine": 1949, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 336, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping48' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter169' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping48", - "entityType": "Mapping" + "logicalId": "Parameter169", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping48", + "propertyPath": "Parameters/Parameter169", "category": "Best Practice", - "startLine": 1952, + "startLine": 338, "startColumn": 3, - "endLine": 1952, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 338, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping49' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter170' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping49", - "entityType": "Mapping" + "logicalId": "Parameter170", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping49", + "propertyPath": "Parameters/Parameter170", "category": "Best Practice", - "startLine": 1955, + "startLine": 340, "startColumn": 3, - "endLine": 1955, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 340, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping50' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter171' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping50", - "entityType": "Mapping" + "logicalId": "Parameter171", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping50", + "propertyPath": "Parameters/Parameter171", "category": "Best Practice", - "startLine": 1958, + "startLine": 342, "startColumn": 3, - "endLine": 1958, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 342, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping51' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter172' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping51", - "entityType": "Mapping" + "logicalId": "Parameter172", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping51", + "propertyPath": "Parameters/Parameter172", "category": "Best Practice", - "startLine": 1961, + "startLine": 344, "startColumn": 3, - "endLine": 1961, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 344, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping52' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter173' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping52", - "entityType": "Mapping" + "logicalId": "Parameter173", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping52", + "propertyPath": "Parameters/Parameter173", "category": "Best Practice", - "startLine": 1964, + "startLine": 346, "startColumn": 3, - "endLine": 1964, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 346, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping53' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter174' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping53", - "entityType": "Mapping" + "logicalId": "Parameter174", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping53", + "propertyPath": "Parameters/Parameter174", "category": "Best Practice", - "startLine": 1967, + "startLine": 348, "startColumn": 3, - "endLine": 1967, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 348, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping54' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter175' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping54", - "entityType": "Mapping" + "logicalId": "Parameter175", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping54", + "propertyPath": "Parameters/Parameter175", "category": "Best Practice", - "startLine": 1970, + "startLine": 350, "startColumn": 3, - "endLine": 1970, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 350, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping55' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter176' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping55", - "entityType": "Mapping" + "logicalId": "Parameter176", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping55", + "propertyPath": "Parameters/Parameter176", "category": "Best Practice", - "startLine": 1973, + "startLine": 352, "startColumn": 3, - "endLine": 1973, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 352, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping56' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter177' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping56", - "entityType": "Mapping" + "logicalId": "Parameter177", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping56", + "propertyPath": "Parameters/Parameter177", "category": "Best Practice", - "startLine": 1976, + "startLine": 354, "startColumn": 3, - "endLine": 1976, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 354, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping57' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter178' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping57", - "entityType": "Mapping" + "logicalId": "Parameter178", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping57", + "propertyPath": "Parameters/Parameter178", "category": "Best Practice", - "startLine": 1979, + "startLine": 356, "startColumn": 3, - "endLine": 1979, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 356, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping58' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter179' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping58", - "entityType": "Mapping" + "logicalId": "Parameter179", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping58", + "propertyPath": "Parameters/Parameter179", "category": "Best Practice", - "startLine": 1982, + "startLine": 358, "startColumn": 3, - "endLine": 1982, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 358, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping59' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter180' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping59", - "entityType": "Mapping" + "logicalId": "Parameter180", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping59", + "propertyPath": "Parameters/Parameter180", "category": "Best Practice", - "startLine": 1985, + "startLine": 360, "startColumn": 3, - "endLine": 1985, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 360, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping60' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter181' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping60", - "entityType": "Mapping" + "logicalId": "Parameter181", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping60", + "propertyPath": "Parameters/Parameter181", "category": "Best Practice", - "startLine": 1988, + "startLine": 362, "startColumn": 3, - "endLine": 1988, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 362, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping61' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter182' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping61", - "entityType": "Mapping" + "logicalId": "Parameter182", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping61", + "propertyPath": "Parameters/Parameter182", "category": "Best Practice", - "startLine": 1991, + "startLine": 364, "startColumn": 3, - "endLine": 1991, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 364, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping62' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter183' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping62", - "entityType": "Mapping" + "logicalId": "Parameter183", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping62", + "propertyPath": "Parameters/Parameter183", "category": "Best Practice", - "startLine": 1994, + "startLine": 366, "startColumn": 3, - "endLine": 1994, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 366, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping63' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter184' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping63", - "entityType": "Mapping" + "logicalId": "Parameter184", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping63", + "propertyPath": "Parameters/Parameter184", "category": "Best Practice", - "startLine": 1997, + "startLine": 368, "startColumn": 3, - "endLine": 1997, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 368, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping64' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter185' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping64", - "entityType": "Mapping" + "logicalId": "Parameter185", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping64", + "propertyPath": "Parameters/Parameter185", "category": "Best Practice", - "startLine": 2000, + "startLine": 370, "startColumn": 3, - "endLine": 2000, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 370, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping65' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter186' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping65", - "entityType": "Mapping" + "logicalId": "Parameter186", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping65", + "propertyPath": "Parameters/Parameter186", "category": "Best Practice", - "startLine": 2003, + "startLine": 372, "startColumn": 3, - "endLine": 2003, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 372, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping66' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter187' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping66", - "entityType": "Mapping" + "logicalId": "Parameter187", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping66", + "propertyPath": "Parameters/Parameter187", "category": "Best Practice", - "startLine": 2006, + "startLine": 374, "startColumn": 3, - "endLine": 2006, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 374, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping67' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter188' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping67", - "entityType": "Mapping" + "logicalId": "Parameter188", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping67", + "propertyPath": "Parameters/Parameter188", "category": "Best Practice", - "startLine": 2009, + "startLine": 376, "startColumn": 3, - "endLine": 2009, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 376, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping68' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter189' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping68", - "entityType": "Mapping" + "logicalId": "Parameter189", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping68", + "propertyPath": "Parameters/Parameter189", "category": "Best Practice", - "startLine": 2012, + "startLine": 378, "startColumn": 3, - "endLine": 2012, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 378, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping69' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter190' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping69", - "entityType": "Mapping" + "logicalId": "Parameter190", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping69", + "propertyPath": "Parameters/Parameter190", "category": "Best Practice", - "startLine": 2015, + "startLine": 380, "startColumn": 3, - "endLine": 2015, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 380, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping70' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter191' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping70", - "entityType": "Mapping" + "logicalId": "Parameter191", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping70", + "propertyPath": "Parameters/Parameter191", "category": "Best Practice", - "startLine": 2018, + "startLine": 382, "startColumn": 3, - "endLine": 2018, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 382, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping71' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter192' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping71", - "entityType": "Mapping" + "logicalId": "Parameter192", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping71", + "propertyPath": "Parameters/Parameter192", "category": "Best Practice", - "startLine": 2021, + "startLine": 384, "startColumn": 3, - "endLine": 2021, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 384, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping72' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter193' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping72", - "entityType": "Mapping" + "logicalId": "Parameter193", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping72", + "propertyPath": "Parameters/Parameter193", "category": "Best Practice", - "startLine": 2024, + "startLine": 386, "startColumn": 3, - "endLine": 2024, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 386, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping73' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter194' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping73", - "entityType": "Mapping" + "logicalId": "Parameter194", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping73", + "propertyPath": "Parameters/Parameter194", "category": "Best Practice", - "startLine": 2027, + "startLine": 388, "startColumn": 3, - "endLine": 2027, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 388, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping74' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter195' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping74", - "entityType": "Mapping" + "logicalId": "Parameter195", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping74", + "propertyPath": "Parameters/Parameter195", "category": "Best Practice", - "startLine": 2030, + "startLine": 390, "startColumn": 3, - "endLine": 2030, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 390, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping75' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter196' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping75", - "entityType": "Mapping" + "logicalId": "Parameter196", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping75", + "propertyPath": "Parameters/Parameter196", "category": "Best Practice", - "startLine": 2033, + "startLine": 392, "startColumn": 3, - "endLine": 2033, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 392, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping76' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter197' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping76", - "entityType": "Mapping" + "logicalId": "Parameter197", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping76", + "propertyPath": "Parameters/Parameter197", "category": "Best Practice", - "startLine": 2036, + "startLine": 394, "startColumn": 3, - "endLine": 2036, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 394, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping77' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter198' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping77", - "entityType": "Mapping" + "logicalId": "Parameter198", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping77", + "propertyPath": "Parameters/Parameter198", "category": "Best Practice", - "startLine": 2039, + "startLine": 396, "startColumn": 3, - "endLine": 2039, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 396, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping78' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter199' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping78", - "entityType": "Mapping" + "logicalId": "Parameter199", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping78", + "propertyPath": "Parameters/Parameter199", "category": "Best Practice", - "startLine": 2042, + "startLine": 398, "startColumn": 3, - "endLine": 2042, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 398, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping79' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter200' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping79", - "entityType": "Mapping" + "logicalId": "Parameter200", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping79", + "propertyPath": "Parameters/Parameter200", "category": "Best Practice", - "startLine": 2045, + "startLine": 400, "startColumn": 3, - "endLine": 2045, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 400, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W7001", + "ruleId": "W2001", "severity": "WARN", - "message": "Mapping 'Mapping80' is not referenced by any Fn::FindInMap", + "message": "Parameter 'Parameter201' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping80", - "entityType": "Mapping" + "logicalId": "Parameter201", + "entityType": "Parameter" }, - "propertyPath": "Mappings/Mapping80", + "propertyPath": "Parameters/Parameter201", "category": "Best Practice", - "startLine": 2048, + "startLine": 402, "startColumn": 3, - "endLine": 2048, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 402, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping81' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping1' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping81", + "logicalId": "Mapping1", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping81", + "propertyPath": "Mappings/Mapping1", "category": "Best Practice", - "startLine": 2051, + "startLine": 1811, "startColumn": 3, - "endLine": 2051, - "endColumn": 12, + "endLine": 1811, + "endColumn": 11, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping82' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping2' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping82", + "logicalId": "Mapping2", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping82", + "propertyPath": "Mappings/Mapping2", "category": "Best Practice", - "startLine": 2054, + "startLine": 1814, "startColumn": 3, - "endLine": 2054, - "endColumn": 12, + "endLine": 1814, + "endColumn": 11, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping83' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping3' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping83", + "logicalId": "Mapping3", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping83", + "propertyPath": "Mappings/Mapping3", "category": "Best Practice", - "startLine": 2057, + "startLine": 1817, "startColumn": 3, - "endLine": 2057, - "endColumn": 12, + "endLine": 1817, + "endColumn": 11, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping84' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping4' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping84", + "logicalId": "Mapping4", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping84", + "propertyPath": "Mappings/Mapping4", "category": "Best Practice", - "startLine": 2060, + "startLine": 1820, "startColumn": 3, - "endLine": 2060, - "endColumn": 12, + "endLine": 1820, + "endColumn": 11, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping85' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping5' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping85", + "logicalId": "Mapping5", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping85", + "propertyPath": "Mappings/Mapping5", "category": "Best Practice", - "startLine": 2063, + "startLine": 1823, "startColumn": 3, - "endLine": 2063, - "endColumn": 12, + "endLine": 1823, + "endColumn": 11, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping86' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping6' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping86", + "logicalId": "Mapping6", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping86", + "propertyPath": "Mappings/Mapping6", "category": "Best Practice", - "startLine": 2066, + "startLine": 1826, "startColumn": 3, - "endLine": 2066, - "endColumn": 12, + "endLine": 1826, + "endColumn": 11, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping87' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping7' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping87", + "logicalId": "Mapping7", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping87", + "propertyPath": "Mappings/Mapping7", "category": "Best Practice", - "startLine": 2069, + "startLine": 1829, "startColumn": 3, - "endLine": 2069, - "endColumn": 12, + "endLine": 1829, + "endColumn": 11, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping88' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping8' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping88", + "logicalId": "Mapping8", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping88", + "propertyPath": "Mappings/Mapping8", "category": "Best Practice", - "startLine": 2072, + "startLine": 1832, "startColumn": 3, - "endLine": 2072, - "endColumn": 12, + "endLine": 1832, + "endColumn": 11, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping89' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping9' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping89", + "logicalId": "Mapping9", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping89", + "propertyPath": "Mappings/Mapping9", "category": "Best Practice", - "startLine": 2075, + "startLine": 1835, "startColumn": 3, - "endLine": 2075, - "endColumn": 12, + "endLine": 1835, + "endColumn": 11, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping90' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping10' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping90", + "logicalId": "Mapping10", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping90", + "propertyPath": "Mappings/Mapping10", "category": "Best Practice", - "startLine": 2078, + "startLine": 1838, "startColumn": 3, - "endLine": 2078, + "endLine": 1838, "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -13844,17 +13792,17 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping91' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping11' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping91", + "logicalId": "Mapping11", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping91", + "propertyPath": "Mappings/Mapping11", "category": "Best Practice", - "startLine": 2081, + "startLine": 1841, "startColumn": 3, - "endLine": 2081, + "endLine": 1841, "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -13862,17 +13810,17 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping92' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping12' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping92", + "logicalId": "Mapping12", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping92", + "propertyPath": "Mappings/Mapping12", "category": "Best Practice", - "startLine": 2084, + "startLine": 1844, "startColumn": 3, - "endLine": 2084, + "endLine": 1844, "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -13880,17 +13828,17 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping93' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping13' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping93", + "logicalId": "Mapping13", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping93", + "propertyPath": "Mappings/Mapping13", "category": "Best Practice", - "startLine": 2087, + "startLine": 1847, "startColumn": 3, - "endLine": 2087, + "endLine": 1847, "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -13898,17 +13846,17 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping94' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping14' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping94", + "logicalId": "Mapping14", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping94", + "propertyPath": "Mappings/Mapping14", "category": "Best Practice", - "startLine": 2090, + "startLine": 1850, "startColumn": 3, - "endLine": 2090, + "endLine": 1850, "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -13916,17 +13864,17 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping95' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping15' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping95", + "logicalId": "Mapping15", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping95", + "propertyPath": "Mappings/Mapping15", "category": "Best Practice", - "startLine": 2093, + "startLine": 1853, "startColumn": 3, - "endLine": 2093, + "endLine": 1853, "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -13934,17 +13882,17 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping96' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping16' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping96", + "logicalId": "Mapping16", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping96", + "propertyPath": "Mappings/Mapping16", "category": "Best Practice", - "startLine": 2096, + "startLine": 1856, "startColumn": 3, - "endLine": 2096, + "endLine": 1856, "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -13952,17 +13900,17 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping97' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping17' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping97", + "logicalId": "Mapping17", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping97", + "propertyPath": "Mappings/Mapping17", "category": "Best Practice", - "startLine": 2099, + "startLine": 1859, "startColumn": 3, - "endLine": 2099, + "endLine": 1859, "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -13970,17 +13918,17 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping98' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping18' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping98", + "logicalId": "Mapping18", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping98", + "propertyPath": "Mappings/Mapping18", "category": "Best Practice", - "startLine": 2102, + "startLine": 1862, "startColumn": 3, - "endLine": 2102, + "endLine": 1862, "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -13988,17 +13936,17 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping99' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping19' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping99", + "logicalId": "Mapping19", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping99", + "propertyPath": "Mappings/Mapping19", "category": "Best Practice", - "startLine": 2105, + "startLine": 1865, "startColumn": 3, - "endLine": 2105, + "endLine": 1865, "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -14006,1457 +13954,1457 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping100' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping20' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping100", + "logicalId": "Mapping20", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping100", + "propertyPath": "Mappings/Mapping20", "category": "Best Practice", - "startLine": 2108, + "startLine": 1868, "startColumn": 3, - "endLine": 2108, - "endColumn": 13, + "endLine": 1868, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping101' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping21' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping101", + "logicalId": "Mapping21", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping101", + "propertyPath": "Mappings/Mapping21", "category": "Best Practice", - "startLine": 2111, + "startLine": 1871, "startColumn": 3, - "endLine": 2111, - "endColumn": 13, + "endLine": 1871, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping102' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping22' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping102", + "logicalId": "Mapping22", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping102", + "propertyPath": "Mappings/Mapping22", "category": "Best Practice", - "startLine": 2114, + "startLine": 1874, "startColumn": 3, - "endLine": 2114, - "endColumn": 13, + "endLine": 1874, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping103' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping23' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping103", + "logicalId": "Mapping23", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping103", + "propertyPath": "Mappings/Mapping23", "category": "Best Practice", - "startLine": 2117, + "startLine": 1877, "startColumn": 3, - "endLine": 2117, - "endColumn": 13, + "endLine": 1877, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping104' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping24' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping104", + "logicalId": "Mapping24", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping104", + "propertyPath": "Mappings/Mapping24", "category": "Best Practice", - "startLine": 2120, + "startLine": 1880, "startColumn": 3, - "endLine": 2120, - "endColumn": 13, + "endLine": 1880, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping105' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping25' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping105", + "logicalId": "Mapping25", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping105", + "propertyPath": "Mappings/Mapping25", "category": "Best Practice", - "startLine": 2123, + "startLine": 1883, "startColumn": 3, - "endLine": 2123, - "endColumn": 13, + "endLine": 1883, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping106' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping26' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping106", + "logicalId": "Mapping26", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping106", + "propertyPath": "Mappings/Mapping26", "category": "Best Practice", - "startLine": 2126, + "startLine": 1886, "startColumn": 3, - "endLine": 2126, - "endColumn": 13, + "endLine": 1886, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping107' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping27' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping107", + "logicalId": "Mapping27", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping107", + "propertyPath": "Mappings/Mapping27", "category": "Best Practice", - "startLine": 2129, + "startLine": 1889, "startColumn": 3, - "endLine": 2129, - "endColumn": 13, + "endLine": 1889, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping108' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping28' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping108", + "logicalId": "Mapping28", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping108", + "propertyPath": "Mappings/Mapping28", "category": "Best Practice", - "startLine": 2132, + "startLine": 1892, "startColumn": 3, - "endLine": 2132, - "endColumn": 13, + "endLine": 1892, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping109' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping29' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping109", + "logicalId": "Mapping29", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping109", + "propertyPath": "Mappings/Mapping29", "category": "Best Practice", - "startLine": 2135, + "startLine": 1895, "startColumn": 3, - "endLine": 2135, - "endColumn": 13, + "endLine": 1895, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping110' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping30' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping110", + "logicalId": "Mapping30", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping110", + "propertyPath": "Mappings/Mapping30", "category": "Best Practice", - "startLine": 2138, + "startLine": 1898, "startColumn": 3, - "endLine": 2138, - "endColumn": 13, + "endLine": 1898, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping111' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping31' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping111", + "logicalId": "Mapping31", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping111", + "propertyPath": "Mappings/Mapping31", "category": "Best Practice", - "startLine": 2141, + "startLine": 1901, "startColumn": 3, - "endLine": 2141, - "endColumn": 13, + "endLine": 1901, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping112' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping32' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping112", + "logicalId": "Mapping32", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping112", + "propertyPath": "Mappings/Mapping32", "category": "Best Practice", - "startLine": 2144, + "startLine": 1904, "startColumn": 3, - "endLine": 2144, - "endColumn": 13, + "endLine": 1904, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping113' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping33' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping113", + "logicalId": "Mapping33", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping113", + "propertyPath": "Mappings/Mapping33", "category": "Best Practice", - "startLine": 2147, + "startLine": 1907, "startColumn": 3, - "endLine": 2147, - "endColumn": 13, + "endLine": 1907, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping114' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping34' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping114", + "logicalId": "Mapping34", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping114", + "propertyPath": "Mappings/Mapping34", "category": "Best Practice", - "startLine": 2150, + "startLine": 1910, "startColumn": 3, - "endLine": 2150, - "endColumn": 13, + "endLine": 1910, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping115' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping35' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping115", + "logicalId": "Mapping35", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping115", + "propertyPath": "Mappings/Mapping35", "category": "Best Practice", - "startLine": 2153, + "startLine": 1913, "startColumn": 3, - "endLine": 2153, - "endColumn": 13, + "endLine": 1913, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping116' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping36' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping116", + "logicalId": "Mapping36", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping116", + "propertyPath": "Mappings/Mapping36", "category": "Best Practice", - "startLine": 2156, + "startLine": 1916, "startColumn": 3, - "endLine": 2156, - "endColumn": 13, + "endLine": 1916, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping117' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping37' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping117", + "logicalId": "Mapping37", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping117", + "propertyPath": "Mappings/Mapping37", "category": "Best Practice", - "startLine": 2159, + "startLine": 1919, "startColumn": 3, - "endLine": 2159, - "endColumn": 13, + "endLine": 1919, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping118' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping38' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping118", + "logicalId": "Mapping38", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping118", + "propertyPath": "Mappings/Mapping38", "category": "Best Practice", - "startLine": 2162, + "startLine": 1922, "startColumn": 3, - "endLine": 2162, - "endColumn": 13, + "endLine": 1922, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping119' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping39' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping119", + "logicalId": "Mapping39", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping119", + "propertyPath": "Mappings/Mapping39", "category": "Best Practice", - "startLine": 2165, + "startLine": 1925, "startColumn": 3, - "endLine": 2165, - "endColumn": 13, + "endLine": 1925, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping120' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping40' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping120", + "logicalId": "Mapping40", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping120", + "propertyPath": "Mappings/Mapping40", "category": "Best Practice", - "startLine": 2168, + "startLine": 1928, "startColumn": 3, - "endLine": 2168, - "endColumn": 13, + "endLine": 1928, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping121' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping41' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping121", + "logicalId": "Mapping41", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping121", + "propertyPath": "Mappings/Mapping41", "category": "Best Practice", - "startLine": 2171, + "startLine": 1931, "startColumn": 3, - "endLine": 2171, - "endColumn": 13, + "endLine": 1931, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping122' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping42' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping122", + "logicalId": "Mapping42", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping122", + "propertyPath": "Mappings/Mapping42", "category": "Best Practice", - "startLine": 2174, + "startLine": 1934, "startColumn": 3, - "endLine": 2174, - "endColumn": 13, + "endLine": 1934, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping123' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping43' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping123", + "logicalId": "Mapping43", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping123", + "propertyPath": "Mappings/Mapping43", "category": "Best Practice", - "startLine": 2177, + "startLine": 1937, "startColumn": 3, - "endLine": 2177, - "endColumn": 13, + "endLine": 1937, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping124' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping44' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping124", + "logicalId": "Mapping44", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping124", + "propertyPath": "Mappings/Mapping44", "category": "Best Practice", - "startLine": 2180, + "startLine": 1940, "startColumn": 3, - "endLine": 2180, - "endColumn": 13, + "endLine": 1940, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping125' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping45' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping125", + "logicalId": "Mapping45", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping125", + "propertyPath": "Mappings/Mapping45", "category": "Best Practice", - "startLine": 2183, + "startLine": 1943, "startColumn": 3, - "endLine": 2183, - "endColumn": 13, + "endLine": 1943, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping126' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping46' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping126", + "logicalId": "Mapping46", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping126", + "propertyPath": "Mappings/Mapping46", "category": "Best Practice", - "startLine": 2186, + "startLine": 1946, "startColumn": 3, - "endLine": 2186, - "endColumn": 13, + "endLine": 1946, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping127' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping47' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping127", + "logicalId": "Mapping47", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping127", + "propertyPath": "Mappings/Mapping47", "category": "Best Practice", - "startLine": 2189, + "startLine": 1949, "startColumn": 3, - "endLine": 2189, - "endColumn": 13, + "endLine": 1949, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping128' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping48' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping128", + "logicalId": "Mapping48", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping128", + "propertyPath": "Mappings/Mapping48", "category": "Best Practice", - "startLine": 2192, + "startLine": 1952, "startColumn": 3, - "endLine": 2192, - "endColumn": 13, + "endLine": 1952, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping129' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping49' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping129", + "logicalId": "Mapping49", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping129", + "propertyPath": "Mappings/Mapping49", "category": "Best Practice", - "startLine": 2195, + "startLine": 1955, "startColumn": 3, - "endLine": 2195, - "endColumn": 13, + "endLine": 1955, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping130' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping50' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping130", + "logicalId": "Mapping50", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping130", + "propertyPath": "Mappings/Mapping50", "category": "Best Practice", - "startLine": 2198, + "startLine": 1958, "startColumn": 3, - "endLine": 2198, - "endColumn": 13, + "endLine": 1958, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping131' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping51' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping131", + "logicalId": "Mapping51", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping131", + "propertyPath": "Mappings/Mapping51", "category": "Best Practice", - "startLine": 2201, + "startLine": 1961, "startColumn": 3, - "endLine": 2201, - "endColumn": 13, + "endLine": 1961, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping132' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping52' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping132", + "logicalId": "Mapping52", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping132", + "propertyPath": "Mappings/Mapping52", "category": "Best Practice", - "startLine": 2204, + "startLine": 1964, "startColumn": 3, - "endLine": 2204, - "endColumn": 13, + "endLine": 1964, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping133' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping53' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping133", + "logicalId": "Mapping53", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping133", + "propertyPath": "Mappings/Mapping53", "category": "Best Practice", - "startLine": 2207, + "startLine": 1967, "startColumn": 3, - "endLine": 2207, - "endColumn": 13, + "endLine": 1967, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping134' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping54' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping134", + "logicalId": "Mapping54", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping134", + "propertyPath": "Mappings/Mapping54", "category": "Best Practice", - "startLine": 2210, + "startLine": 1970, "startColumn": 3, - "endLine": 2210, - "endColumn": 13, + "endLine": 1970, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping135' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping55' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping135", + "logicalId": "Mapping55", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping135", + "propertyPath": "Mappings/Mapping55", "category": "Best Practice", - "startLine": 2213, + "startLine": 1973, "startColumn": 3, - "endLine": 2213, - "endColumn": 13, + "endLine": 1973, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping136' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping56' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping136", + "logicalId": "Mapping56", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping136", + "propertyPath": "Mappings/Mapping56", "category": "Best Practice", - "startLine": 2216, + "startLine": 1976, "startColumn": 3, - "endLine": 2216, - "endColumn": 13, + "endLine": 1976, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping137' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping57' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping137", + "logicalId": "Mapping57", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping137", + "propertyPath": "Mappings/Mapping57", "category": "Best Practice", - "startLine": 2219, + "startLine": 1979, "startColumn": 3, - "endLine": 2219, - "endColumn": 13, + "endLine": 1979, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping138' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping58' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping138", + "logicalId": "Mapping58", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping138", + "propertyPath": "Mappings/Mapping58", "category": "Best Practice", - "startLine": 2222, + "startLine": 1982, "startColumn": 3, - "endLine": 2222, - "endColumn": 13, + "endLine": 1982, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping139' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping59' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping139", + "logicalId": "Mapping59", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping139", + "propertyPath": "Mappings/Mapping59", "category": "Best Practice", - "startLine": 2225, + "startLine": 1985, "startColumn": 3, - "endLine": 2225, - "endColumn": 13, + "endLine": 1985, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping140' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping60' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping140", + "logicalId": "Mapping60", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping140", + "propertyPath": "Mappings/Mapping60", "category": "Best Practice", - "startLine": 2228, + "startLine": 1988, "startColumn": 3, - "endLine": 2228, - "endColumn": 13, + "endLine": 1988, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping141' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping61' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping141", + "logicalId": "Mapping61", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping141", + "propertyPath": "Mappings/Mapping61", "category": "Best Practice", - "startLine": 2231, + "startLine": 1991, "startColumn": 3, - "endLine": 2231, - "endColumn": 13, + "endLine": 1991, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping142' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping62' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping142", + "logicalId": "Mapping62", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping142", + "propertyPath": "Mappings/Mapping62", "category": "Best Practice", - "startLine": 2234, + "startLine": 1994, "startColumn": 3, - "endLine": 2234, - "endColumn": 13, + "endLine": 1994, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping143' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping63' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping143", + "logicalId": "Mapping63", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping143", + "propertyPath": "Mappings/Mapping63", "category": "Best Practice", - "startLine": 2237, + "startLine": 1997, "startColumn": 3, - "endLine": 2237, - "endColumn": 13, + "endLine": 1997, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping144' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping64' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping144", + "logicalId": "Mapping64", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping144", + "propertyPath": "Mappings/Mapping64", "category": "Best Practice", - "startLine": 2240, + "startLine": 2000, "startColumn": 3, - "endLine": 2240, - "endColumn": 13, + "endLine": 2000, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping145' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping65' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping145", + "logicalId": "Mapping65", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping145", + "propertyPath": "Mappings/Mapping65", "category": "Best Practice", - "startLine": 2243, + "startLine": 2003, "startColumn": 3, - "endLine": 2243, - "endColumn": 13, + "endLine": 2003, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping146' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping66' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping146", + "logicalId": "Mapping66", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping146", + "propertyPath": "Mappings/Mapping66", "category": "Best Practice", - "startLine": 2246, + "startLine": 2006, "startColumn": 3, - "endLine": 2246, - "endColumn": 13, + "endLine": 2006, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping147' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping67' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping147", + "logicalId": "Mapping67", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping147", + "propertyPath": "Mappings/Mapping67", "category": "Best Practice", - "startLine": 2249, + "startLine": 2009, "startColumn": 3, - "endLine": 2249, - "endColumn": 13, + "endLine": 2009, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping148' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping68' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping148", + "logicalId": "Mapping68", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping148", + "propertyPath": "Mappings/Mapping68", "category": "Best Practice", - "startLine": 2252, + "startLine": 2012, "startColumn": 3, - "endLine": 2252, - "endColumn": 13, + "endLine": 2012, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping149' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping69' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping149", + "logicalId": "Mapping69", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping149", + "propertyPath": "Mappings/Mapping69", "category": "Best Practice", - "startLine": 2255, + "startLine": 2015, "startColumn": 3, - "endLine": 2255, - "endColumn": 13, + "endLine": 2015, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping150' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping70' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping150", + "logicalId": "Mapping70", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping150", + "propertyPath": "Mappings/Mapping70", "category": "Best Practice", - "startLine": 2258, + "startLine": 2018, "startColumn": 3, - "endLine": 2258, - "endColumn": 13, + "endLine": 2018, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping151' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping71' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping151", + "logicalId": "Mapping71", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping151", + "propertyPath": "Mappings/Mapping71", "category": "Best Practice", - "startLine": 2261, + "startLine": 2021, "startColumn": 3, - "endLine": 2261, - "endColumn": 13, + "endLine": 2021, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping152' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping72' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping152", + "logicalId": "Mapping72", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping152", + "propertyPath": "Mappings/Mapping72", "category": "Best Practice", - "startLine": 2264, + "startLine": 2024, "startColumn": 3, - "endLine": 2264, - "endColumn": 13, + "endLine": 2024, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping153' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping73' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping153", + "logicalId": "Mapping73", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping153", + "propertyPath": "Mappings/Mapping73", "category": "Best Practice", - "startLine": 2267, + "startLine": 2027, "startColumn": 3, - "endLine": 2267, - "endColumn": 13, + "endLine": 2027, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping154' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping74' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping154", + "logicalId": "Mapping74", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping154", + "propertyPath": "Mappings/Mapping74", "category": "Best Practice", - "startLine": 2270, + "startLine": 2030, "startColumn": 3, - "endLine": 2270, - "endColumn": 13, + "endLine": 2030, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping155' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping75' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping155", + "logicalId": "Mapping75", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping155", + "propertyPath": "Mappings/Mapping75", "category": "Best Practice", - "startLine": 2273, + "startLine": 2033, "startColumn": 3, - "endLine": 2273, - "endColumn": 13, + "endLine": 2033, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping156' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping76' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping156", + "logicalId": "Mapping76", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping156", + "propertyPath": "Mappings/Mapping76", "category": "Best Practice", - "startLine": 2276, + "startLine": 2036, "startColumn": 3, - "endLine": 2276, - "endColumn": 13, + "endLine": 2036, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping157' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping77' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping157", + "logicalId": "Mapping77", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping157", + "propertyPath": "Mappings/Mapping77", "category": "Best Practice", - "startLine": 2279, + "startLine": 2039, "startColumn": 3, - "endLine": 2279, - "endColumn": 13, + "endLine": 2039, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping158' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping78' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping158", + "logicalId": "Mapping78", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping158", + "propertyPath": "Mappings/Mapping78", "category": "Best Practice", - "startLine": 2282, + "startLine": 2042, "startColumn": 3, - "endLine": 2282, - "endColumn": 13, + "endLine": 2042, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping159' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping79' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping159", + "logicalId": "Mapping79", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping159", + "propertyPath": "Mappings/Mapping79", "category": "Best Practice", - "startLine": 2285, + "startLine": 2045, "startColumn": 3, - "endLine": 2285, - "endColumn": 13, + "endLine": 2045, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping160' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping80' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping160", + "logicalId": "Mapping80", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping160", + "propertyPath": "Mappings/Mapping80", "category": "Best Practice", - "startLine": 2288, + "startLine": 2048, "startColumn": 3, - "endLine": 2288, - "endColumn": 13, + "endLine": 2048, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping161' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping81' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping161", + "logicalId": "Mapping81", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping161", + "propertyPath": "Mappings/Mapping81", "category": "Best Practice", - "startLine": 2291, + "startLine": 2051, "startColumn": 3, - "endLine": 2291, - "endColumn": 13, + "endLine": 2051, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping162' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping82' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping162", + "logicalId": "Mapping82", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping162", + "propertyPath": "Mappings/Mapping82", "category": "Best Practice", - "startLine": 2294, + "startLine": 2054, "startColumn": 3, - "endLine": 2294, - "endColumn": 13, + "endLine": 2054, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping163' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping83' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping163", + "logicalId": "Mapping83", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping163", + "propertyPath": "Mappings/Mapping83", "category": "Best Practice", - "startLine": 2297, + "startLine": 2057, "startColumn": 3, - "endLine": 2297, - "endColumn": 13, + "endLine": 2057, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping164' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping84' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping164", + "logicalId": "Mapping84", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping164", + "propertyPath": "Mappings/Mapping84", "category": "Best Practice", - "startLine": 2300, + "startLine": 2060, "startColumn": 3, - "endLine": 2300, - "endColumn": 13, + "endLine": 2060, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping165' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping85' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping165", + "logicalId": "Mapping85", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping165", + "propertyPath": "Mappings/Mapping85", "category": "Best Practice", - "startLine": 2303, + "startLine": 2063, "startColumn": 3, - "endLine": 2303, - "endColumn": 13, + "endLine": 2063, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping166' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping86' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping166", + "logicalId": "Mapping86", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping166", + "propertyPath": "Mappings/Mapping86", "category": "Best Practice", - "startLine": 2306, + "startLine": 2066, "startColumn": 3, - "endLine": 2306, - "endColumn": 13, + "endLine": 2066, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping167' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping87' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping167", + "logicalId": "Mapping87", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping167", + "propertyPath": "Mappings/Mapping87", "category": "Best Practice", - "startLine": 2309, + "startLine": 2069, "startColumn": 3, - "endLine": 2309, - "endColumn": 13, + "endLine": 2069, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping168' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping88' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping168", + "logicalId": "Mapping88", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping168", + "propertyPath": "Mappings/Mapping88", "category": "Best Practice", - "startLine": 2312, + "startLine": 2072, "startColumn": 3, - "endLine": 2312, - "endColumn": 13, + "endLine": 2072, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping169' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping89' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping169", + "logicalId": "Mapping89", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping169", + "propertyPath": "Mappings/Mapping89", "category": "Best Practice", - "startLine": 2315, + "startLine": 2075, "startColumn": 3, - "endLine": 2315, - "endColumn": 13, + "endLine": 2075, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping170' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping90' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping170", + "logicalId": "Mapping90", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping170", + "propertyPath": "Mappings/Mapping90", "category": "Best Practice", - "startLine": 2318, + "startLine": 2078, "startColumn": 3, - "endLine": 2318, - "endColumn": 13, + "endLine": 2078, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping171' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping91' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping171", + "logicalId": "Mapping91", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping171", + "propertyPath": "Mappings/Mapping91", "category": "Best Practice", - "startLine": 2321, + "startLine": 2081, "startColumn": 3, - "endLine": 2321, - "endColumn": 13, + "endLine": 2081, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping172' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping92' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping172", + "logicalId": "Mapping92", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping172", + "propertyPath": "Mappings/Mapping92", "category": "Best Practice", - "startLine": 2324, + "startLine": 2084, "startColumn": 3, - "endLine": 2324, - "endColumn": 13, + "endLine": 2084, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping173' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping93' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping173", + "logicalId": "Mapping93", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping173", + "propertyPath": "Mappings/Mapping93", "category": "Best Practice", - "startLine": 2327, + "startLine": 2087, "startColumn": 3, - "endLine": 2327, - "endColumn": 13, + "endLine": 2087, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping174' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping94' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping174", + "logicalId": "Mapping94", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping174", + "propertyPath": "Mappings/Mapping94", "category": "Best Practice", - "startLine": 2330, + "startLine": 2090, "startColumn": 3, - "endLine": 2330, - "endColumn": 13, + "endLine": 2090, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping175' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping95' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping175", + "logicalId": "Mapping95", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping175", + "propertyPath": "Mappings/Mapping95", "category": "Best Practice", - "startLine": 2333, + "startLine": 2093, "startColumn": 3, - "endLine": 2333, - "endColumn": 13, + "endLine": 2093, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping176' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping96' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping176", + "logicalId": "Mapping96", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping176", + "propertyPath": "Mappings/Mapping96", "category": "Best Practice", - "startLine": 2336, + "startLine": 2096, "startColumn": 3, - "endLine": 2336, - "endColumn": 13, + "endLine": 2096, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping177' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping97' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping177", + "logicalId": "Mapping97", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping177", + "propertyPath": "Mappings/Mapping97", "category": "Best Practice", - "startLine": 2339, + "startLine": 2099, "startColumn": 3, - "endLine": 2339, - "endColumn": 13, + "endLine": 2099, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping178' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping98' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping178", + "logicalId": "Mapping98", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping178", + "propertyPath": "Mappings/Mapping98", "category": "Best Practice", - "startLine": 2342, + "startLine": 2102, "startColumn": 3, - "endLine": 2342, - "endColumn": 13, + "endLine": 2102, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping179' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping99' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping179", + "logicalId": "Mapping99", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping179", + "propertyPath": "Mappings/Mapping99", "category": "Best Practice", - "startLine": 2345, + "startLine": 2105, "startColumn": 3, - "endLine": 2345, - "endColumn": 13, + "endLine": 2105, + "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping180' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping100' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping180", + "logicalId": "Mapping100", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping180", + "propertyPath": "Mappings/Mapping100", "category": "Best Practice", - "startLine": 2348, + "startLine": 2108, "startColumn": 3, - "endLine": 2348, + "endLine": 2108, "endColumn": 13, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -15464,17 +15412,17 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping181' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping101' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping181", + "logicalId": "Mapping101", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping181", + "propertyPath": "Mappings/Mapping101", "category": "Best Practice", - "startLine": 2351, + "startLine": 2111, "startColumn": 3, - "endLine": 2351, + "endLine": 2111, "endColumn": 13, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -15482,17 +15430,17 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping182' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping102' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping182", + "logicalId": "Mapping102", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping182", + "propertyPath": "Mappings/Mapping102", "category": "Best Practice", - "startLine": 2354, + "startLine": 2114, "startColumn": 3, - "endLine": 2354, + "endLine": 2114, "endColumn": 13, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -15500,17 +15448,17 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping183' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping103' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping183", + "logicalId": "Mapping103", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping183", + "propertyPath": "Mappings/Mapping103", "category": "Best Practice", - "startLine": 2357, + "startLine": 2117, "startColumn": 3, - "endLine": 2357, + "endLine": 2117, "endColumn": 13, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -15518,17 +15466,17 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping184' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping104' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping184", + "logicalId": "Mapping104", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping184", + "propertyPath": "Mappings/Mapping104", "category": "Best Practice", - "startLine": 2360, + "startLine": 2120, "startColumn": 3, - "endLine": 2360, + "endLine": 2120, "endColumn": 13, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -15536,17 +15484,17 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping185' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping105' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping185", + "logicalId": "Mapping105", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping185", + "propertyPath": "Mappings/Mapping105", "category": "Best Practice", - "startLine": 2363, + "startLine": 2123, "startColumn": 3, - "endLine": 2363, + "endLine": 2123, "endColumn": 13, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -15554,17 +15502,17 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping186' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping106' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping186", + "logicalId": "Mapping106", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping186", + "propertyPath": "Mappings/Mapping106", "category": "Best Practice", - "startLine": 2366, + "startLine": 2126, "startColumn": 3, - "endLine": 2366, + "endLine": 2126, "endColumn": 13, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -15572,17 +15520,17 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping187' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping107' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping187", + "logicalId": "Mapping107", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping187", + "propertyPath": "Mappings/Mapping107", "category": "Best Practice", - "startLine": 2369, + "startLine": 2129, "startColumn": 3, - "endLine": 2369, + "endLine": 2129, "endColumn": 13, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -15590,17 +15538,17 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping188' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping108' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping188", + "logicalId": "Mapping108", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping188", + "propertyPath": "Mappings/Mapping108", "category": "Best Practice", - "startLine": 2372, + "startLine": 2132, "startColumn": 3, - "endLine": 2372, + "endLine": 2132, "endColumn": 13, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -15608,17 +15556,17 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping189' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping109' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping189", + "logicalId": "Mapping109", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping189", + "propertyPath": "Mappings/Mapping109", "category": "Best Practice", - "startLine": 2375, + "startLine": 2135, "startColumn": 3, - "endLine": 2375, + "endLine": 2135, "endColumn": 13, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -15626,17 +15574,17 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping190' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping110' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping190", + "logicalId": "Mapping110", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping190", + "propertyPath": "Mappings/Mapping110", "category": "Best Practice", - "startLine": 2378, + "startLine": 2138, "startColumn": 3, - "endLine": 2378, + "endLine": 2138, "endColumn": 13, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -15644,17 +15592,17 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping191' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping111' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping191", + "logicalId": "Mapping111", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping191", + "propertyPath": "Mappings/Mapping111", "category": "Best Practice", - "startLine": 2381, + "startLine": 2141, "startColumn": 3, - "endLine": 2381, + "endLine": 2141, "endColumn": 13, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -15662,17 +15610,17 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping192' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping112' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping192", + "logicalId": "Mapping112", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping192", + "propertyPath": "Mappings/Mapping112", "category": "Best Practice", - "startLine": 2384, + "startLine": 2144, "startColumn": 3, - "endLine": 2384, + "endLine": 2144, "endColumn": 13, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -15680,17 +15628,17 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping193' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping113' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping193", + "logicalId": "Mapping113", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping193", + "propertyPath": "Mappings/Mapping113", "category": "Best Practice", - "startLine": 2387, + "startLine": 2147, "startColumn": 3, - "endLine": 2387, + "endLine": 2147, "endColumn": 13, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -15698,17 +15646,17 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping194' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping114' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping194", + "logicalId": "Mapping114", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping194", + "propertyPath": "Mappings/Mapping114", "category": "Best Practice", - "startLine": 2390, + "startLine": 2150, "startColumn": 3, - "endLine": 2390, + "endLine": 2150, "endColumn": 13, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -15716,17 +15664,17 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping195' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping115' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping195", + "logicalId": "Mapping115", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping195", + "propertyPath": "Mappings/Mapping115", "category": "Best Practice", - "startLine": 2393, + "startLine": 2153, "startColumn": 3, - "endLine": 2393, + "endLine": 2153, "endColumn": 13, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -15734,17 +15682,17 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping196' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping116' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping196", + "logicalId": "Mapping116", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping196", + "propertyPath": "Mappings/Mapping116", "category": "Best Practice", - "startLine": 2396, + "startLine": 2156, "startColumn": 3, - "endLine": 2396, + "endLine": 2156, "endColumn": 13, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -15752,17 +15700,17 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping197' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping117' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping197", + "logicalId": "Mapping117", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping197", + "propertyPath": "Mappings/Mapping117", "category": "Best Practice", - "startLine": 2399, + "startLine": 2159, "startColumn": 3, - "endLine": 2399, + "endLine": 2159, "endColumn": 13, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -15770,17 +15718,17 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping198' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping118' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping198", + "logicalId": "Mapping118", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping198", + "propertyPath": "Mappings/Mapping118", "category": "Best Practice", - "startLine": 2402, + "startLine": 2162, "startColumn": 3, - "endLine": 2402, + "endLine": 2162, "endColumn": 13, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -15788,17 +15736,17 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping199' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping119' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping199", + "logicalId": "Mapping119", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping199", + "propertyPath": "Mappings/Mapping119", "category": "Best Practice", - "startLine": 2405, + "startLine": 2165, "startColumn": 3, - "endLine": 2405, + "endLine": 2165, "endColumn": 13, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -15806,17 +15754,17 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping200' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping120' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping200", + "logicalId": "Mapping120", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping200", + "propertyPath": "Mappings/Mapping120", "category": "Best Practice", - "startLine": 2408, + "startLine": 2168, "startColumn": 3, - "endLine": 2408, + "endLine": 2168, "endColumn": 13, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" @@ -15824,1837 +15772,1657 @@ { "ruleId": "W7001", "severity": "WARN", - "message": "Mapping 'Mapping201' is not referenced by any Fn::FindInMap", + "message": "Mapping 'Mapping121' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "Mapping201", + "logicalId": "Mapping121", "entityType": "Mapping" }, - "propertyPath": "Mappings/Mapping201", + "propertyPath": "Mappings/Mapping121", "category": "Best Practice", - "startLine": 2411, + "startLine": 2171, "startColumn": 3, - "endLine": 2411, + "endLine": 2171, "endColumn": 13, "ruleDescription": "Check if Mappings are Used", "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", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping122' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource2", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping122", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping122", "category": "Best Practice", - "startLine": 407, + "startLine": 2174, "startColumn": 3, - "endLine": 407, - "endColumn": 12, - "ruleDescription": "Resource should have Tags", + "endLine": 2174, + "endColumn": 13, + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource3' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping123' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource3", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping123", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping123", "category": "Best Practice", - "startLine": 409, + "startLine": 2177, "startColumn": 3, - "endLine": 409, - "endColumn": 12, - "ruleDescription": "Resource should have Tags", + "endLine": 2177, + "endColumn": 13, + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource4' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping124' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource4", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping124", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping124", "category": "Best Practice", - "startLine": 411, + "startLine": 2180, "startColumn": 3, - "endLine": 411, - "endColumn": 12, - "ruleDescription": "Resource should have Tags", + "endLine": 2180, + "endColumn": 13, + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource5' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping125' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource5", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping125", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping125", "category": "Best Practice", - "startLine": 413, + "startLine": 2183, "startColumn": 3, - "endLine": 413, - "endColumn": 12, - "ruleDescription": "Resource should have Tags", + "endLine": 2183, + "endColumn": 13, + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource6' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping126' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource6", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping126", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping126", "category": "Best Practice", - "startLine": 415, + "startLine": 2186, "startColumn": 3, - "endLine": 415, - "endColumn": 12, - "ruleDescription": "Resource should have Tags", + "endLine": 2186, + "endColumn": 13, + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource7' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping127' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource7", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping127", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping127", "category": "Best Practice", - "startLine": 417, + "startLine": 2189, "startColumn": 3, - "endLine": 417, - "endColumn": 12, - "ruleDescription": "Resource should have Tags", + "endLine": 2189, + "endColumn": 13, + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource8' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping128' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource8", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping128", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping128", "category": "Best Practice", - "startLine": 419, + "startLine": 2192, "startColumn": 3, - "endLine": 419, - "endColumn": 12, - "ruleDescription": "Resource should have Tags", + "endLine": 2192, + "endColumn": 13, + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource9' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping129' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource9", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping129", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping129", "category": "Best Practice", - "startLine": 421, + "startLine": 2195, "startColumn": 3, - "endLine": 421, - "endColumn": 12, - "ruleDescription": "Resource should have Tags", + "endLine": 2195, + "endColumn": 13, + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource10' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping130' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource10", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping130", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping130", "category": "Best Practice", - "startLine": 423, + "startLine": 2198, "startColumn": 3, - "endLine": 423, + "endLine": 2198, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource11' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping131' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource11", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping131", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping131", "category": "Best Practice", - "startLine": 425, + "startLine": 2201, "startColumn": 3, - "endLine": 425, + "endLine": 2201, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource12' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping132' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource12", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping132", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping132", "category": "Best Practice", - "startLine": 427, + "startLine": 2204, "startColumn": 3, - "endLine": 427, + "endLine": 2204, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource13' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping133' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource13", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping133", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping133", "category": "Best Practice", - "startLine": 429, + "startLine": 2207, "startColumn": 3, - "endLine": 429, + "endLine": 2207, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource14' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping134' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource14", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping134", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping134", "category": "Best Practice", - "startLine": 431, + "startLine": 2210, "startColumn": 3, - "endLine": 431, + "endLine": 2210, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource15' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping135' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource15", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping135", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping135", "category": "Best Practice", - "startLine": 433, + "startLine": 2213, "startColumn": 3, - "endLine": 433, + "endLine": 2213, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource16' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping136' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource16", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping136", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping136", "category": "Best Practice", - "startLine": 435, + "startLine": 2216, "startColumn": 3, - "endLine": 435, + "endLine": 2216, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource17' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping137' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource17", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping137", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping137", "category": "Best Practice", - "startLine": 437, + "startLine": 2219, "startColumn": 3, - "endLine": 437, + "endLine": 2219, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource18' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping138' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource18", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping138", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping138", "category": "Best Practice", - "startLine": 439, + "startLine": 2222, "startColumn": 3, - "endLine": 439, + "endLine": 2222, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource19' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping139' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource19", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping139", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping139", "category": "Best Practice", - "startLine": 441, + "startLine": 2225, "startColumn": 3, - "endLine": 441, + "endLine": 2225, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource20' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping140' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource20", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping140", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping140", "category": "Best Practice", - "startLine": 443, + "startLine": 2228, "startColumn": 3, - "endLine": 443, + "endLine": 2228, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource21' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping141' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource21", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping141", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping141", "category": "Best Practice", - "startLine": 445, + "startLine": 2231, "startColumn": 3, - "endLine": 445, + "endLine": 2231, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource22' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping142' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource22", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping142", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping142", "category": "Best Practice", - "startLine": 447, + "startLine": 2234, "startColumn": 3, - "endLine": 447, + "endLine": 2234, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource23' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping143' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource23", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping143", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping143", "category": "Best Practice", - "startLine": 449, + "startLine": 2237, "startColumn": 3, - "endLine": 449, + "endLine": 2237, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource24' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping144' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource24", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping144", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping144", "category": "Best Practice", - "startLine": 451, + "startLine": 2240, "startColumn": 3, - "endLine": 451, + "endLine": 2240, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource25' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping145' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource25", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping145", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping145", "category": "Best Practice", - "startLine": 453, + "startLine": 2243, "startColumn": 3, - "endLine": 453, + "endLine": 2243, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource26' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping146' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource26", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping146", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping146", "category": "Best Practice", - "startLine": 455, + "startLine": 2246, "startColumn": 3, - "endLine": 455, + "endLine": 2246, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource27' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping147' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource27", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping147", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping147", "category": "Best Practice", - "startLine": 457, + "startLine": 2249, "startColumn": 3, - "endLine": 457, + "endLine": 2249, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource28' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping148' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource28", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping148", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping148", "category": "Best Practice", - "startLine": 459, + "startLine": 2252, "startColumn": 3, - "endLine": 459, + "endLine": 2252, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource29' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping149' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource29", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping149", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping149", "category": "Best Practice", - "startLine": 461, + "startLine": 2255, "startColumn": 3, - "endLine": 461, + "endLine": 2255, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource30' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping150' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource30", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping150", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping150", "category": "Best Practice", - "startLine": 463, + "startLine": 2258, "startColumn": 3, - "endLine": 463, + "endLine": 2258, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource31' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping151' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource31", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping151", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping151", "category": "Best Practice", - "startLine": 465, + "startLine": 2261, "startColumn": 3, - "endLine": 465, + "endLine": 2261, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource32' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping152' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource32", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping152", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping152", "category": "Best Practice", - "startLine": 467, + "startLine": 2264, "startColumn": 3, - "endLine": 467, + "endLine": 2264, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource33' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping153' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource33", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping153", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping153", "category": "Best Practice", - "startLine": 469, + "startLine": 2267, "startColumn": 3, - "endLine": 469, + "endLine": 2267, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource34' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping154' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource34", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping154", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping154", "category": "Best Practice", - "startLine": 471, + "startLine": 2270, "startColumn": 3, - "endLine": 471, + "endLine": 2270, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource35' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping155' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource35", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping155", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping155", "category": "Best Practice", - "startLine": 473, + "startLine": 2273, "startColumn": 3, - "endLine": 473, + "endLine": 2273, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource36' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping156' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource36", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping156", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping156", "category": "Best Practice", - "startLine": 475, + "startLine": 2276, "startColumn": 3, - "endLine": 475, + "endLine": 2276, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource37' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping157' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource37", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping157", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping157", "category": "Best Practice", - "startLine": 477, + "startLine": 2279, "startColumn": 3, - "endLine": 477, + "endLine": 2279, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource38' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping158' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource38", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping158", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping158", "category": "Best Practice", - "startLine": 479, + "startLine": 2282, "startColumn": 3, - "endLine": 479, + "endLine": 2282, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource39' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping159' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource39", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping159", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping159", "category": "Best Practice", - "startLine": 481, + "startLine": 2285, "startColumn": 3, - "endLine": 481, + "endLine": 2285, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource40' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping160' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource40", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping160", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping160", "category": "Best Practice", - "startLine": 483, + "startLine": 2288, "startColumn": 3, - "endLine": 483, + "endLine": 2288, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource41' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping161' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource41", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping161", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping161", "category": "Best Practice", - "startLine": 485, + "startLine": 2291, "startColumn": 3, - "endLine": 485, + "endLine": 2291, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource42' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping162' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource42", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping162", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping162", "category": "Best Practice", - "startLine": 487, + "startLine": 2294, "startColumn": 3, - "endLine": 487, + "endLine": 2294, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource43' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping163' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource43", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping163", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping163", "category": "Best Practice", - "startLine": 489, + "startLine": 2297, "startColumn": 3, - "endLine": 489, + "endLine": 2297, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource44' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping164' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource44", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping164", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping164", "category": "Best Practice", - "startLine": 491, + "startLine": 2300, "startColumn": 3, - "endLine": 491, + "endLine": 2300, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource45' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping165' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource45", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping165", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping165", "category": "Best Practice", - "startLine": 493, + "startLine": 2303, "startColumn": 3, - "endLine": 493, + "endLine": 2303, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource46' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping166' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource46", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping166", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping166", "category": "Best Practice", - "startLine": 495, + "startLine": 2306, "startColumn": 3, - "endLine": 495, + "endLine": 2306, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource47' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping167' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource47", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping167", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping167", "category": "Best Practice", - "startLine": 497, + "startLine": 2309, "startColumn": 3, - "endLine": 497, + "endLine": 2309, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource48' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping168' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource48", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping168", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping168", "category": "Best Practice", - "startLine": 499, + "startLine": 2312, "startColumn": 3, - "endLine": 499, + "endLine": 2312, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource49' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping169' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource49", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping169", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping169", "category": "Best Practice", - "startLine": 501, + "startLine": 2315, "startColumn": 3, - "endLine": 501, + "endLine": 2315, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource50' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping170' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource50", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping170", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping170", "category": "Best Practice", - "startLine": 503, + "startLine": 2318, "startColumn": 3, - "endLine": 503, + "endLine": 2318, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource51' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping171' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource51", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping171", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping171", "category": "Best Practice", - "startLine": 505, + "startLine": 2321, "startColumn": 3, - "endLine": 505, + "endLine": 2321, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource52' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping172' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource52", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping172", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping172", "category": "Best Practice", - "startLine": 507, + "startLine": 2324, "startColumn": 3, - "endLine": 507, + "endLine": 2324, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource53' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping173' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource53", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping173", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping173", "category": "Best Practice", - "startLine": 509, + "startLine": 2327, "startColumn": 3, - "endLine": 509, + "endLine": 2327, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource54' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping174' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource54", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping174", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping174", "category": "Best Practice", - "startLine": 511, + "startLine": 2330, "startColumn": 3, - "endLine": 511, + "endLine": 2330, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource55' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping175' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource55", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping175", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping175", "category": "Best Practice", - "startLine": 513, + "startLine": 2333, "startColumn": 3, - "endLine": 513, + "endLine": 2333, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource56' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping176' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource56", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping176", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping176", "category": "Best Practice", - "startLine": 515, + "startLine": 2336, "startColumn": 3, - "endLine": 515, + "endLine": 2336, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource57' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping177' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource57", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping177", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping177", "category": "Best Practice", - "startLine": 517, + "startLine": 2339, "startColumn": 3, - "endLine": 517, + "endLine": 2339, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource58' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping178' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource58", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping178", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping178", "category": "Best Practice", - "startLine": 519, + "startLine": 2342, "startColumn": 3, - "endLine": 519, + "endLine": 2342, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource59' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping179' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource59", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping179", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping179", "category": "Best Practice", - "startLine": 521, + "startLine": 2345, "startColumn": 3, - "endLine": 521, + "endLine": 2345, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource60' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping180' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource60", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping180", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping180", "category": "Best Practice", - "startLine": 523, + "startLine": 2348, "startColumn": 3, - "endLine": 523, + "endLine": 2348, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource61' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping181' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource61", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping181", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping181", "category": "Best Practice", - "startLine": 525, + "startLine": 2351, "startColumn": 3, - "endLine": 525, + "endLine": 2351, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource62' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping182' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource62", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping182", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping182", "category": "Best Practice", - "startLine": 527, + "startLine": 2354, "startColumn": 3, - "endLine": 527, + "endLine": 2354, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource63' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping183' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource63", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping183", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping183", "category": "Best Practice", - "startLine": 529, + "startLine": 2357, "startColumn": 3, - "endLine": 529, + "endLine": 2357, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource64' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping184' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource64", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping184", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping184", "category": "Best Practice", - "startLine": 531, + "startLine": 2360, "startColumn": 3, - "endLine": 531, + "endLine": 2360, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource65' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping185' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource65", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping185", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping185", "category": "Best Practice", - "startLine": 533, + "startLine": 2363, "startColumn": 3, - "endLine": 533, + "endLine": 2363, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource66' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping186' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource66", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping186", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping186", "category": "Best Practice", - "startLine": 535, + "startLine": 2366, "startColumn": 3, - "endLine": 535, + "endLine": 2366, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource67' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping187' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource67", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping187", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping187", "category": "Best Practice", - "startLine": 537, + "startLine": 2369, "startColumn": 3, - "endLine": 537, + "endLine": 2369, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource68' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping188' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource68", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping188", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping188", "category": "Best Practice", - "startLine": 539, + "startLine": 2372, "startColumn": 3, - "endLine": 539, + "endLine": 2372, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource69' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping189' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource69", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping189", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping189", "category": "Best Practice", - "startLine": 541, + "startLine": 2375, "startColumn": 3, - "endLine": 541, + "endLine": 2375, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource70' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping190' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource70", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping190", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping190", "category": "Best Practice", - "startLine": 543, + "startLine": 2378, "startColumn": 3, - "endLine": 543, + "endLine": 2378, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource71' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping191' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource71", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping191", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping191", "category": "Best Practice", - "startLine": 545, + "startLine": 2381, "startColumn": 3, - "endLine": 545, + "endLine": 2381, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource72' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping192' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource72", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping192", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping192", "category": "Best Practice", - "startLine": 547, + "startLine": 2384, "startColumn": 3, - "endLine": 547, + "endLine": 2384, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource73' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping193' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource73", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping193", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping193", "category": "Best Practice", - "startLine": 549, + "startLine": 2387, "startColumn": 3, - "endLine": 549, + "endLine": 2387, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource74' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping194' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource74", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping194", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping194", "category": "Best Practice", - "startLine": 551, + "startLine": 2390, "startColumn": 3, - "endLine": 551, + "endLine": 2390, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource75' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping195' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource75", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping195", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping195", "category": "Best Practice", - "startLine": 553, + "startLine": 2393, "startColumn": 3, - "endLine": 553, + "endLine": 2393, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource76' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping196' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource76", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping196", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping196", "category": "Best Practice", - "startLine": 555, + "startLine": 2396, "startColumn": 3, - "endLine": 555, + "endLine": 2396, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource77' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping197' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource77", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping197", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping197", "category": "Best Practice", - "startLine": 557, + "startLine": 2399, "startColumn": 3, - "endLine": 557, + "endLine": 2399, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource78' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping198' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource78", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping198", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping198", "category": "Best Practice", - "startLine": 559, + "startLine": 2402, "startColumn": 3, - "endLine": 559, + "endLine": 2402, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource79' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping199' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource79", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping199", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping199", "category": "Best Practice", - "startLine": 561, + "startLine": 2405, "startColumn": 3, - "endLine": 561, + "endLine": 2405, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource80' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping200' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource80", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping200", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping200", "category": "Best Practice", - "startLine": 563, + "startLine": 2408, "startColumn": 3, - "endLine": 563, + "endLine": 2408, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource81' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Mapping201' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource81", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "Mapping201", + "entityType": "Mapping" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Mappings/Mapping201", "category": "Best Practice", - "startLine": 565, + "startLine": 2411, "startColumn": 3, - "endLine": 565, + "endLine": 2411, "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource82' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource1' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource82", + "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": 567, + "startLine": 405, "startColumn": 3, - "endLine": 567, - "endColumn": 13, + "endLine": 405, + "endColumn": 12, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource83' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource2' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource83", + "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": 569, + "startLine": 407, "startColumn": 3, - "endLine": 569, - "endColumn": 13, + "endLine": 407, + "endColumn": 12, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource84' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource3' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource84", + "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": 571, + "startLine": 409, "startColumn": 3, - "endLine": 571, - "endColumn": 13, + "endLine": 409, + "endColumn": 12, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource85' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource4' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource85", + "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": 573, + "startLine": 411, "startColumn": 3, - "endLine": 573, - "endColumn": 13, + "endLine": 411, + "endColumn": 12, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource86' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource5' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource86", + "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": 575, + "startLine": 413, "startColumn": 3, - "endLine": 575, - "endColumn": 13, + "endLine": 413, + "endColumn": 12, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource87' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource6' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource87", + "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": 577, + "startLine": 415, "startColumn": 3, - "endLine": 577, - "endColumn": 13, + "endLine": 415, + "endColumn": 12, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource88' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource7' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource88", + "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": 579, + "startLine": 417, "startColumn": 3, - "endLine": 579, - "endColumn": 13, + "endLine": 417, + "endColumn": 12, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource89' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource8' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource89", + "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": 581, + "startLine": 419, "startColumn": 3, - "endLine": 581, - "endColumn": 13, + "endLine": 419, + "endColumn": 12, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource90' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource9' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource90", + "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": 583, + "startLine": 421, "startColumn": 3, - "endLine": 583, - "endColumn": 13, + "endLine": 421, + "endColumn": 12, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource91' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource10' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource91", + "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": 585, + "startLine": 423, "startColumn": 3, - "endLine": 585, + "endLine": 423, "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -17662,19 +17430,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource92' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource11' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource92", + "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": 587, + "startLine": 425, "startColumn": 3, - "endLine": 587, + "endLine": 425, "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -17682,19 +17450,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource93' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource12' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource93", + "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": 589, + "startLine": 427, "startColumn": 3, - "endLine": 589, + "endLine": 427, "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -17702,19 +17470,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource94' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource13' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource94", + "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": 591, + "startLine": 429, "startColumn": 3, - "endLine": 591, + "endLine": 429, "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -17722,19 +17490,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource95' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource14' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource95", + "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": 593, + "startLine": 431, "startColumn": 3, - "endLine": 593, + "endLine": 431, "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -17742,19 +17510,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource96' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource15' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource96", + "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": 595, + "startLine": 433, "startColumn": 3, - "endLine": 595, + "endLine": 433, "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -17762,19 +17530,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource97' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource16' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource97", + "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": 597, + "startLine": 435, "startColumn": 3, - "endLine": 597, + "endLine": 435, "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -17782,19 +17550,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource98' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource17' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource98", + "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": 599, + "startLine": 437, "startColumn": 3, - "endLine": 599, + "endLine": 437, "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -17802,19 +17570,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource99' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource18' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource99", + "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": 601, + "startLine": 439, "startColumn": 3, - "endLine": 601, + "endLine": 439, "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -17822,1639 +17590,1639 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource100' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource19' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource100", + "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": 603, + "startLine": 441, "startColumn": 3, - "endLine": 603, - "endColumn": 14, + "endLine": 441, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource101' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource20' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource101", + "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": 605, + "startLine": 443, "startColumn": 3, - "endLine": 605, - "endColumn": 14, + "endLine": 443, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource102' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource21' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource102", + "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": 607, + "startLine": 445, "startColumn": 3, - "endLine": 607, - "endColumn": 14, + "endLine": 445, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource103' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource22' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource103", + "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": 609, + "startLine": 447, "startColumn": 3, - "endLine": 609, - "endColumn": 14, + "endLine": 447, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource104' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource23' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource104", + "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": 611, + "startLine": 449, "startColumn": 3, - "endLine": 611, - "endColumn": 14, + "endLine": 449, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource105' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource24' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource105", + "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": 613, + "startLine": 451, "startColumn": 3, - "endLine": 613, - "endColumn": 14, + "endLine": 451, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource106' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource25' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource106", + "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": 615, + "startLine": 453, "startColumn": 3, - "endLine": 615, - "endColumn": 14, + "endLine": 453, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource107' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource26' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource107", + "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": 617, + "startLine": 455, "startColumn": 3, - "endLine": 617, - "endColumn": 14, + "endLine": 455, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource108' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource27' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource108", + "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": 619, + "startLine": 457, "startColumn": 3, - "endLine": 619, - "endColumn": 14, + "endLine": 457, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource109' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource28' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource109", + "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": 621, + "startLine": 459, "startColumn": 3, - "endLine": 621, - "endColumn": 14, + "endLine": 459, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource110' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource29' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource110", + "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": 623, + "startLine": 461, "startColumn": 3, - "endLine": 623, - "endColumn": 14, + "endLine": 461, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource111' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource30' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource111", + "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": 625, + "startLine": 463, "startColumn": 3, - "endLine": 625, - "endColumn": 14, + "endLine": 463, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource112' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource31' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource112", + "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": 627, + "startLine": 465, "startColumn": 3, - "endLine": 627, - "endColumn": 14, + "endLine": 465, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource113' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource32' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource113", + "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": 629, + "startLine": 467, "startColumn": 3, - "endLine": 629, - "endColumn": 14, + "endLine": 467, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource114' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource33' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource114", + "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": 631, + "startLine": 469, "startColumn": 3, - "endLine": 631, - "endColumn": 14, + "endLine": 469, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource115' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource34' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource115", + "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": 633, + "startLine": 471, "startColumn": 3, - "endLine": 633, - "endColumn": 14, + "endLine": 471, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource116' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource35' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource116", + "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": 635, + "startLine": 473, "startColumn": 3, - "endLine": 635, - "endColumn": 14, + "endLine": 473, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource117' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource36' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource117", + "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": 637, + "startLine": 475, "startColumn": 3, - "endLine": 637, - "endColumn": 14, + "endLine": 475, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource118' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource37' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource118", + "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": 639, + "startLine": 477, "startColumn": 3, - "endLine": 639, - "endColumn": 14, + "endLine": 477, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource119' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource38' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource119", + "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": 641, + "startLine": 479, "startColumn": 3, - "endLine": 641, - "endColumn": 14, + "endLine": 479, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource120' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource39' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource120", + "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": 643, + "startLine": 481, "startColumn": 3, - "endLine": 643, - "endColumn": 14, + "endLine": 481, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource121' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource40' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource121", + "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": 645, + "startLine": 483, "startColumn": 3, - "endLine": 645, - "endColumn": 14, + "endLine": 483, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource122' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource41' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource122", + "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": 647, + "startLine": 485, "startColumn": 3, - "endLine": 647, - "endColumn": 14, + "endLine": 485, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource123' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource42' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource123", + "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": 649, + "startLine": 487, "startColumn": 3, - "endLine": 649, - "endColumn": 14, + "endLine": 487, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource124' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource43' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource124", + "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": 651, + "startLine": 489, "startColumn": 3, - "endLine": 651, - "endColumn": 14, + "endLine": 489, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource125' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource44' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource125", + "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": 653, + "startLine": 491, "startColumn": 3, - "endLine": 653, - "endColumn": 14, + "endLine": 491, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource126' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource45' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource126", + "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": 655, + "startLine": 493, "startColumn": 3, - "endLine": 655, - "endColumn": 14, + "endLine": 493, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource127' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource46' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource127", + "logicalId": "Resource46", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 657, + "startLine": 495, "startColumn": 3, - "endLine": 657, - "endColumn": 14, + "endLine": 495, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource128' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource47' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource128", + "logicalId": "Resource47", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 659, + "startLine": 497, "startColumn": 3, - "endLine": 659, - "endColumn": 14, + "endLine": 497, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource129' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource48' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource129", + "logicalId": "Resource48", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 661, + "startLine": 499, "startColumn": 3, - "endLine": 661, - "endColumn": 14, + "endLine": 499, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource130' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource49' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource130", + "logicalId": "Resource49", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 663, + "startLine": 501, "startColumn": 3, - "endLine": 663, - "endColumn": 14, + "endLine": 501, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource131' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource50' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource131", + "logicalId": "Resource50", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 665, + "startLine": 503, "startColumn": 3, - "endLine": 665, - "endColumn": 14, + "endLine": 503, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource132' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource51' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource132", + "logicalId": "Resource51", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 667, + "startLine": 505, "startColumn": 3, - "endLine": 667, - "endColumn": 14, + "endLine": 505, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource133' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource52' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource133", + "logicalId": "Resource52", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 669, + "startLine": 507, "startColumn": 3, - "endLine": 669, - "endColumn": 14, + "endLine": 507, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource134' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource53' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource134", + "logicalId": "Resource53", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 671, + "startLine": 509, "startColumn": 3, - "endLine": 671, - "endColumn": 14, + "endLine": 509, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource135' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource54' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource135", + "logicalId": "Resource54", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 673, + "startLine": 511, "startColumn": 3, - "endLine": 673, - "endColumn": 14, + "endLine": 511, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource136' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource55' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource136", + "logicalId": "Resource55", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 675, + "startLine": 513, "startColumn": 3, - "endLine": 675, - "endColumn": 14, + "endLine": 513, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource137' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource56' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource137", + "logicalId": "Resource56", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 677, + "startLine": 515, "startColumn": 3, - "endLine": 677, - "endColumn": 14, + "endLine": 515, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource138' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource57' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource138", + "logicalId": "Resource57", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 679, + "startLine": 517, "startColumn": 3, - "endLine": 679, - "endColumn": 14, + "endLine": 517, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource139' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource58' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource139", + "logicalId": "Resource58", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 681, + "startLine": 519, "startColumn": 3, - "endLine": 681, - "endColumn": 14, + "endLine": 519, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource140' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource59' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource140", + "logicalId": "Resource59", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 683, + "startLine": 521, "startColumn": 3, - "endLine": 683, - "endColumn": 14, + "endLine": 521, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource141' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource60' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource141", + "logicalId": "Resource60", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 685, + "startLine": 523, "startColumn": 3, - "endLine": 685, - "endColumn": 14, + "endLine": 523, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource142' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource61' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource142", + "logicalId": "Resource61", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 687, + "startLine": 525, "startColumn": 3, - "endLine": 687, - "endColumn": 14, + "endLine": 525, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource143' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource62' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource143", + "logicalId": "Resource62", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 689, + "startLine": 527, "startColumn": 3, - "endLine": 689, - "endColumn": 14, + "endLine": 527, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource144' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource63' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource144", + "logicalId": "Resource63", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 691, + "startLine": 529, "startColumn": 3, - "endLine": 691, - "endColumn": 14, + "endLine": 529, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource145' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource64' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource145", + "logicalId": "Resource64", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 693, + "startLine": 531, "startColumn": 3, - "endLine": 693, - "endColumn": 14, + "endLine": 531, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource146' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource65' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource146", + "logicalId": "Resource65", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 695, + "startLine": 533, "startColumn": 3, - "endLine": 695, - "endColumn": 14, + "endLine": 533, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource147' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource66' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource147", + "logicalId": "Resource66", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 697, + "startLine": 535, "startColumn": 3, - "endLine": 697, - "endColumn": 14, + "endLine": 535, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource148' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource67' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource148", + "logicalId": "Resource67", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 699, + "startLine": 537, "startColumn": 3, - "endLine": 699, - "endColumn": 14, + "endLine": 537, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource149' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource68' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource149", + "logicalId": "Resource68", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 701, + "startLine": 539, "startColumn": 3, - "endLine": 701, - "endColumn": 14, + "endLine": 539, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource150' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource69' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource150", + "logicalId": "Resource69", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 703, + "startLine": 541, "startColumn": 3, - "endLine": 703, - "endColumn": 14, + "endLine": 541, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource151' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource70' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource151", + "logicalId": "Resource70", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 705, + "startLine": 543, "startColumn": 3, - "endLine": 705, - "endColumn": 14, + "endLine": 543, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource152' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource71' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource152", + "logicalId": "Resource71", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 707, + "startLine": 545, "startColumn": 3, - "endLine": 707, - "endColumn": 14, + "endLine": 545, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource153' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource72' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource153", + "logicalId": "Resource72", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 709, + "startLine": 547, "startColumn": 3, - "endLine": 709, - "endColumn": 14, + "endLine": 547, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource154' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource73' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource154", + "logicalId": "Resource73", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 711, + "startLine": 549, "startColumn": 3, - "endLine": 711, - "endColumn": 14, + "endLine": 549, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource155' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource74' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource155", + "logicalId": "Resource74", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 713, + "startLine": 551, "startColumn": 3, - "endLine": 713, - "endColumn": 14, + "endLine": 551, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource156' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource75' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource156", + "logicalId": "Resource75", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 715, + "startLine": 553, "startColumn": 3, - "endLine": 715, - "endColumn": 14, + "endLine": 553, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource157' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource76' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource157", + "logicalId": "Resource76", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 717, + "startLine": 555, "startColumn": 3, - "endLine": 717, - "endColumn": 14, + "endLine": 555, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource158' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource77' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource158", + "logicalId": "Resource77", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 719, + "startLine": 557, "startColumn": 3, - "endLine": 719, - "endColumn": 14, + "endLine": 557, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource159' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource78' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource159", + "logicalId": "Resource78", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 721, + "startLine": 559, "startColumn": 3, - "endLine": 721, - "endColumn": 14, + "endLine": 559, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource160' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource79' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource160", + "logicalId": "Resource79", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 723, + "startLine": 561, "startColumn": 3, - "endLine": 723, - "endColumn": 14, + "endLine": 561, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource161' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource80' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource161", + "logicalId": "Resource80", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 725, + "startLine": 563, "startColumn": 3, - "endLine": 725, - "endColumn": 14, + "endLine": 563, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource162' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource81' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource162", + "logicalId": "Resource81", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 727, + "startLine": 565, "startColumn": 3, - "endLine": 727, - "endColumn": 14, + "endLine": 565, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource163' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource82' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource163", + "logicalId": "Resource82", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 729, + "startLine": 567, "startColumn": 3, - "endLine": 729, - "endColumn": 14, + "endLine": 567, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource164' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource83' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource164", + "logicalId": "Resource83", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 731, + "startLine": 569, "startColumn": 3, - "endLine": 731, - "endColumn": 14, + "endLine": 569, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource165' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource84' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource165", + "logicalId": "Resource84", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 733, + "startLine": 571, "startColumn": 3, - "endLine": 733, - "endColumn": 14, + "endLine": 571, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource166' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource85' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource166", + "logicalId": "Resource85", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 735, + "startLine": 573, "startColumn": 3, - "endLine": 735, - "endColumn": 14, + "endLine": 573, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource167' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource86' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource167", + "logicalId": "Resource86", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 737, + "startLine": 575, "startColumn": 3, - "endLine": 737, - "endColumn": 14, + "endLine": 575, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource168' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource87' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource168", + "logicalId": "Resource87", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 739, + "startLine": 577, "startColumn": 3, - "endLine": 739, - "endColumn": 14, + "endLine": 577, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource169' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource88' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource169", + "logicalId": "Resource88", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 741, + "startLine": 579, "startColumn": 3, - "endLine": 741, - "endColumn": 14, + "endLine": 579, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource170' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource89' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource170", + "logicalId": "Resource89", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 743, + "startLine": 581, "startColumn": 3, - "endLine": 743, - "endColumn": 14, + "endLine": 581, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource171' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource90' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource171", + "logicalId": "Resource90", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 745, + "startLine": 583, "startColumn": 3, - "endLine": 745, - "endColumn": 14, + "endLine": 583, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource172' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource91' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource172", + "logicalId": "Resource91", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 747, + "startLine": 585, "startColumn": 3, - "endLine": 747, - "endColumn": 14, + "endLine": 585, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource173' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource92' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource173", + "logicalId": "Resource92", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 749, + "startLine": 587, "startColumn": 3, - "endLine": 749, - "endColumn": 14, + "endLine": 587, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource174' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource93' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource174", + "logicalId": "Resource93", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 751, + "startLine": 589, "startColumn": 3, - "endLine": 751, - "endColumn": 14, + "endLine": 589, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource175' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource94' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource175", + "logicalId": "Resource94", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 753, + "startLine": 591, "startColumn": 3, - "endLine": 753, - "endColumn": 14, + "endLine": 591, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource176' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource95' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource176", + "logicalId": "Resource95", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 755, + "startLine": 593, "startColumn": 3, - "endLine": 755, - "endColumn": 14, + "endLine": 593, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource177' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource96' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource177", + "logicalId": "Resource96", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 757, + "startLine": 595, "startColumn": 3, - "endLine": 757, - "endColumn": 14, + "endLine": 595, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource178' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource97' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource178", + "logicalId": "Resource97", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 759, + "startLine": 597, "startColumn": 3, - "endLine": 759, - "endColumn": 14, + "endLine": 597, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource179' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource98' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource179", + "logicalId": "Resource98", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 761, + "startLine": 599, "startColumn": 3, - "endLine": 761, - "endColumn": 14, + "endLine": 599, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource180' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource99' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource180", + "logicalId": "Resource99", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 763, + "startLine": 601, "startColumn": 3, - "endLine": 763, - "endColumn": 14, + "endLine": 601, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource181' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource100' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource181", + "logicalId": "Resource100", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 765, + "startLine": 603, "startColumn": 3, - "endLine": 765, + "endLine": 603, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19462,19 +19230,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource182' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource101' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource182", + "logicalId": "Resource101", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 767, + "startLine": 605, "startColumn": 3, - "endLine": 767, + "endLine": 605, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19482,19 +19250,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource183' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource102' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource183", + "logicalId": "Resource102", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 769, + "startLine": 607, "startColumn": 3, - "endLine": 769, + "endLine": 607, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19502,19 +19270,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource184' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource103' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource184", + "logicalId": "Resource103", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 771, + "startLine": 609, "startColumn": 3, - "endLine": 771, + "endLine": 609, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19522,19 +19290,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource185' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource104' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource185", + "logicalId": "Resource104", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 773, + "startLine": 611, "startColumn": 3, - "endLine": 773, + "endLine": 611, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19542,19 +19310,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource186' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource105' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource186", + "logicalId": "Resource105", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 775, + "startLine": 613, "startColumn": 3, - "endLine": 775, + "endLine": 613, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19562,19 +19330,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource187' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource106' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource187", + "logicalId": "Resource106", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 777, + "startLine": 615, "startColumn": 3, - "endLine": 777, + "endLine": 615, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19582,19 +19350,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource188' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource107' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource188", + "logicalId": "Resource107", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 779, + "startLine": 617, "startColumn": 3, - "endLine": 779, + "endLine": 617, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19602,19 +19370,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource189' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource108' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource189", + "logicalId": "Resource108", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 781, + "startLine": 619, "startColumn": 3, - "endLine": 781, + "endLine": 619, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19622,19 +19390,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource190' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource109' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource190", + "logicalId": "Resource109", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 783, + "startLine": 621, "startColumn": 3, - "endLine": 783, + "endLine": 621, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19642,19 +19410,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource191' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource110' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource191", + "logicalId": "Resource110", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 785, + "startLine": 623, "startColumn": 3, - "endLine": 785, + "endLine": 623, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19662,19 +19430,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource192' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource111' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource192", + "logicalId": "Resource111", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 787, + "startLine": 625, "startColumn": 3, - "endLine": 787, + "endLine": 625, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19682,19 +19450,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource193' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource112' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource193", + "logicalId": "Resource112", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 789, + "startLine": 627, "startColumn": 3, - "endLine": 789, + "endLine": 627, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19702,19 +19470,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource194' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource113' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource194", + "logicalId": "Resource113", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 791, + "startLine": 629, "startColumn": 3, - "endLine": 791, + "endLine": 629, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19722,19 +19490,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource195' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource114' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource195", + "logicalId": "Resource114", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 793, + "startLine": 631, "startColumn": 3, - "endLine": 793, + "endLine": 631, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19742,19 +19510,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource196' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource115' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource196", + "logicalId": "Resource115", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 795, + "startLine": 633, "startColumn": 3, - "endLine": 795, + "endLine": 633, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19762,19 +19530,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource197' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource116' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource197", + "logicalId": "Resource116", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 797, + "startLine": 635, "startColumn": 3, - "endLine": 797, + "endLine": 635, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19782,19 +19550,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource198' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource117' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource198", + "logicalId": "Resource117", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 799, + "startLine": 637, "startColumn": 3, - "endLine": 799, + "endLine": 637, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19802,19 +19570,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource199' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource118' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource199", + "logicalId": "Resource118", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 801, + "startLine": 639, "startColumn": 3, - "endLine": 801, + "endLine": 639, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19822,19 +19590,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource200' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource119' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource200", + "logicalId": "Resource119", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 803, + "startLine": 641, "startColumn": 3, - "endLine": 803, + "endLine": 641, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19842,19 +19610,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource201' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource120' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource201", + "logicalId": "Resource120", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 805, + "startLine": 643, "startColumn": 3, - "endLine": 805, + "endLine": 643, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19862,19 +19630,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource202' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource121' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource202", + "logicalId": "Resource121", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 807, + "startLine": 645, "startColumn": 3, - "endLine": 807, + "endLine": 645, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19882,19 +19650,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource203' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource122' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource203", + "logicalId": "Resource122", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 809, + "startLine": 647, "startColumn": 3, - "endLine": 809, + "endLine": 647, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19902,19 +19670,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource204' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource123' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource204", + "logicalId": "Resource123", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 811, + "startLine": 649, "startColumn": 3, - "endLine": 811, + "endLine": 649, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19922,19 +19690,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource205' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource124' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource205", + "logicalId": "Resource124", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 813, + "startLine": 651, "startColumn": 3, - "endLine": 813, + "endLine": 651, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19942,19 +19710,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource206' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource125' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource206", + "logicalId": "Resource125", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 815, + "startLine": 653, "startColumn": 3, - "endLine": 815, + "endLine": 653, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19962,19 +19730,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource207' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource126' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource207", + "logicalId": "Resource126", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 817, + "startLine": 655, "startColumn": 3, - "endLine": 817, + "endLine": 655, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19982,19 +19750,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource208' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource127' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource208", + "logicalId": "Resource127", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 819, + "startLine": 657, "startColumn": 3, - "endLine": 819, + "endLine": 657, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20002,19 +19770,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource209' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource128' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource209", + "logicalId": "Resource128", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 821, + "startLine": 659, "startColumn": 3, - "endLine": 821, + "endLine": 659, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20022,19 +19790,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource210' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource129' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource210", + "logicalId": "Resource129", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 823, + "startLine": 661, "startColumn": 3, - "endLine": 823, + "endLine": 661, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20042,19 +19810,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource211' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource130' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource211", + "logicalId": "Resource130", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 825, + "startLine": 663, "startColumn": 3, - "endLine": 825, + "endLine": 663, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20062,19 +19830,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource212' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource131' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource212", + "logicalId": "Resource131", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 827, + "startLine": 665, "startColumn": 3, - "endLine": 827, + "endLine": 665, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20082,19 +19850,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource213' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource132' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource213", + "logicalId": "Resource132", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 829, + "startLine": 667, "startColumn": 3, - "endLine": 829, + "endLine": 667, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20102,19 +19870,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource214' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource133' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource214", + "logicalId": "Resource133", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 831, + "startLine": 669, "startColumn": 3, - "endLine": 831, + "endLine": 669, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20122,19 +19890,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource215' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource134' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource215", + "logicalId": "Resource134", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 833, + "startLine": 671, "startColumn": 3, - "endLine": 833, + "endLine": 671, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20142,19 +19910,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource216' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource135' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource216", + "logicalId": "Resource135", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 835, + "startLine": 673, "startColumn": 3, - "endLine": 835, + "endLine": 673, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20162,19 +19930,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource217' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource136' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource217", + "logicalId": "Resource136", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 837, + "startLine": 675, "startColumn": 3, - "endLine": 837, + "endLine": 675, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20182,19 +19950,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource218' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource137' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource218", + "logicalId": "Resource137", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 839, + "startLine": 677, "startColumn": 3, - "endLine": 839, + "endLine": 677, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20202,19 +19970,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource219' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource138' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource219", + "logicalId": "Resource138", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 841, + "startLine": 679, "startColumn": 3, - "endLine": 841, + "endLine": 679, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20222,19 +19990,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource220' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource139' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource220", + "logicalId": "Resource139", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 843, + "startLine": 681, "startColumn": 3, - "endLine": 843, + "endLine": 681, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20242,19 +20010,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource221' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource140' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource221", + "logicalId": "Resource140", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 845, + "startLine": 683, "startColumn": 3, - "endLine": 845, + "endLine": 683, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20262,19 +20030,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource222' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource141' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource222", + "logicalId": "Resource141", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 847, + "startLine": 685, "startColumn": 3, - "endLine": 847, + "endLine": 685, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20282,19 +20050,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource223' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource142' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource223", + "logicalId": "Resource142", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 849, + "startLine": 687, "startColumn": 3, - "endLine": 849, + "endLine": 687, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20302,19 +20070,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource224' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource143' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource224", + "logicalId": "Resource143", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 851, + "startLine": 689, "startColumn": 3, - "endLine": 851, + "endLine": 689, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20322,19 +20090,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource225' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource144' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource225", + "logicalId": "Resource144", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 853, + "startLine": 691, "startColumn": 3, - "endLine": 853, + "endLine": 691, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20342,19 +20110,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource226' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource145' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource226", + "logicalId": "Resource145", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 855, + "startLine": 693, "startColumn": 3, - "endLine": 855, + "endLine": 693, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20362,19 +20130,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource227' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource146' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource227", + "logicalId": "Resource146", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 857, + "startLine": 695, "startColumn": 3, - "endLine": 857, + "endLine": 695, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20382,19 +20150,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource228' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource147' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource228", + "logicalId": "Resource147", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 859, + "startLine": 697, "startColumn": 3, - "endLine": 859, + "endLine": 697, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20402,19 +20170,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource229' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource148' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource229", + "logicalId": "Resource148", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 861, + "startLine": 699, "startColumn": 3, - "endLine": 861, + "endLine": 699, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20422,19 +20190,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource230' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource149' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource230", + "logicalId": "Resource149", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 863, + "startLine": 701, "startColumn": 3, - "endLine": 863, + "endLine": 701, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20442,19 +20210,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource231' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource150' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource231", + "logicalId": "Resource150", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 865, + "startLine": 703, "startColumn": 3, - "endLine": 865, + "endLine": 703, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20462,19 +20230,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource232' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource151' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource232", + "logicalId": "Resource151", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 867, + "startLine": 705, "startColumn": 3, - "endLine": 867, + "endLine": 705, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20482,19 +20250,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource233' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource152' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource233", + "logicalId": "Resource152", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 869, + "startLine": 707, "startColumn": 3, - "endLine": 869, + "endLine": 707, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20502,19 +20270,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource234' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource153' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource234", + "logicalId": "Resource153", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 871, + "startLine": 709, "startColumn": 3, - "endLine": 871, + "endLine": 709, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20522,19 +20290,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource235' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource154' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource235", + "logicalId": "Resource154", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 873, + "startLine": 711, "startColumn": 3, - "endLine": 873, + "endLine": 711, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20542,19 +20310,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource236' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource155' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource236", + "logicalId": "Resource155", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 875, + "startLine": 713, "startColumn": 3, - "endLine": 875, + "endLine": 713, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20562,19 +20330,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource237' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource156' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource237", + "logicalId": "Resource156", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 877, + "startLine": 715, "startColumn": 3, - "endLine": 877, + "endLine": 715, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20582,19 +20350,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource238' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource157' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource238", + "logicalId": "Resource157", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 879, + "startLine": 717, "startColumn": 3, - "endLine": 879, + "endLine": 717, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20602,19 +20370,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource239' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource158' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource239", + "logicalId": "Resource158", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 881, + "startLine": 719, "startColumn": 3, - "endLine": 881, + "endLine": 719, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20622,19 +20390,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource240' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource159' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource240", + "logicalId": "Resource159", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 883, + "startLine": 721, "startColumn": 3, - "endLine": 883, + "endLine": 721, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20642,19 +20410,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource241' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource160' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource241", + "logicalId": "Resource160", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 885, + "startLine": 723, "startColumn": 3, - "endLine": 885, + "endLine": 723, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20662,19 +20430,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource242' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource161' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource242", + "logicalId": "Resource161", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 887, + "startLine": 725, "startColumn": 3, - "endLine": 887, + "endLine": 725, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20682,19 +20450,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource243' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource162' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource243", + "logicalId": "Resource162", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 889, + "startLine": 727, "startColumn": 3, - "endLine": 889, + "endLine": 727, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20702,19 +20470,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource244' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource163' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource244", + "logicalId": "Resource163", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 891, + "startLine": 729, "startColumn": 3, - "endLine": 891, + "endLine": 729, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20722,19 +20490,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource245' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource164' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource245", + "logicalId": "Resource164", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 893, + "startLine": 731, "startColumn": 3, - "endLine": 893, + "endLine": 731, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20742,19 +20510,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource246' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource165' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource246", + "logicalId": "Resource165", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 895, + "startLine": 733, "startColumn": 3, - "endLine": 895, + "endLine": 733, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20762,19 +20530,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource247' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource166' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource247", + "logicalId": "Resource166", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 897, + "startLine": 735, "startColumn": 3, - "endLine": 897, + "endLine": 735, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20782,19 +20550,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource248' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource167' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource248", + "logicalId": "Resource167", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 899, + "startLine": 737, "startColumn": 3, - "endLine": 899, + "endLine": 737, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20802,19 +20570,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource249' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource168' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource249", + "logicalId": "Resource168", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 901, + "startLine": 739, "startColumn": 3, - "endLine": 901, + "endLine": 739, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20822,19 +20590,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource250' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource169' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource250", + "logicalId": "Resource169", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 903, + "startLine": 741, "startColumn": 3, - "endLine": 903, + "endLine": 741, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20842,19 +20610,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource251' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource170' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource251", + "logicalId": "Resource170", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 905, + "startLine": 743, "startColumn": 3, - "endLine": 905, + "endLine": 743, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20862,19 +20630,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource252' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource171' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource252", + "logicalId": "Resource171", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 907, + "startLine": 745, "startColumn": 3, - "endLine": 907, + "endLine": 745, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20882,19 +20650,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource253' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource172' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource253", + "logicalId": "Resource172", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 909, + "startLine": 747, "startColumn": 3, - "endLine": 909, + "endLine": 747, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20902,19 +20670,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource254' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource173' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource254", + "logicalId": "Resource173", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 911, + "startLine": 749, "startColumn": 3, - "endLine": 911, + "endLine": 749, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20922,19 +20690,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource255' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource174' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource255", + "logicalId": "Resource174", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 913, + "startLine": 751, "startColumn": 3, - "endLine": 913, + "endLine": 751, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20942,19 +20710,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource256' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource175' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource256", + "logicalId": "Resource175", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 915, + "startLine": 753, "startColumn": 3, - "endLine": 915, + "endLine": 753, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20962,19 +20730,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource257' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource176' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource257", + "logicalId": "Resource176", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 917, + "startLine": 755, "startColumn": 3, - "endLine": 917, + "endLine": 755, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20982,19 +20750,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource258' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource177' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource258", + "logicalId": "Resource177", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 919, + "startLine": 757, "startColumn": 3, - "endLine": 919, + "endLine": 757, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21002,19 +20770,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource259' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource178' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource259", + "logicalId": "Resource178", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 921, + "startLine": 759, "startColumn": 3, - "endLine": 921, + "endLine": 759, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21022,19 +20790,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource260' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource179' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource260", + "logicalId": "Resource179", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 923, + "startLine": 761, "startColumn": 3, - "endLine": 923, + "endLine": 761, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21042,19 +20810,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource261' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource180' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource261", + "logicalId": "Resource180", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 925, + "startLine": 763, "startColumn": 3, - "endLine": 925, + "endLine": 763, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21062,19 +20830,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource262' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource181' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource262", + "logicalId": "Resource181", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 927, + "startLine": 765, "startColumn": 3, - "endLine": 927, + "endLine": 765, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21082,19 +20850,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource263' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource182' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource263", + "logicalId": "Resource182", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 929, + "startLine": 767, "startColumn": 3, - "endLine": 929, + "endLine": 767, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21102,19 +20870,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource264' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource183' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource264", + "logicalId": "Resource183", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 931, + "startLine": 769, "startColumn": 3, - "endLine": 931, + "endLine": 769, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21122,19 +20890,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource265' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource184' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource265", + "logicalId": "Resource184", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 933, + "startLine": 771, "startColumn": 3, - "endLine": 933, + "endLine": 771, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21142,19 +20910,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource266' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource185' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource266", + "logicalId": "Resource185", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 935, + "startLine": 773, "startColumn": 3, - "endLine": 935, + "endLine": 773, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21162,19 +20930,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource267' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource186' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource267", + "logicalId": "Resource186", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 937, + "startLine": 775, "startColumn": 3, - "endLine": 937, + "endLine": 775, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21182,19 +20950,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource268' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource187' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource268", + "logicalId": "Resource187", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 939, + "startLine": 777, "startColumn": 3, - "endLine": 939, + "endLine": 777, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21202,19 +20970,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource269' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource188' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource269", + "logicalId": "Resource188", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 941, + "startLine": 779, "startColumn": 3, - "endLine": 941, + "endLine": 779, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21222,19 +20990,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource270' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource189' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource270", + "logicalId": "Resource189", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 943, + "startLine": 781, "startColumn": 3, - "endLine": 943, + "endLine": 781, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21242,19 +21010,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource271' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource190' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource271", + "logicalId": "Resource190", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 945, + "startLine": 783, "startColumn": 3, - "endLine": 945, + "endLine": 783, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21262,19 +21030,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource272' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource191' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource272", + "logicalId": "Resource191", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 947, + "startLine": 785, "startColumn": 3, - "endLine": 947, + "endLine": 785, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21282,19 +21050,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource273' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource192' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource273", + "logicalId": "Resource192", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 949, + "startLine": 787, "startColumn": 3, - "endLine": 949, + "endLine": 787, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21302,19 +21070,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource274' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource193' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource274", + "logicalId": "Resource193", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 951, + "startLine": 789, "startColumn": 3, - "endLine": 951, + "endLine": 789, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21322,19 +21090,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource275' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource194' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource275", + "logicalId": "Resource194", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 953, + "startLine": 791, "startColumn": 3, - "endLine": 953, + "endLine": 791, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21342,19 +21110,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource276' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource195' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource276", + "logicalId": "Resource195", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 955, + "startLine": 793, "startColumn": 3, - "endLine": 955, + "endLine": 793, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21362,19 +21130,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource277' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource196' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource277", + "logicalId": "Resource196", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 957, + "startLine": 795, "startColumn": 3, - "endLine": 957, + "endLine": 795, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21382,19 +21150,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource278' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource197' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource278", + "logicalId": "Resource197", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 959, + "startLine": 797, "startColumn": 3, - "endLine": 959, + "endLine": 797, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21402,19 +21170,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource279' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource198' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource279", + "logicalId": "Resource198", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 961, + "startLine": 799, "startColumn": 3, - "endLine": 961, + "endLine": 799, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21422,19 +21190,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource280' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource199' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource280", + "logicalId": "Resource199", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 963, + "startLine": 801, "startColumn": 3, - "endLine": 963, + "endLine": 801, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21442,19 +21210,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource281' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource200' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource281", + "logicalId": "Resource200", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 965, + "startLine": 803, "startColumn": 3, - "endLine": 965, + "endLine": 803, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21462,19 +21230,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource282' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource201' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource282", + "logicalId": "Resource201", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 967, + "startLine": 805, "startColumn": 3, - "endLine": 967, + "endLine": 805, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21482,19 +21250,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource283' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource202' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource283", + "logicalId": "Resource202", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 969, + "startLine": 807, "startColumn": 3, - "endLine": 969, + "endLine": 807, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21502,19 +21270,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource284' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource203' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource284", + "logicalId": "Resource203", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 971, + "startLine": 809, "startColumn": 3, - "endLine": 971, + "endLine": 809, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21522,19 +21290,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource285' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource204' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource285", + "logicalId": "Resource204", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 973, + "startLine": 811, "startColumn": 3, - "endLine": 973, + "endLine": 811, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21542,19 +21310,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource286' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource205' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource286", + "logicalId": "Resource205", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 975, + "startLine": 813, "startColumn": 3, - "endLine": 975, + "endLine": 813, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21562,19 +21330,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource287' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource206' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource287", + "logicalId": "Resource206", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 977, + "startLine": 815, "startColumn": 3, - "endLine": 977, + "endLine": 815, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21582,19 +21350,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource288' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource207' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource288", + "logicalId": "Resource207", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 979, + "startLine": 817, "startColumn": 3, - "endLine": 979, + "endLine": 817, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21602,19 +21370,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource289' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource208' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource289", + "logicalId": "Resource208", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 981, + "startLine": 819, "startColumn": 3, - "endLine": 981, + "endLine": 819, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21622,19 +21390,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource290' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource209' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource290", + "logicalId": "Resource209", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 983, + "startLine": 821, "startColumn": 3, - "endLine": 983, + "endLine": 821, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21642,19 +21410,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource291' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource210' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource291", + "logicalId": "Resource210", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 985, + "startLine": 823, "startColumn": 3, - "endLine": 985, + "endLine": 823, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21662,19 +21430,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource292' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource211' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource292", + "logicalId": "Resource211", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 987, + "startLine": 825, "startColumn": 3, - "endLine": 987, + "endLine": 825, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21682,19 +21450,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource293' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource212' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource293", + "logicalId": "Resource212", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 989, + "startLine": 827, "startColumn": 3, - "endLine": 989, + "endLine": 827, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21702,19 +21470,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource294' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource213' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource294", + "logicalId": "Resource213", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 991, + "startLine": 829, "startColumn": 3, - "endLine": 991, + "endLine": 829, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21722,19 +21490,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource295' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource214' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource295", + "logicalId": "Resource214", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 993, + "startLine": 831, "startColumn": 3, - "endLine": 993, + "endLine": 831, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21742,19 +21510,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource296' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource215' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource296", + "logicalId": "Resource215", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 995, + "startLine": 833, "startColumn": 3, - "endLine": 995, + "endLine": 833, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21762,19 +21530,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource297' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource216' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource297", + "logicalId": "Resource216", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 997, + "startLine": 835, "startColumn": 3, - "endLine": 997, + "endLine": 835, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21782,19 +21550,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource298' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource217' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource298", + "logicalId": "Resource217", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 999, + "startLine": 837, "startColumn": 3, - "endLine": 999, + "endLine": 837, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21802,19 +21570,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource299' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource218' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource299", + "logicalId": "Resource218", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1001, + "startLine": 839, "startColumn": 3, - "endLine": 1001, + "endLine": 839, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21822,19 +21590,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource300' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource219' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource300", + "logicalId": "Resource219", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1003, + "startLine": 841, "startColumn": 3, - "endLine": 1003, + "endLine": 841, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21842,19 +21610,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource301' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource220' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource301", + "logicalId": "Resource220", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1005, + "startLine": 843, "startColumn": 3, - "endLine": 1005, + "endLine": 843, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21862,19 +21630,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource302' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource221' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource302", + "logicalId": "Resource221", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1007, + "startLine": 845, "startColumn": 3, - "endLine": 1007, + "endLine": 845, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21882,19 +21650,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource303' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource222' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource303", + "logicalId": "Resource222", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1009, + "startLine": 847, "startColumn": 3, - "endLine": 1009, + "endLine": 847, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21902,19 +21670,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource304' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource223' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource304", + "logicalId": "Resource223", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1011, + "startLine": 849, "startColumn": 3, - "endLine": 1011, + "endLine": 849, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21922,19 +21690,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource305' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource224' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource305", + "logicalId": "Resource224", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1013, + "startLine": 851, "startColumn": 3, - "endLine": 1013, + "endLine": 851, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21942,19 +21710,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource306' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource225' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource306", + "logicalId": "Resource225", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1015, + "startLine": 853, "startColumn": 3, - "endLine": 1015, + "endLine": 853, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21962,19 +21730,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource307' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource226' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource307", + "logicalId": "Resource226", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1017, + "startLine": 855, "startColumn": 3, - "endLine": 1017, + "endLine": 855, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21982,19 +21750,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource308' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource227' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource308", + "logicalId": "Resource227", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1019, + "startLine": 857, "startColumn": 3, - "endLine": 1019, + "endLine": 857, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22002,19 +21770,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource309' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource228' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource309", + "logicalId": "Resource228", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1021, + "startLine": 859, "startColumn": 3, - "endLine": 1021, + "endLine": 859, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22022,19 +21790,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource310' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource229' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource310", + "logicalId": "Resource229", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1023, + "startLine": 861, "startColumn": 3, - "endLine": 1023, + "endLine": 861, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22042,19 +21810,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource311' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource230' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource311", + "logicalId": "Resource230", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1025, + "startLine": 863, "startColumn": 3, - "endLine": 1025, + "endLine": 863, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22062,19 +21830,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource312' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource231' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource312", + "logicalId": "Resource231", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1027, + "startLine": 865, "startColumn": 3, - "endLine": 1027, + "endLine": 865, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22082,19 +21850,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource313' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource232' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource313", + "logicalId": "Resource232", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1029, + "startLine": 867, "startColumn": 3, - "endLine": 1029, + "endLine": 867, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22102,19 +21870,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource314' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource233' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource314", + "logicalId": "Resource233", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1031, + "startLine": 869, "startColumn": 3, - "endLine": 1031, + "endLine": 869, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22122,19 +21890,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource315' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource234' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource315", + "logicalId": "Resource234", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1033, + "startLine": 871, "startColumn": 3, - "endLine": 1033, + "endLine": 871, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22142,19 +21910,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource316' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource235' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource316", + "logicalId": "Resource235", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1035, + "startLine": 873, "startColumn": 3, - "endLine": 1035, + "endLine": 873, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22162,19 +21930,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource317' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource236' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource317", + "logicalId": "Resource236", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1037, + "startLine": 875, "startColumn": 3, - "endLine": 1037, + "endLine": 875, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22182,19 +21950,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource318' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource237' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource318", + "logicalId": "Resource237", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1039, + "startLine": 877, "startColumn": 3, - "endLine": 1039, + "endLine": 877, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22202,19 +21970,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource319' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource238' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource319", + "logicalId": "Resource238", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1041, + "startLine": 879, "startColumn": 3, - "endLine": 1041, + "endLine": 879, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22222,19 +21990,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource320' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource239' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource320", + "logicalId": "Resource239", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1043, + "startLine": 881, "startColumn": 3, - "endLine": 1043, + "endLine": 881, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22242,19 +22010,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource321' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource240' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource321", + "logicalId": "Resource240", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1045, + "startLine": 883, "startColumn": 3, - "endLine": 1045, + "endLine": 883, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22262,19 +22030,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource322' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource241' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource322", + "logicalId": "Resource241", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1047, + "startLine": 885, "startColumn": 3, - "endLine": 1047, + "endLine": 885, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22282,19 +22050,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource323' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource242' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource323", + "logicalId": "Resource242", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1049, + "startLine": 887, "startColumn": 3, - "endLine": 1049, + "endLine": 887, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22302,19 +22070,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource324' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource243' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource324", + "logicalId": "Resource243", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1051, + "startLine": 889, "startColumn": 3, - "endLine": 1051, + "endLine": 889, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22322,19 +22090,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource325' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource244' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource325", + "logicalId": "Resource244", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1053, + "startLine": 891, "startColumn": 3, - "endLine": 1053, + "endLine": 891, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22342,19 +22110,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource326' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource245' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource326", + "logicalId": "Resource245", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1055, + "startLine": 893, "startColumn": 3, - "endLine": 1055, + "endLine": 893, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22362,19 +22130,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource327' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource246' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource327", + "logicalId": "Resource246", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1057, + "startLine": 895, "startColumn": 3, - "endLine": 1057, + "endLine": 895, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22382,19 +22150,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource328' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource247' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource328", + "logicalId": "Resource247", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1059, + "startLine": 897, "startColumn": 3, - "endLine": 1059, + "endLine": 897, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22402,19 +22170,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource329' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource248' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource329", + "logicalId": "Resource248", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1061, + "startLine": 899, "startColumn": 3, - "endLine": 1061, + "endLine": 899, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22422,19 +22190,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource330' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource249' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource330", + "logicalId": "Resource249", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1063, + "startLine": 901, "startColumn": 3, - "endLine": 1063, + "endLine": 901, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22442,19 +22210,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource331' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource250' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource331", + "logicalId": "Resource250", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1065, + "startLine": 903, "startColumn": 3, - "endLine": 1065, + "endLine": 903, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22462,19 +22230,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource332' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource251' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource332", + "logicalId": "Resource251", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1067, + "startLine": 905, "startColumn": 3, - "endLine": 1067, + "endLine": 905, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22482,19 +22250,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource333' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource252' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource333", + "logicalId": "Resource252", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1069, + "startLine": 907, "startColumn": 3, - "endLine": 1069, + "endLine": 907, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22502,19 +22270,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource334' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource253' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource334", + "logicalId": "Resource253", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1071, + "startLine": 909, "startColumn": 3, - "endLine": 1071, + "endLine": 909, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22522,19 +22290,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource335' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource254' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource335", + "logicalId": "Resource254", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1073, + "startLine": 911, "startColumn": 3, - "endLine": 1073, + "endLine": 911, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22542,19 +22310,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource336' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource255' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource336", + "logicalId": "Resource255", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1075, + "startLine": 913, "startColumn": 3, - "endLine": 1075, + "endLine": 913, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22562,19 +22330,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource337' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource256' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource337", + "logicalId": "Resource256", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1077, + "startLine": 915, "startColumn": 3, - "endLine": 1077, + "endLine": 915, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22582,19 +22350,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource338' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource257' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource338", + "logicalId": "Resource257", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1079, + "startLine": 917, "startColumn": 3, - "endLine": 1079, + "endLine": 917, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22602,19 +22370,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource339' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource258' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource339", + "logicalId": "Resource258", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1081, + "startLine": 919, "startColumn": 3, - "endLine": 1081, + "endLine": 919, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22622,19 +22390,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource340' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource259' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource340", + "logicalId": "Resource259", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1083, + "startLine": 921, "startColumn": 3, - "endLine": 1083, + "endLine": 921, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22642,19 +22410,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource341' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource260' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource341", + "logicalId": "Resource260", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1085, + "startLine": 923, "startColumn": 3, - "endLine": 1085, + "endLine": 923, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22662,19 +22430,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource342' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource261' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource342", + "logicalId": "Resource261", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1087, + "startLine": 925, "startColumn": 3, - "endLine": 1087, + "endLine": 925, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22682,19 +22450,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource343' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource262' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource343", + "logicalId": "Resource262", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1089, + "startLine": 927, "startColumn": 3, - "endLine": 1089, + "endLine": 927, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22702,19 +22470,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource344' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource263' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource344", + "logicalId": "Resource263", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1091, + "startLine": 929, "startColumn": 3, - "endLine": 1091, + "endLine": 929, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22722,19 +22490,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource345' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource264' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource345", + "logicalId": "Resource264", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1093, + "startLine": 931, "startColumn": 3, - "endLine": 1093, + "endLine": 931, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22742,19 +22510,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource346' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource265' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource346", + "logicalId": "Resource265", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1095, + "startLine": 933, "startColumn": 3, - "endLine": 1095, + "endLine": 933, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22762,19 +22530,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource347' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource266' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource347", + "logicalId": "Resource266", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1097, + "startLine": 935, "startColumn": 3, - "endLine": 1097, + "endLine": 935, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22782,19 +22550,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource348' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource267' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource348", + "logicalId": "Resource267", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1099, + "startLine": 937, "startColumn": 3, - "endLine": 1099, + "endLine": 937, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22802,19 +22570,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource349' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource268' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource349", + "logicalId": "Resource268", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1101, + "startLine": 939, "startColumn": 3, - "endLine": 1101, + "endLine": 939, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22822,19 +22590,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource350' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource269' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource350", + "logicalId": "Resource269", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1103, + "startLine": 941, "startColumn": 3, - "endLine": 1103, + "endLine": 941, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22842,19 +22610,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource351' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource270' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource351", + "logicalId": "Resource270", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1105, + "startLine": 943, "startColumn": 3, - "endLine": 1105, + "endLine": 943, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22862,19 +22630,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource352' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource271' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource352", + "logicalId": "Resource271", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1107, + "startLine": 945, "startColumn": 3, - "endLine": 1107, + "endLine": 945, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22882,19 +22650,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource353' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource272' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource353", + "logicalId": "Resource272", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1109, + "startLine": 947, "startColumn": 3, - "endLine": 1109, + "endLine": 947, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22902,19 +22670,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource354' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource273' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource354", + "logicalId": "Resource273", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1111, + "startLine": 949, "startColumn": 3, - "endLine": 1111, + "endLine": 949, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22922,19 +22690,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource355' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource274' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource355", + "logicalId": "Resource274", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1113, + "startLine": 951, "startColumn": 3, - "endLine": 1113, + "endLine": 951, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22942,19 +22710,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource356' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource275' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource356", + "logicalId": "Resource275", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1115, + "startLine": 953, "startColumn": 3, - "endLine": 1115, + "endLine": 953, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22962,19 +22730,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource357' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource276' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource357", + "logicalId": "Resource276", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1117, + "startLine": 955, "startColumn": 3, - "endLine": 1117, + "endLine": 955, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22982,19 +22750,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource358' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource277' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource358", + "logicalId": "Resource277", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1119, + "startLine": 957, "startColumn": 3, - "endLine": 1119, + "endLine": 957, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23002,19 +22770,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource359' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource278' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource359", + "logicalId": "Resource278", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1121, + "startLine": 959, "startColumn": 3, - "endLine": 1121, + "endLine": 959, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23022,19 +22790,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource360' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource279' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource360", + "logicalId": "Resource279", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1123, + "startLine": 961, "startColumn": 3, - "endLine": 1123, + "endLine": 961, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23042,19 +22810,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource361' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource280' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource361", + "logicalId": "Resource280", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1125, + "startLine": 963, "startColumn": 3, - "endLine": 1125, + "endLine": 963, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23062,19 +22830,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource362' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource281' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource362", + "logicalId": "Resource281", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1127, + "startLine": 965, "startColumn": 3, - "endLine": 1127, + "endLine": 965, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23082,19 +22850,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource363' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource282' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource363", + "logicalId": "Resource282", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1129, + "startLine": 967, "startColumn": 3, - "endLine": 1129, + "endLine": 967, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23102,19 +22870,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource364' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource283' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource364", + "logicalId": "Resource283", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1131, + "startLine": 969, "startColumn": 3, - "endLine": 1131, + "endLine": 969, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23122,19 +22890,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource365' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource284' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource365", + "logicalId": "Resource284", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1133, + "startLine": 971, "startColumn": 3, - "endLine": 1133, + "endLine": 971, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23142,19 +22910,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource366' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource285' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource366", + "logicalId": "Resource285", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1135, + "startLine": 973, "startColumn": 3, - "endLine": 1135, + "endLine": 973, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23162,19 +22930,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource367' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource286' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource367", + "logicalId": "Resource286", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1137, + "startLine": 975, "startColumn": 3, - "endLine": 1137, + "endLine": 975, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23182,19 +22950,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource368' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource287' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource368", + "logicalId": "Resource287", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1139, + "startLine": 977, "startColumn": 3, - "endLine": 1139, + "endLine": 977, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23202,19 +22970,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource369' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource288' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource369", + "logicalId": "Resource288", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1141, + "startLine": 979, "startColumn": 3, - "endLine": 1141, + "endLine": 979, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23222,19 +22990,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource370' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource289' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource370", + "logicalId": "Resource289", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1143, + "startLine": 981, "startColumn": 3, - "endLine": 1143, + "endLine": 981, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23242,19 +23010,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource371' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource290' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource371", + "logicalId": "Resource290", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1145, + "startLine": 983, "startColumn": 3, - "endLine": 1145, + "endLine": 983, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23262,19 +23030,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource372' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource291' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource372", + "logicalId": "Resource291", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1147, + "startLine": 985, "startColumn": 3, - "endLine": 1147, + "endLine": 985, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23282,19 +23050,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource373' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource292' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource373", + "logicalId": "Resource292", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1149, + "startLine": 987, "startColumn": 3, - "endLine": 1149, + "endLine": 987, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23302,19 +23070,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource374' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource293' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource374", + "logicalId": "Resource293", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1151, + "startLine": 989, "startColumn": 3, - "endLine": 1151, + "endLine": 989, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23322,19 +23090,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource375' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource294' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource375", + "logicalId": "Resource294", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1153, + "startLine": 991, "startColumn": 3, - "endLine": 1153, + "endLine": 991, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23342,19 +23110,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource376' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource295' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource376", + "logicalId": "Resource295", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1155, + "startLine": 993, "startColumn": 3, - "endLine": 1155, + "endLine": 993, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23362,19 +23130,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource377' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource296' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource377", + "logicalId": "Resource296", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1157, + "startLine": 995, "startColumn": 3, - "endLine": 1157, + "endLine": 995, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23382,19 +23150,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource378' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource297' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource378", + "logicalId": "Resource297", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1159, + "startLine": 997, "startColumn": 3, - "endLine": 1159, + "endLine": 997, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23402,19 +23170,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource379' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource298' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource379", + "logicalId": "Resource298", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1161, + "startLine": 999, "startColumn": 3, - "endLine": 1161, + "endLine": 999, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23422,19 +23190,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource380' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource299' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource380", + "logicalId": "Resource299", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1163, + "startLine": 1001, "startColumn": 3, - "endLine": 1163, + "endLine": 1001, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23442,19 +23210,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource381' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource300' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource381", + "logicalId": "Resource300", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1165, + "startLine": 1003, "startColumn": 3, - "endLine": 1165, + "endLine": 1003, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23462,19 +23230,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource382' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource301' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource382", + "logicalId": "Resource301", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1167, + "startLine": 1005, "startColumn": 3, - "endLine": 1167, + "endLine": 1005, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23482,19 +23250,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource383' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource302' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource383", + "logicalId": "Resource302", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1169, + "startLine": 1007, "startColumn": 3, - "endLine": 1169, + "endLine": 1007, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23502,19 +23270,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource384' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource303' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource384", + "logicalId": "Resource303", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1171, + "startLine": 1009, "startColumn": 3, - "endLine": 1171, + "endLine": 1009, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23522,19 +23290,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource385' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource304' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource385", + "logicalId": "Resource304", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1173, + "startLine": 1011, "startColumn": 3, - "endLine": 1173, + "endLine": 1011, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23542,19 +23310,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource386' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource305' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource386", + "logicalId": "Resource305", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1175, + "startLine": 1013, "startColumn": 3, - "endLine": 1175, + "endLine": 1013, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23562,19 +23330,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource387' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource306' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource387", + "logicalId": "Resource306", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1177, + "startLine": 1015, "startColumn": 3, - "endLine": 1177, + "endLine": 1015, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23582,19 +23350,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource388' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource307' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource388", + "logicalId": "Resource307", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1179, + "startLine": 1017, "startColumn": 3, - "endLine": 1179, + "endLine": 1017, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23602,19 +23370,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource389' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource308' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource389", + "logicalId": "Resource308", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1181, + "startLine": 1019, "startColumn": 3, - "endLine": 1181, + "endLine": 1019, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23622,19 +23390,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource390' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource309' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource390", + "logicalId": "Resource309", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1183, + "startLine": 1021, "startColumn": 3, - "endLine": 1183, + "endLine": 1021, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23642,19 +23410,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource391' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource310' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource391", + "logicalId": "Resource310", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1185, + "startLine": 1023, "startColumn": 3, - "endLine": 1185, + "endLine": 1023, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23662,19 +23430,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource392' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource311' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource392", + "logicalId": "Resource311", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1187, + "startLine": 1025, "startColumn": 3, - "endLine": 1187, + "endLine": 1025, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23682,19 +23450,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource393' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource312' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource393", + "logicalId": "Resource312", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1189, + "startLine": 1027, "startColumn": 3, - "endLine": 1189, + "endLine": 1027, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23702,19 +23470,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource394' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource313' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource394", + "logicalId": "Resource313", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1191, + "startLine": 1029, "startColumn": 3, - "endLine": 1191, + "endLine": 1029, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23722,19 +23490,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource395' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource314' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource395", + "logicalId": "Resource314", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1193, + "startLine": 1031, "startColumn": 3, - "endLine": 1193, + "endLine": 1031, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23742,19 +23510,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource396' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource315' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource396", + "logicalId": "Resource315", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1195, + "startLine": 1033, "startColumn": 3, - "endLine": 1195, + "endLine": 1033, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23762,19 +23530,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource397' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource316' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource397", + "logicalId": "Resource316", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1197, + "startLine": 1035, "startColumn": 3, - "endLine": 1197, + "endLine": 1035, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23782,19 +23550,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource398' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource317' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource398", + "logicalId": "Resource317", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1199, + "startLine": 1037, "startColumn": 3, - "endLine": 1199, + "endLine": 1037, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23802,19 +23570,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource399' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource318' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource399", + "logicalId": "Resource318", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1201, + "startLine": 1039, "startColumn": 3, - "endLine": 1201, + "endLine": 1039, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23822,19 +23590,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource400' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource319' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource400", + "logicalId": "Resource319", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1203, + "startLine": 1041, "startColumn": 3, - "endLine": 1203, + "endLine": 1041, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23842,19 +23610,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource401' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource320' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource401", + "logicalId": "Resource320", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1205, + "startLine": 1043, "startColumn": 3, - "endLine": 1205, + "endLine": 1043, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23862,19 +23630,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource402' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource321' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource402", + "logicalId": "Resource321", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1207, + "startLine": 1045, "startColumn": 3, - "endLine": 1207, + "endLine": 1045, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23882,19 +23650,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource403' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource322' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource403", + "logicalId": "Resource322", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1209, + "startLine": 1047, "startColumn": 3, - "endLine": 1209, + "endLine": 1047, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23902,19 +23670,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource404' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource323' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource404", + "logicalId": "Resource323", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1211, + "startLine": 1049, "startColumn": 3, - "endLine": 1211, + "endLine": 1049, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23922,19 +23690,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource405' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource324' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource405", + "logicalId": "Resource324", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1213, + "startLine": 1051, "startColumn": 3, - "endLine": 1213, + "endLine": 1051, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23942,19 +23710,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource406' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource325' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource406", + "logicalId": "Resource325", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1215, + "startLine": 1053, "startColumn": 3, - "endLine": 1215, + "endLine": 1053, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23962,19 +23730,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource407' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource326' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource407", + "logicalId": "Resource326", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1217, + "startLine": 1055, "startColumn": 3, - "endLine": 1217, + "endLine": 1055, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23982,19 +23750,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource408' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource327' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource408", + "logicalId": "Resource327", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1219, + "startLine": 1057, "startColumn": 3, - "endLine": 1219, + "endLine": 1057, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24002,19 +23770,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource409' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource328' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource409", + "logicalId": "Resource328", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1221, + "startLine": 1059, "startColumn": 3, - "endLine": 1221, + "endLine": 1059, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24022,19 +23790,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource410' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource329' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource410", + "logicalId": "Resource329", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1223, + "startLine": 1061, "startColumn": 3, - "endLine": 1223, + "endLine": 1061, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24042,19 +23810,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource411' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource330' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource411", + "logicalId": "Resource330", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1225, + "startLine": 1063, "startColumn": 3, - "endLine": 1225, + "endLine": 1063, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24062,19 +23830,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource412' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource331' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource412", + "logicalId": "Resource331", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1227, + "startLine": 1065, "startColumn": 3, - "endLine": 1227, + "endLine": 1065, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24082,19 +23850,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource413' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource332' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource413", + "logicalId": "Resource332", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1229, + "startLine": 1067, "startColumn": 3, - "endLine": 1229, + "endLine": 1067, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24102,19 +23870,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource414' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource333' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource414", + "logicalId": "Resource333", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1231, + "startLine": 1069, "startColumn": 3, - "endLine": 1231, + "endLine": 1069, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24122,19 +23890,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource415' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource334' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource415", + "logicalId": "Resource334", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1233, + "startLine": 1071, "startColumn": 3, - "endLine": 1233, + "endLine": 1071, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24142,19 +23910,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource416' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource335' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource416", + "logicalId": "Resource335", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1235, + "startLine": 1073, "startColumn": 3, - "endLine": 1235, + "endLine": 1073, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24162,19 +23930,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource417' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource336' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource417", + "logicalId": "Resource336", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1237, + "startLine": 1075, "startColumn": 3, - "endLine": 1237, + "endLine": 1075, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24182,19 +23950,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource418' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource337' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource418", + "logicalId": "Resource337", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1239, + "startLine": 1077, "startColumn": 3, - "endLine": 1239, + "endLine": 1077, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24202,19 +23970,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource419' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource338' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource419", + "logicalId": "Resource338", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1241, + "startLine": 1079, "startColumn": 3, - "endLine": 1241, + "endLine": 1079, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24222,19 +23990,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource420' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource339' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource420", + "logicalId": "Resource339", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1243, + "startLine": 1081, "startColumn": 3, - "endLine": 1243, + "endLine": 1081, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24242,19 +24010,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource421' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource340' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource421", + "logicalId": "Resource340", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1245, + "startLine": 1083, "startColumn": 3, - "endLine": 1245, + "endLine": 1083, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24262,19 +24030,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource422' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource341' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource422", + "logicalId": "Resource341", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1247, + "startLine": 1085, "startColumn": 3, - "endLine": 1247, + "endLine": 1085, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24282,19 +24050,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource423' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource342' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource423", + "logicalId": "Resource342", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1249, + "startLine": 1087, "startColumn": 3, - "endLine": 1249, + "endLine": 1087, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24302,19 +24070,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource424' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource343' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource424", + "logicalId": "Resource343", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1251, + "startLine": 1089, "startColumn": 3, - "endLine": 1251, + "endLine": 1089, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24322,19 +24090,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource425' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource344' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource425", + "logicalId": "Resource344", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1253, + "startLine": 1091, "startColumn": 3, - "endLine": 1253, + "endLine": 1091, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24342,19 +24110,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource426' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource345' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource426", + "logicalId": "Resource345", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1255, + "startLine": 1093, "startColumn": 3, - "endLine": 1255, + "endLine": 1093, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24362,19 +24130,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource427' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource346' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource427", + "logicalId": "Resource346", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1257, + "startLine": 1095, "startColumn": 3, - "endLine": 1257, + "endLine": 1095, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24382,19 +24150,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource428' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource347' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource428", + "logicalId": "Resource347", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1259, + "startLine": 1097, "startColumn": 3, - "endLine": 1259, + "endLine": 1097, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24402,19 +24170,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource429' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource348' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource429", + "logicalId": "Resource348", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1261, + "startLine": 1099, "startColumn": 3, - "endLine": 1261, + "endLine": 1099, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24422,19 +24190,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource430' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource349' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource430", + "logicalId": "Resource349", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1263, + "startLine": 1101, "startColumn": 3, - "endLine": 1263, + "endLine": 1101, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24442,19 +24210,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource431' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource350' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource431", + "logicalId": "Resource350", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1265, + "startLine": 1103, "startColumn": 3, - "endLine": 1265, + "endLine": 1103, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24462,19 +24230,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource432' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource351' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource432", + "logicalId": "Resource351", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1267, + "startLine": 1105, "startColumn": 3, - "endLine": 1267, + "endLine": 1105, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24482,19 +24250,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource433' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource352' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource433", + "logicalId": "Resource352", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1269, + "startLine": 1107, "startColumn": 3, - "endLine": 1269, + "endLine": 1107, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24502,19 +24270,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource434' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource353' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource434", + "logicalId": "Resource353", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1271, + "startLine": 1109, "startColumn": 3, - "endLine": 1271, + "endLine": 1109, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24522,19 +24290,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource435' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource354' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource435", + "logicalId": "Resource354", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1273, + "startLine": 1111, "startColumn": 3, - "endLine": 1273, + "endLine": 1111, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24542,19 +24310,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource436' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource355' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource436", + "logicalId": "Resource355", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1275, + "startLine": 1113, "startColumn": 3, - "endLine": 1275, + "endLine": 1113, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24562,19 +24330,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource437' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource356' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource437", + "logicalId": "Resource356", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1277, + "startLine": 1115, "startColumn": 3, - "endLine": 1277, + "endLine": 1115, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24582,19 +24350,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource438' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource357' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource438", + "logicalId": "Resource357", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1279, + "startLine": 1117, "startColumn": 3, - "endLine": 1279, + "endLine": 1117, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24602,19 +24370,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource439' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource358' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource439", + "logicalId": "Resource358", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1281, + "startLine": 1119, "startColumn": 3, - "endLine": 1281, + "endLine": 1119, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24622,19 +24390,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource440' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource359' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource440", + "logicalId": "Resource359", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1283, + "startLine": 1121, "startColumn": 3, - "endLine": 1283, + "endLine": 1121, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24642,19 +24410,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource441' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource360' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource441", + "logicalId": "Resource360", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1285, + "startLine": 1123, "startColumn": 3, - "endLine": 1285, + "endLine": 1123, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24662,19 +24430,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource442' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource361' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource442", + "logicalId": "Resource361", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1287, + "startLine": 1125, "startColumn": 3, - "endLine": 1287, + "endLine": 1125, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24682,19 +24450,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource443' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource362' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource443", + "logicalId": "Resource362", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1289, + "startLine": 1127, "startColumn": 3, - "endLine": 1289, + "endLine": 1127, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24702,19 +24470,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource444' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource363' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource444", + "logicalId": "Resource363", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1291, + "startLine": 1129, "startColumn": 3, - "endLine": 1291, + "endLine": 1129, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24722,19 +24490,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource445' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource364' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource445", + "logicalId": "Resource364", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1293, + "startLine": 1131, "startColumn": 3, - "endLine": 1293, + "endLine": 1131, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24742,19 +24510,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource446' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource365' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource446", + "logicalId": "Resource365", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1295, + "startLine": 1133, "startColumn": 3, - "endLine": 1295, + "endLine": 1133, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24762,19 +24530,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource447' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource366' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource447", + "logicalId": "Resource366", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1297, + "startLine": 1135, "startColumn": 3, - "endLine": 1297, + "endLine": 1135, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24782,19 +24550,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource448' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource367' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource448", + "logicalId": "Resource367", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1299, + "startLine": 1137, "startColumn": 3, - "endLine": 1299, + "endLine": 1137, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24802,19 +24570,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource449' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource368' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource449", + "logicalId": "Resource368", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1301, + "startLine": 1139, "startColumn": 3, - "endLine": 1301, + "endLine": 1139, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24822,19 +24590,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource450' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource369' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource450", + "logicalId": "Resource369", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1303, + "startLine": 1141, "startColumn": 3, - "endLine": 1303, + "endLine": 1141, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24842,19 +24610,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource451' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource370' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource451", + "logicalId": "Resource370", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1305, + "startLine": 1143, "startColumn": 3, - "endLine": 1305, + "endLine": 1143, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24862,19 +24630,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource452' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource371' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource452", + "logicalId": "Resource371", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1307, + "startLine": 1145, "startColumn": 3, - "endLine": 1307, + "endLine": 1145, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24882,19 +24650,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource453' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource372' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource453", + "logicalId": "Resource372", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1309, + "startLine": 1147, "startColumn": 3, - "endLine": 1309, + "endLine": 1147, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24902,19 +24670,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource454' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource373' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource454", + "logicalId": "Resource373", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1311, + "startLine": 1149, "startColumn": 3, - "endLine": 1311, + "endLine": 1149, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24922,19 +24690,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource455' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource374' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource455", + "logicalId": "Resource374", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1313, + "startLine": 1151, "startColumn": 3, - "endLine": 1313, + "endLine": 1151, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24942,19 +24710,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource456' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource375' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource456", + "logicalId": "Resource375", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1315, + "startLine": 1153, "startColumn": 3, - "endLine": 1315, + "endLine": 1153, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24962,19 +24730,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource457' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource376' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource457", + "logicalId": "Resource376", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1317, + "startLine": 1155, "startColumn": 3, - "endLine": 1317, + "endLine": 1155, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24982,19 +24750,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource458' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource377' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource458", + "logicalId": "Resource377", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1319, + "startLine": 1157, "startColumn": 3, - "endLine": 1319, + "endLine": 1157, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25002,19 +24770,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource459' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource378' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource459", + "logicalId": "Resource378", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1321, + "startLine": 1159, "startColumn": 3, - "endLine": 1321, + "endLine": 1159, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25022,19 +24790,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource460' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource379' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource460", + "logicalId": "Resource379", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1323, + "startLine": 1161, "startColumn": 3, - "endLine": 1323, + "endLine": 1161, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25042,19 +24810,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource461' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource380' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource461", + "logicalId": "Resource380", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1325, + "startLine": 1163, "startColumn": 3, - "endLine": 1325, + "endLine": 1163, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25062,19 +24830,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource462' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource381' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource462", + "logicalId": "Resource381", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1327, + "startLine": 1165, "startColumn": 3, - "endLine": 1327, + "endLine": 1165, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25082,19 +24850,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource463' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource382' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource463", + "logicalId": "Resource382", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1329, + "startLine": 1167, "startColumn": 3, - "endLine": 1329, + "endLine": 1167, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25102,19 +24870,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource464' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource383' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource464", + "logicalId": "Resource383", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1331, + "startLine": 1169, "startColumn": 3, - "endLine": 1331, + "endLine": 1169, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25122,19 +24890,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource465' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource384' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource465", + "logicalId": "Resource384", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1333, + "startLine": 1171, "startColumn": 3, - "endLine": 1333, + "endLine": 1171, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25142,19 +24910,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource466' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource385' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource466", + "logicalId": "Resource385", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1335, + "startLine": 1173, "startColumn": 3, - "endLine": 1335, + "endLine": 1173, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25162,19 +24930,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource467' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource386' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource467", + "logicalId": "Resource386", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1337, + "startLine": 1175, "startColumn": 3, - "endLine": 1337, + "endLine": 1175, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25182,19 +24950,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource468' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource387' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource468", + "logicalId": "Resource387", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1339, + "startLine": 1177, "startColumn": 3, - "endLine": 1339, + "endLine": 1177, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25202,19 +24970,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource469' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource388' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource469", + "logicalId": "Resource388", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1341, + "startLine": 1179, "startColumn": 3, - "endLine": 1341, + "endLine": 1179, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25222,19 +24990,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource470' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource389' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource470", + "logicalId": "Resource389", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1343, + "startLine": 1181, "startColumn": 3, - "endLine": 1343, + "endLine": 1181, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25242,19 +25010,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource471' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource390' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource471", + "logicalId": "Resource390", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1345, + "startLine": 1183, "startColumn": 3, - "endLine": 1345, + "endLine": 1183, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25262,19 +25030,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource472' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource391' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource472", + "logicalId": "Resource391", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1347, + "startLine": 1185, "startColumn": 3, - "endLine": 1347, + "endLine": 1185, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25282,19 +25050,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource473' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource392' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource473", + "logicalId": "Resource392", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1349, + "startLine": 1187, "startColumn": 3, - "endLine": 1349, + "endLine": 1187, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25302,19 +25070,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource474' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource393' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource474", + "logicalId": "Resource393", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1351, + "startLine": 1189, "startColumn": 3, - "endLine": 1351, + "endLine": 1189, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25322,19 +25090,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource475' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource394' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource475", + "logicalId": "Resource394", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1353, + "startLine": 1191, "startColumn": 3, - "endLine": 1353, + "endLine": 1191, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25342,19 +25110,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource476' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource395' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource476", + "logicalId": "Resource395", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1355, + "startLine": 1193, "startColumn": 3, - "endLine": 1355, + "endLine": 1193, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25362,19 +25130,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource477' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource396' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource477", + "logicalId": "Resource396", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1357, + "startLine": 1195, "startColumn": 3, - "endLine": 1357, + "endLine": 1195, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25382,19 +25150,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource478' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource397' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource478", + "logicalId": "Resource397", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1359, + "startLine": 1197, "startColumn": 3, - "endLine": 1359, + "endLine": 1197, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25402,19 +25170,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource479' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource398' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource479", + "logicalId": "Resource398", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1361, + "startLine": 1199, "startColumn": 3, - "endLine": 1361, + "endLine": 1199, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25422,19 +25190,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource480' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource399' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource480", + "logicalId": "Resource399", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1363, + "startLine": 1201, "startColumn": 3, - "endLine": 1363, + "endLine": 1201, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25442,19 +25210,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource481' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource400' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource481", + "logicalId": "Resource400", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1365, + "startLine": 1203, "startColumn": 3, - "endLine": 1365, + "endLine": 1203, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25462,19 +25230,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource482' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource401' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource482", + "logicalId": "Resource401", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1367, + "startLine": 1205, "startColumn": 3, - "endLine": 1367, + "endLine": 1205, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25482,19 +25250,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource483' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource402' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource483", + "logicalId": "Resource402", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1369, + "startLine": 1207, "startColumn": 3, - "endLine": 1369, + "endLine": 1207, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25502,19 +25270,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource484' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource403' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource484", + "logicalId": "Resource403", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1371, + "startLine": 1209, "startColumn": 3, - "endLine": 1371, + "endLine": 1209, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25522,19 +25290,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource485' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource404' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource485", + "logicalId": "Resource404", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1373, + "startLine": 1211, "startColumn": 3, - "endLine": 1373, + "endLine": 1211, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25542,19 +25310,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource486' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource405' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource486", + "logicalId": "Resource405", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1375, + "startLine": 1213, "startColumn": 3, - "endLine": 1375, + "endLine": 1213, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25562,19 +25330,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource487' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource406' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource487", + "logicalId": "Resource406", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1377, + "startLine": 1215, "startColumn": 3, - "endLine": 1377, + "endLine": 1215, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25582,19 +25350,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource488' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource407' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource488", + "logicalId": "Resource407", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1379, + "startLine": 1217, "startColumn": 3, - "endLine": 1379, + "endLine": 1217, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25602,19 +25370,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource489' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource408' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource489", + "logicalId": "Resource408", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1381, + "startLine": 1219, "startColumn": 3, - "endLine": 1381, + "endLine": 1219, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25622,19 +25390,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource490' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource409' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource490", + "logicalId": "Resource409", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1383, + "startLine": 1221, "startColumn": 3, - "endLine": 1383, + "endLine": 1221, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25642,19 +25410,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource491' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource410' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource491", + "logicalId": "Resource410", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1385, + "startLine": 1223, "startColumn": 3, - "endLine": 1385, + "endLine": 1223, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25662,19 +25430,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource492' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource411' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource492", + "logicalId": "Resource411", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1387, + "startLine": 1225, "startColumn": 3, - "endLine": 1387, + "endLine": 1225, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25682,19 +25450,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource493' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource412' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource493", + "logicalId": "Resource412", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1389, + "startLine": 1227, "startColumn": 3, - "endLine": 1389, + "endLine": 1227, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25702,19 +25470,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource494' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource413' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource494", + "logicalId": "Resource413", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1391, + "startLine": 1229, "startColumn": 3, - "endLine": 1391, + "endLine": 1229, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25722,19 +25490,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource495' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource414' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource495", + "logicalId": "Resource414", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1393, + "startLine": 1231, "startColumn": 3, - "endLine": 1393, + "endLine": 1231, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25742,19 +25510,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource496' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource415' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource496", + "logicalId": "Resource415", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1395, + "startLine": 1233, "startColumn": 3, - "endLine": 1395, + "endLine": 1233, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25762,19 +25530,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource497' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource416' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource497", + "logicalId": "Resource416", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1397, + "startLine": 1235, "startColumn": 3, - "endLine": 1397, + "endLine": 1235, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25782,19 +25550,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource498' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource417' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource498", + "logicalId": "Resource417", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1399, + "startLine": 1237, "startColumn": 3, - "endLine": 1399, + "endLine": 1237, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25802,19 +25570,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource499' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource418' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource499", + "logicalId": "Resource418", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1401, + "startLine": 1239, "startColumn": 3, - "endLine": 1401, + "endLine": 1239, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25822,19 +25590,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource500' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource419' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource500", + "logicalId": "Resource419", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1403, + "startLine": 1241, "startColumn": 3, - "endLine": 1403, + "endLine": 1241, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -25842,2262 +25610,1674 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource501' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Resource420' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource501", + "logicalId": "Resource420", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1405, + "startLine": 1243, "startColumn": 3, - "endLine": 1405, + "endLine": 1243, "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/limit_size.yaml": { - "filePath": "bad/limit_size.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 299, - "counts": { - "fatal": 1, - "errors": 299, - "warnings": 897, - "informational": 898, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F0011", - "severity": "FATAL", - "message": "Description length 1026 exceeds maximum 1024", - "source": "SCHEMA", - "category": "Structure", - "startLine": 3, - "startColumn": 1, - "endLine": 3, - "endColumn": 10, - "ruleDescription": "Description exceeds maximum 1024 characters", - "phase": "SCHEMA" - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 89, - "startColumn": 7, - "endLine": 89, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 188, - "startColumn": 7, - "endLine": 188, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 287, - "startColumn": 7, - "endLine": 287, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource4", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 386, - "startColumn": 7, - "endLine": 386, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource5", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 485, - "startColumn": 7, - "endLine": 485, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource6", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 584, - "startColumn": 7, - "endLine": 584, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource7", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 683, - "startColumn": 7, - "endLine": 683, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource8", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 782, - "startColumn": 7, - "endLine": 782, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource9", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 881, - "startColumn": 7, - "endLine": 881, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource10", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 980, - "startColumn": 7, - "endLine": 980, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource11", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 1079, - "startColumn": 7, - "endLine": 1079, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource12", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 1178, - "startColumn": 7, - "endLine": 1178, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource13", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 1277, - "startColumn": 7, - "endLine": 1277, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource14", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 1376, - "startColumn": 7, - "endLine": 1376, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource15", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 1475, - "startColumn": 7, - "endLine": 1475, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource16", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 1574, - "startColumn": 7, - "endLine": 1574, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource421' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource17", + "logicalId": "Resource421", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 1673, - "startColumn": 7, - "endLine": 1673, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1245, + "startColumn": 3, + "endLine": 1245, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource422' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource18", + "logicalId": "Resource422", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 1772, - "startColumn": 7, - "endLine": 1772, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1247, + "startColumn": 3, + "endLine": 1247, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource423' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource19", + "logicalId": "Resource423", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 1871, - "startColumn": 7, - "endLine": 1871, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1249, + "startColumn": 3, + "endLine": 1249, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource424' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource20", + "logicalId": "Resource424", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 1970, - "startColumn": 7, - "endLine": 1970, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1251, + "startColumn": 3, + "endLine": 1251, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource425' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource21", + "logicalId": "Resource425", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 2069, - "startColumn": 7, - "endLine": 2069, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1253, + "startColumn": 3, + "endLine": 1253, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource426' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource22", + "logicalId": "Resource426", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 2168, - "startColumn": 7, - "endLine": 2168, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1255, + "startColumn": 3, + "endLine": 1255, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource427' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource23", + "logicalId": "Resource427", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 2267, - "startColumn": 7, - "endLine": 2267, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1257, + "startColumn": 3, + "endLine": 1257, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource428' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource24", + "logicalId": "Resource428", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 2366, - "startColumn": 7, - "endLine": 2366, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1259, + "startColumn": 3, + "endLine": 1259, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource429' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource25", + "logicalId": "Resource429", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 2465, - "startColumn": 7, - "endLine": 2465, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1261, + "startColumn": 3, + "endLine": 1261, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource430' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource26", + "logicalId": "Resource430", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 2564, - "startColumn": 7, - "endLine": 2564, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1263, + "startColumn": 3, + "endLine": 1263, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource431' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource27", + "logicalId": "Resource431", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 2663, - "startColumn": 7, - "endLine": 2663, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1265, + "startColumn": 3, + "endLine": 1265, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource432' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource28", + "logicalId": "Resource432", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 2762, - "startColumn": 7, - "endLine": 2762, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1267, + "startColumn": 3, + "endLine": 1267, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource433' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource29", + "logicalId": "Resource433", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 2861, - "startColumn": 7, - "endLine": 2861, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1269, + "startColumn": 3, + "endLine": 1269, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource434' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource30", + "logicalId": "Resource434", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 2960, - "startColumn": 7, - "endLine": 2960, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1271, + "startColumn": 3, + "endLine": 1271, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource435' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource31", + "logicalId": "Resource435", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 3059, - "startColumn": 7, - "endLine": 3059, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1273, + "startColumn": 3, + "endLine": 1273, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource436' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource32", + "logicalId": "Resource436", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 3158, - "startColumn": 7, - "endLine": 3158, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1275, + "startColumn": 3, + "endLine": 1275, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource437' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource33", + "logicalId": "Resource437", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 3257, - "startColumn": 7, - "endLine": 3257, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1277, + "startColumn": 3, + "endLine": 1277, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource438' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource34", + "logicalId": "Resource438", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 3356, - "startColumn": 7, - "endLine": 3356, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1279, + "startColumn": 3, + "endLine": 1279, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource439' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource35", + "logicalId": "Resource439", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 3455, - "startColumn": 7, - "endLine": 3455, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1281, + "startColumn": 3, + "endLine": 1281, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource440' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource36", + "logicalId": "Resource440", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 3554, - "startColumn": 7, - "endLine": 3554, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1283, + "startColumn": 3, + "endLine": 1283, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource441' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource37", + "logicalId": "Resource441", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 3653, - "startColumn": 7, - "endLine": 3653, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1285, + "startColumn": 3, + "endLine": 1285, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource442' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource38", + "logicalId": "Resource442", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 3752, - "startColumn": 7, - "endLine": 3752, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1287, + "startColumn": 3, + "endLine": 1287, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource443' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource39", + "logicalId": "Resource443", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 3851, - "startColumn": 7, - "endLine": 3851, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1289, + "startColumn": 3, + "endLine": 1289, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource444' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource40", + "logicalId": "Resource444", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 3950, - "startColumn": 7, - "endLine": 3950, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1291, + "startColumn": 3, + "endLine": 1291, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource445' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource41", + "logicalId": "Resource445", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 4049, - "startColumn": 7, - "endLine": 4049, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1293, + "startColumn": 3, + "endLine": 1293, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource446' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource42", + "logicalId": "Resource446", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 4148, - "startColumn": 7, - "endLine": 4148, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1295, + "startColumn": 3, + "endLine": 1295, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource447' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource43", + "logicalId": "Resource447", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 4247, - "startColumn": 7, - "endLine": 4247, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1297, + "startColumn": 3, + "endLine": 1297, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource448' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource44", + "logicalId": "Resource448", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 4346, - "startColumn": 7, - "endLine": 4346, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1299, + "startColumn": 3, + "endLine": 1299, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource449' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource45", + "logicalId": "Resource449", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 4445, - "startColumn": 7, - "endLine": 4445, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1301, + "startColumn": 3, + "endLine": 1301, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource450' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource46", + "logicalId": "Resource450", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 4544, - "startColumn": 7, - "endLine": 4544, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1303, + "startColumn": 3, + "endLine": 1303, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource451' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource47", + "logicalId": "Resource451", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 4643, - "startColumn": 7, - "endLine": 4643, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1305, + "startColumn": 3, + "endLine": 1305, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource452' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource48", + "logicalId": "Resource452", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 4742, - "startColumn": 7, - "endLine": 4742, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1307, + "startColumn": 3, + "endLine": 1307, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource453' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource49", + "logicalId": "Resource453", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 4841, - "startColumn": 7, - "endLine": 4841, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1309, + "startColumn": 3, + "endLine": 1309, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource454' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource50", + "logicalId": "Resource454", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 4940, - "startColumn": 7, - "endLine": 4940, + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1311, + "startColumn": 3, + "endLine": 1311, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource455' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource51", + "logicalId": "Resource455", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 5039, - "startColumn": 7, - "endLine": 5039, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1313, + "startColumn": 3, + "endLine": 1313, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource456' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource52", + "logicalId": "Resource456", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 5138, - "startColumn": 7, - "endLine": 5138, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1315, + "startColumn": 3, + "endLine": 1315, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource457' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource53", + "logicalId": "Resource457", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 5237, - "startColumn": 7, - "endLine": 5237, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1317, + "startColumn": 3, + "endLine": 1317, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource458' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource54", + "logicalId": "Resource458", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 5336, - "startColumn": 7, - "endLine": 5336, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1319, + "startColumn": 3, + "endLine": 1319, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource459' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource55", + "logicalId": "Resource459", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 5435, - "startColumn": 7, - "endLine": 5435, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1321, + "startColumn": 3, + "endLine": 1321, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource460' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource56", + "logicalId": "Resource460", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 5534, - "startColumn": 7, - "endLine": 5534, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1323, + "startColumn": 3, + "endLine": 1323, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource461' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource57", + "logicalId": "Resource461", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 5633, - "startColumn": 7, - "endLine": 5633, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1325, + "startColumn": 3, + "endLine": 1325, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource462' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource58", + "logicalId": "Resource462", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 5732, - "startColumn": 7, - "endLine": 5732, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1327, + "startColumn": 3, + "endLine": 1327, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource463' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource59", + "logicalId": "Resource463", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 5831, - "startColumn": 7, - "endLine": 5831, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1329, + "startColumn": 3, + "endLine": 1329, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource464' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource60", + "logicalId": "Resource464", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 5930, - "startColumn": 7, - "endLine": 5930, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1331, + "startColumn": 3, + "endLine": 1331, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource465' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource61", + "logicalId": "Resource465", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 6029, - "startColumn": 7, - "endLine": 6029, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1333, + "startColumn": 3, + "endLine": 1333, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource466' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource62", + "logicalId": "Resource466", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 6128, - "startColumn": 7, - "endLine": 6128, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1335, + "startColumn": 3, + "endLine": 1335, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource467' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource63", + "logicalId": "Resource467", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 6227, - "startColumn": 7, - "endLine": 6227, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1337, + "startColumn": 3, + "endLine": 1337, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource468' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource64", + "logicalId": "Resource468", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 6326, - "startColumn": 7, - "endLine": 6326, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1339, + "startColumn": 3, + "endLine": 1339, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource469' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource65", + "logicalId": "Resource469", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 6425, - "startColumn": 7, - "endLine": 6425, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1341, + "startColumn": 3, + "endLine": 1341, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource470' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource66", + "logicalId": "Resource470", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 6524, - "startColumn": 7, - "endLine": 6524, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1343, + "startColumn": 3, + "endLine": 1343, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource471' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource67", + "logicalId": "Resource471", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 6623, - "startColumn": 7, - "endLine": 6623, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1345, + "startColumn": 3, + "endLine": 1345, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource472' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource68", + "logicalId": "Resource472", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 6722, - "startColumn": 7, - "endLine": 6722, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1347, + "startColumn": 3, + "endLine": 1347, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource473' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource69", + "logicalId": "Resource473", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 6821, - "startColumn": 7, - "endLine": 6821, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1349, + "startColumn": 3, + "endLine": 1349, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource474' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource70", + "logicalId": "Resource474", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 6920, - "startColumn": 7, - "endLine": 6920, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1351, + "startColumn": 3, + "endLine": 1351, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource475' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource71", + "logicalId": "Resource475", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 7019, - "startColumn": 7, - "endLine": 7019, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1353, + "startColumn": 3, + "endLine": 1353, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource476' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource72", + "logicalId": "Resource476", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 7118, - "startColumn": 7, - "endLine": 7118, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1355, + "startColumn": 3, + "endLine": 1355, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource477' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource73", + "logicalId": "Resource477", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 7217, - "startColumn": 7, - "endLine": 7217, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1357, + "startColumn": 3, + "endLine": 1357, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource478' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource74", + "logicalId": "Resource478", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 7316, - "startColumn": 7, - "endLine": 7316, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1359, + "startColumn": 3, + "endLine": 1359, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource479' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource75", + "logicalId": "Resource479", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 7415, - "startColumn": 7, - "endLine": 7415, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1361, + "startColumn": 3, + "endLine": 1361, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource480' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource76", + "logicalId": "Resource480", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 7514, - "startColumn": 7, - "endLine": 7514, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1363, + "startColumn": 3, + "endLine": 1363, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource481' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource77", + "logicalId": "Resource481", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 7613, - "startColumn": 7, - "endLine": 7613, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1365, + "startColumn": 3, + "endLine": 1365, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource482' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource78", + "logicalId": "Resource482", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 7712, - "startColumn": 7, - "endLine": 7712, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1367, + "startColumn": 3, + "endLine": 1367, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource483' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource79", + "logicalId": "Resource483", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 7811, - "startColumn": 7, - "endLine": 7811, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1369, + "startColumn": 3, + "endLine": 1369, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource484' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource80", + "logicalId": "Resource484", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 7910, - "startColumn": 7, - "endLine": 7910, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1371, + "startColumn": 3, + "endLine": 1371, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource485' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource81", + "logicalId": "Resource485", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 8009, - "startColumn": 7, - "endLine": 8009, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1373, + "startColumn": 3, + "endLine": 1373, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource486' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource82", + "logicalId": "Resource486", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 8108, - "startColumn": 7, - "endLine": 8108, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1375, + "startColumn": 3, + "endLine": 1375, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource487' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource487", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1377, + "startColumn": 3, + "endLine": 1377, + "endColumn": 14, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource488' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource83", + "logicalId": "Resource488", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 8207, - "startColumn": 7, - "endLine": 8207, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1379, + "startColumn": 3, + "endLine": 1379, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource489' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource84", + "logicalId": "Resource489", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 8306, - "startColumn": 7, - "endLine": 8306, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1381, + "startColumn": 3, + "endLine": 1381, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource490' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource85", + "logicalId": "Resource490", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 8405, - "startColumn": 7, - "endLine": 8405, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1383, + "startColumn": 3, + "endLine": 1383, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource491' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource86", + "logicalId": "Resource491", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 8504, - "startColumn": 7, - "endLine": 8504, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1385, + "startColumn": 3, + "endLine": 1385, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource492' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource87", + "logicalId": "Resource492", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 8603, - "startColumn": 7, - "endLine": 8603, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1387, + "startColumn": 3, + "endLine": 1387, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource493' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource88", + "logicalId": "Resource493", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 8702, - "startColumn": 7, - "endLine": 8702, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1389, + "startColumn": 3, + "endLine": 1389, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource494' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource89", + "logicalId": "Resource494", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 8801, - "startColumn": 7, - "endLine": 8801, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1391, + "startColumn": 3, + "endLine": 1391, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource495' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource90", + "logicalId": "Resource495", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 8900, - "startColumn": 7, - "endLine": 8900, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1393, + "startColumn": 3, + "endLine": 1393, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource496' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource91", + "logicalId": "Resource496", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 8999, - "startColumn": 7, - "endLine": 8999, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1395, + "startColumn": 3, + "endLine": 1395, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource497' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource92", + "logicalId": "Resource497", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 9098, - "startColumn": 7, - "endLine": 9098, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1397, + "startColumn": 3, + "endLine": 1397, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource498' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource93", + "logicalId": "Resource498", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 9197, - "startColumn": 7, - "endLine": 9197, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1399, + "startColumn": 3, + "endLine": 1399, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource499' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource94", + "logicalId": "Resource499", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 9296, - "startColumn": 7, - "endLine": 9296, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1401, + "startColumn": 3, + "endLine": 1401, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource500' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource95", + "logicalId": "Resource500", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 9395, - "startColumn": 7, - "endLine": 9395, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1403, + "startColumn": 3, + "endLine": 1403, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource501' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource96", + "logicalId": "Resource501", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 9494, - "startColumn": 7, - "endLine": 9494, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1405, + "startColumn": 3, + "endLine": 1405, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-ami" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/limit_size.yaml": { + "filePath": "bad/limit_size.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 299, + "counts": { + "fatal": 1, + "errors": 299, + "warnings": 897, + "informational": 898, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F0011", + "severity": "FATAL", + "message": "Description length 1026 exceeds maximum 1024", + "source": "SCHEMA", + "category": "Structure", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Description exceeds maximum 1024 characters", + "phase": "SCHEMA" }, { "ruleId": "E1152", @@ -28105,15 +27285,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource97", + "logicalId": "Resource1", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 9593, + "startLine": 89, "startColumn": 7, - "endLine": 9593, + "endLine": 89, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28128,15 +27308,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource98", + "logicalId": "Resource2", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 9692, + "startLine": 188, "startColumn": 7, - "endLine": 9692, + "endLine": 188, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28151,15 +27331,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource99", + "logicalId": "Resource3", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 9791, + "startLine": 287, "startColumn": 7, - "endLine": 9791, + "endLine": 287, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28174,15 +27354,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource100", + "logicalId": "Resource4", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 9890, + "startLine": 386, "startColumn": 7, - "endLine": 9890, + "endLine": 386, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28197,15 +27377,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource101", + "logicalId": "Resource5", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 9989, + "startLine": 485, "startColumn": 7, - "endLine": 9989, + "endLine": 485, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28220,15 +27400,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource102", + "logicalId": "Resource6", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 10088, + "startLine": 584, "startColumn": 7, - "endLine": 10088, + "endLine": 584, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28243,15 +27423,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource103", + "logicalId": "Resource7", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 10187, + "startLine": 683, "startColumn": 7, - "endLine": 10187, + "endLine": 683, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28266,15 +27446,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource104", + "logicalId": "Resource8", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 10286, + "startLine": 782, "startColumn": 7, - "endLine": 10286, + "endLine": 782, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28289,15 +27469,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource105", + "logicalId": "Resource9", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 10385, + "startLine": 881, "startColumn": 7, - "endLine": 10385, + "endLine": 881, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28312,15 +27492,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource106", + "logicalId": "Resource10", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 10484, + "startLine": 980, "startColumn": 7, - "endLine": 10484, + "endLine": 980, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28335,15 +27515,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource107", + "logicalId": "Resource11", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 10583, + "startLine": 1079, "startColumn": 7, - "endLine": 10583, + "endLine": 1079, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28358,15 +27538,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource108", + "logicalId": "Resource12", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 10682, + "startLine": 1178, "startColumn": 7, - "endLine": 10682, + "endLine": 1178, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28381,15 +27561,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource109", + "logicalId": "Resource13", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 10781, + "startLine": 1277, "startColumn": 7, - "endLine": 10781, + "endLine": 1277, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28404,15 +27584,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource110", + "logicalId": "Resource14", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 10880, + "startLine": 1376, "startColumn": 7, - "endLine": 10880, + "endLine": 1376, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28427,15 +27607,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource111", + "logicalId": "Resource15", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 10979, + "startLine": 1475, "startColumn": 7, - "endLine": 10979, + "endLine": 1475, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28450,15 +27630,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource112", + "logicalId": "Resource16", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 11078, + "startLine": 1574, "startColumn": 7, - "endLine": 11078, + "endLine": 1574, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28473,15 +27653,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource113", + "logicalId": "Resource17", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 11177, + "startLine": 1673, "startColumn": 7, - "endLine": 11177, + "endLine": 1673, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28496,15 +27676,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource114", + "logicalId": "Resource18", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 11276, + "startLine": 1772, "startColumn": 7, - "endLine": 11276, + "endLine": 1772, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28519,15 +27699,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource115", + "logicalId": "Resource19", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 11375, + "startLine": 1871, "startColumn": 7, - "endLine": 11375, + "endLine": 1871, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28542,15 +27722,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource116", + "logicalId": "Resource20", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 11474, + "startLine": 1970, "startColumn": 7, - "endLine": 11474, + "endLine": 1970, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28565,15 +27745,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource117", + "logicalId": "Resource21", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 11573, + "startLine": 2069, "startColumn": 7, - "endLine": 11573, + "endLine": 2069, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28588,15 +27768,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource118", + "logicalId": "Resource22", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 11672, + "startLine": 2168, "startColumn": 7, - "endLine": 11672, + "endLine": 2168, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28611,15 +27791,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource119", + "logicalId": "Resource23", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 11771, + "startLine": 2267, "startColumn": 7, - "endLine": 11771, + "endLine": 2267, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28634,15 +27814,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource120", + "logicalId": "Resource24", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 11870, + "startLine": 2366, "startColumn": 7, - "endLine": 11870, + "endLine": 2366, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28657,15 +27837,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource121", + "logicalId": "Resource25", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 11969, + "startLine": 2465, "startColumn": 7, - "endLine": 11969, + "endLine": 2465, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28680,15 +27860,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource122", + "logicalId": "Resource26", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 12068, + "startLine": 2564, "startColumn": 7, - "endLine": 12068, + "endLine": 2564, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28703,15 +27883,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource123", + "logicalId": "Resource27", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 12167, + "startLine": 2663, "startColumn": 7, - "endLine": 12167, + "endLine": 2663, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28726,15 +27906,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource124", + "logicalId": "Resource28", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 12266, + "startLine": 2762, "startColumn": 7, - "endLine": 12266, + "endLine": 2762, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28749,15 +27929,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource125", + "logicalId": "Resource29", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 12365, + "startLine": 2861, "startColumn": 7, - "endLine": 12365, + "endLine": 2861, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28772,15 +27952,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource126", + "logicalId": "Resource30", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 12464, + "startLine": 2960, "startColumn": 7, - "endLine": 12464, + "endLine": 2960, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28795,15 +27975,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource127", + "logicalId": "Resource31", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 12563, + "startLine": 3059, "startColumn": 7, - "endLine": 12563, + "endLine": 3059, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28818,15 +27998,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource128", + "logicalId": "Resource32", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 12662, + "startLine": 3158, "startColumn": 7, - "endLine": 12662, + "endLine": 3158, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28841,15 +28021,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource129", + "logicalId": "Resource33", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 12761, + "startLine": 3257, "startColumn": 7, - "endLine": 12761, + "endLine": 3257, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28864,15 +28044,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource130", + "logicalId": "Resource34", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 12860, + "startLine": 3356, "startColumn": 7, - "endLine": 12860, + "endLine": 3356, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28887,15 +28067,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource131", + "logicalId": "Resource35", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 12959, + "startLine": 3455, "startColumn": 7, - "endLine": 12959, + "endLine": 3455, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28910,15 +28090,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource132", + "logicalId": "Resource36", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 13058, + "startLine": 3554, "startColumn": 7, - "endLine": 13058, + "endLine": 3554, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28933,15 +28113,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource133", + "logicalId": "Resource37", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 13157, + "startLine": 3653, "startColumn": 7, - "endLine": 13157, + "endLine": 3653, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28956,15 +28136,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource134", + "logicalId": "Resource38", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 13256, + "startLine": 3752, "startColumn": 7, - "endLine": 13256, + "endLine": 3752, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -28979,15 +28159,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource135", + "logicalId": "Resource39", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 13355, + "startLine": 3851, "startColumn": 7, - "endLine": 13355, + "endLine": 3851, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29002,15 +28182,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource136", + "logicalId": "Resource40", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 13454, + "startLine": 3950, "startColumn": 7, - "endLine": 13454, + "endLine": 3950, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29025,15 +28205,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource137", + "logicalId": "Resource41", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 13553, + "startLine": 4049, "startColumn": 7, - "endLine": 13553, + "endLine": 4049, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29048,15 +28228,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource138", + "logicalId": "Resource42", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 13652, + "startLine": 4148, "startColumn": 7, - "endLine": 13652, + "endLine": 4148, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29071,15 +28251,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource139", + "logicalId": "Resource43", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 13751, + "startLine": 4247, "startColumn": 7, - "endLine": 13751, + "endLine": 4247, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29094,15 +28274,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource140", + "logicalId": "Resource44", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 13850, + "startLine": 4346, "startColumn": 7, - "endLine": 13850, + "endLine": 4346, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29117,15 +28297,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource141", + "logicalId": "Resource45", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 13949, + "startLine": 4445, "startColumn": 7, - "endLine": 13949, + "endLine": 4445, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29140,15 +28320,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource142", + "logicalId": "Resource46", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 14048, + "startLine": 4544, "startColumn": 7, - "endLine": 14048, + "endLine": 4544, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29163,15 +28343,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource143", + "logicalId": "Resource47", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 14147, + "startLine": 4643, "startColumn": 7, - "endLine": 14147, + "endLine": 4643, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29186,15 +28366,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource144", + "logicalId": "Resource48", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 14246, + "startLine": 4742, "startColumn": 7, - "endLine": 14246, + "endLine": 4742, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29209,15 +28389,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource145", + "logicalId": "Resource49", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 14345, + "startLine": 4841, "startColumn": 7, - "endLine": 14345, + "endLine": 4841, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29232,15 +28412,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource146", + "logicalId": "Resource50", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 14444, + "startLine": 4940, "startColumn": 7, - "endLine": 14444, + "endLine": 4940, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29255,15 +28435,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource147", + "logicalId": "Resource51", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 14543, + "startLine": 5039, "startColumn": 7, - "endLine": 14543, + "endLine": 5039, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29278,15 +28458,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource148", + "logicalId": "Resource52", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 14642, + "startLine": 5138, "startColumn": 7, - "endLine": 14642, + "endLine": 5138, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29301,15 +28481,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource149", + "logicalId": "Resource53", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 14741, + "startLine": 5237, "startColumn": 7, - "endLine": 14741, + "endLine": 5237, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29324,15 +28504,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource150", + "logicalId": "Resource54", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 14840, + "startLine": 5336, "startColumn": 7, - "endLine": 14840, + "endLine": 5336, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29347,15 +28527,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource151", + "logicalId": "Resource55", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 14939, + "startLine": 5435, "startColumn": 7, - "endLine": 14939, + "endLine": 5435, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29370,15 +28550,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource152", + "logicalId": "Resource56", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 15038, + "startLine": 5534, "startColumn": 7, - "endLine": 15038, + "endLine": 5534, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29393,15 +28573,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource153", + "logicalId": "Resource57", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 15137, + "startLine": 5633, "startColumn": 7, - "endLine": 15137, + "endLine": 5633, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29416,15 +28596,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource154", + "logicalId": "Resource58", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 15236, + "startLine": 5732, "startColumn": 7, - "endLine": 15236, + "endLine": 5732, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29439,15 +28619,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource155", + "logicalId": "Resource59", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 15335, + "startLine": 5831, "startColumn": 7, - "endLine": 15335, + "endLine": 5831, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29462,15 +28642,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource156", + "logicalId": "Resource60", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 15434, + "startLine": 5930, "startColumn": 7, - "endLine": 15434, + "endLine": 5930, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29485,15 +28665,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource157", + "logicalId": "Resource61", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 15533, + "startLine": 6029, "startColumn": 7, - "endLine": 15533, + "endLine": 6029, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29508,15 +28688,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource158", + "logicalId": "Resource62", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 15632, + "startLine": 6128, "startColumn": 7, - "endLine": 15632, + "endLine": 6128, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29531,15 +28711,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource159", + "logicalId": "Resource63", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 15731, + "startLine": 6227, "startColumn": 7, - "endLine": 15731, + "endLine": 6227, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29554,15 +28734,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource160", + "logicalId": "Resource64", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 15830, + "startLine": 6326, "startColumn": 7, - "endLine": 15830, + "endLine": 6326, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29577,15 +28757,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource161", + "logicalId": "Resource65", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 15929, + "startLine": 6425, "startColumn": 7, - "endLine": 15929, + "endLine": 6425, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29600,15 +28780,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource162", + "logicalId": "Resource66", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 16028, + "startLine": 6524, "startColumn": 7, - "endLine": 16028, + "endLine": 6524, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29623,15 +28803,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource163", + "logicalId": "Resource67", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 16127, + "startLine": 6623, "startColumn": 7, - "endLine": 16127, + "endLine": 6623, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29646,15 +28826,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource164", + "logicalId": "Resource68", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 16226, + "startLine": 6722, "startColumn": 7, - "endLine": 16226, + "endLine": 6722, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29669,15 +28849,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource165", + "logicalId": "Resource69", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 16325, + "startLine": 6821, "startColumn": 7, - "endLine": 16325, + "endLine": 6821, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29692,15 +28872,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource166", + "logicalId": "Resource70", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 16424, + "startLine": 6920, "startColumn": 7, - "endLine": 16424, + "endLine": 6920, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29715,15 +28895,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource167", + "logicalId": "Resource71", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 16523, + "startLine": 7019, "startColumn": 7, - "endLine": 16523, + "endLine": 7019, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29738,15 +28918,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource168", + "logicalId": "Resource72", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 16622, + "startLine": 7118, "startColumn": 7, - "endLine": 16622, + "endLine": 7118, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29761,15 +28941,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource169", + "logicalId": "Resource73", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 16721, + "startLine": 7217, "startColumn": 7, - "endLine": 16721, + "endLine": 7217, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29784,15 +28964,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource170", + "logicalId": "Resource74", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 16820, + "startLine": 7316, "startColumn": 7, - "endLine": 16820, + "endLine": 7316, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29807,15 +28987,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource171", + "logicalId": "Resource75", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 16919, + "startLine": 7415, "startColumn": 7, - "endLine": 16919, + "endLine": 7415, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29830,15 +29010,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource172", + "logicalId": "Resource76", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 17018, + "startLine": 7514, "startColumn": 7, - "endLine": 17018, + "endLine": 7514, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29853,15 +29033,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource173", + "logicalId": "Resource77", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 17117, + "startLine": 7613, "startColumn": 7, - "endLine": 17117, + "endLine": 7613, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29876,15 +29056,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource174", + "logicalId": "Resource78", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 17216, + "startLine": 7712, "startColumn": 7, - "endLine": 17216, + "endLine": 7712, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29899,15 +29079,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource175", + "logicalId": "Resource79", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 17315, + "startLine": 7811, "startColumn": 7, - "endLine": 17315, + "endLine": 7811, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29922,15 +29102,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource176", + "logicalId": "Resource80", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 17414, + "startLine": 7910, "startColumn": 7, - "endLine": 17414, + "endLine": 7910, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29945,15 +29125,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource177", + "logicalId": "Resource81", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 17513, + "startLine": 8009, "startColumn": 7, - "endLine": 17513, + "endLine": 8009, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29968,15 +29148,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource178", + "logicalId": "Resource82", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 17612, + "startLine": 8108, "startColumn": 7, - "endLine": 17612, + "endLine": 8108, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -29991,15 +29171,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource179", + "logicalId": "Resource83", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 17711, + "startLine": 8207, "startColumn": 7, - "endLine": 17711, + "endLine": 8207, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30014,15 +29194,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource180", + "logicalId": "Resource84", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 17810, + "startLine": 8306, "startColumn": 7, - "endLine": 17810, + "endLine": 8306, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30037,15 +29217,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource181", + "logicalId": "Resource85", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 17909, + "startLine": 8405, "startColumn": 7, - "endLine": 17909, + "endLine": 8405, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30060,15 +29240,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource182", + "logicalId": "Resource86", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 18008, + "startLine": 8504, "startColumn": 7, - "endLine": 18008, + "endLine": 8504, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30083,15 +29263,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource183", + "logicalId": "Resource87", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 18107, + "startLine": 8603, "startColumn": 7, - "endLine": 18107, + "endLine": 8603, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30106,15 +29286,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource184", + "logicalId": "Resource88", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 18206, + "startLine": 8702, "startColumn": 7, - "endLine": 18206, + "endLine": 8702, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30129,15 +29309,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource185", + "logicalId": "Resource89", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 18305, + "startLine": 8801, "startColumn": 7, - "endLine": 18305, + "endLine": 8801, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30152,15 +29332,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource186", + "logicalId": "Resource90", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 18404, + "startLine": 8900, "startColumn": 7, - "endLine": 18404, + "endLine": 8900, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30175,15 +29355,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource187", + "logicalId": "Resource91", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 18503, + "startLine": 8999, "startColumn": 7, - "endLine": 18503, + "endLine": 8999, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30198,15 +29378,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource188", + "logicalId": "Resource92", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 18602, + "startLine": 9098, "startColumn": 7, - "endLine": 18602, + "endLine": 9098, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30221,15 +29401,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource189", + "logicalId": "Resource93", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 18701, + "startLine": 9197, "startColumn": 7, - "endLine": 18701, + "endLine": 9197, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30244,15 +29424,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource190", + "logicalId": "Resource94", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 18800, + "startLine": 9296, "startColumn": 7, - "endLine": 18800, + "endLine": 9296, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30267,15 +29447,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource191", + "logicalId": "Resource95", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 18899, + "startLine": 9395, "startColumn": 7, - "endLine": 18899, + "endLine": 9395, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30290,15 +29470,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource192", + "logicalId": "Resource96", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 18998, + "startLine": 9494, "startColumn": 7, - "endLine": 18998, + "endLine": 9494, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30313,15 +29493,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource193", + "logicalId": "Resource97", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 19097, + "startLine": 9593, "startColumn": 7, - "endLine": 19097, + "endLine": 9593, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30336,15 +29516,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource194", + "logicalId": "Resource98", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 19196, + "startLine": 9692, "startColumn": 7, - "endLine": 19196, + "endLine": 9692, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30359,15 +29539,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource195", + "logicalId": "Resource99", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 19295, + "startLine": 9791, "startColumn": 7, - "endLine": 19295, + "endLine": 9791, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30382,15 +29562,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource196", + "logicalId": "Resource100", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 19394, + "startLine": 9890, "startColumn": 7, - "endLine": 19394, + "endLine": 9890, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30405,15 +29585,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource197", + "logicalId": "Resource101", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 19493, + "startLine": 9989, "startColumn": 7, - "endLine": 19493, + "endLine": 9989, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30428,15 +29608,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource198", + "logicalId": "Resource102", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 19592, + "startLine": 10088, "startColumn": 7, - "endLine": 19592, + "endLine": 10088, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30451,15 +29631,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource199", + "logicalId": "Resource103", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 19691, + "startLine": 10187, "startColumn": 7, - "endLine": 19691, + "endLine": 10187, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30474,15 +29654,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource200", + "logicalId": "Resource104", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 19790, + "startLine": 10286, "startColumn": 7, - "endLine": 19790, + "endLine": 10286, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30497,15 +29677,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource201", + "logicalId": "Resource105", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 19889, + "startLine": 10385, "startColumn": 7, - "endLine": 19889, + "endLine": 10385, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30520,15 +29700,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource202", + "logicalId": "Resource106", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 19988, + "startLine": 10484, "startColumn": 7, - "endLine": 19988, + "endLine": 10484, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30543,15 +29723,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource203", + "logicalId": "Resource107", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 20087, + "startLine": 10583, "startColumn": 7, - "endLine": 20087, + "endLine": 10583, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30566,15 +29746,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource204", + "logicalId": "Resource108", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 20186, + "startLine": 10682, "startColumn": 7, - "endLine": 20186, + "endLine": 10682, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30589,15 +29769,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource205", + "logicalId": "Resource109", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 20285, + "startLine": 10781, "startColumn": 7, - "endLine": 20285, + "endLine": 10781, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30612,15 +29792,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource206", + "logicalId": "Resource110", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 20384, + "startLine": 10880, "startColumn": 7, - "endLine": 20384, + "endLine": 10880, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30635,15 +29815,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource207", + "logicalId": "Resource111", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 20483, + "startLine": 10979, "startColumn": 7, - "endLine": 20483, + "endLine": 10979, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30658,15 +29838,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource208", + "logicalId": "Resource112", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 20582, + "startLine": 11078, "startColumn": 7, - "endLine": 20582, + "endLine": 11078, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30681,15 +29861,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource209", + "logicalId": "Resource113", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 20681, + "startLine": 11177, "startColumn": 7, - "endLine": 20681, + "endLine": 11177, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30704,15 +29884,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource210", + "logicalId": "Resource114", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 20780, + "startLine": 11276, "startColumn": 7, - "endLine": 20780, + "endLine": 11276, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30727,15 +29907,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource211", + "logicalId": "Resource115", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 20879, + "startLine": 11375, "startColumn": 7, - "endLine": 20879, + "endLine": 11375, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30750,15 +29930,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource212", + "logicalId": "Resource116", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 20978, + "startLine": 11474, "startColumn": 7, - "endLine": 20978, + "endLine": 11474, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30773,15 +29953,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource213", + "logicalId": "Resource117", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 21077, + "startLine": 11573, "startColumn": 7, - "endLine": 21077, + "endLine": 11573, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30796,15 +29976,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource214", + "logicalId": "Resource118", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 21176, + "startLine": 11672, "startColumn": 7, - "endLine": 21176, + "endLine": 11672, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30819,15 +29999,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource215", + "logicalId": "Resource119", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 21275, + "startLine": 11771, "startColumn": 7, - "endLine": 21275, + "endLine": 11771, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30842,15 +30022,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource216", + "logicalId": "Resource120", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 21374, + "startLine": 11870, "startColumn": 7, - "endLine": 21374, + "endLine": 11870, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30865,15 +30045,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource217", + "logicalId": "Resource121", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 21473, + "startLine": 11969, "startColumn": 7, - "endLine": 21473, + "endLine": 11969, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30888,15 +30068,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource218", + "logicalId": "Resource122", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 21572, + "startLine": 12068, "startColumn": 7, - "endLine": 21572, + "endLine": 12068, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30911,15 +30091,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource219", + "logicalId": "Resource123", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 21671, + "startLine": 12167, "startColumn": 7, - "endLine": 21671, + "endLine": 12167, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30934,15 +30114,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource220", + "logicalId": "Resource124", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 21770, + "startLine": 12266, "startColumn": 7, - "endLine": 21770, + "endLine": 12266, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30957,15 +30137,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource221", + "logicalId": "Resource125", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 21869, + "startLine": 12365, "startColumn": 7, - "endLine": 21869, + "endLine": 12365, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -30980,15 +30160,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource222", + "logicalId": "Resource126", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 21968, + "startLine": 12464, "startColumn": 7, - "endLine": 21968, + "endLine": 12464, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31003,15 +30183,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource223", + "logicalId": "Resource127", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 22067, + "startLine": 12563, "startColumn": 7, - "endLine": 22067, + "endLine": 12563, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31026,15 +30206,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource224", + "logicalId": "Resource128", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 22166, + "startLine": 12662, "startColumn": 7, - "endLine": 22166, + "endLine": 12662, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31049,15 +30229,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource225", + "logicalId": "Resource129", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 22265, + "startLine": 12761, "startColumn": 7, - "endLine": 22265, + "endLine": 12761, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31072,15 +30252,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource226", + "logicalId": "Resource130", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 22364, + "startLine": 12860, "startColumn": 7, - "endLine": 22364, + "endLine": 12860, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31095,15 +30275,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource227", + "logicalId": "Resource131", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 22463, + "startLine": 12959, "startColumn": 7, - "endLine": 22463, + "endLine": 12959, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31118,15 +30298,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource228", + "logicalId": "Resource132", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 22562, + "startLine": 13058, "startColumn": 7, - "endLine": 22562, + "endLine": 13058, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31141,15 +30321,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource229", + "logicalId": "Resource133", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 22661, + "startLine": 13157, "startColumn": 7, - "endLine": 22661, + "endLine": 13157, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31164,15 +30344,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource230", + "logicalId": "Resource134", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 22760, + "startLine": 13256, "startColumn": 7, - "endLine": 22760, + "endLine": 13256, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31187,15 +30367,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource231", + "logicalId": "Resource135", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 22859, + "startLine": 13355, "startColumn": 7, - "endLine": 22859, + "endLine": 13355, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31210,15 +30390,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource232", + "logicalId": "Resource136", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 22958, + "startLine": 13454, "startColumn": 7, - "endLine": 22958, + "endLine": 13454, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31233,15 +30413,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource233", + "logicalId": "Resource137", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 23057, + "startLine": 13553, "startColumn": 7, - "endLine": 23057, + "endLine": 13553, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31256,15 +30436,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource234", + "logicalId": "Resource138", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 23156, + "startLine": 13652, "startColumn": 7, - "endLine": 23156, + "endLine": 13652, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31279,15 +30459,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource235", + "logicalId": "Resource139", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 23255, + "startLine": 13751, "startColumn": 7, - "endLine": 23255, + "endLine": 13751, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31302,15 +30482,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource236", + "logicalId": "Resource140", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 23354, + "startLine": 13850, "startColumn": 7, - "endLine": 23354, + "endLine": 13850, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31325,15 +30505,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource237", + "logicalId": "Resource141", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 23453, + "startLine": 13949, "startColumn": 7, - "endLine": 23453, + "endLine": 13949, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31348,15 +30528,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource238", + "logicalId": "Resource142", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 23552, + "startLine": 14048, "startColumn": 7, - "endLine": 23552, + "endLine": 14048, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31371,15 +30551,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource239", + "logicalId": "Resource143", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 23651, + "startLine": 14147, "startColumn": 7, - "endLine": 23651, + "endLine": 14147, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31394,15 +30574,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource240", + "logicalId": "Resource144", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 23750, + "startLine": 14246, "startColumn": 7, - "endLine": 23750, + "endLine": 14246, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31417,15 +30597,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource241", + "logicalId": "Resource145", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 23849, + "startLine": 14345, "startColumn": 7, - "endLine": 23849, + "endLine": 14345, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31440,15 +30620,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource242", + "logicalId": "Resource146", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 23948, + "startLine": 14444, "startColumn": 7, - "endLine": 23948, + "endLine": 14444, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31463,15 +30643,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource243", + "logicalId": "Resource147", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 24047, + "startLine": 14543, "startColumn": 7, - "endLine": 24047, + "endLine": 14543, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31486,15 +30666,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource244", + "logicalId": "Resource148", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 24146, + "startLine": 14642, "startColumn": 7, - "endLine": 24146, + "endLine": 14642, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31509,15 +30689,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource245", + "logicalId": "Resource149", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 24245, + "startLine": 14741, "startColumn": 7, - "endLine": 24245, + "endLine": 14741, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31532,15 +30712,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource246", + "logicalId": "Resource150", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 24344, + "startLine": 14840, "startColumn": 7, - "endLine": 24344, + "endLine": 14840, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31555,15 +30735,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource247", + "logicalId": "Resource151", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 24443, + "startLine": 14939, "startColumn": 7, - "endLine": 24443, + "endLine": 14939, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31578,15 +30758,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource248", + "logicalId": "Resource152", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 24542, + "startLine": 15038, "startColumn": 7, - "endLine": 24542, + "endLine": 15038, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31601,15 +30781,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource249", + "logicalId": "Resource153", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 24641, + "startLine": 15137, "startColumn": 7, - "endLine": 24641, + "endLine": 15137, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31624,15 +30804,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource250", + "logicalId": "Resource154", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 24740, + "startLine": 15236, "startColumn": 7, - "endLine": 24740, + "endLine": 15236, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31647,15 +30827,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource251", + "logicalId": "Resource155", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 24839, + "startLine": 15335, "startColumn": 7, - "endLine": 24839, + "endLine": 15335, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31670,15 +30850,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource252", + "logicalId": "Resource156", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 24938, + "startLine": 15434, "startColumn": 7, - "endLine": 24938, + "endLine": 15434, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31693,15 +30873,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource253", + "logicalId": "Resource157", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 25037, + "startLine": 15533, "startColumn": 7, - "endLine": 25037, + "endLine": 15533, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31716,15 +30896,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource254", + "logicalId": "Resource158", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 25136, + "startLine": 15632, "startColumn": 7, - "endLine": 25136, + "endLine": 15632, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31739,15 +30919,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource255", + "logicalId": "Resource159", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 25235, + "startLine": 15731, "startColumn": 7, - "endLine": 25235, + "endLine": 15731, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31762,15 +30942,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource256", + "logicalId": "Resource160", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 25334, + "startLine": 15830, "startColumn": 7, - "endLine": 25334, + "endLine": 15830, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31785,15 +30965,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource257", + "logicalId": "Resource161", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 25433, + "startLine": 15929, "startColumn": 7, - "endLine": 25433, + "endLine": 15929, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31808,15 +30988,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource258", + "logicalId": "Resource162", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 25532, + "startLine": 16028, "startColumn": 7, - "endLine": 25532, + "endLine": 16028, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31831,15 +31011,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource259", + "logicalId": "Resource163", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 25631, + "startLine": 16127, "startColumn": 7, - "endLine": 25631, + "endLine": 16127, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31854,15 +31034,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource260", + "logicalId": "Resource164", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 25730, + "startLine": 16226, "startColumn": 7, - "endLine": 25730, + "endLine": 16226, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31877,15 +31057,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource261", + "logicalId": "Resource165", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 25829, + "startLine": 16325, "startColumn": 7, - "endLine": 25829, + "endLine": 16325, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31900,15 +31080,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource262", + "logicalId": "Resource166", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 25928, + "startLine": 16424, "startColumn": 7, - "endLine": 25928, + "endLine": 16424, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31923,15 +31103,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource263", + "logicalId": "Resource167", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 26027, + "startLine": 16523, "startColumn": 7, - "endLine": 26027, + "endLine": 16523, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31946,15 +31126,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource264", + "logicalId": "Resource168", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 26126, + "startLine": 16622, "startColumn": 7, - "endLine": 26126, + "endLine": 16622, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31969,15 +31149,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource265", + "logicalId": "Resource169", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 26225, + "startLine": 16721, "startColumn": 7, - "endLine": 26225, + "endLine": 16721, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -31992,15 +31172,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource266", + "logicalId": "Resource170", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 26324, + "startLine": 16820, "startColumn": 7, - "endLine": 26324, + "endLine": 16820, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32015,15 +31195,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource267", + "logicalId": "Resource171", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 26423, + "startLine": 16919, "startColumn": 7, - "endLine": 26423, + "endLine": 16919, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32038,15 +31218,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource268", + "logicalId": "Resource172", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 26522, + "startLine": 17018, "startColumn": 7, - "endLine": 26522, + "endLine": 17018, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32061,15 +31241,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource269", + "logicalId": "Resource173", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 26621, + "startLine": 17117, "startColumn": 7, - "endLine": 26621, + "endLine": 17117, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32084,15 +31264,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource270", + "logicalId": "Resource174", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 26720, + "startLine": 17216, "startColumn": 7, - "endLine": 26720, + "endLine": 17216, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32107,15 +31287,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource271", + "logicalId": "Resource175", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 26819, + "startLine": 17315, "startColumn": 7, - "endLine": 26819, + "endLine": 17315, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32130,15 +31310,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource272", + "logicalId": "Resource176", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 26918, + "startLine": 17414, "startColumn": 7, - "endLine": 26918, + "endLine": 17414, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32153,15 +31333,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource273", + "logicalId": "Resource177", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 27017, + "startLine": 17513, "startColumn": 7, - "endLine": 27017, + "endLine": 17513, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32176,15 +31356,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource274", + "logicalId": "Resource178", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 27116, + "startLine": 17612, "startColumn": 7, - "endLine": 27116, + "endLine": 17612, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32199,15 +31379,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource275", + "logicalId": "Resource179", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 27215, + "startLine": 17711, "startColumn": 7, - "endLine": 27215, + "endLine": 17711, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32222,15 +31402,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource276", + "logicalId": "Resource180", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 27314, + "startLine": 17810, "startColumn": 7, - "endLine": 27314, + "endLine": 17810, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32245,15 +31425,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource277", + "logicalId": "Resource181", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 27413, + "startLine": 17909, "startColumn": 7, - "endLine": 27413, + "endLine": 17909, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32268,15 +31448,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource278", + "logicalId": "Resource182", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 27512, + "startLine": 18008, "startColumn": 7, - "endLine": 27512, + "endLine": 18008, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32291,15 +31471,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource279", + "logicalId": "Resource183", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 27611, + "startLine": 18107, "startColumn": 7, - "endLine": 27611, + "endLine": 18107, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32314,15 +31494,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource280", + "logicalId": "Resource184", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 27710, + "startLine": 18206, "startColumn": 7, - "endLine": 27710, + "endLine": 18206, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32337,15 +31517,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource281", + "logicalId": "Resource185", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 27809, + "startLine": 18305, "startColumn": 7, - "endLine": 27809, + "endLine": 18305, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32360,15 +31540,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource282", + "logicalId": "Resource186", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 27908, + "startLine": 18404, "startColumn": 7, - "endLine": 27908, + "endLine": 18404, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32383,15 +31563,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource283", + "logicalId": "Resource187", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 28007, + "startLine": 18503, "startColumn": 7, - "endLine": 28007, + "endLine": 18503, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32406,15 +31586,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource284", + "logicalId": "Resource188", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 28106, + "startLine": 18602, "startColumn": 7, - "endLine": 28106, + "endLine": 18602, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32429,15 +31609,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource285", + "logicalId": "Resource189", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 28205, + "startLine": 18701, "startColumn": 7, - "endLine": 28205, + "endLine": 18701, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32452,15 +31632,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource286", + "logicalId": "Resource190", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 28304, + "startLine": 18800, "startColumn": 7, - "endLine": 28304, + "endLine": 18800, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32475,15 +31655,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource287", + "logicalId": "Resource191", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 28403, + "startLine": 18899, "startColumn": 7, - "endLine": 28403, + "endLine": 18899, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32498,15 +31678,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource288", + "logicalId": "Resource192", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 28502, + "startLine": 18998, "startColumn": 7, - "endLine": 28502, + "endLine": 18998, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32521,15 +31701,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource289", + "logicalId": "Resource193", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 28601, + "startLine": 19097, "startColumn": 7, - "endLine": 28601, + "endLine": 19097, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32544,15 +31724,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource290", + "logicalId": "Resource194", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 28700, + "startLine": 19196, "startColumn": 7, - "endLine": 28700, + "endLine": 19196, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32567,15 +31747,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource291", + "logicalId": "Resource195", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 28799, + "startLine": 19295, "startColumn": 7, - "endLine": 28799, + "endLine": 19295, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32590,15 +31770,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource292", + "logicalId": "Resource196", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 28898, + "startLine": 19394, "startColumn": 7, - "endLine": 28898, + "endLine": 19394, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32613,15 +31793,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource293", + "logicalId": "Resource197", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 28997, + "startLine": 19493, "startColumn": 7, - "endLine": 28997, + "endLine": 19493, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32636,15 +31816,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource294", + "logicalId": "Resource198", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 29096, + "startLine": 19592, "startColumn": 7, - "endLine": 29096, + "endLine": 19592, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32659,15 +31839,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource295", + "logicalId": "Resource199", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 29195, + "startLine": 19691, "startColumn": 7, - "endLine": 29195, + "endLine": 19691, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32682,15 +31862,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource296", + "logicalId": "Resource200", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 29294, + "startLine": 19790, "startColumn": 7, - "endLine": 29294, + "endLine": 19790, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32705,15 +31885,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource297", + "logicalId": "Resource201", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 29393, + "startLine": 19889, "startColumn": 7, - "endLine": 29393, + "endLine": 19889, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32728,15 +31908,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource298", + "logicalId": "Resource202", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 29492, + "startLine": 19988, "startColumn": 7, - "endLine": 29492, + "endLine": 19988, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32751,15 +31931,15 @@ "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource299", + "logicalId": "Resource203", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Intrinsic Function", - "startLine": 29591, + "startLine": 20087, "startColumn": 7, - "endLine": 29591, + "endLine": 20087, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Validate AMI id format", @@ -32769,2170 +31949,2212 @@ } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 20, - "startColumn": 15, - "endLine": 20, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 55, - "startColumn": 15, - "endLine": 55, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 61, - "startColumn": 15, - "endLine": 61, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 119, - "startColumn": 15, - "endLine": 119, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 154, - "startColumn": 15, - "endLine": 154, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 160, - "startColumn": 15, - "endLine": 160, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 218, - "startColumn": 15, - "endLine": 218, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 253, - "startColumn": 15, - "endLine": 253, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 259, - "startColumn": 15, - "endLine": 259, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource4", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 317, - "startColumn": 15, - "endLine": 317, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource4", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 352, - "startColumn": 15, - "endLine": 352, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource4", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 358, - "startColumn": 15, - "endLine": 358, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource5", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 416, - "startColumn": 15, - "endLine": 416, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource5", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 451, - "startColumn": 15, - "endLine": 451, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource5", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 457, - "startColumn": 15, - "endLine": 457, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource6", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 515, - "startColumn": 15, - "endLine": 515, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource6", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 550, - "startColumn": 15, - "endLine": 550, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "Resource6", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 556, - "startColumn": 15, - "endLine": 556, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource7", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 614, - "startColumn": 15, - "endLine": 614, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "logicalId": "Resource204", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 20186, + "startColumn": 7, + "endLine": 20186, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource7", + "logicalId": "Resource205", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 649, - "startColumn": 15, - "endLine": 649, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 20285, + "startColumn": 7, + "endLine": 20285, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource7", + "logicalId": "Resource206", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 655, - "startColumn": 15, - "endLine": 655, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 20384, + "startColumn": 7, + "endLine": 20384, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource8", + "logicalId": "Resource207", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 713, - "startColumn": 15, - "endLine": 713, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 20483, + "startColumn": 7, + "endLine": 20483, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource8", + "logicalId": "Resource208", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 748, - "startColumn": 15, - "endLine": 748, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 20582, + "startColumn": 7, + "endLine": 20582, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource8", + "logicalId": "Resource209", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 754, - "startColumn": 15, - "endLine": 754, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 20681, + "startColumn": 7, + "endLine": 20681, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource9", + "logicalId": "Resource210", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 812, - "startColumn": 15, - "endLine": 812, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 20780, + "startColumn": 7, + "endLine": 20780, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource9", + "logicalId": "Resource211", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 847, - "startColumn": 15, - "endLine": 847, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 20879, + "startColumn": 7, + "endLine": 20879, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource9", + "logicalId": "Resource212", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 853, - "startColumn": 15, - "endLine": 853, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 20978, + "startColumn": 7, + "endLine": 20978, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource10", + "logicalId": "Resource213", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 911, - "startColumn": 15, - "endLine": 911, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 21077, + "startColumn": 7, + "endLine": 21077, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource10", + "logicalId": "Resource214", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 946, - "startColumn": 15, - "endLine": 946, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 21176, + "startColumn": 7, + "endLine": 21176, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource10", + "logicalId": "Resource215", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 952, - "startColumn": 15, - "endLine": 952, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 21275, + "startColumn": 7, + "endLine": 21275, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource11", + "logicalId": "Resource216", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 1010, - "startColumn": 15, - "endLine": 1010, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 21374, + "startColumn": 7, + "endLine": 21374, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource11", + "logicalId": "Resource217", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 1045, - "startColumn": 15, - "endLine": 1045, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 21473, + "startColumn": 7, + "endLine": 21473, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource11", + "logicalId": "Resource218", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 1051, - "startColumn": 15, - "endLine": 1051, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 21572, + "startColumn": 7, + "endLine": 21572, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource12", + "logicalId": "Resource219", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 1109, - "startColumn": 15, - "endLine": 1109, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 21671, + "startColumn": 7, + "endLine": 21671, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource12", + "logicalId": "Resource220", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 1144, - "startColumn": 15, - "endLine": 1144, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 21770, + "startColumn": 7, + "endLine": 21770, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource12", + "logicalId": "Resource221", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 1150, - "startColumn": 15, - "endLine": 1150, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 21869, + "startColumn": 7, + "endLine": 21869, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource13", + "logicalId": "Resource222", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 1208, - "startColumn": 15, - "endLine": 1208, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 21968, + "startColumn": 7, + "endLine": 21968, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource13", + "logicalId": "Resource223", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 1243, - "startColumn": 15, - "endLine": 1243, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 22067, + "startColumn": 7, + "endLine": 22067, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource13", + "logicalId": "Resource224", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 1249, - "startColumn": 15, - "endLine": 1249, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 22166, + "startColumn": 7, + "endLine": 22166, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource14", + "logicalId": "Resource225", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 1307, - "startColumn": 15, - "endLine": 1307, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 22265, + "startColumn": 7, + "endLine": 22265, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource14", + "logicalId": "Resource226", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 1342, - "startColumn": 15, - "endLine": 1342, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 22364, + "startColumn": 7, + "endLine": 22364, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource14", + "logicalId": "Resource227", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 1348, - "startColumn": 15, - "endLine": 1348, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 22463, + "startColumn": 7, + "endLine": 22463, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource15", + "logicalId": "Resource228", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 1406, - "startColumn": 15, - "endLine": 1406, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 22562, + "startColumn": 7, + "endLine": 22562, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource15", + "logicalId": "Resource229", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 1441, - "startColumn": 15, - "endLine": 1441, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 22661, + "startColumn": 7, + "endLine": 22661, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource15", + "logicalId": "Resource230", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 1447, - "startColumn": 15, - "endLine": 1447, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 22760, + "startColumn": 7, + "endLine": 22760, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource16", + "logicalId": "Resource231", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 1505, - "startColumn": 15, - "endLine": 1505, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 22859, + "startColumn": 7, + "endLine": 22859, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource16", + "logicalId": "Resource232", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 1540, - "startColumn": 15, - "endLine": 1540, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 22958, + "startColumn": 7, + "endLine": 22958, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource16", + "logicalId": "Resource233", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 1546, - "startColumn": 15, - "endLine": 1546, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 23057, + "startColumn": 7, + "endLine": 23057, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource17", + "logicalId": "Resource234", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 1604, - "startColumn": 15, - "endLine": 1604, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 23156, + "startColumn": 7, + "endLine": 23156, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource17", + "logicalId": "Resource235", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 1639, - "startColumn": 15, - "endLine": 1639, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 23255, + "startColumn": 7, + "endLine": 23255, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource17", + "logicalId": "Resource236", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 1645, - "startColumn": 15, - "endLine": 1645, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 23354, + "startColumn": 7, + "endLine": 23354, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource18", + "logicalId": "Resource237", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 1703, - "startColumn": 15, - "endLine": 1703, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 23453, + "startColumn": 7, + "endLine": 23453, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource18", + "logicalId": "Resource238", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 1738, - "startColumn": 15, - "endLine": 1738, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 23552, + "startColumn": 7, + "endLine": 23552, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource18", + "logicalId": "Resource239", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 1744, - "startColumn": 15, - "endLine": 1744, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 23651, + "startColumn": 7, + "endLine": 23651, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource19", + "logicalId": "Resource240", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 1802, - "startColumn": 15, - "endLine": 1802, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 23750, + "startColumn": 7, + "endLine": 23750, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource19", + "logicalId": "Resource241", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 1837, - "startColumn": 15, - "endLine": 1837, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 23849, + "startColumn": 7, + "endLine": 23849, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource19", + "logicalId": "Resource242", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 1843, - "startColumn": 15, - "endLine": 1843, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 23948, + "startColumn": 7, + "endLine": 23948, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource20", + "logicalId": "Resource243", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 1901, - "startColumn": 15, - "endLine": 1901, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 24047, + "startColumn": 7, + "endLine": 24047, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource20", + "logicalId": "Resource244", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 1936, - "startColumn": 15, - "endLine": 1936, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 24146, + "startColumn": 7, + "endLine": 24146, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource20", + "logicalId": "Resource245", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 1942, - "startColumn": 15, - "endLine": 1942, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 24245, + "startColumn": 7, + "endLine": 24245, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource21", + "logicalId": "Resource246", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 2000, - "startColumn": 15, - "endLine": 2000, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 24344, + "startColumn": 7, + "endLine": 24344, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource21", + "logicalId": "Resource247", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 2035, - "startColumn": 15, - "endLine": 2035, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 24443, + "startColumn": 7, + "endLine": 24443, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource21", + "logicalId": "Resource248", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 2041, - "startColumn": 15, - "endLine": 2041, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 24542, + "startColumn": 7, + "endLine": 24542, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource22", + "logicalId": "Resource249", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 2099, - "startColumn": 15, - "endLine": 2099, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 24641, + "startColumn": 7, + "endLine": 24641, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource22", + "logicalId": "Resource250", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 2134, - "startColumn": 15, - "endLine": 2134, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 24740, + "startColumn": 7, + "endLine": 24740, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource22", + "logicalId": "Resource251", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 2140, - "startColumn": 15, - "endLine": 2140, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 24839, + "startColumn": 7, + "endLine": 24839, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource23", + "logicalId": "Resource252", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 2198, - "startColumn": 15, - "endLine": 2198, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 24938, + "startColumn": 7, + "endLine": 24938, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource23", + "logicalId": "Resource253", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 2233, - "startColumn": 15, - "endLine": 2233, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 25037, + "startColumn": 7, + "endLine": 25037, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource23", + "logicalId": "Resource254", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 2239, - "startColumn": 15, - "endLine": 2239, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 25136, + "startColumn": 7, + "endLine": 25136, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource24", + "logicalId": "Resource255", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 2297, - "startColumn": 15, - "endLine": 2297, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 25235, + "startColumn": 7, + "endLine": 25235, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource24", + "logicalId": "Resource256", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 2332, - "startColumn": 15, - "endLine": 2332, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 25334, + "startColumn": 7, + "endLine": 25334, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource24", + "logicalId": "Resource257", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 2338, - "startColumn": 15, - "endLine": 2338, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 25433, + "startColumn": 7, + "endLine": 25433, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource25", + "logicalId": "Resource258", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 2396, - "startColumn": 15, - "endLine": 2396, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 25532, + "startColumn": 7, + "endLine": 25532, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource25", + "logicalId": "Resource259", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 2431, - "startColumn": 15, - "endLine": 2431, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 25631, + "startColumn": 7, + "endLine": 25631, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource25", + "logicalId": "Resource260", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 2437, - "startColumn": 15, - "endLine": 2437, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 25730, + "startColumn": 7, + "endLine": 25730, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource26", + "logicalId": "Resource261", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 2495, - "startColumn": 15, - "endLine": 2495, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 25829, + "startColumn": 7, + "endLine": 25829, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource26", + "logicalId": "Resource262", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 2530, - "startColumn": 15, - "endLine": 2530, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 25928, + "startColumn": 7, + "endLine": 25928, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource26", + "logicalId": "Resource263", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 2536, - "startColumn": 15, - "endLine": 2536, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 26027, + "startColumn": 7, + "endLine": 26027, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource27", + "logicalId": "Resource264", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 2594, - "startColumn": 15, - "endLine": 2594, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 26126, + "startColumn": 7, + "endLine": 26126, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource27", + "logicalId": "Resource265", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 2629, - "startColumn": 15, - "endLine": 2629, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 26225, + "startColumn": 7, + "endLine": 26225, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource27", + "logicalId": "Resource266", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 2635, - "startColumn": 15, - "endLine": 2635, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 26324, + "startColumn": 7, + "endLine": 26324, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource28", + "logicalId": "Resource267", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 2693, - "startColumn": 15, - "endLine": 2693, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 26423, + "startColumn": 7, + "endLine": 26423, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource28", + "logicalId": "Resource268", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 2728, - "startColumn": 15, - "endLine": 2728, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 26522, + "startColumn": 7, + "endLine": 26522, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource28", + "logicalId": "Resource269", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 2734, - "startColumn": 15, - "endLine": 2734, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 26621, + "startColumn": 7, + "endLine": 26621, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource29", + "logicalId": "Resource270", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 2792, - "startColumn": 15, - "endLine": 2792, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 26720, + "startColumn": 7, + "endLine": 26720, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource29", + "logicalId": "Resource271", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 2827, - "startColumn": 15, - "endLine": 2827, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 26819, + "startColumn": 7, + "endLine": 26819, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource29", + "logicalId": "Resource272", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 2833, - "startColumn": 15, - "endLine": 2833, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 26918, + "startColumn": 7, + "endLine": 26918, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource30", + "logicalId": "Resource273", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 2891, - "startColumn": 15, - "endLine": 2891, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 27017, + "startColumn": 7, + "endLine": 27017, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource30", + "logicalId": "Resource274", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 2926, - "startColumn": 15, - "endLine": 2926, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 27116, + "startColumn": 7, + "endLine": 27116, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource30", + "logicalId": "Resource275", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 2932, - "startColumn": 15, - "endLine": 2932, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 27215, + "startColumn": 7, + "endLine": 27215, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource31", + "logicalId": "Resource276", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 2990, - "startColumn": 15, - "endLine": 2990, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 27314, + "startColumn": 7, + "endLine": 27314, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource31", + "logicalId": "Resource277", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 3025, - "startColumn": 15, - "endLine": 3025, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 27413, + "startColumn": 7, + "endLine": 27413, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource31", + "logicalId": "Resource278", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 3031, - "startColumn": 15, - "endLine": 3031, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 27512, + "startColumn": 7, + "endLine": 27512, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource32", + "logicalId": "Resource279", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 3089, - "startColumn": 15, - "endLine": 3089, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 27611, + "startColumn": 7, + "endLine": 27611, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource32", + "logicalId": "Resource280", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 3124, - "startColumn": 15, - "endLine": 3124, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 27710, + "startColumn": 7, + "endLine": 27710, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource32", + "logicalId": "Resource281", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 3130, - "startColumn": 15, - "endLine": 3130, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 27809, + "startColumn": 7, + "endLine": 27809, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource33", + "logicalId": "Resource282", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 3188, - "startColumn": 15, - "endLine": 3188, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 27908, + "startColumn": 7, + "endLine": 27908, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource33", + "logicalId": "Resource283", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 3223, - "startColumn": 15, - "endLine": 3223, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 28007, + "startColumn": 7, + "endLine": 28007, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource33", + "logicalId": "Resource284", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 3229, - "startColumn": 15, - "endLine": 3229, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 28106, + "startColumn": 7, + "endLine": 28106, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource34", + "logicalId": "Resource285", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 3287, - "startColumn": 15, - "endLine": 3287, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 28205, + "startColumn": 7, + "endLine": 28205, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource34", + "logicalId": "Resource286", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 3322, - "startColumn": 15, - "endLine": 3322, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 28304, + "startColumn": 7, + "endLine": 28304, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource34", + "logicalId": "Resource287", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 3328, - "startColumn": 15, - "endLine": 3328, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 28403, + "startColumn": 7, + "endLine": 28403, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource35", + "logicalId": "Resource288", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 3386, - "startColumn": 15, - "endLine": 3386, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 28502, + "startColumn": 7, + "endLine": 28502, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource35", + "logicalId": "Resource289", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 3421, - "startColumn": 15, - "endLine": 3421, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 28601, + "startColumn": 7, + "endLine": 28601, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource35", + "logicalId": "Resource290", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 3427, - "startColumn": 15, - "endLine": 3427, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 28700, + "startColumn": 7, + "endLine": 28700, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource36", + "logicalId": "Resource291", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 3485, - "startColumn": 15, - "endLine": 3485, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 28799, + "startColumn": 7, + "endLine": 28799, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource36", + "logicalId": "Resource292", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 3520, - "startColumn": 15, - "endLine": 3520, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 28898, + "startColumn": 7, + "endLine": 28898, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource36", + "logicalId": "Resource293", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 3526, - "startColumn": 15, - "endLine": 3526, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 28997, + "startColumn": 7, + "endLine": 28997, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource37", + "logicalId": "Resource294", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 3584, - "startColumn": 15, - "endLine": 3584, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 29096, + "startColumn": 7, + "endLine": 29096, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource37", + "logicalId": "Resource295", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 3619, - "startColumn": 15, - "endLine": 3619, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 29195, + "startColumn": 7, + "endLine": 29195, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource37", + "logicalId": "Resource296", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 3625, - "startColumn": 15, - "endLine": 3625, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 29294, + "startColumn": 7, + "endLine": 29294, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource38", + "logicalId": "Resource297", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", - "category": "Best Practice", - "startLine": 3683, - "startColumn": 15, - "endLine": 3683, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 29393, + "startColumn": 7, + "endLine": 29393, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource38", + "logicalId": "Resource298", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 3718, - "startColumn": 15, - "endLine": 3718, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 29492, + "startColumn": 7, + "endLine": 29492, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-ami' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Resource38", + "logicalId": "Resource299", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", - "category": "Best Practice", - "startLine": 3724, - "startColumn": 15, - "endLine": 3724, - "endColumn": 22, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 29591, + "startColumn": 7, + "endLine": 29591, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-ami" + } }, { "ruleId": "W1020", @@ -34940,15 +34162,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource39", + "logicalId": "Resource1", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 3782, + "startLine": 20, "startColumn": 15, - "endLine": 3782, + "endLine": 20, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34959,15 +34181,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource39", + "logicalId": "Resource1", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3817, + "startLine": 55, "startColumn": 15, - "endLine": 3817, + "endLine": 55, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34978,15 +34200,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource39", + "logicalId": "Resource1", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3823, + "startLine": 61, "startColumn": 15, - "endLine": 3823, + "endLine": 61, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -34997,15 +34219,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource40", + "logicalId": "Resource2", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 3881, + "startLine": 119, "startColumn": 15, - "endLine": 3881, + "endLine": 119, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35016,15 +34238,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource40", + "logicalId": "Resource2", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3916, + "startLine": 154, "startColumn": 15, - "endLine": 3916, + "endLine": 154, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35035,15 +34257,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource40", + "logicalId": "Resource2", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3922, + "startLine": 160, "startColumn": 15, - "endLine": 3922, + "endLine": 160, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35054,15 +34276,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource41", + "logicalId": "Resource3", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 3980, + "startLine": 218, "startColumn": 15, - "endLine": 3980, + "endLine": 218, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35073,15 +34295,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource41", + "logicalId": "Resource3", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4015, + "startLine": 253, "startColumn": 15, - "endLine": 4015, + "endLine": 253, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35092,15 +34314,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource41", + "logicalId": "Resource3", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4021, + "startLine": 259, "startColumn": 15, - "endLine": 4021, + "endLine": 259, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35111,15 +34333,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource42", + "logicalId": "Resource4", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 4079, + "startLine": 317, "startColumn": 15, - "endLine": 4079, + "endLine": 317, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35130,15 +34352,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource42", + "logicalId": "Resource4", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4114, + "startLine": 352, "startColumn": 15, - "endLine": 4114, + "endLine": 352, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35149,15 +34371,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource42", + "logicalId": "Resource4", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4120, + "startLine": 358, "startColumn": 15, - "endLine": 4120, + "endLine": 358, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35168,15 +34390,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource43", + "logicalId": "Resource5", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 4178, + "startLine": 416, "startColumn": 15, - "endLine": 4178, + "endLine": 416, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35187,15 +34409,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource43", + "logicalId": "Resource5", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4213, + "startLine": 451, "startColumn": 15, - "endLine": 4213, + "endLine": 451, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35206,15 +34428,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource43", + "logicalId": "Resource5", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4219, + "startLine": 457, "startColumn": 15, - "endLine": 4219, + "endLine": 457, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35225,15 +34447,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource44", + "logicalId": "Resource6", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 4277, + "startLine": 515, "startColumn": 15, - "endLine": 4277, + "endLine": 515, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35244,15 +34466,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource44", + "logicalId": "Resource6", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4312, + "startLine": 550, "startColumn": 15, - "endLine": 4312, + "endLine": 550, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35263,15 +34485,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource44", + "logicalId": "Resource6", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4318, + "startLine": 556, "startColumn": 15, - "endLine": 4318, + "endLine": 556, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35282,15 +34504,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource45", + "logicalId": "Resource7", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 4376, + "startLine": 614, "startColumn": 15, - "endLine": 4376, + "endLine": 614, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35301,15 +34523,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource45", + "logicalId": "Resource7", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4411, + "startLine": 649, "startColumn": 15, - "endLine": 4411, + "endLine": 649, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35320,15 +34542,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource45", + "logicalId": "Resource7", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4417, + "startLine": 655, "startColumn": 15, - "endLine": 4417, + "endLine": 655, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35339,15 +34561,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource46", + "logicalId": "Resource8", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 4475, + "startLine": 713, "startColumn": 15, - "endLine": 4475, + "endLine": 713, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35358,15 +34580,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource46", + "logicalId": "Resource8", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4510, + "startLine": 748, "startColumn": 15, - "endLine": 4510, + "endLine": 748, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35377,15 +34599,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource46", + "logicalId": "Resource8", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4516, + "startLine": 754, "startColumn": 15, - "endLine": 4516, + "endLine": 754, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35396,15 +34618,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource47", + "logicalId": "Resource9", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 4574, + "startLine": 812, "startColumn": 15, - "endLine": 4574, + "endLine": 812, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35415,15 +34637,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource47", + "logicalId": "Resource9", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4609, + "startLine": 847, "startColumn": 15, - "endLine": 4609, + "endLine": 847, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35434,15 +34656,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource47", + "logicalId": "Resource9", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4615, + "startLine": 853, "startColumn": 15, - "endLine": 4615, + "endLine": 853, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35453,15 +34675,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource48", + "logicalId": "Resource10", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 4673, + "startLine": 911, "startColumn": 15, - "endLine": 4673, + "endLine": 911, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35472,15 +34694,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource48", + "logicalId": "Resource10", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4708, + "startLine": 946, "startColumn": 15, - "endLine": 4708, + "endLine": 946, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35491,15 +34713,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource48", + "logicalId": "Resource10", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4714, + "startLine": 952, "startColumn": 15, - "endLine": 4714, + "endLine": 952, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35510,15 +34732,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource49", + "logicalId": "Resource11", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 4772, + "startLine": 1010, "startColumn": 15, - "endLine": 4772, + "endLine": 1010, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35529,15 +34751,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource49", + "logicalId": "Resource11", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4807, + "startLine": 1045, "startColumn": 15, - "endLine": 4807, + "endLine": 1045, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35548,15 +34770,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource49", + "logicalId": "Resource11", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4813, + "startLine": 1051, "startColumn": 15, - "endLine": 4813, + "endLine": 1051, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35567,15 +34789,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource50", + "logicalId": "Resource12", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 4871, + "startLine": 1109, "startColumn": 15, - "endLine": 4871, + "endLine": 1109, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35586,15 +34808,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource50", + "logicalId": "Resource12", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4906, + "startLine": 1144, "startColumn": 15, - "endLine": 4906, + "endLine": 1144, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35605,15 +34827,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource50", + "logicalId": "Resource12", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4912, + "startLine": 1150, "startColumn": 15, - "endLine": 4912, + "endLine": 1150, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35624,15 +34846,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource51", + "logicalId": "Resource13", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 4970, + "startLine": 1208, "startColumn": 15, - "endLine": 4970, + "endLine": 1208, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35643,15 +34865,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource51", + "logicalId": "Resource13", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5005, + "startLine": 1243, "startColumn": 15, - "endLine": 5005, + "endLine": 1243, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35662,15 +34884,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource51", + "logicalId": "Resource13", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5011, + "startLine": 1249, "startColumn": 15, - "endLine": 5011, + "endLine": 1249, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35681,15 +34903,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource52", + "logicalId": "Resource14", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 5069, + "startLine": 1307, "startColumn": 15, - "endLine": 5069, + "endLine": 1307, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35700,15 +34922,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource52", + "logicalId": "Resource14", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5104, + "startLine": 1342, "startColumn": 15, - "endLine": 5104, + "endLine": 1342, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35719,15 +34941,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource52", + "logicalId": "Resource14", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5110, + "startLine": 1348, "startColumn": 15, - "endLine": 5110, + "endLine": 1348, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35738,15 +34960,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource53", + "logicalId": "Resource15", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 5168, + "startLine": 1406, "startColumn": 15, - "endLine": 5168, + "endLine": 1406, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35757,15 +34979,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource53", + "logicalId": "Resource15", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5203, + "startLine": 1441, "startColumn": 15, - "endLine": 5203, + "endLine": 1441, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35776,15 +34998,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource53", + "logicalId": "Resource15", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5209, + "startLine": 1447, "startColumn": 15, - "endLine": 5209, + "endLine": 1447, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35795,15 +35017,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource54", + "logicalId": "Resource16", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 5267, + "startLine": 1505, "startColumn": 15, - "endLine": 5267, + "endLine": 1505, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35814,15 +35036,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource54", + "logicalId": "Resource16", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5302, + "startLine": 1540, "startColumn": 15, - "endLine": 5302, + "endLine": 1540, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35833,15 +35055,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource54", + "logicalId": "Resource16", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5308, + "startLine": 1546, "startColumn": 15, - "endLine": 5308, + "endLine": 1546, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35852,15 +35074,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource55", + "logicalId": "Resource17", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 5366, + "startLine": 1604, "startColumn": 15, - "endLine": 5366, + "endLine": 1604, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35871,15 +35093,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource55", + "logicalId": "Resource17", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5401, + "startLine": 1639, "startColumn": 15, - "endLine": 5401, + "endLine": 1639, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35890,15 +35112,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource55", + "logicalId": "Resource17", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5407, + "startLine": 1645, "startColumn": 15, - "endLine": 5407, + "endLine": 1645, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35909,15 +35131,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource56", + "logicalId": "Resource18", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 5465, + "startLine": 1703, "startColumn": 15, - "endLine": 5465, + "endLine": 1703, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35928,15 +35150,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource56", + "logicalId": "Resource18", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5500, + "startLine": 1738, "startColumn": 15, - "endLine": 5500, + "endLine": 1738, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35947,15 +35169,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource56", + "logicalId": "Resource18", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5506, + "startLine": 1744, "startColumn": 15, - "endLine": 5506, + "endLine": 1744, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35966,15 +35188,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource57", + "logicalId": "Resource19", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 5564, + "startLine": 1802, "startColumn": 15, - "endLine": 5564, + "endLine": 1802, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -35985,15 +35207,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource57", + "logicalId": "Resource19", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5599, + "startLine": 1837, "startColumn": 15, - "endLine": 5599, + "endLine": 1837, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36004,15 +35226,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource57", + "logicalId": "Resource19", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5605, + "startLine": 1843, "startColumn": 15, - "endLine": 5605, + "endLine": 1843, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36023,15 +35245,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource58", + "logicalId": "Resource20", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 5663, + "startLine": 1901, "startColumn": 15, - "endLine": 5663, + "endLine": 1901, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36042,15 +35264,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource58", + "logicalId": "Resource20", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5698, + "startLine": 1936, "startColumn": 15, - "endLine": 5698, + "endLine": 1936, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36061,15 +35283,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource58", + "logicalId": "Resource20", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5704, + "startLine": 1942, "startColumn": 15, - "endLine": 5704, + "endLine": 1942, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36080,15 +35302,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource59", + "logicalId": "Resource21", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 5762, + "startLine": 2000, "startColumn": 15, - "endLine": 5762, + "endLine": 2000, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36099,15 +35321,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource59", + "logicalId": "Resource21", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5797, + "startLine": 2035, "startColumn": 15, - "endLine": 5797, + "endLine": 2035, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36118,15 +35340,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource59", + "logicalId": "Resource21", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5803, + "startLine": 2041, "startColumn": 15, - "endLine": 5803, + "endLine": 2041, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36137,15 +35359,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource60", + "logicalId": "Resource22", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 5861, + "startLine": 2099, "startColumn": 15, - "endLine": 5861, + "endLine": 2099, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36156,15 +35378,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource60", + "logicalId": "Resource22", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5896, + "startLine": 2134, "startColumn": 15, - "endLine": 5896, + "endLine": 2134, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36175,15 +35397,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource60", + "logicalId": "Resource22", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5902, + "startLine": 2140, "startColumn": 15, - "endLine": 5902, + "endLine": 2140, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36194,15 +35416,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource61", + "logicalId": "Resource23", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 5960, + "startLine": 2198, "startColumn": 15, - "endLine": 5960, + "endLine": 2198, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36213,15 +35435,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource61", + "logicalId": "Resource23", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 5995, + "startLine": 2233, "startColumn": 15, - "endLine": 5995, + "endLine": 2233, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36232,15 +35454,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource61", + "logicalId": "Resource23", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6001, + "startLine": 2239, "startColumn": 15, - "endLine": 6001, + "endLine": 2239, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36251,15 +35473,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource62", + "logicalId": "Resource24", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 6059, + "startLine": 2297, "startColumn": 15, - "endLine": 6059, + "endLine": 2297, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36270,15 +35492,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource62", + "logicalId": "Resource24", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6094, + "startLine": 2332, "startColumn": 15, - "endLine": 6094, + "endLine": 2332, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36289,15 +35511,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource62", + "logicalId": "Resource24", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6100, + "startLine": 2338, "startColumn": 15, - "endLine": 6100, + "endLine": 2338, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36308,15 +35530,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource63", + "logicalId": "Resource25", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 6158, + "startLine": 2396, "startColumn": 15, - "endLine": 6158, + "endLine": 2396, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36327,15 +35549,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource63", + "logicalId": "Resource25", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6193, + "startLine": 2431, "startColumn": 15, - "endLine": 6193, + "endLine": 2431, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36346,15 +35568,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource63", + "logicalId": "Resource25", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6199, + "startLine": 2437, "startColumn": 15, - "endLine": 6199, + "endLine": 2437, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36365,15 +35587,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource64", + "logicalId": "Resource26", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 6257, + "startLine": 2495, "startColumn": 15, - "endLine": 6257, + "endLine": 2495, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36384,15 +35606,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource64", + "logicalId": "Resource26", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6292, + "startLine": 2530, "startColumn": 15, - "endLine": 6292, + "endLine": 2530, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36403,15 +35625,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource64", + "logicalId": "Resource26", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6298, + "startLine": 2536, "startColumn": 15, - "endLine": 6298, + "endLine": 2536, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36422,15 +35644,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource65", + "logicalId": "Resource27", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 6356, + "startLine": 2594, "startColumn": 15, - "endLine": 6356, + "endLine": 2594, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36441,15 +35663,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource65", + "logicalId": "Resource27", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6391, + "startLine": 2629, "startColumn": 15, - "endLine": 6391, + "endLine": 2629, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36460,15 +35682,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource65", + "logicalId": "Resource27", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6397, + "startLine": 2635, "startColumn": 15, - "endLine": 6397, + "endLine": 2635, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36479,15 +35701,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource66", + "logicalId": "Resource28", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 6455, + "startLine": 2693, "startColumn": 15, - "endLine": 6455, + "endLine": 2693, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36498,15 +35720,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource66", + "logicalId": "Resource28", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6490, + "startLine": 2728, "startColumn": 15, - "endLine": 6490, + "endLine": 2728, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36517,15 +35739,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource66", + "logicalId": "Resource28", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6496, + "startLine": 2734, "startColumn": 15, - "endLine": 6496, + "endLine": 2734, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36536,15 +35758,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource67", + "logicalId": "Resource29", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 6554, + "startLine": 2792, "startColumn": 15, - "endLine": 6554, + "endLine": 2792, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36555,15 +35777,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource67", + "logicalId": "Resource29", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6589, + "startLine": 2827, "startColumn": 15, - "endLine": 6589, + "endLine": 2827, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36574,15 +35796,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource67", + "logicalId": "Resource29", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6595, + "startLine": 2833, "startColumn": 15, - "endLine": 6595, + "endLine": 2833, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36593,15 +35815,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource68", + "logicalId": "Resource30", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 6653, + "startLine": 2891, "startColumn": 15, - "endLine": 6653, + "endLine": 2891, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36612,15 +35834,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource68", + "logicalId": "Resource30", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6688, + "startLine": 2926, "startColumn": 15, - "endLine": 6688, + "endLine": 2926, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36631,15 +35853,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource68", + "logicalId": "Resource30", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6694, + "startLine": 2932, "startColumn": 15, - "endLine": 6694, + "endLine": 2932, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36650,15 +35872,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource69", + "logicalId": "Resource31", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 6752, + "startLine": 2990, "startColumn": 15, - "endLine": 6752, + "endLine": 2990, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36669,15 +35891,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource69", + "logicalId": "Resource31", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6787, + "startLine": 3025, "startColumn": 15, - "endLine": 6787, + "endLine": 3025, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36688,15 +35910,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource69", + "logicalId": "Resource31", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6793, + "startLine": 3031, "startColumn": 15, - "endLine": 6793, + "endLine": 3031, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36707,15 +35929,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource70", + "logicalId": "Resource32", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 6851, + "startLine": 3089, "startColumn": 15, - "endLine": 6851, + "endLine": 3089, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36726,15 +35948,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource70", + "logicalId": "Resource32", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6886, + "startLine": 3124, "startColumn": 15, - "endLine": 6886, + "endLine": 3124, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36745,15 +35967,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource70", + "logicalId": "Resource32", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6892, + "startLine": 3130, "startColumn": 15, - "endLine": 6892, + "endLine": 3130, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36764,15 +35986,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource71", + "logicalId": "Resource33", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 6950, + "startLine": 3188, "startColumn": 15, - "endLine": 6950, + "endLine": 3188, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36783,15 +36005,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource71", + "logicalId": "Resource33", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6985, + "startLine": 3223, "startColumn": 15, - "endLine": 6985, + "endLine": 3223, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36802,15 +36024,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource71", + "logicalId": "Resource33", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 6991, + "startLine": 3229, "startColumn": 15, - "endLine": 6991, + "endLine": 3229, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36821,15 +36043,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource72", + "logicalId": "Resource34", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 7049, + "startLine": 3287, "startColumn": 15, - "endLine": 7049, + "endLine": 3287, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36840,15 +36062,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource72", + "logicalId": "Resource34", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7084, + "startLine": 3322, "startColumn": 15, - "endLine": 7084, + "endLine": 3322, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36859,15 +36081,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource72", + "logicalId": "Resource34", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7090, + "startLine": 3328, "startColumn": 15, - "endLine": 7090, + "endLine": 3328, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36878,15 +36100,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource73", + "logicalId": "Resource35", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 7148, + "startLine": 3386, "startColumn": 15, - "endLine": 7148, + "endLine": 3386, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36897,15 +36119,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource73", + "logicalId": "Resource35", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7183, + "startLine": 3421, "startColumn": 15, - "endLine": 7183, + "endLine": 3421, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36916,15 +36138,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource73", + "logicalId": "Resource35", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7189, + "startLine": 3427, "startColumn": 15, - "endLine": 7189, + "endLine": 3427, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36935,15 +36157,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource74", + "logicalId": "Resource36", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 7247, + "startLine": 3485, "startColumn": 15, - "endLine": 7247, + "endLine": 3485, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36954,15 +36176,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource74", + "logicalId": "Resource36", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7282, + "startLine": 3520, "startColumn": 15, - "endLine": 7282, + "endLine": 3520, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36973,15 +36195,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource74", + "logicalId": "Resource36", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7288, + "startLine": 3526, "startColumn": 15, - "endLine": 7288, + "endLine": 3526, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -36992,15 +36214,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource75", + "logicalId": "Resource37", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 7346, + "startLine": 3584, "startColumn": 15, - "endLine": 7346, + "endLine": 3584, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37011,15 +36233,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource75", + "logicalId": "Resource37", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7381, + "startLine": 3619, "startColumn": 15, - "endLine": 7381, + "endLine": 3619, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37030,15 +36252,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource75", + "logicalId": "Resource37", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7387, + "startLine": 3625, "startColumn": 15, - "endLine": 7387, + "endLine": 3625, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37049,15 +36271,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource76", + "logicalId": "Resource38", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 7445, + "startLine": 3683, "startColumn": 15, - "endLine": 7445, + "endLine": 3683, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37068,15 +36290,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource76", + "logicalId": "Resource38", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7480, + "startLine": 3718, "startColumn": 15, - "endLine": 7480, + "endLine": 3718, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37087,15 +36309,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource76", + "logicalId": "Resource38", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7486, + "startLine": 3724, "startColumn": 15, - "endLine": 7486, + "endLine": 3724, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37106,15 +36328,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource77", + "logicalId": "Resource39", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 7544, + "startLine": 3782, "startColumn": 15, - "endLine": 7544, + "endLine": 3782, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37125,15 +36347,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource77", + "logicalId": "Resource39", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7579, + "startLine": 3817, "startColumn": 15, - "endLine": 7579, + "endLine": 3817, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37144,15 +36366,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource77", + "logicalId": "Resource39", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7585, + "startLine": 3823, "startColumn": 15, - "endLine": 7585, + "endLine": 3823, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37163,15 +36385,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource78", + "logicalId": "Resource40", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 7643, + "startLine": 3881, "startColumn": 15, - "endLine": 7643, + "endLine": 3881, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37182,15 +36404,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource78", + "logicalId": "Resource40", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7678, + "startLine": 3916, "startColumn": 15, - "endLine": 7678, + "endLine": 3916, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37201,15 +36423,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource78", + "logicalId": "Resource40", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7684, + "startLine": 3922, "startColumn": 15, - "endLine": 7684, + "endLine": 3922, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37220,15 +36442,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource79", + "logicalId": "Resource41", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 7742, + "startLine": 3980, "startColumn": 15, - "endLine": 7742, + "endLine": 3980, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37239,15 +36461,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource79", + "logicalId": "Resource41", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7777, + "startLine": 4015, "startColumn": 15, - "endLine": 7777, + "endLine": 4015, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37258,15 +36480,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource79", + "logicalId": "Resource41", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7783, + "startLine": 4021, "startColumn": 15, - "endLine": 7783, + "endLine": 4021, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37277,15 +36499,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource80", + "logicalId": "Resource42", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 7841, + "startLine": 4079, "startColumn": 15, - "endLine": 7841, + "endLine": 4079, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37296,15 +36518,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource80", + "logicalId": "Resource42", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7876, + "startLine": 4114, "startColumn": 15, - "endLine": 7876, + "endLine": 4114, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37315,15 +36537,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource80", + "logicalId": "Resource42", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7882, + "startLine": 4120, "startColumn": 15, - "endLine": 7882, + "endLine": 4120, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37334,15 +36556,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource81", + "logicalId": "Resource43", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 7940, + "startLine": 4178, "startColumn": 15, - "endLine": 7940, + "endLine": 4178, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37353,15 +36575,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource81", + "logicalId": "Resource43", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7975, + "startLine": 4213, "startColumn": 15, - "endLine": 7975, + "endLine": 4213, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37372,15 +36594,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource81", + "logicalId": "Resource43", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 7981, + "startLine": 4219, "startColumn": 15, - "endLine": 7981, + "endLine": 4219, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37391,15 +36613,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource82", + "logicalId": "Resource44", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 8039, + "startLine": 4277, "startColumn": 15, - "endLine": 8039, + "endLine": 4277, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37410,15 +36632,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource82", + "logicalId": "Resource44", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8074, + "startLine": 4312, "startColumn": 15, - "endLine": 8074, + "endLine": 4312, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37429,15 +36651,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource82", + "logicalId": "Resource44", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8080, + "startLine": 4318, "startColumn": 15, - "endLine": 8080, + "endLine": 4318, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37448,15 +36670,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource83", + "logicalId": "Resource45", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 8138, + "startLine": 4376, "startColumn": 15, - "endLine": 8138, + "endLine": 4376, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37467,15 +36689,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource83", + "logicalId": "Resource45", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8173, + "startLine": 4411, "startColumn": 15, - "endLine": 8173, + "endLine": 4411, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37486,15 +36708,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource83", + "logicalId": "Resource45", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8179, + "startLine": 4417, "startColumn": 15, - "endLine": 8179, + "endLine": 4417, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37505,15 +36727,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource84", + "logicalId": "Resource46", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 8237, + "startLine": 4475, "startColumn": 15, - "endLine": 8237, + "endLine": 4475, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37524,15 +36746,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource84", + "logicalId": "Resource46", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8272, + "startLine": 4510, "startColumn": 15, - "endLine": 8272, + "endLine": 4510, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37543,15 +36765,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource84", + "logicalId": "Resource46", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8278, + "startLine": 4516, "startColumn": 15, - "endLine": 8278, + "endLine": 4516, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37562,15 +36784,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource85", + "logicalId": "Resource47", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 8336, + "startLine": 4574, "startColumn": 15, - "endLine": 8336, + "endLine": 4574, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37581,15 +36803,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource85", + "logicalId": "Resource47", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8371, + "startLine": 4609, "startColumn": 15, - "endLine": 8371, + "endLine": 4609, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37600,15 +36822,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource85", + "logicalId": "Resource47", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8377, + "startLine": 4615, "startColumn": 15, - "endLine": 8377, + "endLine": 4615, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37619,15 +36841,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource86", + "logicalId": "Resource48", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 8435, + "startLine": 4673, "startColumn": 15, - "endLine": 8435, + "endLine": 4673, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37638,15 +36860,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource86", + "logicalId": "Resource48", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8470, + "startLine": 4708, "startColumn": 15, - "endLine": 8470, + "endLine": 4708, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37657,15 +36879,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource86", + "logicalId": "Resource48", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8476, + "startLine": 4714, "startColumn": 15, - "endLine": 8476, + "endLine": 4714, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37676,15 +36898,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource87", + "logicalId": "Resource49", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 8534, + "startLine": 4772, "startColumn": 15, - "endLine": 8534, + "endLine": 4772, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37695,15 +36917,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource87", + "logicalId": "Resource49", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8569, + "startLine": 4807, "startColumn": 15, - "endLine": 8569, + "endLine": 4807, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37714,15 +36936,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource87", + "logicalId": "Resource49", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8575, + "startLine": 4813, "startColumn": 15, - "endLine": 8575, + "endLine": 4813, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37733,15 +36955,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource88", + "logicalId": "Resource50", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 8633, + "startLine": 4871, "startColumn": 15, - "endLine": 8633, + "endLine": 4871, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37752,15 +36974,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource88", + "logicalId": "Resource50", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8668, + "startLine": 4906, "startColumn": 15, - "endLine": 8668, + "endLine": 4906, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37771,15 +36993,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource88", + "logicalId": "Resource50", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8674, + "startLine": 4912, "startColumn": 15, - "endLine": 8674, + "endLine": 4912, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37790,15 +37012,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource89", + "logicalId": "Resource51", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 8732, + "startLine": 4970, "startColumn": 15, - "endLine": 8732, + "endLine": 4970, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37809,15 +37031,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource89", + "logicalId": "Resource51", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8767, + "startLine": 5005, "startColumn": 15, - "endLine": 8767, + "endLine": 5005, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37828,15 +37050,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource89", + "logicalId": "Resource51", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8773, + "startLine": 5011, "startColumn": 15, - "endLine": 8773, + "endLine": 5011, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37847,15 +37069,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource90", + "logicalId": "Resource52", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 8831, + "startLine": 5069, "startColumn": 15, - "endLine": 8831, + "endLine": 5069, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37866,15 +37088,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource90", + "logicalId": "Resource52", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8866, + "startLine": 5104, "startColumn": 15, - "endLine": 8866, + "endLine": 5104, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37885,15 +37107,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource90", + "logicalId": "Resource52", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8872, + "startLine": 5110, "startColumn": 15, - "endLine": 8872, + "endLine": 5110, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37904,15 +37126,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource91", + "logicalId": "Resource53", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 8930, + "startLine": 5168, "startColumn": 15, - "endLine": 8930, + "endLine": 5168, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37923,15 +37145,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource91", + "logicalId": "Resource53", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8965, + "startLine": 5203, "startColumn": 15, - "endLine": 8965, + "endLine": 5203, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37942,15 +37164,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource91", + "logicalId": "Resource53", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 8971, + "startLine": 5209, "startColumn": 15, - "endLine": 8971, + "endLine": 5209, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37961,15 +37183,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource92", + "logicalId": "Resource54", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 9029, + "startLine": 5267, "startColumn": 15, - "endLine": 9029, + "endLine": 5267, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37980,15 +37202,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource92", + "logicalId": "Resource54", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9064, + "startLine": 5302, "startColumn": 15, - "endLine": 9064, + "endLine": 5302, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -37999,15 +37221,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource92", + "logicalId": "Resource54", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9070, + "startLine": 5308, "startColumn": 15, - "endLine": 9070, + "endLine": 5308, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38018,15 +37240,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource93", + "logicalId": "Resource55", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 9128, + "startLine": 5366, "startColumn": 15, - "endLine": 9128, + "endLine": 5366, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38037,15 +37259,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource93", + "logicalId": "Resource55", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9163, + "startLine": 5401, "startColumn": 15, - "endLine": 9163, + "endLine": 5401, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38056,15 +37278,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource93", + "logicalId": "Resource55", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9169, + "startLine": 5407, "startColumn": 15, - "endLine": 9169, + "endLine": 5407, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38075,15 +37297,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource94", + "logicalId": "Resource56", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 9227, + "startLine": 5465, "startColumn": 15, - "endLine": 9227, + "endLine": 5465, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38094,15 +37316,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource94", + "logicalId": "Resource56", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9262, + "startLine": 5500, "startColumn": 15, - "endLine": 9262, + "endLine": 5500, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38113,15 +37335,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource94", + "logicalId": "Resource56", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9268, + "startLine": 5506, "startColumn": 15, - "endLine": 9268, + "endLine": 5506, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38132,15 +37354,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource95", + "logicalId": "Resource57", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 9326, + "startLine": 5564, "startColumn": 15, - "endLine": 9326, + "endLine": 5564, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38151,15 +37373,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource95", + "logicalId": "Resource57", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9361, + "startLine": 5599, "startColumn": 15, - "endLine": 9361, + "endLine": 5599, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38170,15 +37392,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource95", + "logicalId": "Resource57", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9367, + "startLine": 5605, "startColumn": 15, - "endLine": 9367, + "endLine": 5605, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38189,15 +37411,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource96", + "logicalId": "Resource58", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 9425, + "startLine": 5663, "startColumn": 15, - "endLine": 9425, + "endLine": 5663, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38208,15 +37430,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource96", + "logicalId": "Resource58", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9460, + "startLine": 5698, "startColumn": 15, - "endLine": 9460, + "endLine": 5698, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38227,15 +37449,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource96", + "logicalId": "Resource58", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9466, + "startLine": 5704, "startColumn": 15, - "endLine": 9466, + "endLine": 5704, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38246,15 +37468,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource97", + "logicalId": "Resource59", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 9524, + "startLine": 5762, "startColumn": 15, - "endLine": 9524, + "endLine": 5762, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38265,15 +37487,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource97", + "logicalId": "Resource59", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9559, + "startLine": 5797, "startColumn": 15, - "endLine": 9559, + "endLine": 5797, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38284,15 +37506,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource97", + "logicalId": "Resource59", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9565, + "startLine": 5803, "startColumn": 15, - "endLine": 9565, + "endLine": 5803, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38303,15 +37525,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource98", + "logicalId": "Resource60", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 9623, + "startLine": 5861, "startColumn": 15, - "endLine": 9623, + "endLine": 5861, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38322,15 +37544,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource98", + "logicalId": "Resource60", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9658, + "startLine": 5896, "startColumn": 15, - "endLine": 9658, + "endLine": 5896, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38341,15 +37563,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource98", + "logicalId": "Resource60", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9664, + "startLine": 5902, "startColumn": 15, - "endLine": 9664, + "endLine": 5902, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38360,15 +37582,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource99", + "logicalId": "Resource61", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 9722, + "startLine": 5960, "startColumn": 15, - "endLine": 9722, + "endLine": 5960, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38379,15 +37601,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource99", + "logicalId": "Resource61", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9757, + "startLine": 5995, "startColumn": 15, - "endLine": 9757, + "endLine": 5995, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38398,15 +37620,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource99", + "logicalId": "Resource61", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9763, + "startLine": 6001, "startColumn": 15, - "endLine": 9763, + "endLine": 6001, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38417,15 +37639,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource100", + "logicalId": "Resource62", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 9821, + "startLine": 6059, "startColumn": 15, - "endLine": 9821, + "endLine": 6059, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38436,15 +37658,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource100", + "logicalId": "Resource62", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9856, + "startLine": 6094, "startColumn": 15, - "endLine": 9856, + "endLine": 6094, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38455,15 +37677,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource100", + "logicalId": "Resource62", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9862, + "startLine": 6100, "startColumn": 15, - "endLine": 9862, + "endLine": 6100, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38474,15 +37696,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource101", + "logicalId": "Resource63", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 9920, + "startLine": 6158, "startColumn": 15, - "endLine": 9920, + "endLine": 6158, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38493,15 +37715,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource101", + "logicalId": "Resource63", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9955, + "startLine": 6193, "startColumn": 15, - "endLine": 9955, + "endLine": 6193, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38512,15 +37734,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource101", + "logicalId": "Resource63", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 9961, + "startLine": 6199, "startColumn": 15, - "endLine": 9961, + "endLine": 6199, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38531,15 +37753,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource102", + "logicalId": "Resource64", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 10019, + "startLine": 6257, "startColumn": 15, - "endLine": 10019, + "endLine": 6257, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38550,15 +37772,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource102", + "logicalId": "Resource64", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10054, + "startLine": 6292, "startColumn": 15, - "endLine": 10054, + "endLine": 6292, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38569,15 +37791,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource102", + "logicalId": "Resource64", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10060, + "startLine": 6298, "startColumn": 15, - "endLine": 10060, + "endLine": 6298, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38588,15 +37810,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource103", + "logicalId": "Resource65", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 10118, + "startLine": 6356, "startColumn": 15, - "endLine": 10118, + "endLine": 6356, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38607,15 +37829,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource103", + "logicalId": "Resource65", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10153, + "startLine": 6391, "startColumn": 15, - "endLine": 10153, + "endLine": 6391, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38626,15 +37848,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource103", + "logicalId": "Resource65", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10159, + "startLine": 6397, "startColumn": 15, - "endLine": 10159, + "endLine": 6397, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38645,15 +37867,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource104", + "logicalId": "Resource66", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 10217, + "startLine": 6455, "startColumn": 15, - "endLine": 10217, + "endLine": 6455, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38664,15 +37886,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource104", + "logicalId": "Resource66", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10252, + "startLine": 6490, "startColumn": 15, - "endLine": 10252, + "endLine": 6490, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38683,15 +37905,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource104", + "logicalId": "Resource66", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10258, + "startLine": 6496, "startColumn": 15, - "endLine": 10258, + "endLine": 6496, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38702,15 +37924,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource105", + "logicalId": "Resource67", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 10316, + "startLine": 6554, "startColumn": 15, - "endLine": 10316, + "endLine": 6554, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38721,15 +37943,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource105", + "logicalId": "Resource67", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10351, + "startLine": 6589, "startColumn": 15, - "endLine": 10351, + "endLine": 6589, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38740,15 +37962,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource105", + "logicalId": "Resource67", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10357, + "startLine": 6595, "startColumn": 15, - "endLine": 10357, + "endLine": 6595, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38759,15 +37981,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource106", + "logicalId": "Resource68", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 10415, + "startLine": 6653, "startColumn": 15, - "endLine": 10415, + "endLine": 6653, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38778,15 +38000,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource106", + "logicalId": "Resource68", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10450, + "startLine": 6688, "startColumn": 15, - "endLine": 10450, + "endLine": 6688, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38797,15 +38019,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource106", + "logicalId": "Resource68", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10456, + "startLine": 6694, "startColumn": 15, - "endLine": 10456, + "endLine": 6694, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38816,15 +38038,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource107", + "logicalId": "Resource69", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 10514, + "startLine": 6752, "startColumn": 15, - "endLine": 10514, + "endLine": 6752, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38835,15 +38057,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource107", + "logicalId": "Resource69", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10549, + "startLine": 6787, "startColumn": 15, - "endLine": 10549, + "endLine": 6787, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38854,15 +38076,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource107", + "logicalId": "Resource69", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10555, + "startLine": 6793, "startColumn": 15, - "endLine": 10555, + "endLine": 6793, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38873,15 +38095,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource108", + "logicalId": "Resource70", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 10613, + "startLine": 6851, "startColumn": 15, - "endLine": 10613, + "endLine": 6851, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38892,15 +38114,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource108", + "logicalId": "Resource70", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10648, + "startLine": 6886, "startColumn": 15, - "endLine": 10648, + "endLine": 6886, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38911,15 +38133,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource108", + "logicalId": "Resource70", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10654, + "startLine": 6892, "startColumn": 15, - "endLine": 10654, + "endLine": 6892, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38930,15 +38152,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource109", + "logicalId": "Resource71", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 10712, + "startLine": 6950, "startColumn": 15, - "endLine": 10712, + "endLine": 6950, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38949,15 +38171,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource109", + "logicalId": "Resource71", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10747, + "startLine": 6985, "startColumn": 15, - "endLine": 10747, + "endLine": 6985, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38968,15 +38190,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource109", + "logicalId": "Resource71", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10753, + "startLine": 6991, "startColumn": 15, - "endLine": 10753, + "endLine": 6991, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -38987,15 +38209,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource110", + "logicalId": "Resource72", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 10811, + "startLine": 7049, "startColumn": 15, - "endLine": 10811, + "endLine": 7049, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39006,15 +38228,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource110", + "logicalId": "Resource72", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10846, + "startLine": 7084, "startColumn": 15, - "endLine": 10846, + "endLine": 7084, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39025,15 +38247,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource110", + "logicalId": "Resource72", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10852, + "startLine": 7090, "startColumn": 15, - "endLine": 10852, + "endLine": 7090, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39044,15 +38266,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource111", + "logicalId": "Resource73", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 10910, + "startLine": 7148, "startColumn": 15, - "endLine": 10910, + "endLine": 7148, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39063,15 +38285,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource111", + "logicalId": "Resource73", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10945, + "startLine": 7183, "startColumn": 15, - "endLine": 10945, + "endLine": 7183, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39082,15 +38304,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource111", + "logicalId": "Resource73", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 10951, + "startLine": 7189, "startColumn": 15, - "endLine": 10951, + "endLine": 7189, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39101,15 +38323,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource112", + "logicalId": "Resource74", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 11009, + "startLine": 7247, "startColumn": 15, - "endLine": 11009, + "endLine": 7247, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39120,15 +38342,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource112", + "logicalId": "Resource74", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11044, + "startLine": 7282, "startColumn": 15, - "endLine": 11044, + "endLine": 7282, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39139,15 +38361,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource112", + "logicalId": "Resource74", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11050, + "startLine": 7288, "startColumn": 15, - "endLine": 11050, + "endLine": 7288, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39158,15 +38380,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource113", + "logicalId": "Resource75", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 11108, + "startLine": 7346, "startColumn": 15, - "endLine": 11108, + "endLine": 7346, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39177,15 +38399,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource113", + "logicalId": "Resource75", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11143, + "startLine": 7381, "startColumn": 15, - "endLine": 11143, + "endLine": 7381, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39196,15 +38418,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource113", + "logicalId": "Resource75", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11149, + "startLine": 7387, "startColumn": 15, - "endLine": 11149, + "endLine": 7387, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39215,15 +38437,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource114", + "logicalId": "Resource76", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 11207, + "startLine": 7445, "startColumn": 15, - "endLine": 11207, + "endLine": 7445, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39234,15 +38456,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource114", + "logicalId": "Resource76", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11242, + "startLine": 7480, "startColumn": 15, - "endLine": 11242, + "endLine": 7480, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39253,15 +38475,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource114", + "logicalId": "Resource76", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11248, + "startLine": 7486, "startColumn": 15, - "endLine": 11248, + "endLine": 7486, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39272,15 +38494,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource115", + "logicalId": "Resource77", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 11306, + "startLine": 7544, "startColumn": 15, - "endLine": 11306, + "endLine": 7544, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39291,15 +38513,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource115", + "logicalId": "Resource77", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11341, + "startLine": 7579, "startColumn": 15, - "endLine": 11341, + "endLine": 7579, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39310,15 +38532,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource115", + "logicalId": "Resource77", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11347, + "startLine": 7585, "startColumn": 15, - "endLine": 11347, + "endLine": 7585, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39329,15 +38551,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource116", + "logicalId": "Resource78", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 11405, + "startLine": 7643, "startColumn": 15, - "endLine": 11405, + "endLine": 7643, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39348,15 +38570,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource116", + "logicalId": "Resource78", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11440, + "startLine": 7678, "startColumn": 15, - "endLine": 11440, + "endLine": 7678, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39367,15 +38589,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource116", + "logicalId": "Resource78", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11446, + "startLine": 7684, "startColumn": 15, - "endLine": 11446, + "endLine": 7684, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39386,15 +38608,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource117", + "logicalId": "Resource79", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 11504, + "startLine": 7742, "startColumn": 15, - "endLine": 11504, + "endLine": 7742, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39405,15 +38627,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource117", + "logicalId": "Resource79", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11539, + "startLine": 7777, "startColumn": 15, - "endLine": 11539, + "endLine": 7777, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39424,15 +38646,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource117", + "logicalId": "Resource79", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11545, + "startLine": 7783, "startColumn": 15, - "endLine": 11545, + "endLine": 7783, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39443,15 +38665,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource118", + "logicalId": "Resource80", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 11603, + "startLine": 7841, "startColumn": 15, - "endLine": 11603, + "endLine": 7841, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39462,15 +38684,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource118", + "logicalId": "Resource80", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11638, + "startLine": 7876, "startColumn": 15, - "endLine": 11638, + "endLine": 7876, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39481,15 +38703,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource118", + "logicalId": "Resource80", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11644, + "startLine": 7882, "startColumn": 15, - "endLine": 11644, + "endLine": 7882, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39500,15 +38722,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource119", + "logicalId": "Resource81", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 11702, + "startLine": 7940, "startColumn": 15, - "endLine": 11702, + "endLine": 7940, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39519,15 +38741,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource119", + "logicalId": "Resource81", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11737, + "startLine": 7975, "startColumn": 15, - "endLine": 11737, + "endLine": 7975, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39538,15 +38760,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource119", + "logicalId": "Resource81", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11743, + "startLine": 7981, "startColumn": 15, - "endLine": 11743, + "endLine": 7981, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39557,15 +38779,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource120", + "logicalId": "Resource82", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 11801, + "startLine": 8039, "startColumn": 15, - "endLine": 11801, + "endLine": 8039, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39576,15 +38798,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource120", + "logicalId": "Resource82", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11836, + "startLine": 8074, "startColumn": 15, - "endLine": 11836, + "endLine": 8074, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39595,15 +38817,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource120", + "logicalId": "Resource82", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11842, + "startLine": 8080, "startColumn": 15, - "endLine": 11842, + "endLine": 8080, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39614,15 +38836,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource121", + "logicalId": "Resource83", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 11900, + "startLine": 8138, "startColumn": 15, - "endLine": 11900, + "endLine": 8138, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39633,15 +38855,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource121", + "logicalId": "Resource83", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11935, + "startLine": 8173, "startColumn": 15, - "endLine": 11935, + "endLine": 8173, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39652,15 +38874,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource121", + "logicalId": "Resource83", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 11941, + "startLine": 8179, "startColumn": 15, - "endLine": 11941, + "endLine": 8179, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39671,15 +38893,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource122", + "logicalId": "Resource84", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 11999, + "startLine": 8237, "startColumn": 15, - "endLine": 11999, + "endLine": 8237, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39690,15 +38912,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource122", + "logicalId": "Resource84", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12034, + "startLine": 8272, "startColumn": 15, - "endLine": 12034, + "endLine": 8272, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39709,15 +38931,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource122", + "logicalId": "Resource84", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12040, + "startLine": 8278, "startColumn": 15, - "endLine": 12040, + "endLine": 8278, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39728,15 +38950,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource123", + "logicalId": "Resource85", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 12098, + "startLine": 8336, "startColumn": 15, - "endLine": 12098, + "endLine": 8336, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39747,15 +38969,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource123", + "logicalId": "Resource85", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12133, + "startLine": 8371, "startColumn": 15, - "endLine": 12133, + "endLine": 8371, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39766,15 +38988,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource123", + "logicalId": "Resource85", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12139, + "startLine": 8377, "startColumn": 15, - "endLine": 12139, + "endLine": 8377, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39785,15 +39007,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource124", + "logicalId": "Resource86", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 12197, + "startLine": 8435, "startColumn": 15, - "endLine": 12197, + "endLine": 8435, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39804,15 +39026,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource124", + "logicalId": "Resource86", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12232, + "startLine": 8470, "startColumn": 15, - "endLine": 12232, + "endLine": 8470, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39823,15 +39045,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource124", + "logicalId": "Resource86", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12238, + "startLine": 8476, "startColumn": 15, - "endLine": 12238, + "endLine": 8476, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39842,15 +39064,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource125", + "logicalId": "Resource87", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 12296, + "startLine": 8534, "startColumn": 15, - "endLine": 12296, + "endLine": 8534, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39861,15 +39083,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource125", + "logicalId": "Resource87", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12331, + "startLine": 8569, "startColumn": 15, - "endLine": 12331, + "endLine": 8569, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39880,15 +39102,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource125", + "logicalId": "Resource87", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12337, + "startLine": 8575, "startColumn": 15, - "endLine": 12337, + "endLine": 8575, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39899,15 +39121,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource126", + "logicalId": "Resource88", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 12395, + "startLine": 8633, "startColumn": 15, - "endLine": 12395, + "endLine": 8633, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39918,15 +39140,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource126", + "logicalId": "Resource88", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12430, + "startLine": 8668, "startColumn": 15, - "endLine": 12430, + "endLine": 8668, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39937,15 +39159,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource126", + "logicalId": "Resource88", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12436, + "startLine": 8674, "startColumn": 15, - "endLine": 12436, + "endLine": 8674, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39956,15 +39178,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource127", + "logicalId": "Resource89", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 12494, + "startLine": 8732, "startColumn": 15, - "endLine": 12494, + "endLine": 8732, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39975,15 +39197,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource127", + "logicalId": "Resource89", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12529, + "startLine": 8767, "startColumn": 15, - "endLine": 12529, + "endLine": 8767, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -39994,15 +39216,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource127", + "logicalId": "Resource89", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12535, + "startLine": 8773, "startColumn": 15, - "endLine": 12535, + "endLine": 8773, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40013,15 +39235,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource128", + "logicalId": "Resource90", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 12593, + "startLine": 8831, "startColumn": 15, - "endLine": 12593, + "endLine": 8831, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40032,15 +39254,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource128", + "logicalId": "Resource90", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12628, + "startLine": 8866, "startColumn": 15, - "endLine": 12628, + "endLine": 8866, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40051,15 +39273,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource128", + "logicalId": "Resource90", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12634, + "startLine": 8872, "startColumn": 15, - "endLine": 12634, + "endLine": 8872, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40070,15 +39292,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource129", + "logicalId": "Resource91", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 12692, + "startLine": 8930, "startColumn": 15, - "endLine": 12692, + "endLine": 8930, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40089,15 +39311,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource129", + "logicalId": "Resource91", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12727, + "startLine": 8965, "startColumn": 15, - "endLine": 12727, + "endLine": 8965, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40108,15 +39330,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource129", + "logicalId": "Resource91", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12733, + "startLine": 8971, "startColumn": 15, - "endLine": 12733, + "endLine": 8971, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40127,15 +39349,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource130", + "logicalId": "Resource92", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 12791, + "startLine": 9029, "startColumn": 15, - "endLine": 12791, + "endLine": 9029, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40146,15 +39368,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource130", + "logicalId": "Resource92", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12826, + "startLine": 9064, "startColumn": 15, - "endLine": 12826, + "endLine": 9064, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40165,15 +39387,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource130", + "logicalId": "Resource92", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12832, + "startLine": 9070, "startColumn": 15, - "endLine": 12832, + "endLine": 9070, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40184,15 +39406,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource131", + "logicalId": "Resource93", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 12890, + "startLine": 9128, "startColumn": 15, - "endLine": 12890, + "endLine": 9128, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40203,15 +39425,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource131", + "logicalId": "Resource93", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12925, + "startLine": 9163, "startColumn": 15, - "endLine": 12925, + "endLine": 9163, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40222,15 +39444,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource131", + "logicalId": "Resource93", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 12931, + "startLine": 9169, "startColumn": 15, - "endLine": 12931, + "endLine": 9169, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40241,15 +39463,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource132", + "logicalId": "Resource94", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 12989, + "startLine": 9227, "startColumn": 15, - "endLine": 12989, + "endLine": 9227, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40260,15 +39482,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource132", + "logicalId": "Resource94", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13024, + "startLine": 9262, "startColumn": 15, - "endLine": 13024, + "endLine": 9262, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40279,15 +39501,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource132", + "logicalId": "Resource94", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13030, + "startLine": 9268, "startColumn": 15, - "endLine": 13030, + "endLine": 9268, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40298,15 +39520,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource133", + "logicalId": "Resource95", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 13088, + "startLine": 9326, "startColumn": 15, - "endLine": 13088, + "endLine": 9326, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40317,15 +39539,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource133", + "logicalId": "Resource95", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13123, + "startLine": 9361, "startColumn": 15, - "endLine": 13123, + "endLine": 9361, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40336,15 +39558,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource133", + "logicalId": "Resource95", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13129, + "startLine": 9367, "startColumn": 15, - "endLine": 13129, + "endLine": 9367, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40355,15 +39577,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource134", + "logicalId": "Resource96", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 13187, + "startLine": 9425, "startColumn": 15, - "endLine": 13187, + "endLine": 9425, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40374,15 +39596,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource134", + "logicalId": "Resource96", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13222, + "startLine": 9460, "startColumn": 15, - "endLine": 13222, + "endLine": 9460, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40393,15 +39615,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource134", + "logicalId": "Resource96", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13228, + "startLine": 9466, "startColumn": 15, - "endLine": 13228, + "endLine": 9466, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40412,15 +39634,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource135", + "logicalId": "Resource97", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 13286, + "startLine": 9524, "startColumn": 15, - "endLine": 13286, + "endLine": 9524, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40431,15 +39653,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource135", + "logicalId": "Resource97", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13321, + "startLine": 9559, "startColumn": 15, - "endLine": 13321, + "endLine": 9559, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40450,15 +39672,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource135", + "logicalId": "Resource97", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13327, + "startLine": 9565, "startColumn": 15, - "endLine": 13327, + "endLine": 9565, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40469,15 +39691,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource136", + "logicalId": "Resource98", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 13385, + "startLine": 9623, "startColumn": 15, - "endLine": 13385, + "endLine": 9623, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40488,15 +39710,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource136", + "logicalId": "Resource98", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13420, + "startLine": 9658, "startColumn": 15, - "endLine": 13420, + "endLine": 9658, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40507,15 +39729,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource136", + "logicalId": "Resource98", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13426, + "startLine": 9664, "startColumn": 15, - "endLine": 13426, + "endLine": 9664, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40526,15 +39748,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource137", + "logicalId": "Resource99", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 13484, + "startLine": 9722, "startColumn": 15, - "endLine": 13484, + "endLine": 9722, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40545,15 +39767,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource137", + "logicalId": "Resource99", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13519, + "startLine": 9757, "startColumn": 15, - "endLine": 13519, + "endLine": 9757, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40564,15 +39786,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource137", + "logicalId": "Resource99", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13525, + "startLine": 9763, "startColumn": 15, - "endLine": 13525, + "endLine": 9763, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40583,15 +39805,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource138", + "logicalId": "Resource100", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 13583, + "startLine": 9821, "startColumn": 15, - "endLine": 13583, + "endLine": 9821, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40602,15 +39824,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource138", + "logicalId": "Resource100", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13618, + "startLine": 9856, "startColumn": 15, - "endLine": 13618, + "endLine": 9856, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40621,15 +39843,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource138", + "logicalId": "Resource100", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13624, + "startLine": 9862, "startColumn": 15, - "endLine": 13624, + "endLine": 9862, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40640,15 +39862,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource139", + "logicalId": "Resource101", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 13682, + "startLine": 9920, "startColumn": 15, - "endLine": 13682, + "endLine": 9920, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40659,15 +39881,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource139", + "logicalId": "Resource101", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13717, + "startLine": 9955, "startColumn": 15, - "endLine": 13717, + "endLine": 9955, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40678,15 +39900,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource139", + "logicalId": "Resource101", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13723, + "startLine": 9961, "startColumn": 15, - "endLine": 13723, + "endLine": 9961, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40697,15 +39919,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource140", + "logicalId": "Resource102", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 13781, + "startLine": 10019, "startColumn": 15, - "endLine": 13781, + "endLine": 10019, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40716,15 +39938,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource140", + "logicalId": "Resource102", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13816, + "startLine": 10054, "startColumn": 15, - "endLine": 13816, + "endLine": 10054, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40735,15 +39957,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource140", + "logicalId": "Resource102", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13822, + "startLine": 10060, "startColumn": 15, - "endLine": 13822, + "endLine": 10060, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40754,15 +39976,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource141", + "logicalId": "Resource103", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 13880, + "startLine": 10118, "startColumn": 15, - "endLine": 13880, + "endLine": 10118, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40773,15 +39995,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource141", + "logicalId": "Resource103", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13915, + "startLine": 10153, "startColumn": 15, - "endLine": 13915, + "endLine": 10153, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40792,15 +40014,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource141", + "logicalId": "Resource103", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 13921, + "startLine": 10159, "startColumn": 15, - "endLine": 13921, + "endLine": 10159, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40811,15 +40033,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource142", + "logicalId": "Resource104", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 13979, + "startLine": 10217, "startColumn": 15, - "endLine": 13979, + "endLine": 10217, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40830,15 +40052,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource142", + "logicalId": "Resource104", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14014, + "startLine": 10252, "startColumn": 15, - "endLine": 14014, + "endLine": 10252, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40849,15 +40071,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource142", + "logicalId": "Resource104", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14020, + "startLine": 10258, "startColumn": 15, - "endLine": 14020, + "endLine": 10258, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40868,15 +40090,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource143", + "logicalId": "Resource105", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 14078, + "startLine": 10316, "startColumn": 15, - "endLine": 14078, + "endLine": 10316, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40887,15 +40109,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource143", + "logicalId": "Resource105", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14113, + "startLine": 10351, "startColumn": 15, - "endLine": 14113, + "endLine": 10351, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40906,15 +40128,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource143", + "logicalId": "Resource105", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14119, + "startLine": 10357, "startColumn": 15, - "endLine": 14119, + "endLine": 10357, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40925,15 +40147,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource144", + "logicalId": "Resource106", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 14177, + "startLine": 10415, "startColumn": 15, - "endLine": 14177, + "endLine": 10415, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40944,15 +40166,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource144", + "logicalId": "Resource106", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14212, + "startLine": 10450, "startColumn": 15, - "endLine": 14212, + "endLine": 10450, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40963,15 +40185,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource144", + "logicalId": "Resource106", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14218, + "startLine": 10456, "startColumn": 15, - "endLine": 14218, + "endLine": 10456, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -40982,15 +40204,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource145", + "logicalId": "Resource107", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 14276, + "startLine": 10514, "startColumn": 15, - "endLine": 14276, + "endLine": 10514, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41001,15 +40223,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource145", + "logicalId": "Resource107", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14311, + "startLine": 10549, "startColumn": 15, - "endLine": 14311, + "endLine": 10549, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41020,15 +40242,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource145", + "logicalId": "Resource107", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14317, + "startLine": 10555, "startColumn": 15, - "endLine": 14317, + "endLine": 10555, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41039,15 +40261,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource146", + "logicalId": "Resource108", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 14375, + "startLine": 10613, "startColumn": 15, - "endLine": 14375, + "endLine": 10613, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41058,15 +40280,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource146", + "logicalId": "Resource108", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14410, + "startLine": 10648, "startColumn": 15, - "endLine": 14410, + "endLine": 10648, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41077,15 +40299,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource146", + "logicalId": "Resource108", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14416, + "startLine": 10654, "startColumn": 15, - "endLine": 14416, + "endLine": 10654, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41096,15 +40318,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource147", + "logicalId": "Resource109", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 14474, + "startLine": 10712, "startColumn": 15, - "endLine": 14474, + "endLine": 10712, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41115,15 +40337,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource147", + "logicalId": "Resource109", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14509, + "startLine": 10747, "startColumn": 15, - "endLine": 14509, + "endLine": 10747, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41134,15 +40356,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource147", + "logicalId": "Resource109", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14515, + "startLine": 10753, "startColumn": 15, - "endLine": 14515, + "endLine": 10753, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41153,15 +40375,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource148", + "logicalId": "Resource110", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 14573, + "startLine": 10811, "startColumn": 15, - "endLine": 14573, + "endLine": 10811, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41172,15 +40394,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource148", + "logicalId": "Resource110", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14608, + "startLine": 10846, "startColumn": 15, - "endLine": 14608, + "endLine": 10846, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41191,15 +40413,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource148", + "logicalId": "Resource110", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14614, + "startLine": 10852, "startColumn": 15, - "endLine": 14614, + "endLine": 10852, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41210,15 +40432,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource149", + "logicalId": "Resource111", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 14672, + "startLine": 10910, "startColumn": 15, - "endLine": 14672, + "endLine": 10910, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41229,15 +40451,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource149", + "logicalId": "Resource111", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14707, + "startLine": 10945, "startColumn": 15, - "endLine": 14707, + "endLine": 10945, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41248,15 +40470,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource149", + "logicalId": "Resource111", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14713, + "startLine": 10951, "startColumn": 15, - "endLine": 14713, + "endLine": 10951, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41267,15 +40489,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource150", + "logicalId": "Resource112", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 14771, + "startLine": 11009, "startColumn": 15, - "endLine": 14771, + "endLine": 11009, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41286,15 +40508,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource150", + "logicalId": "Resource112", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14806, + "startLine": 11044, "startColumn": 15, - "endLine": 14806, + "endLine": 11044, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41305,15 +40527,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource150", + "logicalId": "Resource112", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14812, + "startLine": 11050, "startColumn": 15, - "endLine": 14812, + "endLine": 11050, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41324,15 +40546,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource151", + "logicalId": "Resource113", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 14870, + "startLine": 11108, "startColumn": 15, - "endLine": 14870, + "endLine": 11108, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41343,15 +40565,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource151", + "logicalId": "Resource113", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14905, + "startLine": 11143, "startColumn": 15, - "endLine": 14905, + "endLine": 11143, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41362,15 +40584,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource151", + "logicalId": "Resource113", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 14911, + "startLine": 11149, "startColumn": 15, - "endLine": 14911, + "endLine": 11149, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41381,15 +40603,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource152", + "logicalId": "Resource114", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 14969, + "startLine": 11207, "startColumn": 15, - "endLine": 14969, + "endLine": 11207, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41400,15 +40622,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource152", + "logicalId": "Resource114", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15004, + "startLine": 11242, "startColumn": 15, - "endLine": 15004, + "endLine": 11242, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41419,15 +40641,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource152", + "logicalId": "Resource114", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15010, + "startLine": 11248, "startColumn": 15, - "endLine": 15010, + "endLine": 11248, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41438,15 +40660,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource153", + "logicalId": "Resource115", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 15068, + "startLine": 11306, "startColumn": 15, - "endLine": 15068, + "endLine": 11306, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41457,15 +40679,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource153", + "logicalId": "Resource115", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15103, + "startLine": 11341, "startColumn": 15, - "endLine": 15103, + "endLine": 11341, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41476,15 +40698,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource153", + "logicalId": "Resource115", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15109, + "startLine": 11347, "startColumn": 15, - "endLine": 15109, + "endLine": 11347, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41495,15 +40717,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource154", + "logicalId": "Resource116", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 15167, + "startLine": 11405, "startColumn": 15, - "endLine": 15167, + "endLine": 11405, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41514,15 +40736,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource154", + "logicalId": "Resource116", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15202, + "startLine": 11440, "startColumn": 15, - "endLine": 15202, + "endLine": 11440, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41533,15 +40755,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource154", + "logicalId": "Resource116", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15208, + "startLine": 11446, "startColumn": 15, - "endLine": 15208, + "endLine": 11446, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41552,15 +40774,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource155", + "logicalId": "Resource117", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 15266, + "startLine": 11504, "startColumn": 15, - "endLine": 15266, + "endLine": 11504, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41571,15 +40793,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource155", + "logicalId": "Resource117", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15301, + "startLine": 11539, "startColumn": 15, - "endLine": 15301, + "endLine": 11539, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41590,15 +40812,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource155", + "logicalId": "Resource117", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15307, + "startLine": 11545, "startColumn": 15, - "endLine": 15307, + "endLine": 11545, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41609,15 +40831,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource156", + "logicalId": "Resource118", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 15365, + "startLine": 11603, "startColumn": 15, - "endLine": 15365, + "endLine": 11603, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41628,15 +40850,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource156", + "logicalId": "Resource118", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15400, + "startLine": 11638, "startColumn": 15, - "endLine": 15400, + "endLine": 11638, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41647,15 +40869,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource156", + "logicalId": "Resource118", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15406, + "startLine": 11644, "startColumn": 15, - "endLine": 15406, + "endLine": 11644, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41666,15 +40888,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource157", + "logicalId": "Resource119", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 15464, + "startLine": 11702, "startColumn": 15, - "endLine": 15464, + "endLine": 11702, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41685,15 +40907,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource157", + "logicalId": "Resource119", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15499, + "startLine": 11737, "startColumn": 15, - "endLine": 15499, + "endLine": 11737, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41704,15 +40926,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource157", + "logicalId": "Resource119", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15505, + "startLine": 11743, "startColumn": 15, - "endLine": 15505, + "endLine": 11743, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41723,15 +40945,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource158", + "logicalId": "Resource120", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 15563, + "startLine": 11801, "startColumn": 15, - "endLine": 15563, + "endLine": 11801, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41742,15 +40964,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource158", + "logicalId": "Resource120", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15598, + "startLine": 11836, "startColumn": 15, - "endLine": 15598, + "endLine": 11836, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41761,15 +40983,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource158", + "logicalId": "Resource120", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15604, + "startLine": 11842, "startColumn": 15, - "endLine": 15604, + "endLine": 11842, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41780,15 +41002,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource159", + "logicalId": "Resource121", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 15662, + "startLine": 11900, "startColumn": 15, - "endLine": 15662, + "endLine": 11900, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41799,15 +41021,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource159", + "logicalId": "Resource121", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15697, + "startLine": 11935, "startColumn": 15, - "endLine": 15697, + "endLine": 11935, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41818,15 +41040,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource159", + "logicalId": "Resource121", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15703, + "startLine": 11941, "startColumn": 15, - "endLine": 15703, + "endLine": 11941, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41837,15 +41059,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource160", + "logicalId": "Resource122", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 15761, + "startLine": 11999, "startColumn": 15, - "endLine": 15761, + "endLine": 11999, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41856,15 +41078,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource160", + "logicalId": "Resource122", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15796, + "startLine": 12034, "startColumn": 15, - "endLine": 15796, + "endLine": 12034, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41875,15 +41097,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource160", + "logicalId": "Resource122", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15802, + "startLine": 12040, "startColumn": 15, - "endLine": 15802, + "endLine": 12040, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41894,15 +41116,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource161", + "logicalId": "Resource123", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 15860, + "startLine": 12098, "startColumn": 15, - "endLine": 15860, + "endLine": 12098, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41913,15 +41135,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource161", + "logicalId": "Resource123", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15895, + "startLine": 12133, "startColumn": 15, - "endLine": 15895, + "endLine": 12133, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41932,15 +41154,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource161", + "logicalId": "Resource123", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15901, + "startLine": 12139, "startColumn": 15, - "endLine": 15901, + "endLine": 12139, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41951,15 +41173,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource162", + "logicalId": "Resource124", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 15959, + "startLine": 12197, "startColumn": 15, - "endLine": 15959, + "endLine": 12197, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41970,15 +41192,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource162", + "logicalId": "Resource124", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 15994, + "startLine": 12232, "startColumn": 15, - "endLine": 15994, + "endLine": 12232, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -41989,15 +41211,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource162", + "logicalId": "Resource124", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16000, + "startLine": 12238, "startColumn": 15, - "endLine": 16000, + "endLine": 12238, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42008,15 +41230,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource163", + "logicalId": "Resource125", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 16058, + "startLine": 12296, "startColumn": 15, - "endLine": 16058, + "endLine": 12296, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42027,15 +41249,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource163", + "logicalId": "Resource125", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16093, + "startLine": 12331, "startColumn": 15, - "endLine": 16093, + "endLine": 12331, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42046,15 +41268,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource163", + "logicalId": "Resource125", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16099, + "startLine": 12337, "startColumn": 15, - "endLine": 16099, + "endLine": 12337, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42065,15 +41287,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource164", + "logicalId": "Resource126", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 16157, + "startLine": 12395, "startColumn": 15, - "endLine": 16157, + "endLine": 12395, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42084,15 +41306,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource164", + "logicalId": "Resource126", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16192, + "startLine": 12430, "startColumn": 15, - "endLine": 16192, + "endLine": 12430, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42103,15 +41325,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource164", + "logicalId": "Resource126", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16198, + "startLine": 12436, "startColumn": 15, - "endLine": 16198, + "endLine": 12436, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42122,15 +41344,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource165", + "logicalId": "Resource127", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 16256, + "startLine": 12494, "startColumn": 15, - "endLine": 16256, + "endLine": 12494, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42141,15 +41363,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource165", + "logicalId": "Resource127", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16291, + "startLine": 12529, "startColumn": 15, - "endLine": 16291, + "endLine": 12529, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42160,15 +41382,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource165", + "logicalId": "Resource127", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16297, + "startLine": 12535, "startColumn": 15, - "endLine": 16297, + "endLine": 12535, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42179,15 +41401,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource166", + "logicalId": "Resource128", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 16355, + "startLine": 12593, "startColumn": 15, - "endLine": 16355, + "endLine": 12593, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42198,15 +41420,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource166", + "logicalId": "Resource128", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16390, + "startLine": 12628, "startColumn": 15, - "endLine": 16390, + "endLine": 12628, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42217,15 +41439,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource166", + "logicalId": "Resource128", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16396, + "startLine": 12634, "startColumn": 15, - "endLine": 16396, + "endLine": 12634, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42236,15 +41458,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource167", + "logicalId": "Resource129", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 16454, + "startLine": 12692, "startColumn": 15, - "endLine": 16454, + "endLine": 12692, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42255,15 +41477,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource167", + "logicalId": "Resource129", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16489, + "startLine": 12727, "startColumn": 15, - "endLine": 16489, + "endLine": 12727, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42274,15 +41496,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource167", + "logicalId": "Resource129", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16495, + "startLine": 12733, "startColumn": 15, - "endLine": 16495, + "endLine": 12733, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42293,15 +41515,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource168", + "logicalId": "Resource130", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 16553, + "startLine": 12791, "startColumn": 15, - "endLine": 16553, + "endLine": 12791, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42312,15 +41534,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource168", + "logicalId": "Resource130", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16588, + "startLine": 12826, "startColumn": 15, - "endLine": 16588, + "endLine": 12826, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42331,15 +41553,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource168", + "logicalId": "Resource130", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16594, + "startLine": 12832, "startColumn": 15, - "endLine": 16594, + "endLine": 12832, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42350,15 +41572,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource169", + "logicalId": "Resource131", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 16652, + "startLine": 12890, "startColumn": 15, - "endLine": 16652, + "endLine": 12890, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42369,15 +41591,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource169", + "logicalId": "Resource131", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16687, + "startLine": 12925, "startColumn": 15, - "endLine": 16687, + "endLine": 12925, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42388,15 +41610,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource169", + "logicalId": "Resource131", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16693, + "startLine": 12931, "startColumn": 15, - "endLine": 16693, + "endLine": 12931, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42407,15 +41629,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource170", + "logicalId": "Resource132", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 16751, + "startLine": 12989, "startColumn": 15, - "endLine": 16751, + "endLine": 12989, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42426,15 +41648,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource170", + "logicalId": "Resource132", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16786, + "startLine": 13024, "startColumn": 15, - "endLine": 16786, + "endLine": 13024, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42445,15 +41667,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource170", + "logicalId": "Resource132", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16792, + "startLine": 13030, "startColumn": 15, - "endLine": 16792, + "endLine": 13030, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42464,15 +41686,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource171", + "logicalId": "Resource133", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 16850, + "startLine": 13088, "startColumn": 15, - "endLine": 16850, + "endLine": 13088, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42483,15 +41705,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource171", + "logicalId": "Resource133", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16885, + "startLine": 13123, "startColumn": 15, - "endLine": 16885, + "endLine": 13123, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42502,15 +41724,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource171", + "logicalId": "Resource133", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16891, + "startLine": 13129, "startColumn": 15, - "endLine": 16891, + "endLine": 13129, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42521,15 +41743,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource172", + "logicalId": "Resource134", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 16949, + "startLine": 13187, "startColumn": 15, - "endLine": 16949, + "endLine": 13187, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42540,15 +41762,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource172", + "logicalId": "Resource134", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16984, + "startLine": 13222, "startColumn": 15, - "endLine": 16984, + "endLine": 13222, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42559,15 +41781,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource172", + "logicalId": "Resource134", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 16990, + "startLine": 13228, "startColumn": 15, - "endLine": 16990, + "endLine": 13228, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42578,15 +41800,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource173", + "logicalId": "Resource135", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 17048, + "startLine": 13286, "startColumn": 15, - "endLine": 17048, + "endLine": 13286, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42597,15 +41819,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource173", + "logicalId": "Resource135", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17083, + "startLine": 13321, "startColumn": 15, - "endLine": 17083, + "endLine": 13321, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42616,15 +41838,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource173", + "logicalId": "Resource135", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17089, + "startLine": 13327, "startColumn": 15, - "endLine": 17089, + "endLine": 13327, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42635,15 +41857,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource174", + "logicalId": "Resource136", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 17147, + "startLine": 13385, "startColumn": 15, - "endLine": 17147, + "endLine": 13385, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42654,15 +41876,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource174", + "logicalId": "Resource136", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17182, + "startLine": 13420, "startColumn": 15, - "endLine": 17182, + "endLine": 13420, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42673,15 +41895,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource174", + "logicalId": "Resource136", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17188, + "startLine": 13426, "startColumn": 15, - "endLine": 17188, + "endLine": 13426, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42692,15 +41914,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource175", + "logicalId": "Resource137", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 17246, + "startLine": 13484, "startColumn": 15, - "endLine": 17246, + "endLine": 13484, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42711,15 +41933,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource175", + "logicalId": "Resource137", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17281, + "startLine": 13519, "startColumn": 15, - "endLine": 17281, + "endLine": 13519, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42730,15 +41952,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource175", + "logicalId": "Resource137", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17287, + "startLine": 13525, "startColumn": 15, - "endLine": 17287, + "endLine": 13525, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42749,15 +41971,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource176", + "logicalId": "Resource138", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 17345, + "startLine": 13583, "startColumn": 15, - "endLine": 17345, + "endLine": 13583, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42768,15 +41990,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource176", + "logicalId": "Resource138", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17380, + "startLine": 13618, "startColumn": 15, - "endLine": 17380, + "endLine": 13618, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42787,15 +42009,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource176", + "logicalId": "Resource138", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17386, + "startLine": 13624, "startColumn": 15, - "endLine": 17386, + "endLine": 13624, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42806,15 +42028,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource177", + "logicalId": "Resource139", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 17444, + "startLine": 13682, "startColumn": 15, - "endLine": 17444, + "endLine": 13682, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42825,15 +42047,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource177", + "logicalId": "Resource139", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17479, + "startLine": 13717, "startColumn": 15, - "endLine": 17479, + "endLine": 13717, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42844,15 +42066,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource177", + "logicalId": "Resource139", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17485, + "startLine": 13723, "startColumn": 15, - "endLine": 17485, + "endLine": 13723, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42863,15 +42085,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource178", + "logicalId": "Resource140", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 17543, + "startLine": 13781, "startColumn": 15, - "endLine": 17543, + "endLine": 13781, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42882,15 +42104,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource178", + "logicalId": "Resource140", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17578, + "startLine": 13816, "startColumn": 15, - "endLine": 17578, + "endLine": 13816, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42901,15 +42123,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource178", + "logicalId": "Resource140", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17584, + "startLine": 13822, "startColumn": 15, - "endLine": 17584, + "endLine": 13822, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42920,15 +42142,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource179", + "logicalId": "Resource141", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 17642, + "startLine": 13880, "startColumn": 15, - "endLine": 17642, + "endLine": 13880, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42939,15 +42161,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource179", + "logicalId": "Resource141", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17677, + "startLine": 13915, "startColumn": 15, - "endLine": 17677, + "endLine": 13915, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42958,15 +42180,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource179", + "logicalId": "Resource141", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17683, + "startLine": 13921, "startColumn": 15, - "endLine": 17683, + "endLine": 13921, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42977,15 +42199,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource180", + "logicalId": "Resource142", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 17741, + "startLine": 13979, "startColumn": 15, - "endLine": 17741, + "endLine": 13979, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -42996,15 +42218,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource180", + "logicalId": "Resource142", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17776, + "startLine": 14014, "startColumn": 15, - "endLine": 17776, + "endLine": 14014, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43015,15 +42237,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource180", + "logicalId": "Resource142", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17782, + "startLine": 14020, "startColumn": 15, - "endLine": 17782, + "endLine": 14020, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43034,15 +42256,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource181", + "logicalId": "Resource143", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 17840, + "startLine": 14078, "startColumn": 15, - "endLine": 17840, + "endLine": 14078, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43053,15 +42275,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource181", + "logicalId": "Resource143", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17875, + "startLine": 14113, "startColumn": 15, - "endLine": 17875, + "endLine": 14113, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43072,15 +42294,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource181", + "logicalId": "Resource143", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17881, + "startLine": 14119, "startColumn": 15, - "endLine": 17881, + "endLine": 14119, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43091,15 +42313,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource182", + "logicalId": "Resource144", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 17939, + "startLine": 14177, "startColumn": 15, - "endLine": 17939, + "endLine": 14177, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43110,15 +42332,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource182", + "logicalId": "Resource144", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17974, + "startLine": 14212, "startColumn": 15, - "endLine": 17974, + "endLine": 14212, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43129,15 +42351,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource182", + "logicalId": "Resource144", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 17980, + "startLine": 14218, "startColumn": 15, - "endLine": 17980, + "endLine": 14218, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43148,15 +42370,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource183", + "logicalId": "Resource145", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 18038, + "startLine": 14276, "startColumn": 15, - "endLine": 18038, + "endLine": 14276, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43167,15 +42389,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource183", + "logicalId": "Resource145", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18073, + "startLine": 14311, "startColumn": 15, - "endLine": 18073, + "endLine": 14311, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43186,15 +42408,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource183", + "logicalId": "Resource145", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18079, + "startLine": 14317, "startColumn": 15, - "endLine": 18079, + "endLine": 14317, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43205,15 +42427,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource184", + "logicalId": "Resource146", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 18137, + "startLine": 14375, "startColumn": 15, - "endLine": 18137, + "endLine": 14375, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43224,15 +42446,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource184", + "logicalId": "Resource146", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18172, + "startLine": 14410, "startColumn": 15, - "endLine": 18172, + "endLine": 14410, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43243,15 +42465,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource184", + "logicalId": "Resource146", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18178, + "startLine": 14416, "startColumn": 15, - "endLine": 18178, + "endLine": 14416, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43262,15 +42484,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource185", + "logicalId": "Resource147", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 18236, + "startLine": 14474, "startColumn": 15, - "endLine": 18236, + "endLine": 14474, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43281,15 +42503,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource185", + "logicalId": "Resource147", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18271, + "startLine": 14509, "startColumn": 15, - "endLine": 18271, + "endLine": 14509, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43300,15 +42522,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource185", + "logicalId": "Resource147", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18277, + "startLine": 14515, "startColumn": 15, - "endLine": 18277, + "endLine": 14515, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43319,15 +42541,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource186", + "logicalId": "Resource148", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 18335, + "startLine": 14573, "startColumn": 15, - "endLine": 18335, + "endLine": 14573, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43338,15 +42560,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource186", + "logicalId": "Resource148", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18370, + "startLine": 14608, "startColumn": 15, - "endLine": 18370, + "endLine": 14608, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43357,15 +42579,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource186", + "logicalId": "Resource148", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18376, + "startLine": 14614, "startColumn": 15, - "endLine": 18376, + "endLine": 14614, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43376,15 +42598,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource187", + "logicalId": "Resource149", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 18434, + "startLine": 14672, "startColumn": 15, - "endLine": 18434, + "endLine": 14672, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43395,15 +42617,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource187", + "logicalId": "Resource149", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18469, + "startLine": 14707, "startColumn": 15, - "endLine": 18469, + "endLine": 14707, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43414,15 +42636,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource187", + "logicalId": "Resource149", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18475, + "startLine": 14713, "startColumn": 15, - "endLine": 18475, + "endLine": 14713, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43433,15 +42655,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource188", + "logicalId": "Resource150", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 18533, + "startLine": 14771, "startColumn": 15, - "endLine": 18533, + "endLine": 14771, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43452,15 +42674,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource188", + "logicalId": "Resource150", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18568, + "startLine": 14806, "startColumn": 15, - "endLine": 18568, + "endLine": 14806, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43471,15 +42693,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource188", + "logicalId": "Resource150", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18574, + "startLine": 14812, "startColumn": 15, - "endLine": 18574, + "endLine": 14812, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43490,15 +42712,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource189", + "logicalId": "Resource151", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 18632, + "startLine": 14870, "startColumn": 15, - "endLine": 18632, + "endLine": 14870, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43509,15 +42731,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource189", + "logicalId": "Resource151", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18667, + "startLine": 14905, "startColumn": 15, - "endLine": 18667, + "endLine": 14905, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43528,15 +42750,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource189", + "logicalId": "Resource151", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18673, + "startLine": 14911, "startColumn": 15, - "endLine": 18673, + "endLine": 14911, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43547,15 +42769,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource190", + "logicalId": "Resource152", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 18731, + "startLine": 14969, "startColumn": 15, - "endLine": 18731, + "endLine": 14969, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43566,15 +42788,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource190", + "logicalId": "Resource152", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18766, + "startLine": 15004, "startColumn": 15, - "endLine": 18766, + "endLine": 15004, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43585,15 +42807,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource190", + "logicalId": "Resource152", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18772, + "startLine": 15010, "startColumn": 15, - "endLine": 18772, + "endLine": 15010, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43604,15 +42826,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource191", + "logicalId": "Resource153", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 18830, + "startLine": 15068, "startColumn": 15, - "endLine": 18830, + "endLine": 15068, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43623,15 +42845,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource191", + "logicalId": "Resource153", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18865, + "startLine": 15103, "startColumn": 15, - "endLine": 18865, + "endLine": 15103, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43642,15 +42864,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource191", + "logicalId": "Resource153", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18871, + "startLine": 15109, "startColumn": 15, - "endLine": 18871, + "endLine": 15109, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43661,15 +42883,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource192", + "logicalId": "Resource154", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 18929, + "startLine": 15167, "startColumn": 15, - "endLine": 18929, + "endLine": 15167, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43680,15 +42902,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource192", + "logicalId": "Resource154", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18964, + "startLine": 15202, "startColumn": 15, - "endLine": 18964, + "endLine": 15202, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43699,15 +42921,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource192", + "logicalId": "Resource154", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 18970, + "startLine": 15208, "startColumn": 15, - "endLine": 18970, + "endLine": 15208, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43718,15 +42940,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource193", + "logicalId": "Resource155", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 19028, + "startLine": 15266, "startColumn": 15, - "endLine": 19028, + "endLine": 15266, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43737,15 +42959,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource193", + "logicalId": "Resource155", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19063, + "startLine": 15301, "startColumn": 15, - "endLine": 19063, + "endLine": 15301, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43756,15 +42978,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource193", + "logicalId": "Resource155", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19069, + "startLine": 15307, "startColumn": 15, - "endLine": 19069, + "endLine": 15307, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43775,15 +42997,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource194", + "logicalId": "Resource156", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 19127, + "startLine": 15365, "startColumn": 15, - "endLine": 19127, + "endLine": 15365, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43794,15 +43016,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource194", + "logicalId": "Resource156", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19162, + "startLine": 15400, "startColumn": 15, - "endLine": 19162, + "endLine": 15400, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43813,15 +43035,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource194", + "logicalId": "Resource156", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19168, + "startLine": 15406, "startColumn": 15, - "endLine": 19168, + "endLine": 15406, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43832,15 +43054,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource195", + "logicalId": "Resource157", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 19226, + "startLine": 15464, "startColumn": 15, - "endLine": 19226, + "endLine": 15464, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43851,15 +43073,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource195", + "logicalId": "Resource157", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19261, + "startLine": 15499, "startColumn": 15, - "endLine": 19261, + "endLine": 15499, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43870,15 +43092,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource195", + "logicalId": "Resource157", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19267, + "startLine": 15505, "startColumn": 15, - "endLine": 19267, + "endLine": 15505, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43889,15 +43111,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource196", + "logicalId": "Resource158", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 19325, + "startLine": 15563, "startColumn": 15, - "endLine": 19325, + "endLine": 15563, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43908,15 +43130,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource196", + "logicalId": "Resource158", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19360, + "startLine": 15598, "startColumn": 15, - "endLine": 19360, + "endLine": 15598, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43927,15 +43149,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource196", + "logicalId": "Resource158", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19366, + "startLine": 15604, "startColumn": 15, - "endLine": 19366, + "endLine": 15604, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43946,15 +43168,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource197", + "logicalId": "Resource159", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 19424, + "startLine": 15662, "startColumn": 15, - "endLine": 19424, + "endLine": 15662, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43965,15 +43187,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource197", + "logicalId": "Resource159", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19459, + "startLine": 15697, "startColumn": 15, - "endLine": 19459, + "endLine": 15697, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -43984,15 +43206,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource197", + "logicalId": "Resource159", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19465, + "startLine": 15703, "startColumn": 15, - "endLine": 19465, + "endLine": 15703, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44003,15 +43225,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource198", + "logicalId": "Resource160", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 19523, + "startLine": 15761, "startColumn": 15, - "endLine": 19523, + "endLine": 15761, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44022,15 +43244,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource198", + "logicalId": "Resource160", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19558, + "startLine": 15796, "startColumn": 15, - "endLine": 19558, + "endLine": 15796, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44041,15 +43263,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource198", + "logicalId": "Resource160", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19564, + "startLine": 15802, "startColumn": 15, - "endLine": 19564, + "endLine": 15802, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44060,15 +43282,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource199", + "logicalId": "Resource161", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 19622, + "startLine": 15860, "startColumn": 15, - "endLine": 19622, + "endLine": 15860, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44079,15 +43301,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource199", + "logicalId": "Resource161", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19657, + "startLine": 15895, "startColumn": 15, - "endLine": 19657, + "endLine": 15895, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44098,15 +43320,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource199", + "logicalId": "Resource161", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19663, + "startLine": 15901, "startColumn": 15, - "endLine": 19663, + "endLine": 15901, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44117,15 +43339,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource200", + "logicalId": "Resource162", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 19721, + "startLine": 15959, "startColumn": 15, - "endLine": 19721, + "endLine": 15959, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44136,15 +43358,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource200", + "logicalId": "Resource162", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19756, + "startLine": 15994, "startColumn": 15, - "endLine": 19756, + "endLine": 15994, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44155,15 +43377,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource200", + "logicalId": "Resource162", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19762, + "startLine": 16000, "startColumn": 15, - "endLine": 19762, + "endLine": 16000, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44174,15 +43396,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource201", + "logicalId": "Resource163", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 19820, + "startLine": 16058, "startColumn": 15, - "endLine": 19820, + "endLine": 16058, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44193,15 +43415,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource201", + "logicalId": "Resource163", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19855, + "startLine": 16093, "startColumn": 15, - "endLine": 19855, + "endLine": 16093, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44212,15 +43434,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource201", + "logicalId": "Resource163", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19861, + "startLine": 16099, "startColumn": 15, - "endLine": 19861, + "endLine": 16099, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44231,15 +43453,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource202", + "logicalId": "Resource164", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 19919, + "startLine": 16157, "startColumn": 15, - "endLine": 19919, + "endLine": 16157, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44250,15 +43472,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource202", + "logicalId": "Resource164", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19954, + "startLine": 16192, "startColumn": 15, - "endLine": 19954, + "endLine": 16192, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44269,15 +43491,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource202", + "logicalId": "Resource164", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 19960, + "startLine": 16198, "startColumn": 15, - "endLine": 19960, + "endLine": 16198, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44288,15 +43510,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource203", + "logicalId": "Resource165", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 20018, + "startLine": 16256, "startColumn": 15, - "endLine": 20018, + "endLine": 16256, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44307,15 +43529,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource203", + "logicalId": "Resource165", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20053, + "startLine": 16291, "startColumn": 15, - "endLine": 20053, + "endLine": 16291, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44326,15 +43548,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource203", + "logicalId": "Resource165", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20059, + "startLine": 16297, "startColumn": 15, - "endLine": 20059, + "endLine": 16297, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44345,15 +43567,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource204", + "logicalId": "Resource166", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 20117, + "startLine": 16355, "startColumn": 15, - "endLine": 20117, + "endLine": 16355, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44364,15 +43586,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource204", + "logicalId": "Resource166", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20152, + "startLine": 16390, "startColumn": 15, - "endLine": 20152, + "endLine": 16390, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44383,15 +43605,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource204", + "logicalId": "Resource166", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20158, + "startLine": 16396, "startColumn": 15, - "endLine": 20158, + "endLine": 16396, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44402,15 +43624,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource205", + "logicalId": "Resource167", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 20216, + "startLine": 16454, "startColumn": 15, - "endLine": 20216, + "endLine": 16454, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44421,15 +43643,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource205", + "logicalId": "Resource167", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20251, + "startLine": 16489, "startColumn": 15, - "endLine": 20251, + "endLine": 16489, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44440,15 +43662,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource205", + "logicalId": "Resource167", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20257, + "startLine": 16495, "startColumn": 15, - "endLine": 20257, + "endLine": 16495, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44459,15 +43681,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource206", + "logicalId": "Resource168", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 20315, + "startLine": 16553, "startColumn": 15, - "endLine": 20315, + "endLine": 16553, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44478,15 +43700,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource206", + "logicalId": "Resource168", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20350, + "startLine": 16588, "startColumn": 15, - "endLine": 20350, + "endLine": 16588, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44497,15 +43719,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource206", + "logicalId": "Resource168", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20356, + "startLine": 16594, "startColumn": 15, - "endLine": 20356, + "endLine": 16594, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44516,15 +43738,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource207", + "logicalId": "Resource169", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 20414, + "startLine": 16652, "startColumn": 15, - "endLine": 20414, + "endLine": 16652, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44535,15 +43757,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource207", + "logicalId": "Resource169", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20449, + "startLine": 16687, "startColumn": 15, - "endLine": 20449, + "endLine": 16687, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44554,15 +43776,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource207", + "logicalId": "Resource169", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20455, + "startLine": 16693, "startColumn": 15, - "endLine": 20455, + "endLine": 16693, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44573,15 +43795,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource208", + "logicalId": "Resource170", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 20513, + "startLine": 16751, "startColumn": 15, - "endLine": 20513, + "endLine": 16751, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44592,15 +43814,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource208", + "logicalId": "Resource170", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20548, + "startLine": 16786, "startColumn": 15, - "endLine": 20548, + "endLine": 16786, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44611,15 +43833,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource208", + "logicalId": "Resource170", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20554, + "startLine": 16792, "startColumn": 15, - "endLine": 20554, + "endLine": 16792, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44630,15 +43852,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource209", + "logicalId": "Resource171", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 20612, + "startLine": 16850, "startColumn": 15, - "endLine": 20612, + "endLine": 16850, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44649,15 +43871,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource209", + "logicalId": "Resource171", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20647, + "startLine": 16885, "startColumn": 15, - "endLine": 20647, + "endLine": 16885, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44668,15 +43890,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource209", + "logicalId": "Resource171", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20653, + "startLine": 16891, "startColumn": 15, - "endLine": 20653, + "endLine": 16891, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44687,15 +43909,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource210", + "logicalId": "Resource172", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 20711, + "startLine": 16949, "startColumn": 15, - "endLine": 20711, + "endLine": 16949, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44706,15 +43928,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource210", + "logicalId": "Resource172", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20746, + "startLine": 16984, "startColumn": 15, - "endLine": 20746, + "endLine": 16984, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44725,15 +43947,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource210", + "logicalId": "Resource172", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20752, + "startLine": 16990, "startColumn": 15, - "endLine": 20752, + "endLine": 16990, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44744,15 +43966,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource211", + "logicalId": "Resource173", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 20810, + "startLine": 17048, "startColumn": 15, - "endLine": 20810, + "endLine": 17048, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44763,15 +43985,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource211", + "logicalId": "Resource173", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20845, + "startLine": 17083, "startColumn": 15, - "endLine": 20845, + "endLine": 17083, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44782,15 +44004,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource211", + "logicalId": "Resource173", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20851, + "startLine": 17089, "startColumn": 15, - "endLine": 20851, + "endLine": 17089, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44801,15 +44023,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource212", + "logicalId": "Resource174", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 20909, + "startLine": 17147, "startColumn": 15, - "endLine": 20909, + "endLine": 17147, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44820,15 +44042,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource212", + "logicalId": "Resource174", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20944, + "startLine": 17182, "startColumn": 15, - "endLine": 20944, + "endLine": 17182, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44839,15 +44061,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource212", + "logicalId": "Resource174", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 20950, + "startLine": 17188, "startColumn": 15, - "endLine": 20950, + "endLine": 17188, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44858,15 +44080,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource213", + "logicalId": "Resource175", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 21008, + "startLine": 17246, "startColumn": 15, - "endLine": 21008, + "endLine": 17246, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44877,15 +44099,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource213", + "logicalId": "Resource175", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21043, + "startLine": 17281, "startColumn": 15, - "endLine": 21043, + "endLine": 17281, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44896,15 +44118,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource213", + "logicalId": "Resource175", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21049, + "startLine": 17287, "startColumn": 15, - "endLine": 21049, + "endLine": 17287, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44915,15 +44137,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource214", + "logicalId": "Resource176", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 21107, + "startLine": 17345, "startColumn": 15, - "endLine": 21107, + "endLine": 17345, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44934,15 +44156,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource214", + "logicalId": "Resource176", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21142, + "startLine": 17380, "startColumn": 15, - "endLine": 21142, + "endLine": 17380, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44953,15 +44175,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource214", + "logicalId": "Resource176", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21148, + "startLine": 17386, "startColumn": 15, - "endLine": 21148, + "endLine": 17386, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44972,15 +44194,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource215", + "logicalId": "Resource177", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 21206, + "startLine": 17444, "startColumn": 15, - "endLine": 21206, + "endLine": 17444, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -44991,15 +44213,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource215", + "logicalId": "Resource177", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21241, + "startLine": 17479, "startColumn": 15, - "endLine": 21241, + "endLine": 17479, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45010,15 +44232,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource215", + "logicalId": "Resource177", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21247, + "startLine": 17485, "startColumn": 15, - "endLine": 21247, + "endLine": 17485, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45029,15 +44251,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource216", + "logicalId": "Resource178", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 21305, + "startLine": 17543, "startColumn": 15, - "endLine": 21305, + "endLine": 17543, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45048,15 +44270,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource216", + "logicalId": "Resource178", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21340, + "startLine": 17578, "startColumn": 15, - "endLine": 21340, + "endLine": 17578, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45067,15 +44289,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource216", + "logicalId": "Resource178", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21346, + "startLine": 17584, "startColumn": 15, - "endLine": 21346, + "endLine": 17584, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45086,15 +44308,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource217", + "logicalId": "Resource179", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 21404, + "startLine": 17642, "startColumn": 15, - "endLine": 21404, + "endLine": 17642, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45105,15 +44327,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource217", + "logicalId": "Resource179", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21439, + "startLine": 17677, "startColumn": 15, - "endLine": 21439, + "endLine": 17677, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45124,15 +44346,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource217", + "logicalId": "Resource179", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21445, + "startLine": 17683, "startColumn": 15, - "endLine": 21445, + "endLine": 17683, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45143,15 +44365,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource218", + "logicalId": "Resource180", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 21503, + "startLine": 17741, "startColumn": 15, - "endLine": 21503, + "endLine": 17741, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45162,15 +44384,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource218", + "logicalId": "Resource180", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21538, + "startLine": 17776, "startColumn": 15, - "endLine": 21538, + "endLine": 17776, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45181,15 +44403,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource218", + "logicalId": "Resource180", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21544, + "startLine": 17782, "startColumn": 15, - "endLine": 21544, + "endLine": 17782, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45200,15 +44422,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource219", + "logicalId": "Resource181", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 21602, + "startLine": 17840, "startColumn": 15, - "endLine": 21602, + "endLine": 17840, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45219,15 +44441,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource219", + "logicalId": "Resource181", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21637, + "startLine": 17875, "startColumn": 15, - "endLine": 21637, + "endLine": 17875, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45238,15 +44460,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource219", + "logicalId": "Resource181", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21643, + "startLine": 17881, "startColumn": 15, - "endLine": 21643, + "endLine": 17881, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45257,15 +44479,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource220", + "logicalId": "Resource182", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 21701, + "startLine": 17939, "startColumn": 15, - "endLine": 21701, + "endLine": 17939, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45276,15 +44498,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource220", + "logicalId": "Resource182", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21736, + "startLine": 17974, "startColumn": 15, - "endLine": 21736, + "endLine": 17974, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45295,15 +44517,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource220", + "logicalId": "Resource182", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21742, + "startLine": 17980, "startColumn": 15, - "endLine": 21742, + "endLine": 17980, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45314,15 +44536,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource221", + "logicalId": "Resource183", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 21800, + "startLine": 18038, "startColumn": 15, - "endLine": 21800, + "endLine": 18038, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45333,15 +44555,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource221", + "logicalId": "Resource183", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21835, + "startLine": 18073, "startColumn": 15, - "endLine": 21835, + "endLine": 18073, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45352,15 +44574,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource221", + "logicalId": "Resource183", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21841, + "startLine": 18079, "startColumn": 15, - "endLine": 21841, + "endLine": 18079, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45371,15 +44593,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource222", + "logicalId": "Resource184", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 21899, + "startLine": 18137, "startColumn": 15, - "endLine": 21899, + "endLine": 18137, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45390,15 +44612,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource222", + "logicalId": "Resource184", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21934, + "startLine": 18172, "startColumn": 15, - "endLine": 21934, + "endLine": 18172, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45409,15 +44631,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource222", + "logicalId": "Resource184", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 21940, + "startLine": 18178, "startColumn": 15, - "endLine": 21940, + "endLine": 18178, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45428,15 +44650,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource223", + "logicalId": "Resource185", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 21998, + "startLine": 18236, "startColumn": 15, - "endLine": 21998, + "endLine": 18236, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45447,15 +44669,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource223", + "logicalId": "Resource185", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22033, + "startLine": 18271, "startColumn": 15, - "endLine": 22033, + "endLine": 18271, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45466,15 +44688,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource223", + "logicalId": "Resource185", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22039, + "startLine": 18277, "startColumn": 15, - "endLine": 22039, + "endLine": 18277, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45485,15 +44707,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource224", + "logicalId": "Resource186", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 22097, + "startLine": 18335, "startColumn": 15, - "endLine": 22097, + "endLine": 18335, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45504,15 +44726,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource224", + "logicalId": "Resource186", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22132, + "startLine": 18370, "startColumn": 15, - "endLine": 22132, + "endLine": 18370, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45523,15 +44745,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource224", + "logicalId": "Resource186", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22138, + "startLine": 18376, "startColumn": 15, - "endLine": 22138, + "endLine": 18376, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45542,15 +44764,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource225", + "logicalId": "Resource187", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 22196, + "startLine": 18434, "startColumn": 15, - "endLine": 22196, + "endLine": 18434, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45561,15 +44783,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource225", + "logicalId": "Resource187", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22231, + "startLine": 18469, "startColumn": 15, - "endLine": 22231, + "endLine": 18469, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45580,15 +44802,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource225", + "logicalId": "Resource187", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22237, + "startLine": 18475, "startColumn": 15, - "endLine": 22237, + "endLine": 18475, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45599,15 +44821,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource226", + "logicalId": "Resource188", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 22295, + "startLine": 18533, "startColumn": 15, - "endLine": 22295, + "endLine": 18533, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45618,15 +44840,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource226", + "logicalId": "Resource188", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22330, + "startLine": 18568, "startColumn": 15, - "endLine": 22330, + "endLine": 18568, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45637,15 +44859,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource226", + "logicalId": "Resource188", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22336, + "startLine": 18574, "startColumn": 15, - "endLine": 22336, + "endLine": 18574, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45656,15 +44878,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource227", + "logicalId": "Resource189", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 22394, + "startLine": 18632, "startColumn": 15, - "endLine": 22394, + "endLine": 18632, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45675,15 +44897,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource227", + "logicalId": "Resource189", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22429, + "startLine": 18667, "startColumn": 15, - "endLine": 22429, + "endLine": 18667, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45694,15 +44916,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource227", + "logicalId": "Resource189", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22435, + "startLine": 18673, "startColumn": 15, - "endLine": 22435, + "endLine": 18673, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45713,15 +44935,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource228", + "logicalId": "Resource190", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 22493, + "startLine": 18731, "startColumn": 15, - "endLine": 22493, + "endLine": 18731, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45732,15 +44954,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource228", + "logicalId": "Resource190", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22528, + "startLine": 18766, "startColumn": 15, - "endLine": 22528, + "endLine": 18766, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45751,15 +44973,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource228", + "logicalId": "Resource190", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22534, + "startLine": 18772, "startColumn": 15, - "endLine": 22534, + "endLine": 18772, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45770,15 +44992,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource229", + "logicalId": "Resource191", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 22592, + "startLine": 18830, "startColumn": 15, - "endLine": 22592, + "endLine": 18830, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45789,15 +45011,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource229", + "logicalId": "Resource191", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22627, + "startLine": 18865, "startColumn": 15, - "endLine": 22627, + "endLine": 18865, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45808,15 +45030,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource229", + "logicalId": "Resource191", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22633, + "startLine": 18871, "startColumn": 15, - "endLine": 22633, + "endLine": 18871, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45827,15 +45049,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource230", + "logicalId": "Resource192", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 22691, + "startLine": 18929, "startColumn": 15, - "endLine": 22691, + "endLine": 18929, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45846,15 +45068,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource230", + "logicalId": "Resource192", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22726, + "startLine": 18964, "startColumn": 15, - "endLine": 22726, + "endLine": 18964, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45865,15 +45087,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource230", + "logicalId": "Resource192", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22732, + "startLine": 18970, "startColumn": 15, - "endLine": 22732, + "endLine": 18970, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45884,15 +45106,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource231", + "logicalId": "Resource193", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 22790, + "startLine": 19028, "startColumn": 15, - "endLine": 22790, + "endLine": 19028, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45903,15 +45125,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource231", + "logicalId": "Resource193", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22825, + "startLine": 19063, "startColumn": 15, - "endLine": 22825, + "endLine": 19063, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45922,15 +45144,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource231", + "logicalId": "Resource193", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22831, + "startLine": 19069, "startColumn": 15, - "endLine": 22831, + "endLine": 19069, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45941,15 +45163,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource232", + "logicalId": "Resource194", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 22889, + "startLine": 19127, "startColumn": 15, - "endLine": 22889, + "endLine": 19127, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45960,15 +45182,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource232", + "logicalId": "Resource194", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22924, + "startLine": 19162, "startColumn": 15, - "endLine": 22924, + "endLine": 19162, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45979,15 +45201,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource232", + "logicalId": "Resource194", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 22930, + "startLine": 19168, "startColumn": 15, - "endLine": 22930, + "endLine": 19168, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -45998,15 +45220,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource233", + "logicalId": "Resource195", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 22988, + "startLine": 19226, "startColumn": 15, - "endLine": 22988, + "endLine": 19226, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46017,15 +45239,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource233", + "logicalId": "Resource195", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23023, + "startLine": 19261, "startColumn": 15, - "endLine": 23023, + "endLine": 19261, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46036,15 +45258,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource233", + "logicalId": "Resource195", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23029, + "startLine": 19267, "startColumn": 15, - "endLine": 23029, + "endLine": 19267, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46055,15 +45277,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource234", + "logicalId": "Resource196", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 23087, + "startLine": 19325, "startColumn": 15, - "endLine": 23087, + "endLine": 19325, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46074,15 +45296,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource234", + "logicalId": "Resource196", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23122, + "startLine": 19360, "startColumn": 15, - "endLine": 23122, + "endLine": 19360, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46093,15 +45315,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource234", + "logicalId": "Resource196", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23128, + "startLine": 19366, "startColumn": 15, - "endLine": 23128, + "endLine": 19366, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46112,15 +45334,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource235", + "logicalId": "Resource197", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 23186, + "startLine": 19424, "startColumn": 15, - "endLine": 23186, + "endLine": 19424, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46131,15 +45353,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource235", + "logicalId": "Resource197", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23221, + "startLine": 19459, "startColumn": 15, - "endLine": 23221, + "endLine": 19459, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46150,15 +45372,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource235", + "logicalId": "Resource197", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23227, + "startLine": 19465, "startColumn": 15, - "endLine": 23227, + "endLine": 19465, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46169,15 +45391,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource236", + "logicalId": "Resource198", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 23285, + "startLine": 19523, "startColumn": 15, - "endLine": 23285, + "endLine": 19523, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46188,15 +45410,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource236", + "logicalId": "Resource198", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23320, + "startLine": 19558, "startColumn": 15, - "endLine": 23320, + "endLine": 19558, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46207,15 +45429,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource236", + "logicalId": "Resource198", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23326, + "startLine": 19564, "startColumn": 15, - "endLine": 23326, + "endLine": 19564, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46226,15 +45448,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource237", + "logicalId": "Resource199", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 23384, + "startLine": 19622, "startColumn": 15, - "endLine": 23384, + "endLine": 19622, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46245,15 +45467,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource237", + "logicalId": "Resource199", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23419, + "startLine": 19657, "startColumn": 15, - "endLine": 23419, + "endLine": 19657, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46264,15 +45486,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource237", + "logicalId": "Resource199", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23425, + "startLine": 19663, "startColumn": 15, - "endLine": 23425, + "endLine": 19663, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46283,15 +45505,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource238", + "logicalId": "Resource200", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 23483, + "startLine": 19721, "startColumn": 15, - "endLine": 23483, + "endLine": 19721, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46302,15 +45524,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource238", + "logicalId": "Resource200", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23518, + "startLine": 19756, "startColumn": 15, - "endLine": 23518, + "endLine": 19756, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46321,15 +45543,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource238", + "logicalId": "Resource200", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23524, + "startLine": 19762, "startColumn": 15, - "endLine": 23524, + "endLine": 19762, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46340,15 +45562,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource239", + "logicalId": "Resource201", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 23582, + "startLine": 19820, "startColumn": 15, - "endLine": 23582, + "endLine": 19820, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46359,15 +45581,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource239", + "logicalId": "Resource201", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23617, + "startLine": 19855, "startColumn": 15, - "endLine": 23617, + "endLine": 19855, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46378,15 +45600,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource239", + "logicalId": "Resource201", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23623, + "startLine": 19861, "startColumn": 15, - "endLine": 23623, + "endLine": 19861, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46397,15 +45619,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource240", + "logicalId": "Resource202", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 23681, + "startLine": 19919, "startColumn": 15, - "endLine": 23681, + "endLine": 19919, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46416,15 +45638,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource240", + "logicalId": "Resource202", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23716, + "startLine": 19954, "startColumn": 15, - "endLine": 23716, + "endLine": 19954, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46435,15 +45657,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource240", + "logicalId": "Resource202", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23722, + "startLine": 19960, "startColumn": 15, - "endLine": 23722, + "endLine": 19960, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46454,15 +45676,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource241", + "logicalId": "Resource203", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 23780, + "startLine": 20018, "startColumn": 15, - "endLine": 23780, + "endLine": 20018, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46473,15 +45695,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource241", + "logicalId": "Resource203", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23815, + "startLine": 20053, "startColumn": 15, - "endLine": 23815, + "endLine": 20053, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46492,15 +45714,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource241", + "logicalId": "Resource203", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23821, + "startLine": 20059, "startColumn": 15, - "endLine": 23821, + "endLine": 20059, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46511,15 +45733,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource242", + "logicalId": "Resource204", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 23879, + "startLine": 20117, "startColumn": 15, - "endLine": 23879, + "endLine": 20117, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46530,15 +45752,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource242", + "logicalId": "Resource204", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23914, + "startLine": 20152, "startColumn": 15, - "endLine": 23914, + "endLine": 20152, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46549,15 +45771,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource242", + "logicalId": "Resource204", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 23920, + "startLine": 20158, "startColumn": 15, - "endLine": 23920, + "endLine": 20158, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46568,15 +45790,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource243", + "logicalId": "Resource205", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 23978, + "startLine": 20216, "startColumn": 15, - "endLine": 23978, + "endLine": 20216, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46587,15 +45809,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource243", + "logicalId": "Resource205", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24013, + "startLine": 20251, "startColumn": 15, - "endLine": 24013, + "endLine": 20251, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46606,15 +45828,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource243", + "logicalId": "Resource205", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24019, + "startLine": 20257, "startColumn": 15, - "endLine": 24019, + "endLine": 20257, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46625,15 +45847,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource244", + "logicalId": "Resource206", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 24077, + "startLine": 20315, "startColumn": 15, - "endLine": 24077, + "endLine": 20315, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46644,15 +45866,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource244", + "logicalId": "Resource206", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24112, + "startLine": 20350, "startColumn": 15, - "endLine": 24112, + "endLine": 20350, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46663,15 +45885,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource244", + "logicalId": "Resource206", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24118, + "startLine": 20356, "startColumn": 15, - "endLine": 24118, + "endLine": 20356, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46682,15 +45904,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource245", + "logicalId": "Resource207", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 24176, + "startLine": 20414, "startColumn": 15, - "endLine": 24176, + "endLine": 20414, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46701,15 +45923,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource245", + "logicalId": "Resource207", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24211, + "startLine": 20449, "startColumn": 15, - "endLine": 24211, + "endLine": 20449, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46720,15 +45942,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource245", + "logicalId": "Resource207", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24217, + "startLine": 20455, "startColumn": 15, - "endLine": 24217, + "endLine": 20455, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46739,15 +45961,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource246", + "logicalId": "Resource208", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 24275, + "startLine": 20513, "startColumn": 15, - "endLine": 24275, + "endLine": 20513, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46758,15 +45980,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource246", + "logicalId": "Resource208", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24310, + "startLine": 20548, "startColumn": 15, - "endLine": 24310, + "endLine": 20548, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46777,15 +45999,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource246", + "logicalId": "Resource208", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24316, + "startLine": 20554, "startColumn": 15, - "endLine": 24316, + "endLine": 20554, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46796,15 +46018,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource247", + "logicalId": "Resource209", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 24374, + "startLine": 20612, "startColumn": 15, - "endLine": 24374, + "endLine": 20612, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46815,15 +46037,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource247", + "logicalId": "Resource209", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24409, + "startLine": 20647, "startColumn": 15, - "endLine": 24409, + "endLine": 20647, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46834,15 +46056,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource247", + "logicalId": "Resource209", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24415, + "startLine": 20653, "startColumn": 15, - "endLine": 24415, + "endLine": 20653, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46853,15 +46075,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource248", + "logicalId": "Resource210", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 24473, + "startLine": 20711, "startColumn": 15, - "endLine": 24473, + "endLine": 20711, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46872,15 +46094,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource248", + "logicalId": "Resource210", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24508, + "startLine": 20746, "startColumn": 15, - "endLine": 24508, + "endLine": 20746, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46891,15 +46113,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource248", + "logicalId": "Resource210", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24514, + "startLine": 20752, "startColumn": 15, - "endLine": 24514, + "endLine": 20752, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46910,15 +46132,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource249", + "logicalId": "Resource211", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 24572, + "startLine": 20810, "startColumn": 15, - "endLine": 24572, + "endLine": 20810, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46929,15 +46151,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource249", + "logicalId": "Resource211", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24607, + "startLine": 20845, "startColumn": 15, - "endLine": 24607, + "endLine": 20845, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46948,15 +46170,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource249", + "logicalId": "Resource211", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24613, + "startLine": 20851, "startColumn": 15, - "endLine": 24613, + "endLine": 20851, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46967,15 +46189,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource250", + "logicalId": "Resource212", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 24671, + "startLine": 20909, "startColumn": 15, - "endLine": 24671, + "endLine": 20909, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -46986,15 +46208,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource250", + "logicalId": "Resource212", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24706, + "startLine": 20944, "startColumn": 15, - "endLine": 24706, + "endLine": 20944, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47005,15 +46227,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource250", + "logicalId": "Resource212", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24712, + "startLine": 20950, "startColumn": 15, - "endLine": 24712, + "endLine": 20950, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47024,15 +46246,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource251", + "logicalId": "Resource213", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 24770, + "startLine": 21008, "startColumn": 15, - "endLine": 24770, + "endLine": 21008, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47043,15 +46265,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource251", + "logicalId": "Resource213", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24805, + "startLine": 21043, "startColumn": 15, - "endLine": 24805, + "endLine": 21043, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47062,15 +46284,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource251", + "logicalId": "Resource213", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24811, + "startLine": 21049, "startColumn": 15, - "endLine": 24811, + "endLine": 21049, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47081,15 +46303,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource252", + "logicalId": "Resource214", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 24869, + "startLine": 21107, "startColumn": 15, - "endLine": 24869, + "endLine": 21107, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47100,15 +46322,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource252", + "logicalId": "Resource214", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24904, + "startLine": 21142, "startColumn": 15, - "endLine": 24904, + "endLine": 21142, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47119,15 +46341,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource252", + "logicalId": "Resource214", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 24910, + "startLine": 21148, "startColumn": 15, - "endLine": 24910, + "endLine": 21148, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47138,15 +46360,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource253", + "logicalId": "Resource215", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 24968, + "startLine": 21206, "startColumn": 15, - "endLine": 24968, + "endLine": 21206, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47157,15 +46379,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource253", + "logicalId": "Resource215", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25003, + "startLine": 21241, "startColumn": 15, - "endLine": 25003, + "endLine": 21241, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47176,15 +46398,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource253", + "logicalId": "Resource215", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25009, + "startLine": 21247, "startColumn": 15, - "endLine": 25009, + "endLine": 21247, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47195,15 +46417,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource254", + "logicalId": "Resource216", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 25067, + "startLine": 21305, "startColumn": 15, - "endLine": 25067, + "endLine": 21305, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47214,15 +46436,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource254", + "logicalId": "Resource216", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25102, + "startLine": 21340, "startColumn": 15, - "endLine": 25102, + "endLine": 21340, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47233,15 +46455,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource254", + "logicalId": "Resource216", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25108, + "startLine": 21346, "startColumn": 15, - "endLine": 25108, + "endLine": 21346, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47252,15 +46474,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource255", + "logicalId": "Resource217", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 25166, + "startLine": 21404, "startColumn": 15, - "endLine": 25166, + "endLine": 21404, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47271,15 +46493,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource255", + "logicalId": "Resource217", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25201, + "startLine": 21439, "startColumn": 15, - "endLine": 25201, + "endLine": 21439, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47290,15 +46512,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource255", + "logicalId": "Resource217", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25207, + "startLine": 21445, "startColumn": 15, - "endLine": 25207, + "endLine": 21445, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47309,15 +46531,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource256", + "logicalId": "Resource218", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 25265, + "startLine": 21503, "startColumn": 15, - "endLine": 25265, + "endLine": 21503, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47328,15 +46550,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource256", + "logicalId": "Resource218", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25300, + "startLine": 21538, "startColumn": 15, - "endLine": 25300, + "endLine": 21538, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47347,15 +46569,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource256", + "logicalId": "Resource218", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25306, + "startLine": 21544, "startColumn": 15, - "endLine": 25306, + "endLine": 21544, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47366,15 +46588,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource257", + "logicalId": "Resource219", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 25364, + "startLine": 21602, "startColumn": 15, - "endLine": 25364, + "endLine": 21602, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47385,15 +46607,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource257", + "logicalId": "Resource219", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25399, + "startLine": 21637, "startColumn": 15, - "endLine": 25399, + "endLine": 21637, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47404,15 +46626,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource257", + "logicalId": "Resource219", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25405, + "startLine": 21643, "startColumn": 15, - "endLine": 25405, + "endLine": 21643, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47423,15 +46645,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource258", + "logicalId": "Resource220", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 25463, + "startLine": 21701, "startColumn": 15, - "endLine": 25463, + "endLine": 21701, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47442,15 +46664,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource258", + "logicalId": "Resource220", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25498, + "startLine": 21736, "startColumn": 15, - "endLine": 25498, + "endLine": 21736, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47461,15 +46683,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource258", + "logicalId": "Resource220", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25504, + "startLine": 21742, "startColumn": 15, - "endLine": 25504, + "endLine": 21742, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47480,15 +46702,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource259", + "logicalId": "Resource221", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 25562, + "startLine": 21800, "startColumn": 15, - "endLine": 25562, + "endLine": 21800, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47499,15 +46721,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource259", + "logicalId": "Resource221", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25597, + "startLine": 21835, "startColumn": 15, - "endLine": 25597, + "endLine": 21835, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47518,15 +46740,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource259", + "logicalId": "Resource221", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25603, + "startLine": 21841, "startColumn": 15, - "endLine": 25603, + "endLine": 21841, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47537,15 +46759,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource260", + "logicalId": "Resource222", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 25661, + "startLine": 21899, "startColumn": 15, - "endLine": 25661, + "endLine": 21899, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47556,15 +46778,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource260", + "logicalId": "Resource222", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25696, + "startLine": 21934, "startColumn": 15, - "endLine": 25696, + "endLine": 21934, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47575,15 +46797,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource260", + "logicalId": "Resource222", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25702, + "startLine": 21940, "startColumn": 15, - "endLine": 25702, + "endLine": 21940, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47594,15 +46816,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource261", + "logicalId": "Resource223", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 25760, + "startLine": 21998, "startColumn": 15, - "endLine": 25760, + "endLine": 21998, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47613,15 +46835,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource261", + "logicalId": "Resource223", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25795, + "startLine": 22033, "startColumn": 15, - "endLine": 25795, + "endLine": 22033, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47632,15 +46854,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource261", + "logicalId": "Resource223", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25801, + "startLine": 22039, "startColumn": 15, - "endLine": 25801, + "endLine": 22039, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47651,15 +46873,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource262", + "logicalId": "Resource224", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 25859, + "startLine": 22097, "startColumn": 15, - "endLine": 25859, + "endLine": 22097, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47670,15 +46892,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource262", + "logicalId": "Resource224", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25894, + "startLine": 22132, "startColumn": 15, - "endLine": 25894, + "endLine": 22132, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47689,15 +46911,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource262", + "logicalId": "Resource224", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25900, + "startLine": 22138, "startColumn": 15, - "endLine": 25900, + "endLine": 22138, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47708,15 +46930,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource263", + "logicalId": "Resource225", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 25958, + "startLine": 22196, "startColumn": 15, - "endLine": 25958, + "endLine": 22196, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47727,15 +46949,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource263", + "logicalId": "Resource225", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25993, + "startLine": 22231, "startColumn": 15, - "endLine": 25993, + "endLine": 22231, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47746,15 +46968,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource263", + "logicalId": "Resource225", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 25999, + "startLine": 22237, "startColumn": 15, - "endLine": 25999, + "endLine": 22237, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47765,15 +46987,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource264", + "logicalId": "Resource226", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 26057, + "startLine": 22295, "startColumn": 15, - "endLine": 26057, + "endLine": 22295, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47784,15 +47006,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource264", + "logicalId": "Resource226", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26092, + "startLine": 22330, "startColumn": 15, - "endLine": 26092, + "endLine": 22330, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47803,15 +47025,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource264", + "logicalId": "Resource226", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26098, + "startLine": 22336, "startColumn": 15, - "endLine": 26098, + "endLine": 22336, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47822,15 +47044,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource265", + "logicalId": "Resource227", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 26156, + "startLine": 22394, "startColumn": 15, - "endLine": 26156, + "endLine": 22394, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47841,15 +47063,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource265", + "logicalId": "Resource227", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26191, + "startLine": 22429, "startColumn": 15, - "endLine": 26191, + "endLine": 22429, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47860,15 +47082,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource265", + "logicalId": "Resource227", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26197, + "startLine": 22435, "startColumn": 15, - "endLine": 26197, + "endLine": 22435, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47879,15 +47101,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource266", + "logicalId": "Resource228", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 26255, + "startLine": 22493, "startColumn": 15, - "endLine": 26255, + "endLine": 22493, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47898,15 +47120,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource266", + "logicalId": "Resource228", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26290, + "startLine": 22528, "startColumn": 15, - "endLine": 26290, + "endLine": 22528, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47917,15 +47139,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource266", + "logicalId": "Resource228", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26296, + "startLine": 22534, "startColumn": 15, - "endLine": 26296, + "endLine": 22534, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47936,15 +47158,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource267", + "logicalId": "Resource229", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 26354, + "startLine": 22592, "startColumn": 15, - "endLine": 26354, + "endLine": 22592, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47955,15 +47177,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource267", + "logicalId": "Resource229", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26389, + "startLine": 22627, "startColumn": 15, - "endLine": 26389, + "endLine": 22627, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47974,15 +47196,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource267", + "logicalId": "Resource229", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26395, + "startLine": 22633, "startColumn": 15, - "endLine": 26395, + "endLine": 22633, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -47993,15 +47215,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource268", + "logicalId": "Resource230", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 26453, + "startLine": 22691, "startColumn": 15, - "endLine": 26453, + "endLine": 22691, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48012,15 +47234,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource268", + "logicalId": "Resource230", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26488, + "startLine": 22726, "startColumn": 15, - "endLine": 26488, + "endLine": 22726, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48031,15 +47253,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource268", + "logicalId": "Resource230", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26494, + "startLine": 22732, "startColumn": 15, - "endLine": 26494, + "endLine": 22732, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48050,15 +47272,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource269", + "logicalId": "Resource231", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 26552, + "startLine": 22790, "startColumn": 15, - "endLine": 26552, + "endLine": 22790, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48069,15 +47291,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource269", + "logicalId": "Resource231", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26587, + "startLine": 22825, "startColumn": 15, - "endLine": 26587, + "endLine": 22825, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48088,15 +47310,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource269", + "logicalId": "Resource231", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26593, + "startLine": 22831, "startColumn": 15, - "endLine": 26593, + "endLine": 22831, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48107,15 +47329,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource270", + "logicalId": "Resource232", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 26651, + "startLine": 22889, "startColumn": 15, - "endLine": 26651, + "endLine": 22889, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48126,15 +47348,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource270", + "logicalId": "Resource232", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26686, + "startLine": 22924, "startColumn": 15, - "endLine": 26686, + "endLine": 22924, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48145,15 +47367,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource270", + "logicalId": "Resource232", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26692, + "startLine": 22930, "startColumn": 15, - "endLine": 26692, + "endLine": 22930, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48164,15 +47386,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource271", + "logicalId": "Resource233", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 26750, + "startLine": 22988, "startColumn": 15, - "endLine": 26750, + "endLine": 22988, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48183,15 +47405,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource271", + "logicalId": "Resource233", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26785, + "startLine": 23023, "startColumn": 15, - "endLine": 26785, + "endLine": 23023, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48202,15 +47424,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource271", + "logicalId": "Resource233", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26791, + "startLine": 23029, "startColumn": 15, - "endLine": 26791, + "endLine": 23029, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48221,15 +47443,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource272", + "logicalId": "Resource234", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 26849, + "startLine": 23087, "startColumn": 15, - "endLine": 26849, + "endLine": 23087, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48240,15 +47462,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource272", + "logicalId": "Resource234", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26884, + "startLine": 23122, "startColumn": 15, - "endLine": 26884, + "endLine": 23122, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48259,15 +47481,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource272", + "logicalId": "Resource234", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26890, + "startLine": 23128, "startColumn": 15, - "endLine": 26890, + "endLine": 23128, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48278,15 +47500,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource273", + "logicalId": "Resource235", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 26948, + "startLine": 23186, "startColumn": 15, - "endLine": 26948, + "endLine": 23186, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48297,15 +47519,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource273", + "logicalId": "Resource235", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26983, + "startLine": 23221, "startColumn": 15, - "endLine": 26983, + "endLine": 23221, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48316,15 +47538,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource273", + "logicalId": "Resource235", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 26989, + "startLine": 23227, "startColumn": 15, - "endLine": 26989, + "endLine": 23227, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48335,15 +47557,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource274", + "logicalId": "Resource236", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 27047, + "startLine": 23285, "startColumn": 15, - "endLine": 27047, + "endLine": 23285, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48354,15 +47576,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource274", + "logicalId": "Resource236", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27082, + "startLine": 23320, "startColumn": 15, - "endLine": 27082, + "endLine": 23320, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48373,15 +47595,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource274", + "logicalId": "Resource236", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27088, + "startLine": 23326, "startColumn": 15, - "endLine": 27088, + "endLine": 23326, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48392,15 +47614,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource275", + "logicalId": "Resource237", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 27146, + "startLine": 23384, "startColumn": 15, - "endLine": 27146, + "endLine": 23384, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48411,15 +47633,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource275", + "logicalId": "Resource237", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27181, + "startLine": 23419, "startColumn": 15, - "endLine": 27181, + "endLine": 23419, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48430,15 +47652,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource275", + "logicalId": "Resource237", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27187, + "startLine": 23425, "startColumn": 15, - "endLine": 27187, + "endLine": 23425, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48449,15 +47671,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource276", + "logicalId": "Resource238", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 27245, + "startLine": 23483, "startColumn": 15, - "endLine": 27245, + "endLine": 23483, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48468,15 +47690,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource276", + "logicalId": "Resource238", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27280, + "startLine": 23518, "startColumn": 15, - "endLine": 27280, + "endLine": 23518, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48487,15 +47709,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource276", + "logicalId": "Resource238", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27286, + "startLine": 23524, "startColumn": 15, - "endLine": 27286, + "endLine": 23524, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48506,15 +47728,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource277", + "logicalId": "Resource239", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 27344, + "startLine": 23582, "startColumn": 15, - "endLine": 27344, + "endLine": 23582, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48525,15 +47747,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource277", + "logicalId": "Resource239", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27379, + "startLine": 23617, "startColumn": 15, - "endLine": 27379, + "endLine": 23617, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48544,15 +47766,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource277", + "logicalId": "Resource239", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27385, + "startLine": 23623, "startColumn": 15, - "endLine": 27385, + "endLine": 23623, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48563,15 +47785,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource278", + "logicalId": "Resource240", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 27443, + "startLine": 23681, "startColumn": 15, - "endLine": 27443, + "endLine": 23681, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48582,15 +47804,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource278", + "logicalId": "Resource240", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27478, + "startLine": 23716, "startColumn": 15, - "endLine": 27478, + "endLine": 23716, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48601,15 +47823,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource278", + "logicalId": "Resource240", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27484, + "startLine": 23722, "startColumn": 15, - "endLine": 27484, + "endLine": 23722, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48620,15 +47842,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource279", + "logicalId": "Resource241", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 27542, + "startLine": 23780, "startColumn": 15, - "endLine": 27542, + "endLine": 23780, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48639,15 +47861,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource279", + "logicalId": "Resource241", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27577, + "startLine": 23815, "startColumn": 15, - "endLine": 27577, + "endLine": 23815, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48658,15 +47880,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource279", + "logicalId": "Resource241", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27583, + "startLine": 23821, "startColumn": 15, - "endLine": 27583, + "endLine": 23821, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48677,15 +47899,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource280", + "logicalId": "Resource242", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 27641, + "startLine": 23879, "startColumn": 15, - "endLine": 27641, + "endLine": 23879, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48696,15 +47918,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource280", + "logicalId": "Resource242", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27676, + "startLine": 23914, "startColumn": 15, - "endLine": 27676, + "endLine": 23914, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48715,15 +47937,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource280", + "logicalId": "Resource242", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27682, + "startLine": 23920, "startColumn": 15, - "endLine": 27682, + "endLine": 23920, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48734,15 +47956,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource281", + "logicalId": "Resource243", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 27740, + "startLine": 23978, "startColumn": 15, - "endLine": 27740, + "endLine": 23978, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48753,15 +47975,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource281", + "logicalId": "Resource243", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27775, + "startLine": 24013, "startColumn": 15, - "endLine": 27775, + "endLine": 24013, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48772,15 +47994,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource281", + "logicalId": "Resource243", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27781, + "startLine": 24019, "startColumn": 15, - "endLine": 27781, + "endLine": 24019, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48791,15 +48013,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource282", + "logicalId": "Resource244", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 27839, + "startLine": 24077, "startColumn": 15, - "endLine": 27839, + "endLine": 24077, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48810,15 +48032,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource282", + "logicalId": "Resource244", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27874, + "startLine": 24112, "startColumn": 15, - "endLine": 27874, + "endLine": 24112, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48829,15 +48051,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource282", + "logicalId": "Resource244", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27880, + "startLine": 24118, "startColumn": 15, - "endLine": 27880, + "endLine": 24118, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48848,15 +48070,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource283", + "logicalId": "Resource245", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 27938, + "startLine": 24176, "startColumn": 15, - "endLine": 27938, + "endLine": 24176, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48867,15 +48089,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource283", + "logicalId": "Resource245", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27973, + "startLine": 24211, "startColumn": 15, - "endLine": 27973, + "endLine": 24211, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48886,15 +48108,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource283", + "logicalId": "Resource245", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 27979, + "startLine": 24217, "startColumn": 15, - "endLine": 27979, + "endLine": 24217, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48905,15 +48127,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource284", + "logicalId": "Resource246", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 28037, + "startLine": 24275, "startColumn": 15, - "endLine": 28037, + "endLine": 24275, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48924,15 +48146,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource284", + "logicalId": "Resource246", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28072, + "startLine": 24310, "startColumn": 15, - "endLine": 28072, + "endLine": 24310, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48943,15 +48165,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource284", + "logicalId": "Resource246", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28078, + "startLine": 24316, "startColumn": 15, - "endLine": 28078, + "endLine": 24316, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48962,15 +48184,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource285", + "logicalId": "Resource247", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 28136, + "startLine": 24374, "startColumn": 15, - "endLine": 28136, + "endLine": 24374, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -48981,15 +48203,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource285", + "logicalId": "Resource247", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28171, + "startLine": 24409, "startColumn": 15, - "endLine": 28171, + "endLine": 24409, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49000,15 +48222,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource285", + "logicalId": "Resource247", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28177, + "startLine": 24415, "startColumn": 15, - "endLine": 28177, + "endLine": 24415, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49019,15 +48241,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource286", + "logicalId": "Resource248", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 28235, + "startLine": 24473, "startColumn": 15, - "endLine": 28235, + "endLine": 24473, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49038,15 +48260,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource286", + "logicalId": "Resource248", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28270, + "startLine": 24508, "startColumn": 15, - "endLine": 28270, + "endLine": 24508, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49057,15 +48279,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource286", + "logicalId": "Resource248", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28276, + "startLine": 24514, "startColumn": 15, - "endLine": 28276, + "endLine": 24514, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49076,15 +48298,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource287", + "logicalId": "Resource249", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 28334, + "startLine": 24572, "startColumn": 15, - "endLine": 28334, + "endLine": 24572, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49095,15 +48317,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource287", + "logicalId": "Resource249", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28369, + "startLine": 24607, "startColumn": 15, - "endLine": 28369, + "endLine": 24607, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49114,15 +48336,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource287", + "logicalId": "Resource249", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28375, + "startLine": 24613, "startColumn": 15, - "endLine": 28375, + "endLine": 24613, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49133,15 +48355,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource288", + "logicalId": "Resource250", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 28433, + "startLine": 24671, "startColumn": 15, - "endLine": 28433, + "endLine": 24671, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49152,15 +48374,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource288", + "logicalId": "Resource250", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28468, + "startLine": 24706, "startColumn": 15, - "endLine": 28468, + "endLine": 24706, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49171,15 +48393,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource288", + "logicalId": "Resource250", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28474, + "startLine": 24712, "startColumn": 15, - "endLine": 28474, + "endLine": 24712, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49190,15 +48412,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource289", + "logicalId": "Resource251", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 28532, + "startLine": 24770, "startColumn": 15, - "endLine": 28532, + "endLine": 24770, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49209,15 +48431,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource289", + "logicalId": "Resource251", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28567, + "startLine": 24805, "startColumn": 15, - "endLine": 28567, + "endLine": 24805, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49228,15 +48450,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource289", + "logicalId": "Resource251", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28573, + "startLine": 24811, "startColumn": 15, - "endLine": 28573, + "endLine": 24811, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49247,15 +48469,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource290", + "logicalId": "Resource252", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 28631, + "startLine": 24869, "startColumn": 15, - "endLine": 28631, + "endLine": 24869, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49266,15 +48488,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource290", + "logicalId": "Resource252", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28666, + "startLine": 24904, "startColumn": 15, - "endLine": 28666, + "endLine": 24904, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49285,15 +48507,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource290", + "logicalId": "Resource252", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28672, + "startLine": 24910, "startColumn": 15, - "endLine": 28672, + "endLine": 24910, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49304,15 +48526,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource291", + "logicalId": "Resource253", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 28730, + "startLine": 24968, "startColumn": 15, - "endLine": 28730, + "endLine": 24968, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49323,15 +48545,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource291", + "logicalId": "Resource253", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28765, + "startLine": 25003, "startColumn": 15, - "endLine": 28765, + "endLine": 25003, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49342,15 +48564,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource291", + "logicalId": "Resource253", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28771, + "startLine": 25009, "startColumn": 15, - "endLine": 28771, + "endLine": 25009, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49361,15 +48583,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource292", + "logicalId": "Resource254", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 28829, + "startLine": 25067, "startColumn": 15, - "endLine": 28829, + "endLine": 25067, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49380,15 +48602,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource292", + "logicalId": "Resource254", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28864, + "startLine": 25102, "startColumn": 15, - "endLine": 28864, + "endLine": 25102, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49399,15 +48621,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource292", + "logicalId": "Resource254", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28870, + "startLine": 25108, "startColumn": 15, - "endLine": 28870, + "endLine": 25108, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49418,15 +48640,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource293", + "logicalId": "Resource255", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 28928, + "startLine": 25166, "startColumn": 15, - "endLine": 28928, + "endLine": 25166, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49437,15 +48659,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource293", + "logicalId": "Resource255", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28963, + "startLine": 25201, "startColumn": 15, - "endLine": 28963, + "endLine": 25201, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49456,15 +48678,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource293", + "logicalId": "Resource255", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 28969, + "startLine": 25207, "startColumn": 15, - "endLine": 28969, + "endLine": 25207, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49475,15 +48697,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource294", + "logicalId": "Resource256", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 29027, + "startLine": 25265, "startColumn": 15, - "endLine": 29027, + "endLine": 25265, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49494,15 +48716,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource294", + "logicalId": "Resource256", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 29062, + "startLine": 25300, "startColumn": 15, - "endLine": 29062, + "endLine": 25300, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49513,15 +48735,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource294", + "logicalId": "Resource256", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 29068, + "startLine": 25306, "startColumn": 15, - "endLine": 29068, + "endLine": 25306, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49532,15 +48754,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource295", + "logicalId": "Resource257", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 29126, + "startLine": 25364, "startColumn": 15, - "endLine": 29126, + "endLine": 25364, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49551,15 +48773,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource295", + "logicalId": "Resource257", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 29161, + "startLine": 25399, "startColumn": 15, - "endLine": 29161, + "endLine": 25399, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49570,15 +48792,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource295", + "logicalId": "Resource257", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 29167, + "startLine": 25405, "startColumn": 15, - "endLine": 29167, + "endLine": 25405, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49589,15 +48811,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource296", + "logicalId": "Resource258", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 29225, + "startLine": 25463, "startColumn": 15, - "endLine": 29225, + "endLine": 25463, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49608,15 +48830,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource296", + "logicalId": "Resource258", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 29260, + "startLine": 25498, "startColumn": 15, - "endLine": 29260, + "endLine": 25498, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49627,15 +48849,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource296", + "logicalId": "Resource258", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 29266, + "startLine": 25504, "startColumn": 15, - "endLine": 29266, + "endLine": 25504, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49646,15 +48868,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource297", + "logicalId": "Resource259", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 29324, + "startLine": 25562, "startColumn": 15, - "endLine": 29324, + "endLine": 25562, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49665,15 +48887,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource297", + "logicalId": "Resource259", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 29359, + "startLine": 25597, "startColumn": 15, - "endLine": 29359, + "endLine": 25597, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49684,15 +48906,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource297", + "logicalId": "Resource259", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 29365, + "startLine": 25603, "startColumn": 15, - "endLine": 29365, + "endLine": 25603, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49703,15 +48925,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource298", + "logicalId": "Resource260", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 29423, + "startLine": 25661, "startColumn": 15, - "endLine": 29423, + "endLine": 25661, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49722,15 +48944,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource298", + "logicalId": "Resource260", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 29458, + "startLine": 25696, "startColumn": 15, - "endLine": 29458, + "endLine": 25696, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49741,15 +48963,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource298", + "logicalId": "Resource260", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 29464, + "startLine": 25702, "startColumn": 15, - "endLine": 29464, + "endLine": 25702, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49760,15 +48982,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource299", + "logicalId": "Resource261", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 29522, + "startLine": 25760, "startColumn": 15, - "endLine": 29522, + "endLine": 25760, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49779,15 +49001,15 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource299", + "logicalId": "Resource261", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 29557, + "startLine": 25795, "startColumn": 15, - "endLine": 29557, + "endLine": 25795, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" @@ -49798,2847 +49020,2184 @@ "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "Resource299", + "logicalId": "Resource261", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 29563, + "startLine": 25801, "startColumn": 15, - "endLine": 29563, + "endLine": 25801, "endColumn": 22, "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Resource1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 89, - "startColumn": 7, - "endLine": 89, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Resource1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 90, - "startColumn": 7, - "endLine": 90, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Resource1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.UserData", - "category": "Best Practice", - "startLine": 91, - "startColumn": 7, - "endLine": 91, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Resource2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 188, - "startColumn": 7, - "endLine": 188, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Resource2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 189, - "startColumn": 7, - "endLine": 189, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Resource2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.UserData", - "category": "Best Practice", - "startLine": 190, - "startColumn": 7, - "endLine": 190, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Resource3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 287, - "startColumn": 7, - "endLine": 287, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Resource3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 288, - "startColumn": 7, - "endLine": 288, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Resource3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.UserData", - "category": "Best Practice", - "startLine": 289, - "startColumn": 7, - "endLine": 289, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Resource4", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 386, - "startColumn": 7, - "endLine": 386, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Resource4", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 387, - "startColumn": 7, - "endLine": 387, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource4", + "logicalId": "Resource262", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 388, - "startColumn": 7, - "endLine": 388, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 25859, + "startColumn": 15, + "endLine": 25859, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource5", + "logicalId": "Resource262", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 485, - "startColumn": 7, - "endLine": 485, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 25894, + "startColumn": 15, + "endLine": 25894, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource5", + "logicalId": "Resource262", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 486, - "startColumn": 7, - "endLine": 486, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 25900, + "startColumn": 15, + "endLine": 25900, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource5", + "logicalId": "Resource263", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 487, - "startColumn": 7, - "endLine": 487, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 25958, + "startColumn": 15, + "endLine": 25958, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource6", + "logicalId": "Resource263", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 584, - "startColumn": 7, - "endLine": 584, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 25993, + "startColumn": 15, + "endLine": 25993, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource6", + "logicalId": "Resource263", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 585, - "startColumn": 7, - "endLine": 585, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 25999, + "startColumn": 15, + "endLine": 25999, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource6", + "logicalId": "Resource264", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 586, - "startColumn": 7, - "endLine": 586, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 26057, + "startColumn": 15, + "endLine": 26057, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource7", + "logicalId": "Resource264", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 683, - "startColumn": 7, - "endLine": 683, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 26092, + "startColumn": 15, + "endLine": 26092, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource7", + "logicalId": "Resource264", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 684, - "startColumn": 7, - "endLine": 684, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 26098, + "startColumn": 15, + "endLine": 26098, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource7", + "logicalId": "Resource265", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 685, - "startColumn": 7, - "endLine": 685, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 26156, + "startColumn": 15, + "endLine": 26156, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource8", + "logicalId": "Resource265", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 782, - "startColumn": 7, - "endLine": 782, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 26191, + "startColumn": 15, + "endLine": 26191, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource8", + "logicalId": "Resource265", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 783, - "startColumn": 7, - "endLine": 783, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 26197, + "startColumn": 15, + "endLine": 26197, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource8", + "logicalId": "Resource266", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 784, - "startColumn": 7, - "endLine": 784, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 26255, + "startColumn": 15, + "endLine": 26255, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource9", + "logicalId": "Resource266", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 881, - "startColumn": 7, - "endLine": 881, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 26290, + "startColumn": 15, + "endLine": 26290, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource9", + "logicalId": "Resource266", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 882, - "startColumn": 7, - "endLine": 882, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 26296, + "startColumn": 15, + "endLine": 26296, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource9", + "logicalId": "Resource267", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 883, - "startColumn": 7, - "endLine": 883, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 26354, + "startColumn": 15, + "endLine": 26354, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource10", + "logicalId": "Resource267", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 980, - "startColumn": 7, - "endLine": 980, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 26389, + "startColumn": 15, + "endLine": 26389, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource10", + "logicalId": "Resource267", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 981, - "startColumn": 7, - "endLine": 981, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 26395, + "startColumn": 15, + "endLine": 26395, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource10", + "logicalId": "Resource268", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 982, - "startColumn": 7, - "endLine": 982, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 26453, + "startColumn": 15, + "endLine": 26453, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource11", + "logicalId": "Resource268", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1079, - "startColumn": 7, - "endLine": 1079, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "startLine": 26488, + "startColumn": 15, + "endLine": 26488, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" + }, + { + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource11", + "logicalId": "Resource268", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1080, - "startColumn": 7, - "endLine": 1080, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 26494, + "startColumn": 15, + "endLine": 26494, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource11", + "logicalId": "Resource269", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 1081, - "startColumn": 7, - "endLine": 1081, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 26552, + "startColumn": 15, + "endLine": 26552, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource12", + "logicalId": "Resource269", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1178, - "startColumn": 7, - "endLine": 1178, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 26587, + "startColumn": 15, + "endLine": 26587, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource12", + "logicalId": "Resource269", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1179, - "startColumn": 7, - "endLine": 1179, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 26593, + "startColumn": 15, + "endLine": 26593, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource12", + "logicalId": "Resource270", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 1180, - "startColumn": 7, - "endLine": 1180, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 26651, + "startColumn": 15, + "endLine": 26651, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource13", + "logicalId": "Resource270", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1277, - "startColumn": 7, - "endLine": 1277, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 26686, + "startColumn": 15, + "endLine": 26686, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource13", + "logicalId": "Resource270", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1278, - "startColumn": 7, - "endLine": 1278, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 26692, + "startColumn": 15, + "endLine": 26692, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource13", + "logicalId": "Resource271", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 1279, - "startColumn": 7, - "endLine": 1279, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 26750, + "startColumn": 15, + "endLine": 26750, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource14", + "logicalId": "Resource271", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1376, - "startColumn": 7, - "endLine": 1376, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 26785, + "startColumn": 15, + "endLine": 26785, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource14", + "logicalId": "Resource271", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1377, - "startColumn": 7, - "endLine": 1377, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 26791, + "startColumn": 15, + "endLine": 26791, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource14", + "logicalId": "Resource272", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 1378, - "startColumn": 7, - "endLine": 1378, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 26849, + "startColumn": 15, + "endLine": 26849, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource15", + "logicalId": "Resource272", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1475, - "startColumn": 7, - "endLine": 1475, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 26884, + "startColumn": 15, + "endLine": 26884, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource15", + "logicalId": "Resource272", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1476, - "startColumn": 7, - "endLine": 1476, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 26890, + "startColumn": 15, + "endLine": 26890, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource15", + "logicalId": "Resource273", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 1477, - "startColumn": 7, - "endLine": 1477, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 26948, + "startColumn": 15, + "endLine": 26948, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource16", + "logicalId": "Resource273", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1574, - "startColumn": 7, - "endLine": 1574, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 26983, + "startColumn": 15, + "endLine": 26983, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource16", + "logicalId": "Resource273", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1575, - "startColumn": 7, - "endLine": 1575, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 26989, + "startColumn": 15, + "endLine": 26989, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource16", + "logicalId": "Resource274", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 1576, - "startColumn": 7, - "endLine": 1576, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 27047, + "startColumn": 15, + "endLine": 27047, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource17", + "logicalId": "Resource274", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1673, - "startColumn": 7, - "endLine": 1673, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 27082, + "startColumn": 15, + "endLine": 27082, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" + }, + { + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", + "entity": { + "logicalId": "Resource274", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", + "category": "Best Practice", + "startLine": 27088, + "startColumn": 15, + "endLine": 27088, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource17", + "logicalId": "Resource275", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 1674, - "startColumn": 7, - "endLine": 1674, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 27146, + "startColumn": 15, + "endLine": 27146, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource17", + "logicalId": "Resource275", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1675, - "startColumn": 7, - "endLine": 1675, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 27181, + "startColumn": 15, + "endLine": 27181, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource18", + "logicalId": "Resource275", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1772, - "startColumn": 7, - "endLine": 1772, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 27187, + "startColumn": 15, + "endLine": 27187, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource18", + "logicalId": "Resource276", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 1773, - "startColumn": 7, - "endLine": 1773, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 27245, + "startColumn": 15, + "endLine": 27245, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource18", + "logicalId": "Resource276", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1774, - "startColumn": 7, - "endLine": 1774, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 27280, + "startColumn": 15, + "endLine": 27280, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource19", + "logicalId": "Resource276", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1871, - "startColumn": 7, - "endLine": 1871, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 27286, + "startColumn": 15, + "endLine": 27286, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource19", + "logicalId": "Resource277", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 1872, - "startColumn": 7, - "endLine": 1872, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 27344, + "startColumn": 15, + "endLine": 27344, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource19", + "logicalId": "Resource277", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1873, - "startColumn": 7, - "endLine": 1873, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 27379, + "startColumn": 15, + "endLine": 27379, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource20", + "logicalId": "Resource277", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1970, - "startColumn": 7, - "endLine": 1970, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 27385, + "startColumn": 15, + "endLine": 27385, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource20", + "logicalId": "Resource278", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 1971, - "startColumn": 7, - "endLine": 1971, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 27443, + "startColumn": 15, + "endLine": 27443, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource20", + "logicalId": "Resource278", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 1972, - "startColumn": 7, - "endLine": 1972, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 27478, + "startColumn": 15, + "endLine": 27478, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource21", + "logicalId": "Resource278", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2069, - "startColumn": 7, - "endLine": 2069, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 27484, + "startColumn": 15, + "endLine": 27484, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource21", + "logicalId": "Resource279", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 2070, - "startColumn": 7, - "endLine": 2070, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 27542, + "startColumn": 15, + "endLine": 27542, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource21", + "logicalId": "Resource279", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2071, - "startColumn": 7, - "endLine": 2071, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 27577, + "startColumn": 15, + "endLine": 27577, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource22", + "logicalId": "Resource279", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2168, - "startColumn": 7, - "endLine": 2168, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 27583, + "startColumn": 15, + "endLine": 27583, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource22", + "logicalId": "Resource280", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 2169, - "startColumn": 7, - "endLine": 2169, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 27641, + "startColumn": 15, + "endLine": 27641, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource22", + "logicalId": "Resource280", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2170, - "startColumn": 7, - "endLine": 2170, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 27676, + "startColumn": 15, + "endLine": 27676, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource23", + "logicalId": "Resource280", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2267, - "startColumn": 7, - "endLine": 2267, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 27682, + "startColumn": 15, + "endLine": 27682, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource23", + "logicalId": "Resource281", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 2268, - "startColumn": 7, - "endLine": 2268, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 27740, + "startColumn": 15, + "endLine": 27740, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource23", + "logicalId": "Resource281", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2269, - "startColumn": 7, - "endLine": 2269, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 27775, + "startColumn": 15, + "endLine": 27775, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource24", + "logicalId": "Resource281", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2366, - "startColumn": 7, - "endLine": 2366, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 27781, + "startColumn": 15, + "endLine": 27781, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource24", + "logicalId": "Resource282", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 2367, - "startColumn": 7, - "endLine": 2367, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 27839, + "startColumn": 15, + "endLine": 27839, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource24", + "logicalId": "Resource282", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2368, - "startColumn": 7, - "endLine": 2368, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 27874, + "startColumn": 15, + "endLine": 27874, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource25", + "logicalId": "Resource282", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2465, - "startColumn": 7, - "endLine": 2465, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 27880, + "startColumn": 15, + "endLine": 27880, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource25", + "logicalId": "Resource283", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 2466, - "startColumn": 7, - "endLine": 2466, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 27938, + "startColumn": 15, + "endLine": 27938, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource25", + "logicalId": "Resource283", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2467, - "startColumn": 7, - "endLine": 2467, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 27973, + "startColumn": 15, + "endLine": 27973, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource26", + "logicalId": "Resource283", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2564, - "startColumn": 7, - "endLine": 2564, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 27979, + "startColumn": 15, + "endLine": 27979, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource26", + "logicalId": "Resource284", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 2565, - "startColumn": 7, - "endLine": 2565, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28037, + "startColumn": 15, + "endLine": 28037, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource26", + "logicalId": "Resource284", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2566, - "startColumn": 7, - "endLine": 2566, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28072, + "startColumn": 15, + "endLine": 28072, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource27", + "logicalId": "Resource284", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2663, - "startColumn": 7, - "endLine": 2663, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 28078, + "startColumn": 15, + "endLine": 28078, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource27", + "logicalId": "Resource285", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 2664, - "startColumn": 7, - "endLine": 2664, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28136, + "startColumn": 15, + "endLine": 28136, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource27", + "logicalId": "Resource285", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2665, - "startColumn": 7, - "endLine": 2665, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28171, + "startColumn": 15, + "endLine": 28171, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource28", + "logicalId": "Resource285", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2762, - "startColumn": 7, - "endLine": 2762, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 28177, + "startColumn": 15, + "endLine": 28177, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource28", + "logicalId": "Resource286", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 2763, - "startColumn": 7, - "endLine": 2763, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28235, + "startColumn": 15, + "endLine": 28235, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource28", + "logicalId": "Resource286", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2764, - "startColumn": 7, - "endLine": 2764, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28270, + "startColumn": 15, + "endLine": 28270, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource29", + "logicalId": "Resource286", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2861, - "startColumn": 7, - "endLine": 2861, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "startLine": 28276, + "startColumn": 15, + "endLine": 28276, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" + }, + { + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource29", + "logicalId": "Resource287", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 2862, - "startColumn": 7, - "endLine": 2862, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28334, + "startColumn": 15, + "endLine": 28334, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource29", + "logicalId": "Resource287", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2863, - "startColumn": 7, - "endLine": 2863, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28369, + "startColumn": 15, + "endLine": 28369, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource30", + "logicalId": "Resource287", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2960, - "startColumn": 7, - "endLine": 2960, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 28375, + "startColumn": 15, + "endLine": 28375, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource30", + "logicalId": "Resource288", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 2961, - "startColumn": 7, - "endLine": 2961, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28433, + "startColumn": 15, + "endLine": 28433, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource30", + "logicalId": "Resource288", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 2962, - "startColumn": 7, - "endLine": 2962, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28468, + "startColumn": 15, + "endLine": 28468, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource31", + "logicalId": "Resource288", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3059, - "startColumn": 7, - "endLine": 3059, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 28474, + "startColumn": 15, + "endLine": 28474, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource31", + "logicalId": "Resource289", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 3060, - "startColumn": 7, - "endLine": 3060, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28532, + "startColumn": 15, + "endLine": 28532, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource31", + "logicalId": "Resource289", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3061, - "startColumn": 7, - "endLine": 3061, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28567, + "startColumn": 15, + "endLine": 28567, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource32", + "logicalId": "Resource289", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3158, - "startColumn": 7, - "endLine": 3158, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 28573, + "startColumn": 15, + "endLine": 28573, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource32", + "logicalId": "Resource290", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 3159, - "startColumn": 7, - "endLine": 3159, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28631, + "startColumn": 15, + "endLine": 28631, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource32", + "logicalId": "Resource290", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3160, - "startColumn": 7, - "endLine": 3160, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28666, + "startColumn": 15, + "endLine": 28666, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource33", + "logicalId": "Resource290", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3257, - "startColumn": 7, - "endLine": 3257, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 28672, + "startColumn": 15, + "endLine": 28672, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource33", + "logicalId": "Resource291", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 3258, - "startColumn": 7, - "endLine": 3258, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28730, + "startColumn": 15, + "endLine": 28730, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource33", + "logicalId": "Resource291", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3259, - "startColumn": 7, - "endLine": 3259, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28765, + "startColumn": 15, + "endLine": 28765, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource34", + "logicalId": "Resource291", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3356, - "startColumn": 7, - "endLine": 3356, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 28771, + "startColumn": 15, + "endLine": 28771, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource34", + "logicalId": "Resource292", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 3357, - "startColumn": 7, - "endLine": 3357, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28829, + "startColumn": 15, + "endLine": 28829, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource34", + "logicalId": "Resource292", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3358, - "startColumn": 7, - "endLine": 3358, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28864, + "startColumn": 15, + "endLine": 28864, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource35", + "logicalId": "Resource292", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3455, - "startColumn": 7, - "endLine": 3455, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 28870, + "startColumn": 15, + "endLine": 28870, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" + }, + { + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", + "entity": { + "logicalId": "Resource293", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", + "category": "Best Practice", + "startLine": 28928, + "startColumn": 15, + "endLine": 28928, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource35", + "logicalId": "Resource293", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3456, - "startColumn": 7, - "endLine": 3456, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28963, + "startColumn": 15, + "endLine": 28963, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource35", + "logicalId": "Resource293", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3457, - "startColumn": 7, - "endLine": 3457, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 28969, + "startColumn": 15, + "endLine": 28969, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource36", + "logicalId": "Resource294", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 3554, - "startColumn": 7, - "endLine": 3554, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 29027, + "startColumn": 15, + "endLine": 29027, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource36", + "logicalId": "Resource294", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3555, - "startColumn": 7, - "endLine": 3555, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 29062, + "startColumn": 15, + "endLine": 29062, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource36", + "logicalId": "Resource294", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3556, - "startColumn": 7, - "endLine": 3556, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 29068, + "startColumn": 15, + "endLine": 29068, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource37", + "logicalId": "Resource295", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 3653, - "startColumn": 7, - "endLine": 3653, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 29126, + "startColumn": 15, + "endLine": 29126, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource37", + "logicalId": "Resource295", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3654, - "startColumn": 7, - "endLine": 3654, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 29161, + "startColumn": 15, + "endLine": 29161, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource37", + "logicalId": "Resource295", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3655, - "startColumn": 7, - "endLine": 3655, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 29167, + "startColumn": 15, + "endLine": 29167, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource38", + "logicalId": "Resource296", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 3752, - "startColumn": 7, - "endLine": 3752, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 29225, + "startColumn": 15, + "endLine": 29225, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource38", + "logicalId": "Resource296", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3753, - "startColumn": 7, - "endLine": 3753, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 29260, + "startColumn": 15, + "endLine": 29260, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource38", + "logicalId": "Resource296", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3754, - "startColumn": 7, - "endLine": 3754, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 29266, + "startColumn": 15, + "endLine": 29266, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource39", + "logicalId": "Resource297", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 3851, - "startColumn": 7, - "endLine": 3851, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 29324, + "startColumn": 15, + "endLine": 29324, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource39", + "logicalId": "Resource297", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3852, - "startColumn": 7, - "endLine": 3852, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 29359, + "startColumn": 15, + "endLine": 29359, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource39", + "logicalId": "Resource297", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3853, - "startColumn": 7, - "endLine": 3853, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 29365, + "startColumn": 15, + "endLine": 29365, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource40", + "logicalId": "Resource298", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 3950, - "startColumn": 7, - "endLine": 3950, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 29423, + "startColumn": 15, + "endLine": 29423, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource40", + "logicalId": "Resource298", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3951, - "startColumn": 7, - "endLine": 3951, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 29458, + "startColumn": 15, + "endLine": 29458, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource40", + "logicalId": "Resource298", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 3952, - "startColumn": 7, - "endLine": 3952, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 29464, + "startColumn": 15, + "endLine": 29464, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource41", + "logicalId": "Resource299", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./etc/awslogs/awslogs.conf.content.Fn::Sub", "category": "Best Practice", - "startLine": 4049, - "startColumn": 7, - "endLine": 4049, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 29522, + "startColumn": 15, + "endLine": 29522, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource41", + "logicalId": "Resource299", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./install_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4050, - "startColumn": 7, - "endLine": 4050, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 29557, + "startColumn": 15, + "endLine": 29557, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Resource41", + "logicalId": "Resource299", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Metadata.AWS::CloudFormation::Init.config.files./configure_magento.sh.source.Fn::Sub", "category": "Best Practice", - "startLine": 4051, - "startColumn": 7, - "endLine": 4051, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 29563, + "startColumn": 15, + "endLine": 29563, + "endColumn": 22, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" }, { "ruleId": "I9001", @@ -52646,15 +51205,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource42", + "logicalId": "Resource1", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 4148, + "startLine": 89, "startColumn": 7, - "endLine": 4148, + "endLine": 89, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52669,15 +51228,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource42", + "logicalId": "Resource1", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 4149, + "startLine": 90, "startColumn": 7, - "endLine": 4149, + "endLine": 90, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52692,15 +51251,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource42", + "logicalId": "Resource1", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 4150, + "startLine": 91, "startColumn": 7, - "endLine": 4150, + "endLine": 91, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52715,15 +51274,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource43", + "logicalId": "Resource2", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 4247, + "startLine": 188, "startColumn": 7, - "endLine": 4247, + "endLine": 188, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52738,15 +51297,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource43", + "logicalId": "Resource2", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 4248, + "startLine": 189, "startColumn": 7, - "endLine": 4248, + "endLine": 189, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52761,15 +51320,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource43", + "logicalId": "Resource2", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 4249, + "startLine": 190, "startColumn": 7, - "endLine": 4249, + "endLine": 190, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52784,15 +51343,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource44", + "logicalId": "Resource3", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 4346, + "startLine": 287, "startColumn": 7, - "endLine": 4346, + "endLine": 287, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52807,15 +51366,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource44", + "logicalId": "Resource3", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 4347, + "startLine": 288, "startColumn": 7, - "endLine": 4347, + "endLine": 288, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52830,15 +51389,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource44", + "logicalId": "Resource3", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 4348, + "startLine": 289, "startColumn": 7, - "endLine": 4348, + "endLine": 289, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52853,15 +51412,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource45", + "logicalId": "Resource4", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 4445, + "startLine": 386, "startColumn": 7, - "endLine": 4445, + "endLine": 386, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52876,15 +51435,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource45", + "logicalId": "Resource4", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 4446, + "startLine": 387, "startColumn": 7, - "endLine": 4446, + "endLine": 387, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52899,15 +51458,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource45", + "logicalId": "Resource4", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 4447, + "startLine": 388, "startColumn": 7, - "endLine": 4447, + "endLine": 388, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52922,15 +51481,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource46", + "logicalId": "Resource5", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 4544, + "startLine": 485, "startColumn": 7, - "endLine": 4544, + "endLine": 485, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52945,15 +51504,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource46", + "logicalId": "Resource5", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 4545, + "startLine": 486, "startColumn": 7, - "endLine": 4545, + "endLine": 486, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52968,15 +51527,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource46", + "logicalId": "Resource5", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 4546, + "startLine": 487, "startColumn": 7, - "endLine": 4546, + "endLine": 487, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -52991,15 +51550,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource47", + "logicalId": "Resource6", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 4643, + "startLine": 584, "startColumn": 7, - "endLine": 4643, + "endLine": 584, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53014,15 +51573,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource47", + "logicalId": "Resource6", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 4644, + "startLine": 585, "startColumn": 7, - "endLine": 4644, + "endLine": 585, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53037,15 +51596,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource47", + "logicalId": "Resource6", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 4645, + "startLine": 586, "startColumn": 7, - "endLine": 4645, + "endLine": 586, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53060,15 +51619,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource48", + "logicalId": "Resource7", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 4742, + "startLine": 683, "startColumn": 7, - "endLine": 4742, + "endLine": 683, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53083,15 +51642,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource48", + "logicalId": "Resource7", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 4743, + "startLine": 684, "startColumn": 7, - "endLine": 4743, + "endLine": 684, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53106,15 +51665,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource48", + "logicalId": "Resource7", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 4744, + "startLine": 685, "startColumn": 7, - "endLine": 4744, + "endLine": 685, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53129,15 +51688,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource49", + "logicalId": "Resource8", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 4841, + "startLine": 782, "startColumn": 7, - "endLine": 4841, + "endLine": 782, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53152,15 +51711,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource49", + "logicalId": "Resource8", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 4842, + "startLine": 783, "startColumn": 7, - "endLine": 4842, + "endLine": 783, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53175,15 +51734,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource49", + "logicalId": "Resource8", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 4843, + "startLine": 784, "startColumn": 7, - "endLine": 4843, + "endLine": 784, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53198,15 +51757,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource50", + "logicalId": "Resource9", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 4940, + "startLine": 881, "startColumn": 7, - "endLine": 4940, + "endLine": 881, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53221,15 +51780,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource50", + "logicalId": "Resource9", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 4941, + "startLine": 882, "startColumn": 7, - "endLine": 4941, + "endLine": 882, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53244,15 +51803,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource50", + "logicalId": "Resource9", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 4942, + "startLine": 883, "startColumn": 7, - "endLine": 4942, + "endLine": 883, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53267,15 +51826,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource51", + "logicalId": "Resource10", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 5039, + "startLine": 980, "startColumn": 7, - "endLine": 5039, + "endLine": 980, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53290,15 +51849,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource51", + "logicalId": "Resource10", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 5040, + "startLine": 981, "startColumn": 7, - "endLine": 5040, + "endLine": 981, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53313,15 +51872,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource51", + "logicalId": "Resource10", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 5041, + "startLine": 982, "startColumn": 7, - "endLine": 5041, + "endLine": 982, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53336,15 +51895,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource52", + "logicalId": "Resource11", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 5138, + "startLine": 1079, "startColumn": 7, - "endLine": 5138, + "endLine": 1079, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53359,15 +51918,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource52", + "logicalId": "Resource11", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 5139, + "startLine": 1080, "startColumn": 7, - "endLine": 5139, + "endLine": 1080, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53382,15 +51941,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource52", + "logicalId": "Resource11", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 5140, + "startLine": 1081, "startColumn": 7, - "endLine": 5140, + "endLine": 1081, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53405,15 +51964,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource53", + "logicalId": "Resource12", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 5237, + "startLine": 1178, "startColumn": 7, - "endLine": 5237, + "endLine": 1178, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53428,15 +51987,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource53", + "logicalId": "Resource12", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 5238, + "startLine": 1179, "startColumn": 7, - "endLine": 5238, + "endLine": 1179, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53451,15 +52010,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource53", + "logicalId": "Resource12", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 5239, + "startLine": 1180, "startColumn": 7, - "endLine": 5239, + "endLine": 1180, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53474,15 +52033,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource54", + "logicalId": "Resource13", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 5336, + "startLine": 1277, "startColumn": 7, - "endLine": 5336, + "endLine": 1277, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53497,15 +52056,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource54", + "logicalId": "Resource13", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 5337, + "startLine": 1278, "startColumn": 7, - "endLine": 5337, + "endLine": 1278, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53520,15 +52079,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource54", + "logicalId": "Resource13", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 5338, + "startLine": 1279, "startColumn": 7, - "endLine": 5338, + "endLine": 1279, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53543,15 +52102,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource55", + "logicalId": "Resource14", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 5435, + "startLine": 1376, "startColumn": 7, - "endLine": 5435, + "endLine": 1376, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53566,15 +52125,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource55", + "logicalId": "Resource14", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 5436, + "startLine": 1377, "startColumn": 7, - "endLine": 5436, + "endLine": 1377, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53589,15 +52148,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource55", + "logicalId": "Resource14", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 5437, + "startLine": 1378, "startColumn": 7, - "endLine": 5437, + "endLine": 1378, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53612,15 +52171,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource56", + "logicalId": "Resource15", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 5534, + "startLine": 1475, "startColumn": 7, - "endLine": 5534, + "endLine": 1475, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53635,15 +52194,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource56", + "logicalId": "Resource15", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 5535, + "startLine": 1476, "startColumn": 7, - "endLine": 5535, + "endLine": 1476, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53658,15 +52217,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource56", + "logicalId": "Resource15", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 5536, + "startLine": 1477, "startColumn": 7, - "endLine": 5536, + "endLine": 1477, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53681,15 +52240,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource57", + "logicalId": "Resource16", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 5633, + "startLine": 1574, "startColumn": 7, - "endLine": 5633, + "endLine": 1574, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53704,15 +52263,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource57", + "logicalId": "Resource16", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 5634, + "startLine": 1575, "startColumn": 7, - "endLine": 5634, + "endLine": 1575, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53727,15 +52286,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource57", + "logicalId": "Resource16", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 5635, + "startLine": 1576, "startColumn": 7, - "endLine": 5635, + "endLine": 1576, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53750,15 +52309,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource58", + "logicalId": "Resource17", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 5732, + "startLine": 1673, "startColumn": 7, - "endLine": 5732, + "endLine": 1673, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53773,15 +52332,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource58", + "logicalId": "Resource17", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 5733, + "startLine": 1674, "startColumn": 7, - "endLine": 5733, + "endLine": 1674, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53796,15 +52355,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource58", + "logicalId": "Resource17", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 5734, + "startLine": 1675, "startColumn": 7, - "endLine": 5734, + "endLine": 1675, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53819,15 +52378,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource59", + "logicalId": "Resource18", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 5831, + "startLine": 1772, "startColumn": 7, - "endLine": 5831, + "endLine": 1772, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53842,15 +52401,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource59", + "logicalId": "Resource18", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 5832, + "startLine": 1773, "startColumn": 7, - "endLine": 5832, + "endLine": 1773, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53865,15 +52424,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource59", + "logicalId": "Resource18", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 5833, + "startLine": 1774, "startColumn": 7, - "endLine": 5833, + "endLine": 1774, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53888,15 +52447,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource60", + "logicalId": "Resource19", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 5930, + "startLine": 1871, "startColumn": 7, - "endLine": 5930, + "endLine": 1871, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53911,15 +52470,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource60", + "logicalId": "Resource19", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 5931, + "startLine": 1872, "startColumn": 7, - "endLine": 5931, + "endLine": 1872, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53934,15 +52493,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource60", + "logicalId": "Resource19", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 5932, + "startLine": 1873, "startColumn": 7, - "endLine": 5932, + "endLine": 1873, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53957,15 +52516,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource61", + "logicalId": "Resource20", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 6029, + "startLine": 1970, "startColumn": 7, - "endLine": 6029, + "endLine": 1970, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -53980,15 +52539,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource61", + "logicalId": "Resource20", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 6030, + "startLine": 1971, "startColumn": 7, - "endLine": 6030, + "endLine": 1971, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54003,15 +52562,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource61", + "logicalId": "Resource20", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 6031, + "startLine": 1972, "startColumn": 7, - "endLine": 6031, + "endLine": 1972, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54026,15 +52585,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource62", + "logicalId": "Resource21", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 6128, + "startLine": 2069, "startColumn": 7, - "endLine": 6128, + "endLine": 2069, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54049,15 +52608,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource62", + "logicalId": "Resource21", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 6129, + "startLine": 2070, "startColumn": 7, - "endLine": 6129, + "endLine": 2070, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54072,15 +52631,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource62", + "logicalId": "Resource21", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 6130, + "startLine": 2071, "startColumn": 7, - "endLine": 6130, + "endLine": 2071, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54095,15 +52654,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource63", + "logicalId": "Resource22", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 6227, + "startLine": 2168, "startColumn": 7, - "endLine": 6227, + "endLine": 2168, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54118,15 +52677,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource63", + "logicalId": "Resource22", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 6228, + "startLine": 2169, "startColumn": 7, - "endLine": 6228, + "endLine": 2169, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54141,15 +52700,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource63", + "logicalId": "Resource22", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 6229, + "startLine": 2170, "startColumn": 7, - "endLine": 6229, + "endLine": 2170, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54164,15 +52723,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource64", + "logicalId": "Resource23", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 6326, + "startLine": 2267, "startColumn": 7, - "endLine": 6326, + "endLine": 2267, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54187,15 +52746,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource64", + "logicalId": "Resource23", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 6327, + "startLine": 2268, "startColumn": 7, - "endLine": 6327, + "endLine": 2268, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54210,15 +52769,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource64", + "logicalId": "Resource23", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 6328, + "startLine": 2269, "startColumn": 7, - "endLine": 6328, + "endLine": 2269, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54233,15 +52792,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource65", + "logicalId": "Resource24", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 6425, + "startLine": 2366, "startColumn": 7, - "endLine": 6425, + "endLine": 2366, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54256,15 +52815,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource65", + "logicalId": "Resource24", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 6426, + "startLine": 2367, "startColumn": 7, - "endLine": 6426, + "endLine": 2367, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54279,15 +52838,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource65", + "logicalId": "Resource24", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 6427, + "startLine": 2368, "startColumn": 7, - "endLine": 6427, + "endLine": 2368, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54302,15 +52861,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource66", + "logicalId": "Resource25", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 6524, + "startLine": 2465, "startColumn": 7, - "endLine": 6524, + "endLine": 2465, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54325,15 +52884,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource66", + "logicalId": "Resource25", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 6525, + "startLine": 2466, "startColumn": 7, - "endLine": 6525, + "endLine": 2466, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54348,15 +52907,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource66", + "logicalId": "Resource25", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 6526, + "startLine": 2467, "startColumn": 7, - "endLine": 6526, + "endLine": 2467, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54371,15 +52930,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource67", + "logicalId": "Resource26", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 6623, + "startLine": 2564, "startColumn": 7, - "endLine": 6623, + "endLine": 2564, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54394,15 +52953,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource67", + "logicalId": "Resource26", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 6624, + "startLine": 2565, "startColumn": 7, - "endLine": 6624, + "endLine": 2565, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54417,15 +52976,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource67", + "logicalId": "Resource26", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 6625, + "startLine": 2566, "startColumn": 7, - "endLine": 6625, + "endLine": 2566, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54440,15 +52999,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource68", + "logicalId": "Resource27", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 6722, + "startLine": 2663, "startColumn": 7, - "endLine": 6722, + "endLine": 2663, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54463,15 +53022,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource68", + "logicalId": "Resource27", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 6723, + "startLine": 2664, "startColumn": 7, - "endLine": 6723, + "endLine": 2664, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54486,15 +53045,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource68", + "logicalId": "Resource27", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 6724, + "startLine": 2665, "startColumn": 7, - "endLine": 6724, + "endLine": 2665, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54509,15 +53068,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource69", + "logicalId": "Resource28", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 6821, + "startLine": 2762, "startColumn": 7, - "endLine": 6821, + "endLine": 2762, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54532,15 +53091,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource69", + "logicalId": "Resource28", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 6822, + "startLine": 2763, "startColumn": 7, - "endLine": 6822, + "endLine": 2763, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54555,15 +53114,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource69", + "logicalId": "Resource28", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 6823, + "startLine": 2764, "startColumn": 7, - "endLine": 6823, + "endLine": 2764, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54578,15 +53137,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource70", + "logicalId": "Resource29", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 6920, + "startLine": 2861, "startColumn": 7, - "endLine": 6920, + "endLine": 2861, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54601,15 +53160,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource70", + "logicalId": "Resource29", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 6921, + "startLine": 2862, "startColumn": 7, - "endLine": 6921, + "endLine": 2862, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54624,15 +53183,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource70", + "logicalId": "Resource29", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 6922, + "startLine": 2863, "startColumn": 7, - "endLine": 6922, + "endLine": 2863, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54647,15 +53206,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource71", + "logicalId": "Resource30", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 7019, + "startLine": 2960, "startColumn": 7, - "endLine": 7019, + "endLine": 2960, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54670,15 +53229,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource71", + "logicalId": "Resource30", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 7020, + "startLine": 2961, "startColumn": 7, - "endLine": 7020, + "endLine": 2961, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54693,15 +53252,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource71", + "logicalId": "Resource30", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 7021, + "startLine": 2962, "startColumn": 7, - "endLine": 7021, + "endLine": 2962, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54716,15 +53275,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource72", + "logicalId": "Resource31", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 7118, + "startLine": 3059, "startColumn": 7, - "endLine": 7118, + "endLine": 3059, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54739,15 +53298,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource72", + "logicalId": "Resource31", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 7119, + "startLine": 3060, "startColumn": 7, - "endLine": 7119, + "endLine": 3060, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54762,15 +53321,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource72", + "logicalId": "Resource31", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 7120, + "startLine": 3061, "startColumn": 7, - "endLine": 7120, + "endLine": 3061, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54785,15 +53344,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource73", + "logicalId": "Resource32", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 7217, + "startLine": 3158, "startColumn": 7, - "endLine": 7217, + "endLine": 3158, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54808,15 +53367,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource73", + "logicalId": "Resource32", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 7218, + "startLine": 3159, "startColumn": 7, - "endLine": 7218, + "endLine": 3159, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54831,15 +53390,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource73", + "logicalId": "Resource32", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 7219, + "startLine": 3160, "startColumn": 7, - "endLine": 7219, + "endLine": 3160, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54854,15 +53413,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource74", + "logicalId": "Resource33", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 7316, + "startLine": 3257, "startColumn": 7, - "endLine": 7316, + "endLine": 3257, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54877,15 +53436,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource74", + "logicalId": "Resource33", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 7317, + "startLine": 3258, "startColumn": 7, - "endLine": 7317, + "endLine": 3258, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54900,15 +53459,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource74", + "logicalId": "Resource33", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 7318, + "startLine": 3259, "startColumn": 7, - "endLine": 7318, + "endLine": 3259, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54923,15 +53482,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource75", + "logicalId": "Resource34", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 7415, + "startLine": 3356, "startColumn": 7, - "endLine": 7415, + "endLine": 3356, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54946,15 +53505,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource75", + "logicalId": "Resource34", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 7416, + "startLine": 3357, "startColumn": 7, - "endLine": 7416, + "endLine": 3357, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54969,15 +53528,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource75", + "logicalId": "Resource34", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 7417, + "startLine": 3358, "startColumn": 7, - "endLine": 7417, + "endLine": 3358, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -54992,15 +53551,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource76", + "logicalId": "Resource35", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 7514, + "startLine": 3455, "startColumn": 7, - "endLine": 7514, + "endLine": 3455, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55015,15 +53574,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource76", + "logicalId": "Resource35", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 7515, + "startLine": 3456, "startColumn": 7, - "endLine": 7515, + "endLine": 3456, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55038,15 +53597,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource76", + "logicalId": "Resource35", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 7516, + "startLine": 3457, "startColumn": 7, - "endLine": 7516, + "endLine": 3457, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55061,15 +53620,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource77", + "logicalId": "Resource36", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 7613, + "startLine": 3554, "startColumn": 7, - "endLine": 7613, + "endLine": 3554, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55084,15 +53643,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource77", + "logicalId": "Resource36", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 7614, + "startLine": 3555, "startColumn": 7, - "endLine": 7614, + "endLine": 3555, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55107,15 +53666,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource77", + "logicalId": "Resource36", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 7615, + "startLine": 3556, "startColumn": 7, - "endLine": 7615, + "endLine": 3556, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55130,15 +53689,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource78", + "logicalId": "Resource37", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 7712, + "startLine": 3653, "startColumn": 7, - "endLine": 7712, + "endLine": 3653, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55153,15 +53712,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource78", + "logicalId": "Resource37", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 7713, + "startLine": 3654, "startColumn": 7, - "endLine": 7713, + "endLine": 3654, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55176,15 +53735,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource78", + "logicalId": "Resource37", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 7714, + "startLine": 3655, "startColumn": 7, - "endLine": 7714, + "endLine": 3655, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55199,15 +53758,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource79", + "logicalId": "Resource38", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 7811, + "startLine": 3752, "startColumn": 7, - "endLine": 7811, + "endLine": 3752, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55222,15 +53781,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource79", + "logicalId": "Resource38", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 7812, + "startLine": 3753, "startColumn": 7, - "endLine": 7812, + "endLine": 3753, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55245,15 +53804,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource79", + "logicalId": "Resource38", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 7813, + "startLine": 3754, "startColumn": 7, - "endLine": 7813, + "endLine": 3754, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55268,15 +53827,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource80", + "logicalId": "Resource39", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 7910, + "startLine": 3851, "startColumn": 7, - "endLine": 7910, + "endLine": 3851, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55291,15 +53850,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource80", + "logicalId": "Resource39", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 7911, + "startLine": 3852, "startColumn": 7, - "endLine": 7911, + "endLine": 3852, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55314,15 +53873,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource80", + "logicalId": "Resource39", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 7912, + "startLine": 3853, "startColumn": 7, - "endLine": 7912, + "endLine": 3853, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55337,15 +53896,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource81", + "logicalId": "Resource40", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 8009, + "startLine": 3950, "startColumn": 7, - "endLine": 8009, + "endLine": 3950, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55360,15 +53919,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource81", + "logicalId": "Resource40", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 8010, + "startLine": 3951, "startColumn": 7, - "endLine": 8010, + "endLine": 3951, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55383,15 +53942,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource81", + "logicalId": "Resource40", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 8011, + "startLine": 3952, "startColumn": 7, - "endLine": 8011, + "endLine": 3952, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55406,15 +53965,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource82", + "logicalId": "Resource41", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 8108, + "startLine": 4049, "startColumn": 7, - "endLine": 8108, + "endLine": 4049, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55429,15 +53988,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource82", + "logicalId": "Resource41", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 8109, + "startLine": 4050, "startColumn": 7, - "endLine": 8109, + "endLine": 4050, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55452,15 +54011,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource82", + "logicalId": "Resource41", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 8110, + "startLine": 4051, "startColumn": 7, - "endLine": 8110, + "endLine": 4051, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55475,15 +54034,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource83", + "logicalId": "Resource42", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 8207, + "startLine": 4148, "startColumn": 7, - "endLine": 8207, + "endLine": 4148, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55498,15 +54057,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource83", + "logicalId": "Resource42", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 8208, + "startLine": 4149, "startColumn": 7, - "endLine": 8208, + "endLine": 4149, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55521,15 +54080,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource83", + "logicalId": "Resource42", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 8209, + "startLine": 4150, "startColumn": 7, - "endLine": 8209, + "endLine": 4150, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55544,15 +54103,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource84", + "logicalId": "Resource43", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 8306, + "startLine": 4247, "startColumn": 7, - "endLine": 8306, + "endLine": 4247, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55567,15 +54126,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource84", + "logicalId": "Resource43", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 8307, + "startLine": 4248, "startColumn": 7, - "endLine": 8307, + "endLine": 4248, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55590,15 +54149,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource84", + "logicalId": "Resource43", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 8308, + "startLine": 4249, "startColumn": 7, - "endLine": 8308, + "endLine": 4249, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55613,15 +54172,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource85", + "logicalId": "Resource44", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 8405, + "startLine": 4346, "startColumn": 7, - "endLine": 8405, + "endLine": 4346, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55636,15 +54195,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource85", + "logicalId": "Resource44", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 8406, + "startLine": 4347, "startColumn": 7, - "endLine": 8406, + "endLine": 4347, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55659,15 +54218,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource85", + "logicalId": "Resource44", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 8407, + "startLine": 4348, "startColumn": 7, - "endLine": 8407, + "endLine": 4348, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55682,15 +54241,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource86", + "logicalId": "Resource45", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 8504, + "startLine": 4445, "startColumn": 7, - "endLine": 8504, + "endLine": 4445, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55705,15 +54264,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource86", + "logicalId": "Resource45", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 8505, + "startLine": 4446, "startColumn": 7, - "endLine": 8505, + "endLine": 4446, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55728,15 +54287,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource86", + "logicalId": "Resource45", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 8506, + "startLine": 4447, "startColumn": 7, - "endLine": 8506, + "endLine": 4447, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55751,15 +54310,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource87", + "logicalId": "Resource46", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 8603, + "startLine": 4544, "startColumn": 7, - "endLine": 8603, + "endLine": 4544, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55774,15 +54333,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource87", + "logicalId": "Resource46", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 8604, + "startLine": 4545, "startColumn": 7, - "endLine": 8604, + "endLine": 4545, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55797,15 +54356,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource87", + "logicalId": "Resource46", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 8605, + "startLine": 4546, "startColumn": 7, - "endLine": 8605, + "endLine": 4546, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55820,15 +54379,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource88", + "logicalId": "Resource47", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 8702, + "startLine": 4643, "startColumn": 7, - "endLine": 8702, + "endLine": 4643, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55843,15 +54402,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource88", + "logicalId": "Resource47", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 8703, + "startLine": 4644, "startColumn": 7, - "endLine": 8703, + "endLine": 4644, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55866,15 +54425,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource88", + "logicalId": "Resource47", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 8704, + "startLine": 4645, "startColumn": 7, - "endLine": 8704, + "endLine": 4645, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55889,15 +54448,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource89", + "logicalId": "Resource48", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 8801, + "startLine": 4742, "startColumn": 7, - "endLine": 8801, + "endLine": 4742, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55912,15 +54471,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource89", + "logicalId": "Resource48", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 8802, + "startLine": 4743, "startColumn": 7, - "endLine": 8802, + "endLine": 4743, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55935,15 +54494,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource89", + "logicalId": "Resource48", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 8803, + "startLine": 4744, "startColumn": 7, - "endLine": 8803, + "endLine": 4744, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55958,15 +54517,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource90", + "logicalId": "Resource49", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 8900, + "startLine": 4841, "startColumn": 7, - "endLine": 8900, + "endLine": 4841, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -55981,15 +54540,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource90", + "logicalId": "Resource49", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 8901, + "startLine": 4842, "startColumn": 7, - "endLine": 8901, + "endLine": 4842, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56004,15 +54563,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource90", + "logicalId": "Resource49", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 8902, + "startLine": 4843, "startColumn": 7, - "endLine": 8902, + "endLine": 4843, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56027,15 +54586,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource91", + "logicalId": "Resource50", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 8999, + "startLine": 4940, "startColumn": 7, - "endLine": 8999, + "endLine": 4940, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56050,15 +54609,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource91", + "logicalId": "Resource50", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 9000, + "startLine": 4941, "startColumn": 7, - "endLine": 9000, + "endLine": 4941, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56073,15 +54632,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource91", + "logicalId": "Resource50", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 9001, + "startLine": 4942, "startColumn": 7, - "endLine": 9001, + "endLine": 4942, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56096,15 +54655,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource92", + "logicalId": "Resource51", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 9098, + "startLine": 5039, "startColumn": 7, - "endLine": 9098, + "endLine": 5039, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56119,15 +54678,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource92", + "logicalId": "Resource51", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 9099, + "startLine": 5040, "startColumn": 7, - "endLine": 9099, + "endLine": 5040, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56142,15 +54701,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource92", + "logicalId": "Resource51", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 9100, + "startLine": 5041, "startColumn": 7, - "endLine": 9100, + "endLine": 5041, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56165,15 +54724,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource93", + "logicalId": "Resource52", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 9197, + "startLine": 5138, "startColumn": 7, - "endLine": 9197, + "endLine": 5138, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56188,15 +54747,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource93", + "logicalId": "Resource52", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 9198, + "startLine": 5139, "startColumn": 7, - "endLine": 9198, + "endLine": 5139, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56211,15 +54770,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource93", + "logicalId": "Resource52", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 9199, + "startLine": 5140, "startColumn": 7, - "endLine": 9199, + "endLine": 5140, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56234,15 +54793,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource94", + "logicalId": "Resource53", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 9296, + "startLine": 5237, "startColumn": 7, - "endLine": 9296, + "endLine": 5237, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56257,15 +54816,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource94", + "logicalId": "Resource53", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 9297, + "startLine": 5238, "startColumn": 7, - "endLine": 9297, + "endLine": 5238, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56280,15 +54839,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource94", + "logicalId": "Resource53", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 9298, + "startLine": 5239, "startColumn": 7, - "endLine": 9298, + "endLine": 5239, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56303,15 +54862,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource95", + "logicalId": "Resource54", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 9395, + "startLine": 5336, "startColumn": 7, - "endLine": 9395, + "endLine": 5336, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56326,15 +54885,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource95", + "logicalId": "Resource54", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 9396, + "startLine": 5337, "startColumn": 7, - "endLine": 9396, + "endLine": 5337, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56349,15 +54908,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource95", + "logicalId": "Resource54", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 9397, + "startLine": 5338, "startColumn": 7, - "endLine": 9397, + "endLine": 5338, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56372,15 +54931,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource96", + "logicalId": "Resource55", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 9494, + "startLine": 5435, "startColumn": 7, - "endLine": 9494, + "endLine": 5435, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56395,15 +54954,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource96", + "logicalId": "Resource55", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 9495, + "startLine": 5436, "startColumn": 7, - "endLine": 9495, + "endLine": 5436, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56418,15 +54977,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource96", + "logicalId": "Resource55", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 9496, + "startLine": 5437, "startColumn": 7, - "endLine": 9496, + "endLine": 5437, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56441,15 +55000,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource97", + "logicalId": "Resource56", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 9593, + "startLine": 5534, "startColumn": 7, - "endLine": 9593, + "endLine": 5534, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56464,15 +55023,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource97", + "logicalId": "Resource56", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 9594, + "startLine": 5535, "startColumn": 7, - "endLine": 9594, + "endLine": 5535, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56487,15 +55046,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource97", + "logicalId": "Resource56", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 9595, + "startLine": 5536, "startColumn": 7, - "endLine": 9595, + "endLine": 5536, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56510,15 +55069,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource98", + "logicalId": "Resource57", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 9692, + "startLine": 5633, "startColumn": 7, - "endLine": 9692, + "endLine": 5633, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56533,15 +55092,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource98", + "logicalId": "Resource57", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 9693, + "startLine": 5634, "startColumn": 7, - "endLine": 9693, + "endLine": 5634, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56556,15 +55115,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource98", + "logicalId": "Resource57", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 9694, + "startLine": 5635, "startColumn": 7, - "endLine": 9694, + "endLine": 5635, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56579,15 +55138,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource99", + "logicalId": "Resource58", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 9791, + "startLine": 5732, "startColumn": 7, - "endLine": 9791, + "endLine": 5732, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56602,15 +55161,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource99", + "logicalId": "Resource58", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 9792, + "startLine": 5733, "startColumn": 7, - "endLine": 9792, + "endLine": 5733, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56625,15 +55184,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource99", + "logicalId": "Resource58", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 9793, + "startLine": 5734, "startColumn": 7, - "endLine": 9793, + "endLine": 5734, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56648,15 +55207,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource100", + "logicalId": "Resource59", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 9890, + "startLine": 5831, "startColumn": 7, - "endLine": 9890, + "endLine": 5831, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56671,15 +55230,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource100", + "logicalId": "Resource59", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 9891, + "startLine": 5832, "startColumn": 7, - "endLine": 9891, + "endLine": 5832, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56694,15 +55253,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource100", + "logicalId": "Resource59", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 9892, + "startLine": 5833, "startColumn": 7, - "endLine": 9892, + "endLine": 5833, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56717,15 +55276,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource101", + "logicalId": "Resource60", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 9989, + "startLine": 5930, "startColumn": 7, - "endLine": 9989, + "endLine": 5930, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56740,15 +55299,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource101", + "logicalId": "Resource60", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 9990, + "startLine": 5931, "startColumn": 7, - "endLine": 9990, + "endLine": 5931, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56763,15 +55322,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource101", + "logicalId": "Resource60", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 9991, + "startLine": 5932, "startColumn": 7, - "endLine": 9991, + "endLine": 5932, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56786,15 +55345,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource102", + "logicalId": "Resource61", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 10088, + "startLine": 6029, "startColumn": 7, - "endLine": 10088, + "endLine": 6029, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56809,15 +55368,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource102", + "logicalId": "Resource61", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 10089, + "startLine": 6030, "startColumn": 7, - "endLine": 10089, + "endLine": 6030, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56832,15 +55391,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource102", + "logicalId": "Resource61", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 10090, + "startLine": 6031, "startColumn": 7, - "endLine": 10090, + "endLine": 6031, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56855,15 +55414,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource103", + "logicalId": "Resource62", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 10187, + "startLine": 6128, "startColumn": 7, - "endLine": 10187, + "endLine": 6128, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56878,15 +55437,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource103", + "logicalId": "Resource62", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 10188, + "startLine": 6129, "startColumn": 7, - "endLine": 10188, + "endLine": 6129, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56901,15 +55460,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource103", + "logicalId": "Resource62", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 10189, + "startLine": 6130, "startColumn": 7, - "endLine": 10189, + "endLine": 6130, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56924,15 +55483,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource104", + "logicalId": "Resource63", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 10286, + "startLine": 6227, "startColumn": 7, - "endLine": 10286, + "endLine": 6227, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56947,15 +55506,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource104", + "logicalId": "Resource63", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 10287, + "startLine": 6228, "startColumn": 7, - "endLine": 10287, + "endLine": 6228, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56970,15 +55529,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource104", + "logicalId": "Resource63", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 10288, + "startLine": 6229, "startColumn": 7, - "endLine": 10288, + "endLine": 6229, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -56993,15 +55552,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource105", + "logicalId": "Resource64", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 10385, + "startLine": 6326, "startColumn": 7, - "endLine": 10385, + "endLine": 6326, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57016,15 +55575,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource105", + "logicalId": "Resource64", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 10386, + "startLine": 6327, "startColumn": 7, - "endLine": 10386, + "endLine": 6327, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57039,15 +55598,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource105", + "logicalId": "Resource64", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 10387, + "startLine": 6328, "startColumn": 7, - "endLine": 10387, + "endLine": 6328, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57062,15 +55621,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource106", + "logicalId": "Resource65", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 10484, + "startLine": 6425, "startColumn": 7, - "endLine": 10484, + "endLine": 6425, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57085,15 +55644,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource106", + "logicalId": "Resource65", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 10485, + "startLine": 6426, "startColumn": 7, - "endLine": 10485, + "endLine": 6426, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57108,15 +55667,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource106", + "logicalId": "Resource65", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 10486, + "startLine": 6427, "startColumn": 7, - "endLine": 10486, + "endLine": 6427, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57131,15 +55690,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource107", + "logicalId": "Resource66", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 10583, + "startLine": 6524, "startColumn": 7, - "endLine": 10583, + "endLine": 6524, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57154,15 +55713,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource107", + "logicalId": "Resource66", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 10584, + "startLine": 6525, "startColumn": 7, - "endLine": 10584, + "endLine": 6525, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57177,15 +55736,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource107", + "logicalId": "Resource66", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 10585, + "startLine": 6526, "startColumn": 7, - "endLine": 10585, + "endLine": 6526, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57200,15 +55759,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource108", + "logicalId": "Resource67", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 10682, + "startLine": 6623, "startColumn": 7, - "endLine": 10682, + "endLine": 6623, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57223,15 +55782,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource108", + "logicalId": "Resource67", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 10683, + "startLine": 6624, "startColumn": 7, - "endLine": 10683, + "endLine": 6624, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57246,15 +55805,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource108", + "logicalId": "Resource67", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 10684, + "startLine": 6625, "startColumn": 7, - "endLine": 10684, + "endLine": 6625, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57269,15 +55828,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource109", + "logicalId": "Resource68", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 10781, + "startLine": 6722, "startColumn": 7, - "endLine": 10781, + "endLine": 6722, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57292,15 +55851,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource109", + "logicalId": "Resource68", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 10782, + "startLine": 6723, "startColumn": 7, - "endLine": 10782, + "endLine": 6723, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57315,15 +55874,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource109", + "logicalId": "Resource68", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 10783, + "startLine": 6724, "startColumn": 7, - "endLine": 10783, + "endLine": 6724, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57338,15 +55897,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource110", + "logicalId": "Resource69", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 10880, + "startLine": 6821, "startColumn": 7, - "endLine": 10880, + "endLine": 6821, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57361,15 +55920,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource110", + "logicalId": "Resource69", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 10881, + "startLine": 6822, "startColumn": 7, - "endLine": 10881, + "endLine": 6822, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57384,15 +55943,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource110", + "logicalId": "Resource69", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 10882, + "startLine": 6823, "startColumn": 7, - "endLine": 10882, + "endLine": 6823, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57407,15 +55966,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource111", + "logicalId": "Resource70", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 10979, + "startLine": 6920, "startColumn": 7, - "endLine": 10979, + "endLine": 6920, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57430,15 +55989,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource111", + "logicalId": "Resource70", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 10980, + "startLine": 6921, "startColumn": 7, - "endLine": 10980, + "endLine": 6921, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57453,15 +56012,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource111", + "logicalId": "Resource70", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 10981, + "startLine": 6922, "startColumn": 7, - "endLine": 10981, + "endLine": 6922, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57476,15 +56035,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource112", + "logicalId": "Resource71", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 11078, + "startLine": 7019, "startColumn": 7, - "endLine": 11078, + "endLine": 7019, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57499,15 +56058,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource112", + "logicalId": "Resource71", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 11079, + "startLine": 7020, "startColumn": 7, - "endLine": 11079, + "endLine": 7020, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57522,15 +56081,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource112", + "logicalId": "Resource71", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 11080, + "startLine": 7021, "startColumn": 7, - "endLine": 11080, + "endLine": 7021, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57545,15 +56104,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource113", + "logicalId": "Resource72", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 11177, + "startLine": 7118, "startColumn": 7, - "endLine": 11177, + "endLine": 7118, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57568,15 +56127,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource113", + "logicalId": "Resource72", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 11178, + "startLine": 7119, "startColumn": 7, - "endLine": 11178, + "endLine": 7119, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57591,15 +56150,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource113", + "logicalId": "Resource72", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 11179, + "startLine": 7120, "startColumn": 7, - "endLine": 11179, + "endLine": 7120, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57614,15 +56173,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource114", + "logicalId": "Resource73", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 11276, + "startLine": 7217, "startColumn": 7, - "endLine": 11276, + "endLine": 7217, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57637,15 +56196,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource114", + "logicalId": "Resource73", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 11277, + "startLine": 7218, "startColumn": 7, - "endLine": 11277, + "endLine": 7218, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57660,15 +56219,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource114", + "logicalId": "Resource73", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 11278, + "startLine": 7219, "startColumn": 7, - "endLine": 11278, + "endLine": 7219, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57683,15 +56242,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource115", + "logicalId": "Resource74", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 11375, + "startLine": 7316, "startColumn": 7, - "endLine": 11375, + "endLine": 7316, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57706,15 +56265,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource115", + "logicalId": "Resource74", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 11376, + "startLine": 7317, "startColumn": 7, - "endLine": 11376, + "endLine": 7317, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57729,15 +56288,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource115", + "logicalId": "Resource74", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 11377, + "startLine": 7318, "startColumn": 7, - "endLine": 11377, + "endLine": 7318, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57752,15 +56311,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource116", + "logicalId": "Resource75", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 11474, + "startLine": 7415, "startColumn": 7, - "endLine": 11474, + "endLine": 7415, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57775,15 +56334,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource116", + "logicalId": "Resource75", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 11475, + "startLine": 7416, "startColumn": 7, - "endLine": 11475, + "endLine": 7416, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57798,15 +56357,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource116", + "logicalId": "Resource75", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 11476, + "startLine": 7417, "startColumn": 7, - "endLine": 11476, + "endLine": 7417, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57821,15 +56380,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource117", + "logicalId": "Resource76", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 11573, + "startLine": 7514, "startColumn": 7, - "endLine": 11573, + "endLine": 7514, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57844,15 +56403,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource117", + "logicalId": "Resource76", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 11574, + "startLine": 7515, "startColumn": 7, - "endLine": 11574, + "endLine": 7515, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57867,15 +56426,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource117", + "logicalId": "Resource76", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 11575, + "startLine": 7516, "startColumn": 7, - "endLine": 11575, + "endLine": 7516, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57890,15 +56449,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource118", + "logicalId": "Resource77", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 11672, + "startLine": 7613, "startColumn": 7, - "endLine": 11672, + "endLine": 7613, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57913,15 +56472,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource118", + "logicalId": "Resource77", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 11673, + "startLine": 7614, "startColumn": 7, - "endLine": 11673, + "endLine": 7614, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57936,15 +56495,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource118", + "logicalId": "Resource77", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 11674, + "startLine": 7615, "startColumn": 7, - "endLine": 11674, + "endLine": 7615, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57959,15 +56518,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource119", + "logicalId": "Resource78", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 11771, + "startLine": 7712, "startColumn": 7, - "endLine": 11771, + "endLine": 7712, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -57982,15 +56541,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource119", + "logicalId": "Resource78", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 11772, + "startLine": 7713, "startColumn": 7, - "endLine": 11772, + "endLine": 7713, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58005,15 +56564,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource119", + "logicalId": "Resource78", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 11773, + "startLine": 7714, "startColumn": 7, - "endLine": 11773, + "endLine": 7714, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58028,15 +56587,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource120", + "logicalId": "Resource79", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 11870, + "startLine": 7811, "startColumn": 7, - "endLine": 11870, + "endLine": 7811, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58051,15 +56610,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource120", + "logicalId": "Resource79", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 11871, + "startLine": 7812, "startColumn": 7, - "endLine": 11871, + "endLine": 7812, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58074,15 +56633,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource120", + "logicalId": "Resource79", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 11872, + "startLine": 7813, "startColumn": 7, - "endLine": 11872, + "endLine": 7813, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58097,15 +56656,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource121", + "logicalId": "Resource80", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 11969, + "startLine": 7910, "startColumn": 7, - "endLine": 11969, + "endLine": 7910, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58120,15 +56679,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource121", + "logicalId": "Resource80", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 11970, + "startLine": 7911, "startColumn": 7, - "endLine": 11970, + "endLine": 7911, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58143,15 +56702,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource121", + "logicalId": "Resource80", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 11971, + "startLine": 7912, "startColumn": 7, - "endLine": 11971, + "endLine": 7912, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58166,15 +56725,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource122", + "logicalId": "Resource81", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 12068, + "startLine": 8009, "startColumn": 7, - "endLine": 12068, + "endLine": 8009, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58189,15 +56748,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource122", + "logicalId": "Resource81", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 12069, + "startLine": 8010, "startColumn": 7, - "endLine": 12069, + "endLine": 8010, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58212,15 +56771,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource122", + "logicalId": "Resource81", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 12070, + "startLine": 8011, "startColumn": 7, - "endLine": 12070, + "endLine": 8011, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58235,15 +56794,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource123", + "logicalId": "Resource82", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 12167, + "startLine": 8108, "startColumn": 7, - "endLine": 12167, + "endLine": 8108, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58258,15 +56817,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource123", + "logicalId": "Resource82", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 12168, + "startLine": 8109, "startColumn": 7, - "endLine": 12168, + "endLine": 8109, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58281,15 +56840,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource123", + "logicalId": "Resource82", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 12169, + "startLine": 8110, "startColumn": 7, - "endLine": 12169, + "endLine": 8110, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58304,15 +56863,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource124", + "logicalId": "Resource83", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 12266, + "startLine": 8207, "startColumn": 7, - "endLine": 12266, + "endLine": 8207, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58327,15 +56886,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource124", + "logicalId": "Resource83", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 12267, + "startLine": 8208, "startColumn": 7, - "endLine": 12267, + "endLine": 8208, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58350,15 +56909,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource124", + "logicalId": "Resource83", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 12268, + "startLine": 8209, "startColumn": 7, - "endLine": 12268, + "endLine": 8209, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58373,15 +56932,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource125", + "logicalId": "Resource84", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 12365, + "startLine": 8306, "startColumn": 7, - "endLine": 12365, + "endLine": 8306, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58396,15 +56955,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource125", + "logicalId": "Resource84", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 12366, + "startLine": 8307, "startColumn": 7, - "endLine": 12366, + "endLine": 8307, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58419,15 +56978,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource125", + "logicalId": "Resource84", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 12367, + "startLine": 8308, "startColumn": 7, - "endLine": 12367, + "endLine": 8308, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58442,15 +57001,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource126", + "logicalId": "Resource85", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 12464, + "startLine": 8405, "startColumn": 7, - "endLine": 12464, + "endLine": 8405, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58465,15 +57024,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource126", + "logicalId": "Resource85", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 12465, + "startLine": 8406, "startColumn": 7, - "endLine": 12465, + "endLine": 8406, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58488,15 +57047,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource126", + "logicalId": "Resource85", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 12466, + "startLine": 8407, "startColumn": 7, - "endLine": 12466, + "endLine": 8407, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58511,15 +57070,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource127", + "logicalId": "Resource86", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 12563, + "startLine": 8504, "startColumn": 7, - "endLine": 12563, + "endLine": 8504, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58534,15 +57093,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource127", + "logicalId": "Resource86", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 12564, + "startLine": 8505, "startColumn": 7, - "endLine": 12564, + "endLine": 8505, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58557,15 +57116,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource127", + "logicalId": "Resource86", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 12565, + "startLine": 8506, "startColumn": 7, - "endLine": 12565, + "endLine": 8506, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58580,15 +57139,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource128", + "logicalId": "Resource87", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 12662, + "startLine": 8603, "startColumn": 7, - "endLine": 12662, + "endLine": 8603, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58603,15 +57162,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource128", + "logicalId": "Resource87", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 12663, + "startLine": 8604, "startColumn": 7, - "endLine": 12663, + "endLine": 8604, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58626,15 +57185,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource128", + "logicalId": "Resource87", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 12664, + "startLine": 8605, "startColumn": 7, - "endLine": 12664, + "endLine": 8605, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58649,15 +57208,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource129", + "logicalId": "Resource88", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 12761, + "startLine": 8702, "startColumn": 7, - "endLine": 12761, + "endLine": 8702, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58672,15 +57231,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource129", + "logicalId": "Resource88", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 12762, + "startLine": 8703, "startColumn": 7, - "endLine": 12762, + "endLine": 8703, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58695,15 +57254,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource129", + "logicalId": "Resource88", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 12763, + "startLine": 8704, "startColumn": 7, - "endLine": 12763, + "endLine": 8704, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58718,15 +57277,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource130", + "logicalId": "Resource89", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 12860, + "startLine": 8801, "startColumn": 7, - "endLine": 12860, + "endLine": 8801, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58741,15 +57300,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource130", + "logicalId": "Resource89", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 12861, + "startLine": 8802, "startColumn": 7, - "endLine": 12861, + "endLine": 8802, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58764,15 +57323,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource130", + "logicalId": "Resource89", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 12862, + "startLine": 8803, "startColumn": 7, - "endLine": 12862, + "endLine": 8803, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58787,15 +57346,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource131", + "logicalId": "Resource90", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 12959, + "startLine": 8900, "startColumn": 7, - "endLine": 12959, + "endLine": 8900, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58810,15 +57369,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource131", + "logicalId": "Resource90", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 12960, + "startLine": 8901, "startColumn": 7, - "endLine": 12960, + "endLine": 8901, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58833,15 +57392,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource131", + "logicalId": "Resource90", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 12961, + "startLine": 8902, "startColumn": 7, - "endLine": 12961, + "endLine": 8902, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58856,15 +57415,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource132", + "logicalId": "Resource91", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 13058, + "startLine": 8999, "startColumn": 7, - "endLine": 13058, + "endLine": 8999, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58879,15 +57438,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource132", + "logicalId": "Resource91", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 13059, + "startLine": 9000, "startColumn": 7, - "endLine": 13059, + "endLine": 9000, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58902,15 +57461,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource132", + "logicalId": "Resource91", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 13060, + "startLine": 9001, "startColumn": 7, - "endLine": 13060, + "endLine": 9001, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58925,15 +57484,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource133", + "logicalId": "Resource92", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 13157, + "startLine": 9098, "startColumn": 7, - "endLine": 13157, + "endLine": 9098, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58948,15 +57507,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource133", + "logicalId": "Resource92", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 13158, + "startLine": 9099, "startColumn": 7, - "endLine": 13158, + "endLine": 9099, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58971,15 +57530,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource133", + "logicalId": "Resource92", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 13159, + "startLine": 9100, "startColumn": 7, - "endLine": 13159, + "endLine": 9100, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -58994,15 +57553,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource134", + "logicalId": "Resource93", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 13256, + "startLine": 9197, "startColumn": 7, - "endLine": 13256, + "endLine": 9197, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59017,15 +57576,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource134", + "logicalId": "Resource93", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 13257, + "startLine": 9198, "startColumn": 7, - "endLine": 13257, + "endLine": 9198, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59040,15 +57599,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource134", + "logicalId": "Resource93", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 13258, + "startLine": 9199, "startColumn": 7, - "endLine": 13258, + "endLine": 9199, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59063,15 +57622,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource135", + "logicalId": "Resource94", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 13355, + "startLine": 9296, "startColumn": 7, - "endLine": 13355, + "endLine": 9296, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59086,15 +57645,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource135", + "logicalId": "Resource94", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 13356, + "startLine": 9297, "startColumn": 7, - "endLine": 13356, + "endLine": 9297, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59109,15 +57668,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource135", + "logicalId": "Resource94", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 13357, + "startLine": 9298, "startColumn": 7, - "endLine": 13357, + "endLine": 9298, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59132,15 +57691,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource136", + "logicalId": "Resource95", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 13454, + "startLine": 9395, "startColumn": 7, - "endLine": 13454, + "endLine": 9395, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59155,15 +57714,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource136", + "logicalId": "Resource95", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 13455, + "startLine": 9396, "startColumn": 7, - "endLine": 13455, + "endLine": 9396, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59178,15 +57737,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource136", + "logicalId": "Resource95", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 13456, + "startLine": 9397, "startColumn": 7, - "endLine": 13456, + "endLine": 9397, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59201,15 +57760,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource137", + "logicalId": "Resource96", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 13553, + "startLine": 9494, "startColumn": 7, - "endLine": 13553, + "endLine": 9494, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59224,15 +57783,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource137", + "logicalId": "Resource96", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 13554, + "startLine": 9495, "startColumn": 7, - "endLine": 13554, + "endLine": 9495, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59247,15 +57806,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource137", + "logicalId": "Resource96", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 13555, + "startLine": 9496, "startColumn": 7, - "endLine": 13555, + "endLine": 9496, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59270,15 +57829,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource138", + "logicalId": "Resource97", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 13652, + "startLine": 9593, "startColumn": 7, - "endLine": 13652, + "endLine": 9593, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59293,15 +57852,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource138", + "logicalId": "Resource97", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 13653, + "startLine": 9594, "startColumn": 7, - "endLine": 13653, + "endLine": 9594, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59316,15 +57875,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource138", + "logicalId": "Resource97", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 13654, + "startLine": 9595, "startColumn": 7, - "endLine": 13654, + "endLine": 9595, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59339,15 +57898,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource139", + "logicalId": "Resource98", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 13751, + "startLine": 9692, "startColumn": 7, - "endLine": 13751, + "endLine": 9692, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59362,15 +57921,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource139", + "logicalId": "Resource98", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 13752, + "startLine": 9693, "startColumn": 7, - "endLine": 13752, + "endLine": 9693, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59385,15 +57944,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource139", + "logicalId": "Resource98", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 13753, + "startLine": 9694, "startColumn": 7, - "endLine": 13753, + "endLine": 9694, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59408,15 +57967,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource140", + "logicalId": "Resource99", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 13850, + "startLine": 9791, "startColumn": 7, - "endLine": 13850, + "endLine": 9791, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59431,15 +57990,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource140", + "logicalId": "Resource99", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 13851, + "startLine": 9792, "startColumn": 7, - "endLine": 13851, + "endLine": 9792, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59454,15 +58013,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource140", + "logicalId": "Resource99", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 13852, + "startLine": 9793, "startColumn": 7, - "endLine": 13852, + "endLine": 9793, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59477,15 +58036,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource141", + "logicalId": "Resource100", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 13949, + "startLine": 9890, "startColumn": 7, - "endLine": 13949, + "endLine": 9890, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59500,15 +58059,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource141", + "logicalId": "Resource100", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 13950, + "startLine": 9891, "startColumn": 7, - "endLine": 13950, + "endLine": 9891, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59523,15 +58082,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource141", + "logicalId": "Resource100", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 13951, + "startLine": 9892, "startColumn": 7, - "endLine": 13951, + "endLine": 9892, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59546,15 +58105,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource142", + "logicalId": "Resource101", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 14048, + "startLine": 9989, "startColumn": 7, - "endLine": 14048, + "endLine": 9989, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59569,15 +58128,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource142", + "logicalId": "Resource101", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 14049, + "startLine": 9990, "startColumn": 7, - "endLine": 14049, + "endLine": 9990, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59592,15 +58151,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource142", + "logicalId": "Resource101", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 14050, + "startLine": 9991, "startColumn": 7, - "endLine": 14050, + "endLine": 9991, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59615,15 +58174,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource143", + "logicalId": "Resource102", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 14147, + "startLine": 10088, "startColumn": 7, - "endLine": 14147, + "endLine": 10088, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59638,15 +58197,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource143", + "logicalId": "Resource102", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 14148, + "startLine": 10089, "startColumn": 7, - "endLine": 14148, + "endLine": 10089, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59661,15 +58220,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource143", + "logicalId": "Resource102", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 14149, + "startLine": 10090, "startColumn": 7, - "endLine": 14149, + "endLine": 10090, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59684,15 +58243,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource144", + "logicalId": "Resource103", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 14246, + "startLine": 10187, "startColumn": 7, - "endLine": 14246, + "endLine": 10187, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59707,15 +58266,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource144", + "logicalId": "Resource103", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 14247, + "startLine": 10188, "startColumn": 7, - "endLine": 14247, + "endLine": 10188, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59730,15 +58289,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource144", + "logicalId": "Resource103", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 14248, + "startLine": 10189, "startColumn": 7, - "endLine": 14248, + "endLine": 10189, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59753,15 +58312,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource145", + "logicalId": "Resource104", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 14345, + "startLine": 10286, "startColumn": 7, - "endLine": 14345, + "endLine": 10286, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59776,15 +58335,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource145", + "logicalId": "Resource104", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 14346, + "startLine": 10287, "startColumn": 7, - "endLine": 14346, + "endLine": 10287, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59799,15 +58358,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource145", + "logicalId": "Resource104", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 14347, + "startLine": 10288, "startColumn": 7, - "endLine": 14347, + "endLine": 10288, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59822,15 +58381,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource146", + "logicalId": "Resource105", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 14444, + "startLine": 10385, "startColumn": 7, - "endLine": 14444, + "endLine": 10385, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59845,15 +58404,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource146", + "logicalId": "Resource105", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 14445, + "startLine": 10386, "startColumn": 7, - "endLine": 14445, + "endLine": 10386, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59868,15 +58427,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource146", + "logicalId": "Resource105", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 14446, + "startLine": 10387, "startColumn": 7, - "endLine": 14446, + "endLine": 10387, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59891,15 +58450,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource147", + "logicalId": "Resource106", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 14543, + "startLine": 10484, "startColumn": 7, - "endLine": 14543, + "endLine": 10484, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59914,15 +58473,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource147", + "logicalId": "Resource106", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 14544, + "startLine": 10485, "startColumn": 7, - "endLine": 14544, + "endLine": 10485, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59937,15 +58496,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource147", + "logicalId": "Resource106", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 14545, + "startLine": 10486, "startColumn": 7, - "endLine": 14545, + "endLine": 10486, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59960,15 +58519,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource148", + "logicalId": "Resource107", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 14642, + "startLine": 10583, "startColumn": 7, - "endLine": 14642, + "endLine": 10583, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -59983,15 +58542,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource148", + "logicalId": "Resource107", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 14643, + "startLine": 10584, "startColumn": 7, - "endLine": 14643, + "endLine": 10584, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60006,15 +58565,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource148", + "logicalId": "Resource107", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 14644, + "startLine": 10585, "startColumn": 7, - "endLine": 14644, + "endLine": 10585, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60029,15 +58588,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource149", + "logicalId": "Resource108", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 14741, + "startLine": 10682, "startColumn": 7, - "endLine": 14741, + "endLine": 10682, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60052,15 +58611,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource149", + "logicalId": "Resource108", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 14742, + "startLine": 10683, "startColumn": 7, - "endLine": 14742, + "endLine": 10683, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60075,15 +58634,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource149", + "logicalId": "Resource108", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 14743, + "startLine": 10684, "startColumn": 7, - "endLine": 14743, + "endLine": 10684, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60098,15 +58657,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource150", + "logicalId": "Resource109", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 14840, + "startLine": 10781, "startColumn": 7, - "endLine": 14840, + "endLine": 10781, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60121,15 +58680,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource150", + "logicalId": "Resource109", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 14841, + "startLine": 10782, "startColumn": 7, - "endLine": 14841, + "endLine": 10782, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60144,15 +58703,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource150", + "logicalId": "Resource109", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 14842, + "startLine": 10783, "startColumn": 7, - "endLine": 14842, + "endLine": 10783, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60167,15 +58726,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource151", + "logicalId": "Resource110", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 14939, + "startLine": 10880, "startColumn": 7, - "endLine": 14939, + "endLine": 10880, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60190,15 +58749,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource151", + "logicalId": "Resource110", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 14940, + "startLine": 10881, "startColumn": 7, - "endLine": 14940, + "endLine": 10881, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60213,15 +58772,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource151", + "logicalId": "Resource110", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 14941, + "startLine": 10882, "startColumn": 7, - "endLine": 14941, + "endLine": 10882, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60236,15 +58795,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource152", + "logicalId": "Resource111", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 15038, + "startLine": 10979, "startColumn": 7, - "endLine": 15038, + "endLine": 10979, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60259,15 +58818,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource152", + "logicalId": "Resource111", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 15039, + "startLine": 10980, "startColumn": 7, - "endLine": 15039, + "endLine": 10980, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60282,15 +58841,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource152", + "logicalId": "Resource111", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 15040, + "startLine": 10981, "startColumn": 7, - "endLine": 15040, + "endLine": 10981, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60305,15 +58864,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource153", + "logicalId": "Resource112", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 15137, + "startLine": 11078, "startColumn": 7, - "endLine": 15137, + "endLine": 11078, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60328,15 +58887,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource153", + "logicalId": "Resource112", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 15138, + "startLine": 11079, "startColumn": 7, - "endLine": 15138, + "endLine": 11079, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60351,15 +58910,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource153", + "logicalId": "Resource112", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 15139, + "startLine": 11080, "startColumn": 7, - "endLine": 15139, + "endLine": 11080, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60374,15 +58933,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource154", + "logicalId": "Resource113", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 15236, + "startLine": 11177, "startColumn": 7, - "endLine": 15236, + "endLine": 11177, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60397,15 +58956,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource154", + "logicalId": "Resource113", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 15237, + "startLine": 11178, "startColumn": 7, - "endLine": 15237, + "endLine": 11178, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60420,15 +58979,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource154", + "logicalId": "Resource113", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 15238, + "startLine": 11179, "startColumn": 7, - "endLine": 15238, + "endLine": 11179, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60443,15 +59002,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource155", + "logicalId": "Resource114", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 15335, + "startLine": 11276, "startColumn": 7, - "endLine": 15335, + "endLine": 11276, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60466,15 +59025,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource155", + "logicalId": "Resource114", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 15336, + "startLine": 11277, "startColumn": 7, - "endLine": 15336, + "endLine": 11277, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60489,15 +59048,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource155", + "logicalId": "Resource114", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 15337, + "startLine": 11278, "startColumn": 7, - "endLine": 15337, + "endLine": 11278, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60512,15 +59071,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource156", + "logicalId": "Resource115", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 15434, + "startLine": 11375, "startColumn": 7, - "endLine": 15434, + "endLine": 11375, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60535,15 +59094,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource156", + "logicalId": "Resource115", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 15435, + "startLine": 11376, "startColumn": 7, - "endLine": 15435, + "endLine": 11376, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60558,15 +59117,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource156", + "logicalId": "Resource115", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 15436, + "startLine": 11377, "startColumn": 7, - "endLine": 15436, + "endLine": 11377, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60581,15 +59140,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource157", + "logicalId": "Resource116", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 15533, + "startLine": 11474, "startColumn": 7, - "endLine": 15533, + "endLine": 11474, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60604,15 +59163,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource157", + "logicalId": "Resource116", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 15534, + "startLine": 11475, "startColumn": 7, - "endLine": 15534, + "endLine": 11475, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60627,15 +59186,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource157", + "logicalId": "Resource116", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 15535, + "startLine": 11476, "startColumn": 7, - "endLine": 15535, + "endLine": 11476, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60650,15 +59209,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource158", + "logicalId": "Resource117", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 15632, + "startLine": 11573, "startColumn": 7, - "endLine": 15632, + "endLine": 11573, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60673,15 +59232,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource158", + "logicalId": "Resource117", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 15633, + "startLine": 11574, "startColumn": 7, - "endLine": 15633, + "endLine": 11574, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60696,15 +59255,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource158", + "logicalId": "Resource117", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 15634, + "startLine": 11575, "startColumn": 7, - "endLine": 15634, + "endLine": 11575, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60719,15 +59278,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource159", + "logicalId": "Resource118", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 15731, + "startLine": 11672, "startColumn": 7, - "endLine": 15731, + "endLine": 11672, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60742,15 +59301,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource159", + "logicalId": "Resource118", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 15732, + "startLine": 11673, "startColumn": 7, - "endLine": 15732, + "endLine": 11673, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60765,15 +59324,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource159", + "logicalId": "Resource118", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 15733, + "startLine": 11674, "startColumn": 7, - "endLine": 15733, + "endLine": 11674, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60788,15 +59347,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource160", + "logicalId": "Resource119", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 15830, + "startLine": 11771, "startColumn": 7, - "endLine": 15830, + "endLine": 11771, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60811,15 +59370,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource160", + "logicalId": "Resource119", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 15831, + "startLine": 11772, "startColumn": 7, - "endLine": 15831, + "endLine": 11772, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60834,15 +59393,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource160", + "logicalId": "Resource119", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 15832, + "startLine": 11773, "startColumn": 7, - "endLine": 15832, + "endLine": 11773, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60857,15 +59416,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource161", + "logicalId": "Resource120", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 15929, + "startLine": 11870, "startColumn": 7, - "endLine": 15929, + "endLine": 11870, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60880,15 +59439,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource161", + "logicalId": "Resource120", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 15930, + "startLine": 11871, "startColumn": 7, - "endLine": 15930, + "endLine": 11871, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60903,15 +59462,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource161", + "logicalId": "Resource120", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 15931, + "startLine": 11872, "startColumn": 7, - "endLine": 15931, + "endLine": 11872, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60926,15 +59485,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource162", + "logicalId": "Resource121", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 16028, + "startLine": 11969, "startColumn": 7, - "endLine": 16028, + "endLine": 11969, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60949,15 +59508,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource162", + "logicalId": "Resource121", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 16029, + "startLine": 11970, "startColumn": 7, - "endLine": 16029, + "endLine": 11970, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60972,15 +59531,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource162", + "logicalId": "Resource121", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 16030, + "startLine": 11971, "startColumn": 7, - "endLine": 16030, + "endLine": 11971, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -60995,15 +59554,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource163", + "logicalId": "Resource122", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 16127, + "startLine": 12068, "startColumn": 7, - "endLine": 16127, + "endLine": 12068, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61018,15 +59577,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource163", + "logicalId": "Resource122", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 16128, + "startLine": 12069, "startColumn": 7, - "endLine": 16128, + "endLine": 12069, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61041,15 +59600,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource163", + "logicalId": "Resource122", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 16129, + "startLine": 12070, "startColumn": 7, - "endLine": 16129, + "endLine": 12070, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61064,15 +59623,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource164", + "logicalId": "Resource123", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 16226, + "startLine": 12167, "startColumn": 7, - "endLine": 16226, + "endLine": 12167, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61087,15 +59646,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource164", + "logicalId": "Resource123", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 16227, + "startLine": 12168, "startColumn": 7, - "endLine": 16227, + "endLine": 12168, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61110,15 +59669,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource164", + "logicalId": "Resource123", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 16228, + "startLine": 12169, "startColumn": 7, - "endLine": 16228, + "endLine": 12169, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61133,15 +59692,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource165", + "logicalId": "Resource124", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 16325, + "startLine": 12266, "startColumn": 7, - "endLine": 16325, + "endLine": 12266, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61156,15 +59715,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource165", + "logicalId": "Resource124", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 16326, + "startLine": 12267, "startColumn": 7, - "endLine": 16326, + "endLine": 12267, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61179,15 +59738,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource165", + "logicalId": "Resource124", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 16327, + "startLine": 12268, "startColumn": 7, - "endLine": 16327, + "endLine": 12268, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61202,15 +59761,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource166", + "logicalId": "Resource125", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 16424, + "startLine": 12365, "startColumn": 7, - "endLine": 16424, + "endLine": 12365, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61225,15 +59784,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource166", + "logicalId": "Resource125", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 16425, + "startLine": 12366, "startColumn": 7, - "endLine": 16425, + "endLine": 12366, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61248,15 +59807,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource166", + "logicalId": "Resource125", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 16426, + "startLine": 12367, "startColumn": 7, - "endLine": 16426, + "endLine": 12367, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61271,15 +59830,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource167", + "logicalId": "Resource126", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 16523, + "startLine": 12464, "startColumn": 7, - "endLine": 16523, + "endLine": 12464, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61294,15 +59853,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource167", + "logicalId": "Resource126", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 16524, + "startLine": 12465, "startColumn": 7, - "endLine": 16524, + "endLine": 12465, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61317,15 +59876,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource167", + "logicalId": "Resource126", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 16525, + "startLine": 12466, "startColumn": 7, - "endLine": 16525, + "endLine": 12466, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61340,15 +59899,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource168", + "logicalId": "Resource127", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 16622, + "startLine": 12563, "startColumn": 7, - "endLine": 16622, + "endLine": 12563, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61363,15 +59922,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource168", + "logicalId": "Resource127", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 16623, + "startLine": 12564, "startColumn": 7, - "endLine": 16623, + "endLine": 12564, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61386,15 +59945,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource168", + "logicalId": "Resource127", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 16624, + "startLine": 12565, "startColumn": 7, - "endLine": 16624, + "endLine": 12565, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61409,15 +59968,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource169", + "logicalId": "Resource128", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 16721, + "startLine": 12662, "startColumn": 7, - "endLine": 16721, + "endLine": 12662, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61432,15 +59991,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource169", + "logicalId": "Resource128", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 16722, + "startLine": 12663, "startColumn": 7, - "endLine": 16722, + "endLine": 12663, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61455,15 +60014,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource169", + "logicalId": "Resource128", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 16723, + "startLine": 12664, "startColumn": 7, - "endLine": 16723, + "endLine": 12664, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61478,15 +60037,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource170", + "logicalId": "Resource129", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 16820, + "startLine": 12761, "startColumn": 7, - "endLine": 16820, + "endLine": 12761, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61501,15 +60060,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource170", + "logicalId": "Resource129", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 16821, + "startLine": 12762, "startColumn": 7, - "endLine": 16821, + "endLine": 12762, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61524,15 +60083,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource170", + "logicalId": "Resource129", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 16822, + "startLine": 12763, "startColumn": 7, - "endLine": 16822, + "endLine": 12763, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61547,15 +60106,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource171", + "logicalId": "Resource130", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 16919, + "startLine": 12860, "startColumn": 7, - "endLine": 16919, + "endLine": 12860, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61570,15 +60129,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource171", + "logicalId": "Resource130", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 16920, + "startLine": 12861, "startColumn": 7, - "endLine": 16920, + "endLine": 12861, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61593,15 +60152,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource171", + "logicalId": "Resource130", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 16921, + "startLine": 12862, "startColumn": 7, - "endLine": 16921, + "endLine": 12862, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61616,15 +60175,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource172", + "logicalId": "Resource131", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 17018, + "startLine": 12959, "startColumn": 7, - "endLine": 17018, + "endLine": 12959, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61639,15 +60198,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource172", + "logicalId": "Resource131", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 17019, + "startLine": 12960, "startColumn": 7, - "endLine": 17019, + "endLine": 12960, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61662,15 +60221,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource172", + "logicalId": "Resource131", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 17020, + "startLine": 12961, "startColumn": 7, - "endLine": 17020, + "endLine": 12961, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61685,15 +60244,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource173", + "logicalId": "Resource132", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 17117, + "startLine": 13058, "startColumn": 7, - "endLine": 17117, + "endLine": 13058, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61708,15 +60267,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource173", + "logicalId": "Resource132", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 17118, + "startLine": 13059, "startColumn": 7, - "endLine": 17118, + "endLine": 13059, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61731,15 +60290,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource173", + "logicalId": "Resource132", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 17119, + "startLine": 13060, "startColumn": 7, - "endLine": 17119, + "endLine": 13060, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61754,15 +60313,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource174", + "logicalId": "Resource133", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 17216, + "startLine": 13157, "startColumn": 7, - "endLine": 17216, + "endLine": 13157, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61777,15 +60336,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource174", + "logicalId": "Resource133", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 17217, + "startLine": 13158, "startColumn": 7, - "endLine": 17217, + "endLine": 13158, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61800,15 +60359,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource174", + "logicalId": "Resource133", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 17218, + "startLine": 13159, "startColumn": 7, - "endLine": 17218, + "endLine": 13159, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61823,15 +60382,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource175", + "logicalId": "Resource134", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 17315, + "startLine": 13256, "startColumn": 7, - "endLine": 17315, + "endLine": 13256, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61846,15 +60405,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource175", + "logicalId": "Resource134", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 17316, + "startLine": 13257, "startColumn": 7, - "endLine": 17316, + "endLine": 13257, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61869,15 +60428,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource175", + "logicalId": "Resource134", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 17317, + "startLine": 13258, "startColumn": 7, - "endLine": 17317, + "endLine": 13258, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61892,15 +60451,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource176", + "logicalId": "Resource135", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 17414, + "startLine": 13355, "startColumn": 7, - "endLine": 17414, + "endLine": 13355, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61915,15 +60474,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource176", + "logicalId": "Resource135", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 17415, + "startLine": 13356, "startColumn": 7, - "endLine": 17415, + "endLine": 13356, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61938,15 +60497,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource176", + "logicalId": "Resource135", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 17416, + "startLine": 13357, "startColumn": 7, - "endLine": 17416, + "endLine": 13357, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61961,15 +60520,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource177", + "logicalId": "Resource136", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 17513, + "startLine": 13454, "startColumn": 7, - "endLine": 17513, + "endLine": 13454, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -61984,15 +60543,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource177", + "logicalId": "Resource136", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 17514, + "startLine": 13455, "startColumn": 7, - "endLine": 17514, + "endLine": 13455, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62007,15 +60566,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource177", + "logicalId": "Resource136", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 17515, + "startLine": 13456, "startColumn": 7, - "endLine": 17515, + "endLine": 13456, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62030,15 +60589,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource178", + "logicalId": "Resource137", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 17612, + "startLine": 13553, "startColumn": 7, - "endLine": 17612, + "endLine": 13553, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62053,15 +60612,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource178", + "logicalId": "Resource137", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 17613, + "startLine": 13554, "startColumn": 7, - "endLine": 17613, + "endLine": 13554, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62076,15 +60635,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource178", + "logicalId": "Resource137", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 17614, + "startLine": 13555, "startColumn": 7, - "endLine": 17614, + "endLine": 13555, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62099,15 +60658,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource179", + "logicalId": "Resource138", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 17711, + "startLine": 13652, "startColumn": 7, - "endLine": 17711, + "endLine": 13652, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62122,15 +60681,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource179", + "logicalId": "Resource138", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 17712, + "startLine": 13653, "startColumn": 7, - "endLine": 17712, + "endLine": 13653, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62145,15 +60704,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource179", + "logicalId": "Resource138", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 17713, + "startLine": 13654, "startColumn": 7, - "endLine": 17713, + "endLine": 13654, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62168,15 +60727,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource180", + "logicalId": "Resource139", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 17810, + "startLine": 13751, "startColumn": 7, - "endLine": 17810, + "endLine": 13751, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62191,15 +60750,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource180", + "logicalId": "Resource139", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 17811, + "startLine": 13752, "startColumn": 7, - "endLine": 17811, + "endLine": 13752, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62214,15 +60773,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource180", + "logicalId": "Resource139", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 17812, + "startLine": 13753, "startColumn": 7, - "endLine": 17812, + "endLine": 13753, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62237,15 +60796,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource181", + "logicalId": "Resource140", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 17909, + "startLine": 13850, "startColumn": 7, - "endLine": 17909, + "endLine": 13850, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62260,15 +60819,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource181", + "logicalId": "Resource140", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 17910, + "startLine": 13851, "startColumn": 7, - "endLine": 17910, + "endLine": 13851, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62283,15 +60842,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource181", + "logicalId": "Resource140", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 17911, + "startLine": 13852, "startColumn": 7, - "endLine": 17911, + "endLine": 13852, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62306,15 +60865,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource182", + "logicalId": "Resource141", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 18008, + "startLine": 13949, "startColumn": 7, - "endLine": 18008, + "endLine": 13949, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62329,15 +60888,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource182", + "logicalId": "Resource141", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 18009, + "startLine": 13950, "startColumn": 7, - "endLine": 18009, + "endLine": 13950, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62352,15 +60911,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource182", + "logicalId": "Resource141", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 18010, + "startLine": 13951, "startColumn": 7, - "endLine": 18010, + "endLine": 13951, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62375,15 +60934,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource183", + "logicalId": "Resource142", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 18107, + "startLine": 14048, "startColumn": 7, - "endLine": 18107, + "endLine": 14048, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62398,15 +60957,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource183", + "logicalId": "Resource142", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 18108, + "startLine": 14049, "startColumn": 7, - "endLine": 18108, + "endLine": 14049, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62421,15 +60980,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource183", + "logicalId": "Resource142", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 18109, + "startLine": 14050, "startColumn": 7, - "endLine": 18109, + "endLine": 14050, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62444,15 +61003,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource184", + "logicalId": "Resource143", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 18206, + "startLine": 14147, "startColumn": 7, - "endLine": 18206, + "endLine": 14147, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62467,15 +61026,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource184", + "logicalId": "Resource143", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 18207, + "startLine": 14148, "startColumn": 7, - "endLine": 18207, + "endLine": 14148, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62490,15 +61049,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource184", + "logicalId": "Resource143", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 18208, + "startLine": 14149, "startColumn": 7, - "endLine": 18208, + "endLine": 14149, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62513,15 +61072,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource185", + "logicalId": "Resource144", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 18305, + "startLine": 14246, "startColumn": 7, - "endLine": 18305, + "endLine": 14246, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62536,15 +61095,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource185", + "logicalId": "Resource144", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 18306, + "startLine": 14247, "startColumn": 7, - "endLine": 18306, + "endLine": 14247, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62559,15 +61118,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource185", + "logicalId": "Resource144", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 18307, + "startLine": 14248, "startColumn": 7, - "endLine": 18307, + "endLine": 14248, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62582,15 +61141,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource186", + "logicalId": "Resource145", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 18404, + "startLine": 14345, "startColumn": 7, - "endLine": 18404, + "endLine": 14345, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62605,15 +61164,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource186", + "logicalId": "Resource145", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 18405, + "startLine": 14346, "startColumn": 7, - "endLine": 18405, + "endLine": 14346, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62628,15 +61187,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource186", + "logicalId": "Resource145", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 18406, + "startLine": 14347, "startColumn": 7, - "endLine": 18406, + "endLine": 14347, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62651,15 +61210,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource187", + "logicalId": "Resource146", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 18503, + "startLine": 14444, "startColumn": 7, - "endLine": 18503, + "endLine": 14444, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62674,15 +61233,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource187", + "logicalId": "Resource146", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 18504, + "startLine": 14445, "startColumn": 7, - "endLine": 18504, + "endLine": 14445, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62697,15 +61256,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource187", + "logicalId": "Resource146", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 18505, + "startLine": 14446, "startColumn": 7, - "endLine": 18505, + "endLine": 14446, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62720,15 +61279,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource188", + "logicalId": "Resource147", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 18602, + "startLine": 14543, "startColumn": 7, - "endLine": 18602, + "endLine": 14543, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62743,15 +61302,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource188", + "logicalId": "Resource147", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 18603, + "startLine": 14544, "startColumn": 7, - "endLine": 18603, + "endLine": 14544, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62766,15 +61325,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource188", + "logicalId": "Resource147", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 18604, + "startLine": 14545, "startColumn": 7, - "endLine": 18604, + "endLine": 14545, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62789,15 +61348,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource189", + "logicalId": "Resource148", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 18701, + "startLine": 14642, "startColumn": 7, - "endLine": 18701, + "endLine": 14642, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62812,15 +61371,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource189", + "logicalId": "Resource148", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 18702, + "startLine": 14643, "startColumn": 7, - "endLine": 18702, + "endLine": 14643, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62835,15 +61394,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource189", + "logicalId": "Resource148", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 18703, + "startLine": 14644, "startColumn": 7, - "endLine": 18703, + "endLine": 14644, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62858,15 +61417,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource190", + "logicalId": "Resource149", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 18800, + "startLine": 14741, "startColumn": 7, - "endLine": 18800, + "endLine": 14741, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62881,15 +61440,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource190", + "logicalId": "Resource149", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 18801, + "startLine": 14742, "startColumn": 7, - "endLine": 18801, + "endLine": 14742, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62904,15 +61463,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource190", + "logicalId": "Resource149", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 18802, + "startLine": 14743, "startColumn": 7, - "endLine": 18802, + "endLine": 14743, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62927,15 +61486,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource191", + "logicalId": "Resource150", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 18899, + "startLine": 14840, "startColumn": 7, - "endLine": 18899, + "endLine": 14840, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62950,15 +61509,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource191", + "logicalId": "Resource150", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 18900, + "startLine": 14841, "startColumn": 7, - "endLine": 18900, + "endLine": 14841, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62973,15 +61532,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource191", + "logicalId": "Resource150", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 18901, + "startLine": 14842, "startColumn": 7, - "endLine": 18901, + "endLine": 14842, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -62996,15 +61555,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource192", + "logicalId": "Resource151", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 18998, + "startLine": 14939, "startColumn": 7, - "endLine": 18998, + "endLine": 14939, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63019,15 +61578,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource192", + "logicalId": "Resource151", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 18999, + "startLine": 14940, "startColumn": 7, - "endLine": 18999, + "endLine": 14940, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63042,15 +61601,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource192", + "logicalId": "Resource151", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 19000, + "startLine": 14941, "startColumn": 7, - "endLine": 19000, + "endLine": 14941, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63065,15 +61624,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource193", + "logicalId": "Resource152", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 19097, + "startLine": 15038, "startColumn": 7, - "endLine": 19097, + "endLine": 15038, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63088,15 +61647,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource193", + "logicalId": "Resource152", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 19098, + "startLine": 15039, "startColumn": 7, - "endLine": 19098, + "endLine": 15039, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63111,15 +61670,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource193", + "logicalId": "Resource152", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 19099, + "startLine": 15040, "startColumn": 7, - "endLine": 19099, + "endLine": 15040, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63134,15 +61693,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource194", + "logicalId": "Resource153", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 19196, + "startLine": 15137, "startColumn": 7, - "endLine": 19196, + "endLine": 15137, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63157,15 +61716,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource194", + "logicalId": "Resource153", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 19197, + "startLine": 15138, "startColumn": 7, - "endLine": 19197, + "endLine": 15138, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63180,15 +61739,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource194", + "logicalId": "Resource153", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 19198, + "startLine": 15139, "startColumn": 7, - "endLine": 19198, + "endLine": 15139, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63203,15 +61762,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource195", + "logicalId": "Resource154", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 19295, + "startLine": 15236, "startColumn": 7, - "endLine": 19295, + "endLine": 15236, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63226,15 +61785,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource195", + "logicalId": "Resource154", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 19296, + "startLine": 15237, "startColumn": 7, - "endLine": 19296, + "endLine": 15237, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63249,15 +61808,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource195", + "logicalId": "Resource154", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 19297, + "startLine": 15238, "startColumn": 7, - "endLine": 19297, + "endLine": 15238, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63272,15 +61831,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource196", + "logicalId": "Resource155", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 19394, + "startLine": 15335, "startColumn": 7, - "endLine": 19394, + "endLine": 15335, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63295,15 +61854,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource196", + "logicalId": "Resource155", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 19395, + "startLine": 15336, "startColumn": 7, - "endLine": 19395, + "endLine": 15336, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63318,15 +61877,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource196", + "logicalId": "Resource155", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 19396, + "startLine": 15337, "startColumn": 7, - "endLine": 19396, + "endLine": 15337, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63341,15 +61900,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource197", + "logicalId": "Resource156", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 19493, + "startLine": 15434, "startColumn": 7, - "endLine": 19493, + "endLine": 15434, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63364,15 +61923,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource197", + "logicalId": "Resource156", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 19494, + "startLine": 15435, "startColumn": 7, - "endLine": 19494, + "endLine": 15435, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63387,15 +61946,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource197", + "logicalId": "Resource156", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 19495, + "startLine": 15436, "startColumn": 7, - "endLine": 19495, + "endLine": 15436, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63410,15 +61969,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource198", + "logicalId": "Resource157", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 19592, + "startLine": 15533, "startColumn": 7, - "endLine": 19592, + "endLine": 15533, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63433,15 +61992,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource198", + "logicalId": "Resource157", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 19593, + "startLine": 15534, "startColumn": 7, - "endLine": 19593, + "endLine": 15534, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63456,15 +62015,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource198", + "logicalId": "Resource157", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 19594, + "startLine": 15535, "startColumn": 7, - "endLine": 19594, + "endLine": 15535, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63479,15 +62038,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource199", + "logicalId": "Resource158", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 19691, + "startLine": 15632, "startColumn": 7, - "endLine": 19691, + "endLine": 15632, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63502,15 +62061,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource199", + "logicalId": "Resource158", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 19692, + "startLine": 15633, "startColumn": 7, - "endLine": 19692, + "endLine": 15633, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63525,15 +62084,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource199", + "logicalId": "Resource158", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 19693, + "startLine": 15634, "startColumn": 7, - "endLine": 19693, + "endLine": 15634, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63548,15 +62107,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource200", + "logicalId": "Resource159", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 19790, + "startLine": 15731, "startColumn": 7, - "endLine": 19790, + "endLine": 15731, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63571,15 +62130,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource200", + "logicalId": "Resource159", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 19791, + "startLine": 15732, "startColumn": 7, - "endLine": 19791, + "endLine": 15732, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63594,15 +62153,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource200", + "logicalId": "Resource159", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 19792, + "startLine": 15733, "startColumn": 7, - "endLine": 19792, + "endLine": 15733, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63617,15 +62176,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource201", + "logicalId": "Resource160", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 19889, + "startLine": 15830, "startColumn": 7, - "endLine": 19889, + "endLine": 15830, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63640,15 +62199,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource201", + "logicalId": "Resource160", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 19890, + "startLine": 15831, "startColumn": 7, - "endLine": 19890, + "endLine": 15831, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63663,15 +62222,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource201", + "logicalId": "Resource160", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 19891, + "startLine": 15832, "startColumn": 7, - "endLine": 19891, + "endLine": 15832, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63686,15 +62245,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource202", + "logicalId": "Resource161", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 19988, + "startLine": 15929, "startColumn": 7, - "endLine": 19988, + "endLine": 15929, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63709,15 +62268,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource202", + "logicalId": "Resource161", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 19989, + "startLine": 15930, "startColumn": 7, - "endLine": 19989, + "endLine": 15930, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63732,15 +62291,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource202", + "logicalId": "Resource161", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 19990, + "startLine": 15931, "startColumn": 7, - "endLine": 19990, + "endLine": 15931, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63755,15 +62314,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource203", + "logicalId": "Resource162", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 20087, + "startLine": 16028, "startColumn": 7, - "endLine": 20087, + "endLine": 16028, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63778,15 +62337,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource203", + "logicalId": "Resource162", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 20088, + "startLine": 16029, "startColumn": 7, - "endLine": 20088, + "endLine": 16029, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63801,15 +62360,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource203", + "logicalId": "Resource162", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 20089, + "startLine": 16030, "startColumn": 7, - "endLine": 20089, + "endLine": 16030, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63824,15 +62383,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource204", + "logicalId": "Resource163", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 20186, + "startLine": 16127, "startColumn": 7, - "endLine": 20186, + "endLine": 16127, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63847,15 +62406,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource204", + "logicalId": "Resource163", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 20187, + "startLine": 16128, "startColumn": 7, - "endLine": 20187, + "endLine": 16128, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63870,15 +62429,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource204", + "logicalId": "Resource163", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 20188, + "startLine": 16129, "startColumn": 7, - "endLine": 20188, + "endLine": 16129, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63893,15 +62452,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource205", + "logicalId": "Resource164", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 20285, + "startLine": 16226, "startColumn": 7, - "endLine": 20285, + "endLine": 16226, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63916,15 +62475,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource205", + "logicalId": "Resource164", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 20286, + "startLine": 16227, "startColumn": 7, - "endLine": 20286, + "endLine": 16227, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63939,15 +62498,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource205", + "logicalId": "Resource164", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 20287, + "startLine": 16228, "startColumn": 7, - "endLine": 20287, + "endLine": 16228, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63962,15 +62521,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource206", + "logicalId": "Resource165", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 20384, + "startLine": 16325, "startColumn": 7, - "endLine": 20384, + "endLine": 16325, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -63985,15 +62544,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource206", + "logicalId": "Resource165", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 20385, + "startLine": 16326, "startColumn": 7, - "endLine": 20385, + "endLine": 16326, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64008,15 +62567,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource206", + "logicalId": "Resource165", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 20386, + "startLine": 16327, "startColumn": 7, - "endLine": 20386, + "endLine": 16327, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64031,15 +62590,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource207", + "logicalId": "Resource166", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 20483, + "startLine": 16424, "startColumn": 7, - "endLine": 20483, + "endLine": 16424, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64054,15 +62613,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource207", + "logicalId": "Resource166", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 20484, + "startLine": 16425, "startColumn": 7, - "endLine": 20484, + "endLine": 16425, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64077,15 +62636,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource207", + "logicalId": "Resource166", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 20485, + "startLine": 16426, "startColumn": 7, - "endLine": 20485, + "endLine": 16426, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64100,15 +62659,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource208", + "logicalId": "Resource167", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 20582, + "startLine": 16523, "startColumn": 7, - "endLine": 20582, + "endLine": 16523, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64123,15 +62682,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource208", + "logicalId": "Resource167", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 20583, + "startLine": 16524, "startColumn": 7, - "endLine": 20583, + "endLine": 16524, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64146,15 +62705,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource208", + "logicalId": "Resource167", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 20584, + "startLine": 16525, "startColumn": 7, - "endLine": 20584, + "endLine": 16525, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64169,15 +62728,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource209", + "logicalId": "Resource168", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 20681, + "startLine": 16622, "startColumn": 7, - "endLine": 20681, + "endLine": 16622, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64192,15 +62751,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource209", + "logicalId": "Resource168", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 20682, + "startLine": 16623, "startColumn": 7, - "endLine": 20682, + "endLine": 16623, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64215,15 +62774,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource209", + "logicalId": "Resource168", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 20683, + "startLine": 16624, "startColumn": 7, - "endLine": 20683, + "endLine": 16624, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64238,15 +62797,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource210", + "logicalId": "Resource169", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 20780, + "startLine": 16721, "startColumn": 7, - "endLine": 20780, + "endLine": 16721, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64261,15 +62820,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource210", + "logicalId": "Resource169", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 20781, + "startLine": 16722, "startColumn": 7, - "endLine": 20781, + "endLine": 16722, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64284,15 +62843,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource210", + "logicalId": "Resource169", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 20782, + "startLine": 16723, "startColumn": 7, - "endLine": 20782, + "endLine": 16723, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64307,15 +62866,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource211", + "logicalId": "Resource170", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 20879, + "startLine": 16820, "startColumn": 7, - "endLine": 20879, + "endLine": 16820, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64330,15 +62889,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource211", + "logicalId": "Resource170", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 20880, + "startLine": 16821, "startColumn": 7, - "endLine": 20880, + "endLine": 16821, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64353,15 +62912,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource211", + "logicalId": "Resource170", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 20881, + "startLine": 16822, "startColumn": 7, - "endLine": 20881, + "endLine": 16822, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64376,15 +62935,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource212", + "logicalId": "Resource171", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 20978, + "startLine": 16919, "startColumn": 7, - "endLine": 20978, + "endLine": 16919, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64399,15 +62958,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource212", + "logicalId": "Resource171", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 20979, + "startLine": 16920, "startColumn": 7, - "endLine": 20979, + "endLine": 16920, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64422,15 +62981,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource212", + "logicalId": "Resource171", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 20980, + "startLine": 16921, "startColumn": 7, - "endLine": 20980, + "endLine": 16921, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64445,15 +63004,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource213", + "logicalId": "Resource172", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 21077, + "startLine": 17018, "startColumn": 7, - "endLine": 21077, + "endLine": 17018, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64468,15 +63027,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource213", + "logicalId": "Resource172", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 21078, + "startLine": 17019, "startColumn": 7, - "endLine": 21078, + "endLine": 17019, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64491,15 +63050,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource213", + "logicalId": "Resource172", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 21079, + "startLine": 17020, "startColumn": 7, - "endLine": 21079, + "endLine": 17020, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64514,15 +63073,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource214", + "logicalId": "Resource173", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 21176, + "startLine": 17117, "startColumn": 7, - "endLine": 21176, + "endLine": 17117, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64537,15 +63096,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource214", + "logicalId": "Resource173", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 21177, + "startLine": 17118, "startColumn": 7, - "endLine": 21177, + "endLine": 17118, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64560,15 +63119,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource214", + "logicalId": "Resource173", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 21178, + "startLine": 17119, "startColumn": 7, - "endLine": 21178, + "endLine": 17119, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64583,15 +63142,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource215", + "logicalId": "Resource174", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 21275, + "startLine": 17216, "startColumn": 7, - "endLine": 21275, + "endLine": 17216, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64606,15 +63165,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource215", + "logicalId": "Resource174", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 21276, + "startLine": 17217, "startColumn": 7, - "endLine": 21276, + "endLine": 17217, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64629,15 +63188,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource215", + "logicalId": "Resource174", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 21277, + "startLine": 17218, "startColumn": 7, - "endLine": 21277, + "endLine": 17218, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64652,15 +63211,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource216", + "logicalId": "Resource175", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 21374, + "startLine": 17315, "startColumn": 7, - "endLine": 21374, + "endLine": 17315, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64675,15 +63234,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource216", + "logicalId": "Resource175", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 21375, + "startLine": 17316, "startColumn": 7, - "endLine": 21375, + "endLine": 17316, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64698,15 +63257,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource216", + "logicalId": "Resource175", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 21376, + "startLine": 17317, "startColumn": 7, - "endLine": 21376, + "endLine": 17317, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64721,15 +63280,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource217", + "logicalId": "Resource176", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 21473, + "startLine": 17414, "startColumn": 7, - "endLine": 21473, + "endLine": 17414, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64744,15 +63303,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource217", + "logicalId": "Resource176", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 21474, + "startLine": 17415, "startColumn": 7, - "endLine": 21474, + "endLine": 17415, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64767,15 +63326,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource217", + "logicalId": "Resource176", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 21475, + "startLine": 17416, "startColumn": 7, - "endLine": 21475, + "endLine": 17416, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64790,15 +63349,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource218", + "logicalId": "Resource177", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 21572, + "startLine": 17513, "startColumn": 7, - "endLine": 21572, + "endLine": 17513, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64813,15 +63372,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource218", + "logicalId": "Resource177", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 21573, + "startLine": 17514, "startColumn": 7, - "endLine": 21573, + "endLine": 17514, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64836,15 +63395,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource218", + "logicalId": "Resource177", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 21574, + "startLine": 17515, "startColumn": 7, - "endLine": 21574, + "endLine": 17515, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64859,15 +63418,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource219", + "logicalId": "Resource178", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 21671, + "startLine": 17612, "startColumn": 7, - "endLine": 21671, + "endLine": 17612, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64882,15 +63441,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource219", + "logicalId": "Resource178", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 21672, + "startLine": 17613, "startColumn": 7, - "endLine": 21672, + "endLine": 17613, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64905,15 +63464,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource219", + "logicalId": "Resource178", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 21673, + "startLine": 17614, "startColumn": 7, - "endLine": 21673, + "endLine": 17614, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64928,15 +63487,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource220", + "logicalId": "Resource179", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 21770, + "startLine": 17711, "startColumn": 7, - "endLine": 21770, + "endLine": 17711, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64951,15 +63510,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource220", + "logicalId": "Resource179", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 21771, + "startLine": 17712, "startColumn": 7, - "endLine": 21771, + "endLine": 17712, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64974,15 +63533,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource220", + "logicalId": "Resource179", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 21772, + "startLine": 17713, "startColumn": 7, - "endLine": 21772, + "endLine": 17713, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -64997,15 +63556,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource221", + "logicalId": "Resource180", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 21869, + "startLine": 17810, "startColumn": 7, - "endLine": 21869, + "endLine": 17810, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65020,15 +63579,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource221", + "logicalId": "Resource180", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 21870, + "startLine": 17811, "startColumn": 7, - "endLine": 21870, + "endLine": 17811, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65043,15 +63602,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource221", + "logicalId": "Resource180", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 21871, + "startLine": 17812, "startColumn": 7, - "endLine": 21871, + "endLine": 17812, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65066,15 +63625,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource222", + "logicalId": "Resource181", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 21968, + "startLine": 17909, "startColumn": 7, - "endLine": 21968, + "endLine": 17909, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65089,15 +63648,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource222", + "logicalId": "Resource181", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 21969, + "startLine": 17910, "startColumn": 7, - "endLine": 21969, + "endLine": 17910, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65112,15 +63671,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource222", + "logicalId": "Resource181", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 21970, + "startLine": 17911, "startColumn": 7, - "endLine": 21970, + "endLine": 17911, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65135,15 +63694,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource223", + "logicalId": "Resource182", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 22067, + "startLine": 18008, "startColumn": 7, - "endLine": 22067, + "endLine": 18008, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65158,15 +63717,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource223", + "logicalId": "Resource182", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 22068, + "startLine": 18009, "startColumn": 7, - "endLine": 22068, + "endLine": 18009, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65181,15 +63740,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource223", + "logicalId": "Resource182", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 22069, + "startLine": 18010, "startColumn": 7, - "endLine": 22069, + "endLine": 18010, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65204,15 +63763,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource224", + "logicalId": "Resource183", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 22166, + "startLine": 18107, "startColumn": 7, - "endLine": 22166, + "endLine": 18107, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65227,15 +63786,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource224", + "logicalId": "Resource183", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 22167, + "startLine": 18108, "startColumn": 7, - "endLine": 22167, + "endLine": 18108, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65250,15 +63809,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource224", + "logicalId": "Resource183", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 22168, + "startLine": 18109, "startColumn": 7, - "endLine": 22168, + "endLine": 18109, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65273,15 +63832,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource225", + "logicalId": "Resource184", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 22265, + "startLine": 18206, "startColumn": 7, - "endLine": 22265, + "endLine": 18206, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65296,15 +63855,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource225", + "logicalId": "Resource184", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 22266, + "startLine": 18207, "startColumn": 7, - "endLine": 22266, + "endLine": 18207, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65319,15 +63878,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource225", + "logicalId": "Resource184", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 22267, + "startLine": 18208, "startColumn": 7, - "endLine": 22267, + "endLine": 18208, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65342,15 +63901,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource226", + "logicalId": "Resource185", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 22364, + "startLine": 18305, "startColumn": 7, - "endLine": 22364, + "endLine": 18305, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65365,15 +63924,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource226", + "logicalId": "Resource185", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 22365, + "startLine": 18306, "startColumn": 7, - "endLine": 22365, + "endLine": 18306, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65388,15 +63947,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource226", + "logicalId": "Resource185", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 22366, + "startLine": 18307, "startColumn": 7, - "endLine": 22366, + "endLine": 18307, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65411,15 +63970,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource227", + "logicalId": "Resource186", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 22463, + "startLine": 18404, "startColumn": 7, - "endLine": 22463, + "endLine": 18404, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65434,15 +63993,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource227", + "logicalId": "Resource186", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 22464, + "startLine": 18405, "startColumn": 7, - "endLine": 22464, + "endLine": 18405, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65457,15 +64016,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource227", + "logicalId": "Resource186", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 22465, + "startLine": 18406, "startColumn": 7, - "endLine": 22465, + "endLine": 18406, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65480,15 +64039,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource228", + "logicalId": "Resource187", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 22562, + "startLine": 18503, "startColumn": 7, - "endLine": 22562, + "endLine": 18503, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65503,15 +64062,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource228", + "logicalId": "Resource187", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 22563, + "startLine": 18504, "startColumn": 7, - "endLine": 22563, + "endLine": 18504, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65526,15 +64085,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource228", + "logicalId": "Resource187", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 22564, + "startLine": 18505, "startColumn": 7, - "endLine": 22564, + "endLine": 18505, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65549,15 +64108,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource229", + "logicalId": "Resource188", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 22661, + "startLine": 18602, "startColumn": 7, - "endLine": 22661, + "endLine": 18602, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65572,15 +64131,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource229", + "logicalId": "Resource188", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 22662, + "startLine": 18603, "startColumn": 7, - "endLine": 22662, + "endLine": 18603, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65595,15 +64154,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource229", + "logicalId": "Resource188", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 22663, + "startLine": 18604, "startColumn": 7, - "endLine": 22663, + "endLine": 18604, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65618,15 +64177,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource230", + "logicalId": "Resource189", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 22760, + "startLine": 18701, "startColumn": 7, - "endLine": 22760, + "endLine": 18701, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65641,15 +64200,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource230", + "logicalId": "Resource189", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 22761, + "startLine": 18702, "startColumn": 7, - "endLine": 22761, + "endLine": 18702, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65664,15 +64223,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource230", + "logicalId": "Resource189", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 22762, + "startLine": 18703, "startColumn": 7, - "endLine": 22762, + "endLine": 18703, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65687,15 +64246,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource231", + "logicalId": "Resource190", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 22859, + "startLine": 18800, "startColumn": 7, - "endLine": 22859, + "endLine": 18800, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65710,15 +64269,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource231", + "logicalId": "Resource190", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 22860, + "startLine": 18801, "startColumn": 7, - "endLine": 22860, + "endLine": 18801, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65733,15 +64292,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource231", + "logicalId": "Resource190", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 22861, + "startLine": 18802, "startColumn": 7, - "endLine": 22861, + "endLine": 18802, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65756,15 +64315,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource232", + "logicalId": "Resource191", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 22958, + "startLine": 18899, "startColumn": 7, - "endLine": 22958, + "endLine": 18899, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65779,15 +64338,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource232", + "logicalId": "Resource191", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 22959, + "startLine": 18900, "startColumn": 7, - "endLine": 22959, + "endLine": 18900, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65802,15 +64361,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource232", + "logicalId": "Resource191", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 22960, + "startLine": 18901, "startColumn": 7, - "endLine": 22960, + "endLine": 18901, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65825,15 +64384,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource233", + "logicalId": "Resource192", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 23057, + "startLine": 18998, "startColumn": 7, - "endLine": 23057, + "endLine": 18998, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65848,15 +64407,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource233", + "logicalId": "Resource192", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 23058, + "startLine": 18999, "startColumn": 7, - "endLine": 23058, + "endLine": 18999, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65871,15 +64430,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource233", + "logicalId": "Resource192", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 23059, + "startLine": 19000, "startColumn": 7, - "endLine": 23059, + "endLine": 19000, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65894,15 +64453,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource234", + "logicalId": "Resource193", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 23156, + "startLine": 19097, "startColumn": 7, - "endLine": 23156, + "endLine": 19097, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65917,15 +64476,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource234", + "logicalId": "Resource193", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 23157, + "startLine": 19098, "startColumn": 7, - "endLine": 23157, + "endLine": 19098, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65940,15 +64499,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource234", + "logicalId": "Resource193", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 23158, + "startLine": 19099, "startColumn": 7, - "endLine": 23158, + "endLine": 19099, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65963,15 +64522,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource235", + "logicalId": "Resource194", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 23255, + "startLine": 19196, "startColumn": 7, - "endLine": 23255, + "endLine": 19196, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -65986,15 +64545,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource235", + "logicalId": "Resource194", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 23256, + "startLine": 19197, "startColumn": 7, - "endLine": 23256, + "endLine": 19197, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66009,15 +64568,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource235", + "logicalId": "Resource194", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 23257, + "startLine": 19198, "startColumn": 7, - "endLine": 23257, + "endLine": 19198, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66032,15 +64591,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource236", + "logicalId": "Resource195", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 23354, + "startLine": 19295, "startColumn": 7, - "endLine": 23354, + "endLine": 19295, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66055,15 +64614,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource236", + "logicalId": "Resource195", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 23355, + "startLine": 19296, "startColumn": 7, - "endLine": 23355, + "endLine": 19296, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66078,15 +64637,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource236", + "logicalId": "Resource195", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 23356, + "startLine": 19297, "startColumn": 7, - "endLine": 23356, + "endLine": 19297, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66101,15 +64660,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource237", + "logicalId": "Resource196", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 23453, + "startLine": 19394, "startColumn": 7, - "endLine": 23453, + "endLine": 19394, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66124,15 +64683,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource237", + "logicalId": "Resource196", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 23454, + "startLine": 19395, "startColumn": 7, - "endLine": 23454, + "endLine": 19395, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66147,15 +64706,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource237", + "logicalId": "Resource196", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 23455, + "startLine": 19396, "startColumn": 7, - "endLine": 23455, + "endLine": 19396, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66170,15 +64729,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource238", + "logicalId": "Resource197", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 23552, + "startLine": 19493, "startColumn": 7, - "endLine": 23552, + "endLine": 19493, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66193,15 +64752,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource238", + "logicalId": "Resource197", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 23553, + "startLine": 19494, "startColumn": 7, - "endLine": 23553, + "endLine": 19494, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66216,15 +64775,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource238", + "logicalId": "Resource197", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 23554, + "startLine": 19495, "startColumn": 7, - "endLine": 23554, + "endLine": 19495, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66239,15 +64798,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource239", + "logicalId": "Resource198", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 23651, + "startLine": 19592, "startColumn": 7, - "endLine": 23651, + "endLine": 19592, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66262,15 +64821,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource239", + "logicalId": "Resource198", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 23652, + "startLine": 19593, "startColumn": 7, - "endLine": 23652, + "endLine": 19593, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66285,15 +64844,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource239", + "logicalId": "Resource198", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 23653, + "startLine": 19594, "startColumn": 7, - "endLine": 23653, + "endLine": 19594, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66308,15 +64867,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource240", + "logicalId": "Resource199", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 23750, + "startLine": 19691, "startColumn": 7, - "endLine": 23750, + "endLine": 19691, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66331,15 +64890,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource240", + "logicalId": "Resource199", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 23751, + "startLine": 19692, "startColumn": 7, - "endLine": 23751, + "endLine": 19692, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66354,15 +64913,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource240", + "logicalId": "Resource199", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 23752, + "startLine": 19693, "startColumn": 7, - "endLine": 23752, + "endLine": 19693, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66377,15 +64936,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource241", + "logicalId": "Resource200", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 23849, + "startLine": 19790, "startColumn": 7, - "endLine": 23849, + "endLine": 19790, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66400,15 +64959,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource241", + "logicalId": "Resource200", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 23850, + "startLine": 19791, "startColumn": 7, - "endLine": 23850, + "endLine": 19791, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66423,15 +64982,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource241", + "logicalId": "Resource200", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 23851, + "startLine": 19792, "startColumn": 7, - "endLine": 23851, + "endLine": 19792, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66446,15 +65005,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource242", + "logicalId": "Resource201", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 23948, + "startLine": 19889, "startColumn": 7, - "endLine": 23948, + "endLine": 19889, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66469,15 +65028,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource242", + "logicalId": "Resource201", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 23949, + "startLine": 19890, "startColumn": 7, - "endLine": 23949, + "endLine": 19890, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66492,15 +65051,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource242", + "logicalId": "Resource201", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 23950, + "startLine": 19891, "startColumn": 7, - "endLine": 23950, + "endLine": 19891, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66515,15 +65074,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource243", + "logicalId": "Resource202", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 24047, + "startLine": 19988, "startColumn": 7, - "endLine": 24047, + "endLine": 19988, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66538,15 +65097,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource243", + "logicalId": "Resource202", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 24048, + "startLine": 19989, "startColumn": 7, - "endLine": 24048, + "endLine": 19989, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66561,15 +65120,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource243", + "logicalId": "Resource202", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 24049, + "startLine": 19990, "startColumn": 7, - "endLine": 24049, + "endLine": 19990, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66584,15 +65143,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource244", + "logicalId": "Resource203", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 24146, + "startLine": 20087, "startColumn": 7, - "endLine": 24146, + "endLine": 20087, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66607,15 +65166,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource244", + "logicalId": "Resource203", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 24147, + "startLine": 20088, "startColumn": 7, - "endLine": 24147, + "endLine": 20088, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66630,15 +65189,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource244", + "logicalId": "Resource203", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 24148, + "startLine": 20089, "startColumn": 7, - "endLine": 24148, + "endLine": 20089, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66653,15 +65212,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource245", + "logicalId": "Resource204", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 24245, + "startLine": 20186, "startColumn": 7, - "endLine": 24245, + "endLine": 20186, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66676,15 +65235,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource245", + "logicalId": "Resource204", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 24246, + "startLine": 20187, "startColumn": 7, - "endLine": 24246, + "endLine": 20187, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66699,15 +65258,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource245", + "logicalId": "Resource204", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 24247, + "startLine": 20188, "startColumn": 7, - "endLine": 24247, + "endLine": 20188, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66722,15 +65281,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource246", + "logicalId": "Resource205", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 24344, + "startLine": 20285, "startColumn": 7, - "endLine": 24344, + "endLine": 20285, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66745,15 +65304,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource246", + "logicalId": "Resource205", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 24345, + "startLine": 20286, "startColumn": 7, - "endLine": 24345, + "endLine": 20286, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66768,15 +65327,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource246", + "logicalId": "Resource205", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 24346, + "startLine": 20287, "startColumn": 7, - "endLine": 24346, + "endLine": 20287, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66791,15 +65350,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource247", + "logicalId": "Resource206", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 24443, + "startLine": 20384, "startColumn": 7, - "endLine": 24443, + "endLine": 20384, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66814,15 +65373,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource247", + "logicalId": "Resource206", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 24444, + "startLine": 20385, "startColumn": 7, - "endLine": 24444, + "endLine": 20385, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66837,15 +65396,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource247", + "logicalId": "Resource206", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 24445, + "startLine": 20386, "startColumn": 7, - "endLine": 24445, + "endLine": 20386, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66860,15 +65419,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource248", + "logicalId": "Resource207", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 24542, + "startLine": 20483, "startColumn": 7, - "endLine": 24542, + "endLine": 20483, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66883,15 +65442,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource248", + "logicalId": "Resource207", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 24543, + "startLine": 20484, "startColumn": 7, - "endLine": 24543, + "endLine": 20484, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66906,15 +65465,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource248", + "logicalId": "Resource207", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 24544, + "startLine": 20485, "startColumn": 7, - "endLine": 24544, + "endLine": 20485, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66929,15 +65488,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource249", + "logicalId": "Resource208", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 24641, + "startLine": 20582, "startColumn": 7, - "endLine": 24641, + "endLine": 20582, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66952,15 +65511,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource249", + "logicalId": "Resource208", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 24642, + "startLine": 20583, "startColumn": 7, - "endLine": 24642, + "endLine": 20583, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66975,15 +65534,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource249", + "logicalId": "Resource208", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 24643, + "startLine": 20584, "startColumn": 7, - "endLine": 24643, + "endLine": 20584, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -66998,15 +65557,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource250", + "logicalId": "Resource209", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 24740, + "startLine": 20681, "startColumn": 7, - "endLine": 24740, + "endLine": 20681, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67021,15 +65580,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource250", + "logicalId": "Resource209", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 24741, + "startLine": 20682, "startColumn": 7, - "endLine": 24741, + "endLine": 20682, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67044,15 +65603,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource250", + "logicalId": "Resource209", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 24742, + "startLine": 20683, "startColumn": 7, - "endLine": 24742, + "endLine": 20683, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67067,15 +65626,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource251", + "logicalId": "Resource210", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 24839, + "startLine": 20780, "startColumn": 7, - "endLine": 24839, + "endLine": 20780, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67090,15 +65649,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource251", + "logicalId": "Resource210", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 24840, + "startLine": 20781, "startColumn": 7, - "endLine": 24840, + "endLine": 20781, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67113,15 +65672,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource251", + "logicalId": "Resource210", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 24841, + "startLine": 20782, "startColumn": 7, - "endLine": 24841, + "endLine": 20782, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67136,15 +65695,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource252", + "logicalId": "Resource211", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 24938, + "startLine": 20879, "startColumn": 7, - "endLine": 24938, + "endLine": 20879, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67159,15 +65718,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource252", + "logicalId": "Resource211", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 24939, + "startLine": 20880, "startColumn": 7, - "endLine": 24939, + "endLine": 20880, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67182,15 +65741,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource252", + "logicalId": "Resource211", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 24940, + "startLine": 20881, "startColumn": 7, - "endLine": 24940, + "endLine": 20881, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67205,15 +65764,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource253", + "logicalId": "Resource212", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 25037, + "startLine": 20978, "startColumn": 7, - "endLine": 25037, + "endLine": 20978, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67228,15 +65787,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource253", + "logicalId": "Resource212", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 25038, + "startLine": 20979, "startColumn": 7, - "endLine": 25038, + "endLine": 20979, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67251,15 +65810,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource253", + "logicalId": "Resource212", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 25039, + "startLine": 20980, "startColumn": 7, - "endLine": 25039, + "endLine": 20980, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67274,15 +65833,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource254", + "logicalId": "Resource213", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 25136, + "startLine": 21077, "startColumn": 7, - "endLine": 25136, + "endLine": 21077, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67297,15 +65856,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource254", + "logicalId": "Resource213", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 25137, + "startLine": 21078, "startColumn": 7, - "endLine": 25137, + "endLine": 21078, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67320,15 +65879,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource254", + "logicalId": "Resource213", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 25138, + "startLine": 21079, "startColumn": 7, - "endLine": 25138, + "endLine": 21079, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67343,15 +65902,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource255", + "logicalId": "Resource214", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 25235, + "startLine": 21176, "startColumn": 7, - "endLine": 25235, + "endLine": 21176, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67366,15 +65925,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource255", + "logicalId": "Resource214", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 25236, + "startLine": 21177, "startColumn": 7, - "endLine": 25236, + "endLine": 21177, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67389,15 +65948,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource255", + "logicalId": "Resource214", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 25237, + "startLine": 21178, "startColumn": 7, - "endLine": 25237, + "endLine": 21178, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67412,15 +65971,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource256", + "logicalId": "Resource215", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 25334, + "startLine": 21275, "startColumn": 7, - "endLine": 25334, + "endLine": 21275, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67435,15 +65994,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource256", + "logicalId": "Resource215", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 25335, + "startLine": 21276, "startColumn": 7, - "endLine": 25335, + "endLine": 21276, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67458,15 +66017,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource256", + "logicalId": "Resource215", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 25336, + "startLine": 21277, "startColumn": 7, - "endLine": 25336, + "endLine": 21277, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67481,15 +66040,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource257", + "logicalId": "Resource216", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 25433, + "startLine": 21374, "startColumn": 7, - "endLine": 25433, + "endLine": 21374, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67504,15 +66063,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource257", + "logicalId": "Resource216", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 25434, + "startLine": 21375, "startColumn": 7, - "endLine": 25434, + "endLine": 21375, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67527,15 +66086,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource257", + "logicalId": "Resource216", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 25435, + "startLine": 21376, "startColumn": 7, - "endLine": 25435, + "endLine": 21376, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67550,15 +66109,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource258", + "logicalId": "Resource217", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 25532, + "startLine": 21473, "startColumn": 7, - "endLine": 25532, + "endLine": 21473, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67573,15 +66132,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource258", + "logicalId": "Resource217", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 25533, + "startLine": 21474, "startColumn": 7, - "endLine": 25533, + "endLine": 21474, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67596,15 +66155,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource258", + "logicalId": "Resource217", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 25534, + "startLine": 21475, "startColumn": 7, - "endLine": 25534, + "endLine": 21475, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67619,15 +66178,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource259", + "logicalId": "Resource218", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 25631, + "startLine": 21572, "startColumn": 7, - "endLine": 25631, + "endLine": 21572, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67642,15 +66201,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource259", + "logicalId": "Resource218", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 25632, + "startLine": 21573, "startColumn": 7, - "endLine": 25632, + "endLine": 21573, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67665,15 +66224,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource259", + "logicalId": "Resource218", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 25633, + "startLine": 21574, "startColumn": 7, - "endLine": 25633, + "endLine": 21574, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67688,15 +66247,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource260", + "logicalId": "Resource219", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 25730, + "startLine": 21671, "startColumn": 7, - "endLine": 25730, + "endLine": 21671, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67711,15 +66270,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource260", + "logicalId": "Resource219", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 25731, + "startLine": 21672, "startColumn": 7, - "endLine": 25731, + "endLine": 21672, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67734,15 +66293,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource260", + "logicalId": "Resource219", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 25732, + "startLine": 21673, "startColumn": 7, - "endLine": 25732, + "endLine": 21673, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67757,15 +66316,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource261", + "logicalId": "Resource220", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 25829, + "startLine": 21770, "startColumn": 7, - "endLine": 25829, + "endLine": 21770, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67780,15 +66339,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource261", + "logicalId": "Resource220", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 25830, + "startLine": 21771, "startColumn": 7, - "endLine": 25830, + "endLine": 21771, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67803,15 +66362,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource261", + "logicalId": "Resource220", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 25831, + "startLine": 21772, "startColumn": 7, - "endLine": 25831, + "endLine": 21772, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67826,15 +66385,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource262", + "logicalId": "Resource221", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 25928, + "startLine": 21869, "startColumn": 7, - "endLine": 25928, + "endLine": 21869, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67849,15 +66408,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource262", + "logicalId": "Resource221", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 25929, + "startLine": 21870, "startColumn": 7, - "endLine": 25929, + "endLine": 21870, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67872,15 +66431,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource262", + "logicalId": "Resource221", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 25930, + "startLine": 21871, "startColumn": 7, - "endLine": 25930, + "endLine": 21871, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67895,15 +66454,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource263", + "logicalId": "Resource222", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 26027, + "startLine": 21968, "startColumn": 7, - "endLine": 26027, + "endLine": 21968, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67918,15 +66477,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource263", + "logicalId": "Resource222", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 26028, + "startLine": 21969, "startColumn": 7, - "endLine": 26028, + "endLine": 21969, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67941,15 +66500,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource263", + "logicalId": "Resource222", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 26029, + "startLine": 21970, "startColumn": 7, - "endLine": 26029, + "endLine": 21970, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67964,15 +66523,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource264", + "logicalId": "Resource223", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 26126, + "startLine": 22067, "startColumn": 7, - "endLine": 26126, + "endLine": 22067, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -67987,15 +66546,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource264", + "logicalId": "Resource223", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 26127, + "startLine": 22068, "startColumn": 7, - "endLine": 26127, + "endLine": 22068, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68010,15 +66569,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource264", + "logicalId": "Resource223", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 26128, + "startLine": 22069, "startColumn": 7, - "endLine": 26128, + "endLine": 22069, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68033,15 +66592,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource265", + "logicalId": "Resource224", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 26225, + "startLine": 22166, "startColumn": 7, - "endLine": 26225, + "endLine": 22166, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68056,15 +66615,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource265", + "logicalId": "Resource224", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 26226, + "startLine": 22167, "startColumn": 7, - "endLine": 26226, + "endLine": 22167, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68079,15 +66638,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource265", + "logicalId": "Resource224", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 26227, + "startLine": 22168, "startColumn": 7, - "endLine": 26227, + "endLine": 22168, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68102,15 +66661,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource266", + "logicalId": "Resource225", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 26324, + "startLine": 22265, "startColumn": 7, - "endLine": 26324, + "endLine": 22265, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68125,15 +66684,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource266", + "logicalId": "Resource225", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 26325, + "startLine": 22266, "startColumn": 7, - "endLine": 26325, + "endLine": 22266, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68148,15 +66707,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource266", + "logicalId": "Resource225", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 26326, + "startLine": 22267, "startColumn": 7, - "endLine": 26326, + "endLine": 22267, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68171,15 +66730,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource267", + "logicalId": "Resource226", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 26423, + "startLine": 22364, "startColumn": 7, - "endLine": 26423, + "endLine": 22364, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68194,15 +66753,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource267", + "logicalId": "Resource226", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 26424, + "startLine": 22365, "startColumn": 7, - "endLine": 26424, + "endLine": 22365, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68217,15 +66776,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource267", + "logicalId": "Resource226", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 26425, + "startLine": 22366, "startColumn": 7, - "endLine": 26425, + "endLine": 22366, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68240,15 +66799,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource268", + "logicalId": "Resource227", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 26522, + "startLine": 22463, "startColumn": 7, - "endLine": 26522, + "endLine": 22463, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68263,15 +66822,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource268", + "logicalId": "Resource227", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 26523, + "startLine": 22464, "startColumn": 7, - "endLine": 26523, + "endLine": 22464, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68286,15 +66845,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource268", + "logicalId": "Resource227", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 26524, + "startLine": 22465, "startColumn": 7, - "endLine": 26524, + "endLine": 22465, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68309,15 +66868,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource269", + "logicalId": "Resource228", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 26621, + "startLine": 22562, "startColumn": 7, - "endLine": 26621, + "endLine": 22562, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68332,15 +66891,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource269", + "logicalId": "Resource228", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 26622, + "startLine": 22563, "startColumn": 7, - "endLine": 26622, + "endLine": 22563, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68355,15 +66914,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource269", + "logicalId": "Resource228", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 26623, + "startLine": 22564, "startColumn": 7, - "endLine": 26623, + "endLine": 22564, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68378,15 +66937,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource270", + "logicalId": "Resource229", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 26720, + "startLine": 22661, "startColumn": 7, - "endLine": 26720, + "endLine": 22661, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68401,15 +66960,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource270", + "logicalId": "Resource229", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 26721, + "startLine": 22662, "startColumn": 7, - "endLine": 26721, + "endLine": 22662, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68424,15 +66983,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource270", + "logicalId": "Resource229", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 26722, + "startLine": 22663, "startColumn": 7, - "endLine": 26722, + "endLine": 22663, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68447,15 +67006,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource271", + "logicalId": "Resource230", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 26819, + "startLine": 22760, "startColumn": 7, - "endLine": 26819, + "endLine": 22760, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68470,15 +67029,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource271", + "logicalId": "Resource230", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 26820, + "startLine": 22761, "startColumn": 7, - "endLine": 26820, + "endLine": 22761, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68493,15 +67052,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource271", + "logicalId": "Resource230", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 26821, + "startLine": 22762, "startColumn": 7, - "endLine": 26821, + "endLine": 22762, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68516,15 +67075,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource272", + "logicalId": "Resource231", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 26918, + "startLine": 22859, "startColumn": 7, - "endLine": 26918, + "endLine": 22859, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68539,15 +67098,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource272", + "logicalId": "Resource231", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 26919, + "startLine": 22860, "startColumn": 7, - "endLine": 26919, + "endLine": 22860, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68562,15 +67121,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource272", + "logicalId": "Resource231", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 26920, + "startLine": 22861, "startColumn": 7, - "endLine": 26920, + "endLine": 22861, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68585,15 +67144,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource273", + "logicalId": "Resource232", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 27017, + "startLine": 22958, "startColumn": 7, - "endLine": 27017, + "endLine": 22958, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68608,15 +67167,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource273", + "logicalId": "Resource232", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 27018, + "startLine": 22959, "startColumn": 7, - "endLine": 27018, + "endLine": 22959, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68631,15 +67190,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource273", + "logicalId": "Resource232", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 27019, + "startLine": 22960, "startColumn": 7, - "endLine": 27019, + "endLine": 22960, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68654,15 +67213,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource274", + "logicalId": "Resource233", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 27116, + "startLine": 23057, "startColumn": 7, - "endLine": 27116, + "endLine": 23057, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68677,15 +67236,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource274", + "logicalId": "Resource233", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 27117, + "startLine": 23058, "startColumn": 7, - "endLine": 27117, + "endLine": 23058, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68700,15 +67259,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource274", + "logicalId": "Resource233", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 27118, + "startLine": 23059, "startColumn": 7, - "endLine": 27118, + "endLine": 23059, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68723,15 +67282,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource275", + "logicalId": "Resource234", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 27215, + "startLine": 23156, "startColumn": 7, - "endLine": 27215, + "endLine": 23156, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68746,15 +67305,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource275", + "logicalId": "Resource234", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 27216, + "startLine": 23157, "startColumn": 7, - "endLine": 27216, + "endLine": 23157, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68769,15 +67328,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource275", + "logicalId": "Resource234", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 27217, + "startLine": 23158, "startColumn": 7, - "endLine": 27217, + "endLine": 23158, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68792,15 +67351,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource276", + "logicalId": "Resource235", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 27314, + "startLine": 23255, "startColumn": 7, - "endLine": 27314, + "endLine": 23255, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68815,15 +67374,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource276", + "logicalId": "Resource235", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 27315, + "startLine": 23256, "startColumn": 7, - "endLine": 27315, + "endLine": 23256, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68838,15 +67397,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource276", + "logicalId": "Resource235", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 27316, + "startLine": 23257, "startColumn": 7, - "endLine": 27316, + "endLine": 23257, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68861,15 +67420,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource277", + "logicalId": "Resource236", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 27413, + "startLine": 23354, "startColumn": 7, - "endLine": 27413, + "endLine": 23354, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68884,15 +67443,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource277", + "logicalId": "Resource236", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 27414, + "startLine": 23355, "startColumn": 7, - "endLine": 27414, + "endLine": 23355, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68907,15 +67466,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource277", + "logicalId": "Resource236", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 27415, + "startLine": 23356, "startColumn": 7, - "endLine": 27415, + "endLine": 23356, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68930,15 +67489,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource278", + "logicalId": "Resource237", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 27512, + "startLine": 23453, "startColumn": 7, - "endLine": 27512, + "endLine": 23453, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68953,15 +67512,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource278", + "logicalId": "Resource237", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 27513, + "startLine": 23454, "startColumn": 7, - "endLine": 27513, + "endLine": 23454, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68976,15 +67535,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource278", + "logicalId": "Resource237", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 27514, + "startLine": 23455, "startColumn": 7, - "endLine": 27514, + "endLine": 23455, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -68999,15 +67558,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource279", + "logicalId": "Resource238", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 27611, + "startLine": 23552, "startColumn": 7, - "endLine": 27611, + "endLine": 23552, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69022,15 +67581,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource279", + "logicalId": "Resource238", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 27612, + "startLine": 23553, "startColumn": 7, - "endLine": 27612, + "endLine": 23553, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69045,15 +67604,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource279", + "logicalId": "Resource238", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 27613, + "startLine": 23554, "startColumn": 7, - "endLine": 27613, + "endLine": 23554, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69068,15 +67627,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource280", + "logicalId": "Resource239", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 27710, + "startLine": 23651, "startColumn": 7, - "endLine": 27710, + "endLine": 23651, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69091,15 +67650,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource280", + "logicalId": "Resource239", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 27711, + "startLine": 23652, "startColumn": 7, - "endLine": 27711, + "endLine": 23652, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69114,15 +67673,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource280", + "logicalId": "Resource239", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 27712, + "startLine": 23653, "startColumn": 7, - "endLine": 27712, + "endLine": 23653, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69137,15 +67696,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource281", + "logicalId": "Resource240", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 27809, + "startLine": 23750, "startColumn": 7, - "endLine": 27809, + "endLine": 23750, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69160,15 +67719,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource281", + "logicalId": "Resource240", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 27810, + "startLine": 23751, "startColumn": 7, - "endLine": 27810, + "endLine": 23751, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69183,15 +67742,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource281", + "logicalId": "Resource240", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 27811, + "startLine": 23752, "startColumn": 7, - "endLine": 27811, + "endLine": 23752, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69206,15 +67765,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource282", + "logicalId": "Resource241", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 27908, + "startLine": 23849, "startColumn": 7, - "endLine": 27908, + "endLine": 23849, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69229,15 +67788,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource282", + "logicalId": "Resource241", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 27909, + "startLine": 23850, "startColumn": 7, - "endLine": 27909, + "endLine": 23850, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69252,15 +67811,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource282", + "logicalId": "Resource241", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 27910, + "startLine": 23851, "startColumn": 7, - "endLine": 27910, + "endLine": 23851, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69275,15 +67834,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource283", + "logicalId": "Resource242", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 28007, + "startLine": 23948, "startColumn": 7, - "endLine": 28007, + "endLine": 23948, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69298,15 +67857,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource283", + "logicalId": "Resource242", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 28008, + "startLine": 23949, "startColumn": 7, - "endLine": 28008, + "endLine": 23949, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69321,15 +67880,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource283", + "logicalId": "Resource242", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 28009, + "startLine": 23950, "startColumn": 7, - "endLine": 28009, + "endLine": 23950, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69344,15 +67903,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource284", + "logicalId": "Resource243", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 28106, + "startLine": 24047, "startColumn": 7, - "endLine": 28106, + "endLine": 24047, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69367,15 +67926,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource284", + "logicalId": "Resource243", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 28107, + "startLine": 24048, "startColumn": 7, - "endLine": 28107, + "endLine": 24048, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69390,15 +67949,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource284", + "logicalId": "Resource243", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 28108, + "startLine": 24049, "startColumn": 7, - "endLine": 28108, + "endLine": 24049, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69413,15 +67972,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource285", + "logicalId": "Resource244", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 28205, + "startLine": 24146, "startColumn": 7, - "endLine": 28205, + "endLine": 24146, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69436,15 +67995,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource285", + "logicalId": "Resource244", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 28206, + "startLine": 24147, "startColumn": 7, - "endLine": 28206, + "endLine": 24147, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69459,15 +68018,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource285", + "logicalId": "Resource244", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 28207, + "startLine": 24148, "startColumn": 7, - "endLine": 28207, + "endLine": 24148, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69482,15 +68041,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource286", + "logicalId": "Resource245", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 28304, + "startLine": 24245, "startColumn": 7, - "endLine": 28304, + "endLine": 24245, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69505,15 +68064,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource286", + "logicalId": "Resource245", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 28305, + "startLine": 24246, "startColumn": 7, - "endLine": 28305, + "endLine": 24246, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69528,15 +68087,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource286", + "logicalId": "Resource245", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 28306, + "startLine": 24247, "startColumn": 7, - "endLine": 28306, + "endLine": 24247, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69551,15 +68110,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource287", + "logicalId": "Resource246", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 28403, + "startLine": 24344, "startColumn": 7, - "endLine": 28403, + "endLine": 24344, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69574,15 +68133,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource287", + "logicalId": "Resource246", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 28404, + "startLine": 24345, "startColumn": 7, - "endLine": 28404, + "endLine": 24345, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69597,15 +68156,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource287", + "logicalId": "Resource246", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 28405, + "startLine": 24346, "startColumn": 7, - "endLine": 28405, + "endLine": 24346, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69620,15 +68179,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource288", + "logicalId": "Resource247", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 28502, + "startLine": 24443, "startColumn": 7, - "endLine": 28502, + "endLine": 24443, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69643,15 +68202,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource288", + "logicalId": "Resource247", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 28503, + "startLine": 24444, "startColumn": 7, - "endLine": 28503, + "endLine": 24444, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69666,15 +68225,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource288", + "logicalId": "Resource247", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 28504, + "startLine": 24445, "startColumn": 7, - "endLine": 28504, + "endLine": 24445, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69689,15 +68248,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource289", + "logicalId": "Resource248", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 28601, + "startLine": 24542, "startColumn": 7, - "endLine": 28601, + "endLine": 24542, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69712,15 +68271,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource289", + "logicalId": "Resource248", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 28602, + "startLine": 24543, "startColumn": 7, - "endLine": 28602, + "endLine": 24543, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69735,15 +68294,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource289", + "logicalId": "Resource248", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 28603, + "startLine": 24544, "startColumn": 7, - "endLine": 28603, + "endLine": 24544, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69758,15 +68317,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource290", + "logicalId": "Resource249", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 28700, + "startLine": 24641, "startColumn": 7, - "endLine": 28700, + "endLine": 24641, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69781,15 +68340,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource290", + "logicalId": "Resource249", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 28701, + "startLine": 24642, "startColumn": 7, - "endLine": 28701, + "endLine": 24642, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69804,15 +68363,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource290", + "logicalId": "Resource249", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 28702, + "startLine": 24643, "startColumn": 7, - "endLine": 28702, + "endLine": 24643, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69827,15 +68386,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource291", + "logicalId": "Resource250", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 28799, + "startLine": 24740, "startColumn": 7, - "endLine": 28799, + "endLine": 24740, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69850,15 +68409,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource291", + "logicalId": "Resource250", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 28800, + "startLine": 24741, "startColumn": 7, - "endLine": 28800, + "endLine": 24741, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69873,15 +68432,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource291", + "logicalId": "Resource250", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 28801, + "startLine": 24742, "startColumn": 7, - "endLine": 28801, + "endLine": 24742, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69896,15 +68455,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource292", + "logicalId": "Resource251", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 28898, + "startLine": 24839, "startColumn": 7, - "endLine": 28898, + "endLine": 24839, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69919,15 +68478,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource292", + "logicalId": "Resource251", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 28899, + "startLine": 24840, "startColumn": 7, - "endLine": 28899, + "endLine": 24840, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69942,15 +68501,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource292", + "logicalId": "Resource251", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 28900, + "startLine": 24841, "startColumn": 7, - "endLine": 28900, + "endLine": 24841, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69965,15 +68524,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource293", + "logicalId": "Resource252", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 28997, + "startLine": 24938, "startColumn": 7, - "endLine": 28997, + "endLine": 24938, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -69988,15 +68547,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource293", + "logicalId": "Resource252", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 28998, + "startLine": 24939, "startColumn": 7, - "endLine": 28998, + "endLine": 24939, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -70011,15 +68570,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource293", + "logicalId": "Resource252", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 28999, + "startLine": 24940, "startColumn": 7, - "endLine": 28999, + "endLine": 24940, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -70034,15 +68593,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource294", + "logicalId": "Resource253", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 29096, + "startLine": 25037, "startColumn": 7, - "endLine": 29096, + "endLine": 25037, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -70057,15 +68616,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource294", + "logicalId": "Resource253", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 29097, + "startLine": 25038, "startColumn": 7, - "endLine": 29097, + "endLine": 25038, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -70080,15 +68639,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource294", + "logicalId": "Resource253", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 29098, + "startLine": 25039, "startColumn": 7, - "endLine": 29098, + "endLine": 25039, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -70103,15 +68662,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource295", + "logicalId": "Resource254", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 29195, + "startLine": 25136, "startColumn": 7, - "endLine": 29195, + "endLine": 25136, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -70126,15 +68685,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource295", + "logicalId": "Resource254", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 29196, + "startLine": 25137, "startColumn": 7, - "endLine": 29196, + "endLine": 25137, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -70149,15 +68708,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource295", + "logicalId": "Resource254", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 29197, + "startLine": 25138, "startColumn": 7, - "endLine": 29197, + "endLine": 25138, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -70172,15 +68731,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource296", + "logicalId": "Resource255", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 29294, + "startLine": 25235, "startColumn": 7, - "endLine": 29294, + "endLine": 25235, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -70195,15 +68754,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource296", + "logicalId": "Resource255", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 29295, + "startLine": 25236, "startColumn": 7, - "endLine": 29295, + "endLine": 25236, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -70218,15 +68777,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource296", + "logicalId": "Resource255", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 29296, + "startLine": 25237, "startColumn": 7, - "endLine": 29296, + "endLine": 25237, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -70241,15 +68800,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource297", + "logicalId": "Resource256", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 29393, + "startLine": 25334, "startColumn": 7, - "endLine": 29393, + "endLine": 25334, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -70264,15 +68823,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource297", + "logicalId": "Resource256", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 29394, + "startLine": 25335, "startColumn": 7, - "endLine": 29394, + "endLine": 25335, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -70287,15 +68846,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource297", + "logicalId": "Resource256", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 29395, + "startLine": 25336, "startColumn": 7, - "endLine": 29395, + "endLine": 25336, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -70310,15 +68869,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource298", + "logicalId": "Resource257", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 29492, + "startLine": 25433, "startColumn": 7, - "endLine": 29492, + "endLine": 25433, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -70333,15 +68892,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource298", + "logicalId": "Resource257", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 29493, + "startLine": 25434, "startColumn": 7, - "endLine": 29493, + "endLine": 25434, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -70356,15 +68915,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource298", + "logicalId": "Resource257", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 29494, + "startLine": 25435, "startColumn": 7, - "endLine": 29494, + "endLine": 25435, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -70379,15 +68938,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource299", + "logicalId": "Resource258", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 29591, + "startLine": 25532, "startColumn": 7, - "endLine": 29591, + "endLine": 25532, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -70402,15 +68961,15 @@ "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource299", + "logicalId": "Resource258", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 29592, + "startLine": 25533, "startColumn": 7, - "endLine": 29592, + "endLine": 25533, "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -70425,15 +68984,15 @@ "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource299", + "logicalId": "Resource258", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 29593, + "startLine": 25534, "startColumn": 7, - "endLine": 29593, + "endLine": 25534, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -70442,158 +69001,23 @@ "lifecycle": "conditional-create-only" } }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - } - ] - }, - "bad/mappings/name.yaml": { - "filePath": "bad/mappings/name.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 1, - "warnings": 1, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "startLine": 10, - "startColumn": 1, - "endLine": 10, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" - }, - { - "ruleId": "E7001", - "severity": "ERROR", - "message": "Mapping name 'Bad.Name' does not match format '^[a-zA-Z0-9]+$'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Bad.Name", - "entityType": "Mapping" - }, - "propertyPath": "Mappings/Bad.Name", - "category": "Structure", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Mappings are appropriately configured", - "phase": "LINT" - }, - { - "ruleId": "W7001", - "severity": "WARN", - "message": "Mapping 'Bad.Name' is not referenced by any Fn::FindInMap", - "source": "CFN_LINT", - "entity": { - "logicalId": "Bad.Name", - "entityType": "Mapping" - }, - "propertyPath": "Mappings/Bad.Name", - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Check if Mappings are Used", - "phase": "LINT" - } - ] - }, - "bad/mappings/used.yaml": { - "filePath": "bad/mappings/used.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 1, - "informational": 3, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E1151", - "severity": "ERROR", - "message": "'vpc-123456' does not match format 'AWS::EC2::VPC.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "mySubnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Intrinsic Function", - "startLine": 18, - "startColumn": 7, - "endLine": 18, - "endColumn": 12, - "ruleDescription": "Validate VPC id format", - "phase": "SCHEMA", - "context": { - "actualValue": "vpc-123456" - } - }, - { - "ruleId": "W7001", - "severity": "WARN", - "message": "Mapping 'Environment' is not referenced by any Fn::FindInMap", - "source": "CFN_LINT", - "entity": { - "logicalId": "Environment", - "entityType": "Mapping" - }, - "propertyPath": "Mappings/Environment", - "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 14, - "ruleDescription": "Check if Mappings are Used", - "phase": "LINT" - }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySubnet", + "logicalId": "Resource259", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 18, + "startLine": 25631, "startColumn": 7, - "endLine": 18, - "endColumn": 12, + "endLine": 25631, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -70603,1058 +69027,875 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySubnet", + "logicalId": "Resource259", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 20, + "startLine": 25632, "startColumn": 7, - "endLine": 20, - "endColumn": 16, + "endLine": 25632, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'mySubnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "mySubnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/module_with_tags.yaml": { - "filePath": "bad/module_with_tags.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E5001", - "severity": "ERROR", - "message": "Tags is not permitted within Module resource 'Mod'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Mod", - "entityType": "Resource", - "resourceType": "MyCompany::Testing::MODULE" - }, - "propertyPath": "Properties.Tags", - "category": "Structure", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 11, - "ruleDescription": "Check that Modules resources are valid", - "phase": "LINT" - } - ] - }, - "bad/modules/bad_has_create_policy.yaml": { - "filePath": "bad/modules/bad_has_create_policy.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 2, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3055", - "severity": "ERROR", - "message": "CreationPolicy is not supported on resource type 'My::Organization::Custom::MODULE'", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyModule", - "entityType": "Resource", - "resourceType": "My::Organization::Custom::MODULE" - }, - "propertyPath": "CreationPolicy", - "suggestedFix": "Remove CreationPolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::CloudFormation::WaitCondition, AWS::EC2::Instance", - "category": "Resource", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 19, - "ruleDescription": "Check CreationPolicy values for Resources", - "phase": "LINT" - }, - { - "ruleId": "E5001", - "severity": "ERROR", - "message": "CreationPolicy is not permitted within Module resource 'MyModule'", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyModule", - "entityType": "Resource", - "resourceType": "My::Organization::Custom::MODULE" - }, - "propertyPath": "CreationPolicy", - "category": "Structure", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 19, - "ruleDescription": "Check that Modules resources are valid", - "phase": "LINT" - } - ] - }, - "bad/modules/bad_has_tags.yaml": { - "filePath": "bad/modules/bad_has_tags.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E5001", - "severity": "ERROR", - "message": "Tags is not permitted within Module resource 'IamRoleModule'", - "source": "CFN_LINT", - "entity": { - "logicalId": "IamRoleModule", - "entityType": "Resource", - "resourceType": "Some::IAM::Role::MODULE" - }, - "propertyPath": "Properties.Tags", - "category": "Structure", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 11, - "ruleDescription": "Check that Modules resources are valid", - "phase": "LINT" - } - ] - }, - "bad/modules/bad_has_update_policy.yaml": { - "filePath": "bad/modules/bad_has_update_policy.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 2, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3016", - "severity": "ERROR", - "message": "UpdatePolicy is not supported on resource type 'My::Organization::Custom::MODULE'", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyModule", - "entityType": "Resource", - "resourceType": "My::Organization::Custom::MODULE" - }, - "propertyPath": "UpdatePolicy", - "suggestedFix": "Remove UpdatePolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::ElastiCache::ReplicationGroup, AWS::Elasticsearch::Domain, AWS::Lambda::Alias, AWS::OpenSearchService::Domain", - "category": "Resource", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 17, - "ruleDescription": "Check UpdatePolicy values for Resources", - "phase": "LINT" - }, - { - "ruleId": "E5001", - "severity": "ERROR", - "message": "UpdatePolicy is not permitted within Module resource 'MyModule'", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyModule", - "entityType": "Resource", - "resourceType": "My::Organization::Custom::MODULE" - }, - "propertyPath": "UpdatePolicy", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 17, - "ruleDescription": "Check that Modules resources are valid", - "phase": "LINT" - } - ] - }, - "bad/modules/bad_uses_module_metadata.yaml": { - "filePath": "bad/modules/bad_uses_module_metadata.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "bad/noecho.yaml": { - "filePath": "bad/noecho.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 2, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ + "lifecycle": "conditional-create-only" + } + }, { - "ruleId": "W2010", - "severity": "WARN", - "message": "Don't use 'NoEcho' parameter 'NoEchoParam' in resource metadata", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SNSTopicWithSecretNameInRef", + "logicalId": "Resource259", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.NoEchoParamInMetadata", - "suggestedFix": "Move the parameter reference out of Metadata or remove NoEcho", - "category": "Security", - "startLine": 13, + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 25633, "startColumn": 7, - "endLine": 13, - "endColumn": 28, - "ruleDescription": "NoEcho parameters are not masked when used in Metadata and Outputs", - "phase": "LINT" + "endLine": 25633, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W2010", - "severity": "WARN", - "message": "Don't use 'NoEcho' parameter 'NoEchoParam' in resource metadata", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SNSTopicWithSecretNameInSub", + "logicalId": "Resource260", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Metadata.NoEchoParamInMetadata", - "suggestedFix": "Move the parameter reference out of Metadata or remove NoEcho", - "category": "Security", - "startLine": 19, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 25730, "startColumn": 7, - "endLine": 19, - "endColumn": 28, - "ruleDescription": "NoEcho parameters are not masked when used in Metadata and Outputs", - "phase": "LINT" + "endLine": 25730, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SNSTopicWithSecretNameInRef' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SNSTopicWithSecretNameInRef", + "logicalId": "Resource260", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 25731, + "startColumn": 7, + "endLine": 25731, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SNSTopicWithSecretNameInSub' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SNSTopicWithSecretNameInSub", + "logicalId": "Resource260", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 16, - "startColumn": 5, - "endLine": 16, + "startLine": 25732, + "startColumn": 7, + "endLine": 25732, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/not_cloudformation.yaml": { - "filePath": "bad/not_cloudformation.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 2, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Resource261", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 25829, + "startColumn": 7, + "endLine": 25829, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F0005", - "severity": "FATAL", - "message": "'NotEven' is not a valid top-level template section", - "source": "SCHEMA", - "propertyPath": "NotEven", - "category": "Structure", - "startLine": 2, - "startColumn": 1, - "endLine": 2, - "endColumn": 8, - "ruleDescription": "Top-level keys must be valid section names", - "phase": "SCHEMA" - } - ] - }, - "bad/opensearch_instance_type.yaml": { - "filePath": "bad/opensearch_instance_type.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 7, - "debug": 0 + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Resource261", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 25830, + "startColumn": 7, + "endLine": 25830, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3653", - "severity": "ERROR", - "message": "'fake.invalid.search' is not valid in any region", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BadDomain", + "logicalId": "Resource261", "entityType": "Resource", - "resourceType": "AWS::OpenSearchService::Domain" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ClusterConfig.InstanceType", - "category": "Resource", - "startLine": 8, - "startColumn": 9, - "endLine": 8, - "endColumn": 21, - "ruleDescription": "Validate OpenSearch domain cluster instance type", - "phase": "LINT" + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 25831, + "startColumn": 7, + "endLine": 25831, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BadDomain", + "logicalId": "Resource262", "entityType": "Resource", - "resourceType": "AWS::OpenSearchService::Domain" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 25928, + "startColumn": 7, + "endLine": 25928, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BadDomain", + "logicalId": "Resource262", "entityType": "Resource", - "resourceType": "AWS::OpenSearchService::Domain" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 25929, + "startColumn": 7, + "endLine": 25929, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ValidDomain", + "logicalId": "Resource262", "entityType": "Resource", - "resourceType": "AWS::OpenSearchService::Domain" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 9, - "startColumn": 3, - "endLine": 9, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 25930, + "startColumn": 7, + "endLine": 25930, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ValidDomain", + "logicalId": "Resource263", "entityType": "Resource", - "resourceType": "AWS::OpenSearchService::Domain" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 9, - "startColumn": 3, - "endLine": 9, + "startLine": 26027, + "startColumn": 7, + "endLine": 26027, "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9003", + "ruleId": "I9001", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", + "entity": { + "logicalId": "Resource263", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" + "startLine": 26028, + "startColumn": 7, + "endLine": 26028, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BadDomain' of type 'AWS::OpenSearchService::Domain' supports Tags but none are configured", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BadDomain", + "logicalId": "Resource263", "entityType": "Resource", - "resourceType": "AWS::OpenSearchService::Domain" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, + "startLine": 26029, + "startColumn": 7, + "endLine": 26029, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ValidDomain' of type 'AWS::OpenSearchService::Domain' supports Tags but none are configured", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ValidDomain", + "logicalId": "Resource264", "entityType": "Resource", - "resourceType": "AWS::OpenSearchService::Domain" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 11, - "startColumn": 5, - "endLine": 11, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/output_invalid_references.yaml": { - "filePath": "bad/output_invalid_references.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 2, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 + "startLine": 26126, + "startColumn": 7, + "endLine": 26126, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F6101", - "severity": "FATAL", - "message": "'NotARealAttribute' is not one of ['Arn', 'DomainName', 'DualStackDomainName', 'MetadataConfiguration.AnnotationTableConfiguration.TableArn', 'MetadataConfiguration.AnnotationTableConfiguration.TableName', 'MetadataConfiguration.Destination', 'MetadataConfiguration.InventoryTableConfiguration.TableArn', 'MetadataConfiguration.InventoryTableConfiguration.TableName', 'MetadataConfiguration.JournalTableConfiguration.TableArn', 'MetadataConfiguration.JournalTableConfiguration.TableName', 'MetadataTableConfiguration.S3TablesDestination.TableArn', 'MetadataTableConfiguration.S3TablesDestination.TableNamespace', 'RegionalDomainName', 'WebsiteURL']", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "InvalidAttribute", - "entityType": "Output" + "logicalId": "Resource264", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/InvalidAttribute/Value.Fn::GetAtt.1", - "category": "Structure", - "startLine": 6, - "startColumn": 3, - "endLine": 6, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 26127, + "startColumn": 7, + "endLine": 26127, "endColumn": 19, - "ruleDescription": "Output value must be a string", - "phase": "SCHEMA" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Fn::Sub variable '${MissingTarget}' does not reference a valid resource, parameter, or pseudo-parameter", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "UnresolvedSubVariable", - "entityType": "Output" + "logicalId": "Resource264", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/UnresolvedSubVariable/Value.Fn::Sub", - "category": "Structure", - "startLine": 8, - "startColumn": 3, - "endLine": 8, - "endColumn": 24, - "ruleDescription": "Output value must be a string", - "phase": "SCHEMA" + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 26128, + "startColumn": 7, + "endLine": 26128, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "Resource265", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 9, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/output_invalid_targets.yaml": { - "filePath": "bad/output_invalid_targets.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 5, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 + "startLine": 26225, + "startColumn": 7, + "endLine": 26225, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Ref 'DoesNotExist' does not reference a valid resource, parameter, or pseudo-parameter", - "source": "SCHEMA", - "propertyPath": "Outputs.MissingRef.Value.Ref", - "category": "Structure", - "startLine": 5, - "startColumn": 16, - "endLine": 5, - "endColumn": 21, - "ruleDescription": "Output value must be a string", - "phase": "PARSE" + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Resource265", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 26226, + "startColumn": 7, + "endLine": 26226, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F6101", - "severity": "FATAL", - "message": "GetAtt 'DoesNotExist.Arn' references a resource that does not exist", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MissingGetAtt", - "entityType": "Output" + "logicalId": "Resource265", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/MissingGetAtt/Value.Fn::GetAtt.0", - "category": "Structure", - "startLine": 6, - "startColumn": 3, - "endLine": 6, - "endColumn": 16, - "ruleDescription": "Output value must be a string", - "phase": "SCHEMA" + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 26227, + "startColumn": 7, + "endLine": 26227, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Fn::Sub variable '${DoesNotExist}' does not reference a valid resource, parameter, or pseudo-parameter", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MissingSubRef", - "entityType": "Output" + "logicalId": "Resource266", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/MissingSubRef/Value.Fn::Sub", - "category": "Structure", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 16, - "ruleDescription": "Output value must be a string", - "phase": "SCHEMA" + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 26324, + "startColumn": 7, + "endLine": 26324, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Fn::Sub variable '${DoesNotExist.Arn}' does not reference a valid resource, parameter, or pseudo-parameter", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MissingSubGetAtt", - "entityType": "Output" + "logicalId": "Resource266", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/MissingSubGetAtt/Value.Fn::Sub", - "category": "Structure", - "startLine": 8, - "startColumn": 3, - "endLine": 8, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 26325, + "startColumn": 7, + "endLine": 26325, "endColumn": 19, - "ruleDescription": "Output value must be a string", - "phase": "SCHEMA" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F6101", - "severity": "FATAL", - "message": "'DoesNotExist' is not one of ['Arn', 'DomainName', 'DualStackDomainName', 'MetadataConfiguration.AnnotationTableConfiguration.TableArn', 'MetadataConfiguration.AnnotationTableConfiguration.TableName', 'MetadataConfiguration.Destination', 'MetadataConfiguration.InventoryTableConfiguration.TableArn', 'MetadataConfiguration.InventoryTableConfiguration.TableName', 'MetadataConfiguration.JournalTableConfiguration.TableArn', 'MetadataConfiguration.JournalTableConfiguration.TableName', 'MetadataTableConfiguration.S3TablesDestination.TableArn', 'MetadataTableConfiguration.S3TablesDestination.TableNamespace', 'RegionalDomainName', 'WebsiteURL']", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "InvalidExistingAttribute", - "entityType": "Output" + "logicalId": "Resource266", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/InvalidExistingAttribute/Value.Fn::GetAtt.1", - "category": "Structure", - "startLine": 9, - "startColumn": 3, - "endLine": 9, - "endColumn": 27, - "ruleDescription": "Output value must be a string", - "phase": "SCHEMA" + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 26326, + "startColumn": 7, + "endLine": 26326, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "Resource267", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 9, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/output_value_not_string.yaml": { - "filePath": "bad/output_value_not_string.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 7, - "errors": 0, - "warnings": 0, - "informational": 4, - "debug": 0 + "startLine": 26423, + "startColumn": 7, + "endLine": 26423, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Output 'ValueIsList' value must be a string, not a list", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ValueIsList", - "entityType": "Output" + "logicalId": "Resource267", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/ValueIsList/Value", - "category": "Structure", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 10, - "ruleDescription": "Output value must be a string", - "phase": "PARSE" + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 26424, + "startColumn": 7, + "endLine": 26424, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Output 'ValueIsObject' value must be a string, not an object", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ValueIsObject", - "entityType": "Output" + "logicalId": "Resource267", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/ValueIsObject/Value", - "category": "Structure", - "startLine": 21, - "startColumn": 5, - "endLine": 21, - "endColumn": 10, - "ruleDescription": "Output value must be a string", - "phase": "PARSE" + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 26425, + "startColumn": 7, + "endLine": 26425, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Output 'ValueIsGetAZs' value must be a string, not a list", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ValueIsGetAZs", - "entityType": "Output" + "logicalId": "Resource268", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/ValueIsGetAZs/Value", - "category": "Structure", - "startLine": 24, - "startColumn": 5, - "endLine": 24, - "endColumn": 10, - "ruleDescription": "Output value must be a string", - "phase": "PARSE" + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 26522, + "startColumn": 7, + "endLine": 26522, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Output 'ValueIsSplit' value must be a string, not a list", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ValueIsSplit", - "entityType": "Output" + "logicalId": "Resource268", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/ValueIsSplit/Value", - "category": "Structure", - "startLine": 26, - "startColumn": 5, - "endLine": 26, - "endColumn": 10, - "ruleDescription": "Output value must be a string", - "phase": "PARSE" + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 26523, + "startColumn": 7, + "endLine": 26523, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Output 'ValueIsCidr' value must be a string, not a list", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ValueIsCidr", - "entityType": "Output" + "logicalId": "Resource268", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/ValueIsCidr/Value", - "category": "Structure", - "startLine": 28, - "startColumn": 5, - "endLine": 28, - "endColumn": 10, - "ruleDescription": "Output value must be a string", - "phase": "PARSE" + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 26524, + "startColumn": 7, + "endLine": 26524, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Output 'ConditionalListBranch' value must be a string, not a list", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalListBranch", - "entityType": "Output" + "logicalId": "Resource269", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/ConditionalListBranch/Value/Fn::If/1", - "category": "Structure", - "startLine": 30, - "startColumn": 25, - "endLine": 30, - "endColumn": 26, - "ruleDescription": "Output value must be a string", - "phase": "PARSE" + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 26621, + "startColumn": 7, + "endLine": 26621, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Output 'ConditionalListBranch' value must be a string, not a list", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalListBranch", - "entityType": "Output" + "logicalId": "Resource269", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Outputs/ConditionalListBranch/Value/Fn::If/2", - "category": "Structure", - "startLine": 30, - "startColumn": 35, - "endLine": 30, - "endColumn": 36, - "ruleDescription": "Output value must be a string", - "phase": "PARSE" + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 26622, + "startColumn": 7, + "endLine": 26622, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "Resource269", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 13, - "startColumn": 3, - "endLine": 13, - "endColumn": 8, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 26623, + "startColumn": 7, + "endLine": 26623, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "Resource270", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 13, - "startColumn": 3, - "endLine": 13, - "endColumn": 8, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 26720, + "startColumn": 7, + "endLine": 26720, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "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", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "Resource270", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 13, - "startColumn": 3, - "endLine": 13, - "endColumn": 8, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "startLine": 26721, + "startColumn": 7, + "endLine": 26721, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Queue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "Resource270", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 13, - "startColumn": 3, - "endLine": 13, - "endColumn": 8, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/override/complete.yaml": { - "filePath": "bad/override/complete.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 1, - "errors": 1, - "warnings": 1, - "informational": 7, - "debug": 0 + "startLine": 26722, + "startColumn": 7, + "endLine": 26722, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'SpotFleetRequestConfigData' is a required property", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "mySpotFleet", + "logicalId": "Resource271", "entityType": "Resource", - "resourceType": "AWS::EC2::SpotFleet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'SpotFleetRequestConfigData'", - "category": "Schema", - "startLine": 20, - "startColumn": 3, - "endLine": 20, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 26819, + "startColumn": 7, + "endLine": 26819, "endColumn": 14, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-123456' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "untaggedInstance", + "logicalId": "Resource271", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 14, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 26820, "startColumn": 7, - "endLine": 14, - "endColumn": 14, + "endLine": 26820, + "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "ami-123456" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "W3045", - "severity": "WARN", - "message": "AccessControl property is deprecated. Use bucket policies instead", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "myS3Bucket", + "logicalId": "Resource271", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.AccessControl", - "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", - "category": "Deprecation", - "startLine": 10, + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 26821, "startColumn": 7, - "endLine": 10, - "endColumn": 20, - "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", - "phase": "LINT", + "endLine": 26821, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { - "actualValue": "Private" + "lifecycle": "conditional-create-only" } }, { @@ -71663,15 +69904,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "untaggedInstance", + "logicalId": "Resource272", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 14, + "startLine": 26918, "startColumn": 7, - "endLine": 14, + "endLine": 26918, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -71683,277 +69924,273 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPC", + "logicalId": "Resource272", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 18, - "startColumn": 9, - "endLine": 18, - "endColumn": 18, + "startLine": 26919, + "startColumn": 7, + "endLine": 26919, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myS3Bucket", + "logicalId": "Resource272", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, + "startLine": 26920, + "startColumn": 7, + "endLine": 26920, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'untaggedInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "untaggedInstance", + "logicalId": "Resource273", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 13, - "startColumn": 5, - "endLine": 13, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 27017, + "startColumn": 7, + "endLine": 27017, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'VPC' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPC", + "logicalId": "Resource273", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 17, + "startLine": 27018, "startColumn": 7, - "endLine": 17, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 27018, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'mySpotFleet' of type 'AWS::EC2::SpotFleet' supports Tags but none are configured", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySpotFleet", + "logicalId": "Resource273", "entityType": "Resource", - "resourceType": "AWS::EC2::SpotFleet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 20, - "startColumn": 3, - "endLine": 20, - "endColumn": 14, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 27019, + "startColumn": 7, + "endLine": 27019, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'mySnsTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySnsTopic", + "logicalId": "Resource274", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 23, - "startColumn": 3, - "endLine": 23, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/override/exclude.yaml": { - "filePath": "bad/override/exclude.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 + "startLine": 27116, + "startColumn": 7, + "endLine": 27116, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myGameLift' of type 'AWS::GameLift::Alias' supports Tags but none are configured", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myGameLift", + "logicalId": "Resource274", "entityType": "Resource", - "resourceType": "AWS::GameLift::Alias" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 27117, + "startColumn": 7, + "endLine": 27117, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myS3Bucket", + "logicalId": "Resource274", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 14, - "startColumn": 3, - "endLine": 14, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 27118, + "startColumn": 7, + "endLine": 27118, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'mySnsTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySnsTopic", + "logicalId": "Resource275", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 16, - "startColumn": 3, - "endLine": 16, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/override/include.yaml": { - "filePath": "bad/override/include.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 6, - "debug": 0 + "startLine": 27215, + "startColumn": 7, + "endLine": 27215, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W2511", - "severity": "WARN", - "message": "IAM Policy Version should be updated to '2012-10-17'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "myS3BucketPolicy", + "logicalId": "Resource275", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.PolicyDocument.Version", - "suggestedFix": "Update the policy document Version to '2012-10-17'", - "category": "Security", - "startLine": 20, - "startColumn": 9, - "endLine": 20, - "endColumn": 16, - "ruleDescription": "Check IAM Resource Policies syntax", - "phase": "LINT" + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 27216, + "startColumn": 7, + "endLine": 27216, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "myS3BucketPolicy", + "logicalId": "Resource275", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 13, - "startColumn": 3, - "endLine": 13, - "endColumn": 19, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", - "phase": "LINT" + "startLine": 27217, + "startColumn": 7, + "endLine": 27217, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myVpc1", + "logicalId": "Resource276", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 9, + "startLine": 27314, "startColumn": 7, - "endLine": 9, - "endColumn": 16, + "endLine": 27314, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -71963,19 +70200,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myVpc1", + "logicalId": "Resource276", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 10, + "startLine": 27315, "startColumn": 7, - "endLine": 10, - "endColumn": 22, + "endLine": 27315, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -71985,1391 +70223,1633 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myS3BucketPolicy", + "logicalId": "Resource276", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 17, + "startLine": 27316, "startColumn": 7, - "endLine": 17, - "endColumn": 13, + "endLine": 27316, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'myS3Bucket'" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myVpc1' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myVpc1", + "logicalId": "Resource277", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 27413, + "startColumn": 7, + "endLine": 27413, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myS3Bucket", + "logicalId": "Resource277", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 11, - "startColumn": 3, - "endLine": 11, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 27414, + "startColumn": 7, + "endLine": 27414, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'mySnsTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySnsTopic", + "logicalId": "Resource277", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 27, - "startColumn": 3, - "endLine": 27, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/override/required.yaml": { - "filePath": "bad/override/required.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 1, - "debug": 0 + "startLine": 27415, + "startColumn": 7, + "endLine": 27415, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W3045", - "severity": "WARN", - "message": "AccessControl property is deprecated. Use bucket policies instead", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "myS3Bucket", + "logicalId": "Resource278", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.AccessControl", - "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", - "category": "Deprecation", - "startLine": 10, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 27512, "startColumn": 7, - "endLine": 10, - "endColumn": 20, - "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", - "phase": "LINT", + "endLine": 27512, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { - "actualValue": "Private" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myS3Bucket", + "logicalId": "Resource278", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/param_constraints.yaml": { - "filePath": "bad/param_constraints.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 5, - "errors": 0, - "warnings": 5, - "informational": 1, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F2015", - "severity": "FATAL", - "message": "Parameter 'PatternParam' Default '123-bad' does not match AllowedPattern '^[a-z]+$'", - "source": "SCHEMA", - "entity": { - "logicalId": "PatternParam", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/PatternParam/Default", - "category": "Parameter", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 12, - "ruleDescription": "Default value is within parameter constraints", - "phase": "SCHEMA" + "startLine": 27513, + "startColumn": 7, + "endLine": 27513, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F2015", - "severity": "FATAL", - "message": "Parameter 'ShortParam' Default length 2 is less than MinLength 5", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ShortParam", - "entityType": "Parameter" + "logicalId": "Resource278", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/ShortParam/Default", - "category": "Parameter", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 12, - "ruleDescription": "Default value is within parameter constraints", - "phase": "SCHEMA" + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 27514, + "startColumn": 7, + "endLine": 27514, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F2015", - "severity": "FATAL", - "message": "Parameter 'LongParam' Default length 34 exceeds MaxLength 10", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LongParam", - "entityType": "Parameter" + "logicalId": "Resource279", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/LongParam/Default", - "category": "Parameter", - "startLine": 13, - "startColumn": 5, - "endLine": 13, - "endColumn": 12, - "ruleDescription": "Default value is within parameter constraints", - "phase": "SCHEMA" + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 27611, + "startColumn": 7, + "endLine": 27611, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F2015", - "severity": "FATAL", - "message": "Parameter 'SmallNumber' Default 3 is less than MinValue 10", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SmallNumber", - "entityType": "Parameter" + "logicalId": "Resource279", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/SmallNumber/Default", - "category": "Parameter", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 12, - "ruleDescription": "Default value is within parameter constraints", - "phase": "SCHEMA" + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 27612, + "startColumn": 7, + "endLine": 27612, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F2015", - "severity": "FATAL", - "message": "Parameter 'BigNumber' Default 200 exceeds MaxValue 100", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BigNumber", - "entityType": "Parameter" + "logicalId": "Resource279", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/BigNumber/Default", - "category": "Parameter", - "startLine": 21, - "startColumn": 5, - "endLine": 21, - "endColumn": 12, - "ruleDescription": "Default value is within parameter constraints", - "phase": "SCHEMA" + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 27613, + "startColumn": 7, + "endLine": 27613, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'PatternParam' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "PatternParam", - "entityType": "Parameter" + "logicalId": "Resource280", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/PatternParam", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 15, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 27710, + "startColumn": 7, + "endLine": 27710, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'ShortParam' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ShortParam", - "entityType": "Parameter" + "logicalId": "Resource280", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/ShortParam", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 13, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 27711, + "startColumn": 7, + "endLine": 27711, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'LongParam' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LongParam", - "entityType": "Parameter" + "logicalId": "Resource280", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/LongParam", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 11, - "startColumn": 3, - "endLine": 11, - "endColumn": 12, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 27712, + "startColumn": 7, + "endLine": 27712, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'SmallNumber' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SmallNumber", - "entityType": "Parameter" + "logicalId": "Resource281", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/SmallNumber", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 15, - "startColumn": 3, - "endLine": 15, + "startLine": 27809, + "startColumn": 7, + "endLine": 27809, "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'BigNumber' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BigNumber", - "entityType": "Parameter" + "logicalId": "Resource281", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/BigNumber", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 19, - "startColumn": 3, - "endLine": 19, - "endColumn": 12, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 27810, + "startColumn": 7, + "endLine": 27810, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "Resource281", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 24, - "startColumn": 3, - "endLine": 24, - "endColumn": 9, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/param_number_default.yaml": { - "filePath": "bad/param_number_default.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 4, - "errors": 0, - "warnings": 1, - "informational": 0, - "debug": 0 + "startLine": 27811, + "startColumn": 7, + "endLine": 27811, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F0015", - "severity": "FATAL", - "message": "Parameter 'Port' Default 'not-a-number' is not a valid number", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Port", - "entityType": "Parameter" + "logicalId": "Resource282", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/Port/Default", - "category": "Parameter", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 12, - "ruleDescription": "Default value must match parameter Type", - "phase": "SCHEMA" + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 27908, + "startColumn": 7, + "endLine": 27908, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F0016", - "severity": "FATAL", - "message": "Parameter 'Port' AllowedValues entry 'abc' is not a valid number", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Port", - "entityType": "Parameter" + "logicalId": "Resource282", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/Port/AllowedValues", - "category": "Parameter", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 18, - "ruleDescription": "AllowedValues entries must match parameter Type", - "phase": "SCHEMA" + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 27909, + "startColumn": 7, + "endLine": 27909, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F0016", - "severity": "FATAL", - "message": "Parameter 'Port' AllowedValues entry 'def' is not a valid number", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Port", - "entityType": "Parameter" + "logicalId": "Resource282", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/Port/AllowedValues", - "category": "Parameter", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 18, - "ruleDescription": "AllowedValues entries must match parameter Type", - "phase": "SCHEMA" + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 27910, + "startColumn": 7, + "endLine": 27910, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F2012", - "severity": "FATAL", - "message": "Parameter 'Port' Default 'not-a-number' is not in AllowedValues ['abc', 'def']", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Port", - "entityType": "Parameter" + "logicalId": "Resource283", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/Port/Default", - "category": "Parameter", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 12, - "ruleDescription": "Parameter Default must be in AllowedValues", - "phase": "SCHEMA" + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 28007, + "startColumn": 7, + "endLine": 28007, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Port' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Port", - "entityType": "Parameter" + "logicalId": "Resource283", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/Port", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 7, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - } - ] - }, - "bad/parameters/F2012_cdl_default_split.yaml": { - "filePath": "bad/parameters/F2012_cdl_default_split.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 8, - "errors": 0, - "warnings": 5, - "informational": 0, - "debug": 0 + "startLine": 28008, + "startColumn": 7, + "endLine": 28008, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F2012", - "severity": "FATAL", - "message": "Parameter 'CDLSingleElementNotAllowed' Default 'three' is not in AllowedValues ['one', 'two']", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CDLSingleElementNotAllowed", - "entityType": "Parameter" + "logicalId": "Resource283", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/CDLSingleElementNotAllowed/Default", - "category": "Parameter", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 12, - "ruleDescription": "Parameter Default must be in AllowedValues", - "phase": "SCHEMA" + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 28009, + "startColumn": 7, + "endLine": 28009, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F2012", - "severity": "FATAL", - "message": "Parameter 'CDLMultipleElementsNotAllowed' Default 'four' is not in AllowedValues ['one', 'two']", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CDLMultipleElementsNotAllowed", - "entityType": "Parameter" + "logicalId": "Resource284", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/CDLMultipleElementsNotAllowed/Default", - "category": "Parameter", - "startLine": 13, - "startColumn": 5, - "endLine": 13, - "endColumn": 12, - "ruleDescription": "Parameter Default must be in AllowedValues", - "phase": "SCHEMA" + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 28106, + "startColumn": 7, + "endLine": 28106, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F2012", - "severity": "FATAL", - "message": "Parameter 'CDLMultipleElementsNotAllowed' Default 'three' is not in AllowedValues ['one', 'two']", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CDLMultipleElementsNotAllowed", - "entityType": "Parameter" + "logicalId": "Resource284", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/CDLMultipleElementsNotAllowed/Default", - "category": "Parameter", - "startLine": 13, - "startColumn": 5, - "endLine": 13, - "endColumn": 12, - "ruleDescription": "Parameter Default must be in AllowedValues", - "phase": "SCHEMA" + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 28107, + "startColumn": 7, + "endLine": 28107, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F2012", - "severity": "FATAL", - "message": "Parameter 'CDLCommaInAllowedValueDoesNotMatchSplit' Default 'four' is not in AllowedValues ['one', 'two', 'three,four']", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CDLCommaInAllowedValueDoesNotMatchSplit", - "entityType": "Parameter" + "logicalId": "Resource284", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/CDLCommaInAllowedValueDoesNotMatchSplit/Default", - "category": "Parameter", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 12, - "ruleDescription": "Parameter Default must be in AllowedValues", - "phase": "SCHEMA" + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 28108, + "startColumn": 7, + "endLine": 28108, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F2012", - "severity": "FATAL", - "message": "Parameter 'CDLCommaInAllowedValueDoesNotMatchSplit' Default 'three' is not in AllowedValues ['one', 'two', 'three,four']", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CDLCommaInAllowedValueDoesNotMatchSplit", - "entityType": "Parameter" + "logicalId": "Resource285", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/CDLCommaInAllowedValueDoesNotMatchSplit/Default", - "category": "Parameter", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 12, - "ruleDescription": "Parameter Default must be in AllowedValues", - "phase": "SCHEMA" + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 28205, + "startColumn": 7, + "endLine": 28205, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F2012", - "severity": "FATAL", - "message": "Parameter 'CDLWhitespaceTrimsToInvalid' Default 'bad' is not in AllowedValues ['one', 'two']", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CDLWhitespaceTrimsToInvalid", - "entityType": "Parameter" + "logicalId": "Resource285", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/CDLWhitespaceTrimsToInvalid/Default", - "category": "Parameter", - "startLine": 28, - "startColumn": 5, - "endLine": 28, - "endColumn": 12, - "ruleDescription": "Parameter Default must be in AllowedValues", - "phase": "SCHEMA" + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 28206, + "startColumn": 7, + "endLine": 28206, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F2012", - "severity": "FATAL", - "message": "Parameter 'CDLListStringType' Default 'bad' is not in AllowedValues ['good', 'better']", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CDLListStringType", - "entityType": "Parameter" + "logicalId": "Resource285", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/CDLListStringType/Default", - "category": "Parameter", - "startLine": 35, - "startColumn": 5, - "endLine": 35, - "endColumn": 12, - "ruleDescription": "Parameter Default must be in AllowedValues", - "phase": "SCHEMA" + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 28207, + "startColumn": 7, + "endLine": 28207, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F2012", - "severity": "FATAL", - "message": "Parameter 'CDLListStringType' Default 'worse' is not in AllowedValues ['good', 'better']", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CDLListStringType", - "entityType": "Parameter" + "logicalId": "Resource286", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/CDLListStringType/Default", - "category": "Parameter", - "startLine": 35, - "startColumn": 5, - "endLine": 35, - "endColumn": 12, - "ruleDescription": "Parameter Default must be in AllowedValues", - "phase": "SCHEMA" + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 28304, + "startColumn": 7, + "endLine": 28304, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'CDLSingleElementNotAllowed' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CDLSingleElementNotAllowed", - "entityType": "Parameter" + "logicalId": "Resource286", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/CDLSingleElementNotAllowed", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 5, - "startColumn": 3, - "endLine": 5, - "endColumn": 29, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 28305, + "startColumn": 7, + "endLine": 28305, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'CDLMultipleElementsNotAllowed' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CDLMultipleElementsNotAllowed", - "entityType": "Parameter" + "logicalId": "Resource286", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/CDLMultipleElementsNotAllowed", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 11, - "startColumn": 3, - "endLine": 11, - "endColumn": 32, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 28306, + "startColumn": 7, + "endLine": 28306, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'CDLCommaInAllowedValueDoesNotMatchSplit' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CDLCommaInAllowedValueDoesNotMatchSplit", - "entityType": "Parameter" + "logicalId": "Resource287", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/CDLCommaInAllowedValueDoesNotMatchSplit", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 17, - "startColumn": 3, - "endLine": 17, - "endColumn": 42, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 28403, + "startColumn": 7, + "endLine": 28403, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'CDLWhitespaceTrimsToInvalid' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CDLWhitespaceTrimsToInvalid", - "entityType": "Parameter" + "logicalId": "Resource287", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/CDLWhitespaceTrimsToInvalid", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 25, - "startColumn": 3, - "endLine": 25, - "endColumn": 30, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 28404, + "startColumn": 7, + "endLine": 28404, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'CDLListStringType' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CDLListStringType", - "entityType": "Parameter" + "logicalId": "Resource287", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/CDLListStringType", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 32, - "startColumn": 3, - "endLine": 32, - "endColumn": 20, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - } - ] - }, - "bad/parameters/configuration.yaml": { - "filePath": "bad/parameters/configuration.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 2, - "errors": 14, - "warnings": 16, - "informational": 3, - "debug": 0 + "startLine": 28405, + "startColumn": 7, + "endLine": 28405, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F2002", - "severity": "FATAL", - "message": "Parameter 'myParameter' has invalid Type 'NotString'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "myParameter", - "entityType": "Parameter" + "logicalId": "Resource288", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/myParameter/Type", - "category": "Parameter", - "startLine": 22, - "startColumn": 5, - "endLine": 22, - "endColumn": 9, - "ruleDescription": "Parameter Type must be valid", - "phase": "SCHEMA" + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 28502, + "startColumn": 7, + "endLine": 28502, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F2002", - "severity": "FATAL", - "message": "Parameter 'mySsmParam' has invalid Type 'AWS::SSM::Parameter::Value'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "mySsmParam", - "entityType": "Parameter" + "logicalId": "Resource288", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/mySsmParam/Type", - "category": "Parameter", - "startLine": 30, - "startColumn": 5, - "endLine": 30, - "endColumn": 9, - "ruleDescription": "Parameter Type must be valid", - "phase": "SCHEMA" + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 28503, + "startColumn": 7, + "endLine": 28503, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'allowedValuesNotAList': AllowedValues must be an array", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "allowedValuesNotAList", - "entityType": "Parameter" + "logicalId": "Resource288", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/allowedValuesNotAList/AllowedValues", - "category": "Parameter", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 18, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 28504, + "startColumn": 7, + "endLine": 28504, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'minValueIsNotNumber': MinValue must be a number", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "minValueIsNotNumber", - "entityType": "Parameter" + "logicalId": "Resource289", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/minValueIsNotNumber/MinValue", - "category": "Parameter", - "startLine": 13, - "startColumn": 5, - "endLine": 13, - "endColumn": 13, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 28601, + "startColumn": 7, + "endLine": 28601, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'notBooleanEcho': NoEcho must be a boolean", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "notBooleanEcho", - "entityType": "Parameter" + "logicalId": "Resource289", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/notBooleanEcho/NoEcho", - "category": "Parameter", - "startLine": 19, - "startColumn": 5, - "endLine": 19, - "endColumn": 11, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 28602, + "startColumn": 7, + "endLine": 28602, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'myInvalidParameter': 'Type' is a required property", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "myInvalidParameter", - "entityType": "Parameter" + "logicalId": "Resource289", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/myInvalidParameter", - "category": "Parameter", - "startLine": 25, - "startColumn": 3, - "endLine": 25, - "endColumn": 21, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 28603, + "startColumn": 7, + "endLine": 28603, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'myInvalidParameter': 'NotType' is not one of ['AllowedPattern', 'AllowedValues', 'ConstraintDescription', 'Default', 'Description', 'MaxLength', 'MinLength', 'MaxValue', 'MinValue', 'NoEcho', 'Type']", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "myInvalidParameter", - "entityType": "Parameter" + "logicalId": "Resource290", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/myInvalidParameter/NotType", - "category": "Parameter", - "startLine": 27, - "startColumn": 5, - "endLine": 27, - "endColumn": 12, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 28700, + "startColumn": 7, + "endLine": 28700, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'NullParameter': None is not of type 'object'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "NullParameter", - "entityType": "Parameter" + "logicalId": "Resource290", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/NullParameter", - "category": "Parameter", - "startLine": 34, - "startColumn": 3, - "endLine": 34, - "endColumn": 16, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 28701, + "startColumn": 7, + "endLine": 28701, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'NullParamType': Type must not be null", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "NullParamType", - "entityType": "Parameter" + "logicalId": "Resource290", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/NullParamType/Type", - "category": "Parameter", - "startLine": 36, - "startColumn": 5, - "endLine": 36, - "endColumn": 9, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 28702, + "startColumn": 7, + "endLine": 28702, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'NullParamDefault': Default must not be null", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "NullParamDefault", - "entityType": "Parameter" + "logicalId": "Resource291", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/NullParamDefault/Default", - "category": "Parameter", - "startLine": 39, - "startColumn": 5, - "endLine": 39, - "endColumn": 12, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 28799, + "startColumn": 7, + "endLine": 28799, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'NullParamDescription': Description must not be null", - "source": "CFN_LINT", + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "NullParamDescription", - "entityType": "Parameter" + "logicalId": "Resource291", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/NullParamDescription/Description", - "category": "Parameter", - "startLine": 42, - "startColumn": 5, - "endLine": 42, - "endColumn": 16, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 28800, + "startColumn": 7, + "endLine": 28800, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'NullParamMaxValue': MaxValue must not be null", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "NullParamMaxValue", - "entityType": "Parameter" + "logicalId": "Resource291", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/NullParamMaxValue/MaxValue", - "category": "Parameter", - "startLine": 45, - "startColumn": 5, - "endLine": 45, - "endColumn": 13, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 28801, + "startColumn": 7, + "endLine": 28801, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'NullParamMinValue': MinValue must not be null", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "NullParamMinValue", - "entityType": "Parameter" + "logicalId": "Resource292", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/NullParamMinValue/MinValue", - "category": "Parameter", - "startLine": 48, - "startColumn": 5, - "endLine": 48, - "endColumn": 13, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 28898, + "startColumn": 7, + "endLine": 28898, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'NullParamMaxLength': MaxLength must not be null", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "NullParamMaxLength", - "entityType": "Parameter" + "logicalId": "Resource292", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/NullParamMaxLength/MaxLength", - "category": "Parameter", - "startLine": 51, - "startColumn": 5, - "endLine": 51, - "endColumn": 14, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 28899, + "startColumn": 7, + "endLine": 28899, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'NullParamMinLength': MinLength must not be null", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "NullParamMinLength", - "entityType": "Parameter" + "logicalId": "Resource292", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/NullParamMinLength/MinLength", - "category": "Parameter", - "startLine": 54, - "startColumn": 5, - "endLine": 54, - "endColumn": 14, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 28900, + "startColumn": 7, + "endLine": 28900, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'NullParamNoEcho': NoEcho must not be null", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "NullParamNoEcho", - "entityType": "Parameter" + "logicalId": "Resource293", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/NullParamNoEcho/NoEcho", - "category": "Parameter", - "startLine": 57, - "startColumn": 5, - "endLine": 57, - "endColumn": 11, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 28997, + "startColumn": 7, + "endLine": 28997, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'allowedValuesNotAList' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "allowedValuesNotAList", - "entityType": "Parameter" + "logicalId": "Resource293", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/allowedValuesNotAList", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 24, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 28998, + "startColumn": 7, + "endLine": 28998, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'allowedValuesAListofBadTypes' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "allowedValuesAListofBadTypes", - "entityType": "Parameter" + "logicalId": "Resource293", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/allowedValuesAListofBadTypes", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 31, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 28999, + "startColumn": 7, + "endLine": 28999, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'minValueIsNotNumber' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "minValueIsNotNumber", - "entityType": "Parameter" + "logicalId": "Resource294", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/minValueIsNotNumber", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 11, - "startColumn": 3, - "endLine": 11, - "endColumn": 22, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 29096, + "startColumn": 7, + "endLine": 29096, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'maxLengthIsNotString' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "maxLengthIsNotString", - "entityType": "Parameter" + "logicalId": "Resource294", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/maxLengthIsNotString", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 14, - "startColumn": 3, - "endLine": 14, - "endColumn": 23, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 29097, + "startColumn": 7, + "endLine": 29097, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'notBooleanEcho' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "notBooleanEcho", - "entityType": "Parameter" + "logicalId": "Resource294", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/notBooleanEcho", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 17, - "startColumn": 3, - "endLine": 17, - "endColumn": 17, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 29098, + "startColumn": 7, + "endLine": 29098, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'myParameter' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "myParameter", - "entityType": "Parameter" + "logicalId": "Resource295", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/myParameter", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 20, - "startColumn": 3, - "endLine": 20, + "startLine": 29195, + "startColumn": 7, + "endLine": 29195, "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'myInvalidParameter' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "myInvalidParameter", - "entityType": "Parameter" + "logicalId": "Resource295", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/myInvalidParameter", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 25, - "startColumn": 3, - "endLine": 25, - "endColumn": 21, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 29196, + "startColumn": 7, + "endLine": 29196, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'mySsmParam' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "mySsmParam", - "entityType": "Parameter" + "logicalId": "Resource295", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/mySsmParam", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 28, - "startColumn": 3, - "endLine": 28, - "endColumn": 13, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 29197, + "startColumn": 7, + "endLine": 29197, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'NullParamType' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "NullParamType", - "entityType": "Parameter" + "logicalId": "Resource296", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/NullParamType", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 35, - "startColumn": 3, - "endLine": 35, - "endColumn": 16, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 29294, + "startColumn": 7, + "endLine": 29294, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'NullParamDefault' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "NullParamDefault", - "entityType": "Parameter" + "logicalId": "Resource296", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/NullParamDefault", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 37, - "startColumn": 3, - "endLine": 37, + "startLine": 29295, + "startColumn": 7, + "endLine": 29295, "endColumn": 19, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Resource296", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 29296, + "startColumn": 7, + "endLine": 29296, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'NullParamDescription' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "NullParamDescription", - "entityType": "Parameter" + "logicalId": "Resource297", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/NullParamDescription", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 40, - "startColumn": 3, - "endLine": 40, - "endColumn": 23, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 29393, + "startColumn": 7, + "endLine": 29393, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'NullParamMaxValue' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "NullParamMaxValue", - "entityType": "Parameter" + "logicalId": "Resource297", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/NullParamMaxValue", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 43, - "startColumn": 3, - "endLine": 43, - "endColumn": 20, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 29394, + "startColumn": 7, + "endLine": 29394, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'NullParamMinValue' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "NullParamMinValue", - "entityType": "Parameter" + "logicalId": "Resource297", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/NullParamMinValue", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 46, - "startColumn": 3, - "endLine": 46, - "endColumn": 20, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 29395, + "startColumn": 7, + "endLine": 29395, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'NullParamMaxLength' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "NullParamMaxLength", - "entityType": "Parameter" + "logicalId": "Resource298", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/NullParamMaxLength", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 49, - "startColumn": 3, - "endLine": 49, - "endColumn": 21, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 29492, + "startColumn": 7, + "endLine": 29492, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'NullParamMinLength' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "NullParamMinLength", - "entityType": "Parameter" + "logicalId": "Resource298", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/NullParamMinLength", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 52, - "startColumn": 3, - "endLine": 52, - "endColumn": 21, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 29493, + "startColumn": 7, + "endLine": 29493, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'NullParamNoEcho' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "NullParamNoEcho", - "entityType": "Parameter" + "logicalId": "Resource298", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Parameters/NullParamNoEcho", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 55, - "startColumn": 3, - "endLine": 55, - "endColumn": 18, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 29494, + "startColumn": 7, + "endLine": 29494, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "IamPipeline", + "logicalId": "Resource299", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 60, - "startColumn": 3, - "endLine": 60, + "startLine": 29591, + "startColumn": 7, + "endLine": 29591, "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "IamPipeline", + "logicalId": "Resource299", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 60, - "startColumn": 3, - "endLine": 60, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 29592, + "startColumn": 7, + "endLine": 29592, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'IamPipeline' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "IamPipeline", + "logicalId": "Resource299", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 62, - "startColumn": 5, - "endLine": 62, + "startLine": 29593, + "startColumn": 7, + "endLine": 29593, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" } ] }, - "bad/parameters/default.yaml": { - "filePath": "bad/parameters/default.yaml", + "bad/mappings/name.yaml": { + "filePath": "bad/mappings/name.yaml", "status": "OK", "metadata": { "resourcesScanned": 0, "counts": { - "fatal": 11, - "errors": 3, - "warnings": 9, + "fatal": 1, + "errors": 1, + "warnings": 1, "informational": 0, "debug": 0 }, @@ -73384,421 +71864,493 @@ "message": "Resources section must exist and be non-empty", "source": "SCHEMA", "category": "Structure", - "startLine": 61, + "startLine": 10, "startColumn": 1, - "endLine": 61, + "endLine": 10, "endColumn": 10, "ruleDescription": "Resources section must exist and be non-empty", "phase": "SCHEMA" }, { - "ruleId": "F2012", - "severity": "FATAL", - "message": "Parameter 'myAllowedValue' Default 'us-east-1a' is not in AllowedValues ['us-east-1b', 'us-east-1c', 'us-east-1d']", - "source": "SCHEMA", - "entity": { - "logicalId": "myAllowedValue", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/myAllowedValue/Default", - "category": "Parameter", - "startLine": 18, - "startColumn": 5, - "endLine": 18, - "endColumn": 12, - "ruleDescription": "Parameter Default must be in AllowedValues", - "phase": "SCHEMA" - }, - { - "ruleId": "F2012", - "severity": "FATAL", - "message": "Parameter 'CDLAllowedValues' Default 'three' is not in AllowedValues ['one', 'two', 'three,four']", - "source": "SCHEMA", - "entity": { - "logicalId": "CDLAllowedValues", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/CDLAllowedValues/Default", - "category": "Parameter", - "startLine": 47, - "startColumn": 5, - "endLine": 47, - "endColumn": 12, - "ruleDescription": "Parameter Default must be in AllowedValues", - "phase": "SCHEMA" - }, - { - "ruleId": "F2012", - "severity": "FATAL", - "message": "Parameter 'CDLAllowedValuesWithSpaces' Default 'four' is not in AllowedValues ['one', 'two', 'three, four']", - "source": "SCHEMA", - "entity": { - "logicalId": "CDLAllowedValuesWithSpaces", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/CDLAllowedValuesWithSpaces/Default", - "category": "Parameter", - "startLine": 56, - "startColumn": 5, - "endLine": 56, - "endColumn": 12, - "ruleDescription": "Parameter Default must be in AllowedValues", - "phase": "SCHEMA" - }, - { - "ruleId": "F2012", - "severity": "FATAL", - "message": "Parameter 'CDLAllowedValuesWithSpaces' Default 'three' is not in AllowedValues ['one', 'two', 'three, four']", - "source": "SCHEMA", - "entity": { - "logicalId": "CDLAllowedValuesWithSpaces", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/CDLAllowedValuesWithSpaces/Default", - "category": "Parameter", - "startLine": 56, - "startColumn": 5, - "endLine": 56, - "endColumn": 12, - "ruleDescription": "Parameter Default must be in AllowedValues", - "phase": "SCHEMA" - }, - { - "ruleId": "F2015", - "severity": "FATAL", - "message": "Parameter 'myAllowedPattern' Default 'vpc!@#$' does not match AllowedPattern '^[a-zA-Z0-9]*$'", - "source": "SCHEMA", - "entity": { - "logicalId": "myAllowedPattern", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/myAllowedPattern/Default", - "category": "Parameter", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 12, - "ruleDescription": "Default value is within parameter constraints", - "phase": "SCHEMA" - }, - { - "ruleId": "F2015", - "severity": "FATAL", - "message": "Parameter 'myMinValue' Default 0 is less than MinValue 1", - "source": "SCHEMA", + "ruleId": "E7001", + "severity": "ERROR", + "message": "Mapping name 'Bad.Name' does not match format '^[a-zA-Z0-9]+$'", + "source": "CFN_LINT", "entity": { - "logicalId": "myMinValue", - "entityType": "Parameter" + "logicalId": "Bad.Name", + "entityType": "Mapping" }, - "propertyPath": "Parameters/myMinValue/Default", - "category": "Parameter", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 12, - "ruleDescription": "Default value is within parameter constraints", - "phase": "SCHEMA" + "propertyPath": "Mappings/Bad.Name", + "category": "Structure", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Mappings are appropriately configured", + "phase": "LINT" }, { - "ruleId": "F2015", - "severity": "FATAL", - "message": "Parameter 'myMaxValue' Default 1 exceeds MaxValue 0", - "source": "SCHEMA", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Bad.Name' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "myMaxValue", - "entityType": "Parameter" + "logicalId": "Bad.Name", + "entityType": "Mapping" }, - "propertyPath": "Parameters/myMaxValue/Default", - "category": "Parameter", - "startLine": 14, - "startColumn": 5, - "endLine": 14, - "endColumn": 12, - "ruleDescription": "Default value is within parameter constraints", - "phase": "SCHEMA" + "propertyPath": "Mappings/Bad.Name", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Check if Mappings are Used", + "phase": "LINT" + } + ] + }, + "bad/mappings/used.yaml": { + "filePath": "bad/mappings/used.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 1, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "F2015", - "severity": "FATAL", - "message": "Parameter 'myMinLength' Default length 3 is less than MinLength 5", - "source": "SCHEMA", + "ruleId": "E1151", + "severity": "ERROR", + "message": "'vpc-123456' does not match format 'AWS::EC2::VPC.Id'", + "source": "CFN_LINT", "entity": { - "logicalId": "myMinLength", - "entityType": "Parameter" + "logicalId": "mySubnet", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Parameters/myMinLength/Default", - "category": "Parameter", - "startLine": 25, - "startColumn": 5, - "endLine": 25, + "propertyPath": "Properties.VpcId", + "category": "Intrinsic Function", + "startLine": 18, + "startColumn": 7, + "endLine": 18, "endColumn": 12, - "ruleDescription": "Default value is within parameter constraints", - "phase": "SCHEMA" + "ruleDescription": "Validate VPC id format", + "phase": "SCHEMA", + "context": { + "actualValue": "vpc-123456" + } }, { - "ruleId": "F2015", - "severity": "FATAL", - "message": "Parameter 'myMaxLength' Default length 3 exceeds MaxLength 1", - "source": "SCHEMA", + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'Environment' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "myMaxLength", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/myMaxLength/Default", - "category": "Parameter", - "startLine": 29, - "startColumn": 5, - "endLine": 29, - "endColumn": 12, - "ruleDescription": "Default value is within parameter constraints", - "phase": "SCHEMA" + "logicalId": "Environment", + "entityType": "Mapping" + }, + "propertyPath": "Mappings/Environment", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 14, + "ruleDescription": "Check if Mappings are Used", + "phase": "LINT" }, { - "ruleId": "F2015", - "severity": "FATAL", - "message": "Parameter 'CDLAllowedPattern' Default does not match AllowedPattern '[a-z]*$'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CDLAllowedPattern", - "entityType": "Parameter" + "logicalId": "mySubnet", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Parameters/CDLAllowedPattern/Default", - "category": "Parameter", - "startLine": 42, - "startColumn": 5, - "endLine": 42, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 18, + "startColumn": 7, + "endLine": 18, "endColumn": 12, - "ruleDescription": "Default value is within parameter constraints", - "phase": "SCHEMA" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'MyEmptyDefault': Default must be a string", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyEmptyDefault", - "entityType": "Parameter" + "logicalId": "mySubnet", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Parameters/MyEmptyDefault/Default", - "category": "Parameter", - "startLine": 33, - "startColumn": 5, - "endLine": 33, - "endColumn": 12, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 20, + "startColumn": 7, + "endLine": 20, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'MyRefDefault': Type must be a string", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'mySubnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyRefDefault", - "entityType": "Parameter" + "logicalId": "mySubnet", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Parameters/MyRefDefault/Type", - "category": "Parameter", - "startLine": 35, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 17, "startColumn": 5, - "endLine": 35, - "endColumn": 9, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" + "endLine": 17, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/module_with_tags.yaml": { + "filePath": "bad/module_with_tags.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "E2001", + "ruleId": "E5001", "severity": "ERROR", - "message": "Parameter 'MyRefDefault': Default must be a string", + "message": "Tags is not permitted within Module resource 'Mod'", "source": "CFN_LINT", "entity": { - "logicalId": "MyRefDefault", - "entityType": "Parameter" + "logicalId": "Mod", + "entityType": "Resource", + "resourceType": "MyCompany::Testing::MODULE" }, - "propertyPath": "Parameters/MyRefDefault/Default", - "category": "Parameter", - "startLine": 36, - "startColumn": 5, - "endLine": 36, - "endColumn": 12, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" + "propertyPath": "Properties.Tags", + "category": "Structure", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 11, + "ruleDescription": "Check that Modules resources are valid", + "phase": "LINT" + } + ] + }, + "bad/modules/bad_has_create_policy.yaml": { + "filePath": "bad/modules/bad_has_create_policy.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'myAllowedPattern' is not referenced anywhere in the template", + "ruleId": "E3055", + "severity": "ERROR", + "message": "CreationPolicy is not supported on resource type 'My::Organization::Custom::MODULE'", "source": "CFN_LINT", "entity": { - "logicalId": "myAllowedPattern", - "entityType": "Parameter" + "logicalId": "MyModule", + "entityType": "Resource", + "resourceType": "My::Organization::Custom::MODULE" }, - "propertyPath": "Parameters/myAllowedPattern", - "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, + "propertyPath": "CreationPolicy", + "suggestedFix": "Remove CreationPolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::CloudFormation::WaitCondition, AWS::EC2::Instance", + "category": "Resource", + "startLine": 6, + "startColumn": 5, + "endLine": 6, "endColumn": 19, - "ruleDescription": "Check if Parameters are Used", + "ruleDescription": "Check CreationPolicy values for Resources", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'myMinValue' is not referenced anywhere in the template", + "ruleId": "E5001", + "severity": "ERROR", + "message": "CreationPolicy is not permitted within Module resource 'MyModule'", "source": "CFN_LINT", "entity": { - "logicalId": "myMinValue", - "entityType": "Parameter" + "logicalId": "MyModule", + "entityType": "Resource", + "resourceType": "My::Organization::Custom::MODULE" }, - "propertyPath": "Parameters/myMinValue", - "category": "Best Practice", - "startLine": 8, - "startColumn": 3, - "endLine": 8, - "endColumn": 13, - "ruleDescription": "Check if Parameters are Used", + "propertyPath": "CreationPolicy", + "category": "Structure", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 19, + "ruleDescription": "Check that Modules resources are valid", "phase": "LINT" + } + ] + }, + "bad/modules/bad_has_tags.yaml": { + "filePath": "bad/modules/bad_has_tags.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'myMaxValue' is not referenced anywhere in the template", + "ruleId": "E5001", + "severity": "ERROR", + "message": "Tags is not permitted within Module resource 'IamRoleModule'", "source": "CFN_LINT", "entity": { - "logicalId": "myMaxValue", - "entityType": "Parameter" + "logicalId": "IamRoleModule", + "entityType": "Resource", + "resourceType": "Some::IAM::Role::MODULE" }, - "propertyPath": "Parameters/myMaxValue", - "category": "Best Practice", - "startLine": 12, - "startColumn": 3, - "endLine": 12, - "endColumn": 13, - "ruleDescription": "Check if Parameters are Used", + "propertyPath": "Properties.Tags", + "category": "Structure", + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 11, + "ruleDescription": "Check that Modules resources are valid", "phase": "LINT" + } + ] + }, + "bad/modules/bad_has_update_policy.yaml": { + "filePath": "bad/modules/bad_has_update_policy.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'myAllowedValue' is not referenced anywhere in the template", + "ruleId": "E3016", + "severity": "ERROR", + "message": "UpdatePolicy is not supported on resource type 'My::Organization::Custom::MODULE'", "source": "CFN_LINT", "entity": { - "logicalId": "myAllowedValue", - "entityType": "Parameter" + "logicalId": "MyModule", + "entityType": "Resource", + "resourceType": "My::Organization::Custom::MODULE" }, - "propertyPath": "Parameters/myAllowedValue", - "category": "Best Practice", - "startLine": 16, - "startColumn": 3, - "endLine": 16, + "propertyPath": "UpdatePolicy", + "suggestedFix": "Remove UpdatePolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::ElastiCache::ReplicationGroup, AWS::Elasticsearch::Domain, AWS::Lambda::Alias, AWS::OpenSearchService::Domain", + "category": "Resource", + "startLine": 5, + "startColumn": 5, + "endLine": 5, "endColumn": 17, - "ruleDescription": "Check if Parameters are Used", + "ruleDescription": "Check UpdatePolicy values for Resources", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'MyEmptyDefault' is not referenced anywhere in the template", + "ruleId": "E5001", + "severity": "ERROR", + "message": "UpdatePolicy is not permitted within Module resource 'MyModule'", "source": "CFN_LINT", "entity": { - "logicalId": "MyEmptyDefault", - "entityType": "Parameter" + "logicalId": "MyModule", + "entityType": "Resource", + "resourceType": "My::Organization::Custom::MODULE" }, - "propertyPath": "Parameters/MyEmptyDefault", - "category": "Best Practice", - "startLine": 31, - "startColumn": 3, - "endLine": 31, + "propertyPath": "UpdatePolicy", + "category": "Structure", + "startLine": 5, + "startColumn": 5, + "endLine": 5, "endColumn": 17, - "ruleDescription": "Check if Parameters are Used", + "ruleDescription": "Check that Modules resources are valid", "phase": "LINT" + } + ] + }, + "bad/modules/bad_uses_module_metadata.yaml": { + "filePath": "bad/modules/bad_uses_module_metadata.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "bad/noecho.yaml": { + "filePath": "bad/noecho.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W2001", + "ruleId": "W2010", "severity": "WARN", - "message": "Parameter 'MyRefDefault' is not referenced anywhere in the template", + "message": "Don't use 'NoEcho' parameter 'NoEchoParam' in resource metadata", "source": "CFN_LINT", "entity": { - "logicalId": "MyRefDefault", - "entityType": "Parameter" + "logicalId": "SNSTopicWithSecretNameInRef", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Parameters/MyRefDefault", - "category": "Best Practice", - "startLine": 34, - "startColumn": 3, - "endLine": 34, - "endColumn": 15, - "ruleDescription": "Check if Parameters are Used", + "propertyPath": "Metadata.NoEchoParamInMetadata", + "suggestedFix": "Move the parameter reference out of Metadata or remove NoEcho", + "category": "Security", + "startLine": 13, + "startColumn": 7, + "endLine": 13, + "endColumn": 28, + "ruleDescription": "NoEcho parameters are not masked when used in Metadata and Outputs", "phase": "LINT" }, { - "ruleId": "W2001", + "ruleId": "W2010", "severity": "WARN", - "message": "Parameter 'CDLAllowedPattern' is not referenced anywhere in the template", + "message": "Don't use 'NoEcho' parameter 'NoEchoParam' in resource metadata", "source": "CFN_LINT", "entity": { - "logicalId": "CDLAllowedPattern", - "entityType": "Parameter" + "logicalId": "SNSTopicWithSecretNameInSub", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Parameters/CDLAllowedPattern", - "category": "Best Practice", - "startLine": 37, - "startColumn": 3, - "endLine": 37, - "endColumn": 20, - "ruleDescription": "Check if Parameters are Used", + "propertyPath": "Metadata.NoEchoParamInMetadata", + "suggestedFix": "Move the parameter reference out of Metadata or remove NoEcho", + "category": "Security", + "startLine": 19, + "startColumn": 7, + "endLine": 19, + "endColumn": 28, + "ruleDescription": "NoEcho parameters are not masked when used in Metadata and Outputs", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'CDLAllowedValues' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SNSTopicWithSecretNameInRef' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "CDLAllowedValues", - "entityType": "Parameter" + "logicalId": "SNSTopicWithSecretNameInRef", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Parameters/CDLAllowedValues", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 43, - "startColumn": 3, - "endLine": 43, - "endColumn": 19, - "ruleDescription": "Check if Parameters are Used", + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'CDLAllowedValuesWithSpaces' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SNSTopicWithSecretNameInSub' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "CDLAllowedValuesWithSpaces", - "entityType": "Parameter" + "logicalId": "SNSTopicWithSecretNameInSub", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Parameters/CDLAllowedValuesWithSpaces", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 52, - "startColumn": 3, - "endLine": 52, - "endColumn": 29, - "ruleDescription": "Check if Parameters are Used", + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/pipeline_no_source_first_stage.yaml": { - "filePath": "bad/pipeline_no_source_first_stage.yaml", + "bad/not_cloudformation.yaml": { + "filePath": "bad/not_cloudformation.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 0, "counts": { "fatal": 2, - "errors": 1, - "warnings": 2, - "informational": 2, + "errors": 0, + "warnings": 0, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -73807,163 +72359,199 @@ }, "diagnostics": [ { - "ruleId": "F3014", + "ruleId": "F0001", "severity": "FATAL", - "message": "Exactly one of ['ArtifactStore', 'ArtifactStores'] must be specified", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" + }, + { + "ruleId": "F0005", + "severity": "FATAL", + "message": "'NotEven' is not a valid top-level template section", "source": "SCHEMA", + "propertyPath": "NotEven", + "category": "Structure", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 8, + "ruleDescription": "Top-level keys must be valid section names", + "phase": "SCHEMA" + } + ] + }, + "bad/opensearch_instance_type.yaml": { + "filePath": "bad/opensearch_instance_type.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 7, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3653", + "severity": "ERROR", + "message": "'fake.invalid.search' is not valid in any region", + "source": "CFN_LINT", "entity": { - "logicalId": "Pipeline", + "logicalId": "BadDomain", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::OpenSearchService::Domain" }, - "propertyPath": "Properties", - "category": "Schema", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", - "ruleDescription": "Exactly one of properties required (requiredXor)", - "phase": "SCHEMA" + "propertyPath": "Properties.ClusterConfig.InstanceType", + "category": "Resource", + "startLine": 8, + "startColumn": 9, + "endLine": 8, + "endColumn": 21, + "ruleDescription": "Validate OpenSearch domain cluster instance type", + "phase": "LINT" }, { - "ruleId": "F3032", - "severity": "FATAL", - "message": "expected minimum item count: 2, found: 1", - "source": "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": "Pipeline", + "logicalId": "BadDomain", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::OpenSearchService::Domain" }, - "propertyPath": "Properties.Stages", - "category": "Schema", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", - "ruleDescription": "Array item count out of bounds", - "phase": "SCHEMA", - "context": { - "extra": { - "actual_count": 1, - "min_items": 2 - } - } + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "E3700", - "severity": "ERROR", - "message": "First stage of a pipeline must contain at least one Source action", + "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": "Pipeline", + "logicalId": "BadDomain", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::OpenSearchService::Domain" }, - "propertyPath": "Properties.Stages[0]", - "suggestedFix": "Add an action with ActionTypeId.Category=Source to the first stage", - "category": "Resource", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Validate CodePipeline Source actions are only in the first stage", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", - "source": "ENGINE", + "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": "Pipeline", + "logicalId": "ValidDomain", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::OpenSearchService::Domain" }, - "propertyPath": "Properties.RoleArn", "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, + "startLine": 9, + "startColumn": 3, + "endLine": 9, "endColumn": 14, - "ruleDescription": "Hardcoded ARN property", + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", + "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": "Pipeline", + "logicalId": "ValidDomain", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::OpenSearchService::Domain" }, - "category": "Security", - "startLine": 3, + "category": "Best Practice", + "startLine": 9, "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Hardcoded account ID in ARN", + "endLine": 9, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9003", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BadDomain' of type 'AWS::OpenSearchService::Domain' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Pipeline", + "logicalId": "BadDomain", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::OpenSearchService::Domain" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 6, - "startColumn": 7, + "startColumn": 5, "endLine": 6, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Pipeline' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured", + "message": "Resource 'ValidDomain' of type 'AWS::OpenSearchService::Domain' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Pipeline", + "logicalId": "ValidDomain", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::OpenSearchService::Domain" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 11, "startColumn": 5, - "endLine": 5, + "endLine": 11, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/previous_gen_instance.yaml": { - "filePath": "bad/previous_gen_instance.yaml", + "bad/output_invalid_references.yaml": { + "filePath": "bad/output_invalid_references.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 0, + "fatal": 2, "errors": 0, - "warnings": 1, - "informational": 5, + "warnings": 0, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -73972,131 +72560,198 @@ }, "diagnostics": [ { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", - "source": "ENGINE", + "ruleId": "F6101", + "severity": "FATAL", + "message": "'NotARealAttribute' is not one of ['Arn', 'DomainName', 'DualStackDomainName', 'MetadataConfiguration.AnnotationTableConfiguration.TableArn', 'MetadataConfiguration.AnnotationTableConfiguration.TableName', 'MetadataConfiguration.Destination', 'MetadataConfiguration.InventoryTableConfiguration.TableArn', 'MetadataConfiguration.InventoryTableConfiguration.TableName', 'MetadataConfiguration.JournalTableConfiguration.TableArn', 'MetadataConfiguration.JournalTableConfiguration.TableName', 'MetadataTableConfiguration.S3TablesDestination.TableArn', 'MetadataTableConfiguration.S3TablesDestination.TableNamespace', 'RegionalDomainName', 'WebsiteURL']", + "source": "SCHEMA", "entity": { - "logicalId": "Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "InvalidAttribute", + "entityType": "Output" }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", - "phase": "LINT" + "propertyPath": "Outputs/InvalidAttribute/Value.Fn::GetAtt.1", + "category": "Structure", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 19, + "ruleDescription": "Output value must be a string", + "phase": "SCHEMA" }, { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'm1.small' - consider upgrading", - "source": "CFN_LINT", + "ruleId": "F6101", + "severity": "FATAL", + "message": "Fn::Sub variable '${MissingTarget}' does not reference a valid resource, parameter, or pseudo-parameter", + "source": "SCHEMA", "entity": { - "logicalId": "Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "UnresolvedSubVariable", + "entityType": "Output" }, - "propertyPath": "Properties.InstanceType", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 19, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" + "propertyPath": "Outputs/UnresolvedSubVariable/Value.Fn::Sub", + "category": "Structure", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 24, + "ruleDescription": "Output value must be a string", + "phase": "SCHEMA" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Instance", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/output_invalid_targets.yaml": { + "filePath": "bad/output_invalid_targets.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 5, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F6101", + "severity": "FATAL", + "message": "Ref 'DoesNotExist' does not reference a valid resource, parameter, or pseudo-parameter", + "source": "SCHEMA", + "propertyPath": "Outputs.MissingRef.Value.Ref", + "category": "Structure", + "startLine": 5, + "startColumn": 16, + "endLine": 5, + "endColumn": 21, + "ruleDescription": "Output value must be a string", + "phase": "PARSE" + }, + { + "ruleId": "F6101", + "severity": "FATAL", + "message": "GetAtt 'DoesNotExist.Arn' references a resource that does not exist", + "source": "SCHEMA", + "entity": { + "logicalId": "MissingGetAtt", + "entityType": "Output" + }, + "propertyPath": "Outputs/MissingGetAtt/Value.Fn::GetAtt.0", + "category": "Structure", "startLine": 6, - "startColumn": 7, + "startColumn": 3, "endLine": 6, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endColumn": 16, + "ruleDescription": "Output value must be a string", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F6101", + "severity": "FATAL", + "message": "Fn::Sub variable '${DoesNotExist}' does not reference a valid resource, parameter, or pseudo-parameter", + "source": "SCHEMA", "entity": { - "logicalId": "Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "MissingSubRef", + "entityType": "Output" }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", + "propertyPath": "Outputs/MissingSubRef/Value.Fn::Sub", + "category": "Structure", "startLine": 7, - "startColumn": 7, + "startColumn": 3, "endLine": 7, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endColumn": 16, + "ruleDescription": "Output value must be a string", + "phase": "SCHEMA" }, { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" + "ruleId": "F6101", + "severity": "FATAL", + "message": "Fn::Sub variable '${DoesNotExist.Arn}' does not reference a valid resource, parameter, or pseudo-parameter", + "source": "SCHEMA", + "entity": { + "logicalId": "MissingSubGetAtt", + "entityType": "Output" + }, + "propertyPath": "Outputs/MissingSubGetAtt/Value.Fn::Sub", + "category": "Structure", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 19, + "ruleDescription": "Output value must be a string", + "phase": "SCHEMA" + }, + { + "ruleId": "F6101", + "severity": "FATAL", + "message": "'DoesNotExist' is not one of ['Arn', 'DomainName', 'DualStackDomainName', 'MetadataConfiguration.AnnotationTableConfiguration.TableArn', 'MetadataConfiguration.AnnotationTableConfiguration.TableName', 'MetadataConfiguration.Destination', 'MetadataConfiguration.InventoryTableConfiguration.TableArn', 'MetadataConfiguration.InventoryTableConfiguration.TableName', 'MetadataConfiguration.JournalTableConfiguration.TableArn', 'MetadataConfiguration.JournalTableConfiguration.TableName', 'MetadataTableConfiguration.S3TablesDestination.TableArn', 'MetadataTableConfiguration.S3TablesDestination.TableNamespace', 'RegionalDomainName', 'WebsiteURL']", + "source": "SCHEMA", + "entity": { + "logicalId": "InvalidExistingAttribute", + "entityType": "Output" + }, + "propertyPath": "Outputs/InvalidExistingAttribute/Value.Fn::GetAtt.1", + "category": "Structure", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 27, + "ruleDescription": "Output value must be a string", + "phase": "SCHEMA" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Instance", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/previous_generation_instances.yaml": { - "filePath": "bad/previous_generation_instances.yaml", + "bad/output_value_not_string.yaml": { + "filePath": "bad/output_value_not_string.yaml", "status": "OK", "metadata": { - "resourcesScanned": 6, + "resourcesScanned": 1, "counts": { - "fatal": 1, - "errors": 2, + "fatal": 7, + "errors": 0, "warnings": 0, - "informational": 23, + "informational": 4, "debug": 0 }, "suppressed": 0, @@ -74105,139 +72760,130 @@ }, "diagnostics": [ { - "ruleId": "F3003", + "ruleId": "F6101", "severity": "FATAL", - "message": "'AvailabilityZone' is a required property", + "message": "Output 'ValueIsList' value must be a string, not a list", "source": "SCHEMA", "entity": { - "logicalId": "Host", - "entityType": "Resource", - "resourceType": "AWS::EC2::Host" + "logicalId": "ValueIsList", + "entityType": "Output" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'AvailabilityZone'", - "category": "Schema", - "startLine": 26, + "propertyPath": "Outputs/ValueIsList/Value", + "category": "Structure", + "startLine": 17, "startColumn": 5, - "endLine": 26, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "endLine": 17, + "endColumn": 10, + "ruleDescription": "Output value must be a string", + "phase": "PARSE" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-abc' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "F6101", + "severity": "FATAL", + "message": "Output 'ValueIsObject' value must be a string, not an object", + "source": "SCHEMA", "entity": { - "logicalId": "Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "ValueIsObject", + "entityType": "Output" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-abc" - } + "propertyPath": "Outputs/ValueIsObject/Value", + "category": "Structure", + "startLine": 21, + "startColumn": 5, + "endLine": 21, + "endColumn": 10, + "ruleDescription": "Output value must be a string", + "phase": "PARSE" }, { - "ruleId": "E3647", - "severity": "ERROR", - "message": "'cache.r3.large' is not valid in any region", - "source": "CFN_LINT", + "ruleId": "F6101", + "severity": "FATAL", + "message": "Output 'ValueIsGetAZs' value must be a string, not a list", + "source": "SCHEMA", "entity": { - "logicalId": "CacheCluster", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::CacheCluster" + "logicalId": "ValueIsGetAZs", + "entityType": "Output" }, - "propertyPath": "Properties.CacheNodeType", - "category": "Resource", - "startLine": 16, - "startColumn": 7, - "endLine": 16, - "endColumn": 20, - "ruleDescription": "Validate ElastiCache cluster cache node type", - "phase": "LINT" + "propertyPath": "Outputs/ValueIsGetAZs/Value", + "category": "Structure", + "startLine": 24, + "startColumn": 5, + "endLine": 24, + "endColumn": 10, + "ruleDescription": "Output value must be a string", + "phase": "PARSE" }, { - "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": "Domain", - "entityType": "Resource", - "resourceType": "AWS::Elasticsearch::Domain" - }, - "category": "Best Practice", - "startLine": 2, - "startColumn": 3, - "endLine": 2, - "endColumn": 9, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "ruleId": "F6101", + "severity": "FATAL", + "message": "Output 'ValueIsSplit' value must be a string, not a list", + "source": "SCHEMA", + "entity": { + "logicalId": "ValueIsSplit", + "entityType": "Output" + }, + "propertyPath": "Outputs/ValueIsSplit/Value", + "category": "Structure", + "startLine": 26, + "startColumn": 5, + "endLine": 26, + "endColumn": 10, + "ruleDescription": "Output value must be a string", + "phase": "PARSE" }, { - "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", + "ruleId": "F6101", + "severity": "FATAL", + "message": "Output 'ValueIsCidr' value must be a string, not a list", + "source": "SCHEMA", "entity": { - "logicalId": "Domain", - "entityType": "Resource", - "resourceType": "AWS::Elasticsearch::Domain" + "logicalId": "ValueIsCidr", + "entityType": "Output" }, - "category": "Best Practice", - "startLine": 2, - "startColumn": 3, - "endLine": 2, - "endColumn": 9, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Outputs/ValueIsCidr/Value", + "category": "Structure", + "startLine": 28, + "startColumn": 5, + "endLine": 28, + "endColumn": 10, + "ruleDescription": "Output value must be a string", + "phase": "PARSE" }, { - "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", + "ruleId": "F6101", + "severity": "FATAL", + "message": "Output 'ConditionalListBranch' value must be a string, not a list", + "source": "SCHEMA", "entity": { - "logicalId": "DBInstance", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "ConditionalListBranch", + "entityType": "Output" }, - "category": "Best Practice", - "startLine": 9, - "startColumn": 3, - "endLine": 9, - "endColumn": 13, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Outputs/ConditionalListBranch/Value/Fn::If/1", + "category": "Structure", + "startLine": 30, + "startColumn": 25, + "endLine": 30, + "endColumn": 26, + "ruleDescription": "Output value must be a string", + "phase": "PARSE" }, { - "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", + "ruleId": "F6101", + "severity": "FATAL", + "message": "Output 'ConditionalListBranch' value must be a string, not a list", + "source": "SCHEMA", "entity": { - "logicalId": "DBInstance", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "ConditionalListBranch", + "entityType": "Output" }, - "category": "Best Practice", - "startLine": 9, - "startColumn": 3, - "endLine": 9, - "endColumn": 13, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Outputs/ConditionalListBranch/Value/Fn::If/2", + "category": "Structure", + "startLine": 30, + "startColumn": 35, + "endLine": 30, + "endColumn": 36, + "ruleDescription": "Output value must be a string", + "phase": "PARSE" }, { "ruleId": "I3011", @@ -74245,15 +72891,15 @@ "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": "CacheCluster", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::CacheCluster" + "resourceType": "AWS::SQS::Queue" }, "category": "Best Practice", "startLine": 13, "startColumn": 3, "endLine": 13, - "endColumn": 15, + "endColumn": 8, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -74263,155 +72909,140 @@ "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": "CacheCluster", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::CacheCluster" + "resourceType": "AWS::SQS::Queue" }, "category": "Best Practice", "startLine": 13, "startColumn": 3, "endLine": 13, - "endColumn": 15, + "endColumn": 8, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I3013", "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)", + "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": "Domain2", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::Elasticsearch::Domain" + "resourceType": "AWS::SQS::Queue" }, + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 19, + "startLine": 13, "startColumn": 3, - "endLine": 19, - "endColumn": 10, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 13, + "endColumn": 8, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'Queue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Domain2", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::Elasticsearch::Domain" + "resourceType": "AWS::SQS::Queue" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 19, + "startLine": 13, "startColumn": 3, - "endLine": 19, - "endColumn": 10, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 13, + "endColumn": 8, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/override/complete.yaml": { + "filePath": "bad/override/complete.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 1, + "errors": 1, + "warnings": 1, + "informational": 7, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'm1.small' - consider upgrading", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'SpotFleetRequestConfigData' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Instance", + "logicalId": "mySpotFleet", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SpotFleet" }, - "propertyPath": "Properties.InstanceType", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 19, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'SpotFleetRequestConfigData'", + "category": "Schema", + "startLine": 20, + "startColumn": 3, + "endLine": 20, + "endColumn": 14, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'db.t1.micro' - consider upgrading", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-123456' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "DBInstance", + "logicalId": "untaggedInstance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 12, + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 14, "startColumn": 7, - "endLine": 12, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" + "endLine": 14, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-123456" + } }, { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", + "ruleId": "W3045", + "severity": "WARN", + "message": "AccessControl property is deprecated. Use bucket policies instead", "source": "CFN_LINT", "entity": { - "logicalId": "CacheCluster", + "logicalId": "myS3Bucket", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::CacheCluster" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.CacheNodeType", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 16, + "propertyPath": "Properties.AccessControl", + "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", + "category": "Deprecation", + "startLine": 10, "startColumn": 7, - "endLine": 16, + "endLine": 10, "endColumn": 20, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" - }, - { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'm3.medium.elasticsearch' - consider upgrading", - "source": "CFN_LINT", - "entity": { - "logicalId": "Domain2", - "entityType": "Resource", - "resourceType": "AWS::Elasticsearch::Domain" - }, - "propertyPath": "Properties.ElasticsearchClusterConfig.InstanceType", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 23, - "startColumn": 9, - "endLine": 23, - "endColumn": 21, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", + "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", + "phase": "LINT", "context": { - "lifecycle": "conditional-create-only" + "actualValue": "Private" } }, { @@ -74420,15 +73051,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Instance", + "logicalId": "untaggedInstance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 8, + "startLine": 14, "startColumn": 7, - "endLine": 8, + "endLine": 14, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -74440,153 +73071,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CacheCluster", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::CacheCluster" - }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Host", + "logicalId": "VPC", "entityType": "Resource", - "resourceType": "AWS::EC2::Host" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 27, - "startColumn": 7, - "endLine": 27, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 18, + "startColumn": 9, + "endLine": 18, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Domain' of type 'AWS::Elasticsearch::Domain' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Domain", - "entityType": "Resource", - "resourceType": "AWS::Elasticsearch::Domain" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 2, - "startColumn": 3, - "endLine": 2, - "endColumn": 9, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DBInstance' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "DBInstance", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 11, - "startColumn": 5, - "endLine": 11, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CacheCluster' of type 'AWS::ElastiCache::CacheCluster' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CacheCluster", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::CacheCluster" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 15, - "startColumn": 5, - "endLine": 15, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Domain2' of type 'AWS::Elasticsearch::Domain' supports Tags but none are configured", + "message": "Resource 'myS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Domain2", + "logicalId": "myS3Bucket", "entityType": "Resource", - "resourceType": "AWS::Elasticsearch::Domain" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 21, + "startLine": 8, "startColumn": 5, - "endLine": 21, + "endLine": 8, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -74594,278 +73113,235 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Host' of type 'AWS::EC2::Host' supports Tags but none are configured", + "message": "Resource 'untaggedInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Host", + "logicalId": "untaggedInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::Host" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 26, + "startLine": 13, "startColumn": 5, - "endLine": 26, + "endLine": 13, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/properties_ebs.yaml": { - "filePath": "bad/properties_ebs.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 1, - "errors": 3, - "warnings": 6, - "informational": 14, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F3034", - "severity": "FATAL", - "message": "10 is less than the minimum of 100", - "source": "SCHEMA", - "entity": { - "logicalId": "MyLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", - "category": "Schema", - "startLine": 50, - "startColumn": 13, - "endLine": 50, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Numeric value out of bounds", - "phase": "SCHEMA", - "context": { - "actualValue": 10 - } - }, - { - "ruleId": "E3671", - "severity": "ERROR", - "message": "0 is less than the minimum of 100", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyEC2Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", - "category": "Resource", - "startLine": 17, - "startColumn": 13, - "endLine": 17, - "endColumn": 17, - "ruleDescription": "Validate block device mapping configuration", - "phase": "LINT" - }, - { - "ruleId": "E3671", - "severity": "ERROR", - "message": "10 is less than the minimum of 100", - "source": "CFN_LINT", + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'VPC' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyLaunchConfig", + "logicalId": "VPC", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", - "category": "Resource", - "startLine": 50, - "startColumn": 13, - "endLine": 50, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 17, + "startColumn": 7, + "endLine": 17, "endColumn": 17, - "ruleDescription": "Validate block device mapping configuration", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E3715", - "severity": "ERROR", - "message": "'ephemeralA' is not a valid ephemeral device name. Expected format is 'ephemeralN' where N is 0-23", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'mySpotFleet' of type 'AWS::EC2::SpotFleet' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance3", + "logicalId": "mySpotFleet", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::SpotFleet" }, - "propertyPath": "Properties.BlockDeviceMappings.0.VirtualName", - "category": "Resource", - "startLine": 36, - "startColumn": 9, - "endLine": 36, - "endColumn": 20, - "ruleDescription": "VirtualName must use ephemeral device format when Ebs is absent", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 20, + "startColumn": 3, + "endLine": 20, + "endColumn": 14, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3030", - "severity": "WARN", - "message": "'magnetic' is not one of ['gp2', 'gp3', 'io1', 'io2', 'sc1', 'st1', 'standard']", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'mySnsTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "mySnsTopic", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.BlockDeviceMappings.1.Ebs.VolumeType", - "category": "Schema", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", "startLine": 23, - "startColumn": 13, + "startColumn": 3, "endLine": 23, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Value not in allowed enum", - "phase": "SCHEMA", - "context": { - "actualValue": "magnetic" - } + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/override/exclude.yaml": { + "filePath": "bad/override/exclude.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W3671", - "severity": "WARN", - "message": "Iops is ignored when VolumeType is 'standard'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myGameLift' of type 'AWS::GameLift::Alias' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyLaunchConfig", + "logicalId": "myGameLift", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::GameLift::Alias" }, - "propertyPath": "Properties.BlockDeviceMappings.1.Ebs.Iops", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 57, - "startColumn": 13, - "endLine": 57, - "endColumn": 17, - "ruleDescription": "Iops is ignored for certain EBS volume types", + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3697", - "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "category": "Deprecation", - "startLine": 40, - "startColumn": 3, - "endLine": 40, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "myS3Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.KeyName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'mySnsTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "mySnsTopic", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/override/include.yaml": { + "filePath": "bad/override/include.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 6, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W9010", + "ruleId": "W2511", "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", - "source": "ENGINE", + "message": "IAM Policy Version should be updated to '2012-10-17'", + "source": "CFN_LINT", "entity": { - "logicalId": "MyEC2Instance3", + "logicalId": "myS3BucketPolicy", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.PolicyDocument.Version", + "suggestedFix": "Update the policy document Version to '2012-10-17'", "category": "Security", - "startLine": 32, - "startColumn": 7, - "endLine": 32, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", + "startLine": 20, + "startColumn": 9, + "endLine": 20, + "endColumn": 16, + "ruleDescription": "Check IAM Resource Policies syntax", "phase": "LINT" }, { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 't1.micro' - consider upgrading", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", "source": "CFN_LINT", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "myS3BucketPolicy", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Properties.InstanceType", - "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, + "startLine": 13, + "startColumn": 3, + "endLine": 13, "endColumn": 19, - "ruleDescription": "Checks for legacy instance type generations", + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "myVpc1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", "startLine": 9, "startColumn": 7, "endLine": 9, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -74875,20 +73351,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "myVpc1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", "startLine": 10, "startColumn": 7, "endLine": 10, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -74898,248 +73373,379 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "myS3BucketPolicy", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Properties.KeyName", + "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 11, + "startLine": 17, "startColumn": 7, - "endLine": 11, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 17, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'myS3Bucket'" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'myVpc1' of type 'AWS::EC2::VPC' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "myVpc1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.BlockDeviceMappings", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "message": "Resource 'myS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "myS3Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.NetworkInterfaces", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'mySnsTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "mySnsTopic", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 27, - "startColumn": 7, + "startColumn": 3, "endLine": 27, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/override/required.yaml": { + "filePath": "bad/override/required.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W3045", + "severity": "WARN", + "message": "AccessControl property is deprecated. Use bucket policies instead", + "source": "CFN_LINT", + "entity": { + "logicalId": "myS3Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.AccessControl", + "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", + "category": "Deprecation", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 20, + "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", + "phase": "LINT", "context": { - "lifecycle": "create-only" + "actualValue": "Private" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Resource 'myS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance3", + "logicalId": "myS3Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 32, - "startColumn": 7, - "endLine": 32, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/param_constraints.yaml": { + "filePath": "bad/param_constraints.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 5, + "errors": 0, + "warnings": 5, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F2015", + "severity": "FATAL", + "message": "Parameter 'PatternParam' Default '123-bad' does not match AllowedPattern '^[a-z]+$'", + "source": "SCHEMA", + "entity": { + "logicalId": "PatternParam", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/PatternParam/Default", + "category": "Parameter", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 12, + "ruleDescription": "Default value is within parameter constraints", + "phase": "SCHEMA" + }, + { + "ruleId": "F2015", + "severity": "FATAL", + "message": "Parameter 'ShortParam' Default length 2 is less than MinLength 5", + "source": "SCHEMA", + "entity": { + "logicalId": "ShortParam", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/ShortParam/Default", + "category": "Parameter", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 12, + "ruleDescription": "Default value is within parameter constraints", + "phase": "SCHEMA" + }, + { + "ruleId": "F2015", + "severity": "FATAL", + "message": "Parameter 'LongParam' Default length 34 exceeds MaxLength 10", + "source": "SCHEMA", + "entity": { + "logicalId": "LongParam", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/LongParam/Default", + "category": "Parameter", + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 12, + "ruleDescription": "Default value is within parameter constraints", + "phase": "SCHEMA" + }, + { + "ruleId": "F2015", + "severity": "FATAL", + "message": "Parameter 'SmallNumber' Default 3 is less than MinValue 10", + "source": "SCHEMA", + "entity": { + "logicalId": "SmallNumber", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/SmallNumber/Default", + "category": "Parameter", + "startLine": 17, + "startColumn": 5, + "endLine": 17, + "endColumn": 12, + "ruleDescription": "Default value is within parameter constraints", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "F2015", + "severity": "FATAL", + "message": "Parameter 'BigNumber' Default 200 exceeds MaxValue 100", + "source": "SCHEMA", "entity": { - "logicalId": "MyEC2Instance3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "BigNumber", + "entityType": "Parameter" }, - "propertyPath": "Properties.BlockDeviceMappings", - "category": "Best Practice", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "propertyPath": "Parameters/BigNumber/Default", + "category": "Parameter", + "startLine": 21, + "startColumn": 5, + "endLine": 21, + "endColumn": 12, + "ruleDescription": "Default value is within parameter constraints", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'PatternParam' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "MyLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "logicalId": "PatternParam", + "entityType": "Parameter" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Parameters/PatternParam", "category": "Best Practice", - "startLine": 43, - "startColumn": 7, - "endLine": 43, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'ShortParam' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "MyLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "logicalId": "ShortParam", + "entityType": "Parameter" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Parameters/ShortParam", "category": "Best Practice", - "startLine": 44, - "startColumn": 7, - "endLine": 44, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 13, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BlockDeviceMappings' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'LongParam' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "MyLaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "logicalId": "LongParam", + "entityType": "Parameter" }, - "propertyPath": "Properties.BlockDeviceMappings", + "propertyPath": "Parameters/LongParam", "category": "Best Practice", - "startLine": 45, - "startColumn": 7, - "endLine": 45, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 12, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'SmallNumber' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "SmallNumber", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/SmallNumber", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 14, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyEC2Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'BigNumber' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "MyEC2Instance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "BigNumber", + "entityType": "Parameter" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Parameters/BigNumber", "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 19, + "startColumn": 3, + "endLine": 19, + "endColumn": 12, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyEC2Instance3' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance3", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 31, - "startColumn": 5, - "endLine": 31, - "endColumn": 15, + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 9, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/properties_password.yaml": { - "filePath": "bad/properties_password.yaml", + "bad/param_number_default.yaml": { + "filePath": "bad/param_number_default.yaml", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 1, "counts": { - "fatal": 0, + "fatal": 4, "errors": 0, - "warnings": 13, - "informational": 19, + "warnings": 1, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -75148,1139 +73754,1011 @@ }, "diagnostics": [ { - "ruleId": "W1011", - "severity": "WARN", - "message": "Use dynamic references (e.g., SSM SecureString) instead of parameter 'MyPassword' for secrets", - "source": "CFN_LINT", + "ruleId": "F0015", + "severity": "FATAL", + "message": "Parameter 'Port' Default 'not-a-number' is not a valid number", + "source": "SCHEMA", "entity": { - "logicalId": "MyDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "Port", + "entityType": "Parameter" }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 25, - "ruleDescription": "Instead of REFing a parameter for a secret use a dynamic reference", - "phase": "LINT" + "propertyPath": "Parameters/Port/Default", + "category": "Parameter", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 12, + "ruleDescription": "Default value must match parameter Type", + "phase": "SCHEMA" }, { - "ruleId": "W1011", - "severity": "WARN", - "message": "Use dynamic references (e.g., SSM SecureString) instead of parameter 'MyNewPassword' for secrets", - "source": "CFN_LINT", + "ruleId": "F0016", + "severity": "FATAL", + "message": "Parameter 'Port' AllowedValues entry 'abc' is not a valid number", + "source": "SCHEMA", "entity": { - "logicalId": "MyNewDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "Port", + "entityType": "Parameter" }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 32, - "startColumn": 7, - "endLine": 32, - "endColumn": 25, - "ruleDescription": "Instead of REFing a parameter for a secret use a dynamic reference", - "phase": "LINT" + "propertyPath": "Parameters/Port/AllowedValues", + "category": "Parameter", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 18, + "ruleDescription": "AllowedValues entries must match parameter Type", + "phase": "SCHEMA" }, { - "ruleId": "W2501", - "severity": "WARN", - "message": "Parameter MyPassword used as MasterUserPassword, therefore NoEcho should be True", - "source": "CFN_LINT", + "ruleId": "F0016", + "severity": "FATAL", + "message": "Parameter 'Port' AllowedValues entry 'def' is not a valid number", + "source": "SCHEMA", "entity": { - "logicalId": "MyPassword", + "logicalId": "Port", "entityType": "Parameter" }, - "propertyPath": "Parameters/MyPassword", - "category": "Security", + "propertyPath": "Parameters/Port/AllowedValues", + "category": "Parameter", "startLine": 6, - "startColumn": 3, + "startColumn": 5, "endLine": 6, - "endColumn": 13, - "ruleDescription": "Check if Password Properties are correctly configured", - "phase": "LINT" + "endColumn": 18, + "ruleDescription": "AllowedValues entries must match parameter Type", + "phase": "SCHEMA" }, { - "ruleId": "W2501", + "ruleId": "F2012", + "severity": "FATAL", + "message": "Parameter 'Port' Default 'not-a-number' is not in AllowedValues ['abc', 'def']", + "source": "SCHEMA", + "entity": { + "logicalId": "Port", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/Port/Default", + "category": "Parameter", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 12, + "ruleDescription": "Parameter Default must be in AllowedValues", + "phase": "SCHEMA" + }, + { + "ruleId": "W2001", "severity": "WARN", - "message": "Parameter MyNewPassword used as MasterUserPassword, therefore NoEcho should be True", + "message": "Parameter 'Port' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "MyNewPassword", + "logicalId": "Port", "entityType": "Parameter" }, - "propertyPath": "Parameters/MyNewPassword", - "category": "Security", - "startLine": 10, + "propertyPath": "Parameters/Port", + "category": "Best Practice", + "startLine": 3, "startColumn": 3, - "endLine": 10, - "endColumn": 16, - "ruleDescription": "Check if Password Properties are correctly configured", + "endLine": 3, + "endColumn": 7, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" + } + ] + }, + "bad/parameters/F2012_cdl_default_split.yaml": { + "filePath": "bad/parameters/F2012_cdl_default_split.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 8, + "errors": 0, + "warnings": 5, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W2501", - "severity": "WARN", - "message": "Password should use a secure dynamic reference for Resources/myThirdDb/Properties/MasterUserPassword", - "source": "CFN_LINT", + "ruleId": "F2012", + "severity": "FATAL", + "message": "Parameter 'CDLSingleElementNotAllowed' Default 'three' is not in AllowedValues ['one', 'two']", + "source": "SCHEMA", "entity": { - "logicalId": "myThirdDb", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "CDLSingleElementNotAllowed", + "entityType": "Parameter" }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 41, - "startColumn": 7, - "endLine": 41, - "endColumn": 25, - "ruleDescription": "Check if Password Properties are correctly configured", - "phase": "LINT" + "propertyPath": "Parameters/CDLSingleElementNotAllowed/Default", + "category": "Parameter", + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 12, + "ruleDescription": "Parameter Default must be in AllowedValues", + "phase": "SCHEMA" }, { - "ruleId": "W2509", - "severity": "WARN", - "message": "Parameter 'MyPassword' appears to be a password but does not have NoEcho set to true", - "source": "ENGINE", + "ruleId": "F2012", + "severity": "FATAL", + "message": "Parameter 'CDLMultipleElementsNotAllowed' Default 'four' is not in AllowedValues ['one', 'two']", + "source": "SCHEMA", "entity": { - "logicalId": "MyPassword", + "logicalId": "CDLMultipleElementsNotAllowed", "entityType": "Parameter" }, - "propertyPath": "Parameters/MyPassword", - "category": "Security", - "startLine": 6, - "startColumn": 3, - "endLine": 6, - "endColumn": 13, - "ruleDescription": "Password parameter should have NoEcho", - "phase": "LINT" + "propertyPath": "Parameters/CDLMultipleElementsNotAllowed/Default", + "category": "Parameter", + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 12, + "ruleDescription": "Parameter Default must be in AllowedValues", + "phase": "SCHEMA" }, { - "ruleId": "W2509", - "severity": "WARN", - "message": "Parameter 'MyNewPassword' appears to be a password but does not have NoEcho set to true", - "source": "ENGINE", + "ruleId": "F2012", + "severity": "FATAL", + "message": "Parameter 'CDLMultipleElementsNotAllowed' Default 'three' is not in AllowedValues ['one', 'two']", + "source": "SCHEMA", "entity": { - "logicalId": "MyNewPassword", + "logicalId": "CDLMultipleElementsNotAllowed", "entityType": "Parameter" }, - "propertyPath": "Parameters/MyNewPassword", - "category": "Security", - "startLine": 10, - "startColumn": 3, - "endLine": 10, - "endColumn": 16, - "ruleDescription": "Password parameter should have NoEcho", - "phase": "LINT" + "propertyPath": "Parameters/CDLMultipleElementsNotAllowed/Default", + "category": "Parameter", + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 12, + "ruleDescription": "Parameter Default must be in AllowedValues", + "phase": "SCHEMA" }, { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", - "source": "CFN_LINT", + "ruleId": "F2012", + "severity": "FATAL", + "message": "Parameter 'CDLCommaInAllowedValueDoesNotMatchSplit' Default 'four' is not in AllowedValues ['one', 'two', 'three,four']", + "source": "SCHEMA", "entity": { - "logicalId": "MyDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "CDLCommaInAllowedValueDoesNotMatchSplit", + "entityType": "Parameter" }, - "category": "Best Practice", - "startLine": 16, - "startColumn": 3, - "endLine": 16, - "endColumn": 7, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", - "phase": "LINT" + "propertyPath": "Parameters/CDLCommaInAllowedValueDoesNotMatchSplit/Default", + "category": "Parameter", + "startLine": 20, + "startColumn": 5, + "endLine": 20, + "endColumn": 12, + "ruleDescription": "Parameter Default must be in AllowedValues", + "phase": "SCHEMA" }, { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", - "source": "CFN_LINT", + "ruleId": "F2012", + "severity": "FATAL", + "message": "Parameter 'CDLCommaInAllowedValueDoesNotMatchSplit' Default 'three' is not in AllowedValues ['one', 'two', 'three,four']", + "source": "SCHEMA", "entity": { - "logicalId": "MyNewDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "CDLCommaInAllowedValueDoesNotMatchSplit", + "entityType": "Parameter" }, - "category": "Best Practice", - "startLine": 25, - "startColumn": 3, - "endLine": 25, - "endColumn": 10, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", - "phase": "LINT" + "propertyPath": "Parameters/CDLCommaInAllowedValueDoesNotMatchSplit/Default", + "category": "Parameter", + "startLine": 20, + "startColumn": 5, + "endLine": 20, + "endColumn": 12, + "ruleDescription": "Parameter Default must be in AllowedValues", + "phase": "SCHEMA" }, { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", - "source": "CFN_LINT", + "ruleId": "F2012", + "severity": "FATAL", + "message": "Parameter 'CDLWhitespaceTrimsToInvalid' Default 'bad' is not in AllowedValues ['one', 'two']", + "source": "SCHEMA", "entity": { - "logicalId": "myThirdDb", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "CDLWhitespaceTrimsToInvalid", + "entityType": "Parameter" }, - "category": "Best Practice", - "startLine": 34, - "startColumn": 3, - "endLine": 34, + "propertyPath": "Parameters/CDLWhitespaceTrimsToInvalid/Default", + "category": "Parameter", + "startLine": 28, + "startColumn": 5, + "endLine": 28, + "endColumn": 12, + "ruleDescription": "Parameter Default must be in AllowedValues", + "phase": "SCHEMA" + }, + { + "ruleId": "F2012", + "severity": "FATAL", + "message": "Parameter 'CDLListStringType' Default 'bad' is not in AllowedValues ['good', 'better']", + "source": "SCHEMA", + "entity": { + "logicalId": "CDLListStringType", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/CDLListStringType/Default", + "category": "Parameter", + "startLine": 35, + "startColumn": 5, + "endLine": 35, "endColumn": 12, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", - "phase": "LINT" + "ruleDescription": "Parameter Default must be in AllowedValues", + "phase": "SCHEMA" }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", + "ruleId": "F2012", + "severity": "FATAL", + "message": "Parameter 'CDLListStringType' Default 'worse' is not in AllowedValues ['good', 'better']", + "source": "SCHEMA", "entity": { - "logicalId": "MyDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "CDLListStringType", + "entityType": "Parameter" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 18, + "propertyPath": "Parameters/CDLListStringType/Default", + "category": "Parameter", + "startLine": 35, "startColumn": 5, - "endLine": 18, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "endLine": 35, + "endColumn": 12, + "ruleDescription": "Parameter Default must be in AllowedValues", + "phase": "SCHEMA" }, { - "ruleId": "W9008", + "ruleId": "W2001", "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", + "message": "Parameter 'CDLSingleElementNotAllowed' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "MyNewDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "CDLSingleElementNotAllowed", + "entityType": "Parameter" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 27, - "startColumn": 5, - "endLine": 27, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", + "propertyPath": "Parameters/CDLSingleElementNotAllowed", + "category": "Best Practice", + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 29, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W9008", + "ruleId": "W2001", "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", + "message": "Parameter 'CDLMultipleElementsNotAllowed' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "myThirdDb", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "CDLMultipleElementsNotAllowed", + "entityType": "Parameter" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 36, - "startColumn": 5, - "endLine": 36, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", + "propertyPath": "Parameters/CDLMultipleElementsNotAllowed", + "category": "Best Practice", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 32, + "ruleDescription": "Check if Parameters are Used", "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)", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'CDLCommaInAllowedValueDoesNotMatchSplit' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "MyDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "CDLCommaInAllowedValueDoesNotMatchSplit", + "entityType": "Parameter" }, + "propertyPath": "Parameters/CDLCommaInAllowedValueDoesNotMatchSplit", "category": "Best Practice", - "startLine": 16, + "startLine": 17, "startColumn": 3, - "endLine": 16, - "endColumn": 7, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 17, + "endColumn": 42, + "ruleDescription": "Check if Parameters are Used", "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)", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'CDLWhitespaceTrimsToInvalid' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "MyNewDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "CDLWhitespaceTrimsToInvalid", + "entityType": "Parameter" }, + "propertyPath": "Parameters/CDLWhitespaceTrimsToInvalid", "category": "Best Practice", "startLine": 25, "startColumn": 3, "endLine": 25, - "endColumn": 10, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endColumn": 30, + "ruleDescription": "Check if Parameters are Used", "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)", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'CDLListStringType' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "myThirdDb", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "CDLListStringType", + "entityType": "Parameter" }, + "propertyPath": "Parameters/CDLListStringType", "category": "Best Practice", - "startLine": 34, + "startLine": 32, "startColumn": 3, - "endLine": 34, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 32, + "endColumn": 20, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" + } + ] + }, + "bad/parameters/configuration.yaml": { + "filePath": "bad/parameters/configuration.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 2, + "errors": 14, + "warnings": 16, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "ruleId": "F2002", + "severity": "FATAL", + "message": "Parameter 'myParameter' has invalid Type 'NotString'", + "source": "SCHEMA", "entity": { - "logicalId": "MyDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "myParameter", + "entityType": "Parameter" }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 18, + "propertyPath": "Parameters/myParameter/Type", + "category": "Parameter", + "startLine": 22, "startColumn": 5, - "endLine": 18, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "endLine": 22, + "endColumn": 9, + "ruleDescription": "Parameter Type must be valid", + "phase": "SCHEMA" }, { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "ruleId": "F2002", + "severity": "FATAL", + "message": "Parameter 'mySsmParam' has invalid Type 'AWS::SSM::Parameter::Value'", + "source": "SCHEMA", "entity": { - "logicalId": "MyNewDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "mySsmParam", + "entityType": "Parameter" }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 27, + "propertyPath": "Parameters/mySsmParam/Type", + "category": "Parameter", + "startLine": 30, "startColumn": 5, - "endLine": 27, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "endLine": 30, + "endColumn": 9, + "ruleDescription": "Parameter Type must be valid", + "phase": "SCHEMA" }, { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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)", + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'allowedValuesNotAList': AllowedValues must be an array", "source": "CFN_LINT", "entity": { - "logicalId": "myThirdDb", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "allowedValuesNotAList", + "entityType": "Parameter" }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 36, + "propertyPath": "Parameters/allowedValuesNotAList/AllowedValues", + "category": "Parameter", + "startLine": 6, "startColumn": 5, - "endLine": 36, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "endLine": 6, + "endColumn": 18, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'minValueIsNotNumber': MinValue must be a number", "source": "CFN_LINT", "entity": { - "logicalId": "MyDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "minValueIsNotNumber", + "entityType": "Parameter" }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 20, - "startColumn": 7, - "endLine": 20, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" + "propertyPath": "Parameters/minValueIsNotNumber/MinValue", + "category": "Parameter", + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 13, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'notBooleanEcho': NoEcho must be a boolean", "source": "CFN_LINT", "entity": { - "logicalId": "MyNewDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "notBooleanEcho", + "entityType": "Parameter" }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 29, - "startColumn": 7, - "endLine": 29, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" + "propertyPath": "Parameters/notBooleanEcho/NoEcho", + "category": "Parameter", + "startLine": 19, + "startColumn": 5, + "endLine": 19, + "endColumn": 11, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'myInvalidParameter': 'Type' is a required property", "source": "CFN_LINT", "entity": { - "logicalId": "myThirdDb", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 38, - "startColumn": 7, - "endLine": 38, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "myInvalidParameter", + "entityType": "Parameter" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 21, - "startColumn": 7, - "endLine": 21, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "propertyPath": "Parameters/myInvalidParameter", + "category": "Parameter", + "startLine": 25, + "startColumn": 3, + "endLine": 25, + "endColumn": 21, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'myInvalidParameter': 'NotType' is not one of ['AllowedPattern', 'AllowedValues', 'ConstraintDescription', 'Default', 'Description', 'MaxLength', 'MinLength', 'MaxValue', 'MinValue', 'NoEcho', 'Type']", + "source": "CFN_LINT", "entity": { - "logicalId": "MyDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "myInvalidParameter", + "entityType": "Parameter" }, - "propertyPath": "Properties.MasterUsername", - "category": "Best Practice", - "startLine": 22, - "startColumn": 7, - "endLine": 22, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Parameters/myInvalidParameter/NotType", + "category": "Parameter", + "startLine": 27, + "startColumn": 5, + "endLine": 27, + "endColumn": 12, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'NullParameter': None is not of type 'object'", + "source": "CFN_LINT", "entity": { - "logicalId": "MyNewDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "NullParameter", + "entityType": "Parameter" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 30, - "startColumn": 7, - "endLine": 30, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "propertyPath": "Parameters/NullParameter", + "category": "Parameter", + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 16, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'NullParamType': Type must not be null", + "source": "CFN_LINT", "entity": { - "logicalId": "MyNewDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "NullParamType", + "entityType": "Parameter" }, - "propertyPath": "Properties.MasterUsername", - "category": "Best Practice", - "startLine": 31, - "startColumn": 7, - "endLine": 31, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Parameters/NullParamType/Type", + "category": "Parameter", + "startLine": 36, + "startColumn": 5, + "endLine": 36, + "endColumn": 9, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'NullParamDefault': Default must not be null", + "source": "CFN_LINT", "entity": { - "logicalId": "myThirdDb", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "NullParamDefault", + "entityType": "Parameter" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", + "propertyPath": "Parameters/NullParamDefault/Default", + "category": "Parameter", "startLine": 39, - "startColumn": 7, + "startColumn": 5, "endLine": 39, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endColumn": 12, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'NullParamDescription': Description must not be null", + "source": "CFN_LINT", "entity": { - "logicalId": "myThirdDb", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "NullParamDescription", + "entityType": "Parameter" }, - "propertyPath": "Properties.MasterUsername", - "category": "Best Practice", - "startLine": 40, - "startColumn": 7, - "endLine": 40, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Parameters/NullParamDescription/Description", + "category": "Parameter", + "startLine": 42, + "startColumn": 5, + "endLine": 42, + "endColumn": 16, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'NullParamMaxValue': MaxValue must not be null", + "source": "CFN_LINT", + "entity": { + "logicalId": "NullParamMaxValue", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/NullParamMaxValue/MaxValue", + "category": "Parameter", + "startLine": 45, + "startColumn": 5, + "endLine": 45, + "endColumn": 13, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyDB' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'NullParamMinValue': MinValue must not be null", + "source": "CFN_LINT", "entity": { - "logicalId": "MyDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "NullParamMinValue", + "entityType": "Parameter" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 18, + "propertyPath": "Parameters/NullParamMinValue/MinValue", + "category": "Parameter", + "startLine": 48, "startColumn": 5, - "endLine": 18, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 48, + "endColumn": 13, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyNewDB' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'NullParamMaxLength': MaxLength must not be null", + "source": "CFN_LINT", "entity": { - "logicalId": "MyNewDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "NullParamMaxLength", + "entityType": "Parameter" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 27, + "propertyPath": "Parameters/NullParamMaxLength/MaxLength", + "category": "Parameter", + "startLine": 51, "startColumn": 5, - "endLine": 27, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 51, + "endColumn": 14, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myThirdDb' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'NullParamMinLength': MinLength must not be null", + "source": "CFN_LINT", "entity": { - "logicalId": "myThirdDb", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "NullParamMinLength", + "entityType": "Parameter" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 36, + "propertyPath": "Parameters/NullParamMinLength/MinLength", + "category": "Parameter", + "startLine": 54, "startColumn": 5, - "endLine": 36, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/properties_rt_association.yaml": { - "filePath": "bad/properties_rt_association.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 0, - "errors": 7, - "warnings": 0, - "informational": 13, - "debug": 0 + "endLine": 54, + "endColumn": 14, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3022", + "ruleId": "E2001", "severity": "ERROR", - "message": "SubnetId in PublicSubnetRouteTableAssociation1 is also associated with PrivateSubnetRouteTableAssociation1", + "message": "Parameter 'NullParamNoEcho': NoEcho must not be null", "source": "CFN_LINT", "entity": { - "logicalId": "PublicSubnetRouteTableAssociation1", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "logicalId": "NullParamNoEcho", + "entityType": "Parameter" }, - "propertyPath": "Properties.SubnetId", - "suggestedFix": "Associate each subnet with exactly one route table", - "category": "Resource", - "startLine": 27, - "startColumn": 9, - "endLine": 27, - "endColumn": 17, - "ruleDescription": "Resource SubnetRouteTableAssociation Properties", - "phase": "LINT" + "propertyPath": "Parameters/NullParamNoEcho/NoEcho", + "category": "Parameter", + "startLine": 57, + "startColumn": 5, + "endLine": 57, + "endColumn": 11, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "E3022", - "severity": "ERROR", - "message": "SubnetId in PrivateSubnetRouteTableAssociation1 is also associated with PublicSubnetRouteTableAssociation1", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'allowedValuesNotAList' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "PrivateSubnetRouteTableAssociation1", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "logicalId": "allowedValuesNotAList", + "entityType": "Parameter" }, - "propertyPath": "Properties.SubnetId", - "suggestedFix": "Associate each subnet with exactly one route table", - "category": "Resource", - "startLine": 35, - "startColumn": 9, - "endLine": 35, - "endColumn": 17, - "ruleDescription": "Resource SubnetRouteTableAssociation Properties", + "propertyPath": "Parameters/allowedValuesNotAList", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 24, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "E3022", - "severity": "ERROR", - "message": "SubnetId in AuxiliaryPublicSubnetRouteTableAssociation1 is also associated with PublicSubnetRouteTableAssociation1, PrivateSubnetRouteTableAssociation1, ProxySubnetRouteTableAssociation", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'allowedValuesAListofBadTypes' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "AuxiliaryPublicSubnetRouteTableAssociation1", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "logicalId": "allowedValuesAListofBadTypes", + "entityType": "Parameter" }, - "propertyPath": "Properties.SubnetId", - "suggestedFix": "Associate each subnet with exactly one route table", - "category": "Resource", - "startLine": 44, - "startColumn": 9, - "endLine": 44, - "endColumn": 17, - "ruleDescription": "Resource SubnetRouteTableAssociation Properties", + "propertyPath": "Parameters/allowedValuesAListofBadTypes", + "category": "Best Practice", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 31, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "E3022", - "severity": "ERROR", - "message": "SubnetId in ProxySubnetRouteTableAssociation is also associated with PublicSubnetRouteTableAssociation1, PrivateSubnetRouteTableAssociation1, AuxiliaryPublicSubnetRouteTableAssociation1", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'minValueIsNotNumber' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "ProxySubnetRouteTableAssociation", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "logicalId": "minValueIsNotNumber", + "entityType": "Parameter" }, - "propertyPath": "Properties.SubnetId", - "suggestedFix": "Associate each subnet with exactly one route table", - "category": "Resource", - "startLine": 52, - "startColumn": 9, - "endLine": 52, - "endColumn": 17, - "ruleDescription": "Resource SubnetRouteTableAssociation Properties", + "propertyPath": "Parameters/minValueIsNotNumber", + "category": "Best Practice", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 22, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "E3022", - "severity": "ERROR", - "message": "SubnetId in AuxilliaryCustomSubnetRouteTableAssociation is also associated with CustomSubnetRouteTableAssociation", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'maxLengthIsNotString' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "AuxilliaryCustomSubnetRouteTableAssociation", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "logicalId": "maxLengthIsNotString", + "entityType": "Parameter" }, - "propertyPath": "Properties.SubnetId", - "suggestedFix": "Associate each subnet with exactly one route table", - "category": "Resource", - "startLine": 74, - "startColumn": 9, - "endLine": 74, - "endColumn": 17, - "ruleDescription": "Resource SubnetRouteTableAssociation Properties", + "propertyPath": "Parameters/maxLengthIsNotString", + "category": "Best Practice", + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 23, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "E8002", - "severity": "ERROR", - "message": "Condition 'CreateAuxiliaryNetworks' referenced by resource 'AuxiliaryPublicSubnetRouteTableAssociation1' is not defined", - "source": "SCHEMA", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'notBooleanEcho' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "AuxiliaryPublicSubnetRouteTableAssociation1", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "logicalId": "notBooleanEcho", + "entityType": "Parameter" }, - "category": "Structure", - "startLine": 38, + "propertyPath": "Parameters/notBooleanEcho", + "category": "Best Practice", + "startLine": 17, "startColumn": 3, - "endLine": 38, - "endColumn": 46, - "ruleDescription": "Condition referenced by resource is not defined", - "phase": "PARSE" + "endLine": 17, + "endColumn": 17, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "E8002", - "severity": "ERROR", - "message": "Condition 'CreateAuxiliaryNetworks' referenced by resource 'AuxilliaryCustomSubnetRouteTableAssociation' is not defined", - "source": "SCHEMA", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'myParameter' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "AuxilliaryCustomSubnetRouteTableAssociation", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "logicalId": "myParameter", + "entityType": "Parameter" }, - "category": "Structure", - "startLine": 68, + "propertyPath": "Parameters/myParameter", + "category": "Best Practice", + "startLine": 20, "startColumn": 3, - "endLine": 68, - "endColumn": 46, - "ruleDescription": "Condition referenced by resource is not defined", - "phase": "PARSE" + "endLine": 20, + "endColumn": 14, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'myInvalidParameter' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "PublicSubnetRouteTableAssociation1", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "logicalId": "myInvalidParameter", + "entityType": "Parameter" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Parameters/myInvalidParameter", "category": "Best Practice", "startLine": 25, - "startColumn": 9, + "startColumn": 3, "endLine": 25, "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'PublicRouteTable' (type String)", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'mySsmParam' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "PublicSubnetRouteTableAssociation1", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "logicalId": "mySsmParam", + "entityType": "Parameter" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Parameters/mySsmParam", "category": "Best Practice", - "startLine": 27, - "startColumn": 9, - "endLine": 27, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'PublicSubnet01' (type String)", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 28, + "startColumn": 3, + "endLine": 28, + "endColumn": 13, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'NullParamType' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "PrivateSubnetRouteTableAssociation1", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "logicalId": "NullParamType", + "entityType": "Parameter" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Parameters/NullParamType", "category": "Best Practice", - "startLine": 33, - "startColumn": 9, - "endLine": 33, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'PrivateRouteTable' (type String)", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 35, + "startColumn": 3, + "endLine": 35, + "endColumn": 16, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'NullParamDefault' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "PrivateSubnetRouteTableAssociation1", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "logicalId": "NullParamDefault", + "entityType": "Parameter" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Parameters/NullParamDefault", "category": "Best Practice", - "startLine": 35, - "startColumn": 9, - "endLine": 35, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'PublicSubnet01' (type String)", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 37, + "startColumn": 3, + "endLine": 37, + "endColumn": 19, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'NullParamDescription' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "AuxiliaryPublicSubnetRouteTableAssociation1", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "logicalId": "NullParamDescription", + "entityType": "Parameter" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Parameters/NullParamDescription", "category": "Best Practice", - "startLine": 42, - "startColumn": 9, - "endLine": 42, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'PublicRouteTable' (type String)", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 40, + "startColumn": 3, + "endLine": 40, + "endColumn": 23, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'NullParamMaxValue' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "AuxiliaryPublicSubnetRouteTableAssociation1", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "logicalId": "NullParamMaxValue", + "entityType": "Parameter" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Parameters/NullParamMaxValue", "category": "Best Practice", - "startLine": 44, - "startColumn": 9, - "endLine": 44, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'PublicSubnet01' (type String)", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 43, + "startColumn": 3, + "endLine": 43, + "endColumn": 20, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'NullParamMinValue' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "ProxySubnetRouteTableAssociation", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "logicalId": "NullParamMinValue", + "entityType": "Parameter" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Parameters/NullParamMinValue", "category": "Best Practice", - "startLine": 50, - "startColumn": 9, - "endLine": 50, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'PublicRouteTable' (type String)", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 46, + "startColumn": 3, + "endLine": 46, + "endColumn": 20, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'NullParamMaxLength' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "ProxySubnetRouteTableAssociation", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "logicalId": "NullParamMaxLength", + "entityType": "Parameter" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Parameters/NullParamMaxLength", "category": "Best Practice", - "startLine": 52, - "startColumn": 9, - "endLine": 52, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'isPublic'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 49, + "startColumn": 3, + "endLine": 49, + "endColumn": 21, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'NullParamMinLength' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "CustomResource", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::CustomResource" + "logicalId": "NullParamMinLength", + "entityType": "Parameter" }, - "propertyPath": "Properties.ServiceToken", + "propertyPath": "Parameters/NullParamMinLength", "category": "Best Practice", - "startLine": 58, - "startColumn": 9, - "endLine": 58, + "startLine": 52, + "startColumn": 3, + "endLine": 52, "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'NullParamNoEcho' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "CustomSubnetRouteTableAssociation", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "logicalId": "NullParamNoEcho", + "entityType": "Parameter" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Parameters/NullParamNoEcho", "category": "Best Practice", - "startLine": 63, - "startColumn": 9, - "endLine": 63, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'PublicRouteTable' (type String)", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 55, + "startColumn": 3, + "endLine": 55, + "endColumn": 18, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "CustomSubnetRouteTableAssociation", + "logicalId": "IamPipeline", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 65, - "startColumn": 9, - "endLine": 65, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt CustomResource.PublicSubnet", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 60, + "startColumn": 3, + "endLine": 60, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "AuxilliaryCustomSubnetRouteTableAssociation", + "logicalId": "IamPipeline", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 72, - "startColumn": 9, - "endLine": 72, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'PublicRouteTable' (type String)", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 60, + "startColumn": 3, + "endLine": 60, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'IamPipeline' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AuxilliaryCustomSubnetRouteTableAssociation", + "logicalId": "IamPipeline", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 74, - "startColumn": 9, - "endLine": 74, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt CustomResource.PublicSubnet", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 62, + "startColumn": 5, + "endLine": 62, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "bad/properties_sg_ingress.yaml": { - "filePath": "bad/properties_sg_ingress.yaml", + "bad/parameters/default.yaml": { + "filePath": "bad/parameters/default.yaml", "status": "OK", "metadata": { - "resourcesScanned": 9, + "resourcesScanned": 0, "counts": { - "fatal": 5, - "errors": 13, - "warnings": 7, - "informational": 21, + "fatal": 11, + "errors": 3, + "warnings": 9, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -76289,539 +74767,677 @@ }, "diagnostics": [ { - "ruleId": "F3003", + "ruleId": "F0001", "severity": "FATAL", - "message": "'IpProtocol' is a required property", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "startLine": 61, + "startColumn": 1, + "endLine": 61, + "endColumn": 10, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" + }, + { + "ruleId": "F2012", + "severity": "FATAL", + "message": "Parameter 'myAllowedValue' Default 'us-east-1a' is not in AllowedValues ['us-east-1b', 'us-east-1c', 'us-east-1d']", "source": "SCHEMA", "entity": { - "logicalId": "mySecurityGroupIngressExclusive", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "logicalId": "myAllowedValue", + "entityType": "Parameter" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'IpProtocol'", - "category": "Schema", - "startLine": 73, + "propertyPath": "Parameters/myAllowedValue/Default", + "category": "Parameter", + "startLine": 18, "startColumn": 5, - "endLine": 73, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Required property missing", + "endLine": 18, + "endColumn": 12, + "ruleDescription": "Parameter Default must be in AllowedValues", "phase": "SCHEMA" }, { - "ruleId": "F3014", + "ruleId": "F2012", "severity": "FATAL", - "message": "Exactly one of ['CidrIp', 'CidrIpv6', 'SourcePrefixListId', 'SourceSecurityGroupId', 'SourceSecurityGroupName'] must be specified", + "message": "Parameter 'CDLAllowedValues' Default 'three' is not in AllowedValues ['one', 'two', 'three,four']", "source": "SCHEMA", "entity": { - "logicalId": "mySecurityGroupVpc", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "logicalId": "CDLAllowedValues", + "entityType": "Parameter" }, - "propertyPath": "Properties.SecurityGroupIngress.1", - "category": "Schema", - "startLine": 38, - "startColumn": 19, - "endLine": 38, - "endColumn": 20, - "ruleDescription": "Exactly one of properties required (requiredXor)", + "propertyPath": "Parameters/CDLAllowedValues/Default", + "category": "Parameter", + "startLine": 47, + "startColumn": 5, + "endLine": 47, + "endColumn": 12, + "ruleDescription": "Parameter Default must be in AllowedValues", "phase": "SCHEMA" }, { - "ruleId": "F3014", + "ruleId": "F2012", "severity": "FATAL", - "message": "Exactly one of ['CidrIp', 'CidrIpv6', 'SourcePrefixListId', 'SourceSecurityGroupId', 'SourceSecurityGroupName'] must be specified", + "message": "Parameter 'CDLAllowedValuesWithSpaces' Default 'four' is not in AllowedValues ['one', 'two', 'three, four']", "source": "SCHEMA", "entity": { - "logicalId": "mySecurityGroupVpc", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "logicalId": "CDLAllowedValuesWithSpaces", + "entityType": "Parameter" }, - "propertyPath": "Properties.SecurityGroupIngress.4", - "category": "Schema", - "startLine": 48, - "startColumn": 19, - "endLine": 48, - "endColumn": 20, - "ruleDescription": "Exactly one of properties required (requiredXor)", + "propertyPath": "Parameters/CDLAllowedValuesWithSpaces/Default", + "category": "Parameter", + "startLine": 56, + "startColumn": 5, + "endLine": 56, + "endColumn": 12, + "ruleDescription": "Parameter Default must be in AllowedValues", "phase": "SCHEMA" }, { - "ruleId": "F3014", + "ruleId": "F2012", "severity": "FATAL", - "message": "Exactly one of ['CidrIp', 'CidrIpv6', 'SourcePrefixListId', 'SourceSecurityGroupId', 'SourceSecurityGroupName'] must be specified", + "message": "Parameter 'CDLAllowedValuesWithSpaces' Default 'three' is not in AllowedValues ['one', 'two', 'three, four']", "source": "SCHEMA", "entity": { - "logicalId": "mySecurityGroupIngressExclusive", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "logicalId": "CDLAllowedValuesWithSpaces", + "entityType": "Parameter" }, - "propertyPath": "Properties", - "category": "Schema", - "startLine": 73, + "propertyPath": "Parameters/CDLAllowedValuesWithSpaces/Default", + "category": "Parameter", + "startLine": 56, "startColumn": 5, - "endLine": 73, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Exactly one of properties required (requiredXor)", + "endLine": 56, + "endColumn": 12, + "ruleDescription": "Parameter Default must be in AllowedValues", "phase": "SCHEMA" }, { - "ruleId": "F3031", + "ruleId": "F2015", "severity": "FATAL", - "message": "'Special charaters like ^ and \" are not supported' does not match pattern '^([a-z,A-Z,0-9,. _\\-:/()#,@[\\]+=&;\\{\\}!$*])*$'", + "message": "Parameter 'myAllowedPattern' Default 'vpc!@#$' does not match AllowedPattern '^[a-zA-Z0-9]*$'", "source": "SCHEMA", "entity": { - "logicalId": "mySecurityGroupNonVpc", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "logicalId": "myAllowedPattern", + "entityType": "Parameter" }, - "propertyPath": "Properties.GroupDescription", - "category": "Schema", - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 23, - "ruleDescription": "Value does not match pattern", - "phase": "SCHEMA", - "context": { - "actualValue": "Special charaters like ^ and \" are not supported", - "expectedConstraint": "^([a-z,A-Z,0-9,. _\\-:/()#,@[\\]+=&;\\{\\}!$*])*$" - } + "propertyPath": "Parameters/myAllowedPattern/Default", + "category": "Parameter", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 12, + "ruleDescription": "Default value is within parameter constraints", + "phase": "SCHEMA" }, { - "ruleId": "E1041", + "ruleId": "F2015", + "severity": "FATAL", + "message": "Parameter 'myMinValue' Default 0 is less than MinValue 1", + "source": "SCHEMA", + "entity": { + "logicalId": "myMinValue", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/myMinValue/Default", + "category": "Parameter", + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 12, + "ruleDescription": "Default value is within parameter constraints", + "phase": "SCHEMA" + }, + { + "ruleId": "F2015", + "severity": "FATAL", + "message": "Parameter 'myMaxValue' Default 1 exceeds MaxValue 0", + "source": "SCHEMA", + "entity": { + "logicalId": "myMaxValue", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/myMaxValue/Default", + "category": "Parameter", + "startLine": 14, + "startColumn": 5, + "endLine": 14, + "endColumn": 12, + "ruleDescription": "Default value is within parameter constraints", + "phase": "SCHEMA" + }, + { + "ruleId": "F2015", + "severity": "FATAL", + "message": "Parameter 'myMinLength' Default length 3 is less than MinLength 5", + "source": "SCHEMA", + "entity": { + "logicalId": "myMinLength", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/myMinLength/Default", + "category": "Parameter", + "startLine": 25, + "startColumn": 5, + "endLine": 25, + "endColumn": 12, + "ruleDescription": "Default value is within parameter constraints", + "phase": "SCHEMA" + }, + { + "ruleId": "F2015", + "severity": "FATAL", + "message": "Parameter 'myMaxLength' Default length 3 exceeds MaxLength 1", + "source": "SCHEMA", + "entity": { + "logicalId": "myMaxLength", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/myMaxLength/Default", + "category": "Parameter", + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 12, + "ruleDescription": "Default value is within parameter constraints", + "phase": "SCHEMA" + }, + { + "ruleId": "F2015", + "severity": "FATAL", + "message": "Parameter 'CDLAllowedPattern' Default does not match AllowedPattern '[a-z]*$'", + "source": "SCHEMA", + "entity": { + "logicalId": "CDLAllowedPattern", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/CDLAllowedPattern/Default", + "category": "Parameter", + "startLine": 42, + "startColumn": 5, + "endLine": 42, + "endColumn": 12, + "ruleDescription": "Default value is within parameter constraints", + "phase": "SCHEMA" + }, + { + "ruleId": "E2001", "severity": "ERROR", - "message": "{'Ref': 'mySecurityGroupNonVpc'} with formats ['AWS::EC2::SecurityGroup.Name'] does not match destination format of 'AWS::EC2::SecurityGroup.Id'", + "message": "Parameter 'MyEmptyDefault': Default must be a string", "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupVpc", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "logicalId": "MyEmptyDefault", + "entityType": "Parameter" }, - "propertyPath": "Properties.SecurityGroupIngress.3.SourceSecurityGroupId", - "suggestedFix": "Use a Ref to a resource whose type matches the expected format", - "category": "Intrinsic Function", - "startLine": 46, - "startColumn": 9, - "endLine": 46, - "endColumn": 30, - "ruleDescription": "Check if Ref matches destination format", - "phase": "LINT" + "propertyPath": "Parameters/MyEmptyDefault/Default", + "category": "Parameter", + "startLine": 33, + "startColumn": 5, + "endLine": 33, + "endColumn": 12, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "E1041", + "ruleId": "E2001", "severity": "ERROR", - "message": "{'Ref': 'mySecurityGroupNonVpc'} with formats ['AWS::EC2::SecurityGroup.Name'] does not match destination format of 'AWS::EC2::SecurityGroup.Id'", + "message": "Parameter 'MyRefDefault': Type must be a string", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyRefDefault", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/MyRefDefault/Type", + "category": "Parameter", + "startLine": 35, + "startColumn": 5, + "endLine": 35, + "endColumn": 9, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" + }, + { + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'MyRefDefault': Default must be a string", "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupIngress", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "logicalId": "MyRefDefault", + "entityType": "Parameter" }, - "propertyPath": "Properties.SourceSecurityGroupId", - "suggestedFix": "Use a Ref to a resource whose type matches the expected format", - "category": "Intrinsic Function", - "startLine": 64, - "startColumn": 7, - "endLine": 64, - "endColumn": 28, - "ruleDescription": "Check if Ref matches destination format", - "phase": "LINT" + "propertyPath": "Parameters/MyRefDefault/Default", + "category": "Parameter", + "startLine": 36, + "startColumn": 5, + "endLine": 36, + "endColumn": 12, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" }, { - "ruleId": "E1150", - "severity": "ERROR", - "message": "'sg-1234567' does not match format 'AWS::EC2::SecurityGroup.Id'", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'myAllowedPattern' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupNonVpc", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "logicalId": "myAllowedPattern", + "entityType": "Parameter" }, - "propertyPath": "Properties.SecurityGroupIngress.0.SourceSecurityGroupId", - "category": "Intrinsic Function", - "startLine": 27, - "startColumn": 9, - "endLine": 27, - "endColumn": 30, - "ruleDescription": "Validate security group format", - "phase": "SCHEMA", - "context": { - "actualValue": "sg-1234567" - } + "propertyPath": "Parameters/myAllowedPattern", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 19, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "E1150", - "severity": "ERROR", - "message": "'vpc-1234567' does not match format 'AWS::EC2::SecurityGroup.Id'", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'myMinValue' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupVpc", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "logicalId": "myMinValue", + "entityType": "Parameter" }, - "propertyPath": "Properties.SecurityGroupIngress.4.SourceSecurityGroupId", - "category": "Intrinsic Function", - "startLine": 49, - "startColumn": 9, - "endLine": 49, - "endColumn": 30, - "ruleDescription": "Validate security group format", - "phase": "SCHEMA", - "context": { - "actualValue": "vpc-1234567" - } + "propertyPath": "Parameters/myMinValue", + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 13, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-123456' does not match format 'AWS::EC2::Image.Id'", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'myMaxValue' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "myInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "myMaxValue", + "entityType": "Parameter" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 79, - "startColumn": 7, - "endLine": 79, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-123456" - } + "propertyPath": "Parameters/myMaxValue", + "category": "Best Practice", + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 13, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "E3687", - "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'myAllowedValue' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupNonVpc", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "logicalId": "myAllowedValue", + "entityType": "Parameter" }, - "propertyPath": "Properties.SecurityGroupIngress.0", - "category": "Resource", - "startLine": 26, - "startColumn": 19, - "endLine": 26, - "endColumn": 20, - "ruleDescription": "Validate to and from ports based on the protocol", + "propertyPath": "Parameters/myAllowedValue", + "category": "Best Practice", + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 17, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "E3687", - "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'MyEmptyDefault' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupVpc", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "logicalId": "MyEmptyDefault", + "entityType": "Parameter" }, - "propertyPath": "Properties.SecurityGroupIngress.0", - "category": "Resource", - "startLine": 35, - "startColumn": 19, - "endLine": 35, - "endColumn": 20, - "ruleDescription": "Validate to and from ports based on the protocol", + "propertyPath": "Parameters/MyEmptyDefault", + "category": "Best Practice", + "startLine": 31, + "startColumn": 3, + "endLine": 31, + "endColumn": 17, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "E3687", - "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'MyRefDefault' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupVpc", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "logicalId": "MyRefDefault", + "entityType": "Parameter" }, - "propertyPath": "Properties.SecurityGroupIngress.1", - "category": "Resource", - "startLine": 38, - "startColumn": 19, - "endLine": 38, - "endColumn": 20, - "ruleDescription": "Validate to and from ports based on the protocol", + "propertyPath": "Parameters/MyRefDefault", + "category": "Best Practice", + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 15, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "E3687", - "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'CDLAllowedPattern' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupVpc", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "logicalId": "CDLAllowedPattern", + "entityType": "Parameter" }, - "propertyPath": "Properties.SecurityGroupIngress.2", - "category": "Resource", - "startLine": 42, - "startColumn": 19, - "endLine": 42, + "propertyPath": "Parameters/CDLAllowedPattern", + "category": "Best Practice", + "startLine": 37, + "startColumn": 3, + "endLine": 37, "endColumn": 20, - "ruleDescription": "Validate to and from ports based on the protocol", + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "E3687", - "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'CDLAllowedValues' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupVpc", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "logicalId": "CDLAllowedValues", + "entityType": "Parameter" }, - "propertyPath": "Properties.SecurityGroupIngress.3", - "category": "Resource", - "startLine": 45, - "startColumn": 19, - "endLine": 45, - "endColumn": 20, - "ruleDescription": "Validate to and from ports based on the protocol", + "propertyPath": "Parameters/CDLAllowedValues", + "category": "Best Practice", + "startLine": 43, + "startColumn": 3, + "endLine": 43, + "endColumn": 19, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "E3687", - "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'CDLAllowedValuesWithSpaces' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupVpc", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "logicalId": "CDLAllowedValuesWithSpaces", + "entityType": "Parameter" }, - "propertyPath": "Properties.SecurityGroupIngress.4", - "category": "Resource", - "startLine": 48, - "startColumn": 19, - "endLine": 48, - "endColumn": 20, - "ruleDescription": "Validate to and from ports based on the protocol", + "propertyPath": "Parameters/CDLAllowedValuesWithSpaces", + "category": "Best Practice", + "startLine": 52, + "startColumn": 3, + "endLine": 52, + "endColumn": 29, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" + } + ] + }, + "bad/pipeline_no_source_first_stage.yaml": { + "filePath": "bad/pipeline_no_source_first_stage.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 2, + "errors": 1, + "warnings": 2, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "E3687", - "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", - "source": "CFN_LINT", + "ruleId": "F3014", + "severity": "FATAL", + "message": "Exactly one of ['ArtifactStore', 'ArtifactStores'] must be specified", + "source": "SCHEMA", "entity": { - "logicalId": "mySecurityGroupIngress", + "logicalId": "Pipeline", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::CodePipeline::Pipeline" }, "propertyPath": "Properties", - "category": "Resource", - "startLine": 61, + "category": "Schema", + "startLine": 5, "startColumn": 5, - "endLine": 61, + "endLine": 5, "endColumn": 15, - "ruleDescription": "Validate to and from ports based on the protocol", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", + "ruleDescription": "Exactly one of properties required (requiredXor)", + "phase": "SCHEMA" }, { - "ruleId": "E3687", - "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", - "source": "CFN_LINT", + "ruleId": "F3032", + "severity": "FATAL", + "message": "expected minimum item count: 2, found: 1", + "source": "SCHEMA", "entity": { - "logicalId": "mySecurityGroupIngress2", + "logicalId": "Pipeline", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties", - "category": "Resource", - "startLine": 67, - "startColumn": 5, - "endLine": 67, - "endColumn": 15, - "ruleDescription": "Validate to and from ports based on the protocol", - "phase": "LINT" + "propertyPath": "Properties.Stages", + "category": "Schema", + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", + "ruleDescription": "Array item count out of bounds", + "phase": "SCHEMA", + "context": { + "extra": { + "actual_count": 1, + "min_items": 2 + } + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", + "ruleId": "E3700", + "severity": "ERROR", + "message": "First stage of a pipeline must contain at least one Source action", "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupNonVpc", + "logicalId": "Pipeline", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties.SecurityGroupIngress.0.IpProtocol", - "category": "Best Practice", - "startLine": 26, - "startColumn": 9, - "endLine": 26, - "endColumn": 19, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Properties.Stages[0]", + "suggestedFix": "Add an action with ActionTypeId.Category=Source to the first stage", + "category": "Resource", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Validate CodePipeline Source actions are only in the first stage", + "phase": "LINT" }, { - "ruleId": "W9003", + "ruleId": "W9002", "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc", + "logicalId": "Pipeline", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties.SecurityGroupIngress.0.IpProtocol", + "propertyPath": "Properties.RoleArn", "category": "Best Practice", - "startLine": 35, - "startColumn": 9, - "endLine": 35, - "endColumn": 19, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 14, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" }, { - "ruleId": "W9003", + "ruleId": "W9013", "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc", + "logicalId": "Pipeline", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties.SecurityGroupIngress.1.IpProtocol", - "category": "Best Practice", - "startLine": 38, - "startColumn": 9, - "endLine": 38, - "endColumn": 19, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "category": "Security", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc", + "logicalId": "Pipeline", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties.SecurityGroupIngress.3.IpProtocol", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 45, - "startColumn": 9, - "endLine": 45, - "endColumn": 19, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Pipeline' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc", + "logicalId": "Pipeline", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties.SecurityGroupIngress.4.IpProtocol", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 48, - "startColumn": 9, - "endLine": 48, - "endColumn": 19, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/previous_gen_instance.yaml": { + "filePath": "bad/previous_gen_instance.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 5, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W9003", + "ruleId": "W9010", "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupIngress", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.IpProtocol", - "category": "Best Practice", - "startLine": 63, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 7, "startColumn": 7, - "endLine": 63, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 7, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 'm1.small' - consider upgrading", "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupIngress2", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.InstanceType", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 69, + "startLine": 6, "startColumn": 7, - "endLine": 69, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endLine": 6, + "endColumn": 19, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupNonVpc", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 23, + "startLine": 6, "startColumn": 7, - "endLine": 23, - "endColumn": 23, + "endLine": 6, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 31, + "startLine": 7, "startColumn": 7, - "endLine": 31, - "endColumn": 23, + "endLine": 7, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -76829,332 +75445,361 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9003", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", "source": "ENGINE", - "entity": { - "logicalId": "mySecurityGroupVpc", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 32, - "startColumn": 7, - "endLine": 32, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'myVpcId' (type AWS::EC2::VPC::Id)" - } + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroupRuleSSM", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 54, + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/previous_generation_instances.yaml": { + "filePath": "bad/previous_generation_instances.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 6, + "counts": { + "fatal": 1, + "errors": 2, + "warnings": 0, + "informational": 23, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3003", + "severity": "FATAL", + "message": "'AvailabilityZone' is a required property", + "source": "SCHEMA", + "entity": { + "logicalId": "Host", + "entityType": "Resource", + "resourceType": "AWS::EC2::Host" + }, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'AvailabilityZone'", + "category": "Schema", + "startLine": 26, + "startColumn": 5, + "endLine": 26, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-abc' does not match format 'AWS::EC2::Image.Id'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 8, "startColumn": 7, - "endLine": 54, + "endLine": 8, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "ruleDescription": "Validate AMI id format", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'mySecurityGroupVpc'" + "actualValue": "ami-abc" } }, { - "ruleId": "I9001", + "ruleId": "E3647", + "severity": "ERROR", + "message": "'cache.r3.large' is not valid in any region", + "source": "CFN_LINT", + "entity": { + "logicalId": "CacheCluster", + "entityType": "Resource", + "resourceType": "AWS::ElastiCache::CacheCluster" + }, + "propertyPath": "Properties.CacheNodeType", + "category": "Resource", + "startLine": 16, + "startColumn": 7, + "endLine": 16, + "endColumn": 20, + "ruleDescription": "Validate ElastiCache cluster cache node type", + "phase": "LINT" + }, + { + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "SecurityGroupRuleSSM", + "logicalId": "Domain", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Elasticsearch::Domain" }, - "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 55, - "startColumn": 7, - "endLine": 55, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 9, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "SecurityGroupRuleSSM", + "logicalId": "Domain", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Elasticsearch::Domain" }, - "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 56, - "startColumn": 7, - "endLine": 56, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 9, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "SecurityGroupRuleSSM", + "logicalId": "DBInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 57, - "startColumn": 7, - "endLine": 57, + "startLine": 9, + "startColumn": 3, + "endLine": 9, "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "SecurityGroupRuleSSM", + "logicalId": "DBInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.CidrIp", "category": "Best Practice", - "startLine": 58, - "startColumn": 7, - "endLine": 58, + "startLine": 9, + "startColumn": 3, + "endLine": 9, "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (dynamic reference: {{resolve:ssm:mysubnet}})" - } + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "mySecurityGroupIngress", + "logicalId": "CacheCluster", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ElastiCache::CacheCluster" }, - "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 62, - "startColumn": 7, - "endLine": 62, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'mySecurityGroupVpc'" - } + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 15, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "mySecurityGroupIngress", + "logicalId": "CacheCluster", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ElastiCache::CacheCluster" }, - "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 63, - "startColumn": 7, - "endLine": 63, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 15, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "mySecurityGroupIngress", + "logicalId": "Domain2", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Elasticsearch::Domain" }, - "propertyPath": "Properties.SourceSecurityGroupId", "category": "Best Practice", - "startLine": 64, - "startColumn": 7, - "endLine": 64, - "endColumn": 28, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'mySecurityGroupNonVpc'" - } + "startLine": 19, + "startColumn": 3, + "endLine": 19, + "endColumn": 10, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "mySecurityGroupIngress2", + "logicalId": "Domain2", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Elasticsearch::Domain" }, - "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 68, - "startColumn": 7, - "endLine": 68, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'mySecurityGroupVpc'" - } + "startLine": 19, + "startColumn": 3, + "endLine": 19, + "endColumn": 10, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3100", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Previous generation instance type 'm1.small' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupIngress2", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.InstanceType", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 69, + "startLine": 7, "startColumn": 7, - "endLine": 69, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 7, + "endColumn": 19, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3100", "severity": "INFO", - "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Previous generation instance type 'db.t1.micro' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupIngress2", + "logicalId": "DBInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SourceSecurityGroupId", + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 70, + "startLine": 12, "startColumn": 7, - "endLine": 70, - "endColumn": 28, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'mySecurity3Group' (type String)" - } + "endLine": 12, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3100", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupIngressExclusive", + "logicalId": "CacheCluster", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ElastiCache::CacheCluster" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.CacheNodeType", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 74, + "startLine": 16, "startColumn": 7, - "endLine": 74, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'mySecurityGroupVpc'" - } + "endLine": 16, + "endColumn": 20, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" + }, + { + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 'm3.medium.elasticsearch' - consider upgrading", + "source": "CFN_LINT", + "entity": { + "logicalId": "Domain2", + "entityType": "Resource", + "resourceType": "AWS::Elasticsearch::Domain" + }, + "propertyPath": "Properties.ElasticsearchClusterConfig.InstanceType", + "suggestedFix": "Upgrade to a current generation instance type", + "category": "Best Practice", + "startLine": 23, + "startColumn": 9, + "endLine": 23, + "endColumn": 21, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupIngressExclusive", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.GroupName", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 75, + "startLine": 7, "startColumn": 7, - "endLine": 75, - "endColumn": 16, + "endLine": 7, + "endColumn": 19, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { @@ -77163,15 +75808,15 @@ "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "Instance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 79, + "startLine": 8, "startColumn": 7, - "endLine": 79, + "endLine": 8, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -77183,348 +75828,189 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Engine' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "CacheCluster", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ElastiCache::CacheCluster" }, - "propertyPath": "Properties.SecurityGroupIds", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 80, + "startLine": 17, "startColumn": 7, - "endLine": 80, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 17, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'mySecurityGroupNonVpc' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupNonVpc", + "logicalId": "Host", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Host" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 22, - "startColumn": 5, - "endLine": 22, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 27, + "startColumn": 7, + "endLine": 27, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'mySecurityGroupVpc' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'Domain' of type 'AWS::Elasticsearch::Domain' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc", + "logicalId": "Domain", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Elasticsearch::Domain" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 30, - "startColumn": 5, - "endLine": 30, - "endColumn": 15, + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 9, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "Instance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 78, + "startLine": 6, "startColumn": 5, - "endLine": 78, + "endLine": 6, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/rds_dbclusterinstanceclass_invalid.yaml": { - "filePath": "bad/rds_dbclusterinstanceclass_invalid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 3, - "errors": 1, - "warnings": 1, - "informational": 7, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'AllocatedStorage' is a required property (from extension)", - "source": "SCHEMA", - "entity": { - "logicalId": "Cluster", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "propertyPath": "Properties", - "suggestedFix": "Add 'AllocatedStorage'", - "category": "Schema", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Required property missing", - "phase": "SCHEMA" - }, - { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'Iops' is a required property (from extension)", - "source": "SCHEMA", - "entity": { - "logicalId": "Cluster", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "propertyPath": "Properties", - "suggestedFix": "Add 'Iops'", - "category": "Schema", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Required property missing", - "phase": "SCHEMA" - }, - { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'StorageType' is a required property (from extension)", - "source": "SCHEMA", - "entity": { - "logicalId": "Cluster", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "propertyPath": "Properties", - "suggestedFix": "Add 'StorageType'", - "category": "Schema", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Required property missing", - "phase": "SCHEMA" - }, - { - "ruleId": "E3694", - "severity": "ERROR", - "message": "'db.bogus.class' is not one of ['db.c6gd.12xlarge', 'db.c6gd.16xlarge', 'db.c6gd.2xlarge', 'db.c6gd.4xlarge', 'db.c6gd.8xlarge', 'db.c6gd.large', 'db.c6gd.medium', 'db.c6gd.xlarge', 'db.m5d.12xlarge', 'db.m5d.16xlarge', 'db.m5d.24xlarge', 'db.m5d.2xlarge', 'db.m5d.4xlarge', 'db.m5d.8xlarge', 'db.m5d.large', 'db.m5d.xlarge', 'db.m6gd.12xlarge', 'db.m6gd.16xlarge', 'db.m6gd.2xlarge', 'db.m6gd.4xlarge', 'db.m6gd.8xlarge', 'db.m6gd.large', 'db.m6gd.xlarge', 'db.m6id.12xlarge', 'db.m6id.16xlarge', 'db.m6id.24xlarge', 'db.m6id.2xlarge', 'db.m6id.32xlarge', 'db.m6id.4xlarge', 'db.m6id.8xlarge', 'db.m6id.large', 'db.m6id.xlarge', 'db.m6idn.12xlarge', 'db.m6idn.16xlarge', 'db.m6idn.24xlarge', 'db.m6idn.2xlarge', 'db.m6idn.32xlarge', 'db.m6idn.4xlarge', 'db.m6idn.8xlarge', 'db.m6idn.large', 'db.m6idn.xlarge', 'db.m8gd.12xlarge', 'db.m8gd.16xlarge', 'db.m8gd.24xlarge', 'db.m8gd.2xlarge', 'db.m8gd.48xlarge', 'db.m8gd.4xlarge', 'db.m8gd.8xlarge', 'db.m8gd.large', 'db.m8gd.xlarge', 'db.r5d.12xlarge', 'db.r5d.16xlarge', 'db.r5d.24xlarge', 'db.r5d.2xlarge', 'db.r5d.4xlarge', 'db.r5d.8xlarge', 'db.r5d.large', 'db.r5d.xlarge', 'db.r6gd.12xlarge', 'db.r6gd.16xlarge', 'db.r6gd.2xlarge', 'db.r6gd.4xlarge', 'db.r6gd.8xlarge', 'db.r6gd.large', 'db.r6gd.xlarge', 'db.r6id.12xlarge', 'db.r6id.16xlarge', 'db.r6id.24xlarge', 'db.r6id.2xlarge', 'db.r6id.32xlarge', 'db.r6id.4xlarge', 'db.r6id.8xlarge', 'db.r6id.large', 'db.r6id.xlarge', 'db.r6idn.12xlarge', 'db.r6idn.16xlarge', 'db.r6idn.24xlarge', 'db.r6idn.2xlarge', 'db.r6idn.32xlarge', 'db.r6idn.4xlarge', 'db.r6idn.8xlarge', 'db.r6idn.large', 'db.r6idn.xlarge', 'db.r8gd.12xlarge', 'db.r8gd.16xlarge', 'db.r8gd.24xlarge', 'db.r8gd.2xlarge', 'db.r8gd.48xlarge', 'db.r8gd.4xlarge', 'db.r8gd.8xlarge', 'db.r8gd.large', 'db.r8gd.xlarge', 'db.x2idn.16xlarge', 'db.x2idn.24xlarge', 'db.x2idn.32xlarge', 'db.x2iedn.16xlarge', 'db.x2iedn.24xlarge', 'db.x2iedn.2xlarge', 'db.x2iedn.32xlarge', 'db.x2iedn.4xlarge', 'db.x2iedn.8xlarge', 'db.x2iedn.xlarge'] when Engine is 'mysql' in any region", - "source": "CFN_LINT", - "entity": { - "logicalId": "Cluster", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "propertyPath": "Properties.DBClusterInstanceClass", - "category": "Resource", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 29, - "ruleDescription": "Validates RDS DB Cluster instance class", - "phase": "LINT" - }, - { - "ruleId": "W2501", - "severity": "WARN", - "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", - "source": "CFN_LINT", - "entity": { - "logicalId": "Cluster", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 25, - "ruleDescription": "Check if Password Properties are correctly configured", - "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": "Cluster", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "category": "Best Practice", - "startLine": 5, - "startColumn": 3, - "endLine": 5, - "endColumn": 10, - "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": "Cluster", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "category": "Best Practice", - "startLine": 5, - "startColumn": 3, - "endLine": 5, - "endColumn": 10, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'DBInstance' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "DBInstance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 7, + "startLine": 11, "startColumn": 5, - "endLine": 7, + "endLine": 11, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'CacheCluster' of type 'AWS::ElastiCache::CacheCluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "CacheCluster", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::ElastiCache::CacheCluster" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'Domain2' of type 'AWS::Elasticsearch::Domain' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "Domain2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::Elasticsearch::Domain" }, - "propertyPath": "Properties.MasterUsername", - "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "startLine": 21, + "startColumn": 5, + "endLine": 21, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Cluster' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", + "message": "Resource 'Host' of type 'AWS::EC2::Host' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "Host", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::Host" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 7, + "startLine": 26, "startColumn": 5, - "endLine": 7, + "endLine": 26, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/rds_dbinstanceclass_mixed_case_engine.yaml": { - "filePath": "bad/rds_dbinstanceclass_mixed_case_engine.yaml", + "bad/properties_ebs.yaml": { + "filePath": "bad/properties_ebs.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 3, "counts": { - "fatal": 0, - "errors": 1, - "warnings": 1, - "informational": 6, + "fatal": 1, + "errors": 3, + "warnings": 6, + "informational": 14, "debug": 0 }, "suppressed": 0, @@ -77533,423 +76019,333 @@ }, "diagnostics": [ { - "ruleId": "E3025", - "severity": "ERROR", - "message": "'totally.bogus.class' is not one of ['db.m1.large', 'db.m1.medium', 'db.m1.small', 'db.m1.xlarge', 'db.m2.2xlarge', 'db.m2.4xlarge', 'db.m2.xlarge', 'db.m3.2xlarge', 'db.m3.large', 'db.m3.medium', 'db.m3.xlarge', 'db.m4.10xlarge', 'db.m4.16xlarge', 'db.m4.2xlarge', 'db.m4.4xlarge', 'db.m4.large', 'db.m4.xlarge', 'db.m5.12xlarge', 'db.m5.16xlarge', 'db.m5.24xlarge', 'db.m5.2xlarge', 'db.m5.4xlarge', 'db.m5.8xlarge', 'db.m5.large', 'db.m5.xlarge', 'db.m5d.12xlarge', 'db.m5d.16xlarge', 'db.m5d.24xlarge', 'db.m5d.2xlarge', 'db.m5d.4xlarge', 'db.m5d.8xlarge', 'db.m5d.large', 'db.m5d.xlarge', 'db.m6g.12xlarge', 'db.m6g.16xlarge', 'db.m6g.2xlarge', 'db.m6g.4xlarge', 'db.m6g.8xlarge', 'db.m6g.large', 'db.m6g.xlarge', 'db.m6gd.12xlarge', 'db.m6gd.16xlarge', 'db.m6gd.2xlarge', 'db.m6gd.4xlarge', 'db.m6gd.8xlarge', 'db.m6gd.large', 'db.m6gd.xlarge', 'db.m6i.12xlarge', 'db.m6i.16xlarge', 'db.m6i.24xlarge', 'db.m6i.2xlarge', 'db.m6i.32xlarge', 'db.m6i.4xlarge', 'db.m6i.8xlarge', 'db.m6i.large', 'db.m6i.xlarge', 'db.m6id.12xlarge', 'db.m6id.16xlarge', 'db.m6id.24xlarge', 'db.m6id.2xlarge', 'db.m6id.32xlarge', 'db.m6id.4xlarge', 'db.m6id.8xlarge', 'db.m6id.large', 'db.m6id.xlarge', 'db.m6idn.12xlarge', 'db.m6idn.16xlarge', 'db.m6idn.24xlarge', 'db.m6idn.2xlarge', 'db.m6idn.32xlarge', 'db.m6idn.4xlarge', 'db.m6idn.8xlarge', 'db.m6idn.large', 'db.m6idn.xlarge', 'db.m6in.12xlarge', 'db.m6in.16xlarge', 'db.m6in.24xlarge', 'db.m6in.2xlarge', 'db.m6in.32xlarge', 'db.m6in.4xlarge', 'db.m6in.8xlarge', 'db.m6in.large', 'db.m6in.xlarge', 'db.m7g.12xlarge', 'db.m7g.16xlarge', 'db.m7g.2xlarge', 'db.m7g.4xlarge', 'db.m7g.8xlarge', 'db.m7g.large', 'db.m7g.xlarge', 'db.m7i.12xlarge', 'db.m7i.16xlarge', 'db.m7i.24xlarge', 'db.m7i.2xlarge', 'db.m7i.48xlarge', 'db.m7i.4xlarge', 'db.m7i.8xlarge', 'db.m7i.large', 'db.m7i.xlarge', 'db.m8g.12xlarge', 'db.m8g.16xlarge', 'db.m8g.24xlarge', 'db.m8g.2xlarge', 'db.m8g.48xlarge', 'db.m8g.4xlarge', 'db.m8g.8xlarge', 'db.m8g.large', 'db.m8g.xlarge', 'db.m8gd.12xlarge', 'db.m8gd.16xlarge', 'db.m8gd.24xlarge', 'db.m8gd.2xlarge', 'db.m8gd.48xlarge', 'db.m8gd.4xlarge', 'db.m8gd.8xlarge', 'db.m8gd.large', 'db.m8gd.xlarge', 'db.m9g.12xlarge', 'db.m9g.16xlarge', 'db.m9g.24xlarge', 'db.m9g.2xlarge', 'db.m9g.48xlarge', 'db.m9g.4xlarge', 'db.m9g.8xlarge', 'db.m9g.large', 'db.m9g.xlarge', 'db.r3.2xlarge', 'db.r3.4xlarge', 'db.r3.8xlarge', 'db.r3.large', 'db.r3.xlarge', 'db.r4.16xlarge', 'db.r4.2xlarge', 'db.r4.4xlarge', 'db.r4.8xlarge', 'db.r4.large', 'db.r4.xlarge', 'db.r5.12xlarge', 'db.r5.16xlarge', 'db.r5.24xlarge', 'db.r5.2xlarge', 'db.r5.4xlarge', 'db.r5.8xlarge', 'db.r5.large', 'db.r5.xlarge', 'db.r5b.12xlarge', 'db.r5b.16xlarge', 'db.r5b.24xlarge', 'db.r5b.2xlarge', 'db.r5b.4xlarge', 'db.r5b.8xlarge', 'db.r5b.large', 'db.r5b.xlarge', 'db.r5d.12xlarge', 'db.r5d.16xlarge', 'db.r5d.24xlarge', 'db.r5d.2xlarge', 'db.r5d.4xlarge', 'db.r5d.8xlarge', 'db.r5d.large', 'db.r5d.xlarge', 'db.r6g.12xlarge', 'db.r6g.16xlarge', 'db.r6g.2xlarge', 'db.r6g.4xlarge', 'db.r6g.8xlarge', 'db.r6g.large', 'db.r6g.xlarge', 'db.r6gd.12xlarge', 'db.r6gd.16xlarge', 'db.r6gd.2xlarge', 'db.r6gd.4xlarge', 'db.r6gd.8xlarge', 'db.r6gd.large', 'db.r6gd.xlarge', 'db.r6i.12xlarge', 'db.r6i.16xlarge', 'db.r6i.24xlarge', 'db.r6i.2xlarge', 'db.r6i.32xlarge', 'db.r6i.4xlarge', 'db.r6i.8xlarge', 'db.r6i.large', 'db.r6i.xlarge', 'db.r6id.12xlarge', 'db.r6id.16xlarge', 'db.r6id.24xlarge', 'db.r6id.2xlarge', 'db.r6id.32xlarge', 'db.r6id.4xlarge', 'db.r6id.8xlarge', 'db.r6id.large', 'db.r6id.xlarge', 'db.r6idn.12xlarge', 'db.r6idn.16xlarge', 'db.r6idn.24xlarge', 'db.r6idn.2xlarge', 'db.r6idn.32xlarge', 'db.r6idn.4xlarge', 'db.r6idn.8xlarge', 'db.r6idn.large', 'db.r6idn.xlarge', 'db.r6in.12xlarge', 'db.r6in.16xlarge', 'db.r6in.24xlarge', 'db.r6in.2xlarge', 'db.r6in.32xlarge', 'db.r6in.4xlarge', 'db.r6in.8xlarge', 'db.r6in.large', 'db.r6in.xlarge', 'db.r7g.12xlarge', 'db.r7g.16xlarge', 'db.r7g.2xlarge', 'db.r7g.4xlarge', 'db.r7g.8xlarge', 'db.r7g.large', 'db.r7g.xlarge', 'db.r7i.12xlarge', 'db.r7i.16xlarge', 'db.r7i.24xlarge', 'db.r7i.2xlarge', 'db.r7i.48xlarge', 'db.r7i.4xlarge', 'db.r7i.8xlarge', 'db.r7i.large', 'db.r7i.xlarge', 'db.r8g.12xlarge', 'db.r8g.16xlarge', 'db.r8g.24xlarge', 'db.r8g.2xlarge', 'db.r8g.48xlarge', 'db.r8g.4xlarge', 'db.r8g.8xlarge', 'db.r8g.large', 'db.r8g.xlarge', 'db.r8gd.12xlarge', 'db.r8gd.16xlarge', 'db.r8gd.24xlarge', 'db.r8gd.2xlarge', 'db.r8gd.48xlarge', 'db.r8gd.4xlarge', 'db.r8gd.8xlarge', 'db.r8gd.large', 'db.r8gd.xlarge', 'db.t1.micro', 'db.t2.2xlarge', 'db.t2.large', 'db.t2.medium', 'db.t2.micro', 'db.t2.small', 'db.t2.xlarge', 'db.t3.2xlarge', 'db.t3.large', 'db.t3.medium', 'db.t3.micro', 'db.t3.small', 'db.t3.xlarge', 'db.t4g.2xlarge', 'db.t4g.large', 'db.t4g.medium', 'db.t4g.micro', 'db.t4g.small', 'db.t4g.xlarge', 'db.x2g.12xlarge', 'db.x2g.16xlarge', 'db.x2g.2xlarge', 'db.x2g.4xlarge', 'db.x2g.8xlarge', 'db.x2g.large', 'db.x2g.xlarge', 'db.x2iedn.16xlarge', 'db.x2iedn.24xlarge', 'db.x2iedn.2xlarge', 'db.x2iedn.32xlarge', 'db.x2iedn.4xlarge', 'db.x2iedn.8xlarge', 'db.x2iedn.xlarge'] when Engine is 'mysql' in any region", - "source": "CFN_LINT", - "entity": { - "logicalId": "Db", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.DBInstanceClass", - "category": "Resource", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 22, - "ruleDescription": "Validates RDS DB Instance Class", - "phase": "LINT" - }, - { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", + "ruleId": "F3034", + "severity": "FATAL", + "message": "10 is less than the minimum of 100", + "source": "SCHEMA", "entity": { - "logicalId": "Db", + "logicalId": "MyLaunchConfig", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", + "category": "Schema", + "startLine": 50, + "startColumn": 13, + "endLine": 50, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Numeric value out of bounds", + "phase": "SCHEMA", + "context": { + "actualValue": 10 + } }, { - "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)", + "ruleId": "E3671", + "severity": "ERROR", + "message": "0 is less than the minimum of 100", "source": "CFN_LINT", "entity": { - "logicalId": "Db", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "category": "Best Practice", - "startLine": 5, - "startColumn": 3, - "endLine": 5, - "endColumn": 5, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", + "category": "Resource", + "startLine": 17, + "startColumn": 13, + "endLine": 17, + "endColumn": 17, + "ruleDescription": "Validate block device mapping configuration", "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)", + "ruleId": "E3671", + "severity": "ERROR", + "message": "10 is less than the minimum of 100", "source": "CFN_LINT", "entity": { - "logicalId": "Db", + "logicalId": "MyLaunchConfig", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "category": "Best Practice", - "startLine": 5, - "startColumn": 3, - "endLine": 5, - "endColumn": 5, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", + "category": "Resource", + "startLine": 50, + "startColumn": 13, + "endLine": 50, + "endColumn": 17, + "ruleDescription": "Validate block device mapping configuration", "phase": "LINT" }, { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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)", + "ruleId": "E3715", + "severity": "ERROR", + "message": "'ephemeralA' is not a valid ephemeral device name. Expected format is 'ephemeralN' where N is 0-23", "source": "CFN_LINT", "entity": { - "logicalId": "Db", + "logicalId": "MyEC2Instance3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "propertyPath": "Properties.BlockDeviceMappings.0.VirtualName", + "category": "Resource", + "startLine": 36, + "startColumn": 9, + "endLine": 36, + "endColumn": 20, + "ruleDescription": "VirtualName must use ephemeral device format when Ebs is absent", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3030", + "severity": "WARN", + "message": "'magnetic' is not one of ['gp2', 'gp3', 'io1', 'io2', 'sc1', 'st1', 'standard']", + "source": "CFN_LINT", "entity": { - "logicalId": "Db", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "propertyPath": "Properties.BlockDeviceMappings.1.Ebs.VolumeType", + "category": "Schema", + "startLine": 23, + "startColumn": 13, + "endLine": 23, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Value not in allowed enum", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "actualValue": "magnetic" } }, { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Db' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3671", + "severity": "WARN", + "message": "Iops is ignored when VolumeType is 'standard'", + "source": "CFN_LINT", "entity": { - "logicalId": "Db", + "logicalId": "MyLaunchConfig", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BlockDeviceMappings.1.Ebs.Iops", "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 57, + "startColumn": 13, + "endLine": 57, + "endColumn": 17, + "ruleDescription": "Iops is ignored for certain EBS volume types", "phase": "LINT" - } - ] - }, - "bad/rds_public.yaml": { - "filePath": "bad/rds_public.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 8, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W2501", + "ruleId": "W3697", "severity": "WARN", - "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", "source": "CFN_LINT", "entity": { - "logicalId": "Database", + "logicalId": "MyLaunchConfig", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 25, - "ruleDescription": "Check if Password Properties are correctly configured", - "phase": "LINT" + "category": "Deprecation", + "startLine": 40, + "startColumn": 3, + "endLine": 40, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" }, { - "ruleId": "W9011", + "ruleId": "W9003", "severity": "WARN", - "message": "RDS instance has PubliclyAccessible set to true - consider restricting access", - "source": "ENGINE", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "Database", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.PubliclyAccessible", - "suggestedFix": "Set PubliclyAccessible to false", - "category": "Security", + "propertyPath": "Properties.KeyName", + "category": "Best Practice", "startLine": 11, "startColumn": 7, "endLine": 11, - "endColumn": 25, - "ruleDescription": "RDS instance PubliclyAccessible is true", - "phase": "LINT", - "context": { - "actualValue": true - } + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "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", + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", "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", + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "MyEC2Instance3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 32, + "startColumn": 7, + "endLine": 32, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I3100", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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)", + "message": "Previous generation instance type 't1.micro' - consider upgrading", "source": "CFN_LINT", "entity": { - "logicalId": "Database", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties", + "propertyPath": "Properties.InstanceType", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 19, + "ruleDescription": "Checks for legacy instance type generations", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 7, + "startLine": 9, "startColumn": 7, - "endLine": 7, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 9, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 8, + "startLine": 10, "startColumn": 7, - "endLine": 8, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 10, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.KeyName", "category": "Best Practice", - "startLine": 10, + "startLine": 11, "startColumn": 7, - "endLine": 10, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 11, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Database' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/redshift_internet_accessible.yaml": { - "filePath": "bad/redshift_internet_accessible.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 13, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet1", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.BlockDeviceMappings", "category": "Best Practice", - "startLine": 6, + "startLine": 12, "startColumn": 7, - "endLine": 6, - "endColumn": 12, + "endLine": 12, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet1", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.NetworkInterfaces", "category": "Best Practice", - "startLine": 7, + "startLine": 27, "startColumn": 7, - "endLine": 7, - "endColumn": 16, + "endLine": 27, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -77959,19 +76355,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPC", + "logicalId": "MyEC2Instance3", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 11, + "startLine": 32, "startColumn": 7, - "endLine": 11, - "endColumn": 16, + "endLine": 32, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -77981,144 +76378,120 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RouteTable1", + "logicalId": "MyEC2Instance3", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.BlockDeviceMappings", "category": "Best Practice", - "startLine": 21, + "startLine": 33, "startColumn": 7, - "endLine": 21, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 33, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetRTAssoc", + "logicalId": "MyLaunchConfig", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 25, + "startLine": 43, "startColumn": 7, - "endLine": 25, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 43, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Subnet1'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetRTAssoc", + "logicalId": "MyLaunchConfig", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 26, + "startLine": 44, "startColumn": 7, - "endLine": 26, + "endLine": 44, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'RouteTable1'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'BlockDeviceMappings' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Route1", + "logicalId": "MyLaunchConfig", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.BlockDeviceMappings", "category": "Best Practice", - "startLine": 33, + "startLine": 45, "startColumn": 7, - "endLine": 33, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 45, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'RouteTable1'" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9003", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", "source": "ENGINE", - "entity": { - "logicalId": "Route1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 34, - "startColumn": 7, - "endLine": 34, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Subnet1' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'MyEC2Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Subnet1", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 8, "startColumn": 5, - "endLine": 5, + "endLine": 8, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -78126,545 +76499,592 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'VPC' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "message": "Resource 'MyEC2Instance3' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPC", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "logicalId": "MyEC2Instance3", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 31, + "startColumn": 5, + "endLine": 31, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/properties_password.yaml": { + "filePath": "bad/properties_password.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 13, + "informational": 19, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W1011", + "severity": "WARN", + "message": "Use dynamic references (e.g., SSM SecureString) instead of parameter 'MyPassword' for secrets", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyDB", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.MasterUserPassword", + "category": "Security", + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 25, + "ruleDescription": "Instead of REFing a parameter for a secret use a dynamic reference", + "phase": "LINT" + }, + { + "ruleId": "W1011", + "severity": "WARN", + "message": "Use dynamic references (e.g., SSM SecureString) instead of parameter 'MyNewPassword' for secrets", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyNewDB", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.MasterUserPassword", + "category": "Security", + "startLine": 32, + "startColumn": 7, + "endLine": 32, + "endColumn": 25, + "ruleDescription": "Instead of REFing a parameter for a secret use a dynamic reference", + "phase": "LINT" + }, + { + "ruleId": "W2501", + "severity": "WARN", + "message": "Parameter MyPassword used as MasterUserPassword, therefore NoEcho should be True", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyPassword", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/MyPassword", + "category": "Security", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 13, + "ruleDescription": "Check if Password Properties are correctly configured", + "phase": "LINT" + }, + { + "ruleId": "W2501", + "severity": "WARN", + "message": "Parameter MyNewPassword used as MasterUserPassword, therefore NoEcho should be True", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyNewPassword", + "entityType": "Parameter" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", + "propertyPath": "Parameters/MyNewPassword", + "category": "Security", "startLine": 10, - "startColumn": 5, + "startColumn": 3, "endLine": 10, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endColumn": 16, + "ruleDescription": "Check if Password Properties are correctly configured", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'RedshiftSubnetGroup' of type 'AWS::Redshift::ClusterSubnetGroup' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W2501", + "severity": "WARN", + "message": "Password should use a secure dynamic reference for Resources/myThirdDb/Properties/MasterUserPassword", + "source": "CFN_LINT", "entity": { - "logicalId": "RedshiftSubnetGroup", + "logicalId": "myThirdDb", "entityType": "Resource", - "resourceType": "AWS::Redshift::ClusterSubnetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 14, - "startColumn": 5, - "endLine": 14, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.MasterUserPassword", + "category": "Security", + "startLine": 41, + "startColumn": 7, + "endLine": 41, + "endColumn": 25, + "ruleDescription": "Check if Password Properties are correctly configured", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'RouteTable1' of type 'AWS::EC2::RouteTable' supports Tags but none are configured", + "ruleId": "W2509", + "severity": "WARN", + "message": "Parameter 'MyPassword' appears to be a password but does not have NoEcho set to true", "source": "ENGINE", "entity": { - "logicalId": "RouteTable1", - "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "logicalId": "MyPassword", + "entityType": "Parameter" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Parameters/MyPassword", + "category": "Security", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 13, + "ruleDescription": "Password parameter should have NoEcho", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'IGW' of type 'AWS::EC2::InternetGateway' supports Tags but none are configured", + "ruleId": "W2509", + "severity": "WARN", + "message": "Parameter 'MyNewPassword' appears to be a password but does not have NoEcho set to true", "source": "ENGINE", "entity": { - "logicalId": "IGW", - "entityType": "Resource", - "resourceType": "AWS::EC2::InternetGateway" + "logicalId": "MyNewPassword", + "entityType": "Parameter" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 29, - "startColumn": 5, - "endLine": 29, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Parameters/MyNewPassword", + "category": "Security", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 16, + "ruleDescription": "Password parameter should have NoEcho", "phase": "LINT" - } - ] - }, - "bad/refs.yaml": { - "filePath": "bad/refs.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 4, - "errors": 0, - "warnings": 2, - "informational": 17, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F1018", - "severity": "FATAL", - "message": "Fn::Sub variable '${Package}' does not reference a valid resource, parameter, or pseudo-parameter", - "source": "SCHEMA", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "source": "CFN_LINT", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.UserData", - "category": "Intrinsic Function", - "startLine": 21, - "startColumn": 7, - "endLine": 21, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Sub variables must resolve", - "phase": "SCHEMA", - "context": { - "resolutionSource": "dynamic (Sub:yum install ${Package}\n)" - } + "category": "Best Practice", + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 7, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "phase": "LINT" }, { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'pIops' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'AnotherInstance', 'MyEC2Instance']", - "source": "SCHEMA", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "source": "CFN_LINT", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "MyNewDB", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 15, - "startColumn": 13, - "endLine": 15, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" + "category": "Best Practice", + "startLine": 25, + "startColumn": 3, + "endLine": 25, + "endColumn": 10, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "phase": "LINT" }, { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'pIops' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'AnotherInstance', 'MyEC2Instance']", - "source": "SCHEMA", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "source": "CFN_LINT", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "myThirdDb", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", + "category": "Best Practice", "startLine": 34, - "startColumn": 13, + "startColumn": 3, "endLine": 34, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" + "endColumn": 12, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "phase": "LINT" }, { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'httpdPackage' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'AnotherInstance', 'MyEC2Instance']", - "source": "SCHEMA", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.UserData", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 40, - "startColumn": 7, - "endLine": 40, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 18, + "startColumn": 5, + "endLine": 18, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA", - "context": { - "resolutionSource": "dynamic (Sub:yum install ${myPackage} ${Package})" - } + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "W9010", + "ruleId": "W9008", "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "MyNewDB", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", "category": "Security", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", + "startLine": 27, + "startColumn": 5, + "endLine": 27, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, { - "ruleId": "W9010", + "ruleId": "W9008", "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "myThirdDb", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", "category": "Security", - "startLine": 26, - "startColumn": 7, - "endLine": 26, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", + "startLine": 36, + "startColumn": 5, + "endLine": 36, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, { - "ruleId": "I3100", + "ruleId": "I3011", "severity": "INFO", - "message": "Previous generation instance type 't1.micro' - consider upgrading", + "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": "MyEC2Instance", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.InstanceType", - "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 19, - "ruleDescription": "Checks for legacy instance type generations", + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 7, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I3100", + "ruleId": "I3011", "severity": "INFO", - "message": "Previous generation instance type 't1.micro' - consider upgrading", + "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": "AnotherInstance", + "logicalId": "MyNewDB", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.InstanceType", - "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 27, - "startColumn": 7, - "endLine": 27, - "endColumn": 19, - "ruleDescription": "Checks for legacy instance type generations", + "startLine": 25, + "startColumn": 3, + "endLine": 25, + "endColumn": 10, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "MyEC2Instance", + "logicalId": "myThirdDb", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "MyEC2Instance", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 18, + "startColumn": 5, + "endLine": 18, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "MyEC2Instance", + "logicalId": "MyNewDB", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.KeyName", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 27, + "startColumn": 5, + "endLine": 27, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "MyEC2Instance", + "logicalId": "myThirdDb", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.BlockDeviceMappings", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 10, + "startLine": 36, + "startColumn": 5, + "endLine": 36, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyDB", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", + "category": "Best Practice", + "startLine": 20, "startColumn": 7, - "endLine": 10, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 20, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3100", "severity": "INFO", - "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "MyNewDB", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.NetworkInterfaces", + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 18, + "startLine": 29, "startColumn": 7, - "endLine": 18, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 29, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3100", "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "myThirdDb", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 21, + "startLine": 38, "startColumn": 7, - "endLine": 21, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Sub:yum install ${Package}\n)" - } + "endLine": 38, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 26, + "startLine": 21, "startColumn": 7, - "endLine": 26, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 21, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 27, + "startLine": 22, "startColumn": 7, - "endLine": 27, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 22, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "MyNewDB", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.KeyName", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 28, + "startLine": 30, "startColumn": 7, - "endLine": 28, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 30, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "MyNewDB", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.BlockDeviceMappings", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 29, + "startLine": 31, "startColumn": 7, - "endLine": 29, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 31, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "myThirdDb", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.NetworkInterfaces", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 37, + "startLine": 39, "startColumn": 7, - "endLine": 37, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 39, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "myThirdDb", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", "startLine": 40, "startColumn": 7, "endLine": 40, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Sub:yum install ${myPackage} ${Package})" + "lifecycle": "create-only" } }, { @@ -78679,19 +77099,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyEC2Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'MyDB' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, + "startLine": 18, "startColumn": 5, - "endLine": 6, + "endLine": 18, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -78699,35 +77119,55 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'AnotherInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'MyNewDB' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AnotherInstance", + "logicalId": "MyNewDB", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 25, + "startLine": 27, "startColumn": 5, - "endLine": 25, + "endLine": 27, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myThirdDb' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "myThirdDb", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 36, + "startColumn": 5, + "endLine": 36, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/resource_policy_no_statement.yaml": { - "filePath": "bad/resource_policy_no_statement.yaml", + "bad/properties_rt_association.yaml": { + "filePath": "bad/properties_rt_association.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 7, "counts": { "fatal": 0, - "errors": 1, + "errors": 7, "warnings": 0, - "informational": 3, + "informational": 13, "debug": 0 }, "suppressed": 0, @@ -78736,348 +77176,499 @@ }, "diagnostics": [ { - "ruleId": "E3512", + "ruleId": "E3022", "severity": "ERROR", - "message": "Resource-based policy must have a Statement property", + "message": "SubnetId in PublicSubnetRouteTableAssociation1 is also associated with PrivateSubnetRouteTableAssociation1", "source": "CFN_LINT", "entity": { - "logicalId": "Policy", + "logicalId": "PublicSubnetRouteTableAssociation1", "entityType": "Resource", - "resourceType": "AWS::KMS::Key" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.KeyPolicy", - "suggestedFix": "Add a Statement array to the policy document", + "propertyPath": "Properties.SubnetId", + "suggestedFix": "Associate each subnet with exactly one route table", "category": "Resource", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 16, - "ruleDescription": "Validate resource based IAM policies", + "startLine": 27, + "startColumn": 9, + "endLine": 27, + "endColumn": 17, + "ruleDescription": "Resource SubnetRouteTableAssociation Properties", "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)", + "ruleId": "E3022", + "severity": "ERROR", + "message": "SubnetId in PrivateSubnetRouteTableAssociation1 is also associated with PublicSubnetRouteTableAssociation1", "source": "CFN_LINT", "entity": { - "logicalId": "Policy", + "logicalId": "PrivateSubnetRouteTableAssociation1", "entityType": "Resource", - "resourceType": "AWS::KMS::Key" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 9, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.SubnetId", + "suggestedFix": "Associate each subnet with exactly one route table", + "category": "Resource", + "startLine": 35, + "startColumn": 9, + "endLine": 35, + "endColumn": 17, + "ruleDescription": "Resource SubnetRouteTableAssociation Properties", "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)", + "ruleId": "E3022", + "severity": "ERROR", + "message": "SubnetId in AuxiliaryPublicSubnetRouteTableAssociation1 is also associated with PublicSubnetRouteTableAssociation1, PrivateSubnetRouteTableAssociation1, ProxySubnetRouteTableAssociation", "source": "CFN_LINT", "entity": { - "logicalId": "Policy", + "logicalId": "AuxiliaryPublicSubnetRouteTableAssociation1", "entityType": "Resource", - "resourceType": "AWS::KMS::Key" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 9, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.SubnetId", + "suggestedFix": "Associate each subnet with exactly one route table", + "category": "Resource", + "startLine": 44, + "startColumn": 9, + "endLine": 44, + "endColumn": 17, + "ruleDescription": "Resource SubnetRouteTableAssociation Properties", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Policy' of type 'AWS::KMS::Key' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3022", + "severity": "ERROR", + "message": "SubnetId in ProxySubnetRouteTableAssociation is also associated with PublicSubnetRouteTableAssociation1, PrivateSubnetRouteTableAssociation1, AuxiliaryPublicSubnetRouteTableAssociation1", + "source": "CFN_LINT", "entity": { - "logicalId": "Policy", + "logicalId": "ProxySubnetRouteTableAssociation", "entityType": "Resource", - "resourceType": "AWS::KMS::Key" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.SubnetId", + "suggestedFix": "Associate each subnet with exactly one route table", + "category": "Resource", + "startLine": 52, + "startColumn": 9, + "endLine": 52, + "endColumn": 17, + "ruleDescription": "Resource SubnetRouteTableAssociation Properties", "phase": "LINT" - } - ] - }, - "bad/resources/backup/test_backup_plan_lifecycle_rule.yml": { - "filePath": "bad/resources/backup/test_backup_plan_lifecycle_rule.yml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "bad/resources/cloudformation/stack_nested.yaml": { - "filePath": "bad/resources/cloudformation/stack_nested.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 2, - "informational": 0, - "debug": 0 + { + "ruleId": "E3022", + "severity": "ERROR", + "message": "SubnetId in AuxilliaryCustomSubnetRouteTableAssociation is also associated with CustomSubnetRouteTableAssociation", + "source": "CFN_LINT", + "entity": { + "logicalId": "AuxilliaryCustomSubnetRouteTableAssociation", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.SubnetId", + "suggestedFix": "Associate each subnet with exactly one route table", + "category": "Resource", + "startLine": 74, + "startColumn": 9, + "endLine": 74, + "endColumn": 17, + "ruleDescription": "Resource SubnetRouteTableAssociation Properties", + "phase": "LINT" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", + "ruleId": "E8002", + "severity": "ERROR", + "message": "Condition 'CreateAuxiliaryNetworks' referenced by resource 'AuxiliaryPublicSubnetRouteTableAssociation1' is not defined", "source": "SCHEMA", + "entity": { + "logicalId": "AuxiliaryPublicSubnetRouteTableAssociation1", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, "category": "Structure", - "startLine": 6, - "startColumn": 1, - "endLine": 6, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" + "startLine": 38, + "startColumn": 3, + "endLine": 38, + "endColumn": 46, + "ruleDescription": "Condition referenced by resource is not defined", + "phase": "PARSE" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'One' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "E8002", + "severity": "ERROR", + "message": "Condition 'CreateAuxiliaryNetworks' referenced by resource 'AuxilliaryCustomSubnetRouteTableAssociation' is not defined", + "source": "SCHEMA", "entity": { - "logicalId": "One", - "entityType": "Parameter" + "logicalId": "AuxilliaryCustomSubnetRouteTableAssociation", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Parameters/One", - "category": "Best Practice", - "startLine": 2, + "category": "Structure", + "startLine": 68, "startColumn": 3, - "endLine": 2, - "endColumn": 6, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "endLine": 68, + "endColumn": 46, + "ruleDescription": "Condition referenced by resource is not defined", + "phase": "PARSE" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Two' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Two", - "entityType": "Parameter" + "logicalId": "PublicSubnetRouteTableAssociation1", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Parameters/Two", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 6, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - } - ] - }, - "bad/resources/cloudformation/stacks.yaml": { - "filePath": "bad/resources/cloudformation/stacks.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 6, - "debug": 0 + "startLine": 25, + "startColumn": 9, + "endLine": 25, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'PublicRouteTable' (type String)", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W3002", - "severity": "WARN", - "message": "This code may only work with 'package' cli command", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PublicSubnetRouteTableAssociation1", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 27, + "startColumn": 9, + "endLine": 27, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'PublicSubnet01' (type String)", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PrivateSubnetRouteTableAssociation1", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 33, + "startColumn": 9, + "endLine": 33, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'PrivateRouteTable' (type String)", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PrivateSubnetRouteTableAssociation1", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 35, + "startColumn": 9, + "endLine": 35, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'PublicSubnet01' (type String)", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AuxiliaryPublicSubnetRouteTableAssociation1", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 42, + "startColumn": 9, + "endLine": 42, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'PublicRouteTable' (type String)", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "StackNormal", + "logicalId": "AuxiliaryPublicSubnetRouteTableAssociation1", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.TemplateURL", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 18, - "ruleDescription": "Warn when properties are configured to only work with the package command", - "phase": "LINT" + "startLine": 44, + "startColumn": 9, + "endLine": 44, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'PublicSubnet01' (type String)", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "W3002", - "severity": "WARN", - "message": "This code may only work with 'package' cli command", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Stack3", + "logicalId": "ProxySubnetRouteTableAssociation", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.TemplateURL", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 18, - "ruleDescription": "Warn when properties are configured to only work with the package command", - "phase": "LINT" + "startLine": 50, + "startColumn": 9, + "endLine": 50, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'PublicRouteTable' (type String)", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "StackNormal", + "logicalId": "ProxySubnetRouteTableAssociation", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 6, - "startColumn": 3, - "endLine": 6, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 52, + "startColumn": 9, + "endLine": 52, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'isPublic'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "StackNormal", + "logicalId": "CustomResource", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::CloudFormation::CustomResource" }, + "propertyPath": "Properties.ServiceToken", "category": "Best Practice", - "startLine": 6, - "startColumn": 3, - "endLine": 6, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 58, + "startColumn": 9, + "endLine": 58, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Stack3", + "logicalId": "CustomSubnetRouteTableAssociation", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 14, - "startColumn": 3, - "endLine": 14, - "endColumn": 9, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 63, + "startColumn": 9, + "endLine": 63, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'PublicRouteTable' (type String)", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Stack3", + "logicalId": "CustomSubnetRouteTableAssociation", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 14, - "startColumn": 3, - "endLine": 14, - "endColumn": 9, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 65, + "startColumn": 9, + "endLine": 65, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt CustomResource.PublicSubnet", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'StackNormal' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StackNormal", + "logicalId": "AuxilliaryCustomSubnetRouteTableAssociation", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 72, + "startColumn": 9, + "endLine": 72, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'PublicRouteTable' (type String)", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Stack3' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Stack3", + "logicalId": "AuxilliaryCustomSubnetRouteTableAssociation", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 16, - "startColumn": 5, - "endLine": 16, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 74, + "startColumn": 9, + "endLine": 74, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt CustomResource.PublicSubnet", + "extra": { + "replacement_strategy": "delete_then_create" + } + } } ] }, - "bad/resources/codepipeline/stages_second_stage.yaml": { - "filePath": "bad/resources/codepipeline/stages_second_stage.yaml", + "bad/properties_sg_ingress.yaml": { + "filePath": "bad/properties_sg_ingress.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 9, "counts": { - "fatal": 2, - "errors": 1, - "warnings": 1, - "informational": 2, + "fatal": 5, + "errors": 13, + "warnings": 7, + "informational": 21, "debug": 0 }, "suppressed": 0, @@ -79086,828 +77677,914 @@ }, "diagnostics": [ { - "ruleId": "F1020", + "ruleId": "F3003", "severity": "FATAL", - "message": "'Github' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'TestPipeline']", + "message": "'IpProtocol' is a required property", "source": "SCHEMA", "entity": { - "logicalId": "TestPipeline", + "logicalId": "mySecurityGroupIngressExclusive", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Stages.1.Actions.0.Name", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 32, - "startColumn": 15, - "endLine": 32, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", - "ruleDescription": "Ref/GetAtt target must exist", + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'IpProtocol'", + "category": "Schema", + "startLine": 73, + "startColumn": 5, + "endLine": 73, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "F3014", + "severity": "FATAL", + "message": "Exactly one of ['CidrIp', 'CidrIpv6', 'SourcePrefixListId', 'SourceSecurityGroupId', 'SourceSecurityGroupName'] must be specified", + "source": "SCHEMA", + "entity": { + "logicalId": "mySecurityGroupVpc", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.1", + "category": "Schema", + "startLine": 38, + "startColumn": 19, + "endLine": 38, + "endColumn": 20, + "ruleDescription": "Exactly one of properties required (requiredXor)", + "phase": "SCHEMA" + }, + { + "ruleId": "F3014", + "severity": "FATAL", + "message": "Exactly one of ['CidrIp', 'CidrIpv6', 'SourcePrefixListId', 'SourceSecurityGroupId', 'SourceSecurityGroupName'] must be specified", + "source": "SCHEMA", + "entity": { + "logicalId": "mySecurityGroupVpc", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.4", + "category": "Schema", + "startLine": 48, + "startColumn": 19, + "endLine": 48, + "endColumn": 20, + "ruleDescription": "Exactly one of properties required (requiredXor)", + "phase": "SCHEMA" + }, + { + "ruleId": "F3014", + "severity": "FATAL", + "message": "Exactly one of ['CidrIp', 'CidrIpv6', 'SourcePrefixListId', 'SourceSecurityGroupId', 'SourceSecurityGroupName'] must be specified", + "source": "SCHEMA", + "entity": { + "logicalId": "mySecurityGroupIngressExclusive", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupIngress" + }, + "propertyPath": "Properties", + "category": "Schema", + "startLine": 73, + "startColumn": 5, + "endLine": 73, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Exactly one of properties required (requiredXor)", "phase": "SCHEMA" }, { "ruleId": "F3031", "severity": "FATAL", - "message": "'arn:aws:iam:::role/AWSCodePipelineRole' does not match pattern 'arn:aws(-[\\w]+)*:iam::[0-9]{12}:role/.*'", + "message": "'Special charaters like ^ and \" are not supported' does not match pattern '^([a-z,A-Z,0-9,. _\\-:/()#,@[\\]+=&;\\{\\}!$*])*$'", "source": "SCHEMA", "entity": { - "logicalId": "TestPipeline", + "logicalId": "mySecurityGroupNonVpc", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.RoleArn", + "propertyPath": "Properties.GroupDescription", "category": "Schema", - "startLine": 12, + "startLine": 23, "startColumn": 7, - "endLine": 12, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", + "endLine": 23, + "endColumn": 23, "ruleDescription": "Value does not match pattern", "phase": "SCHEMA", "context": { - "actualValue": "arn:aws:iam:::role/AWSCodePipelineRole", - "expectedConstraint": "arn:aws(-[\\w]+)*:iam::[0-9]{12}:role/.*" + "actualValue": "Special charaters like ^ and \" are not supported", + "expectedConstraint": "^([a-z,A-Z,0-9,. _\\-:/()#,@[\\]+=&;\\{\\}!$*])*$" } }, { - "ruleId": "E1156", + "ruleId": "E1041", "severity": "ERROR", - "message": "'arn:aws:iam:::role/AWSCodePipelineRole' does not match format 'AWS::IAM::Role.Arn'", + "message": "{'Ref': 'mySecurityGroupNonVpc'} with formats ['AWS::EC2::SecurityGroup.Name'] does not match destination format of 'AWS::EC2::SecurityGroup.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "TestPipeline", + "logicalId": "mySecurityGroupVpc", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.RoleArn", + "propertyPath": "Properties.SecurityGroupIngress.3.SourceSecurityGroupId", + "suggestedFix": "Use a Ref to a resource whose type matches the expected format", "category": "Intrinsic Function", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", - "ruleDescription": "Validate IAM role ARN format", - "phase": "SCHEMA", - "context": { - "actualValue": "arn:aws:iam:::role/AWSCodePipelineRole" - } + "startLine": 46, + "startColumn": 9, + "endLine": 46, + "endColumn": 30, + "ruleDescription": "Check if Ref matches destination format", + "phase": "LINT" }, { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", - "source": "ENGINE", + "ruleId": "E1041", + "severity": "ERROR", + "message": "{'Ref': 'mySecurityGroupNonVpc'} with formats ['AWS::EC2::SecurityGroup.Name'] does not match destination format of 'AWS::EC2::SecurityGroup.Id'", + "source": "CFN_LINT", "entity": { - "logicalId": "TestPipeline", + "logicalId": "mySecurityGroupIngress", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.RoleArn", - "category": "Best Practice", - "startLine": 12, + "propertyPath": "Properties.SourceSecurityGroupId", + "suggestedFix": "Use a Ref to a resource whose type matches the expected format", + "category": "Intrinsic Function", + "startLine": 64, "startColumn": 7, - "endLine": 12, - "endColumn": 14, - "ruleDescription": "Hardcoded ARN property", + "endLine": 64, + "endColumn": 28, + "ruleDescription": "Check if Ref matches destination format", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E1150", + "severity": "ERROR", + "message": "'sg-1234567' does not match format 'AWS::EC2::SecurityGroup.Id'", + "source": "CFN_LINT", "entity": { - "logicalId": "TestPipeline", + "logicalId": "mySecurityGroupNonVpc", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", - "ruleDescription": "Create-only property updated triggers resource replacement", + "propertyPath": "Properties.SecurityGroupIngress.0.SourceSecurityGroupId", + "category": "Intrinsic Function", + "startLine": 27, + "startColumn": 9, + "endLine": 27, + "endColumn": 30, + "ruleDescription": "Validate security group format", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "sg-1234567" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TestPipeline' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TestPipeline", - "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/resources/creation_policy_unsupported_e3055.yaml": { - "filePath": "bad/resources/creation_policy_unsupported_e3055.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 2, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3055", + "ruleId": "E1150", "severity": "ERROR", - "message": "CreationPolicy is not supported on resource type 'AWS::S3::Bucket'", + "message": "'vpc-1234567' does not match format 'AWS::EC2::SecurityGroup.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "MyBucket", + "logicalId": "mySecurityGroupVpc", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "CreationPolicy", - "suggestedFix": "Remove CreationPolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::CloudFormation::WaitCondition, AWS::EC2::Instance", - "category": "Resource", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 19, - "ruleDescription": "Check CreationPolicy values for Resources", - "phase": "LINT" + "propertyPath": "Properties.SecurityGroupIngress.4.SourceSecurityGroupId", + "category": "Intrinsic Function", + "startLine": 49, + "startColumn": 9, + "endLine": 49, + "endColumn": 30, + "ruleDescription": "Validate security group format", + "phase": "SCHEMA", + "context": { + "actualValue": "vpc-1234567" + } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-123456' does not match format 'AWS::EC2::Image.Id'", + "source": "CFN_LINT", "entity": { - "logicalId": "MyBucket", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 10, + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 79, "startColumn": 7, - "endLine": 10, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 79, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "ami-123456" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3687", + "severity": "ERROR", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "source": "CFN_LINT", "entity": { - "logicalId": "MyBucket", + "logicalId": "mySecurityGroupNonVpc", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.SecurityGroupIngress.0", + "category": "Resource", + "startLine": 26, + "startColumn": 19, + "endLine": 26, + "endColumn": 20, + "ruleDescription": "Validate to and from ports based on the protocol", "phase": "LINT" - } - ] - }, - "bad/resources/dynamodb/attributes_transform_e3639.yaml": { - "filePath": "bad/resources/dynamodb/attributes_transform_e3639.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 4, - "errors": 3, - "warnings": 0, - "informational": 12, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F1101", - "severity": "FATAL", - "message": "Fn::Transform: Fn::Transform value must be an object", - "source": "SCHEMA", + "ruleId": "E3687", + "severity": "ERROR", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "source": "CFN_LINT", "entity": { - "logicalId": "DDBTableTransformAttributeDefinitions", + "logicalId": "mySecurityGroupVpc", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.AttributeDefinitions.Fn::Transform", - "category": "Structure", - "startLine": 11, - "startColumn": 9, - "endLine": 11, - "endColumn": 22, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" + "propertyPath": "Properties.SecurityGroupIngress.0", + "category": "Resource", + "startLine": 35, + "startColumn": 19, + "endLine": 35, + "endColumn": 20, + "ruleDescription": "Validate to and from ports based on the protocol", + "phase": "LINT" }, { - "ruleId": "F1101", - "severity": "FATAL", - "message": "Fn::Transform: Fn::Transform value must be an object", - "source": "SCHEMA", + "ruleId": "E3687", + "severity": "ERROR", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "source": "CFN_LINT", "entity": { - "logicalId": "DDBTableTransformKeySchema", + "logicalId": "mySecurityGroupVpc", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.KeySchema.Fn::Transform", - "category": "Structure", - "startLine": 25, - "startColumn": 9, - "endLine": 25, - "endColumn": 22, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" + "propertyPath": "Properties.SecurityGroupIngress.1", + "category": "Resource", + "startLine": 38, + "startColumn": 19, + "endLine": 38, + "endColumn": 20, + "ruleDescription": "Validate to and from ports based on the protocol", + "phase": "LINT" }, { - "ruleId": "F1101", - "severity": "FATAL", - "message": "Fn::Transform: Fn::Transform value must be an object", - "source": "SCHEMA", + "ruleId": "E3687", + "severity": "ERROR", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "source": "CFN_LINT", "entity": { - "logicalId": "DDBTableTransformBoth", + "logicalId": "mySecurityGroupVpc", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.AttributeDefinitions.Fn::Transform", - "category": "Structure", - "startLine": 33, - "startColumn": 9, - "endLine": 33, - "endColumn": 22, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" + "propertyPath": "Properties.SecurityGroupIngress.2", + "category": "Resource", + "startLine": 42, + "startColumn": 19, + "endLine": 42, + "endColumn": 20, + "ruleDescription": "Validate to and from ports based on the protocol", + "phase": "LINT" }, { - "ruleId": "F1101", - "severity": "FATAL", - "message": "Fn::Transform: Fn::Transform value must be an object", - "source": "SCHEMA", + "ruleId": "E3687", + "severity": "ERROR", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "source": "CFN_LINT", "entity": { - "logicalId": "DDBTableTransformBoth", + "logicalId": "mySecurityGroupVpc", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.KeySchema.Fn::Transform", - "category": "Structure", - "startLine": 38, - "startColumn": 9, - "endLine": 38, - "endColumn": 22, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" + "propertyPath": "Properties.SecurityGroupIngress.3", + "category": "Resource", + "startLine": 45, + "startColumn": 19, + "endLine": 45, + "endColumn": 20, + "ruleDescription": "Validate to and from ports based on the protocol", + "phase": "LINT" }, { - "ruleId": "E3639", + "ruleId": "E3687", "severity": "ERROR", - "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", "source": "CFN_LINT", "entity": { - "logicalId": "DDBTableTransformAttributeDefinitions", + "logicalId": "mySecurityGroupVpc", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ProvisionedThroughput", - "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", + "propertyPath": "Properties.SecurityGroupIngress.4", "category": "Resource", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", + "startLine": 48, + "startColumn": 19, + "endLine": 48, + "endColumn": 20, + "ruleDescription": "Validate to and from ports based on the protocol", "phase": "LINT" }, { - "ruleId": "E3639", + "ruleId": "E3687", "severity": "ERROR", - "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", "source": "CFN_LINT", "entity": { - "logicalId": "DDBTableTransformKeySchema", + "logicalId": "mySecurityGroupIngress", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.ProvisionedThroughput", - "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", + "propertyPath": "Properties", "category": "Resource", - "startLine": 20, + "startLine": 61, "startColumn": 5, - "endLine": 20, + "endLine": 61, "endColumn": 15, - "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", + "ruleDescription": "Validate to and from ports based on the protocol", "phase": "LINT" }, { - "ruleId": "E3639", + "ruleId": "E3687", "severity": "ERROR", - "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", "source": "CFN_LINT", "entity": { - "logicalId": "DDBTableTransformBoth", + "logicalId": "mySecurityGroupIngress2", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.ProvisionedThroughput", - "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", + "propertyPath": "Properties", "category": "Resource", - "startLine": 31, + "startLine": 67, "startColumn": 5, - "endLine": 31, + "endLine": 67, "endColumn": 15, - "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", + "ruleDescription": "Validate to and from ports based on the protocol", "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)", + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", "source": "CFN_LINT", "entity": { - "logicalId": "DDBTableTransformAttributeDefinitions", + "logicalId": "mySecurityGroupNonVpc", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroup" }, + "propertyPath": "Properties.SecurityGroupIngress.0.IpProtocol", "category": "Best Practice", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 40, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 26, + "startColumn": 9, + "endLine": 26, + "endColumn": 19, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "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)", + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", "source": "CFN_LINT", "entity": { - "logicalId": "DDBTableTransformAttributeDefinitions", + "logicalId": "mySecurityGroupVpc", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroup" }, + "propertyPath": "Properties.SecurityGroupIngress.0.IpProtocol", "category": "Best Practice", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 40, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 35, + "startColumn": 9, + "endLine": 35, + "endColumn": 19, + "ruleDescription": "Property type coercion warning", + "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)", + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", "source": "CFN_LINT", "entity": { - "logicalId": "DDBTableTransformKeySchema", + "logicalId": "mySecurityGroupVpc", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroup" }, + "propertyPath": "Properties.SecurityGroupIngress.1.IpProtocol", "category": "Best Practice", - "startLine": 18, - "startColumn": 3, - "endLine": 18, - "endColumn": 29, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 38, + "startColumn": 9, + "endLine": 38, + "endColumn": 19, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "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)", + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", "source": "CFN_LINT", "entity": { - "logicalId": "DDBTableTransformKeySchema", + "logicalId": "mySecurityGroupVpc", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroup" }, + "propertyPath": "Properties.SecurityGroupIngress.3.IpProtocol", "category": "Best Practice", - "startLine": 18, - "startColumn": 3, - "endLine": 18, - "endColumn": 29, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 45, + "startColumn": 9, + "endLine": 45, + "endColumn": 19, + "ruleDescription": "Property type coercion warning", + "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)", + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", "source": "CFN_LINT", "entity": { - "logicalId": "DDBTableTransformBoth", + "logicalId": "mySecurityGroupVpc", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroup" }, + "propertyPath": "Properties.SecurityGroupIngress.4.IpProtocol", "category": "Best Practice", - "startLine": 29, - "startColumn": 3, - "endLine": 29, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 48, + "startColumn": 9, + "endLine": 48, + "endColumn": 19, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "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)", + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", "source": "CFN_LINT", "entity": { - "logicalId": "DDBTableTransformBoth", + "logicalId": "mySecurityGroupIngress", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 29, - "startColumn": 3, - "endLine": 29, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 63, + "startColumn": 7, + "endLine": 63, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", + "entity": { + "logicalId": "mySecurityGroupIngress2", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupIngress" + }, + "propertyPath": "Properties.IpProtocol", + "category": "Best Practice", + "startLine": 69, + "startColumn": 7, + "endLine": 69, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformAttributeDefinitions", + "logicalId": "mySecurityGroupNonVpc", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 15, + "startLine": 23, "startColumn": 7, - "endLine": 15, - "endColumn": 16, + "endLine": 23, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformKeySchema", + "logicalId": "mySecurityGroupVpc", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 24, + "startLine": 31, "startColumn": 7, - "endLine": 24, - "endColumn": 16, + "endLine": 31, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformBoth", + "logicalId": "mySecurityGroupVpc", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 37, + "startLine": 32, "startColumn": 7, - "endLine": 37, - "endColumn": 16, + "endLine": 32, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter 'myVpcId' (type AWS::EC2::VPC::Id)" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DDBTableTransformAttributeDefinitions' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformAttributeDefinitions", + "logicalId": "SecurityGroupRuleSSM", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 54, + "startColumn": 7, + "endLine": 54, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'mySecurityGroupVpc'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DDBTableTransformKeySchema' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformKeySchema", + "logicalId": "SecurityGroupRuleSSM", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 20, - "startColumn": 5, - "endLine": 20, + "startLine": 55, + "startColumn": 7, + "endLine": 55, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SecurityGroupRuleSSM", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupIngress" + }, + "propertyPath": "Properties.FromPort", + "category": "Best Practice", + "startLine": 56, + "startColumn": 7, + "endLine": 56, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DDBTableTransformBoth' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformBoth", + "logicalId": "SecurityGroupRuleSSM", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 31, - "startColumn": 5, - "endLine": 31, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/resources/dynamodb/conditional_scenarios.yaml": { - "filePath": "bad/resources/dynamodb/conditional_scenarios.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 3, - "warnings": 0, - "informational": 11, - "debug": 0 + "startLine": 57, + "startColumn": 7, + "endLine": 57, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3039", - "severity": "ERROR", - "message": "AttributeDefinitions does not match KeySchema attributes. unused definitions: [gsi_key]", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalGSI", + "logicalId": "SecurityGroupRuleSSM", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties", - "category": "Resource", - "startLine": 22, - "startColumn": 5, - "endLine": 22, - "endColumn": 15, - "ruleDescription": "AttributeDefinitions / KeySchemas mismatch", - "phase": "LINT" + "propertyPath": "Properties.CidrIp", + "category": "Best Practice", + "startLine": 58, + "startColumn": 7, + "endLine": 58, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (dynamic reference: {{resolve:ssm:mysubnet}})" + } }, { - "ruleId": "E3039", - "severity": "ERROR", - "message": "AttributeDefinitions does not match KeySchema attributes. unused definitions: [lsi_key]", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalLSI", + "logicalId": "mySecurityGroupIngress", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties", - "category": "Resource", - "startLine": 37, - "startColumn": 5, - "endLine": 37, - "endColumn": 15, - "ruleDescription": "AttributeDefinitions / KeySchemas mismatch", - "phase": "LINT" + "propertyPath": "Properties.GroupId", + "category": "Best Practice", + "startLine": 62, + "startColumn": 7, + "endLine": 62, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'mySecurityGroupVpc'" + } }, { - "ruleId": "E3639", - "severity": "ERROR", - "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MissingDefaultThroughput", + "logicalId": "mySecurityGroupIngress", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.ProvisionedThroughput", - "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", - "category": "Resource", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", - "phase": "LINT" + "propertyPath": "Properties.IpProtocol", + "category": "Best Practice", + "startLine": 63, + "startColumn": 7, + "endLine": 63, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MissingDefaultThroughput", + "logicalId": "mySecurityGroupIngress", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, + "propertyPath": "Properties.SourceSecurityGroupId", "category": "Best Practice", - "startLine": 10, - "startColumn": 3, - "endLine": 10, - "endColumn": 27, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 64, + "startColumn": 7, + "endLine": 64, + "endColumn": 28, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'mySecurityGroupNonVpc'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MissingDefaultThroughput", + "logicalId": "mySecurityGroupIngress2", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 10, - "startColumn": 3, - "endLine": 10, - "endColumn": 27, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 68, + "startColumn": 7, + "endLine": 68, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'mySecurityGroupVpc'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalGSI", + "logicalId": "mySecurityGroupIngress2", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 20, - "startColumn": 3, - "endLine": 20, + "startLine": 69, + "startColumn": 7, + "endLine": 69, "endColumn": 17, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalGSI", + "logicalId": "mySecurityGroupIngress2", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, + "propertyPath": "Properties.SourceSecurityGroupId", "category": "Best Practice", - "startLine": 20, - "startColumn": 3, - "endLine": 20, - "endColumn": 17, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 70, + "startColumn": 7, + "endLine": 70, + "endColumn": 28, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'mySecurity3Group' (type String)" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalLSI", + "logicalId": "mySecurityGroupIngressExclusive", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 35, - "startColumn": 3, - "endLine": 35, - "endColumn": 17, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 74, + "startColumn": 7, + "endLine": 74, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'mySecurityGroupVpc'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalLSI", + "logicalId": "mySecurityGroupIngressExclusive", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, + "propertyPath": "Properties.GroupName", "category": "Best Practice", - "startLine": 35, - "startColumn": 3, - "endLine": 35, - "endColumn": 17, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 75, + "startColumn": 7, + "endLine": 75, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalGSI", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 27, + "startLine": 79, "startColumn": 7, - "endLine": 27, - "endColumn": 16, + "endLine": 79, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalLSI", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.SecurityGroupIds", "category": "Best Practice", - "startLine": 43, + "startLine": 80, "startColumn": 7, - "endLine": 43, - "endColumn": 16, + "endLine": 80, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -79917,19 +78594,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MissingDefaultThroughput' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'mySecurityGroupNonVpc' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MissingDefaultThroughput", + "logicalId": "mySecurityGroupNonVpc", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, + "startLine": 22, "startColumn": 5, - "endLine": 12, + "endLine": 22, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -79937,19 +78614,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ConditionalGSI' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'mySecurityGroupVpc' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConditionalGSI", + "logicalId": "mySecurityGroupVpc", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 22, + "startLine": 30, "startColumn": 5, - "endLine": 22, + "endLine": 30, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -79957,35 +78634,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ConditionalLSI' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConditionalLSI", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 37, + "startLine": 78, "startColumn": 5, - "endLine": 37, + "endLine": 78, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/resources/dynamodb/provisioned_throughput_e3639.yaml": { - "filePath": "bad/resources/dynamodb/provisioned_throughput_e3639.yaml", + "bad/rds_dbclusterinstanceclass_invalid.yaml": { + "filePath": "bad/rds_dbclusterinstanceclass_invalid.yaml", "status": "OK", "metadata": { - "resourcesScanned": 7, + "resourcesScanned": 1, "counts": { - "fatal": 1, - "errors": 7, - "warnings": 0, - "informational": 31, + "fatal": 3, + "errors": 1, + "warnings": 1, + "informational": 7, "debug": 0 }, "suppressed": 0, @@ -79996,161 +78673,102 @@ { "ruleId": "F3003", "severity": "FATAL", - "message": "'ProvisionedThroughput' is a required property (from extension)", + "message": "'AllocatedStorage' is a required property (from extension)", "source": "SCHEMA", "entity": { - "logicalId": "ExplicitProvisioned", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBCluster" }, "propertyPath": "Properties", - "suggestedFix": "Add 'ProvisionedThroughput'", + "suggestedFix": "Add 'AllocatedStorage'", "category": "Schema", - "startLine": 10, + "startLine": 7, "startColumn": 5, - "endLine": 10, + "endLine": 7, "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", "ruleDescription": "Required property missing", "phase": "SCHEMA" }, { - "ruleId": "E3639", - "severity": "ERROR", - "message": "ProvisionedThroughput is required when BillingMode is 'PROVISIONED'", - "source": "CFN_LINT", - "entity": { - "logicalId": "ExplicitProvisioned", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.ProvisionedThroughput", - "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", - "category": "Resource", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", - "phase": "LINT" - }, - { - "ruleId": "E3639", - "severity": "ERROR", - "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'Iops' is a required property (from extension)", + "source": "SCHEMA", "entity": { - "logicalId": "DefaultProvisioned", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.ProvisionedThroughput", - "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", - "category": "Resource", - "startLine": 23, + "propertyPath": "Properties", + "suggestedFix": "Add 'Iops'", + "category": "Schema", + "startLine": 7, "startColumn": 5, - "endLine": 23, + "endLine": 7, "endColumn": 15, - "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", - "phase": "LINT" - }, - { - "ruleId": "E3639", - "severity": "ERROR", - "message": "ProvisionedThroughput is required when BillingMode is 'PROVISIONED'", - "source": "CFN_LINT", - "entity": { - "logicalId": "NullThroughput", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.ProvisionedThroughput", - "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", - "category": "Resource", - "startLine": 44, - "startColumn": 7, - "endLine": 44, - "endColumn": 28, - "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", - "phase": "LINT" - }, - { - "ruleId": "E3639", - "severity": "ERROR", - "message": "ProvisionedThroughput is required when BillingMode is 'PROVISIONED'", - "source": "CFN_LINT", - "entity": { - "logicalId": "ExplicitValueThenRemoved", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.ProvisionedThroughput", - "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", - "category": "Resource", - "startLine": 54, - "startColumn": 7, - "endLine": 54, - "endColumn": 28, - "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "E3639", - "severity": "ERROR", - "message": "ProvisionedThroughput is required when BillingMode is 'PROVISIONED'", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'StorageType' is a required property (from extension)", + "source": "SCHEMA", "entity": { - "logicalId": "ExplicitRemovedThenValue", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.ProvisionedThroughput", - "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", - "category": "Resource", - "startLine": 65, - "startColumn": 7, - "endLine": 65, - "endColumn": 28, - "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", - "phase": "LINT" + "propertyPath": "Properties", + "suggestedFix": "Add 'StorageType'", + "category": "Schema", + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "E3639", + "ruleId": "E3694", "severity": "ERROR", - "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", + "message": "'db.bogus.class' is not one of ['db.c6gd.12xlarge', 'db.c6gd.16xlarge', 'db.c6gd.2xlarge', 'db.c6gd.4xlarge', 'db.c6gd.8xlarge', 'db.c6gd.large', 'db.c6gd.medium', 'db.c6gd.xlarge', 'db.m5d.12xlarge', 'db.m5d.16xlarge', 'db.m5d.24xlarge', 'db.m5d.2xlarge', 'db.m5d.4xlarge', 'db.m5d.8xlarge', 'db.m5d.large', 'db.m5d.xlarge', 'db.m6gd.12xlarge', 'db.m6gd.16xlarge', 'db.m6gd.2xlarge', 'db.m6gd.4xlarge', 'db.m6gd.8xlarge', 'db.m6gd.large', 'db.m6gd.xlarge', 'db.m6id.12xlarge', 'db.m6id.16xlarge', 'db.m6id.24xlarge', 'db.m6id.2xlarge', 'db.m6id.32xlarge', 'db.m6id.4xlarge', 'db.m6id.8xlarge', 'db.m6id.large', 'db.m6id.xlarge', 'db.m6idn.12xlarge', 'db.m6idn.16xlarge', 'db.m6idn.24xlarge', 'db.m6idn.2xlarge', 'db.m6idn.32xlarge', 'db.m6idn.4xlarge', 'db.m6idn.8xlarge', 'db.m6idn.large', 'db.m6idn.xlarge', 'db.m8gd.12xlarge', 'db.m8gd.16xlarge', 'db.m8gd.24xlarge', 'db.m8gd.2xlarge', 'db.m8gd.48xlarge', 'db.m8gd.4xlarge', 'db.m8gd.8xlarge', 'db.m8gd.large', 'db.m8gd.xlarge', 'db.r5d.12xlarge', 'db.r5d.16xlarge', 'db.r5d.24xlarge', 'db.r5d.2xlarge', 'db.r5d.4xlarge', 'db.r5d.8xlarge', 'db.r5d.large', 'db.r5d.xlarge', 'db.r6gd.12xlarge', 'db.r6gd.16xlarge', 'db.r6gd.2xlarge', 'db.r6gd.4xlarge', 'db.r6gd.8xlarge', 'db.r6gd.large', 'db.r6gd.xlarge', 'db.r6id.12xlarge', 'db.r6id.16xlarge', 'db.r6id.24xlarge', 'db.r6id.2xlarge', 'db.r6id.32xlarge', 'db.r6id.4xlarge', 'db.r6id.8xlarge', 'db.r6id.large', 'db.r6id.xlarge', 'db.r6idn.12xlarge', 'db.r6idn.16xlarge', 'db.r6idn.24xlarge', 'db.r6idn.2xlarge', 'db.r6idn.32xlarge', 'db.r6idn.4xlarge', 'db.r6idn.8xlarge', 'db.r6idn.large', 'db.r6idn.xlarge', 'db.r8gd.12xlarge', 'db.r8gd.16xlarge', 'db.r8gd.24xlarge', 'db.r8gd.2xlarge', 'db.r8gd.48xlarge', 'db.r8gd.4xlarge', 'db.r8gd.8xlarge', 'db.r8gd.large', 'db.r8gd.xlarge', 'db.x2idn.16xlarge', 'db.x2idn.24xlarge', 'db.x2idn.32xlarge', 'db.x2iedn.16xlarge', 'db.x2iedn.24xlarge', 'db.x2iedn.2xlarge', 'db.x2iedn.32xlarge', 'db.x2iedn.4xlarge', 'db.x2iedn.8xlarge', 'db.x2iedn.xlarge'] when Engine is 'mysql' in any region", "source": "CFN_LINT", "entity": { - "logicalId": "DefaultValueThenRemoved", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.ProvisionedThroughput", - "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", + "propertyPath": "Properties.DBClusterInstanceClass", "category": "Resource", - "startLine": 75, + "startLine": 9, "startColumn": 7, - "endLine": 75, - "endColumn": 28, - "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", + "endLine": 9, + "endColumn": 29, + "ruleDescription": "Validates RDS DB Cluster instance class", "phase": "LINT" }, { - "ruleId": "E3639", - "severity": "ERROR", - "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", + "ruleId": "W2501", + "severity": "WARN", + "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", "source": "CFN_LINT", "entity": { - "logicalId": "DefaultRemovedThenValue", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.ProvisionedThroughput", - "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", - "category": "Resource", - "startLine": 85, + "propertyPath": "Properties.MasterUserPassword", + "category": "Security", + "startLine": 11, "startColumn": 7, - "endLine": 85, - "endColumn": 28, - "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", + "endLine": 11, + "endColumn": 25, + "ruleDescription": "Check if Password Properties are correctly configured", "phase": "LINT" }, { @@ -80159,15 +78777,15 @@ "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": "ExplicitProvisioned", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBCluster" }, "category": "Best Practice", - "startLine": 8, + "startLine": 5, "startColumn": 3, - "endLine": 8, - "endColumn": 22, + "endLine": 5, + "endColumn": 10, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -80177,88 +78795,168 @@ "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": "ExplicitProvisioned", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBCluster" }, "category": "Best Practice", - "startLine": 8, + "startLine": 5, "startColumn": 3, - "endLine": 8, - "endColumn": 22, + "endLine": 5, + "endColumn": 10, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I3013", "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)", + "message": "'BackupRetentionPeriod' 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": "DefaultProvisioned", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBCluster" }, + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 21, - "startColumn": 3, - "endLine": 21, - "endColumn": 21, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DefaultProvisioned", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBCluster" }, + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 21, - "startColumn": 3, - "endLine": 21, + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBCluster" + }, + "propertyPath": "Properties.MasterUsername", + "category": "Best Practice", + "startLine": 10, + "startColumn": 7, + "endLine": 10, "endColumn": 21, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'Cluster' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "NullThroughput", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBCluster" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 33, - "startColumn": 3, - "endLine": 33, - "endColumn": 17, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/rds_dbinstanceclass_mixed_case_engine.yaml": { + "filePath": "bad/rds_dbinstanceclass_mixed_case_engine.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 1, + "informational": 6, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "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)", + "ruleId": "E3025", + "severity": "ERROR", + "message": "'totally.bogus.class' is not one of ['db.m1.large', 'db.m1.medium', 'db.m1.small', 'db.m1.xlarge', 'db.m2.2xlarge', 'db.m2.4xlarge', 'db.m2.xlarge', 'db.m3.2xlarge', 'db.m3.large', 'db.m3.medium', 'db.m3.xlarge', 'db.m4.10xlarge', 'db.m4.16xlarge', 'db.m4.2xlarge', 'db.m4.4xlarge', 'db.m4.large', 'db.m4.xlarge', 'db.m5.12xlarge', 'db.m5.16xlarge', 'db.m5.24xlarge', 'db.m5.2xlarge', 'db.m5.4xlarge', 'db.m5.8xlarge', 'db.m5.large', 'db.m5.xlarge', 'db.m5d.12xlarge', 'db.m5d.16xlarge', 'db.m5d.24xlarge', 'db.m5d.2xlarge', 'db.m5d.4xlarge', 'db.m5d.8xlarge', 'db.m5d.large', 'db.m5d.xlarge', 'db.m6g.12xlarge', 'db.m6g.16xlarge', 'db.m6g.2xlarge', 'db.m6g.4xlarge', 'db.m6g.8xlarge', 'db.m6g.large', 'db.m6g.xlarge', 'db.m6gd.12xlarge', 'db.m6gd.16xlarge', 'db.m6gd.2xlarge', 'db.m6gd.4xlarge', 'db.m6gd.8xlarge', 'db.m6gd.large', 'db.m6gd.xlarge', 'db.m6i.12xlarge', 'db.m6i.16xlarge', 'db.m6i.24xlarge', 'db.m6i.2xlarge', 'db.m6i.32xlarge', 'db.m6i.4xlarge', 'db.m6i.8xlarge', 'db.m6i.large', 'db.m6i.xlarge', 'db.m6id.12xlarge', 'db.m6id.16xlarge', 'db.m6id.24xlarge', 'db.m6id.2xlarge', 'db.m6id.32xlarge', 'db.m6id.4xlarge', 'db.m6id.8xlarge', 'db.m6id.large', 'db.m6id.xlarge', 'db.m6idn.12xlarge', 'db.m6idn.16xlarge', 'db.m6idn.24xlarge', 'db.m6idn.2xlarge', 'db.m6idn.32xlarge', 'db.m6idn.4xlarge', 'db.m6idn.8xlarge', 'db.m6idn.large', 'db.m6idn.xlarge', 'db.m6in.12xlarge', 'db.m6in.16xlarge', 'db.m6in.24xlarge', 'db.m6in.2xlarge', 'db.m6in.32xlarge', 'db.m6in.4xlarge', 'db.m6in.8xlarge', 'db.m6in.large', 'db.m6in.xlarge', 'db.m7g.12xlarge', 'db.m7g.16xlarge', 'db.m7g.2xlarge', 'db.m7g.4xlarge', 'db.m7g.8xlarge', 'db.m7g.large', 'db.m7g.xlarge', 'db.m7i.12xlarge', 'db.m7i.16xlarge', 'db.m7i.24xlarge', 'db.m7i.2xlarge', 'db.m7i.48xlarge', 'db.m7i.4xlarge', 'db.m7i.8xlarge', 'db.m7i.large', 'db.m7i.xlarge', 'db.m8g.12xlarge', 'db.m8g.16xlarge', 'db.m8g.24xlarge', 'db.m8g.2xlarge', 'db.m8g.48xlarge', 'db.m8g.4xlarge', 'db.m8g.8xlarge', 'db.m8g.large', 'db.m8g.xlarge', 'db.m8gd.12xlarge', 'db.m8gd.16xlarge', 'db.m8gd.24xlarge', 'db.m8gd.2xlarge', 'db.m8gd.48xlarge', 'db.m8gd.4xlarge', 'db.m8gd.8xlarge', 'db.m8gd.large', 'db.m8gd.xlarge', 'db.m9g.12xlarge', 'db.m9g.16xlarge', 'db.m9g.24xlarge', 'db.m9g.2xlarge', 'db.m9g.48xlarge', 'db.m9g.4xlarge', 'db.m9g.8xlarge', 'db.m9g.large', 'db.m9g.xlarge', 'db.r3.2xlarge', 'db.r3.4xlarge', 'db.r3.8xlarge', 'db.r3.large', 'db.r3.xlarge', 'db.r4.16xlarge', 'db.r4.2xlarge', 'db.r4.4xlarge', 'db.r4.8xlarge', 'db.r4.large', 'db.r4.xlarge', 'db.r5.12xlarge', 'db.r5.16xlarge', 'db.r5.24xlarge', 'db.r5.2xlarge', 'db.r5.4xlarge', 'db.r5.8xlarge', 'db.r5.large', 'db.r5.xlarge', 'db.r5b.12xlarge', 'db.r5b.16xlarge', 'db.r5b.24xlarge', 'db.r5b.2xlarge', 'db.r5b.4xlarge', 'db.r5b.8xlarge', 'db.r5b.large', 'db.r5b.xlarge', 'db.r5d.12xlarge', 'db.r5d.16xlarge', 'db.r5d.24xlarge', 'db.r5d.2xlarge', 'db.r5d.4xlarge', 'db.r5d.8xlarge', 'db.r5d.large', 'db.r5d.xlarge', 'db.r6g.12xlarge', 'db.r6g.16xlarge', 'db.r6g.2xlarge', 'db.r6g.4xlarge', 'db.r6g.8xlarge', 'db.r6g.large', 'db.r6g.xlarge', 'db.r6gd.12xlarge', 'db.r6gd.16xlarge', 'db.r6gd.2xlarge', 'db.r6gd.4xlarge', 'db.r6gd.8xlarge', 'db.r6gd.large', 'db.r6gd.xlarge', 'db.r6i.12xlarge', 'db.r6i.16xlarge', 'db.r6i.24xlarge', 'db.r6i.2xlarge', 'db.r6i.32xlarge', 'db.r6i.4xlarge', 'db.r6i.8xlarge', 'db.r6i.large', 'db.r6i.xlarge', 'db.r6id.12xlarge', 'db.r6id.16xlarge', 'db.r6id.24xlarge', 'db.r6id.2xlarge', 'db.r6id.32xlarge', 'db.r6id.4xlarge', 'db.r6id.8xlarge', 'db.r6id.large', 'db.r6id.xlarge', 'db.r6idn.12xlarge', 'db.r6idn.16xlarge', 'db.r6idn.24xlarge', 'db.r6idn.2xlarge', 'db.r6idn.32xlarge', 'db.r6idn.4xlarge', 'db.r6idn.8xlarge', 'db.r6idn.large', 'db.r6idn.xlarge', 'db.r6in.12xlarge', 'db.r6in.16xlarge', 'db.r6in.24xlarge', 'db.r6in.2xlarge', 'db.r6in.32xlarge', 'db.r6in.4xlarge', 'db.r6in.8xlarge', 'db.r6in.large', 'db.r6in.xlarge', 'db.r7g.12xlarge', 'db.r7g.16xlarge', 'db.r7g.2xlarge', 'db.r7g.4xlarge', 'db.r7g.8xlarge', 'db.r7g.large', 'db.r7g.xlarge', 'db.r7i.12xlarge', 'db.r7i.16xlarge', 'db.r7i.24xlarge', 'db.r7i.2xlarge', 'db.r7i.48xlarge', 'db.r7i.4xlarge', 'db.r7i.8xlarge', 'db.r7i.large', 'db.r7i.xlarge', 'db.r8g.12xlarge', 'db.r8g.16xlarge', 'db.r8g.24xlarge', 'db.r8g.2xlarge', 'db.r8g.48xlarge', 'db.r8g.4xlarge', 'db.r8g.8xlarge', 'db.r8g.large', 'db.r8g.xlarge', 'db.r8gd.12xlarge', 'db.r8gd.16xlarge', 'db.r8gd.24xlarge', 'db.r8gd.2xlarge', 'db.r8gd.48xlarge', 'db.r8gd.4xlarge', 'db.r8gd.8xlarge', 'db.r8gd.large', 'db.r8gd.xlarge', 'db.t1.micro', 'db.t2.2xlarge', 'db.t2.large', 'db.t2.medium', 'db.t2.micro', 'db.t2.small', 'db.t2.xlarge', 'db.t3.2xlarge', 'db.t3.large', 'db.t3.medium', 'db.t3.micro', 'db.t3.small', 'db.t3.xlarge', 'db.t4g.2xlarge', 'db.t4g.large', 'db.t4g.medium', 'db.t4g.micro', 'db.t4g.small', 'db.t4g.xlarge', 'db.x2g.12xlarge', 'db.x2g.16xlarge', 'db.x2g.2xlarge', 'db.x2g.4xlarge', 'db.x2g.8xlarge', 'db.x2g.large', 'db.x2g.xlarge', 'db.x2iedn.16xlarge', 'db.x2iedn.24xlarge', 'db.x2iedn.2xlarge', 'db.x2iedn.32xlarge', 'db.x2iedn.4xlarge', 'db.x2iedn.8xlarge', 'db.x2iedn.xlarge'] when Engine is 'mysql' in any region", "source": "CFN_LINT", "entity": { - "logicalId": "NullThroughput", + "logicalId": "Db", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBInstance" }, - "category": "Best Practice", - "startLine": 33, - "startColumn": 3, - "endLine": 33, - "endColumn": 17, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.DBInstanceClass", + "category": "Resource", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 22, + "ruleDescription": "Validates RDS DB Instance Class", + "phase": "LINT" + }, + { + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", + "entity": { + "logicalId": "Db", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, { @@ -80267,15 +78965,15 @@ "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": "ExplicitValueThenRemoved", + "logicalId": "Db", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBInstance" }, "category": "Best Practice", - "startLine": 48, + "startLine": 5, "startColumn": 3, - "endLine": 48, - "endColumn": 27, + "endLine": 5, + "endColumn": 5, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -80285,69 +78983,165 @@ "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": "ExplicitValueThenRemoved", + "logicalId": "Db", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBInstance" }, "category": "Best Practice", - "startLine": 48, + "startLine": 5, "startColumn": 3, - "endLine": 48, - "endColumn": 27, + "endLine": 5, + "endColumn": 5, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I3013", "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)", + "message": "'BackupRetentionPeriod' 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": "ExplicitRemovedThenValue", + "logicalId": "Db", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBInstance" }, + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 59, - "startColumn": 3, - "endLine": 59, - "endColumn": 27, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ExplicitRemovedThenValue", + "logicalId": "Db", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBInstance" }, + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 59, - "startColumn": 3, - "endLine": 59, - "endColumn": 27, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Db' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Db", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/rds_public.yaml": { + "filePath": "bad/rds_public.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 8, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2501", + "severity": "WARN", + "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", + "source": "CFN_LINT", + "entity": { + "logicalId": "Database", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.MasterUserPassword", + "category": "Security", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 25, + "ruleDescription": "Check if Password Properties are correctly configured", "phase": "LINT" }, + { + "ruleId": "W9011", + "severity": "WARN", + "message": "RDS instance has PubliclyAccessible set to true - consider restricting access", + "source": "ENGINE", + "entity": { + "logicalId": "Database", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.PubliclyAccessible", + "suggestedFix": "Set PubliclyAccessible to false", + "category": "Security", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 25, + "ruleDescription": "RDS instance PubliclyAccessible is true", + "phase": "LINT", + "context": { + "actualValue": true + } + }, { "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": "DefaultValueThenRemoved", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBInstance" }, "category": "Best Practice", - "startLine": 70, + "startLine": 3, "startColumn": 3, - "endLine": 70, - "endColumn": 26, + "endLine": 3, + "endColumn": 11, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -80357,70 +79151,77 @@ "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": "DefaultValueThenRemoved", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBInstance" }, "category": "Best Practice", - "startLine": 70, + "startLine": 3, "startColumn": 3, - "endLine": 70, - "endColumn": 26, + "endLine": 3, + "endColumn": 11, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I3013", "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)", + "message": "'BackupRetentionPeriod' 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": "DefaultRemovedThenValue", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBInstance" }, + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 80, - "startColumn": 3, - "endLine": 80, - "endColumn": 26, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DefaultRemovedThenValue", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBInstance" }, + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 80, - "startColumn": 3, - "endLine": 80, - "endColumn": 26, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ExplicitProvisioned", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.TableName", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 11, + "startLine": 8, "startColumn": 7, - "endLine": 11, - "endColumn": 16, + "endLine": 8, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -80430,84 +79231,134 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ExplicitProvisioned", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 13, + "startLine": 10, "startColumn": 7, - "endLine": 13, - "endColumn": 16, + "endLine": 10, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Database' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Database", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/redshift_internet_accessible.yaml": { + "filePath": "bad/redshift_internet_accessible.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 7, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 13, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DefaultProvisioned", + "logicalId": "Subnet1", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.TableName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 24, + "startLine": 6, "startColumn": 7, - "endLine": 24, - "endColumn": 16, + "endLine": 6, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DefaultProvisioned", + "logicalId": "Subnet1", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 25, + "startLine": 7, "startColumn": 7, - "endLine": 25, + "endLine": 7, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NullThroughput", + "logicalId": "VPC", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.TableName", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 36, + "startLine": 11, "startColumn": 7, - "endLine": 36, + "endLine": 11, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -80518,169 +79369,144 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NullThroughput", + "logicalId": "RouteTable1", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 38, + "startLine": 21, "startColumn": 7, - "endLine": 38, - "endColumn": 16, + "endLine": 21, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ExplicitValueThenRemoved", + "logicalId": "SubnetRTAssoc", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 53, + "startLine": 25, "startColumn": 7, - "endLine": 53, - "endColumn": 16, + "endLine": 25, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Subnet1'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ExplicitRemovedThenValue", + "logicalId": "SubnetRTAssoc", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 64, + "startLine": 26, "startColumn": 7, - "endLine": 64, - "endColumn": 16, + "endLine": 26, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'RouteTable1'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DefaultValueThenRemoved", + "logicalId": "Route1", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 74, + "startLine": 33, "startColumn": 7, - "endLine": 74, - "endColumn": 16, + "endLine": 33, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'RouteTable1'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DefaultRemovedThenValue", + "logicalId": "Route1", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 84, + "startLine": 34, "startColumn": 7, - "endLine": 84, - "endColumn": 16, + "endLine": 34, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ExplicitProvisioned' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ExplicitProvisioned", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DefaultProvisioned' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "DefaultProvisioned", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 23, - "startColumn": 5, - "endLine": 23, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'NullThroughput' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'Subnet1' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "NullThroughput", + "logicalId": "Subnet1", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 35, + "startLine": 5, "startColumn": 5, - "endLine": 35, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -80688,19 +79514,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ExplicitValueThenRemoved' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'VPC' of type 'AWS::EC2::VPC' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ExplicitValueThenRemoved", + "logicalId": "VPC", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 50, + "startLine": 10, "startColumn": 5, - "endLine": 50, + "endLine": 10, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -80708,19 +79534,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ExplicitRemovedThenValue' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'RedshiftSubnetGroup' of type 'AWS::Redshift::ClusterSubnetGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ExplicitRemovedThenValue", + "logicalId": "RedshiftSubnetGroup", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Redshift::ClusterSubnetGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 61, + "startLine": 14, "startColumn": 5, - "endLine": 61, + "endLine": 14, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -80728,19 +79554,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DefaultValueThenRemoved' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'RouteTable1' of type 'AWS::EC2::RouteTable' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DefaultValueThenRemoved", + "logicalId": "RouteTable1", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 72, + "startLine": 20, "startColumn": 5, - "endLine": 72, + "endLine": 20, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -80748,35 +79574,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DefaultRemovedThenValue' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'IGW' of type 'AWS::EC2::InternetGateway' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DefaultRemovedThenValue", + "logicalId": "IGW", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::InternetGateway" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 82, + "startLine": 29, "startColumn": 5, - "endLine": 82, + "endLine": 29, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/resources/dynamodb/undefined_attribute_definition.yaml": { - "filePath": "bad/resources/dynamodb/undefined_attribute_definition.yaml", + "bad/refs.yaml": { + "filePath": "bad/refs.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 2, "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 4, + "fatal": 4, + "errors": 0, + "warnings": 2, + "informational": 17, "debug": 0 }, "suppressed": 0, @@ -80785,308 +79611,397 @@ }, "diagnostics": [ { - "ruleId": "E3039", - "severity": "ERROR", - "message": "AttributeDefinitions does not match KeySchema attributes. missing definitions: [Artist]", - "source": "CFN_LINT", + "ruleId": "F1018", + "severity": "FATAL", + "message": "Fn::Sub variable '${Package}' does not reference a valid resource, parameter, or pseudo-parameter", + "source": "SCHEMA", "entity": { - "logicalId": "dynamoDBTable", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties", - "category": "Resource", - "startLine": 6, - "startColumn": 5, - "endLine": 6, + "propertyPath": "Properties.UserData", + "category": "Intrinsic Function", + "startLine": 21, + "startColumn": 7, + "endLine": 21, "endColumn": 15, - "ruleDescription": "AttributeDefinitions / KeySchemas mismatch", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Sub variables must resolve", + "phase": "SCHEMA", + "context": { + "resolutionSource": "dynamic (Sub:yum install ${Package}\n)" + } + }, + { + "ruleId": "F1020", + "severity": "FATAL", + "message": "'pIops' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'AnotherInstance', 'MyEC2Instance']", + "source": "SCHEMA", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 15, + "startColumn": 13, + "endLine": 15, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" + }, + { + "ruleId": "F1020", + "severity": "FATAL", + "message": "'pIops' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'AnotherInstance', 'MyEC2Instance']", + "source": "SCHEMA", + "entity": { + "logicalId": "AnotherInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.BlockDeviceMappings.0.Ebs.Iops", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 34, + "startColumn": 13, + "endLine": 34, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" + }, + { + "ruleId": "F1020", + "severity": "FATAL", + "message": "'httpdPackage' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'AnotherInstance', 'MyEC2Instance']", + "source": "SCHEMA", + "entity": { + "logicalId": "AnotherInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.UserData", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 40, + "startColumn": 7, + "endLine": 40, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA", + "context": { + "resolutionSource": "dynamic (Sub:yum install ${myPackage} ${Package})" + } + }, + { + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", + "entity": { + "logicalId": "AnotherInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 26, + "startColumn": 7, + "endLine": 26, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", + "phase": "LINT" + }, + { + "ruleId": "I3100", "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)", + "message": "Previous generation instance type 't1.micro' - consider upgrading", "source": "CFN_LINT", "entity": { - "logicalId": "dynamoDBTable", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.InstanceType", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 16, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 19, + "ruleDescription": "Checks for legacy instance type generations", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I3100", "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)", + "message": "Previous generation instance type 't1.micro' - consider upgrading", "source": "CFN_LINT", "entity": { - "logicalId": "dynamoDBTable", + "logicalId": "AnotherInstance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.InstanceType", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 16, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 27, + "startColumn": 7, + "endLine": 27, + "endColumn": 19, + "ruleDescription": "Checks for legacy instance type generations", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "dynamoDBTable", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 10, + "startLine": 7, "startColumn": 7, - "endLine": 10, - "endColumn": 16, + "endLine": 7, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'dynamoDBTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "dynamoDBTable", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/resources/dynamodb/unused_attribute_definition_1.yaml": { - "filePath": "bad/resources/dynamodb/unused_attribute_definition_1.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 4, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3039", - "severity": "ERROR", - "message": "AttributeDefinitions does not match KeySchema attributes. unused definitions: [Sales]", - "source": "CFN_LINT", - "entity": { - "logicalId": "dynamoDBTable", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties", - "category": "Resource", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "AttributeDefinitions / KeySchemas mismatch", - "phase": "LINT" + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "dynamoDBTable", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.KeyName", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 16, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "dynamoDBTable", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.BlockDeviceMappings", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 16, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "dynamoDBTable", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.NetworkInterfaces", "category": "Best Practice", - "startLine": 14, + "startLine": 18, "startColumn": 7, - "endLine": 14, - "endColumn": 16, + "endLine": 18, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'dynamoDBTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "dynamoDBTable", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, + "startLine": 21, + "startColumn": 7, + "endLine": 21, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/resources/dynamodb/unused_attribute_definition_2.yaml": { - "filePath": "bad/resources/dynamodb/unused_attribute_definition_2.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 4, - "debug": 0 + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Sub:yum install ${Package}\n)" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3039", - "severity": "ERROR", - "message": "AttributeDefinitions does not match KeySchema attributes. unused definitions: [Sales]", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "dynamoDBTable", + "logicalId": "AnotherInstance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties", - "category": "Resource", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "AttributeDefinitions / KeySchemas mismatch", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 26, + "startColumn": 7, + "endLine": 26, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "dynamoDBTable", + "logicalId": "AnotherInstance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 16, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 27, + "startColumn": 7, + "endLine": 27, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "dynamoDBTable", + "logicalId": "AnotherInstance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.KeyName", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 16, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 28, + "startColumn": 7, + "endLine": 28, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "dynamoDBTable", + "logicalId": "AnotherInstance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.BlockDeviceMappings", "category": "Best Practice", - "startLine": 14, + "startLine": 29, "startColumn": 7, - "endLine": 14, - "endColumn": 16, + "endLine": 29, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -81094,100 +80009,77 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'dynamoDBTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "dynamoDBTable", + "logicalId": "AnotherInstance", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkInterfaces", "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/resources/ecs/fargate_conditional_properties.yaml": { - "filePath": "bad/resources/ecs/fargate_conditional_properties.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 2, - "warnings": 0, - "informational": 2, - "debug": 0 + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate does not support PlacementConstraints", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "PlacementInFargateBranch", + "logicalId": "AnotherInstance", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.PlacementConstraints", - "suggestedFix": "Remove PlacementConstraints for Fargate tasks", - "category": "Resource", - "startLine": 15, - "startColumn": 5, - "endLine": 15, + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 40, + "startColumn": 7, + "endLine": 40, "endColumn": 15, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Sub:yum install ${myPackage} ${Package})" + } }, { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate does not support log driver 'syslog'. Supported drivers: ['awslogs', 'splunk', 'awsfirelens']", - "source": "CFN_LINT", - "entity": { - "logicalId": "InvalidDriverInFargateBranch", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.ContainerDefinitions.0.LogConfiguration.LogDriver", - "suggestedFix": "Use 'awslogs', 'splunk', or 'awsfirelens'", - "category": "Resource", - "startLine": 36, - "startColumn": 5, - "endLine": 36, - "endColumn": 15, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'PlacementInFargateBranch' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'MyEC2Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "PlacementInFargateBranch", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 15, + "startLine": 6, "startColumn": 5, - "endLine": 15, + "endLine": 6, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -81195,551 +80087,496 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'InvalidDriverInFargateBranch' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'AnotherInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "InvalidDriverInFargateBranch", + "logicalId": "AnotherInstance", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 36, + "startLine": 25, "startColumn": 5, - "endLine": 36, + "endLine": 25, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/resources/ecs/fargate_numeric_spellings_e3047.yaml": { - "filePath": "bad/resources/ecs/fargate_numeric_spellings_e3047.yaml", + "bad/resource_policy_no_statement.yaml": { + "filePath": "bad/resource_policy_no_statement.yaml", "status": "OK", "metadata": { - "resourcesScanned": 6, + "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 9, + "errors": 1, "warnings": 0, - "informational": 36, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3047", - "severity": "ERROR", - "message": "Cpu '2e0 vCPU' is not compatible with Memory '4 GB' for Fargate", - "source": "CFN_LINT", - "entity": { - "logicalId": "ScientificCpuNotation", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", - "category": "Resource", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", - "context": { - "extra": { - "cpu": "2e0 vCPU", - "memory": "4 GB" - } - } - }, - { - "ruleId": "E3047", - "severity": "ERROR", - "message": "Cpu '2 vCPU' is not compatible with Memory '4e0 GB' for Fargate", - "source": "CFN_LINT", - "entity": { - "logicalId": "ScientificMemoryNotation", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", - "category": "Resource", - "startLine": 20, - "startColumn": 7, - "endLine": 20, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", - "context": { - "extra": { - "cpu": "2 vCPU", - "memory": "4e0 GB" - } - } - }, - { - "ruleId": "E3047", - "severity": "ERROR", - "message": "Cpu ' 2 vCPU' is not compatible with Memory '4 GB' for Fargate", - "source": "CFN_LINT", - "entity": { - "logicalId": "LeadingCpuWhitespace", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", - "category": "Resource", - "startLine": 32, - "startColumn": 7, - "endLine": 32, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", - "context": { - "extra": { - "cpu": " 2 vCPU", - "memory": "4 GB" - } - } - }, - { - "ruleId": "E3047", - "severity": "ERROR", - "message": "Cpu '2 vCPU ' is not compatible with Memory '4 GB' for Fargate", - "source": "CFN_LINT", - "entity": { - "logicalId": "TrailingCpuWhitespace", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", - "category": "Resource", - "startLine": 44, - "startColumn": 7, - "endLine": 44, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", - "context": { - "extra": { - "cpu": "2 vCPU ", - "memory": "4 GB" - } - } - }, - { - "ruleId": "E3047", - "severity": "ERROR", - "message": "Cpu '2 vCPU' is not compatible with Memory ' 4 GB' for Fargate", - "source": "CFN_LINT", - "entity": { - "logicalId": "LeadingMemoryWhitespace", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", - "category": "Resource", - "startLine": 56, - "startColumn": 7, - "endLine": 56, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", - "context": { - "extra": { - "cpu": "2 vCPU", - "memory": " 4 GB" - } - } - }, - { - "ruleId": "E3047", - "severity": "ERROR", - "message": "Cpu '2 vCPU' is not compatible with Memory '4 GB ' for Fargate", - "source": "CFN_LINT", - "entity": { - "logicalId": "TrailingMemoryWhitespace", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", - "category": "Resource", - "startLine": 68, - "startColumn": 7, - "endLine": 68, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", - "context": { - "extra": { - "cpu": "2 vCPU", - "memory": "4 GB " - } - } + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "E3048", + "ruleId": "E3512", "severity": "ERROR", - "message": "Fargate Cpu value '2e0 vCPU' is not valid. Valid sizes are ['256', '512', '1024', '2048', '4096', '8192', '16384', '32768'] CPU units or ['0.25', '0.5', '1', '2', '4', '8', '16', '32'] vCPU.", + "message": "Resource-based policy must have a Statement property", "source": "CFN_LINT", "entity": { - "logicalId": "ScientificCpuNotation", + "logicalId": "Policy", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::KMS::Key" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate Cpu size in CPU units or vCPU", + "propertyPath": "Properties.KeyPolicy", + "suggestedFix": "Add a Statement array to the policy document", "category": "Resource", - "startLine": 8, + "startLine": 6, "startColumn": 7, - "endLine": 8, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "endLine": 6, + "endColumn": 16, + "ruleDescription": "Validate resource based IAM policies", "phase": "LINT" }, { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate Cpu value ' 2 vCPU' is not valid. Valid sizes are ['256', '512', '1024', '2048', '4096', '8192', '16384', '32768'] CPU units or ['0.25', '0.5', '1', '2', '4', '8', '16', '32'] vCPU.", + "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": "LeadingCpuWhitespace", + "logicalId": "Policy", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::KMS::Key" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate Cpu size in CPU units or vCPU", - "category": "Resource", - "startLine": 32, - "startColumn": 7, - "endLine": 32, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate Cpu value '2 vCPU ' is not valid. Valid sizes are ['256', '512', '1024', '2048', '4096', '8192', '16384', '32768'] CPU units or ['0.25', '0.5', '1', '2', '4', '8', '16', '32'] vCPU.", + "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": "TrailingCpuWhitespace", + "logicalId": "Policy", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::KMS::Key" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate Cpu size in CPU units or vCPU", - "category": "Resource", - "startLine": 44, - "startColumn": 7, - "endLine": 44, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Resource 'Policy' of type 'AWS::KMS::Key' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ScientificCpuNotation", + "logicalId": "Policy", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::KMS::Key" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/resources/backup/test_backup_plan_lifecycle_rule.yml": { + "filePath": "bad/resources/backup/test_backup_plan_lifecycle_rule.yml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "bad/resources/cloudformation/stack_nested.yaml": { + "filePath": "bad/resources/cloudformation/stack_nested.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 2, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", "startLine": 6, - "startColumn": 7, + "startColumn": 1, "endLine": 6, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endColumn": 10, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'One' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "ScientificCpuNotation", + "logicalId": "One", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/One", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 6, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'Two' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "Two", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/Two", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 6, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + } + ] + }, + "bad/resources/cloudformation/stacks.yaml": { + "filePath": "bad/resources/cloudformation/stacks.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 6, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", + "entity": { + "logicalId": "StackNormal", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.TemplateURL", "category": "Best Practice", - "startLine": 7, + "startLine": 9, "startColumn": 7, - "endLine": 7, + "endLine": 9, "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Warn when properties are configured to only work with the package command", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", "entity": { - "logicalId": "ScientificCpuNotation", + "logicalId": "Stack3", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.TemplateURL", "category": "Best Practice", - "startLine": 8, + "startLine": 17, "startColumn": 7, - "endLine": 8, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 17, + "endColumn": 18, + "ruleDescription": "Warn when properties are configured to only work with the package command", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "ScientificCpuNotation", + "logicalId": "StackNormal", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "ScientificCpuNotation", + "logicalId": "StackNormal", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "ScientificMemoryNotation", + "logicalId": "Stack3", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 18, - "startColumn": 7, - "endLine": 18, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 9, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "ScientificMemoryNotation", + "logicalId": "Stack3", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 19, - "startColumn": 7, - "endLine": 19, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 9, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Resource 'StackNormal' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ScientificMemoryNotation", + "logicalId": "StackNormal", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 20, - "startColumn": 7, - "endLine": 20, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Resource 'Stack3' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ScientificMemoryNotation", + "logicalId": "Stack3", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 21, - "startColumn": 7, - "endLine": 21, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/resources/codepipeline/stages_second_stage.yaml": { + "filePath": "bad/resources/codepipeline/stages_second_stage.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 2, + "errors": 1, + "warnings": 1, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F1020", + "severity": "FATAL", + "message": "'Github' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'TestPipeline']", + "source": "SCHEMA", "entity": { - "logicalId": "ScientificMemoryNotation", + "logicalId": "TestPipeline", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 22, + "propertyPath": "Properties.Stages.1.Actions.0.Name", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 32, + "startColumn": 15, + "endLine": 32, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" + }, + { + "ruleId": "F3031", + "severity": "FATAL", + "message": "'arn:aws:iam:::role/AWSCodePipelineRole' does not match pattern 'arn:aws(-[\\w]+)*:iam::[0-9]{12}:role/.*'", + "source": "SCHEMA", + "entity": { + "logicalId": "TestPipeline", + "entityType": "Resource", + "resourceType": "AWS::CodePipeline::Pipeline" + }, + "propertyPath": "Properties.RoleArn", + "category": "Schema", + "startLine": 12, "startColumn": 7, - "endLine": 22, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 12, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", + "ruleDescription": "Value does not match pattern", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "arn:aws:iam:::role/AWSCodePipelineRole", + "expectedConstraint": "arn:aws(-[\\w]+)*:iam::[0-9]{12}:role/.*" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E1156", + "severity": "ERROR", + "message": "'arn:aws:iam:::role/AWSCodePipelineRole' does not match format 'AWS::IAM::Role.Arn'", + "source": "CFN_LINT", "entity": { - "logicalId": "LeadingCpuWhitespace", + "logicalId": "TestPipeline", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 30, + "propertyPath": "Properties.RoleArn", + "category": "Intrinsic Function", + "startLine": 12, "startColumn": 7, - "endLine": 30, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 12, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", + "ruleDescription": "Validate IAM role ARN format", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "arn:aws:iam:::role/AWSCodePipelineRole" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", "source": "ENGINE", "entity": { - "logicalId": "LeadingCpuWhitespace", + "logicalId": "TestPipeline", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.RoleArn", "category": "Best Practice", - "startLine": 31, + "startLine": 12, "startColumn": 7, - "endLine": 31, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 12, + "endColumn": 14, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LeadingCpuWhitespace", + "logicalId": "TestPipeline", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 32, + "startLine": 8, "startColumn": 7, - "endLine": 32, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 8, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -81747,68 +80584,80 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Resource 'TestPipeline' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LeadingCpuWhitespace", + "logicalId": "TestPipeline", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/resources/creation_policy_unsupported_e3055.yaml": { + "filePath": "bad/resources/creation_policy_unsupported_e3055.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3055", + "severity": "ERROR", + "message": "CreationPolicy is not supported on resource type 'AWS::S3::Bucket'", + "source": "CFN_LINT", "entity": { - "logicalId": "LeadingCpuWhitespace", + "logicalId": "MyBucket", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 34, - "startColumn": 7, - "endLine": 34, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "CreationPolicy", + "suggestedFix": "Remove CreationPolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::CloudFormation::WaitCondition, AWS::EC2::Instance", + "category": "Resource", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 19, + "ruleDescription": "Check CreationPolicy values for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TrailingCpuWhitespace", + "logicalId": "MyBucket", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 42, + "startLine": 10, "startColumn": 7, - "endLine": 42, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 10, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -81816,343 +80665,370 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TrailingCpuWhitespace", + "logicalId": "MyBucket", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 43, - "startColumn": 7, - "endLine": 43, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/resources/dynamodb/attributes_transform_e3639.yaml": { + "filePath": "bad/resources/dynamodb/attributes_transform_e3639.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 4, + "errors": 3, + "warnings": 0, + "informational": 12, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F1101", + "severity": "FATAL", + "message": "Fn::Transform: Fn::Transform value must be an object", + "source": "SCHEMA", "entity": { - "logicalId": "TrailingCpuWhitespace", + "logicalId": "DDBTableTransformAttributeDefinitions", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", - "category": "Best Practice", - "startLine": 44, - "startColumn": 7, - "endLine": 44, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.AttributeDefinitions.Fn::Transform", + "category": "Structure", + "startLine": 11, + "startColumn": 9, + "endLine": 11, + "endColumn": 22, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F1101", + "severity": "FATAL", + "message": "Fn::Transform: Fn::Transform value must be an object", + "source": "SCHEMA", "entity": { - "logicalId": "TrailingCpuWhitespace", + "logicalId": "DDBTableTransformKeySchema", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Memory", - "category": "Best Practice", - "startLine": 45, - "startColumn": 7, - "endLine": 45, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.KeySchema.Fn::Transform", + "category": "Structure", + "startLine": 25, + "startColumn": 9, + "endLine": 25, + "endColumn": 22, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F1101", + "severity": "FATAL", + "message": "Fn::Transform: Fn::Transform value must be an object", + "source": "SCHEMA", "entity": { - "logicalId": "TrailingCpuWhitespace", + "logicalId": "DDBTableTransformBoth", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 46, - "startColumn": 7, - "endLine": 46, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.AttributeDefinitions.Fn::Transform", + "category": "Structure", + "startLine": 33, + "startColumn": 9, + "endLine": 33, + "endColumn": 22, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F1101", + "severity": "FATAL", + "message": "Fn::Transform: Fn::Transform value must be an object", + "source": "SCHEMA", "entity": { - "logicalId": "LeadingMemoryWhitespace", + "logicalId": "DDBTableTransformBoth", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 54, - "startColumn": 7, - "endLine": 54, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.KeySchema.Fn::Transform", + "category": "Structure", + "startLine": 38, + "startColumn": 9, + "endLine": 38, + "endColumn": 22, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" }, { - "ruleId": "I9001", + "ruleId": "E3639", + "severity": "ERROR", + "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", + "source": "CFN_LINT", + "entity": { + "logicalId": "DDBTableTransformAttributeDefinitions", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.ProvisionedThroughput", + "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", + "category": "Resource", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", + "phase": "LINT" + }, + { + "ruleId": "E3639", + "severity": "ERROR", + "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", + "source": "CFN_LINT", + "entity": { + "logicalId": "DDBTableTransformKeySchema", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.ProvisionedThroughput", + "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", + "category": "Resource", + "startLine": 20, + "startColumn": 5, + "endLine": 20, + "endColumn": 15, + "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", + "phase": "LINT" + }, + { + "ruleId": "E3639", + "severity": "ERROR", + "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", + "source": "CFN_LINT", + "entity": { + "logicalId": "DDBTableTransformBoth", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.ProvisionedThroughput", + "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", + "category": "Resource", + "startLine": 31, + "startColumn": 5, + "endLine": 31, + "endColumn": 15, + "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", + "phase": "LINT" + }, + { + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "LeadingMemoryWhitespace", + "logicalId": "DDBTableTransformAttributeDefinitions", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 55, - "startColumn": 7, - "endLine": 55, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 40, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "LeadingMemoryWhitespace", + "logicalId": "DDBTableTransformAttributeDefinitions", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 56, - "startColumn": 7, - "endLine": 56, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 40, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "LeadingMemoryWhitespace", + "logicalId": "DDBTableTransformKeySchema", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 57, - "startColumn": 7, - "endLine": 57, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 29, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "LeadingMemoryWhitespace", + "logicalId": "DDBTableTransformKeySchema", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 58, - "startColumn": 7, - "endLine": 58, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 29, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "TrailingMemoryWhitespace", + "logicalId": "DDBTableTransformBoth", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 66, - "startColumn": 7, - "endLine": 66, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 29, + "startColumn": 3, + "endLine": 29, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "TrailingMemoryWhitespace", + "logicalId": "DDBTableTransformBoth", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 67, - "startColumn": 7, - "endLine": 67, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 29, + "startColumn": 3, + "endLine": 29, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TrailingMemoryWhitespace", + "logicalId": "DDBTableTransformAttributeDefinitions", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 68, + "startLine": 15, "startColumn": 7, - "endLine": 68, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 15, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TrailingMemoryWhitespace", + "logicalId": "DDBTableTransformKeySchema", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 69, + "startLine": 24, "startColumn": 7, - "endLine": 69, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 24, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TrailingMemoryWhitespace", + "logicalId": "DDBTableTransformBoth", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 70, + "startLine": 37, "startColumn": 7, - "endLine": 70, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 37, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ScientificCpuNotation' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'DDBTableTransformAttributeDefinitions' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ScientificCpuNotation", + "logicalId": "DDBTableTransformAttributeDefinitions", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 9, "startColumn": 5, - "endLine": 5, + "endLine": 9, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -82160,19 +81036,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ScientificMemoryNotation' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'DDBTableTransformKeySchema' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ScientificMemoryNotation", + "logicalId": "DDBTableTransformKeySchema", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, + "startLine": 20, "startColumn": 5, - "endLine": 17, + "endLine": 20, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -82180,39 +81056,268 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LeadingCpuWhitespace' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'DDBTableTransformBoth' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LeadingCpuWhitespace", + "logicalId": "DDBTableTransformBoth", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 29, + "startLine": 31, "startColumn": 5, - "endLine": 29, + "endLine": 31, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/resources/dynamodb/conditional_scenarios.yaml": { + "filePath": "bad/resources/dynamodb/conditional_scenarios.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 3, + "warnings": 0, + "informational": 11, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3039", + "severity": "ERROR", + "message": "AttributeDefinitions does not match KeySchema attributes. unused definitions: [gsi_key]", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConditionalGSI", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties", + "category": "Resource", + "startLine": 22, + "startColumn": 5, + "endLine": 22, + "endColumn": 15, + "ruleDescription": "AttributeDefinitions / KeySchemas mismatch", + "phase": "LINT" + }, + { + "ruleId": "E3039", + "severity": "ERROR", + "message": "AttributeDefinitions does not match KeySchema attributes. unused definitions: [lsi_key]", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConditionalLSI", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties", + "category": "Resource", + "startLine": 37, + "startColumn": 5, + "endLine": 37, + "endColumn": 15, + "ruleDescription": "AttributeDefinitions / KeySchemas mismatch", + "phase": "LINT" + }, + { + "ruleId": "E3639", + "severity": "ERROR", + "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", + "source": "CFN_LINT", + "entity": { + "logicalId": "MissingDefaultThroughput", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.ProvisionedThroughput", + "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", + "category": "Resource", + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", + "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": "MissingDefaultThroughput", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 27, + "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": "MissingDefaultThroughput", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 27, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "ConditionalGSI", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 20, + "startColumn": 3, + "endLine": 20, + "endColumn": 17, + "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": "ConditionalGSI", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 20, + "startColumn": 3, + "endLine": 20, + "endColumn": 17, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "ConditionalLSI", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 35, + "startColumn": 3, + "endLine": 35, + "endColumn": 17, + "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": "ConditionalLSI", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 35, + "startColumn": 3, + "endLine": 35, + "endColumn": 17, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalGSI", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.KeySchema", + "category": "Best Practice", + "startLine": 27, + "startColumn": 7, + "endLine": 27, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalLSI", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.KeySchema", + "category": "Best Practice", + "startLine": 43, + "startColumn": 7, + "endLine": 43, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TrailingCpuWhitespace' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'MissingDefaultThroughput' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TrailingCpuWhitespace", + "logicalId": "MissingDefaultThroughput", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 41, + "startLine": 12, "startColumn": 5, - "endLine": 41, + "endLine": 12, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -82220,19 +81325,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LeadingMemoryWhitespace' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'ConditionalGSI' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LeadingMemoryWhitespace", + "logicalId": "ConditionalGSI", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 53, + "startLine": 22, "startColumn": 5, - "endLine": 53, + "endLine": 22, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -82240,35 +81345,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TrailingMemoryWhitespace' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'ConditionalLSI' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TrailingMemoryWhitespace", + "logicalId": "ConditionalLSI", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 65, + "startLine": 37, "startColumn": 5, - "endLine": 65, + "endLine": 37, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/resources/ecs/fargate_properties_e3048.yaml": { - "filePath": "bad/resources/ecs/fargate_properties_e3048.yaml", + "bad/resources/dynamodb/provisioned_throughput_e3639.yaml": { + "filePath": "bad/resources/dynamodb/provisioned_throughput_e3639.yaml", "status": "OK", "metadata": { - "resourcesScanned": 14, + "resourcesScanned": 7, "counts": { - "fatal": 0, - "errors": 17, + "fatal": 1, + "errors": 7, "warnings": 0, - "informational": 94, + "informational": 31, "debug": 0 }, "suppressed": 0, @@ -82277,581 +81382,433 @@ }, "diagnostics": [ { - "ruleId": "E3047", - "severity": "ERROR", - "message": "Cpu '128' is not compatible with Memory '512' for Fargate", - "source": "CFN_LINT", - "entity": { - "logicalId": "FargateInvalidCpu", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", - "category": "Resource", - "startLine": 42, - "startColumn": 7, - "endLine": 42, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", - "context": { - "extra": { - "cpu": "128", - "memory": "512" - } - } - }, - { - "ruleId": "E3047", - "severity": "ERROR", - "message": "Cpu '3 vCPU' is not compatible with Memory '512' for Fargate", - "source": "CFN_LINT", - "entity": { - "logicalId": "FargateConditionalInvalidCpu", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", - "category": "Resource", - "startLine": 165, - "startColumn": 7, - "endLine": 165, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", - "context": { - "extra": { - "cpu": "256", - "memory": "512" - } - } - }, - { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate requires Cpu to be specified", - "source": "CFN_LINT", - "entity": { - "logicalId": "FargateMissingAll", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties", - "suggestedFix": "Set Cpu to a valid Fargate value (256, 512, 1024, 2048, 4096, 8192, 16384, or 32768)", - "category": "Resource", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", - "phase": "LINT" - }, - { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate requires Memory to be specified", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'ProvisionedThroughput' is a required property (from extension)", + "source": "SCHEMA", "entity": { - "logicalId": "FargateMissingAll", + "logicalId": "ExplicitProvisioned", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties", - "suggestedFix": "Set Memory to a valid Fargate value", - "category": "Resource", + "suggestedFix": "Add 'ProvisionedThroughput'", + "category": "Schema", "startLine": 10, "startColumn": 5, "endLine": 10, "endColumn": 15, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", - "phase": "LINT" + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "E3048", + "ruleId": "E3639", "severity": "ERROR", - "message": "Fargate requires NetworkMode to be specified as 'awsvpc'", + "message": "ProvisionedThroughput is required when BillingMode is 'PROVISIONED'", "source": "CFN_LINT", "entity": { - "logicalId": "FargateMissingAll", + "logicalId": "ExplicitProvisioned", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties", - "suggestedFix": "Set NetworkMode to 'awsvpc'", + "propertyPath": "Properties.ProvisionedThroughput", + "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", "category": "Resource", "startLine": 10, "startColumn": 5, "endLine": 10, "endColumn": 15, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", - "phase": "LINT" - }, - { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate requires NetworkMode 'awsvpc', got 'bridge'", - "source": "CFN_LINT", - "entity": { - "logicalId": "FargateWrongNetworkMode", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.NetworkMode", - "suggestedFix": "Set NetworkMode to 'awsvpc'", - "category": "Resource", - "startLine": 26, - "startColumn": 7, - "endLine": 26, - "endColumn": 18, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", "phase": "LINT" }, { - "ruleId": "E3048", + "ruleId": "E3639", "severity": "ERROR", - "message": "Fargate Cpu value '128' is not valid. Valid sizes are ['256', '512', '1024', '2048', '4096', '8192', '16384', '32768'] CPU units or ['0.25', '0.5', '1', '2', '4', '8', '16', '32'] vCPU.", + "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", "source": "CFN_LINT", "entity": { - "logicalId": "FargateInvalidCpu", + "logicalId": "DefaultProvisioned", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate Cpu size in CPU units or vCPU", + "propertyPath": "Properties.ProvisionedThroughput", + "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", "category": "Resource", - "startLine": 42, - "startColumn": 7, - "endLine": 42, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "startLine": 23, + "startColumn": 5, + "endLine": 23, + "endColumn": 15, + "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", "phase": "LINT" }, { - "ruleId": "E3048", + "ruleId": "E3639", "severity": "ERROR", - "message": "Fargate does not support PlacementConstraints", + "message": "ProvisionedThroughput is required when BillingMode is 'PROVISIONED'", "source": "CFN_LINT", "entity": { - "logicalId": "FargatePlacementConstraints", + "logicalId": "NullThroughput", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.PlacementConstraints", - "suggestedFix": "Remove PlacementConstraints for Fargate tasks", + "propertyPath": "Properties.ProvisionedThroughput", + "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", "category": "Resource", - "startLine": 59, + "startLine": 44, "startColumn": 7, - "endLine": 59, - "endColumn": 27, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "endLine": 44, + "endColumn": 28, + "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", "phase": "LINT" }, { - "ruleId": "E3048", + "ruleId": "E3639", "severity": "ERROR", - "message": "Fargate does not support log driver 'syslog'. Supported drivers: ['awslogs', 'splunk', 'awsfirelens']", + "message": "ProvisionedThroughput is required when BillingMode is 'PROVISIONED'", "source": "CFN_LINT", "entity": { - "logicalId": "FargateUnsupportedLogDriver", + "logicalId": "ExplicitValueThenRemoved", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ContainerDefinitions.0.LogConfiguration.LogDriver", - "suggestedFix": "Use 'awslogs', 'splunk', or 'awsfirelens'", + "propertyPath": "Properties.ProvisionedThroughput", + "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", "category": "Resource", - "startLine": 82, - "startColumn": 13, - "endLine": 82, - "endColumn": 22, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "startLine": 54, + "startColumn": 7, + "endLine": 54, + "endColumn": 28, + "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", "phase": "LINT" }, { - "ruleId": "E3048", + "ruleId": "E3639", "severity": "ERROR", - "message": "Fargate requires Cpu to be specified", + "message": "ProvisionedThroughput is required when BillingMode is 'PROVISIONED'", "source": "CFN_LINT", "entity": { - "logicalId": "FargateNullCpu", + "logicalId": "ExplicitRemovedThenValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties", - "suggestedFix": "Set Cpu to a valid Fargate value (256, 512, 1024, 2048, 4096, 8192, 16384, or 32768)", + "propertyPath": "Properties.ProvisionedThroughput", + "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", "category": "Resource", - "startLine": 87, - "startColumn": 5, - "endLine": 87, - "endColumn": 15, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "startLine": 65, + "startColumn": 7, + "endLine": 65, + "endColumn": 28, + "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", "phase": "LINT" }, { - "ruleId": "E3048", + "ruleId": "E3639", "severity": "ERROR", - "message": "Fargate requires NetworkMode to be specified as 'awsvpc'", + "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", "source": "CFN_LINT", "entity": { - "logicalId": "FargateConditionalNetworkMode", + "logicalId": "DefaultValueThenRemoved", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties", - "suggestedFix": "Set NetworkMode to 'awsvpc'", + "propertyPath": "Properties.ProvisionedThroughput", + "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", "category": "Resource", - "startLine": 119, - "startColumn": 5, - "endLine": 119, - "endColumn": 15, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "startLine": 75, + "startColumn": 7, + "endLine": 75, + "endColumn": 28, + "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", "phase": "LINT" }, { - "ruleId": "E3048", + "ruleId": "E3639", "severity": "ERROR", - "message": "Fargate requires Cpu to be specified", + "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", "source": "CFN_LINT", "entity": { - "logicalId": "FargateConditionalCpu", + "logicalId": "DefaultRemovedThenValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties", - "suggestedFix": "Set Cpu to a valid Fargate value (256, 512, 1024, 2048, 4096, 8192, 16384, or 32768)", + "propertyPath": "Properties.ProvisionedThroughput", + "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", "category": "Resource", - "startLine": 133, - "startColumn": 5, - "endLine": 133, - "endColumn": 15, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "startLine": 85, + "startColumn": 7, + "endLine": 85, + "endColumn": 28, + "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", "phase": "LINT" }, { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate requires Memory to be specified", + "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": "FargateConditionalMemory", + "logicalId": "ExplicitProvisioned", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties", - "suggestedFix": "Set Memory to a valid Fargate value", - "category": "Resource", - "startLine": 147, - "startColumn": 5, - "endLine": 147, - "endColumn": 15, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 22, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate Cpu value '3 vCPU' is not valid. Valid sizes are ['256', '512', '1024', '2048', '4096', '8192', '16384', '32768'] CPU units or ['0.25', '0.5', '1', '2', '4', '8', '16', '32'] vCPU.", + "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": "FargateConditionalInvalidCpu", + "logicalId": "ExplicitProvisioned", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate Cpu size in CPU units or vCPU", - "category": "Resource", - "startLine": 165, - "startColumn": 7, - "endLine": 165, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 22, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate does not support PlacementConstraints", + "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": "FargateConditionalPlacementConstraints", + "logicalId": "DefaultProvisioned", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.PlacementConstraints", - "suggestedFix": "Remove PlacementConstraints for Fargate tasks", - "category": "Resource", - "startLine": 181, - "startColumn": 7, - "endLine": 181, - "endColumn": 27, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "category": "Best Practice", + "startLine": 21, + "startColumn": 3, + "endLine": 21, + "endColumn": 21, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate requires NetworkMode to be specified as 'awsvpc'", + "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": "ConditionalFargateThenEc2MissingNetworkMode", + "logicalId": "DefaultProvisioned", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties", - "suggestedFix": "Set NetworkMode to 'awsvpc'", - "category": "Resource", - "startLine": 191, - "startColumn": 5, - "endLine": 191, - "endColumn": 15, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "category": "Best Practice", + "startLine": 21, + "startColumn": 3, + "endLine": 21, + "endColumn": 21, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate requires NetworkMode to be specified as 'awsvpc'", + "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": "ConditionalEc2ThenFargateMissingNetworkMode", + "logicalId": "NullThroughput", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties", - "suggestedFix": "Set NetworkMode to 'awsvpc'", - "category": "Resource", - "startLine": 202, - "startColumn": 5, - "endLine": 202, - "endColumn": 15, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "category": "Best Practice", + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 17, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "FargateMissingAll", + "logicalId": "NullThroughput", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 17, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "FargateMissingAll", + "logicalId": "ExplicitValueThenRemoved", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 48, + "startColumn": 3, + "endLine": 48, + "endColumn": 27, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "FargateMissingAll", + "logicalId": "ExplicitValueThenRemoved", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, + "startLine": 48, + "startColumn": 3, + "endLine": 48, "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "FargateWrongNetworkMode", + "logicalId": "ExplicitRemovedThenValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 59, + "startColumn": 3, + "endLine": 59, + "endColumn": 27, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "FargateWrongNetworkMode", + "logicalId": "ExplicitRemovedThenValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 24, - "startColumn": 7, - "endLine": 24, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 59, + "startColumn": 3, + "endLine": 59, + "endColumn": 27, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "FargateWrongNetworkMode", + "logicalId": "DefaultValueThenRemoved", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 26, - "startColumn": 7, - "endLine": 26, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 70, + "startColumn": 3, + "endLine": 70, + "endColumn": 26, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "FargateWrongNetworkMode", + "logicalId": "DefaultValueThenRemoved", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 27, - "startColumn": 7, - "endLine": 27, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 70, + "startColumn": 3, + "endLine": 70, + "endColumn": 26, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "FargateWrongNetworkMode", + "logicalId": "DefaultRemovedThenValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 80, + "startColumn": 3, + "endLine": 80, + "endColumn": 26, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "FargateWrongNetworkMode", + "logicalId": "DefaultRemovedThenValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 29, - "startColumn": 7, - "endLine": 29, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 80, + "startColumn": 3, + "endLine": 80, + "endColumn": 26, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateInvalidCpu", + "logicalId": "ExplicitProvisioned", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 38, + "startLine": 11, "startColumn": 7, - "endLine": 38, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 11, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -82861,43 +81818,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateInvalidCpu", + "logicalId": "ExplicitProvisioned", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 39, + "startLine": 13, "startColumn": 7, - "endLine": 39, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 13, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateInvalidCpu", + "logicalId": "DefaultProvisioned", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 41, + "startLine": 24, "startColumn": 7, - "endLine": 41, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 24, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -82907,43 +81862,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateInvalidCpu", + "logicalId": "DefaultProvisioned", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 42, + "startLine": 25, "startColumn": 7, - "endLine": 42, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 25, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateInvalidCpu", + "logicalId": "NullThroughput", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 43, + "startLine": 36, "startColumn": 7, - "endLine": 43, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 36, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -82953,787 +81906,934 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateInvalidCpu", + "logicalId": "NullThroughput", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 44, + "startLine": 38, "startColumn": 7, - "endLine": 44, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 38, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargatePlacementConstraints", + "logicalId": "ExplicitValueThenRemoved", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", "startLine": 53, "startColumn": 7, "endLine": 53, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargatePlacementConstraints", + "logicalId": "ExplicitRemovedThenValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 54, + "startLine": 64, "startColumn": 7, - "endLine": 54, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 64, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargatePlacementConstraints", + "logicalId": "DefaultValueThenRemoved", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 56, + "startLine": 74, "startColumn": 7, - "endLine": 56, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 74, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargatePlacementConstraints", + "logicalId": "DefaultRemovedThenValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 57, + "startLine": 84, "startColumn": 7, - "endLine": 57, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 84, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Resource 'ExplicitProvisioned' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargatePlacementConstraints", + "logicalId": "ExplicitProvisioned", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 58, - "startColumn": 7, - "endLine": 58, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'PlacementConstraints' is create-only; updating it will cause resource replacement", + "message": "Resource 'DefaultProvisioned' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargatePlacementConstraints", + "logicalId": "DefaultProvisioned", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.PlacementConstraints", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 59, - "startColumn": 7, - "endLine": 59, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 23, + "startColumn": 5, + "endLine": 23, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Resource 'NullThroughput' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargatePlacementConstraints", + "logicalId": "NullThroughput", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 62, - "startColumn": 7, - "endLine": 62, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 35, + "startColumn": 5, + "endLine": 35, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Resource 'ExplicitValueThenRemoved' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateUnsupportedLogDriver", + "logicalId": "ExplicitValueThenRemoved", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 71, - "startColumn": 7, - "endLine": 71, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 50, + "startColumn": 5, + "endLine": 50, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Resource 'ExplicitRemovedThenValue' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateUnsupportedLogDriver", + "logicalId": "ExplicitRemovedThenValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 61, + "startColumn": 5, + "endLine": 61, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DefaultValueThenRemoved' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "DefaultValueThenRemoved", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 72, - "startColumn": 7, + "startColumn": 5, "endLine": 72, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Resource 'DefaultRemovedThenValue' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateUnsupportedLogDriver", + "logicalId": "DefaultRemovedThenValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 74, - "startColumn": 7, - "endLine": 74, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 82, + "startColumn": 5, + "endLine": 82, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/resources/dynamodb/undefined_attribute_definition.yaml": { + "filePath": "bad/resources/dynamodb/undefined_attribute_definition.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 4, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "E3039", + "severity": "ERROR", + "message": "AttributeDefinitions does not match KeySchema attributes. missing definitions: [Artist]", + "source": "CFN_LINT", + "entity": { + "logicalId": "dynamoDBTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties", + "category": "Resource", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "AttributeDefinitions / KeySchemas mismatch", + "phase": "LINT" + }, + { + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "FargateUnsupportedLogDriver", + "logicalId": "dynamoDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 75, - "startColumn": 7, - "endLine": 75, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 16, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "FargateUnsupportedLogDriver", + "logicalId": "dynamoDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 76, - "startColumn": 7, - "endLine": 76, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 16, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateUnsupportedLogDriver", + "logicalId": "dynamoDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 77, + "startLine": 10, "startColumn": 7, - "endLine": 77, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 10, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Resource 'dynamoDBTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateNullCpu", + "logicalId": "dynamoDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 88, - "startColumn": 7, - "endLine": 88, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/resources/dynamodb/unused_attribute_definition_1.yaml": { + "filePath": "bad/resources/dynamodb/unused_attribute_definition_1.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 4, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3039", + "severity": "ERROR", + "message": "AttributeDefinitions does not match KeySchema attributes. unused definitions: [Sales]", + "source": "CFN_LINT", + "entity": { + "logicalId": "dynamoDBTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties", + "category": "Resource", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "AttributeDefinitions / KeySchemas mismatch", + "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": "dynamoDBTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 16, + "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": "dynamoDBTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 16, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateNullCpu", + "logicalId": "dynamoDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 89, + "startLine": 14, "startColumn": 7, - "endLine": 89, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 14, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Resource 'dynamoDBTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateNullCpu", + "logicalId": "dynamoDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 91, - "startColumn": 7, - "endLine": 91, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/resources/dynamodb/unused_attribute_definition_2.yaml": { + "filePath": "bad/resources/dynamodb/unused_attribute_definition_2.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 4, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3039", + "severity": "ERROR", + "message": "AttributeDefinitions does not match KeySchema attributes. unused definitions: [Sales]", + "source": "CFN_LINT", + "entity": { + "logicalId": "dynamoDBTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties", + "category": "Resource", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "AttributeDefinitions / KeySchemas mismatch", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "FargateNullCpu", + "logicalId": "dynamoDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 92, - "startColumn": 7, - "endLine": 92, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseConstraints'" - } + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 16, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "FargateNullCpu", + "logicalId": "dynamoDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 93, - "startColumn": 7, - "endLine": 93, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 16, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateNullCpu", + "logicalId": "dynamoDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 94, + "startLine": 14, "startColumn": 7, - "endLine": 94, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 14, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Resource 'dynamoDBTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "dynamoDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 103, - "startColumn": 7, - "endLine": 103, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/resources/ecs/fargate_conditional_properties.yaml": { + "filePath": "bad/resources/ecs/fargate_conditional_properties.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate does not support PlacementConstraints", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "PlacementInFargateBranch", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 104, - "startColumn": 7, - "endLine": 104, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.PlacementConstraints", + "suggestedFix": "Remove PlacementConstraints for Fargate tasks", + "category": "Resource", + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 15, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate does not support log driver 'syslog'. Supported drivers: ['awslogs', 'splunk', 'awsfirelens']", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "InvalidDriverInFargateBranch", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 106, - "startColumn": 7, - "endLine": 106, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.ContainerDefinitions.0.LogConfiguration.LogDriver", + "suggestedFix": "Use 'awslogs', 'splunk', or 'awsfirelens'", + "category": "Resource", + "startLine": 36, + "startColumn": 5, + "endLine": 36, + "endColumn": 15, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Resource 'PlacementInFargateBranch' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "PlacementInFargateBranch", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 107, - "startColumn": 7, - "endLine": 107, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Resource 'InvalidDriverInFargateBranch' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "InvalidDriverInFargateBranch", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 108, - "startColumn": 7, - "endLine": 108, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 36, + "startColumn": 5, + "endLine": 36, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/resources/ecs/fargate_numeric_spellings_e3047.yaml": { + "filePath": "bad/resources/ecs/fargate_numeric_spellings_e3047.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 6, + "counts": { + "fatal": 0, + "errors": 9, + "warnings": 0, + "informational": 36, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PlacementConstraints' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3047", + "severity": "ERROR", + "message": "Cpu '2e0 vCPU' is not compatible with Memory '4 GB' for Fargate", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "ScientificCpuNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PlacementConstraints", - "category": "Best Practice", - "startLine": 109, + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "category": "Resource", + "startLine": 8, "startColumn": 7, - "endLine": 109, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", + "endLine": 8, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseConstraints'" + "extra": { + "cpu": "2e0 vCPU", + "memory": "4 GB" + } } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3047", + "severity": "ERROR", + "message": "Cpu '2 vCPU' is not compatible with Memory '4e0 GB' for Fargate", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "ScientificMemoryNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 110, + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "category": "Resource", + "startLine": 20, "startColumn": 7, - "endLine": 110, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", + "endLine": 20, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", "context": { - "lifecycle": "create-only" + "extra": { + "cpu": "2 vCPU", + "memory": "4e0 GB" + } } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3047", + "severity": "ERROR", + "message": "Cpu ' 2 vCPU' is not compatible with Memory '4 GB' for Fargate", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateConditionalNetworkMode", + "logicalId": "LeadingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Family", - "category": "Best Practice", - "startLine": 120, + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "category": "Resource", + "startLine": 32, "startColumn": 7, - "endLine": 120, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", + "endLine": 32, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", "context": { - "lifecycle": "create-only" + "extra": { + "cpu": " 2 vCPU", + "memory": "4 GB" + } } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3047", + "severity": "ERROR", + "message": "Cpu '2 vCPU ' is not compatible with Memory '4 GB' for Fargate", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateConditionalNetworkMode", + "logicalId": "TrailingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 121, + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "category": "Resource", + "startLine": 44, "startColumn": 7, - "endLine": 121, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", + "endLine": 44, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", "context": { - "lifecycle": "create-only" + "extra": { + "cpu": "2 vCPU ", + "memory": "4 GB" + } } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3047", + "severity": "ERROR", + "message": "Cpu '2 vCPU' is not compatible with Memory ' 4 GB' for Fargate", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateConditionalNetworkMode", + "logicalId": "LeadingMemoryWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 122, + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "category": "Resource", + "startLine": 56, "startColumn": 7, - "endLine": 122, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", + "endLine": 56, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseConstraints'" + "extra": { + "cpu": "2 vCPU", + "memory": " 4 GB" + } } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3047", + "severity": "ERROR", + "message": "Cpu '2 vCPU' is not compatible with Memory '4 GB ' for Fargate", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateConditionalNetworkMode", + "logicalId": "TrailingMemoryWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", - "category": "Best Practice", - "startLine": 123, + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "category": "Resource", + "startLine": 68, "startColumn": 7, - "endLine": 123, + "endLine": 68, "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", "context": { - "lifecycle": "create-only" + "extra": { + "cpu": "2 vCPU", + "memory": "4 GB " + } } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate Cpu value '2e0 vCPU' is not valid. Valid sizes are ['256', '512', '1024', '2048', '4096', '8192', '16384', '32768'] CPU units or ['0.25', '0.5', '1', '2', '4', '8', '16', '32'] vCPU.", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateConditionalNetworkMode", + "logicalId": "ScientificCpuNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", - "category": "Best Practice", - "startLine": 124, + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate Cpu size in CPU units or vCPU", + "category": "Resource", + "startLine": 8, "startColumn": 7, - "endLine": 124, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 8, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate Cpu value ' 2 vCPU' is not valid. Valid sizes are ['256', '512', '1024', '2048', '4096', '8192', '16384', '32768'] CPU units or ['0.25', '0.5', '1', '2', '4', '8', '16', '32'] vCPU.", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateConditionalNetworkMode", + "logicalId": "LeadingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 125, + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate Cpu size in CPU units or vCPU", + "category": "Resource", + "startLine": 32, "startColumn": 7, - "endLine": 125, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 32, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate Cpu value '2 vCPU ' is not valid. Valid sizes are ['256', '512', '1024', '2048', '4096', '8192', '16384', '32768'] CPU units or ['0.25', '0.5', '1', '2', '4', '8', '16', '32'] vCPU.", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateConditionalCpu", + "logicalId": "TrailingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Family", - "category": "Best Practice", - "startLine": 134, + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate Cpu size in CPU units or vCPU", + "category": "Resource", + "startLine": 44, "startColumn": 7, - "endLine": 134, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 44, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { "ruleId": "I9001", @@ -83741,15 +82841,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalCpu", + "logicalId": "ScientificCpuNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 135, + "startLine": 6, "startColumn": 7, - "endLine": 135, + "endLine": 6, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -83764,15 +82864,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalCpu", + "logicalId": "ScientificCpuNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 136, + "startLine": 7, "startColumn": 7, - "endLine": 136, + "endLine": 7, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -83787,22 +82887,21 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalCpu", + "logicalId": "ScientificCpuNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 137, + "startLine": 8, "startColumn": 7, - "endLine": 137, + "endLine": 8, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseConstraints'" + "lifecycle": "create-only" } }, { @@ -83811,15 +82910,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalCpu", + "logicalId": "ScientificCpuNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 138, + "startLine": 9, "startColumn": 7, - "endLine": 138, + "endLine": 9, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -83834,15 +82933,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalCpu", + "logicalId": "ScientificCpuNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 139, + "startLine": 10, "startColumn": 7, - "endLine": 139, + "endLine": 10, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -83851,44 +82950,21 @@ "lifecycle": "create-only" } }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FargateConditionalMemory", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Family", - "category": "Best Practice", - "startLine": 148, - "startColumn": 7, - "endLine": 148, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalMemory", + "logicalId": "ScientificMemoryNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 149, + "startLine": 18, "startColumn": 7, - "endLine": 149, + "endLine": 18, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -83903,15 +82979,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalMemory", + "logicalId": "ScientificMemoryNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 150, + "startLine": 19, "startColumn": 7, - "endLine": 150, + "endLine": 19, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -83926,15 +83002,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalMemory", + "logicalId": "ScientificMemoryNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 151, + "startLine": 20, "startColumn": 7, - "endLine": 151, + "endLine": 20, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -83949,22 +83025,21 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalMemory", + "logicalId": "ScientificMemoryNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 152, + "startLine": 21, "startColumn": 7, - "endLine": 152, + "endLine": 21, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseConstraints'" + "lifecycle": "create-only" } }, { @@ -83973,15 +83048,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalMemory", + "logicalId": "ScientificMemoryNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 153, + "startLine": 22, "startColumn": 7, - "endLine": 153, + "endLine": 22, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -83990,44 +83065,21 @@ "lifecycle": "create-only" } }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FargateConditionalInvalidCpu", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Family", - "category": "Best Practice", - "startLine": 162, - "startColumn": 7, - "endLine": 162, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalInvalidCpu", + "logicalId": "LeadingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 163, + "startLine": 30, "startColumn": 7, - "endLine": 163, + "endLine": 30, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -84042,15 +83094,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalInvalidCpu", + "logicalId": "LeadingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 164, + "startLine": 31, "startColumn": 7, - "endLine": 164, + "endLine": 31, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -84065,22 +83117,21 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalInvalidCpu", + "logicalId": "LeadingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 165, + "startLine": 32, "startColumn": 7, - "endLine": 165, + "endLine": 32, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseConstraints'" + "lifecycle": "create-only" } }, { @@ -84089,15 +83140,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalInvalidCpu", + "logicalId": "LeadingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 166, + "startLine": 33, "startColumn": 7, - "endLine": 166, + "endLine": 33, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -84112,15 +83163,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalInvalidCpu", + "logicalId": "LeadingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 167, + "startLine": 34, "startColumn": 7, - "endLine": 167, + "endLine": 34, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -84129,44 +83180,21 @@ "lifecycle": "create-only" } }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FargateConditionalPlacementConstraints", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Family", - "category": "Best Practice", - "startLine": 176, - "startColumn": 7, - "endLine": 176, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalPlacementConstraints", + "logicalId": "TrailingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 177, + "startLine": 42, "startColumn": 7, - "endLine": 177, + "endLine": 42, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -84181,15 +83209,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalPlacementConstraints", + "logicalId": "TrailingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 178, + "startLine": 43, "startColumn": 7, - "endLine": 178, + "endLine": 43, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -84204,15 +83232,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalPlacementConstraints", + "logicalId": "TrailingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 179, + "startLine": 44, "startColumn": 7, - "endLine": 179, + "endLine": 44, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -84227,15 +83255,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalPlacementConstraints", + "logicalId": "TrailingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 180, + "startLine": 45, "startColumn": 7, - "endLine": 180, + "endLine": 45, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -84247,43 +83275,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PlacementConstraints' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalPlacementConstraints", + "logicalId": "TrailingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PlacementConstraints", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 181, + "startLine": 46, "startColumn": 7, - "endLine": 181, + "endLine": 46, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseConstraints'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalPlacementConstraints", + "logicalId": "LeadingMemoryWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 182, + "startLine": 54, "startColumn": 7, - "endLine": 182, - "endColumn": 27, + "endLine": 54, + "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -84294,25 +83321,24 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalFargateThenEc2MissingNetworkMode", + "logicalId": "LeadingMemoryWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 192, + "startLine": 55, "startColumn": 7, - "endLine": 192, - "endColumn": 30, + "endLine": 55, + "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseConstraints'" + "lifecycle": "create-only" } }, { @@ -84321,15 +83347,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalFargateThenEc2MissingNetworkMode", + "logicalId": "LeadingMemoryWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 193, + "startLine": 56, "startColumn": 7, - "endLine": 193, + "endLine": 56, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -84344,15 +83370,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalFargateThenEc2MissingNetworkMode", + "logicalId": "LeadingMemoryWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 194, + "startLine": 57, "startColumn": 7, - "endLine": 194, + "endLine": 57, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -84367,15 +83393,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalFargateThenEc2MissingNetworkMode", + "logicalId": "LeadingMemoryWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 195, + "startLine": 58, "startColumn": 7, - "endLine": 195, + "endLine": 58, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -84390,43 +83416,19 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalEc2ThenFargateMissingNetworkMode", + "logicalId": "TrailingMemoryWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 203, + "startLine": 66, "startColumn": 7, - "endLine": 203, + "endLine": 66, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseConstraints'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ConditionalEc2ThenFargateMissingNetworkMode", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Cpu", - "category": "Best Practice", - "startLine": 204, - "startColumn": 7, - "endLine": 204, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", "context": { "lifecycle": "create-only" } @@ -84434,19 +83436,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalEc2ThenFargateMissingNetworkMode", + "logicalId": "TrailingMemoryWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 205, + "startLine": 67, "startColumn": 7, - "endLine": 205, - "endColumn": 13, + "endLine": 67, + "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -84457,202 +83459,88 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ConditionalEc2ThenFargateMissingNetworkMode", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 206, - "startColumn": 7, - "endLine": 206, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FargateMissingAll' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FargateMissingAll", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FargateWrongNetworkMode' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FargateWrongNetworkMode", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 22, - "startColumn": 5, - "endLine": 22, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FargateInvalidCpu' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FargateInvalidCpu", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 37, - "startColumn": 5, - "endLine": 37, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FargatePlacementConstraints' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FargatePlacementConstraints", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 52, - "startColumn": 5, - "endLine": 52, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FargateUnsupportedLogDriver' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FargateUnsupportedLogDriver", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 70, - "startColumn": 5, - "endLine": 70, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FargateNullCpu' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateNullCpu", + "logicalId": "TrailingMemoryWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 87, - "startColumn": 5, - "endLine": 87, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 68, + "startColumn": 7, + "endLine": 68, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateNullPC' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "TrailingMemoryWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 102, - "startColumn": 5, - "endLine": 102, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 69, + "startColumn": 7, + "endLine": 69, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateConditionalNetworkMode' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalNetworkMode", + "logicalId": "TrailingMemoryWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 119, - "startColumn": 5, - "endLine": 119, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 70, + "startColumn": 7, + "endLine": 70, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FargateConditionalCpu' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'ScientificCpuNotation' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalCpu", + "logicalId": "ScientificCpuNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 133, + "startLine": 5, "startColumn": 5, - "endLine": 133, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -84660,19 +83548,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FargateConditionalMemory' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'ScientificMemoryNotation' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalMemory", + "logicalId": "ScientificMemoryNotation", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 147, + "startLine": 17, "startColumn": 5, - "endLine": 147, + "endLine": 17, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -84680,19 +83568,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FargateConditionalInvalidCpu' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'LeadingCpuWhitespace' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalInvalidCpu", + "logicalId": "LeadingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 161, + "startLine": 29, "startColumn": 5, - "endLine": 161, + "endLine": 29, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -84700,19 +83588,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FargateConditionalPlacementConstraints' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'TrailingCpuWhitespace' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateConditionalPlacementConstraints", + "logicalId": "TrailingCpuWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 175, + "startLine": 41, "startColumn": 5, - "endLine": 175, + "endLine": 41, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -84720,19 +83608,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ConditionalFargateThenEc2MissingNetworkMode' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'LeadingMemoryWhitespace' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConditionalFargateThenEc2MissingNetworkMode", + "logicalId": "LeadingMemoryWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 191, + "startLine": 53, "startColumn": 5, - "endLine": 191, + "endLine": 53, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -84740,35 +83628,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ConditionalEc2ThenFargateMissingNetworkMode' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'TrailingMemoryWhitespace' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConditionalEc2ThenFargateMissingNetworkMode", + "logicalId": "TrailingMemoryWhitespace", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 202, + "startLine": 65, "startColumn": 5, - "endLine": 202, + "endLine": 65, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/resources/ecs/fargate_task_sizes_e3047.yaml": { - "filePath": "bad/resources/ecs/fargate_task_sizes_e3047.yaml", + "bad/resources/ecs/fargate_properties_e3048.yaml": { + "filePath": "bad/resources/ecs/fargate_properties_e3048.yaml", "status": "OK", "metadata": { - "resourcesScanned": 9, + "resourcesScanned": 14, "counts": { "fatal": 0, - "errors": 11, - "warnings": 4, - "informational": 63, + "errors": 17, + "warnings": 0, + "informational": 94, "debug": 0 }, "suppressed": 0, @@ -84779,236 +83667,274 @@ { "ruleId": "E3047", "severity": "ERROR", - "message": "Cpu '8 vCPU' is not compatible with Memory '17 GB' for Fargate", + "message": "Cpu '128' is not compatible with Memory '512' for Fargate", "source": "CFN_LINT", "entity": { - "logicalId": "EightVcpuInvalidStep", + "logicalId": "FargateInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", "category": "Resource", - "startLine": 11, + "startLine": 42, "startColumn": 7, - "endLine": 11, + "endLine": 42, "endColumn": 10, "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", "phase": "LINT", "context": { "extra": { - "cpu": "8 vCPU", - "memory": "17 GB" + "cpu": "128", + "memory": "512" } } }, { "ruleId": "E3047", "severity": "ERROR", - "message": "Cpu 16384 is not compatible with Memory 36864 for Fargate", + "message": "Cpu '3 vCPU' is not compatible with Memory '512' for Fargate", "source": "CFN_LINT", "entity": { - "logicalId": "SixteenVcpuInvalidStep", + "logicalId": "FargateConditionalInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", "category": "Resource", - "startLine": 24, + "startLine": 165, "startColumn": 7, - "endLine": 24, + "endLine": 165, "endColumn": 10, "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", "phase": "LINT", "context": { "extra": { - "cpu": 16384, - "memory": 36864 + "cpu": "256", + "memory": "512" } } }, { - "ruleId": "E3047", + "ruleId": "E3048", "severity": "ERROR", - "message": "Cpu '32 vCPU' is not compatible with Memory '64 GB' for Fargate", + "message": "Fargate requires Cpu to be specified", "source": "CFN_LINT", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", + "logicalId": "FargateMissingAll", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "propertyPath": "Properties", + "suggestedFix": "Set Cpu to a valid Fargate value (256, 512, 1024, 2048, 4096, 8192, 16384, or 32768)", "category": "Resource", - "startLine": 37, - "startColumn": 7, - "endLine": 37, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", - "context": { - "extra": { - "cpu": "32 vCPU", - "memory": "64 GB" - } - } + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { - "ruleId": "E3047", + "ruleId": "E3048", "severity": "ERROR", - "message": "Cpu 32768 is not compatible with Memory 245760 for Fargate", + "message": "Fargate requires Memory to be specified", "source": "CFN_LINT", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", + "logicalId": "FargateMissingAll", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "propertyPath": "Properties", + "suggestedFix": "Set Memory to a valid Fargate value", "category": "Resource", - "startLine": 50, - "startColumn": 7, - "endLine": 50, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", - "context": { - "extra": { - "cpu": 32768, - "memory": 245760 - } - } + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { - "ruleId": "E3047", + "ruleId": "E3048", "severity": "ERROR", - "message": "Cpu '3 vCPU' is not compatible with Memory '4 GB' for Fargate", + "message": "Fargate requires NetworkMode to be specified as 'awsvpc'", "source": "CFN_LINT", "entity": { - "logicalId": "MalformedCpuUnits", + "logicalId": "FargateMissingAll", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "propertyPath": "Properties", + "suggestedFix": "Set NetworkMode to 'awsvpc'", "category": "Resource", - "startLine": 63, - "startColumn": 7, - "endLine": 63, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", - "context": { - "extra": { - "cpu": "3 vCPU", - "memory": "4 GB" - } - } + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { - "ruleId": "E3047", + "ruleId": "E3048", "severity": "ERROR", - "message": "Cpu '0512' is not compatible with Memory '1 GB' for Fargate", + "message": "Fargate requires NetworkMode 'awsvpc', got 'bridge'", "source": "CFN_LINT", "entity": { - "logicalId": "NonCanonicalCpuUnits", + "logicalId": "FargateWrongNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "propertyPath": "Properties.NetworkMode", + "suggestedFix": "Set NetworkMode to 'awsvpc'", "category": "Resource", - "startLine": 76, + "startLine": 26, "startColumn": 7, - "endLine": 76, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", - "context": { - "extra": { - "cpu": "0512", - "memory": "1 GB" - } - } + "endLine": 26, + "endColumn": 18, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { - "ruleId": "E3047", + "ruleId": "E3048", "severity": "ERROR", - "message": "Cpu '8192' is not compatible with Memory '9223372036854775807 GB' for Fargate", + "message": "Fargate Cpu value '128' is not valid. Valid sizes are ['256', '512', '1024', '2048', '4096', '8192', '16384', '32768'] CPU units or ['0.25', '0.5', '1', '2', '4', '8', '16', '32'] vCPU.", "source": "CFN_LINT", "entity": { - "logicalId": "OverflowingMemoryUnits", + "logicalId": "FargateInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "suggestedFix": "Use a valid Fargate Cpu size in CPU units or vCPU", "category": "Resource", - "startLine": 89, + "startLine": 42, "startColumn": 7, - "endLine": 89, + "endLine": 42, "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", - "context": { - "extra": { - "cpu": "8192", - "memory": "9223372036854775807 GB" - } - } + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { - "ruleId": "E3047", + "ruleId": "E3048", "severity": "ERROR", - "message": "Cpu '512' is not compatible with Memory '512' for Fargate", + "message": "Fargate does not support PlacementConstraints", "source": "CFN_LINT", "entity": { - "logicalId": "CpuInvalidThenValid", + "logicalId": "FargatePlacementConstraints", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "propertyPath": "Properties.PlacementConstraints", + "suggestedFix": "Remove PlacementConstraints for Fargate tasks", "category": "Resource", - "startLine": 102, + "startLine": 59, "startColumn": 7, - "endLine": 102, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", - "context": { - "extra": { - "cpu": "512", - "memory": "512" - } - } + "endLine": 59, + "endColumn": 27, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { - "ruleId": "E3047", + "ruleId": "E3048", "severity": "ERROR", - "message": "Cpu '512' is not compatible with Memory '512' for Fargate", + "message": "Fargate does not support log driver 'syslog'. Supported drivers: ['awslogs', 'splunk', 'awsfirelens']", "source": "CFN_LINT", "entity": { - "logicalId": "CpuValidThenInvalid", + "logicalId": "FargateUnsupportedLogDriver", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "propertyPath": "Properties.ContainerDefinitions.0.LogConfiguration.LogDriver", + "suggestedFix": "Use 'awslogs', 'splunk', or 'awsfirelens'", "category": "Resource", - "startLine": 115, - "startColumn": 7, - "endLine": 115, - "endColumn": 10, - "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", - "phase": "LINT", - "context": { - "extra": { - "cpu": "256", - "memory": "512" - } - } + "startLine": 82, + "startColumn": 13, + "endLine": 82, + "endColumn": 22, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" + }, + { + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate requires Cpu to be specified", + "source": "CFN_LINT", + "entity": { + "logicalId": "FargateNullCpu", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties", + "suggestedFix": "Set Cpu to a valid Fargate value (256, 512, 1024, 2048, 4096, 8192, 16384, or 32768)", + "category": "Resource", + "startLine": 87, + "startColumn": 5, + "endLine": 87, + "endColumn": 15, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" + }, + { + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate requires NetworkMode to be specified as 'awsvpc'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FargateConditionalNetworkMode", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties", + "suggestedFix": "Set NetworkMode to 'awsvpc'", + "category": "Resource", + "startLine": 119, + "startColumn": 5, + "endLine": 119, + "endColumn": 15, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" + }, + { + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate requires Cpu to be specified", + "source": "CFN_LINT", + "entity": { + "logicalId": "FargateConditionalCpu", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties", + "suggestedFix": "Set Cpu to a valid Fargate value (256, 512, 1024, 2048, 4096, 8192, 16384, or 32768)", + "category": "Resource", + "startLine": 133, + "startColumn": 5, + "endLine": 133, + "endColumn": 15, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" + }, + { + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate requires Memory to be specified", + "source": "CFN_LINT", + "entity": { + "logicalId": "FargateConditionalMemory", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties", + "suggestedFix": "Set Memory to a valid Fargate value", + "category": "Resource", + "startLine": 147, + "startColumn": 5, + "endLine": 147, + "endColumn": 15, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { "ruleId": "E3048", @@ -85016,16 +83942,16 @@ "message": "Fargate Cpu value '3 vCPU' is not valid. Valid sizes are ['256', '512', '1024', '2048', '4096', '8192', '16384', '32768'] CPU units or ['0.25', '0.5', '1', '2', '4', '8', '16', '32'] vCPU.", "source": "CFN_LINT", "entity": { - "logicalId": "MalformedCpuUnits", + "logicalId": "FargateConditionalInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "suggestedFix": "Use a valid Fargate Cpu size in CPU units or vCPU", "category": "Resource", - "startLine": 63, + "startLine": 165, "startColumn": 7, - "endLine": 63, + "endLine": 165, "endColumn": 10, "ruleDescription": "Validate ECS Fargate tasks have required properties and values", "phase": "LINT" @@ -85033,102 +83959,131 @@ { "ruleId": "E3048", "severity": "ERROR", - "message": "Fargate Cpu value '0512' is not valid. Valid sizes are ['256', '512', '1024', '2048', '4096', '8192', '16384', '32768'] CPU units or ['0.25', '0.5', '1', '2', '4', '8', '16', '32'] vCPU.", + "message": "Fargate does not support PlacementConstraints", "source": "CFN_LINT", "entity": { - "logicalId": "NonCanonicalCpuUnits", + "logicalId": "FargateConditionalPlacementConstraints", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", - "suggestedFix": "Use a valid Fargate Cpu size in CPU units or vCPU", + "propertyPath": "Properties.PlacementConstraints", + "suggestedFix": "Remove PlacementConstraints for Fargate tasks", "category": "Resource", - "startLine": 76, + "startLine": 181, "startColumn": 7, - "endLine": 76, - "endColumn": 10, + "endLine": 181, + "endColumn": 27, "ruleDescription": "Validate ECS Fargate tasks have required properties and values", "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "16384 is not of type 'string' - automatically coerced (number to string)", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate requires NetworkMode to be specified as 'awsvpc'", "source": "CFN_LINT", "entity": { - "logicalId": "SixteenVcpuInvalidStep", + "logicalId": "ConditionalFargateThenEc2MissingNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", - "category": "Best Practice", - "startLine": 24, - "startColumn": 7, - "endLine": 24, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Properties", + "suggestedFix": "Set NetworkMode to 'awsvpc'", + "category": "Resource", + "startLine": 191, + "startColumn": 5, + "endLine": 191, + "endColumn": 15, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "36864 is not of type 'string' - automatically coerced (number to string)", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate requires NetworkMode to be specified as 'awsvpc'", "source": "CFN_LINT", "entity": { - "logicalId": "SixteenVcpuInvalidStep", + "logicalId": "ConditionalEc2ThenFargateMissingNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties", + "suggestedFix": "Set NetworkMode to 'awsvpc'", + "category": "Resource", + "startLine": 202, + "startColumn": 5, + "endLine": 202, + "endColumn": 15, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FargateMissingAll", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 25, + "startLine": 11, "startColumn": 7, - "endLine": 25, + "endLine": 11, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "32768 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", + "logicalId": "FargateMissingAll", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 50, + "startLine": 12, "startColumn": 7, - "endLine": 50, - "endColumn": 10, + "endLine": 12, + "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "245760 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", + "logicalId": "FargateMissingAll", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 51, + "startLine": 14, "startColumn": 7, - "endLine": 51, - "endColumn": 13, + "endLine": 14, + "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", @@ -85136,15 +84091,15 @@ "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EightVcpuInvalidStep", + "logicalId": "FargateWrongNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 8, + "startLine": 23, "startColumn": 7, - "endLine": 8, + "endLine": 23, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85159,15 +84114,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EightVcpuInvalidStep", + "logicalId": "FargateWrongNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 9, + "startLine": 24, "startColumn": 7, - "endLine": 9, + "endLine": 24, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85182,15 +84137,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EightVcpuInvalidStep", + "logicalId": "FargateWrongNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 10, + "startLine": 26, "startColumn": 7, - "endLine": 10, + "endLine": 26, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85205,15 +84160,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EightVcpuInvalidStep", + "logicalId": "FargateWrongNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 11, + "startLine": 27, "startColumn": 7, - "endLine": 11, + "endLine": 27, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85228,15 +84183,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EightVcpuInvalidStep", + "logicalId": "FargateWrongNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 12, + "startLine": 28, "startColumn": 7, - "endLine": 12, + "endLine": 28, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85251,15 +84206,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EightVcpuInvalidStep", + "logicalId": "FargateWrongNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 13, + "startLine": 29, "startColumn": 7, - "endLine": 13, + "endLine": 29, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85274,15 +84229,15 @@ "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SixteenVcpuInvalidStep", + "logicalId": "FargateInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 21, + "startLine": 38, "startColumn": 7, - "endLine": 21, + "endLine": 38, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85297,15 +84252,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SixteenVcpuInvalidStep", + "logicalId": "FargateInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 22, + "startLine": 39, "startColumn": 7, - "endLine": 22, + "endLine": 39, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85320,15 +84275,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SixteenVcpuInvalidStep", + "logicalId": "FargateInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 23, + "startLine": 41, "startColumn": 7, - "endLine": 23, + "endLine": 41, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85343,15 +84298,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SixteenVcpuInvalidStep", + "logicalId": "FargateInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 24, + "startLine": 42, "startColumn": 7, - "endLine": 24, + "endLine": 42, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85366,15 +84321,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SixteenVcpuInvalidStep", + "logicalId": "FargateInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 25, + "startLine": 43, "startColumn": 7, - "endLine": 25, + "endLine": 43, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85389,15 +84344,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SixteenVcpuInvalidStep", + "logicalId": "FargateInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 26, + "startLine": 44, "startColumn": 7, - "endLine": 26, + "endLine": 44, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85412,15 +84367,15 @@ "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", + "logicalId": "FargatePlacementConstraints", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 34, + "startLine": 53, "startColumn": 7, - "endLine": 34, + "endLine": 53, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85435,15 +84390,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", + "logicalId": "FargatePlacementConstraints", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 35, + "startLine": 54, "startColumn": 7, - "endLine": 35, + "endLine": 54, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85458,15 +84413,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", + "logicalId": "FargatePlacementConstraints", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 36, + "startLine": 56, "startColumn": 7, - "endLine": 36, + "endLine": 56, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85481,15 +84436,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", + "logicalId": "FargatePlacementConstraints", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 37, + "startLine": 57, "startColumn": 7, - "endLine": 37, + "endLine": 57, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85504,15 +84459,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", + "logicalId": "FargatePlacementConstraints", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 38, + "startLine": 58, "startColumn": 7, - "endLine": 38, + "endLine": 58, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85521,21 +84476,44 @@ "lifecycle": "create-only" } }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'PlacementConstraints' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FargatePlacementConstraints", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.PlacementConstraints", + "category": "Best Practice", + "startLine": 59, + "startColumn": 7, + "endLine": 59, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", + "logicalId": "FargatePlacementConstraints", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 39, + "startLine": 62, "startColumn": 7, - "endLine": 39, + "endLine": 62, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85550,15 +84528,15 @@ "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", + "logicalId": "FargateUnsupportedLogDriver", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 47, + "startLine": 71, "startColumn": 7, - "endLine": 47, + "endLine": 71, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85573,15 +84551,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", + "logicalId": "FargateUnsupportedLogDriver", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 48, + "startLine": 72, "startColumn": 7, - "endLine": 48, + "endLine": 72, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85596,15 +84574,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", + "logicalId": "FargateUnsupportedLogDriver", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 49, + "startLine": 74, "startColumn": 7, - "endLine": 49, + "endLine": 74, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85619,15 +84597,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", + "logicalId": "FargateUnsupportedLogDriver", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 50, + "startLine": 75, "startColumn": 7, - "endLine": 50, + "endLine": 75, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85642,15 +84620,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", + "logicalId": "FargateUnsupportedLogDriver", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 51, + "startLine": 76, "startColumn": 7, - "endLine": 51, + "endLine": 76, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85665,15 +84643,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", + "logicalId": "FargateUnsupportedLogDriver", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 52, + "startLine": 77, "startColumn": 7, - "endLine": 52, + "endLine": 77, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85688,15 +84666,15 @@ "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MalformedCpuUnits", + "logicalId": "FargateNullCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 60, + "startLine": 88, "startColumn": 7, - "endLine": 60, + "endLine": 88, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85711,15 +84689,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MalformedCpuUnits", + "logicalId": "FargateNullCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 61, + "startLine": 89, "startColumn": 7, - "endLine": 61, + "endLine": 89, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85734,15 +84712,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MalformedCpuUnits", + "logicalId": "FargateNullCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 62, + "startLine": 91, "startColumn": 7, - "endLine": 62, + "endLine": 91, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85757,21 +84735,22 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MalformedCpuUnits", + "logicalId": "FargateNullCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 63, + "startLine": 92, "startColumn": 7, - "endLine": 63, + "endLine": 92, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseConstraints'" } }, { @@ -85780,15 +84759,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MalformedCpuUnits", + "logicalId": "FargateNullCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 64, + "startLine": 93, "startColumn": 7, - "endLine": 64, + "endLine": 93, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85803,15 +84782,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MalformedCpuUnits", + "logicalId": "FargateNullCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 65, + "startLine": 94, "startColumn": 7, - "endLine": 65, + "endLine": 94, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85826,15 +84805,15 @@ "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NonCanonicalCpuUnits", + "logicalId": "FargateNullPC", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 73, + "startLine": 103, "startColumn": 7, - "endLine": 73, + "endLine": 103, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85849,15 +84828,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NonCanonicalCpuUnits", + "logicalId": "FargateNullPC", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 74, + "startLine": 104, "startColumn": 7, - "endLine": 74, + "endLine": 104, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85872,15 +84851,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NonCanonicalCpuUnits", + "logicalId": "FargateNullPC", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 75, + "startLine": 106, "startColumn": 7, - "endLine": 75, + "endLine": 106, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85895,15 +84874,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NonCanonicalCpuUnits", + "logicalId": "FargateNullPC", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 76, + "startLine": 107, "startColumn": 7, - "endLine": 76, + "endLine": 107, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85918,15 +84897,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NonCanonicalCpuUnits", + "logicalId": "FargateNullPC", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 77, + "startLine": 108, "startColumn": 7, - "endLine": 77, + "endLine": 108, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85935,21 +84914,45 @@ "lifecycle": "create-only" } }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'PlacementConstraints' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FargateNullPC", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.PlacementConstraints", + "category": "Best Practice", + "startLine": 109, + "startColumn": 7, + "endLine": 109, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseConstraints'" + } + }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NonCanonicalCpuUnits", + "logicalId": "FargateNullPC", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 78, + "startLine": 110, "startColumn": 7, - "endLine": 78, + "endLine": 110, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85964,15 +84967,15 @@ "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OverflowingMemoryUnits", + "logicalId": "FargateConditionalNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 86, + "startLine": 120, "startColumn": 7, - "endLine": 86, + "endLine": 120, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -85987,15 +84990,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OverflowingMemoryUnits", + "logicalId": "FargateConditionalNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 87, + "startLine": 121, "startColumn": 7, - "endLine": 87, + "endLine": 121, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -86010,21 +85013,22 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OverflowingMemoryUnits", + "logicalId": "FargateConditionalNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 88, + "startLine": 122, "startColumn": 7, - "endLine": 88, + "endLine": 122, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseConstraints'" } }, { @@ -86033,15 +85037,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OverflowingMemoryUnits", + "logicalId": "FargateConditionalNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 89, + "startLine": 123, "startColumn": 7, - "endLine": 89, + "endLine": 123, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -86056,15 +85060,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OverflowingMemoryUnits", + "logicalId": "FargateConditionalNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 90, + "startLine": 124, "startColumn": 7, - "endLine": 90, + "endLine": 124, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -86079,15 +85083,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OverflowingMemoryUnits", + "logicalId": "FargateConditionalNetworkMode", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 91, + "startLine": 125, "startColumn": 7, - "endLine": 91, + "endLine": 125, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -86102,15 +85106,15 @@ "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CpuInvalidThenValid", + "logicalId": "FargateConditionalCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 99, + "startLine": 134, "startColumn": 7, - "endLine": 99, + "endLine": 134, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -86125,15 +85129,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CpuInvalidThenValid", + "logicalId": "FargateConditionalCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 100, + "startLine": 135, "startColumn": 7, - "endLine": 100, + "endLine": 135, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -86148,15 +85152,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CpuInvalidThenValid", + "logicalId": "FargateConditionalCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 101, + "startLine": 136, "startColumn": 7, - "endLine": 101, + "endLine": 136, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -86171,22 +85175,22 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CpuInvalidThenValid", + "logicalId": "FargateConditionalCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 102, + "startLine": 137, "startColumn": 7, - "endLine": 102, + "endLine": 137, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseFirst'" + "resolutionSource": "Fn::If on condition 'UseConstraints'" } }, { @@ -86195,15 +85199,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CpuInvalidThenValid", + "logicalId": "FargateConditionalCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 103, + "startLine": 138, "startColumn": 7, - "endLine": 103, + "endLine": 138, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -86218,15 +85222,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CpuInvalidThenValid", + "logicalId": "FargateConditionalCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 104, + "startLine": 139, "startColumn": 7, - "endLine": 104, + "endLine": 139, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -86241,15 +85245,15 @@ "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CpuValidThenInvalid", + "logicalId": "FargateConditionalMemory", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 112, + "startLine": 148, "startColumn": 7, - "endLine": 112, + "endLine": 148, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -86264,15 +85268,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CpuValidThenInvalid", + "logicalId": "FargateConditionalMemory", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 113, + "startLine": 149, "startColumn": 7, - "endLine": 113, + "endLine": 149, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -86287,15 +85291,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CpuValidThenInvalid", + "logicalId": "FargateConditionalMemory", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 114, + "startLine": 150, "startColumn": 7, - "endLine": 114, + "endLine": 150, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -86310,22 +85314,21 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CpuValidThenInvalid", + "logicalId": "FargateConditionalMemory", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 115, + "startLine": 151, "startColumn": 7, - "endLine": 115, + "endLine": 151, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseFirst'" + "lifecycle": "create-only" } }, { @@ -86334,21 +85337,22 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CpuValidThenInvalid", + "logicalId": "FargateConditionalMemory", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 116, + "startLine": 152, "startColumn": 7, - "endLine": 116, + "endLine": 152, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseConstraints'" } }, { @@ -86357,484 +85361,458 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CpuValidThenInvalid", + "logicalId": "FargateConditionalMemory", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 117, + "startLine": 153, "startColumn": 7, - "endLine": 117, + "endLine": 153, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'EightVcpuInvalidStep' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "EightVcpuInvalidStep", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SixteenVcpuInvalidStep' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SixteenVcpuInvalidStep", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ThirtyTwoVcpuUnsupportedSixtyFourGb' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 33, - "startColumn": 5, - "endLine": 33, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ThirtyTwoVcpuUnsupportedTwoFortyGb' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 46, - "startColumn": 5, - "endLine": 46, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MalformedCpuUnits' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MalformedCpuUnits", + "logicalId": "FargateConditionalInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 59, - "startColumn": 5, - "endLine": 59, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 162, + "startColumn": 7, + "endLine": 162, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'NonCanonicalCpuUnits' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NonCanonicalCpuUnits", + "logicalId": "FargateConditionalInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 72, - "startColumn": 5, - "endLine": 72, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 163, + "startColumn": 7, + "endLine": 163, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'OverflowingMemoryUnits' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OverflowingMemoryUnits", + "logicalId": "FargateConditionalInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 85, - "startColumn": 5, - "endLine": 85, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 164, + "startColumn": 7, + "endLine": 164, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CpuInvalidThenValid' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CpuInvalidThenValid", + "logicalId": "FargateConditionalInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 98, - "startColumn": 5, - "endLine": 98, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 165, + "startColumn": 7, + "endLine": 165, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseConstraints'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CpuValidThenInvalid' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CpuValidThenInvalid", + "logicalId": "FargateConditionalInvalidCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 111, - "startColumn": 5, - "endLine": 111, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/resources/elasticache/cache_cluster_failover.yaml": { - "filePath": "bad/resources/elasticache/cache_cluster_failover.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 30, - "debug": 0 + "startLine": 166, + "startColumn": 7, + "endLine": 166, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BasicReplicationGroup", + "logicalId": "FargateConditionalInvalidCpu", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 34, - "startColumn": 3, - "endLine": 34, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 167, + "startColumn": 7, + "endLine": 167, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BasicReplicationGroup", + "logicalId": "FargateConditionalPlacementConstraints", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 34, - "startColumn": 3, - "endLine": 34, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 176, + "startColumn": 7, + "endLine": 176, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SecondReplicationGroup", + "logicalId": "FargateConditionalPlacementConstraints", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 53, - "startColumn": 3, - "endLine": 53, - "endColumn": 25, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 177, + "startColumn": 7, + "endLine": 177, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SecondReplicationGroup", + "logicalId": "FargateConditionalPlacementConstraints", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 53, - "startColumn": 3, - "endLine": 53, - "endColumn": 25, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 178, + "startColumn": 7, + "endLine": 178, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ThirdReplicationGroup", + "logicalId": "FargateConditionalPlacementConstraints", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 72, - "startColumn": 3, - "endLine": 72, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 179, + "startColumn": 7, + "endLine": 179, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ThirdReplicationGroup", + "logicalId": "FargateConditionalPlacementConstraints", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 72, - "startColumn": 3, - "endLine": 72, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 180, + "startColumn": 7, + "endLine": 180, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'PlacementConstraints' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FourtReplicationGroup", + "logicalId": "FargateConditionalPlacementConstraints", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, + "propertyPath": "Properties.PlacementConstraints", "category": "Best Practice", - "startLine": 89, - "startColumn": 3, - "endLine": 89, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 181, + "startColumn": 7, + "endLine": 181, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseConstraints'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FourtReplicationGroup", + "logicalId": "FargateConditionalPlacementConstraints", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 89, - "startColumn": 3, - "endLine": 89, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 182, + "startColumn": 7, + "endLine": 182, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3100", + "ruleId": "I9001", "severity": "INFO", - "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", - "source": "CFN_LINT", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BasicReplicationGroup", + "logicalId": "ConditionalFargateThenEc2MissingNetworkMode", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CacheNodeType", - "suggestedFix": "Upgrade to a current generation instance type", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 40, + "startLine": 192, "startColumn": 7, - "endLine": 40, - "endColumn": 20, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" + "endLine": 192, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseConstraints'" + } }, { - "ruleId": "I3100", + "ruleId": "I9001", "severity": "INFO", - "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", - "source": "CFN_LINT", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SecondReplicationGroup", + "logicalId": "ConditionalFargateThenEc2MissingNetworkMode", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CacheNodeType", - "suggestedFix": "Upgrade to a current generation instance type", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 59, + "startLine": 193, "startColumn": 7, - "endLine": 59, - "endColumn": 20, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" + "endLine": 193, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3100", + "ruleId": "I9001", "severity": "INFO", - "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", - "source": "CFN_LINT", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ThirdReplicationGroup", + "logicalId": "ConditionalFargateThenEc2MissingNetworkMode", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CacheNodeType", - "suggestedFix": "Upgrade to a current generation instance type", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 78, + "startLine": 194, "startColumn": 7, - "endLine": 78, - "endColumn": 20, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" + "endLine": 194, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3100", + "ruleId": "I9001", "severity": "INFO", - "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", - "source": "CFN_LINT", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FourtReplicationGroup", + "logicalId": "ConditionalFargateThenEc2MissingNetworkMode", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CacheNodeType", - "suggestedFix": "Upgrade to a current generation instance type", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 95, + "startLine": 195, "startColumn": 7, - "endLine": 95, - "endColumn": 20, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" + "endLine": 195, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CacheParameterGroupFamily' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyParameterGroup", + "logicalId": "ConditionalEc2ThenFargateMissingNetworkMode", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ParameterGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CacheParameterGroupFamily", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 14, + "startLine": 203, "startColumn": 7, - "endLine": 14, - "endColumn": 32, + "endLine": 203, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseConstraints'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CacheParameterGroupFamily' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyClusterParameterGroup", + "logicalId": "ConditionalEc2ThenFargateMissingNetworkMode", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ParameterGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CacheParameterGroupFamily", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 22, + "startLine": 204, "startColumn": 7, - "endLine": 22, - "endColumn": 32, + "endLine": 204, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -86844,19 +85822,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CacheParameterGroupFamily' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyNonClusterParameterGroup", + "logicalId": "ConditionalEc2ThenFargateMissingNetworkMode", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ParameterGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CacheParameterGroupFamily", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 30, + "startLine": 205, "startColumn": 7, - "endLine": 30, - "endColumn": 32, + "endLine": 205, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -86866,20 +85845,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CacheSubnetGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BasicReplicationGroup", + "logicalId": "ConditionalEc2ThenFargateMissingNetworkMode", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CacheSubnetGroupName", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 41, + "startLine": 206, "startColumn": 7, - "endLine": 41, + "endLine": 206, "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -86887,182 +85866,161 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Resource 'FargateMissingAll' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BasicReplicationGroup", + "logicalId": "FargateMissingAll", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 46, - "startColumn": 7, - "endLine": 46, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CacheSubnetGroupName' is create-only; updating it will cause resource replacement", + "message": "Resource 'FargateWrongNetworkMode' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SecondReplicationGroup", + "logicalId": "FargateWrongNetworkMode", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CacheSubnetGroupName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 60, - "startColumn": 7, - "endLine": 60, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 22, + "startColumn": 5, + "endLine": 22, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Resource 'FargateInvalidCpu' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SecondReplicationGroup", + "logicalId": "FargateInvalidCpu", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 64, - "startColumn": 7, - "endLine": 64, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 37, + "startColumn": 5, + "endLine": 37, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CacheSubnetGroupName' is create-only; updating it will cause resource replacement", + "message": "Resource 'FargatePlacementConstraints' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ThirdReplicationGroup", + "logicalId": "FargatePlacementConstraints", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CacheSubnetGroupName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 79, - "startColumn": 7, - "endLine": 79, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 52, + "startColumn": 5, + "endLine": 52, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Resource 'FargateUnsupportedLogDriver' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ThirdReplicationGroup", + "logicalId": "FargateUnsupportedLogDriver", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 82, - "startColumn": 7, - "endLine": 82, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 70, + "startColumn": 5, + "endLine": 70, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CacheSubnetGroupName' is create-only; updating it will cause resource replacement", + "message": "Resource 'FargateNullCpu' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FourtReplicationGroup", + "logicalId": "FargateNullCpu", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CacheSubnetGroupName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 96, - "startColumn": 7, - "endLine": 96, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 87, + "startColumn": 5, + "endLine": 87, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Resource 'FargateNullPC' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FourtReplicationGroup", + "logicalId": "FargateNullPC", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 100, - "startColumn": 7, - "endLine": 100, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 102, + "startColumn": 5, + "endLine": 102, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyParameterGroup' of type 'AWS::ElastiCache::ParameterGroup' supports Tags but none are configured", + "message": "Resource 'FargateConditionalNetworkMode' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyParameterGroup", + "logicalId": "FargateConditionalNetworkMode", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ParameterGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, + "startLine": 119, "startColumn": 5, - "endLine": 12, + "endLine": 119, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -87070,19 +86028,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyClusterParameterGroup' of type 'AWS::ElastiCache::ParameterGroup' supports Tags but none are configured", + "message": "Resource 'FargateConditionalCpu' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyClusterParameterGroup", + "logicalId": "FargateConditionalCpu", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ParameterGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 20, + "startLine": 133, "startColumn": 5, - "endLine": 20, + "endLine": 133, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -87090,19 +86048,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyNonClusterParameterGroup' of type 'AWS::ElastiCache::ParameterGroup' supports Tags but none are configured", + "message": "Resource 'FargateConditionalMemory' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyNonClusterParameterGroup", + "logicalId": "FargateConditionalMemory", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ParameterGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 28, + "startLine": 147, "startColumn": 5, - "endLine": 28, + "endLine": 147, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -87110,19 +86068,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BasicReplicationGroup' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", + "message": "Resource 'FargateConditionalInvalidCpu' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BasicReplicationGroup", + "logicalId": "FargateConditionalInvalidCpu", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 36, + "startLine": 161, "startColumn": 5, - "endLine": 36, + "endLine": 161, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -87130,19 +86088,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SecondReplicationGroup' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", + "message": "Resource 'FargateConditionalPlacementConstraints' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SecondReplicationGroup", + "logicalId": "FargateConditionalPlacementConstraints", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 55, + "startLine": 175, "startColumn": 5, - "endLine": 55, + "endLine": 175, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -87150,19 +86108,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ThirdReplicationGroup' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", + "message": "Resource 'ConditionalFargateThenEc2MissingNetworkMode' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ThirdReplicationGroup", + "logicalId": "ConditionalFargateThenEc2MissingNetworkMode", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 74, + "startLine": 191, "startColumn": 5, - "endLine": 74, + "endLine": 191, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -87170,35 +86128,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FourtReplicationGroup' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", + "message": "Resource 'ConditionalEc2ThenFargateMissingNetworkMode' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FourtReplicationGroup", + "logicalId": "ConditionalEc2ThenFargateMissingNetworkMode", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 91, + "startLine": 202, "startColumn": 5, - "endLine": 91, + "endLine": 202, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/resources/iam/iam_policy.yaml": { - "filePath": "bad/resources/iam/iam_policy.yaml", + "bad/resources/ecs/fargate_task_sizes_e3047.yaml": { + "filePath": "bad/resources/ecs/fargate_task_sizes_e3047.yaml", "status": "OK", "metadata": { - "resourcesScanned": 4, + "resourcesScanned": 9, "counts": { - "fatal": 4, - "errors": 17, - "warnings": 1, - "informational": 2, + "fatal": 0, + "errors": 11, + "warnings": 4, + "informational": 63, "debug": 0 }, "suppressed": 0, @@ -87207,510 +86165,652 @@ }, "diagnostics": [ { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'PolicyName' is a required property", - "source": "SCHEMA", + "ruleId": "E3047", + "severity": "ERROR", + "message": "Cpu '8 vCPU' is not compatible with Memory '17 GB' for Fargate", + "source": "CFN_LINT", "entity": { - "logicalId": "rIamPolicy", + "logicalId": "EightVcpuInvalidStep", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'PolicyName'", - "category": "Schema", - "startLine": 37, - "startColumn": 5, - "endLine": 37, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "category": "Resource", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", + "context": { + "extra": { + "cpu": "8 vCPU", + "memory": "17 GB" + } + } }, { - "ruleId": "F3012", - "severity": "FATAL", - "message": "[{'__conditional': 'cCondition', '__if_true': {'Statement': {}}, '__if_false': {'Statement': []}}] is not of type 'object'", - "source": "SCHEMA", + "ruleId": "E3047", + "severity": "ERROR", + "message": "Cpu 16384 is not compatible with Memory 36864 for Fargate", + "source": "CFN_LINT", "entity": { - "logicalId": "rIamPolicy", + "logicalId": "SixteenVcpuInvalidStep", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument", - "category": "Schema", - "startLine": 38, + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "category": "Resource", + "startLine": 24, "startColumn": 7, - "endLine": 38, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Property type mismatch", - "phase": "SCHEMA", + "endLine": 24, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", "context": { - "actualValue": [ - { - "Statement": {} - } - ], - "expectedConstraint": "object" + "extra": { + "cpu": 16384, + "memory": 36864 + } } }, { - "ruleId": "F3017", - "severity": "FATAL", - "message": "Value is not valid under any of the 3 anyOf schemas for AWS::IAM::Policy (0 branches matched; at least one is required). Required property combinations: ['Groups'] or ['Roles'] or ['Users']. Branch failures: branch 1: 'Users' is a required property; branch 2: 'Groups' is a required property; branch 3: 'Roles' is a required property.", - "source": "SCHEMA", + "ruleId": "E3047", + "severity": "ERROR", + "message": "Cpu '32 vCPU' is not compatible with Memory '64 GB' for Fargate", + "source": "CFN_LINT", "entity": { - "logicalId": "rIamPolicy", + "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties", - "category": "Schema", + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "category": "Resource", "startLine": 37, - "startColumn": 5, + "startColumn": 7, "endLine": 37, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Value not valid under anyOf", - "phase": "SCHEMA", + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", "context": { - "expectedConstraint": "at least one anyOf branch", "extra": { - "branchCount": 3, - "branchFailures": [ - { - "branch": 1, - "reasons": [ - { - "message": "'Users' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 2, - "reasons": [ - { - "message": "'Groups' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 3, - "reasons": [ - { - "message": "'Roles' is a required property", - "propertyPath": "Properties" - } - ] - } - ], - "compositionKind": "anyOf", - "matchCount": 0, - "matchOutcome": "zeroMatches", - "validPropertyCombinations": [ - [ - "Groups" - ], - [ - "Roles" - ], - [ - "Users" - ] - ] + "cpu": "32 vCPU", + "memory": "64 GB" } } }, { - "ruleId": "F3033", - "severity": "FATAL", - "message": "length 91 exceeds maximum 64", - "source": "SCHEMA", + "ruleId": "E3047", + "severity": "ERROR", + "message": "Cpu 32768 is not compatible with Memory 245760 for Fargate", + "source": "CFN_LINT", "entity": { - "logicalId": "rIamRole", + "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RoleName", - "category": "Schema", - "startLine": 9, + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "category": "Resource", + "startLine": 50, "startColumn": 7, - "endLine": 9, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "String length out of bounds", - "phase": "SCHEMA", + "endLine": 50, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", "context": { - "actualValue": "jeAoXmadgEUYzfalKtuYjeAoXmadgEUYzfalKtuYjeAoXmadgEUYzfalKtuYjeAoXmadgEUYzfalKtuYBadRoleName", "extra": { - "actual_length": 91, - "max_length": 64, - "min_length": 1 + "cpu": 32768, + "memory": 245760 } } }, { - "ruleId": "E1028", + "ruleId": "E3047", "severity": "ERROR", - "message": "Fn::If condition 'cCondition' does not exist in Conditions section", - "source": "SCHEMA", + "message": "Cpu '3 vCPU' is not compatible with Memory '4 GB' for Fargate", + "source": "CFN_LINT", "entity": { - "logicalId": "rIamPolicy", + "logicalId": "MalformedCpuUnits", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.0.Fn::If.0", - "category": "Intrinsic Function", - "startLine": 40, - "startColumn": 11, - "endLine": 40, - "endColumn": 12, - "ruleDescription": "Fn::If condition must exist in Conditions section", - "phase": "PARSE" + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "category": "Resource", + "startLine": 63, + "startColumn": 7, + "endLine": 63, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", + "context": { + "extra": { + "cpu": "3 vCPU", + "memory": "4 GB" + } + } }, { - "ruleId": "E3510", + "ruleId": "E3047", "severity": "ERROR", - "message": "'blah' is not one of ['2008-10-17', '2012-10-17']", + "message": "Cpu '0512' is not compatible with Memory '1 GB' for Fargate", "source": "CFN_LINT", "entity": { - "logicalId": "rIamRole", + "logicalId": "NonCanonicalCpuUnits", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Policies.0.PolicyDocument.Version", + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", "category": "Resource", - "startLine": 14, - "startColumn": 11, - "endLine": 14, - "endColumn": 18, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "startLine": 76, + "startColumn": 7, + "endLine": 76, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", + "context": { + "extra": { + "cpu": "0512", + "memory": "1 GB" + } + } }, { - "ruleId": "E3510", + "ruleId": "E3047", "severity": "ERROR", - "message": "Additional properties are not allowed ('BadProperty' was unexpected)", + "message": "Cpu '8192' is not compatible with Memory '9223372036854775807 GB' for Fargate", "source": "CFN_LINT", "entity": { - "logicalId": "rIamRole", + "logicalId": "OverflowingMemoryUnits", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Policies.0.PolicyDocument.BadProperty", + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", "category": "Resource", - "startLine": 15, - "startColumn": 11, - "endLine": 15, - "endColumn": 22, - "ruleDescription": "Validate identity based IAM policies", + "startLine": 89, + "startColumn": 7, + "endLine": 89, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", + "context": { + "extra": { + "cpu": "8192", + "memory": "9223372036854775807 GB" + } + } + }, + { + "ruleId": "E3047", + "severity": "ERROR", + "message": "Cpu '512' is not compatible with Memory '512' for Fargate", + "source": "CFN_LINT", + "entity": { + "logicalId": "CpuInvalidThenValid", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "category": "Resource", + "startLine": 102, + "startColumn": 7, + "endLine": 102, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", + "context": { + "extra": { + "cpu": "512", + "memory": "512" + } + } + }, + { + "ruleId": "E3047", + "severity": "ERROR", + "message": "Cpu '512' is not compatible with Memory '512' for Fargate", + "source": "CFN_LINT", + "entity": { + "logicalId": "CpuValidThenInvalid", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate CPU/memory combination (e.g., Cpu: 256 with Memory: 512, 1024, or 2048)", + "category": "Resource", + "startLine": 115, + "startColumn": 7, + "endLine": 115, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have the right combination of CPU and memory", + "phase": "LINT", + "context": { + "extra": { + "cpu": "256", + "memory": "512" + } + } + }, + { + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate Cpu value '3 vCPU' is not valid. Valid sizes are ['256', '512', '1024', '2048', '4096', '8192', '16384', '32768'] CPU units or ['0.25', '0.5', '1', '2', '4', '8', '16', '32'] vCPU.", + "source": "CFN_LINT", + "entity": { + "logicalId": "MalformedCpuUnits", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate Cpu size in CPU units or vCPU", + "category": "Resource", + "startLine": 63, + "startColumn": 7, + "endLine": 63, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", "phase": "LINT" }, { - "ruleId": "E3510", + "ruleId": "E3048", "severity": "ERROR", - "message": "'Test' is not of type 'object', 'array'", + "message": "Fargate Cpu value '0512' is not valid. Valid sizes are ['256', '512', '1024', '2048', '4096', '8192', '16384', '32768'] CPU units or ['0.25', '0.5', '1', '2', '4', '8', '16', '32'] vCPU.", "source": "CFN_LINT", "entity": { - "logicalId": "rIamRole", + "logicalId": "NonCanonicalCpuUnits", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Policies.0.PolicyDocument.Statement", + "propertyPath": "Properties.Cpu", + "suggestedFix": "Use a valid Fargate Cpu size in CPU units or vCPU", "category": "Resource", - "startLine": 16, - "startColumn": 11, - "endLine": 16, - "endColumn": 20, - "ruleDescription": "Validate identity based IAM policies", + "startLine": 76, + "startColumn": 7, + "endLine": 76, + "endColumn": 10, + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", "phase": "LINT" }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'blah' is not one of ['2008-10-17', '2012-10-17']", + "ruleId": "W9003", + "severity": "WARN", + "message": "16384 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", + "entity": { + "logicalId": "SixteenVcpuInvalidStep", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Cpu", + "category": "Best Practice", + "startLine": 24, + "startColumn": 7, + "endLine": 24, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "36864 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", + "entity": { + "logicalId": "SixteenVcpuInvalidStep", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Memory", + "category": "Best Practice", + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "32768 is not of type 'string' - automatically coerced (number to string)", "source": "CFN_LINT", "entity": { - "logicalId": "rIamUser", + "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Version", - "category": "Resource", - "startLine": 21, - "startColumn": 9, - "endLine": 21, - "endColumn": 16, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.Cpu", + "category": "Best Practice", + "startLine": 50, + "startColumn": 7, + "endLine": 50, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "Only one of ['Action', 'NotAction'] is a required property", + "ruleId": "W9003", + "severity": "WARN", + "message": "245760 is not of type 'string' - automatically coerced (number to string)", "source": "CFN_LINT", "entity": { - "logicalId": "rIamUser", + "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Statement.0", - "category": "Resource", - "startLine": 23, - "startColumn": 19, - "endLine": 23, - "endColumn": 20, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.Memory", + "category": "Best Practice", + "startLine": 51, + "startColumn": 7, + "endLine": 51, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'NotAllow' is not one of ['Allow', 'Deny']", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rIamUser", + "logicalId": "EightVcpuInvalidStep", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Effect", - "category": "Resource", - "startLine": 24, - "startColumn": 11, - "endLine": 24, - "endColumn": 17, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.Family", + "category": "Best Practice", + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "Additional properties are not allowed ('Principal' was unexpected)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rIamUser", + "logicalId": "EightVcpuInvalidStep", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Principal", - "category": "Resource", - "startLine": 25, - "startColumn": 11, - "endLine": 25, - "endColumn": 20, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.RequiresCompatibilities", + "category": "Best Practice", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "{\"Effect\":\"Allow\"} is not of type 'string'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rIamUser", + "logicalId": "EightVcpuInvalidStep", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Statement.1.Resource.0", - "category": "Resource", - "startLine": 30, - "startColumn": 19, - "endLine": 30, - "endColumn": 20, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.NetworkMode", + "category": "Best Practice", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "{\"Effect\":\"Allow\",\"Action\":[\"cloudwatch:*\"],\"Resource\":\"*\"} is not of type 'string'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rIamUser", + "logicalId": "EightVcpuInvalidStep", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Statement.1.Resource.1", - "category": "Resource", - "startLine": 31, - "startColumn": 19, - "endLine": 31, - "endColumn": 20, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.Cpu", + "category": "Best Practice", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "[{\"Statement\":{}}] is not of type 'object'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rIamPolicy", + "logicalId": "EightVcpuInvalidStep", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument", - "category": "Resource", - "startLine": 38, + "propertyPath": "Properties.Memory", + "category": "Best Practice", + "startLine": 12, "startColumn": 7, - "endLine": 38, - "endColumn": 21, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "endLine": 12, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "Only one of ['Action', 'NotAction'] is a required property", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rIamPolicyExtraThings", + "logicalId": "EightVcpuInvalidStep", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Action", - "category": "Resource", - "startLine": 54, - "startColumn": 11, - "endLine": 54, - "endColumn": 17, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 13, + "startColumn": 7, + "endLine": 13, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "Only one of ['Action', 'NotAction'] is a required property", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rIamPolicyExtraThings", + "logicalId": "SixteenVcpuInvalidStep", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.NotAction", - "category": "Resource", - "startLine": 56, - "startColumn": 11, - "endLine": 56, - "endColumn": 20, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.Family", + "category": "Best Practice", + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "Only one of ['Resource', 'NotResource'] is a required property", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rIamPolicyExtraThings", + "logicalId": "SixteenVcpuInvalidStep", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Resource", - "category": "Resource", - "startLine": 58, - "startColumn": 11, - "endLine": 58, - "endColumn": 19, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.RequiresCompatibilities", + "category": "Best Practice", + "startLine": 22, + "startColumn": 7, + "endLine": 22, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "Only one of ['Resource', 'NotResource'] is a required property", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rIamPolicyExtraThings", + "logicalId": "SixteenVcpuInvalidStep", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.NotResource", - "category": "Resource", - "startLine": 60, - "startColumn": 11, - "endLine": 60, - "endColumn": 22, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.NetworkMode", + "category": "Best Practice", + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'arn' does not match '^(arn:(aws[A-Za-z\\-]*?|[A-Za-z?*\\-]*[?*][A-Za-z?*\\-]*):[^:*?]+:[^:]*(:(?:\\d{12}|\\*|aws)?:.+|)|\\*)$'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rIamPolicyExtraThings", + "logicalId": "SixteenVcpuInvalidStep", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.NotResource.0", - "category": "Resource", - "startLine": 61, - "startColumn": 13, - "endLine": 61, - "endColumn": 14, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.Cpu", + "category": "Best Practice", + "startLine": 24, + "startColumn": 7, + "endLine": 24, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3530", - "severity": "ERROR", - "message": "'Statement' is a required property", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rIamRole", + "logicalId": "SixteenVcpuInvalidStep", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.AssumeRolePolicyDocument", - "suggestedFix": "Add a Statement array to the AssumeRolePolicyDocument", - "category": "Resource", - "startLine": 10, + "propertyPath": "Properties.Memory", + "category": "Best Practice", + "startLine": 25, "startColumn": 7, - "endLine": 10, - "endColumn": 31, - "ruleDescription": "Validate IAM trust policies", - "phase": "LINT" + "endLine": 25, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2512", - "severity": "WARN", - "message": "IAM policy uses NotAction which grants all actions except those listed - consider using Action instead", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rIamPolicyExtraThings", + "logicalId": "SixteenVcpuInvalidStep", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "category": "Security", - "startLine": 43, - "startColumn": 3, - "endLine": 43, - "endColumn": 24, - "ruleDescription": "IAM policy with NotAction", - "phase": "LINT" + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 26, + "startColumn": 7, + "endLine": 26, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rIamRole", + "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 9, + "startLine": 34, "startColumn": 7, - "endLine": 9, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 34, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -87718,625 +86818,528 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'rIamRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rIamRole", + "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/resources/iam/iam_policy_conditional_policies.yaml": { - "filePath": "bad/resources/iam/iam_policy_conditional_policies.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 2, - "warnings": 2, - "informational": 2, - "debug": 0 + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'not-an-arn' does not match '^(arn:(aws[A-Za-z\\-]*?|[A-Za-z?*\\-]*[?*][A-Za-z?*\\-]*):[^:*?]+:[^:]*(:(?:\\d{12}|\\*|aws)?:.+|)|\\*)$'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "RoleConditionalPolicies", + "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Policies.0.PolicyDocument.Statement.0.Resource", - "category": "Resource", - "startLine": 34, - "startColumn": 19, - "endLine": 34, - "endColumn": 27, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.NetworkMode", + "category": "Best Practice", + "startLine": 36, + "startColumn": 7, + "endLine": 36, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'also-bad' does not match '^(arn:(aws[A-Za-z\\-]*?|[A-Za-z?*\\-]*[?*][A-Za-z?*\\-]*):[^:*?]+:[^:]*(:(?:\\d{12}|\\*|aws)?:.+|)|\\*)$'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "RoleConditionalPolicies", + "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Policies.0.PolicyDocument.Statement.0.Resource", - "category": "Resource", - "startLine": 48, - "startColumn": 19, - "endLine": 48, - "endColumn": 27, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.Cpu", + "category": "Best Practice", + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2512", - "severity": "WARN", - "message": "IAM policy uses NotAction which grants all actions except those listed - consider using Action instead", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RoleNotActionConditional", + "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "category": "Security", - "startLine": 51, - "startColumn": 3, - "endLine": 51, - "endColumn": 27, - "ruleDescription": "IAM policy with NotAction", - "phase": "LINT" + "propertyPath": "Properties.Memory", + "category": "Best Practice", + "startLine": 38, + "startColumn": 7, + "endLine": 38, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2512", - "severity": "WARN", - "message": "IAM policy uses NotAction which grants all actions except those listed - consider using Action instead", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PolicySingleStatement", + "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "category": "Security", - "startLine": 79, - "startColumn": 3, - "endLine": 79, - "endColumn": 24, - "ruleDescription": "IAM policy with NotAction", - "phase": "LINT" + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 39, + "startColumn": 7, + "endLine": 39, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'RoleConditionalPolicies' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RoleConditionalPolicies", + "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 18, - "startColumn": 5, - "endLine": 18, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 47, + "startColumn": 7, + "endLine": 47, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'RoleNotActionConditional' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RoleNotActionConditional", + "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 53, - "startColumn": 5, - "endLine": 53, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/resources/iam/identity_policy_conditional_novalue_e3510.yaml": { - "filePath": "bad/resources/iam/identity_policy_conditional_novalue_e3510.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 1, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'SomeOptionalParameter' does not match '^(arn:(aws[A-Za-z\\-]*?|[A-Za-z?*\\-]*[?*][A-Za-z?*\\-]*):[^:*?]+:[^:]*(:(?:\\d{12}|\\*|aws)?:.+|)|\\*)$'", - "source": "CFN_LINT", - "entity": { - "logicalId": "SomeManagedPolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" - }, - "propertyPath": "Properties.PolicyDocument.Statement.1.Resource.0", - "category": "Resource", - "startLine": 29, - "startColumn": 19, - "endLine": 29, - "endColumn": 20, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "startLine": 48, + "startColumn": 7, + "endLine": 48, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SomeManagedPolicy", + "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Description", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 14, + "startLine": 49, "startColumn": 7, - "endLine": 14, + "endLine": 49, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } - } - ] - }, - "bad/resources/iam/identity_policy_e3510.yaml": { - "filePath": "bad/resources/iam/identity_policy_e3510.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 3, - "errors": 8, - "warnings": 2, - "informational": 9, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3017", - "severity": "FATAL", - "message": "Value is not valid under any of the 3 anyOf schemas for AWS::IAM::Policy (0 branches matched; at least one is required). Required property combinations: ['Groups'] or ['Roles'] or ['Users']. Branch failures: branch 1: 'Users' is a required property; branch 2: 'Groups' is a required property; branch 3: 'Roles' is a required property.", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "PolicyEmptyAction", + "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties", - "category": "Schema", - "startLine": 15, - "startColumn": 5, - "endLine": 15, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Value not valid under anyOf", + "propertyPath": "Properties.Cpu", + "category": "Best Practice", + "startLine": 50, + "startColumn": 7, + "endLine": 50, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "expectedConstraint": "at least one anyOf branch", - "extra": { - "branchCount": 3, - "branchFailures": [ - { - "branch": 1, - "reasons": [ - { - "message": "'Users' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 2, - "reasons": [ - { - "message": "'Groups' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 3, - "reasons": [ - { - "message": "'Roles' is a required property", - "propertyPath": "Properties" - } - ] - } - ], - "compositionKind": "anyOf", - "matchCount": 0, - "matchOutcome": "zeroMatches", - "validPropertyCombinations": [ - [ - "Groups" - ], - [ - "Roles" - ], - [ - "Users" - ] - ] - } + "lifecycle": "create-only" } }, { - "ruleId": "F3017", - "severity": "FATAL", - "message": "Value is not valid under any of the 3 anyOf schemas for AWS::IAM::Policy (0 branches matched; at least one is required). Required property combinations: ['Groups'] or ['Roles'] or ['Users']. Branch failures: branch 1: 'Users' is a required property; branch 2: 'Groups' is a required property; branch 3: 'Roles' is a required property.", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "PolicyWithJoinResource", + "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties", - "category": "Schema", - "startLine": 59, - "startColumn": 5, - "endLine": 59, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Value not valid under anyOf", + "propertyPath": "Properties.Memory", + "category": "Best Practice", + "startLine": 51, + "startColumn": 7, + "endLine": 51, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "expectedConstraint": "at least one anyOf branch", - "extra": { - "branchCount": 3, - "branchFailures": [ - { - "branch": 1, - "reasons": [ - { - "message": "'Users' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 2, - "reasons": [ - { - "message": "'Groups' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 3, - "reasons": [ - { - "message": "'Roles' is a required property", - "propertyPath": "Properties" - } - ] - } - ], - "compositionKind": "anyOf", - "matchCount": 0, - "matchOutcome": "zeroMatches", - "validPropertyCombinations": [ - [ - "Groups" - ], - [ - "Roles" - ], - [ - "Users" - ] - ] - } + "lifecycle": "create-only" } }, { - "ruleId": "F3031", - "severity": "FATAL", - "message": "'arn:aws:sso:::instance/ssoins-12345' does not match pattern 'arn:aws(-[a-z]{1,5}){0,3}:sso:::instance/(sso)?ins-[a-zA-Z0-9-.]{16}'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "PermissionSetBadPolicy", + "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", "entityType": "Resource", - "resourceType": "AWS::SSO::PermissionSet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.InstanceArn", - "category": "Schema", - "startLine": 89, + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 52, "startColumn": 7, - "endLine": 89, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sso/aws-sso-permissionset", - "ruleDescription": "Value does not match pattern", + "endLine": 52, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "arn:aws:sso:::instance/ssoins-12345", - "expectedConstraint": "arn:aws(-[a-z]{1,5}){0,3}:sso:::instance/(sso)?ins-[a-zA-Z0-9-.]{16}" + "lifecycle": "create-only" } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "[] is too short (minimum 1 item)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "PolicyEmptyAction", + "logicalId": "MalformedCpuUnits", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Action", - "category": "Resource", - "startLine": 21, - "startColumn": 13, - "endLine": 21, - "endColumn": 19, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.Family", + "category": "Best Practice", + "startLine": 60, + "startColumn": 7, + "endLine": 60, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'ReadOnly' is a duplicate of Statement.0.Sid", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "PolicyDuplicateSid", + "logicalId": "MalformedCpuUnits", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Statement.1.Sid", - "category": "Resource", - "startLine": 35, - "startColumn": 13, - "endLine": 35, - "endColumn": 16, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.RequiresCompatibilities", + "category": "Best Practice", + "startLine": 61, + "startColumn": 7, + "endLine": 61, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "Additional properties are not allowed ('Id' was unexpected)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "PolicyBadIdAndCondition", + "logicalId": "MalformedCpuUnits", "entityType": "Resource", - "resourceType": "AWS::IAM::RolePolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Id", - "category": "Resource", - "startLine": 47, - "startColumn": 9, - "endLine": 47, - "endColumn": 11, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.NetworkMode", + "category": "Best Practice", + "startLine": 62, + "startColumn": 7, + "endLine": 62, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'InvalidOp' is not a valid IAM condition operator", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "PolicyBadIdAndCondition", + "logicalId": "MalformedCpuUnits", "entityType": "Resource", - "resourceType": "AWS::IAM::RolePolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Condition.InvalidOp", - "category": "Resource", - "startLine": 53, - "startColumn": 15, - "endLine": 53, - "endColumn": 24, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.Cpu", + "category": "Best Practice", + "startLine": 63, + "startColumn": 7, + "endLine": 63, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'DefinitelyNotAllow' is not one of ['Allow', 'Deny']", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "PolicyDynamicActionBadEffect", + "logicalId": "MalformedCpuUnits", "entityType": "Resource", - "resourceType": "AWS::IAM::GroupPolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Effect", - "category": "Resource", - "startLine": 81, - "startColumn": 13, - "endLine": 81, - "endColumn": 19, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.Memory", + "category": "Best Practice", + "startLine": 64, + "startColumn": 7, + "endLine": 64, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "Only one of ['Action', 'NotAction'] is a required property", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "PermissionSetBadPolicy", + "logicalId": "MalformedCpuUnits", "entityType": "Resource", - "resourceType": "AWS::SSO::PermissionSet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.InlinePolicy.Statement.0.Action", - "category": "Resource", - "startLine": 94, - "startColumn": 13, - "endLine": 94, - "endColumn": 19, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 65, + "startColumn": 7, + "endLine": 65, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "Only one of ['Action', 'NotAction'] is a required property", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "PermissionSetBadPolicy", + "logicalId": "NonCanonicalCpuUnits", "entityType": "Resource", - "resourceType": "AWS::SSO::PermissionSet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.InlinePolicy.Statement.0.NotAction", - "category": "Resource", - "startLine": 95, - "startColumn": 13, - "endLine": 95, - "endColumn": 22, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.Family", + "category": "Best Practice", + "startLine": 73, + "startColumn": 7, + "endLine": 73, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'invalid-version' is not one of ['2008-10-17', '2012-10-17']", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "UserInlinePolicy", + "logicalId": "NonCanonicalCpuUnits", "entityType": "Resource", - "resourceType": "AWS::IAM::User" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Policies.0.PolicyDocument.Version", - "category": "Resource", - "startLine": 105, - "startColumn": 13, - "endLine": 105, - "endColumn": 20, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" + "propertyPath": "Properties.RequiresCompatibilities", + "category": "Best Practice", + "startLine": 74, + "startColumn": 7, + "endLine": 74, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2512", - "severity": "WARN", - "message": "IAM policy uses NotAction which grants all actions except those listed - consider using Action instead", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionSetBadPolicy", + "logicalId": "NonCanonicalCpuUnits", "entityType": "Resource", - "resourceType": "AWS::SSO::PermissionSet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "category": "Security", - "startLine": 86, - "startColumn": 3, - "endLine": 86, - "endColumn": 25, - "ruleDescription": "IAM policy with NotAction", - "phase": "LINT" + "propertyPath": "Properties.NetworkMode", + "category": "Best Practice", + "startLine": 75, + "startColumn": 7, + "endLine": 75, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'InstanceArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionSetBadPolicy", + "logicalId": "NonCanonicalCpuUnits", "entityType": "Resource", - "resourceType": "AWS::SSO::PermissionSet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.InstanceArn", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 89, + "startLine": 76, "startColumn": 7, - "endLine": 89, - "endColumn": 18, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" + "endLine": 76, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I1022", + "ruleId": "I9001", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "PolicyWithJoinResource", + "logicalId": "NonCanonicalCpuUnits", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Resource.Fn::Join", - "category": "Intrinsic Function", - "startLine": 67, - "startColumn": 15, - "endLine": 67, - "endColumn": 23, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "propertyPath": "Properties.Memory", + "category": "Best Practice", + "startLine": 77, + "startColumn": 7, + "endLine": 77, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PolicyBadIdAndCondition", + "logicalId": "NonCanonicalCpuUnits", "entityType": "Resource", - "resourceType": "AWS::IAM::RolePolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyName", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 44, + "startLine": 78, "startColumn": 7, - "endLine": 44, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 78, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -88346,20 +87349,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PolicyBadIdAndCondition", + "logicalId": "OverflowingMemoryUnits", "entityType": "Resource", - "resourceType": "AWS::IAM::RolePolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 45, + "startLine": 86, "startColumn": 7, - "endLine": 45, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 86, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -88369,20 +87372,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PolicyDynamicActionBadEffect", + "logicalId": "OverflowingMemoryUnits", "entityType": "Resource", - "resourceType": "AWS::IAM::GroupPolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.GroupName", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 76, + "startLine": 87, "startColumn": 7, - "endLine": 76, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 87, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -88392,20 +87395,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PolicyDynamicActionBadEffect", + "logicalId": "OverflowingMemoryUnits", "entityType": "Resource", - "resourceType": "AWS::IAM::GroupPolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyName", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 77, + "startLine": 88, "startColumn": 7, - "endLine": 77, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 88, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -88415,20 +87418,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionSetBadPolicy", + "logicalId": "OverflowingMemoryUnits", "entityType": "Resource", - "resourceType": "AWS::SSO::PermissionSet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.InstanceArn", + "propertyPath": "Properties.Cpu", "category": "Best Practice", "startLine": 89, "startColumn": 7, "endLine": 89, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sso/aws-sso-permissionset", + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -88438,20 +87441,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionSetBadPolicy", + "logicalId": "OverflowingMemoryUnits", "entityType": "Resource", - "resourceType": "AWS::SSO::PermissionSet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.Memory", "category": "Best Practice", "startLine": 90, "startColumn": 7, "endLine": 90, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sso/aws-sso-permissionset", + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -88459,181 +87462,138 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'PermissionSetBadPolicy' of type 'AWS::SSO::PermissionSet' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionSetBadPolicy", + "logicalId": "OverflowingMemoryUnits", "entityType": "Resource", - "resourceType": "AWS::SSO::PermissionSet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 88, - "startColumn": 5, - "endLine": 88, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 91, + "startColumn": 7, + "endLine": 91, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'UserInlinePolicy' of type 'AWS::IAM::User' supports Tags but none are configured", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UserInlinePolicy", + "logicalId": "CpuInvalidThenValid", "entityType": "Resource", - "resourceType": "AWS::IAM::User" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 101, - "startColumn": 5, - "endLine": 101, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/resources/iam/identity_policy_wildcard_service.yaml": { - "filePath": "bad/resources/iam/identity_policy_wildcard_service.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 + "startLine": 99, + "startColumn": 7, + "endLine": 99, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'arn:aws:*:::example-bucket/*' does not match '^(arn:(aws[A-Za-z\\-]*?|[A-Za-z?*\\-]*[?*][A-Za-z?*\\-]*):[^:*?]+:[^:]*(:(?:\\d{12}|\\*|aws)?:.+|)|\\*)$'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WildcardServicePolicy", + "logicalId": "CpuInvalidThenValid", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Resource", - "category": "Resource", - "startLine": 13, - "startColumn": 13, - "endLine": 13, - "endColumn": 21, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" - } - ] - }, - "bad/resources/iam/managed_policy_description.yaml": { - "filePath": "bad/resources/iam/managed_policy_description.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 + "propertyPath": "Properties.RequiresCompatibilities", + "category": "Best Practice", + "startLine": 100, + "startColumn": 7, + "endLine": 100, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SomeManagedPolicy", + "logicalId": "CpuInvalidThenValid", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Description", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 7, + "startLine": 101, "startColumn": 7, - "endLine": 7, + "endLine": 101, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } - } - ] - }, - "bad/resources/iam/ref_with_path.yaml": { - "filePath": "bad/resources/iam/ref_with_path.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 11, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3050", - "severity": "ERROR", - "message": "Ref to IAM role 'CodeBuildRole' with Path '/test/' - use GetAtt CodeBuildRole.Arn instead", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CodeBuildProject", + "logicalId": "CpuInvalidThenValid", "entityType": "Resource", - "resourceType": "AWS::CodeBuild::Project" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ServiceRole", - "suggestedFix": "Switch from Ref to !GetAtt .Arn when Path is not '/'", - "category": "Resource", - "startLine": 7, + "propertyPath": "Properties.Cpu", + "category": "Best Practice", + "startLine": 102, "startColumn": 7, - "endLine": 7, - "endColumn": 18, - "ruleDescription": "Check if REFing to a IAM resource with path set", - "phase": "LINT" + "endLine": 102, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseFirst'" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CodeBuildRole", + "logicalId": "CpuInvalidThenValid", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 43, + "startLine": 103, "startColumn": 7, - "endLine": 43, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 103, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -88643,19 +87603,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CodeBuildVPC", + "logicalId": "CpuInvalidThenValid", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 64, + "startLine": 104, "startColumn": 7, - "endLine": 64, - "endColumn": 16, + "endLine": 104, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -88665,42 +87626,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CodeBuildSubnet", + "logicalId": "CpuValidThenInvalid", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 73, + "startLine": 112, "startColumn": 7, - "endLine": 73, - "endColumn": 12, + "endLine": 112, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'CodeBuildVPC'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CodeBuildSubnet", + "logicalId": "CpuValidThenInvalid", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 75, + "startLine": 113, "startColumn": 7, - "endLine": 75, - "endColumn": 16, + "endLine": 113, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -88710,19 +87672,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CodeBuildSecurityGroup", + "logicalId": "CpuValidThenInvalid", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.GroupName", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 79, + "startLine": 114, "startColumn": 7, - "endLine": 79, - "endColumn": 16, + "endLine": 114, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -88732,19 +87695,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CodeBuildSecurityGroup", + "logicalId": "CpuValidThenInvalid", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 80, + "startLine": 115, "startColumn": 7, - "endLine": 80, - "endColumn": 23, + "endLine": 115, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseFirst'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CpuValidThenInvalid", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Memory", + "category": "Best Practice", + "startLine": 116, + "startColumn": 7, + "endLine": 116, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -88754,42 +87742,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CodeBuildSecurityGroup", + "logicalId": "CpuValidThenInvalid", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 81, + "startLine": 117, "startColumn": 7, - "endLine": 81, - "endColumn": 12, + "endLine": 117, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'CodeBuildVPC'" + "lifecycle": "create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CodeBuildProject' of type 'AWS::CodeBuild::Project' supports Tags but none are configured", + "message": "Resource 'EightVcpuInvalidStep' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CodeBuildProject", + "logicalId": "EightVcpuInvalidStep", "entityType": "Resource", - "resourceType": "AWS::CodeBuild::Project" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, + "startLine": 7, "startColumn": 5, - "endLine": 6, + "endLine": 7, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -88797,19 +87785,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CodeBuildRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'SixteenVcpuInvalidStep' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CodeBuildRole", + "logicalId": "SixteenVcpuInvalidStep", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 35, + "startLine": 20, "startColumn": 5, - "endLine": 35, + "endLine": 20, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -88817,12 +87805,72 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CodeBuildSubnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'ThirtyTwoVcpuUnsupportedSixtyFourGb' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CodeBuildSubnet", + "logicalId": "ThirtyTwoVcpuUnsupportedSixtyFourGb", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 33, + "startColumn": 5, + "endLine": 33, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ThirtyTwoVcpuUnsupportedTwoFortyGb' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ThirtyTwoVcpuUnsupportedTwoFortyGb", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 46, + "startColumn": 5, + "endLine": 46, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MalformedCpuUnits' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "MalformedCpuUnits", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 59, + "startColumn": 5, + "endLine": 59, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'NonCanonicalCpuUnits' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "NonCanonicalCpuUnits", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -88837,58 +87885,39 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CodeBuildSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'OverflowingMemoryUnits' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CodeBuildSecurityGroup", + "logicalId": "OverflowingMemoryUnits", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 78, + "startLine": 85, "startColumn": 5, - "endLine": 78, + "endLine": 85, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/resources/iam/resource_policy.yaml": { - "filePath": "bad/resources/iam/resource_policy.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ecr1' of type 'AWS::ECR::Repository' supports Tags but none are configured", + "message": "Resource 'CpuInvalidThenValid' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ecr1", + "logicalId": "CpuInvalidThenValid", "entityType": "Resource", - "resourceType": "AWS::ECR::Repository" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, + "startLine": 98, "startColumn": 5, - "endLine": 6, + "endLine": 98, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -88896,19 +87925,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ecr2' of type 'AWS::ECR::Repository' supports Tags but none are configured", + "message": "Resource 'CpuValidThenInvalid' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ecr2", + "logicalId": "CpuValidThenInvalid", "entityType": "Resource", - "resourceType": "AWS::ECR::Repository" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 19, + "startLine": 111, "startColumn": 5, - "endLine": 19, + "endLine": 111, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" diff --git a/src/resources/expected/validation_reports3.json b/src/resources/expected/validation_reports3.json index 80567994..d65cba99 100644 --- a/src/resources/expected/validation_reports3.json +++ b/src/resources/expected/validation_reports3.json @@ -1,14 +1,14 @@ { - "bad/resources/lambda/function_property_value_limits.yaml": { - "filePath": "bad/resources/lambda/function_property_value_limits.yaml", + "bad/resources/elasticache/cache_cluster_failover.yaml": { + "filePath": "bad/resources/elasticache/cache_cluster_failover.yaml", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 7, "counts": { - "fatal": 6, - "errors": 5, + "fatal": 0, + "errors": 0, "warnings": 0, - "informational": 6, + "informational": 30, "debug": 0 }, "suppressed": 0, @@ -17,262 +17,245 @@ }, "diagnostics": [ { - "ruleId": "F1020", - "severity": "FATAL", - "message": "Fn::GetAtt references non-existent resource 'myLambdaExecutionRole'", - "source": "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": "myLambdaFunction", + "logicalId": "BasicReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "suggestedFix": "Check that the GetAtt target resource exists in the template", - "category": "Intrinsic Function", - "startLine": 6, + "category": "Best Practice", + "startLine": 34, "startColumn": 3, - "endLine": 6, - "endColumn": 19, - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" + "endLine": 34, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "F1020", - "severity": "FATAL", - "message": "Fn::GetAtt references non-existent resource 'myLambdaExecutionRole'", - "source": "SCHEMA", + "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": "myLambdaFunction2", + "logicalId": "BasicReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "suggestedFix": "Check that the GetAtt target resource exists in the template", - "category": "Intrinsic Function", - "startLine": 16, + "category": "Best Practice", + "startLine": 34, "startColumn": 3, - "endLine": 16, - "endColumn": 20, - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" + "endLine": 34, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "F1020", - "severity": "FATAL", - "message": "Fn::GetAtt references non-existent resource 'myLambdaExecutionRole'", - "source": "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": "myLambdaFunction3", + "logicalId": "SecondReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "suggestedFix": "Check that the GetAtt target resource exists in the template", - "category": "Intrinsic Function", - "startLine": 26, + "category": "Best Practice", + "startLine": 53, "startColumn": 3, - "endLine": 26, - "endColumn": 20, - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" + "endLine": 53, + "endColumn": 25, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "F3031", - "severity": "FATAL", - "message": "'DXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheLambdaName' does not match pattern '^([a-zA-Z0-9_-]{1,64}|arn:[a-zA-Z0-9-]+:lambda:[a-zA-Z0-9-]+:\\d{12}:function:[a-zA-Z0-9_-]{1,64})$'", - "source": "SCHEMA", + "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": "myLambdaFunction", + "logicalId": "SecondReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.FunctionName", - "category": "Schema", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 19, - "ruleDescription": "Value does not match pattern", - "phase": "SCHEMA", - "context": { - "actualValue": "DXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheLambdaName", - "expectedConstraint": "^([a-zA-Z0-9_-]{1,64}|arn:[a-zA-Z0-9-]+:lambda:[a-zA-Z0-9-]+:\\d{12}:function:[a-zA-Z0-9_-]{1,64})$" - } + "category": "Best Practice", + "startLine": 53, + "startColumn": 3, + "endLine": 53, + "endColumn": 25, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "F3033", - "severity": "FATAL", - "message": "length 148 exceeds maximum 128", - "source": "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": "myLambdaFunction2", + "logicalId": "ThirdReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Handler", - "category": "Schema", - "startLine": 20, - "startColumn": 7, - "endLine": 20, - "endColumn": 14, - "ruleDescription": "String length out of bounds", - "phase": "SCHEMA", - "context": { - "actualValue": "DXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheDXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbhe.handler", - "extra": { - "actual_length": 148, - "max_length": 128, - "min_length": 0 - } - } + "category": "Best Practice", + "startLine": 72, + "startColumn": 3, + "endLine": 72, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "F3033", - "severity": "FATAL", - "message": "length 280 exceeds maximum 256", - "source": "SCHEMA", + "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": "myLambdaFunction3", + "logicalId": "ThirdReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Description", - "category": "Schema", - "startLine": 30, - "startColumn": 7, - "endLine": 30, - "endColumn": 18, - "ruleDescription": "String length out of bounds", - "phase": "SCHEMA", - "context": { - "actualValue": "DXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheDXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheDXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheDXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbhe", - "extra": { - "actual_length": 280, - "max_length": 256, - "min_length": 0 - } - } + "category": "Best Practice", + "startLine": 72, + "startColumn": 3, + "endLine": 72, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs10.x' was deprecated on '2021-07-30'. Creation was disabled on '2021-07-30', and updates were disabled on '2022-02-14'. Please consider updating to 'nodejs24.x'", + "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": "myLambdaFunction", + "logicalId": "FourtReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs10.x", - "lifecycle": "end-of-life" - } + "category": "Best Practice", + "startLine": 89, + "startColumn": 3, + "endLine": 89, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs10.x' was deprecated on '2021-07-30'. Creation was disabled on '2021-07-30', and updates were disabled on '2022-02-14'. Please consider updating to 'nodejs24.x'", + "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": "myLambdaFunction2", + "logicalId": "FourtReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 24, - "startColumn": 7, - "endLine": 24, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs10.x", - "lifecycle": "end-of-life" - } + "category": "Best Practice", + "startLine": 89, + "startColumn": 3, + "endLine": 89, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs10.x' was deprecated on '2021-07-30'. Creation was disabled on '2021-07-30', and updates were disabled on '2022-02-14'. Please consider updating to 'nodejs24.x'", + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", "source": "CFN_LINT", "entity": { - "logicalId": "myLambdaFunction3", + "logicalId": "BasicReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 35, + "propertyPath": "Properties.CacheNodeType", + "suggestedFix": "Upgrade to a current generation instance type", + "category": "Best Practice", + "startLine": 40, "startColumn": 7, - "endLine": 35, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs10.x", - "lifecycle": "end-of-life" - } + "endLine": 40, + "endColumn": 20, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { - "ruleId": "E3019", - "severity": "ERROR", - "message": "Primary identifiers {'FunctionName': 'LambdaName'} should have unique values across the resources {'myLambdaFunction2', 'myLambdaFunction3'}", + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", "source": "CFN_LINT", "entity": { - "logicalId": "myLambdaFunction2", + "logicalId": "SecondReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.FunctionName", - "category": "Resource", - "startLine": 19, + "propertyPath": "Properties.CacheNodeType", + "suggestedFix": "Upgrade to a current generation instance type", + "category": "Best Practice", + "startLine": 59, "startColumn": 7, - "endLine": 19, - "endColumn": 19, - "ruleDescription": "Validate that all resources have unique primary identifiers", + "endLine": 59, + "endColumn": 20, + "ruleDescription": "Checks for legacy instance type generations", "phase": "LINT" }, { - "ruleId": "E3019", - "severity": "ERROR", - "message": "Primary identifiers {'FunctionName': 'LambdaName'} should have unique values across the resources {'myLambdaFunction2', 'myLambdaFunction3'}", + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", "source": "CFN_LINT", "entity": { - "logicalId": "myLambdaFunction3", + "logicalId": "ThirdReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.FunctionName", - "category": "Resource", - "startLine": 29, + "propertyPath": "Properties.CacheNodeType", + "suggestedFix": "Upgrade to a current generation instance type", + "category": "Best Practice", + "startLine": 78, "startColumn": 7, - "endLine": 29, - "endColumn": 19, - "ruleDescription": "Validate that all resources have unique primary identifiers", + "endLine": 78, + "endColumn": 20, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" + }, + { + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", + "source": "CFN_LINT", + "entity": { + "logicalId": "FourtReplicationGroup", + "entityType": "Resource", + "resourceType": "AWS::ElastiCache::ReplicationGroup" + }, + "propertyPath": "Properties.CacheNodeType", + "suggestedFix": "Upgrade to a current generation instance type", + "category": "Best Practice", + "startLine": 95, + "startColumn": 7, + "endLine": 95, + "endColumn": 20, + "ruleDescription": "Checks for legacy instance type generations", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'CacheParameterGroupFamily' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myLambdaFunction", + "logicalId": "MyParameterGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElastiCache::ParameterGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.CacheParameterGroupFamily", "category": "Best Practice", - "startLine": 9, + "startLine": 14, "startColumn": 7, - "endLine": 9, - "endColumn": 19, + "endLine": 14, + "endColumn": 32, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -282,19 +265,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'CacheParameterGroupFamily' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myLambdaFunction2", + "logicalId": "MyClusterParameterGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElastiCache::ParameterGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.CacheParameterGroupFamily", "category": "Best Practice", - "startLine": 19, + "startLine": 22, "startColumn": 7, - "endLine": 19, - "endColumn": 19, + "endLine": 22, + "endColumn": 32, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -304,19 +287,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'CacheParameterGroupFamily' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myLambdaFunction3", + "logicalId": "MyNonClusterParameterGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElastiCache::ParameterGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.CacheParameterGroupFamily", "category": "Best Practice", - "startLine": 29, + "startLine": 30, "startColumn": 7, - "endLine": 29, - "endColumn": 19, + "endLine": 30, + "endColumn": 32, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -324,257 +307,183 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myLambdaFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'CacheSubnetGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myLambdaFunction", + "logicalId": "BasicReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CacheSubnetGroupName", "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 41, + "startColumn": 7, + "endLine": 41, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myLambdaFunction2' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myLambdaFunction2", + "logicalId": "BasicReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 18, - "startColumn": 5, - "endLine": 18, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 46, + "startColumn": 7, + "endLine": 46, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myLambdaFunction3' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'CacheSubnetGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myLambdaFunction3", + "logicalId": "SecondReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CacheSubnetGroupName", "category": "Best Practice", - "startLine": 28, - "startColumn": 5, - "endLine": 28, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/resources/lambda/required_properties.yaml": { - "filePath": "bad/resources/lambda/required_properties.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 7, - "informational": 4, - "debug": 0 + "startLine": 60, + "startColumn": 7, + "endLine": 60, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'Runtime' is a required property (from extension)", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Function3", + "logicalId": "SecondReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties", - "suggestedFix": "Add 'Runtime'", - "category": "Schema", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.Port", + "category": "Best Practice", + "startLine": 64, + "startColumn": 7, + "endLine": 64, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CacheSubnetGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Function2", + "logicalId": "ThirdReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 21, + "propertyPath": "Properties.CacheSubnetGroupName", + "category": "Best Practice", + "startLine": 79, "startColumn": 7, - "endLine": 21, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 79, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.9", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2533", - "severity": "WARN", - "message": "Properties ['Handler', 'Runtime'] missing for zip file deployment at Resources/Function1/Properties", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Function1", + "logicalId": "ThirdReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Code", - "suggestedFix": "Add the missing properties for zip file deployment", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 9, + "startLine": 82, "startColumn": 7, - "endLine": 9, + "endLine": 82, "endColumn": 11, - "ruleDescription": "Check required properties for Lambda if the deployment package is a .zip file", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2533", - "severity": "WARN", - "message": "Properties ['Handler'] missing for zip file deployment at Resources/Function2/Properties", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CacheSubnetGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Function2", + "logicalId": "FourtReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Code", - "suggestedFix": "Add the missing properties for zip file deployment", + "propertyPath": "Properties.CacheSubnetGroupName", "category": "Best Practice", - "startLine": 18, + "startLine": 96, "startColumn": 7, - "endLine": 18, - "endColumn": 11, - "ruleDescription": "Check required properties for Lambda if the deployment package is a .zip file", - "phase": "LINT" - }, - { - "ruleId": "W2533", - "severity": "WARN", - "message": "Properties ['Runtime'] missing for zip file deployment at Resources/Function3/Properties", - "source": "CFN_LINT", - "entity": { - "logicalId": "Function3", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Code", - "suggestedFix": "Add the missing properties for zip file deployment", - "category": "Best Practice", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 11, - "ruleDescription": "Check required properties for Lambda if the deployment package is a .zip file", - "phase": "LINT" - }, - { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", - "entity": { - "logicalId": "Function1", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "category": "Security", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 12, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" - }, - { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", - "entity": { - "logicalId": "Function2", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "category": "Security", - "startLine": 13, - "startColumn": 3, - "endLine": 13, - "endColumn": 12, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" - }, - { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", - "entity": { - "logicalId": "Function3", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "category": "Security", - "startLine": 23, - "startColumn": 3, - "endLine": 23, - "endColumn": 12, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "endLine": 96, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PackageType' is create-only; updating it will cause resource replacement", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Function2", + "logicalId": "FourtReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.PackageType", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 22, + "startLine": 100, "startColumn": 7, - "endLine": 22, - "endColumn": 18, + "endLine": 100, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -584,19 +493,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Function1' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'MyParameterGroup' of type 'AWS::ElastiCache::ParameterGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Function1", + "logicalId": "MyParameterGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElastiCache::ParameterGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, + "startLine": 12, "startColumn": 5, - "endLine": 6, + "endLine": 12, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -604,19 +513,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Function2' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'MyClusterParameterGroup' of type 'AWS::ElastiCache::ParameterGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Function2", + "logicalId": "MyClusterParameterGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElastiCache::ParameterGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 15, + "startLine": 20, "startColumn": 5, - "endLine": 15, + "endLine": 20, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -624,96 +533,79 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Function3' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'MyNonClusterParameterGroup' of type 'AWS::ElastiCache::ParameterGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Function3", + "logicalId": "MyNonClusterParameterGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElastiCache::ParameterGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 25, + "startLine": 28, "startColumn": 5, - "endLine": 25, + "endLine": 28, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/resources/name.yaml": { - "filePath": "bad/resources/name.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 2, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F0006", - "severity": "FATAL", - "message": "Logical ID 'my.Instance' must be alphanumeric (A-Za-z0-9)", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BasicReplicationGroup' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "my.Instance", + "logicalId": "BasicReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "category": "Structure", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Logical IDs must be alphanumeric", - "phase": "SCHEMA" + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 36, + "startColumn": 5, + "endLine": 36, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "F0006", - "severity": "FATAL", - "message": "Logical ID 'my_Instance' must be alphanumeric (A-Za-z0-9)", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SecondReplicationGroup' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "my_Instance", + "logicalId": "SecondReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "category": "Structure", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Logical IDs must be alphanumeric", - "phase": "SCHEMA" + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 55, + "startColumn": 5, + "endLine": 55, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'my.Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'ThirdReplicationGroup' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "my.Instance", + "logicalId": "ThirdReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 74, "startColumn": 5, - "endLine": 5, + "endLine": 74, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -721,35 +613,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'my_Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'FourtReplicationGroup' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "my_Instance", + "logicalId": "FourtReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, + "startLine": 91, "startColumn": 5, - "endLine": 9, + "endLine": 91, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/resources/primary_identifiers.yaml": { - "filePath": "bad/resources/primary_identifiers.yaml", + "bad/resources/iam/iam_policy.yaml": { + "filePath": "bad/resources/iam/iam_policy.yaml", "status": "OK", "metadata": { - "resourcesScanned": 13, + "resourcesScanned": 4, "counts": { - "fatal": 0, - "errors": 11, - "warnings": 0, - "informational": 25, + "fatal": 4, + "errors": 17, + "warnings": 1, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -758,419 +650,492 @@ }, "diagnostics": [ { - "ruleId": "E3001", - "severity": "ERROR", - "message": "Resource 'BadType' property 'Type' must be a string", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'PolicyName' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "BadType", + "logicalId": "rIamPolicy", "entityType": "Resource", - "resourceType": "" + "resourceType": "AWS::IAM::Policy" }, - "category": "Resource", - "startLine": 156, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'PolicyName'", + "category": "Schema", + "startLine": 37, "startColumn": 5, - "endLine": 156, - "endColumn": 9, - "ruleDescription": "Basic CloudFormation Resource Check", - "phase": "PARSE" + "endLine": 37, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "E3019", - "severity": "ERROR", - "message": "Primary identifiers {'RoleName': 'root'} should have unique values across the resources {'RootRole', 'RootRole2'}", - "source": "CFN_LINT", + "ruleId": "F3012", + "severity": "FATAL", + "message": "[{'__conditional': 'cCondition', '__if_true': {'Statement': {}}, '__if_false': {'Statement': []}}] is not of type 'object'", + "source": "SCHEMA", "entity": { - "logicalId": "RootRole", + "logicalId": "rIamPolicy", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.RoleName", - "category": "Resource", - "startLine": 18, + "propertyPath": "Properties.PolicyDocument", + "category": "Schema", + "startLine": 38, "startColumn": 7, - "endLine": 18, - "endColumn": 15, - "ruleDescription": "Validate that all resources have unique primary identifiers", - "phase": "LINT" + "endLine": 38, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Property type mismatch", + "phase": "SCHEMA", + "context": { + "actualValue": [ + { + "Statement": {} + } + ], + "expectedConstraint": "object" + } }, { - "ruleId": "E3019", - "severity": "ERROR", - "message": "Primary identifiers {'RoleName': 'root'} should have unique values across the resources {'RootRole', 'RootRole2'}", - "source": "CFN_LINT", - "entity": { - "logicalId": "RootRole2", + "ruleId": "F3017", + "severity": "FATAL", + "message": "Value is not valid under any of the 3 anyOf schemas for AWS::IAM::Policy (0 branches matched; at least one is required). Required property combinations: ['Groups'] or ['Roles'] or ['Users']. Branch failures: branch 1: 'Users' is a required property; branch 2: 'Groups' is a required property; branch 3: 'Roles' is a required property.", + "source": "SCHEMA", + "entity": { + "logicalId": "rIamPolicy", + "entityType": "Resource", + "resourceType": "AWS::IAM::Policy" + }, + "propertyPath": "Properties", + "category": "Schema", + "startLine": 37, + "startColumn": 5, + "endLine": 37, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Value not valid under anyOf", + "phase": "SCHEMA", + "context": { + "expectedConstraint": "at least one anyOf branch", + "extra": { + "branchCount": 3, + "branchFailures": [ + { + "branch": 1, + "reasons": [ + { + "message": "'Users' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 2, + "reasons": [ + { + "message": "'Groups' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 3, + "reasons": [ + { + "message": "'Roles' is a required property", + "propertyPath": "Properties" + } + ] + } + ], + "compositionKind": "anyOf", + "matchCount": 0, + "matchOutcome": "zeroMatches", + "validPropertyCombinations": [ + [ + "Groups" + ], + [ + "Roles" + ], + [ + "Users" + ] + ] + } + } + }, + { + "ruleId": "F3033", + "severity": "FATAL", + "message": "length 91 exceeds maximum 64", + "source": "SCHEMA", + "entity": { + "logicalId": "rIamRole", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.RoleName", - "category": "Resource", - "startLine": 40, + "category": "Schema", + "startLine": 9, "startColumn": 7, - "endLine": 40, + "endLine": 9, "endColumn": 15, - "ruleDescription": "Validate that all resources have unique primary identifiers", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "String length out of bounds", + "phase": "SCHEMA", + "context": { + "actualValue": "jeAoXmadgEUYzfalKtuYjeAoXmadgEUYzfalKtuYjeAoXmadgEUYzfalKtuYjeAoXmadgEUYzfalKtuYBadRoleName", + "extra": { + "actual_length": 91, + "max_length": 64, + "min_length": 1 + } + } }, { - "ruleId": "E3019", + "ruleId": "E1028", "severity": "ERROR", - "message": "Primary identifiers {'RoleName': 'useast1'} should have unique values across the resources {'RootRole3', 'RootRole4', 'RootRole5', 'RootRole6'}", + "message": "Fn::If condition 'cCondition' does not exist in Conditions section", + "source": "SCHEMA", + "entity": { + "logicalId": "rIamPolicy", + "entityType": "Resource", + "resourceType": "AWS::IAM::Policy" + }, + "propertyPath": "Properties.PolicyDocument.0.Fn::If.0", + "category": "Intrinsic Function", + "startLine": 40, + "startColumn": 11, + "endLine": 40, + "endColumn": 12, + "ruleDescription": "Fn::If condition must exist in Conditions section", + "phase": "PARSE" + }, + { + "ruleId": "E3510", + "severity": "ERROR", + "message": "'blah' is not one of ['2008-10-17', '2012-10-17']", "source": "CFN_LINT", "entity": { - "logicalId": "RootRole3", + "logicalId": "rIamRole", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.Policies.0.PolicyDocument.Version", "category": "Resource", - "startLine": 63, - "startColumn": 7, - "endLine": 63, - "endColumn": 15, - "ruleDescription": "Validate that all resources have unique primary identifiers", + "startLine": 14, + "startColumn": 11, + "endLine": 14, + "endColumn": 18, + "ruleDescription": "Validate identity based IAM policies", "phase": "LINT" }, { - "ruleId": "E3019", + "ruleId": "E3510", "severity": "ERROR", - "message": "Primary identifiers {'RoleName': 'useast1'} should have unique values across the resources {'RootRole3', 'RootRole4', 'RootRole5', 'RootRole6'}", + "message": "Additional properties are not allowed ('BadProperty' was unexpected)", "source": "CFN_LINT", "entity": { - "logicalId": "RootRole4", + "logicalId": "rIamRole", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.Policies.0.PolicyDocument.BadProperty", "category": "Resource", - "startLine": 86, - "startColumn": 7, - "endLine": 86, - "endColumn": 15, - "ruleDescription": "Validate that all resources have unique primary identifiers", + "startLine": 15, + "startColumn": 11, + "endLine": 15, + "endColumn": 22, + "ruleDescription": "Validate identity based IAM policies", "phase": "LINT" }, { - "ruleId": "E3019", + "ruleId": "E3510", "severity": "ERROR", - "message": "Primary identifiers {'RoleName': 'useast1'} should have unique values across the resources {'RootRole3', 'RootRole4', 'RootRole5', 'RootRole6'}", + "message": "'Test' is not of type 'object', 'array'", "source": "CFN_LINT", "entity": { - "logicalId": "RootRole5", + "logicalId": "rIamRole", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.Policies.0.PolicyDocument.Statement", "category": "Resource", - "startLine": 109, - "startColumn": 7, - "endLine": 109, - "endColumn": 15, - "ruleDescription": "Validate that all resources have unique primary identifiers", + "startLine": 16, + "startColumn": 11, + "endLine": 16, + "endColumn": 20, + "ruleDescription": "Validate identity based IAM policies", "phase": "LINT" }, { - "ruleId": "E3019", + "ruleId": "E3510", "severity": "ERROR", - "message": "Primary identifiers {'RoleName': 'useast1'} should have unique values across the resources {'RootRole3', 'RootRole4', 'RootRole5', 'RootRole6'}", + "message": "'blah' is not one of ['2008-10-17', '2012-10-17']", "source": "CFN_LINT", "entity": { - "logicalId": "RootRole6", + "logicalId": "rIamUser", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.PolicyDocument.Version", "category": "Resource", - "startLine": 131, - "startColumn": 7, - "endLine": 131, - "endColumn": 15, - "ruleDescription": "Validate that all resources have unique primary identifiers", + "startLine": 21, + "startColumn": 9, + "endLine": 21, + "endColumn": 16, + "ruleDescription": "Validate identity based IAM policies", "phase": "LINT" }, { - "ruleId": "E3019", + "ruleId": "E3510", "severity": "ERROR", - "message": "Primary identifiers {'BucketName': 'us-east-1'} should have unique values across the resources {'Bucket1', 'Bucket2'}", + "message": "Only one of ['Action', 'NotAction'] is a required property", "source": "CFN_LINT", "entity": { - "logicalId": "Bucket1", + "logicalId": "rIamUser", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.PolicyDocument.Statement.0", "category": "Resource", - "startLine": 142, - "startColumn": 5, - "endLine": 142, - "endColumn": 15, - "ruleDescription": "Validate that all resources have unique primary identifiers", + "startLine": 23, + "startColumn": 19, + "endLine": 23, + "endColumn": 20, + "ruleDescription": "Validate identity based IAM policies", "phase": "LINT" }, { - "ruleId": "E3019", + "ruleId": "E3510", "severity": "ERROR", - "message": "Primary identifiers {'BucketName': 'us-east-1'} should have unique values across the resources {'Bucket1', 'Bucket2'}", + "message": "'NotAllow' is not one of ['Allow', 'Deny']", "source": "CFN_LINT", "entity": { - "logicalId": "Bucket2", + "logicalId": "rIamUser", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.PolicyDocument.Statement.0.Effect", "category": "Resource", - "startLine": 150, - "startColumn": 7, - "endLine": 150, + "startLine": 24, + "startColumn": 11, + "endLine": 24, "endColumn": 17, - "ruleDescription": "Validate that all resources have unique primary identifiers", + "ruleDescription": "Validate identity based IAM policies", "phase": "LINT" }, { - "ruleId": "E3019", + "ruleId": "E3510", "severity": "ERROR", - "message": "Primary identifiers {'Name': 'myProjectName'} should have unique values across the resources {'Project1', 'Project2'}", + "message": "Additional properties are not allowed ('Principal' was unexpected)", "source": "CFN_LINT", "entity": { - "logicalId": "Project1", + "logicalId": "rIamUser", "entityType": "Resource", - "resourceType": "AWS::CodeBuild::Project" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.PolicyDocument.Statement.0.Principal", "category": "Resource", - "startLine": 168, - "startColumn": 7, - "endLine": 168, - "endColumn": 11, - "ruleDescription": "Validate that all resources have unique primary identifiers", + "startLine": 25, + "startColumn": 11, + "endLine": 25, + "endColumn": 20, + "ruleDescription": "Validate identity based IAM policies", "phase": "LINT" }, { - "ruleId": "E3019", + "ruleId": "E3510", "severity": "ERROR", - "message": "Primary identifiers {'Name': 'myProjectName'} should have unique values across the resources {'Project1', 'Project2'}", + "message": "{\"Effect\":\"Allow\"} is not of type 'string'", "source": "CFN_LINT", "entity": { - "logicalId": "Project2", + "logicalId": "rIamUser", "entityType": "Resource", - "resourceType": "AWS::CodeBuild::Project" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.PolicyDocument.Statement.1.Resource.0", "category": "Resource", - "startLine": 188, - "startColumn": 7, - "endLine": 188, - "endColumn": 11, - "ruleDescription": "Validate that all resources have unique primary identifiers", + "startLine": 30, + "startColumn": 19, + "endLine": 30, + "endColumn": 20, + "ruleDescription": "Validate identity based IAM policies", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3510", + "severity": "ERROR", + "message": "{\"Effect\":\"Allow\",\"Action\":[\"cloudwatch:*\"],\"Resource\":\"*\"} is not of type 'string'", + "source": "CFN_LINT", "entity": { - "logicalId": "RootRole", + "logicalId": "rIamUser", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.Path", - "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.PolicyDocument.Statement.1.Resource.1", + "category": "Resource", + "startLine": 31, + "startColumn": 19, + "endLine": 31, + "endColumn": 20, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "RootRole", + "ruleId": "E3510", + "severity": "ERROR", + "message": "[{\"Statement\":{}}] is not of type 'object'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rIamPolicy", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.RoleName", - "category": "Best Practice", - "startLine": 18, + "propertyPath": "Properties.PolicyDocument", + "category": "Resource", + "startLine": 38, "startColumn": 7, - "endLine": 18, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 38, + "endColumn": 21, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3510", + "severity": "ERROR", + "message": "Only one of ['Action', 'NotAction'] is a required property", + "source": "CFN_LINT", "entity": { - "logicalId": "RootRole2", + "logicalId": "rIamPolicyExtraThings", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.Path", - "category": "Best Practice", - "startLine": 39, - "startColumn": 7, - "endLine": 39, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.PolicyDocument.Statement.0.Action", + "category": "Resource", + "startLine": 54, + "startColumn": 11, + "endLine": 54, + "endColumn": 17, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3510", + "severity": "ERROR", + "message": "Only one of ['Action', 'NotAction'] is a required property", + "source": "CFN_LINT", "entity": { - "logicalId": "RootRole2", + "logicalId": "rIamPolicyExtraThings", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.RoleName", - "category": "Best Practice", - "startLine": 40, - "startColumn": 7, - "endLine": 40, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.PolicyDocument.Statement.0.NotAction", + "category": "Resource", + "startLine": 56, + "startColumn": 11, + "endLine": 56, + "endColumn": 20, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3510", + "severity": "ERROR", + "message": "Only one of ['Resource', 'NotResource'] is a required property", + "source": "CFN_LINT", "entity": { - "logicalId": "RootRole3", + "logicalId": "rIamPolicyExtraThings", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.Path", - "category": "Best Practice", - "startLine": 62, - "startColumn": 7, - "endLine": 62, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.PolicyDocument.Statement.0.Resource", + "category": "Resource", + "startLine": 58, + "startColumn": 11, + "endLine": 58, + "endColumn": 19, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3510", + "severity": "ERROR", + "message": "Only one of ['Resource', 'NotResource'] is a required property", + "source": "CFN_LINT", "entity": { - "logicalId": "RootRole3", + "logicalId": "rIamPolicyExtraThings", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.RoleName", - "category": "Best Practice", - "startLine": 63, - "startColumn": 7, - "endLine": 63, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.PolicyDocument.Statement.0.NotResource", + "category": "Resource", + "startLine": 60, + "startColumn": 11, + "endLine": 60, + "endColumn": 22, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3510", + "severity": "ERROR", + "message": "'arn' does not match '^(arn:(aws[A-Za-z\\-]*?|[A-Za-z?*\\-]*[?*][A-Za-z?*\\-]*):[^:*?]+:[^:]*(:(?:\\d{12}|\\*|aws)?:.+|)|\\*)$'", + "source": "CFN_LINT", "entity": { - "logicalId": "RootRole4", + "logicalId": "rIamPolicyExtraThings", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.Path", - "category": "Best Practice", - "startLine": 85, - "startColumn": 7, - "endLine": 85, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.PolicyDocument.Statement.0.NotResource.0", + "category": "Resource", + "startLine": 61, + "startColumn": 13, + "endLine": 61, + "endColumn": 14, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3530", + "severity": "ERROR", + "message": "'Statement' is a required property", + "source": "CFN_LINT", "entity": { - "logicalId": "RootRole4", + "logicalId": "rIamRole", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RoleName", - "category": "Best Practice", - "startLine": 86, + "propertyPath": "Properties.AssumeRolePolicyDocument", + "suggestedFix": "Add a Statement array to the AssumeRolePolicyDocument", + "category": "Resource", + "startLine": 10, "startColumn": 7, - "endLine": 86, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 10, + "endColumn": 31, + "ruleDescription": "Validate IAM trust policies", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "ruleId": "W2512", + "severity": "WARN", + "message": "IAM policy uses NotAction which grants all actions except those listed - consider using Action instead", "source": "ENGINE", "entity": { - "logicalId": "RootRole5", + "logicalId": "rIamPolicyExtraThings", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.Path", - "category": "Best Practice", - "startLine": 108, - "startColumn": 7, - "endLine": 108, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "category": "Security", + "startLine": 43, + "startColumn": 3, + "endLine": 43, + "endColumn": 24, + "ruleDescription": "IAM policy with NotAction", + "phase": "LINT" }, { "ruleId": "I9001", @@ -1178,194 +1143,152 @@ "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RootRole5", + "logicalId": "rIamRole", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 109, + "startLine": 9, "startColumn": 7, - "endLine": 109, + "endLine": 9, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsUsEast1'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "RootRole6", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Path", - "category": "Best Practice", - "startLine": 130, - "startColumn": 7, - "endLine": 130, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", "context": { "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", + "message": "Resource 'rIamRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RootRole6", + "logicalId": "rIamRole", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 131, - "startColumn": 7, - "endLine": 131, + "startLine": 8, + "startColumn": 5, + "endLine": 8, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsUsEast1'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket2", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 150, - "startColumn": 7, - "endLine": 150, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsUsEast1'" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/resources/iam/iam_policy_conditional_policies.yaml": { + "filePath": "bad/resources/iam/iam_policy_conditional_policies.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 2, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3510", + "severity": "ERROR", + "message": "'not-an-arn' does not match '^(arn:(aws[A-Za-z\\-]*?|[A-Za-z?*\\-]*[?*][A-Za-z?*\\-]*):[^:*?]+:[^:]*(:(?:\\d{12}|\\*|aws)?:.+|)|\\*)$'", + "source": "CFN_LINT", "entity": { - "logicalId": "Project1", + "logicalId": "RoleConditionalPolicies", "entityType": "Resource", - "resourceType": "AWS::CodeBuild::Project" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 168, - "startColumn": 7, - "endLine": 168, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.Policies.0.PolicyDocument.Statement.0.Resource", + "category": "Resource", + "startLine": 34, + "startColumn": 19, + "endLine": 34, + "endColumn": 27, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3510", + "severity": "ERROR", + "message": "'also-bad' does not match '^(arn:(aws[A-Za-z\\-]*?|[A-Za-z?*\\-]*[?*][A-Za-z?*\\-]*):[^:*?]+:[^:]*(:(?:\\d{12}|\\*|aws)?:.+|)|\\*)$'", + "source": "CFN_LINT", "entity": { - "logicalId": "Project2", + "logicalId": "RoleConditionalPolicies", "entityType": "Resource", - "resourceType": "AWS::CodeBuild::Project" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 188, - "startColumn": 7, - "endLine": 188, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.Policies.0.PolicyDocument.Statement.0.Resource", + "category": "Resource", + "startLine": 48, + "startColumn": 19, + "endLine": 48, + "endColumn": 27, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'RootRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "ruleId": "W2512", + "severity": "WARN", + "message": "IAM policy uses NotAction which grants all actions except those listed - consider using Action instead", "source": "ENGINE", "entity": { - "logicalId": "RootRole", + "logicalId": "RoleNotActionConditional", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "category": "Security", + "startLine": 51, + "startColumn": 3, + "endLine": 51, + "endColumn": 27, + "ruleDescription": "IAM policy with NotAction", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'RootRole2' of type 'AWS::IAM::Role' supports Tags but none are configured", + "ruleId": "W2512", + "severity": "WARN", + "message": "IAM policy uses NotAction which grants all actions except those listed - consider using Action instead", "source": "ENGINE", "entity": { - "logicalId": "RootRole2", + "logicalId": "PolicySingleStatement", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 29, - "startColumn": 5, - "endLine": 29, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "category": "Security", + "startLine": 79, + "startColumn": 3, + "endLine": 79, + "endColumn": 24, + "ruleDescription": "IAM policy with NotAction", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'RootRole3' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'RoleConditionalPolicies' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RootRole3", + "logicalId": "RoleConditionalPolicies", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 52, + "startLine": 18, "startColumn": 5, - "endLine": 52, + "endLine": 18, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -1373,177 +1296,118 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'RootRole4' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'RoleNotActionConditional' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RootRole4", + "logicalId": "RoleNotActionConditional", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 75, + "startLine": 53, "startColumn": 5, - "endLine": 75, + "endLine": 53, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/resources/iam/identity_policy_conditional_novalue_e3510.yaml": { + "filePath": "bad/resources/iam/identity_policy_conditional_novalue_e3510.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'RootRole5' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3510", + "severity": "ERROR", + "message": "'SomeOptionalParameter' does not match '^(arn:(aws[A-Za-z\\-]*?|[A-Za-z?*\\-]*[?*][A-Za-z?*\\-]*):[^:*?]+:[^:]*(:(?:\\d{12}|\\*|aws)?:.+|)|\\*)$'", + "source": "CFN_LINT", "entity": { - "logicalId": "RootRole5", + "logicalId": "SomeManagedPolicy", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 98, - "startColumn": 5, - "endLine": 98, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.PolicyDocument.Statement.1.Resource.0", + "category": "Resource", + "startLine": 29, + "startColumn": 19, + "endLine": 29, + "endColumn": 20, + "ruleDescription": "Validate identity based IAM policies", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'RootRole6' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RootRole6", + "logicalId": "SomeManagedPolicy", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 120, - "startColumn": 5, - "endLine": 120, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + } + ] + }, + "bad/resources/iam/identity_policy_e3510.yaml": { + "filePath": "bad/resources/iam/identity_policy_e3510.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 7, + "counts": { + "fatal": 3, + "errors": 8, + "warnings": 2, + "informational": 9, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Bucket1' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F3017", + "severity": "FATAL", + "message": "Value is not valid under any of the 3 anyOf schemas for AWS::IAM::Policy (0 branches matched; at least one is required). Required property combinations: ['Groups'] or ['Roles'] or ['Users']. Branch failures: branch 1: 'Users' is a required property; branch 2: 'Groups' is a required property; branch 3: 'Roles' is a required property.", + "source": "SCHEMA", "entity": { - "logicalId": "Bucket1", + "logicalId": "PolicyEmptyAction", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 142, + "propertyPath": "Properties", + "category": "Schema", + "startLine": 15, "startColumn": 5, - "endLine": 142, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Bucket2' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket2", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 149, - "startColumn": 5, - "endLine": 149, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Project1' of type 'AWS::CodeBuild::Project' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Project1", - "entityType": "Resource", - "resourceType": "AWS::CodeBuild::Project" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 167, - "startColumn": 5, - "endLine": 167, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Project2' of type 'AWS::CodeBuild::Project' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Project2", - "entityType": "Resource", - "resourceType": "AWS::CodeBuild::Project" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 187, - "startColumn": 5, - "endLine": 187, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/resources/properties/atleastone.yaml": { - "filePath": "bad/resources/properties/atleastone.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 2, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F3017", - "severity": "FATAL", - "message": "Value is not valid under any of the 3 anyOf schemas for AWS::IAM::Policy (0 branches matched; at least one is required). Required property combinations: ['Groups'] or ['Roles'] or ['Users']. Branch failures: branch 1: 'Users' is a required property; branch 2: 'Groups' is a required property; branch 3: 'Roles' is a required property.", - "source": "SCHEMA", - "entity": { - "logicalId": "myPolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" - }, - "propertyPath": "Properties", - "category": "Schema", - "startLine": 10, - "startColumn": 5, - "endLine": 10, + "endLine": 15, "endColumn": 15, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Value not valid under anyOf", @@ -1604,19 +1468,16 @@ "message": "Value is not valid under any of the 3 anyOf schemas for AWS::IAM::Policy (0 branches matched; at least one is required). Required property combinations: ['Groups'] or ['Roles'] or ['Users']. Branch failures: branch 1: 'Users' is a required property; branch 2: 'Groups' is a required property; branch 3: 'Roles' is a required property.", "source": "SCHEMA", "entity": { - "logicalId": "myPolicy2", + "logicalId": "PolicyWithJoinResource", "entityType": "Resource", "resourceType": "AWS::IAM::Policy" }, "propertyPath": "Properties", "category": "Schema", - "startLine": 16, + "startLine": 59, "startColumn": 5, - "endLine": 16, + "endLine": 59, "endColumn": 15, - "conditionScenario": { - "cPrimaryRegion": true - }, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Value not valid under anyOf", "phase": "SCHEMA", @@ -1670,410 +1531,392 @@ } } }, + { + "ruleId": "F3031", + "severity": "FATAL", + "message": "'arn:aws:sso:::instance/ssoins-12345' does not match pattern 'arn:aws(-[a-z]{1,5}){0,3}:sso:::instance/(sso)?ins-[a-zA-Z0-9-.]{16}'", + "source": "SCHEMA", + "entity": { + "logicalId": "PermissionSetBadPolicy", + "entityType": "Resource", + "resourceType": "AWS::SSO::PermissionSet" + }, + "propertyPath": "Properties.InstanceArn", + "category": "Schema", + "startLine": 89, + "startColumn": 7, + "endLine": 89, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sso/aws-sso-permissionset", + "ruleDescription": "Value does not match pattern", + "phase": "SCHEMA", + "context": { + "actualValue": "arn:aws:sso:::instance/ssoins-12345", + "expectedConstraint": "arn:aws(-[a-z]{1,5}){0,3}:sso:::instance/(sso)?ins-[a-zA-Z0-9-.]{16}" + } + }, { "ruleId": "E3510", "severity": "ERROR", - "message": "'Statement' is a required property", + "message": "[] is too short (minimum 1 item)", "source": "CFN_LINT", "entity": { - "logicalId": "myPolicy", + "logicalId": "PolicyEmptyAction", "entityType": "Resource", "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.PolicyDocument", + "propertyPath": "Properties.PolicyDocument.Statement.0.Action", "category": "Resource", - "startLine": 13, - "startColumn": 7, - "endLine": 13, - "endColumn": 21, + "startLine": 21, + "startColumn": 13, + "endLine": 21, + "endColumn": 19, "ruleDescription": "Validate identity based IAM policies", "phase": "LINT" - } - ] - }, - "bad/resources/properties/custom.yaml": { - "filePath": "bad/resources/properties/custom.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "bad/resources/properties/list_duplicates.yaml": { - "filePath": "bad/resources/properties/list_duplicates.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3037", - "severity": "FATAL", - "message": "Array items are not unique", - "source": "SCHEMA", + "ruleId": "E3510", + "severity": "ERROR", + "message": "'ReadOnly' is a duplicate of Statement.0.Sid", + "source": "CFN_LINT", "entity": { - "logicalId": "IamGroupWithNestedConditions", + "logicalId": "PolicyDuplicateSid", "entityType": "Resource", - "resourceType": "AWS::IAM::Group" - }, - "propertyPath": "Properties.ManagedPolicyArns", - "category": "Schema", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 24, - "conditionScenario": { - "isPrimaryRegion": true + "resourceType": "AWS::IAM::ManagedPolicy" }, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Array items not unique", - "phase": "SCHEMA", - "context": { - "actualValue": [ - "arn:aws:iam::aws:policy/AdministratorPolicy", - "arn:aws:iam::aws:policy/AdministratorPolicy" - ] - } - } - ] - }, - "bad/resources/properties/primitive_types_map.yaml": { - "filePath": "bad/resources/properties/primitive_types_map.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 4, - "informational": 2, - "debug": 0 + "propertyPath": "Properties.PolicyDocument.Statement.1.Sid", + "category": "Resource", + "startLine": 35, + "startColumn": 13, + "endLine": 35, + "endColumn": 16, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "ruleId": "E3510", + "severity": "ERROR", + "message": "Additional properties are not allowed ('Id' was unexpected)", "source": "CFN_LINT", "entity": { - "logicalId": "ExampleLambda", + "logicalId": "PolicyBadIdAndCondition", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::RolePolicy" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 19, - "startColumn": 7, - "endLine": 19, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" - } + "propertyPath": "Properties.PolicyDocument.Id", + "category": "Resource", + "startLine": 47, + "startColumn": 9, + "endLine": 47, + "endColumn": 11, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "ruleId": "E3510", + "severity": "ERROR", + "message": "'InvalidOp' is not a valid IAM condition operator", "source": "CFN_LINT", "entity": { - "logicalId": "ExampleLambda1", + "logicalId": "PolicyBadIdAndCondition", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::RolePolicy" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 39, - "startColumn": 7, - "endLine": 39, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" - } + "propertyPath": "Properties.PolicyDocument.Statement.0.Condition.InvalidOp", + "category": "Resource", + "startLine": 53, + "startColumn": 15, + "endLine": 53, + "endColumn": 24, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", + "ruleId": "E3510", + "severity": "ERROR", + "message": "'DefinitelyNotAllow' is not one of ['Allow', 'Deny']", + "source": "CFN_LINT", "entity": { - "logicalId": "ExampleLambda", + "logicalId": "PolicyDynamicActionBadEffect", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::GroupPolicy" }, - "category": "Security", - "startLine": 5, - "startColumn": 3, - "endLine": 5, - "endColumn": 16, - "ruleDescription": "Hardcoded account ID in ARN", + "propertyPath": "Properties.PolicyDocument.Statement.0.Effect", + "category": "Resource", + "startLine": 81, + "startColumn": 13, + "endLine": 81, + "endColumn": 19, + "ruleDescription": "Validate identity based IAM policies", "phase": "LINT" }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", + "ruleId": "E3510", + "severity": "ERROR", + "message": "Only one of ['Action', 'NotAction'] is a required property", + "source": "CFN_LINT", "entity": { - "logicalId": "ExampleLambda1", + "logicalId": "PermissionSetBadPolicy", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SSO::PermissionSet" }, - "category": "Security", - "startLine": 22, - "startColumn": 3, - "endLine": 22, - "endColumn": 17, - "ruleDescription": "Hardcoded account ID in ARN", + "propertyPath": "Properties.InlinePolicy.Statement.0.Action", + "category": "Resource", + "startLine": 94, + "startColumn": 13, + "endLine": 94, + "endColumn": 19, + "ruleDescription": "Validate identity based IAM policies", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ExampleLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "ruleId": "E3510", + "severity": "ERROR", + "message": "Only one of ['Action', 'NotAction'] is a required property", + "source": "CFN_LINT", + "entity": { + "logicalId": "PermissionSetBadPolicy", + "entityType": "Resource", + "resourceType": "AWS::SSO::PermissionSet" + }, + "propertyPath": "Properties.InlinePolicy.Statement.0.NotAction", + "category": "Resource", + "startLine": 95, + "startColumn": 13, + "endLine": 95, + "endColumn": 22, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" + }, + { + "ruleId": "E3510", + "severity": "ERROR", + "message": "'invalid-version' is not one of ['2008-10-17', '2012-10-17']", + "source": "CFN_LINT", + "entity": { + "logicalId": "UserInlinePolicy", + "entityType": "Resource", + "resourceType": "AWS::IAM::User" + }, + "propertyPath": "Properties.Policies.0.PolicyDocument.Version", + "category": "Resource", + "startLine": 105, + "startColumn": 13, + "endLine": 105, + "endColumn": 20, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" + }, + { + "ruleId": "W2512", + "severity": "WARN", + "message": "IAM policy uses NotAction which grants all actions except those listed - consider using Action instead", "source": "ENGINE", "entity": { - "logicalId": "ExampleLambda", + "logicalId": "PermissionSetBadPolicy", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SSO::PermissionSet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "category": "Security", + "startLine": 86, + "startColumn": 3, + "endLine": 86, + "endColumn": 25, + "ruleDescription": "IAM policy with NotAction", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ExampleLambda1' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'InstanceArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", "source": "ENGINE", "entity": { - "logicalId": "ExampleLambda1", + "logicalId": "PermissionSetBadPolicy", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SSO::PermissionSet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.InstanceArn", "category": "Best Practice", - "startLine": 23, - "startColumn": 5, - "endLine": 23, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 89, + "startColumn": 7, + "endLine": 89, + "endColumn": 18, + "ruleDescription": "Hardcoded ARN property", "phase": "LINT" - } - ] - }, - "bad/resources/properties/string_size.yaml": { - "filePath": "bad/resources/properties/string_size.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 5, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3014", - "severity": "FATAL", - "message": "Exactly one of ['Metrics', 'MetricName', 'EvaluationCriteria'] must be specified", - "source": "SCHEMA", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", "entity": { - "logicalId": "CloudWatchAlarm", + "logicalId": "PolicyWithJoinResource", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties", - "category": "Schema", - "startLine": 14, - "startColumn": 5, - "endLine": 14, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Exactly one of properties required (requiredXor)", - "phase": "SCHEMA" + "propertyPath": "Properties.PolicyDocument.Statement.0.Resource.Fn::Join", + "category": "Intrinsic Function", + "startLine": 67, + "startColumn": 15, + "endLine": 67, + "endColumn": 23, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "F3031", - "severity": "FATAL", - "message": "'' does not match pattern '^[a-zA-Z0-9._\\-]+(?.Arn when Path is not '/'", "category": "Resource", - "startLine": 13, + "startLine": 7, "startColumn": 7, - "endLine": 13, - "endColumn": 22, - "ruleDescription": "Validates RDS DB Instance Class", + "endLine": 7, + "endColumn": 18, + "ruleDescription": "Check if REFing to a IAM resource with path set", "phase": "LINT" }, { - "ruleId": "E3025", - "severity": "ERROR", - "message": "'db.x2e.xlarge' is not one of ['db.m3.2xlarge', 'db.m3.large', 'db.m3.medium', 'db.m3.xlarge', 'db.m4.2xlarge', 'db.m4.4xlarge', 'db.m4.large', 'db.m4.xlarge', 'db.m5.12xlarge', 'db.m5.16xlarge', 'db.m5.2xlarge', 'db.m5.4xlarge', 'db.m5.8xlarge', 'db.m5.large', 'db.m5.xlarge', 'db.m5d.2xlarge', 'db.m5d.4xlarge', 'db.m5d.large', 'db.m5d.xlarge', 'db.m6i.2xlarge', 'db.m6i.32xlarge', 'db.m6i.4xlarge', 'db.m6i.large', 'db.m6i.metal', 'db.m6i.xlarge', 'db.m6id.2xlarge', 'db.m6id.4xlarge', 'db.m6id.large', 'db.m6id.metal', 'db.m6id.xlarge', 'db.m6in.2xlarge', 'db.m6in.4xlarge', 'db.m6in.large', 'db.m6in.xlarge', 'db.m7i.2xlarge', 'db.m7i.4xlarge', 'db.m7i.large', 'db.m7i.metal-24xl', 'db.m7i.metal-48xl', 'db.m7i.xlarge', 'db.m8i.2xlarge', 'db.m8i.4xlarge', 'db.m8i.large', 'db.m8i.metal-48xl', 'db.m8i.metal-96xl', 'db.m8i.xlarge', 'db.r3.2xlarge', 'db.r3.4xlarge', 'db.r3.large', 'db.r3.xlarge', 'db.r4.2xlarge', 'db.r4.4xlarge', 'db.r4.large', 'db.r4.xlarge', 'db.r5.2xlarge', 'db.r5.2xlarge.tpc1.mem2x', 'db.r5.2xlarge.tpc2.mem4x', 'db.r5.2xlarge.tpc2.mem8x', 'db.r5.4xlarge', 'db.r5.4xlarge.tpc2.mem2x', 'db.r5.4xlarge.tpc2.mem3x', 'db.r5.4xlarge.tpc2.mem4x', 'db.r5.8xlarge', 'db.r5.large', 'db.r5.large.tpc1.mem2x', 'db.r5.xlarge', 'db.r5.xlarge.tpc2.mem2x', 'db.r5.xlarge.tpc2.mem4x', 'db.r5b.2xlarge', 'db.r5b.2xlarge.tpc1.mem2x', 'db.r5b.2xlarge.tpc2.mem4x', 'db.r5b.2xlarge.tpc2.mem8x', 'db.r5b.4xlarge', 'db.r5b.4xlarge.tpc2.mem2x', 'db.r5b.4xlarge.tpc2.mem3x', 'db.r5b.4xlarge.tpc2.mem4x', 'db.r5b.large', 'db.r5b.large.tpc1.mem2x', 'db.r5b.xlarge', 'db.r5b.xlarge.tpc2.mem2x', 'db.r5b.xlarge.tpc2.mem4x', 'db.r5d.2xlarge', 'db.r5d.4xlarge', 'db.r5d.large', 'db.r5d.xlarge', 'db.r6i.2xlarge', 'db.r6i.2xlarge.tpc1.mem2x', 'db.r6i.2xlarge.tpc2.mem4x', 'db.r6i.2xlarge.tpc2.mem8x', 'db.r6i.32xlarge', 'db.r6i.4xlarge', 'db.r6i.4xlarge.tpc2.mem2x', 'db.r6i.4xlarge.tpc2.mem3x', 'db.r6i.4xlarge.tpc2.mem4x', 'db.r6i.large', 'db.r6i.large.tpc1.mem2x', 'db.r6i.metal', 'db.r6i.xlarge', 'db.r6i.xlarge.tpc2.mem2x', 'db.r6i.xlarge.tpc2.mem4x', 'db.r6id.2xlarge', 'db.r6id.4xlarge', 'db.r6id.large', 'db.r6id.metal', 'db.r6id.xlarge', 'db.r6in.2xlarge', 'db.r6in.4xlarge', 'db.r6in.large', 'db.r6in.xlarge', 'db.r7i.2xlarge', 'db.r7i.2xlarge.tpc2.mem4x', 'db.r7i.2xlarge.tpc2.mem8x', 'db.r7i.3xlarge.tpc2.mem4x', 'db.r7i.4xlarge', 'db.r7i.4xlarge.tpc2.mem2x', 'db.r7i.4xlarge.tpc2.mem3x', 'db.r7i.4xlarge.tpc2.mem4x', 'db.r7i.large', 'db.r7i.metal-24xl', 'db.r7i.metal-48xl', 'db.r7i.xlarge', 'db.r7i.xlarge.tpc2.mem2x', 'db.r7i.xlarge.tpc2.mem4x', 'db.r8i.2xlarge', 'db.r8i.4xlarge', 'db.r8i.large', 'db.r8i.metal-48xl', 'db.r8i.metal-96xl', 'db.r8i.xlarge', 'db.t2.2xlarge', 'db.t2.large', 'db.t2.medium', 'db.t2.micro', 'db.t2.small', 'db.t2.xlarge', 'db.t3.2xlarge', 'db.t3.large', 'db.t3.medium', 'db.t3.small', 'db.t3.xlarge', 'db.x1e.2xlarge', 'db.x1e.4xlarge', 'db.x1e.xlarge', 'db.x2idn.metal', 'db.x2iedn.2xlarge', 'db.x2iedn.4xlarge', 'db.x2iedn.metal', 'db.x2iedn.xlarge', 'db.x2iezn.2xlarge', 'db.x2iezn.4xlarge', 'db.x2iezn.metal', 'db.z1d.2xlarge', 'db.z1d.3xlarge', 'db.z1d.large', 'db.z1d.xlarge'] when Engine is 'oracle-se2' and LicenseModel is 'bring-your-own-license' in any region", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance2", + "logicalId": "CodeBuildRole", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.DBInstanceClass", - "category": "Resource", - "startLine": 19, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 43, "startColumn": 7, - "endLine": 19, - "endColumn": 22, - "ruleDescription": "Validates RDS DB Instance Class", - "phase": "LINT" - }, - { - "ruleId": "E3025", - "severity": "ERROR", - "message": "'db.x1e.xlarge' is not one of ['db.m3.2xlarge', 'db.m3.large', 'db.m3.medium', 'db.m3.xlarge', 'db.m4.2xlarge', 'db.m4.4xlarge', 'db.m4.large', 'db.m4.xlarge', 'db.m5.2xlarge', 'db.m5.4xlarge', 'db.m5.large', 'db.m5.xlarge', 'db.m8i.2xlarge', 'db.m8i.4xlarge', 'db.m8i.large', 'db.m8i.xlarge', 'db.r3.2xlarge', 'db.r3.4xlarge', 'db.r3.large', 'db.r3.xlarge', 'db.r4.2xlarge', 'db.r4.4xlarge', 'db.r4.large', 'db.r4.xlarge', 'db.r5.2xlarge', 'db.r5.4xlarge', 'db.r5.large', 'db.r5.xlarge', 'db.r6i.2xlarge', 'db.r6i.4xlarge', 'db.r6i.large', 'db.r6i.xlarge', 'db.r8i.2xlarge', 'db.r8i.4xlarge', 'db.r8i.large', 'db.r8i.xlarge', 'db.t2.2xlarge', 'db.t2.large', 'db.t2.medium', 'db.t2.micro', 'db.t2.small', 'db.t2.xlarge', 'db.t3.2xlarge', 'db.t3.large', 'db.t3.medium', 'db.t3.small', 'db.t3.xlarge', 'db.x2iedn.4xlarge'] when Engine is 'oracle-se2' and LicenseModel is 'license-included' in any region", - "source": "CFN_LINT", + "endLine": 43, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance3", + "logicalId": "CodeBuildVPC", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.DBInstanceClass", - "category": "Resource", - "startLine": 26, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 64, "startColumn": 7, - "endLine": 26, - "endColumn": 22, - "ruleDescription": "Validates RDS DB Instance Class", - "phase": "LINT" + "endLine": 64, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E9006", - "severity": "ERROR", - "message": "'bad-ee' is not one of ['aurora-mysql', 'aurora-postgresql', 'custom-oracle-ee', 'custom-oracle-ee-cdb', 'custom-sqlserver-ee', 'custom-sqlserver-se', 'custom-sqlserver-web', 'db2-ae', 'db2-se', 'mariadb', 'mysql', 'oracle-ee', 'oracle-ee-cdb', 'oracle-se2', 'oracle-se2-cdb', 'postgres', 'sqlserver-ee', 'sqlserver-ex', 'sqlserver-se', 'sqlserver-web']", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance9", + "logicalId": "CodeBuildSubnet", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Engine", - "category": "Schema", - "startLine": 60, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 73, "startColumn": 7, - "endLine": 60, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property value not valid for conditional extension enum", - "phase": "SCHEMA" + "endLine": 73, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'CodeBuildVPC'" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DBInstance2", + "logicalId": "CodeBuildSubnet", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 18, - "startColumn": 5, - "endLine": 18, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 75, + "startColumn": 7, + "endLine": 75, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DBInstance3", + "logicalId": "CodeBuildSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "propertyPath": "Properties.GroupName", + "category": "Best Practice", + "startLine": 79, + "startColumn": 7, + "endLine": 79, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DBInstance4", + "logicalId": "CodeBuildSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 32, - "startColumn": 5, - "endLine": 32, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 80, + "startColumn": 7, + "endLine": 80, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DBInstance7", + "logicalId": "CodeBuildSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 44, - "startColumn": 5, - "endLine": 44, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 81, + "startColumn": 7, + "endLine": 81, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'CodeBuildVPC'" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CodeBuildProject' of type 'AWS::CodeBuild::Project' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DBInstance8", + "logicalId": "CodeBuildProject", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::CodeBuild::Project" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 51, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 6, "startColumn": 5, - "endLine": 51, + "endLine": 6, "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CodeBuildRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DBInstance9", + "logicalId": "CodeBuildRole", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 58, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 35, "startColumn": 5, - "endLine": 58, + "endLine": 35, "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'CodeBuildSubnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance1", + "logicalId": "CodeBuildSubnet", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, - "startColumn": 3, - "endLine": 10, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 72, + "startColumn": 5, + "endLine": 72, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'CodeBuildSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance1", + "logicalId": "CodeBuildSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, - "startColumn": 3, - "endLine": 10, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "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": "DBInstance2", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "category": "Best Practice", - "startLine": 16, - "startColumn": 3, - "endLine": 16, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 78, + "startColumn": 5, + "endLine": 78, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/resources/iam/resource_policy.yaml": { + "filePath": "bad/resources/iam/resource_policy.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'ecr1' of type 'AWS::ECR::Repository' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance2", + "logicalId": "ecr1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ECR::Repository" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 16, - "startColumn": 3, - "endLine": 16, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'ecr2' of type 'AWS::ECR::Repository' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance3", + "logicalId": "ecr2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ECR::Repository" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 23, - "startColumn": 3, - "endLine": 23, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 19, + "startColumn": 5, + "endLine": 19, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/resources/lambda/function_property_value_limits.yaml": { + "filePath": "bad/resources/lambda/function_property_value_limits.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 6, + "errors": 5, + "warnings": 0, + "informational": 6, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "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", + "ruleId": "F1020", + "severity": "FATAL", + "message": "Fn::GetAtt references non-existent resource 'myLambdaExecutionRole'", + "source": "SCHEMA", "entity": { - "logicalId": "DBInstance3", + "logicalId": "myLambdaFunction", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "category": "Best Practice", - "startLine": 23, + "suggestedFix": "Check that the GetAtt target resource exists in the template", + "category": "Intrinsic Function", + "startLine": 6, "startColumn": 3, - "endLine": 23, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "endLine": 6, + "endColumn": 19, + "ruleDescription": "Ref/GetAtt target must exist", + "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", + "ruleId": "F1020", + "severity": "FATAL", + "message": "Fn::GetAtt references non-existent resource 'myLambdaExecutionRole'", + "source": "SCHEMA", "entity": { - "logicalId": "DBInstance4", + "logicalId": "myLambdaFunction2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "category": "Best Practice", - "startLine": 30, + "suggestedFix": "Check that the GetAtt target resource exists in the template", + "category": "Intrinsic Function", + "startLine": 16, "startColumn": 3, - "endLine": 30, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "endLine": 16, + "endColumn": 20, + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" }, { - "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", + "ruleId": "F1020", + "severity": "FATAL", + "message": "Fn::GetAtt references non-existent resource 'myLambdaExecutionRole'", + "source": "SCHEMA", "entity": { - "logicalId": "DBInstance4", + "logicalId": "myLambdaFunction3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "category": "Best Practice", - "startLine": 30, + "suggestedFix": "Check that the GetAtt target resource exists in the template", + "category": "Intrinsic Function", + "startLine": 26, "startColumn": 3, - "endLine": 30, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "endLine": 26, + "endColumn": 20, + "ruleDescription": "Ref/GetAtt target must exist", + "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", + "ruleId": "F3031", + "severity": "FATAL", + "message": "'DXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheLambdaName' does not match pattern '^([a-zA-Z0-9_-]{1,64}|arn:[a-zA-Z0-9-]+:lambda:[a-zA-Z0-9-]+:\\d{12}:function:[a-zA-Z0-9_-]{1,64})$'", + "source": "SCHEMA", "entity": { - "logicalId": "DBInstance5", + "logicalId": "myLambdaFunction", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "category": "Best Practice", - "startLine": 36, - "startColumn": 3, - "endLine": 36, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Properties.FunctionName", + "category": "Schema", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 19, + "ruleDescription": "Value does not match pattern", + "phase": "SCHEMA", + "context": { + "actualValue": "DXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheLambdaName", + "expectedConstraint": "^([a-zA-Z0-9_-]{1,64}|arn:[a-zA-Z0-9-]+:lambda:[a-zA-Z0-9-]+:\\d{12}:function:[a-zA-Z0-9_-]{1,64})$" + } }, { - "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", + "ruleId": "F3033", + "severity": "FATAL", + "message": "length 148 exceeds maximum 128", + "source": "SCHEMA", "entity": { - "logicalId": "DBInstance5", + "logicalId": "myLambdaFunction2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "category": "Best Practice", - "startLine": 36, - "startColumn": 3, - "endLine": 36, + "propertyPath": "Properties.Handler", + "category": "Schema", + "startLine": 20, + "startColumn": 7, + "endLine": 20, "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "ruleDescription": "String length out of bounds", + "phase": "SCHEMA", + "context": { + "actualValue": "DXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheDXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbhe.handler", + "extra": { + "actual_length": 148, + "max_length": 128, + "min_length": 0 + } + } }, { - "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", + "ruleId": "F3033", + "severity": "FATAL", + "message": "length 280 exceeds maximum 256", + "source": "SCHEMA", "entity": { - "logicalId": "DBInstance7", + "logicalId": "myLambdaFunction3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "category": "Best Practice", - "startLine": 42, - "startColumn": 3, - "endLine": 42, - "endColumn": 14, - "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)", + "propertyPath": "Properties.Description", + "category": "Schema", + "startLine": 30, + "startColumn": 7, + "endLine": 30, + "endColumn": 18, + "ruleDescription": "String length out of bounds", + "phase": "SCHEMA", + "context": { + "actualValue": "DXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheDXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheDXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheDXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbhe", + "extra": { + "actual_length": 280, + "max_length": 256, + "min_length": 0 + } + } + }, + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs10.x' was deprecated on '2021-07-30'. Creation was disabled on '2021-07-30', and updates were disabled on '2022-02-14'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "DBInstance7", + "logicalId": "myLambdaFunction", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "category": "Best Practice", - "startLine": 42, - "startColumn": 3, - "endLine": 42, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 14, + "startColumn": 7, + "endLine": 14, "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs10.x", + "lifecycle": "end-of-life" + } }, { - "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)", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs10.x' was deprecated on '2021-07-30'. Creation was disabled on '2021-07-30', and updates were disabled on '2022-02-14'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "DBInstance8", + "logicalId": "myLambdaFunction2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "category": "Best Practice", - "startLine": 49, - "startColumn": 3, - "endLine": 49, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 24, + "startColumn": 7, + "endLine": 24, "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs10.x", + "lifecycle": "end-of-life" + } }, { - "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)", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs10.x' was deprecated on '2021-07-30'. Creation was disabled on '2021-07-30', and updates were disabled on '2022-02-14'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "DBInstance8", + "logicalId": "myLambdaFunction3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "category": "Best Practice", - "startLine": 49, - "startColumn": 3, - "endLine": 49, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 35, + "startColumn": 7, + "endLine": 35, "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs10.x", + "lifecycle": "end-of-life" + } }, { - "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)", + "ruleId": "E3019", + "severity": "ERROR", + "message": "Primary identifiers {'FunctionName': 'LambdaName'} should have unique values across the resources {'myLambdaFunction2', 'myLambdaFunction3'}", "source": "CFN_LINT", "entity": { - "logicalId": "DBInstance9", + "logicalId": "myLambdaFunction2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "category": "Best Practice", - "startLine": 56, - "startColumn": 3, - "endLine": 56, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.FunctionName", + "category": "Resource", + "startLine": 19, + "startColumn": 7, + "endLine": 19, + "endColumn": 19, + "ruleDescription": "Validate that all resources have unique primary identifiers", "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)", + "ruleId": "E3019", + "severity": "ERROR", + "message": "Primary identifiers {'FunctionName': 'LambdaName'} should have unique values across the resources {'myLambdaFunction2', 'myLambdaFunction3'}", "source": "CFN_LINT", "entity": { - "logicalId": "DBInstance9", + "logicalId": "myLambdaFunction3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "category": "Best Practice", - "startLine": 56, - "startColumn": 3, - "endLine": 56, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.FunctionName", + "category": "Resource", + "startLine": 29, + "startColumn": 7, + "endLine": 29, + "endColumn": 19, + "ruleDescription": "Validate that all resources have unique primary identifiers", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance2", + "logicalId": "myLambdaFunction", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 18, - "startColumn": 5, - "endLine": 18, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance3", + "logicalId": "myLambdaFunction2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "startLine": 19, + "startColumn": 7, + "endLine": 19, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance4", + "logicalId": "myLambdaFunction3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 32, - "startColumn": 5, - "endLine": 32, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "startLine": 29, + "startColumn": 7, + "endLine": 29, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'myLambdaFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance7", + "logicalId": "myLambdaFunction", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 44, + "startLine": 8, "startColumn": 5, - "endLine": 44, + "endLine": 8, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'myLambdaFunction2' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance8", + "logicalId": "myLambdaFunction2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 51, + "startLine": 18, "startColumn": 5, - "endLine": 51, + "endLine": 18, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'myLambdaFunction3' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance9", + "logicalId": "myLambdaFunction3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 58, + "startLine": 28, "startColumn": 5, - "endLine": 58, + "endLine": 28, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/resources/lambda/required_properties.yaml": { + "filePath": "bad/resources/lambda/required_properties.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 7, + "informational": 4, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'Runtime' is a required property (from extension)", + "source": "SCHEMA", "entity": { - "logicalId": "DBInstance1", + "logicalId": "Function3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "propertyPath": "Properties", + "suggestedFix": "Add 'Runtime'", + "category": "Schema", + "startLine": 25, + "startColumn": 5, + "endLine": 25, + "endColumn": 15, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "DBInstance2", + "logicalId": "Function2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 20, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 21, "startColumn": 7, - "endLine": 20, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 21, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "actualValue": "python3.9", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W2533", + "severity": "WARN", + "message": "Properties ['Handler', 'Runtime'] missing for zip file deployment at Resources/Function1/Properties", + "source": "CFN_LINT", "entity": { - "logicalId": "DBInstance3", + "logicalId": "Function1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Code", + "suggestedFix": "Add the missing properties for zip file deployment", "category": "Best Practice", - "startLine": 27, + "startLine": 9, "startColumn": 7, - "endLine": 27, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 9, + "endColumn": 11, + "ruleDescription": "Check required properties for Lambda if the deployment package is a .zip file", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W2533", + "severity": "WARN", + "message": "Properties ['Handler'] missing for zip file deployment at Resources/Function2/Properties", + "source": "CFN_LINT", "entity": { - "logicalId": "DBInstance4", + "logicalId": "Function2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Code", + "suggestedFix": "Add the missing properties for zip file deployment", "category": "Best Practice", - "startLine": 34, + "startLine": 18, "startColumn": 7, - "endLine": 34, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 18, + "endColumn": 11, + "ruleDescription": "Check required properties for Lambda if the deployment package is a .zip file", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W2533", + "severity": "WARN", + "message": "Properties ['Runtime'] missing for zip file deployment at Resources/Function3/Properties", + "source": "CFN_LINT", "entity": { - "logicalId": "DBInstance5", + "logicalId": "Function3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Code", + "suggestedFix": "Add the missing properties for zip file deployment", "category": "Best Practice", - "startLine": 40, + "startLine": 28, "startColumn": 7, - "endLine": 40, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "parameter 'DatabaseEngine' (type String)" - } + "endLine": 28, + "endColumn": 11, + "ruleDescription": "Check required properties for Lambda if the deployment package is a .zip file", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "DBInstance7", + "logicalId": "Function1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 46, - "startColumn": 7, - "endLine": 46, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "category": "Security", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 12, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "DBInstance8", + "logicalId": "Function2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 53, - "startColumn": 7, - "endLine": 53, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "category": "Security", + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 12, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "DBInstance9", + "logicalId": "Function3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 60, - "startColumn": 7, - "endLine": 60, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "category": "Security", + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 12, + "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DBInstance1' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Property 'PackageType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DBInstance1", + "logicalId": "Function2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.PackageType", "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 22, + "startColumn": 7, + "endLine": 22, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DBInstance2' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Resource 'Function1' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DBInstance2", + "logicalId": "Function1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 18, + "startLine": 6, "startColumn": 5, - "endLine": 18, + "endLine": 6, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -3080,19 +2963,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DBInstance3' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Resource 'Function2' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DBInstance3", + "logicalId": "Function2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 25, + "startLine": 15, "startColumn": 5, - "endLine": 25, + "endLine": 15, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -3100,79 +2983,96 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DBInstance4' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Resource 'Function3' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DBInstance4", + "logicalId": "Function3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 32, + "startLine": 25, "startColumn": 5, - "endLine": 32, + "endLine": 25, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/resources/name.yaml": { + "filePath": "bad/resources/name.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 2, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DBInstance5' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F0006", + "severity": "FATAL", + "message": "Logical ID 'my.Instance' must be alphanumeric (A-Za-z0-9)", + "source": "SCHEMA", "entity": { - "logicalId": "DBInstance5", + "logicalId": "my.Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 38, - "startColumn": 5, - "endLine": 38, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "category": "Structure", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Logical IDs must be alphanumeric", + "phase": "SCHEMA" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DBInstance7' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F0006", + "severity": "FATAL", + "message": "Logical ID 'my_Instance' must be alphanumeric (A-Za-z0-9)", + "source": "SCHEMA", "entity": { - "logicalId": "DBInstance7", + "logicalId": "my_Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 44, - "startColumn": 5, - "endLine": 44, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "category": "Structure", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Logical IDs must be alphanumeric", + "phase": "SCHEMA" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DBInstance8' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Resource 'my.Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DBInstance8", + "logicalId": "my.Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 51, + "startLine": 5, "startColumn": 5, - "endLine": 51, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -3180,35 +3080,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DBInstance9' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Resource 'my_Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DBInstance9", + "logicalId": "my_Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 58, + "startLine": 9, "startColumn": 5, - "endLine": 58, + "endLine": 9, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/resources/rds/not_enum_master_username.yaml": { - "filePath": "bad/resources/rds/not_enum_master_username.yaml", + "bad/resources/primary_identifiers.yaml": { + "filePath": "bad/resources/primary_identifiers.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 13, "counts": { - "fatal": 1, - "errors": 0, - "warnings": 1, - "informational": 6, + "fatal": 0, + "errors": 11, + "warnings": 0, + "informational": 25, "debug": 0 }, "suppressed": 0, @@ -3217,437 +3117,391 @@ }, "diagnostics": [ { - "ruleId": "F3017", - "severity": "FATAL", - "message": "'rdsadmin' at 'MasterUsername' does not satisfy the composition branch constraint (none of ['rdsadmin']): 'rdsadmin' must not be one of ['rdsadmin']", - "source": "SCHEMA", + "ruleId": "E3001", + "severity": "ERROR", + "message": "Resource 'BadType' property 'Type' must be a string", + "source": "CFN_LINT", "entity": { - "logicalId": "MyDB", + "logicalId": "BadType", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "" }, - "propertyPath": "Properties.MasterUsername", - "category": "Schema", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Value not valid under anyOf", - "phase": "SCHEMA" + "category": "Resource", + "startLine": 156, + "startColumn": 5, + "endLine": 156, + "endColumn": 9, + "ruleDescription": "Basic CloudFormation Resource Check", + "phase": "PARSE" }, { - "ruleId": "W2501", - "severity": "WARN", - "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", + "ruleId": "E3019", + "severity": "ERROR", + "message": "Primary identifiers {'RoleName': 'root'} should have unique values across the resources {'RootRole', 'RootRole2'}", "source": "CFN_LINT", "entity": { - "logicalId": "MyDB", + "logicalId": "RootRole", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 8, + "propertyPath": "Properties.RoleName", + "category": "Resource", + "startLine": 18, "startColumn": 7, - "endLine": 8, - "endColumn": 25, - "ruleDescription": "Check if Password Properties are correctly configured", + "endLine": 18, + "endColumn": 15, + "ruleDescription": "Validate that all resources have unique primary identifiers", "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)", + "ruleId": "E3019", + "severity": "ERROR", + "message": "Primary identifiers {'RoleName': 'root'} should have unique values across the resources {'RootRole', 'RootRole2'}", "source": "CFN_LINT", "entity": { - "logicalId": "MyDB", + "logicalId": "RootRole2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::IAM::Role" }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 7, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.RoleName", + "category": "Resource", + "startLine": 40, + "startColumn": 7, + "endLine": 40, + "endColumn": 15, + "ruleDescription": "Validate that all resources have unique primary identifiers", "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)", + "ruleId": "E3019", + "severity": "ERROR", + "message": "Primary identifiers {'RoleName': 'useast1'} should have unique values across the resources {'RootRole3', 'RootRole4', 'RootRole5', 'RootRole6'}", "source": "CFN_LINT", "entity": { - "logicalId": "MyDB", + "logicalId": "RootRole3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::IAM::Role" }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 7, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.RoleName", + "category": "Resource", + "startLine": 63, + "startColumn": 7, + "endLine": 63, + "endColumn": 15, + "ruleDescription": "Validate that all resources have unique primary identifiers", "phase": "LINT" }, { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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)", + "ruleId": "E3019", + "severity": "ERROR", + "message": "Primary identifiers {'RoleName': 'useast1'} should have unique values across the resources {'RootRole3', 'RootRole4', 'RootRole5', 'RootRole6'}", "source": "CFN_LINT", "entity": { - "logicalId": "MyDB", + "logicalId": "RootRole4", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, + "propertyPath": "Properties.RoleName", + "category": "Resource", + "startLine": 86, + "startColumn": 7, + "endLine": 86, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Validate that all resources have unique primary identifiers", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "E3019", + "severity": "ERROR", + "message": "Primary identifiers {'RoleName': 'useast1'} should have unique values across the resources {'RootRole3', 'RootRole4', 'RootRole5', 'RootRole6'}", + "source": "CFN_LINT", "entity": { - "logicalId": "MyDB", + "logicalId": "RootRole5", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 6, + "propertyPath": "Properties.RoleName", + "category": "Resource", + "startLine": 109, "startColumn": 7, - "endLine": 6, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 109, + "endColumn": 15, + "ruleDescription": "Validate that all resources have unique primary identifiers", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "E3019", + "severity": "ERROR", + "message": "Primary identifiers {'RoleName': 'useast1'} should have unique values across the resources {'RootRole3', 'RootRole4', 'RootRole5', 'RootRole6'}", + "source": "CFN_LINT", "entity": { - "logicalId": "MyDB", + "logicalId": "RootRole6", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.MasterUsername", - "category": "Best Practice", - "startLine": 7, + "propertyPath": "Properties.RoleName", + "category": "Resource", + "startLine": 131, "startColumn": 7, - "endLine": 7, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 131, + "endColumn": 15, + "ruleDescription": "Validate that all resources have unique primary identifiers", + "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyDB' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3019", + "severity": "ERROR", + "message": "Primary identifiers {'BucketName': 'us-east-1'} should have unique values across the resources {'Bucket1', 'Bucket2'}", + "source": "CFN_LINT", "entity": { - "logicalId": "MyDB", + "logicalId": "Bucket1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, + "propertyPath": "Properties.BucketName", + "category": "Resource", + "startLine": 142, "startColumn": 5, - "endLine": 5, + "endLine": 142, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Validate that all resources have unique primary identifiers", "phase": "LINT" - } - ] - }, - "bad/resources/rds/not_enum_master_username_join.yaml": { - "filePath": "bad/resources/rds/not_enum_master_username_join.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3017", - "severity": "FATAL", - "message": "'rdsadmin' at 'MasterUsername' does not satisfy the composition branch constraint (none of ['rdsadmin']): 'rdsadmin' must not be one of ['rdsadmin']", - "source": "SCHEMA", + "ruleId": "E3019", + "severity": "ERROR", + "message": "Primary identifiers {'BucketName': 'us-east-1'} should have unique values across the resources {'Bucket1', 'Bucket2'}", + "source": "CFN_LINT", "entity": { - "logicalId": "JoinedUsername", + "logicalId": "Bucket2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.MasterUsername", - "category": "Schema", - "startLine": 9, + "propertyPath": "Properties.BucketName", + "category": "Resource", + "startLine": 150, "startColumn": 7, - "endLine": 9, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Value not valid under anyOf", - "phase": "SCHEMA" + "endLine": 150, + "endColumn": 17, + "ruleDescription": "Validate that all resources have unique primary identifiers", + "phase": "LINT" }, { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "ruleId": "E3019", + "severity": "ERROR", + "message": "Primary identifiers {'Name': 'myProjectName'} should have unique values across the resources {'Project1', 'Project2'}", "source": "CFN_LINT", "entity": { - "logicalId": "JoinedUsername", + "logicalId": "Project1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::CodeBuild::Project" }, - "propertyPath": "Properties.MasterUsername.Fn::Join", - "category": "Intrinsic Function", - "startLine": 9, + "propertyPath": "Properties.Name", + "category": "Resource", + "startLine": 168, "startColumn": 7, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Use Sub instead of Join", + "endLine": 168, + "endColumn": 11, + "ruleDescription": "Validate that all resources have unique primary identifiers", + "phase": "LINT" + }, + { + "ruleId": "E3019", + "severity": "ERROR", + "message": "Primary identifiers {'Name': 'myProjectName'} should have unique values across the resources {'Project1', 'Project2'}", + "source": "CFN_LINT", + "entity": { + "logicalId": "Project2", + "entityType": "Resource", + "resourceType": "AWS::CodeBuild::Project" + }, + "propertyPath": "Properties.Name", + "category": "Resource", + "startLine": 188, + "startColumn": 7, + "endLine": 188, + "endColumn": 11, + "ruleDescription": "Validate that all resources have unique primary identifiers", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "JoinedUsername", + "logicalId": "RootRole", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 8, + "startLine": 17, "startColumn": 7, - "endLine": 8, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "endLine": 17, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "JoinedUsername", + "logicalId": "RootRole", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 9, + "startLine": 18, "startColumn": 7, - "endLine": 9, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "endLine": 18, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } - } - ] - }, - "bad/resources/s3/access-control-obsolete.yaml": { - "filePath": "bad/resources/s3/access-control-obsolete.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W3045", - "severity": "WARN", - "message": "AccessControl property is deprecated. Use bucket policies instead", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Bucket1", + "logicalId": "RootRole2", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.AccessControl", - "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", - "category": "Deprecation", - "startLine": 6, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 39, "startColumn": 7, - "endLine": 6, - "endColumn": 20, - "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", - "phase": "LINT", + "endLine": 39, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { - "actualValue": "Private" + "lifecycle": "create-only" } }, { - "ruleId": "W3045", - "severity": "WARN", - "message": "AccessControl property is deprecated. Use bucket policies instead", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Bucket2", + "logicalId": "RootRole2", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.AccessControl", - "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", - "category": "Deprecation", - "startLine": 11, + "propertyPath": "Properties.RoleName", + "category": "Best Practice", + "startLine": 40, "startColumn": 7, - "endLine": 11, - "endColumn": 20, - "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", - "phase": "LINT", + "endLine": 40, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { - "actualValue": "BucketOwnerFullControl" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Bucket1' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket1", + "logicalId": "RootRole3", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 62, + "startColumn": 7, + "endLine": 62, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Bucket2' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket2", + "logicalId": "RootRole3", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 10, - "startColumn": 5, - "endLine": 10, + "startLine": 63, + "startColumn": 7, + "endLine": 63, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/resources/sns/topic_name.yaml": { - "filePath": "bad/resources/sns/topic_name.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3033", - "severity": "FATAL", - "message": "length 362 exceeds maximum 256", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyTopic", + "logicalId": "RootRole4", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.TopicName", - "category": "Schema", - "startLine": 7, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 85, "startColumn": 7, - "endLine": 7, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "String length out of bounds", + "endLine": 85, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "DXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheDXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheDXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheDXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheDXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheSNSTopicName", - "extra": { - "actual_length": 362, - "max_length": 256 - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyTopic", + "logicalId": "RootRole4", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.TopicName", + "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 7, + "startLine": 86, "startColumn": 7, - "endLine": 7, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "endLine": 86, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3655,156 +3509,160 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyTopic", + "logicalId": "RootRole5", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/resources/uniqueNames.yaml": { - "filePath": "bad/resources/uniqueNames.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 1, - "informational": 1, - "debug": 0 + "startLine": 108, + "startColumn": 7, + "endLine": 108, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3007", - "severity": "FATAL", - "message": "'Name' is used as both a parameter and resource logical ID", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Name", + "logicalId": "RootRole5", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::IAM::Role" }, - "category": "Structure", - "startLine": 5, - "startColumn": 3, - "endLine": 5, - "endColumn": 7, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Logical ID used as both parameter and resource", - "phase": "SCHEMA" + "propertyPath": "Properties.RoleName", + "category": "Best Practice", + "startLine": 109, + "startColumn": 7, + "endLine": 109, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsUsEast1'" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Name' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Name", - "entityType": "Parameter" + "logicalId": "RootRole6", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Parameters/Name", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 2, - "startColumn": 3, - "endLine": 2, - "endColumn": 7, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 130, + "startColumn": 7, + "endLine": 130, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Name' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Name", + "logicalId": "RootRole6", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 5, - "startColumn": 3, - "endLine": 5, - "endColumn": 7, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/resources/update_policy_unsupported_e3016.yaml": { - "filePath": "bad/resources/update_policy_unsupported_e3016.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 2, - "debug": 0 + "startLine": 131, + "startColumn": 7, + "endLine": 131, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsUsEast1'" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3016", - "severity": "ERROR", - "message": "UpdatePolicy is not supported on resource type 'AWS::S3::Bucket'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyBucket", + "logicalId": "Bucket2", "entityType": "Resource", "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "UpdatePolicy", - "suggestedFix": "Remove UpdatePolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::ElastiCache::ReplicationGroup, AWS::Elasticsearch::Domain, AWS::Lambda::Alias, AWS::OpenSearchService::Domain", - "category": "Resource", - "startLine": 5, - "startColumn": 5, - "endLine": 5, + "propertyPath": "Properties.BucketName", + "category": "Best Practice", + "startLine": 150, + "startColumn": 7, + "endLine": 150, "endColumn": 17, - "ruleDescription": "Check UpdatePolicy values for Resources", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsUsEast1'" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyBucket", + "logicalId": "Project1", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::CodeBuild::Project" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 9, + "startLine": 168, "startColumn": 7, - "endLine": 9, - "endColumn": 17, + "endLine": 168, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Project2", + "entityType": "Resource", + "resourceType": "AWS::CodeBuild::Project" + }, + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 188, + "startColumn": 7, + "endLine": 188, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3814,1614 +3672,1793 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'RootRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyBucket", + "logicalId": "RootRole", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 8, + "startLine": 7, "startColumn": 5, - "endLine": 8, + "endLine": 7, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/resources_circular_dependency.yaml": { - "filePath": "bad/resources_circular_dependency.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 11, - "counts": { - "fatal": 6, - "errors": 9, - "warnings": 9, - "informational": 38, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource mySecurityGroupVpc1. Circular dependency with [mySecurityGroupVpc1 -> mySecurityGroupVpc2 -> mySecurityGroupVpc1]", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'RootRole2' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc1", + "logicalId": "RootRole2", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Resources/mySecurityGroupVpc1", - "category": "Reference", - "startLine": 23, - "startColumn": 3, - "endLine": 23, - "endColumn": 22, - "ruleDescription": "Circular dependency detected", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource mySecurityGroupVpc2. Circular dependency with [mySecurityGroupVpc2 -> mySecurityGroupVpc1 -> mySecurityGroupVpc2]", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'RootRole3' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc2", + "logicalId": "RootRole3", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Resources/mySecurityGroupVpc2", - "category": "Reference", - "startLine": 33, - "startColumn": 3, - "endLine": 33, - "endColumn": 22, - "ruleDescription": "Circular dependency detected", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 52, + "startColumn": 5, + "endLine": 52, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource mySecurityGroupVpc3. Circular dependency with [mySecurityGroupVpc3 -> mySecurityGroupVpc3]", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'RootRole4' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc3", + "logicalId": "RootRole4", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Resources/mySecurityGroupVpc3", - "category": "Reference", - "startLine": 41, - "startColumn": 3, - "endLine": 41, - "endColumn": 22, - "ruleDescription": "Circular dependency detected", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 75, + "startColumn": 5, + "endLine": 75, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource myRoleToWriteToS3. Circular dependency with [myRoleToWriteToS3 -> myKms -> myInstanceProfile -> myRoleToWriteToS3]", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'RootRole5' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "myRoleToWriteToS3", + "logicalId": "RootRole5", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Resources/myRoleToWriteToS3", - "category": "Reference", - "startLine": 96, - "startColumn": 3, - "endLine": 96, - "endColumn": 20, - "ruleDescription": "Circular dependency detected", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 98, + "startColumn": 5, + "endLine": 98, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource myInstanceProfile. Circular dependency with [myInstanceProfile -> myRoleToWriteToS3 -> myKms -> myInstanceProfile]", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'RootRole6' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "myInstanceProfile", + "logicalId": "RootRole6", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Resources/myInstanceProfile", - "category": "Reference", - "startLine": 145, - "startColumn": 3, - "endLine": 145, - "endColumn": 20, - "ruleDescription": "Circular dependency detected", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 120, + "startColumn": 5, + "endLine": 120, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource myKms. Circular dependency with [myKms -> myInstanceProfile -> myRoleToWriteToS3 -> myKms]", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Bucket1' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "myKms", + "logicalId": "Bucket1", "entityType": "Resource", - "resourceType": "AWS::KMS::Key" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Resources/myKms", - "category": "Reference", - "startLine": 153, - "startColumn": 3, - "endLine": 153, - "endColumn": 8, - "ruleDescription": "Circular dependency detected", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 142, + "startColumn": 5, + "endLine": 142, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E1150", - "severity": "ERROR", - "message": "'sg-1234567' does not match format 'AWS::EC2::SecurityGroup.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "mySecurityGroupVpc1", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.0.SourceSecurityGroupId", - "category": "Intrinsic Function", - "startLine": 30, - "startColumn": 11, - "endLine": 30, - "endColumn": 32, - "ruleDescription": "Validate security group format", - "phase": "SCHEMA", - "context": { - "actualValue": "sg-1234567" - } - }, - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'String' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "myInstanceSub", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 216, - "startColumn": 7, - "endLine": 216, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "String" - } - }, - { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate requires Cpu to be specified", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Bucket2' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "taskdefinition", + "logicalId": "Bucket2", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties", - "suggestedFix": "Set Cpu to a valid Fargate value (256, 512, 1024, 2048, 4096, 8192, 16384, or 32768)", - "category": "Resource", - "startLine": 222, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 149, "startColumn": 5, - "endLine": 222, + "endLine": 149, "endColumn": 15, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate requires Memory to be specified", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Project1' of type 'AWS::CodeBuild::Project' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "taskdefinition", + "logicalId": "Project1", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::CodeBuild::Project" }, - "propertyPath": "Properties", - "suggestedFix": "Set Memory to a valid Fargate value", - "category": "Resource", - "startLine": 222, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 167, "startColumn": 5, - "endLine": 222, + "endLine": 167, "endColumn": 15, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E3048", - "severity": "ERROR", - "message": "Fargate requires NetworkMode to be specified as 'awsvpc'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Project2' of type 'AWS::CodeBuild::Project' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "taskdefinition", + "logicalId": "Project2", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::CodeBuild::Project" }, - "propertyPath": "Properties", - "suggestedFix": "Set NetworkMode to 'awsvpc'", - "category": "Resource", - "startLine": 222, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 187, "startColumn": 5, - "endLine": 222, + "endLine": 187, "endColumn": 15, - "ruleDescription": "Validate ECS Fargate tasks have required properties and values", + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/resources/properties/atleastone.yaml": { + "filePath": "bad/resources/properties/atleastone.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 2, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "E3687", - "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", - "source": "CFN_LINT", + "ruleId": "F3017", + "severity": "FATAL", + "message": "Value is not valid under any of the 3 anyOf schemas for AWS::IAM::Policy (0 branches matched; at least one is required). Required property combinations: ['Groups'] or ['Roles'] or ['Users']. Branch failures: branch 1: 'Users' is a required property; branch 2: 'Groups' is a required property; branch 3: 'Roles' is a required property.", + "source": "SCHEMA", "entity": { - "logicalId": "mySecurityGroupVpc1", + "logicalId": "myPolicy", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.SecurityGroupIngress.0", - "category": "Resource", - "startLine": 29, - "startColumn": 21, - "endLine": 29, - "endColumn": 22, - "ruleDescription": "Validate to and from ports based on the protocol", - "phase": "LINT" + "propertyPath": "Properties", + "category": "Schema", + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Value not valid under anyOf", + "phase": "SCHEMA", + "context": { + "expectedConstraint": "at least one anyOf branch", + "extra": { + "branchCount": 3, + "branchFailures": [ + { + "branch": 1, + "reasons": [ + { + "message": "'Users' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 2, + "reasons": [ + { + "message": "'Groups' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 3, + "reasons": [ + { + "message": "'Roles' is a required property", + "propertyPath": "Properties" + } + ] + } + ], + "compositionKind": "anyOf", + "matchCount": 0, + "matchOutcome": "zeroMatches", + "validPropertyCombinations": [ + [ + "Groups" + ], + [ + "Roles" + ], + [ + "Users" + ] + ] + } + } }, { - "ruleId": "E3687", - "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", - "source": "CFN_LINT", + "ruleId": "F3017", + "severity": "FATAL", + "message": "Value is not valid under any of the 3 anyOf schemas for AWS::IAM::Policy (0 branches matched; at least one is required). Required property combinations: ['Groups'] or ['Roles'] or ['Users']. Branch failures: branch 1: 'Users' is a required property; branch 2: 'Groups' is a required property; branch 3: 'Roles' is a required property.", + "source": "SCHEMA", "entity": { - "logicalId": "mySecurityGroupVpc1", + "logicalId": "myPolicy2", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.SecurityGroupIngress.1", - "category": "Resource", - "startLine": 31, - "startColumn": 21, - "endLine": 31, - "endColumn": 22, - "ruleDescription": "Validate to and from ports based on the protocol", - "phase": "LINT" - }, - { - "ruleId": "E3687", - "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", - "source": "CFN_LINT", - "entity": { - "logicalId": "mySecurityGroupVpc2", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "propertyPath": "Properties", + "category": "Schema", + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 15, + "conditionScenario": { + "cPrimaryRegion": true }, - "propertyPath": "Properties.SecurityGroupIngress.0", - "category": "Resource", - "startLine": 39, - "startColumn": 21, - "endLine": 39, - "endColumn": 22, - "ruleDescription": "Validate to and from ports based on the protocol", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Value not valid under anyOf", + "phase": "SCHEMA", + "context": { + "expectedConstraint": "at least one anyOf branch", + "extra": { + "branchCount": 3, + "branchFailures": [ + { + "branch": 1, + "reasons": [ + { + "message": "'Users' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 2, + "reasons": [ + { + "message": "'Groups' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 3, + "reasons": [ + { + "message": "'Roles' is a required property", + "propertyPath": "Properties" + } + ] + } + ], + "compositionKind": "anyOf", + "matchCount": 0, + "matchOutcome": "zeroMatches", + "validPropertyCombinations": [ + [ + "Groups" + ], + [ + "Roles" + ], + [ + "Users" + ] + ] + } + } }, { - "ruleId": "E3687", + "ruleId": "E3510", "severity": "ERROR", - "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "message": "'Statement' is a required property", "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupVpc3", + "logicalId": "myPolicy", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.SecurityGroupIngress.0", + "propertyPath": "Properties.PolicyDocument", "category": "Resource", - "startLine": 47, - "startColumn": 21, - "endLine": 47, - "endColumn": 22, - "ruleDescription": "Validate to and from ports based on the protocol", + "startLine": 13, + "startColumn": 7, + "endLine": 13, + "endColumn": 21, + "ruleDescription": "Validate identity based IAM policies", "phase": "LINT" + } + ] + }, + "bad/resources/properties/custom.yaml": { + "filePath": "bad/resources/properties/custom.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "bad/resources/properties/list_duplicates.yaml": { + "filePath": "bad/resources/properties/list_duplicates.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 3, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W3005", - "severity": "WARN", - "message": "'myInstanceProfile' dependency already enforced by a 'Ref' at 'Properties.IamInstanceProfile'", - "source": "CFN_LINT", + "ruleId": "F3037", + "severity": "FATAL", + "message": "Array items are not unique", + "source": "SCHEMA", "entity": { - "logicalId": "myInstance", + "logicalId": "IamGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Group" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 51, - "startColumn": 5, - "endLine": 51, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "propertyPath": "Properties.ManagedPolicyArns", + "category": "Schema", + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Array items not unique", + "phase": "SCHEMA" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'myKms' dependency already enforced by a 'Ref' at 'Properties.BucketEncryption.ServerSideEncryptionConfiguration.0.ServerSideEncryptionByDefault.KMSMasterKeyID'", - "source": "CFN_LINT", + "ruleId": "F3037", + "severity": "FATAL", + "message": "Array items are not unique", + "source": "SCHEMA", "entity": { - "logicalId": "myBucket", + "logicalId": "IamGroupWithConditions", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::IAM::Group" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 64, - "startColumn": 5, - "endLine": 64, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'myKms' dependency already enforced by a 'Ref' at 'Properties.Policies.0.PolicyDocument.Statement.0.Condition.StringEquals.s3:x-amz-server-side-encryption-aws-kms-key-id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "myRoleToWriteToS3", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "propertyPath": "Properties.ManagedPolicyArns", + "category": "Schema", + "startLine": 22, + "startColumn": 7, + "endLine": 22, + "endColumn": 24, + "conditionScenario": { + "isPrimaryRegion": true }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 98, - "startColumn": 5, - "endLine": 98, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Array items not unique", + "phase": "SCHEMA", + "context": { + "actualValue": null, + "resolutionSource": "Fn::If on condition 'isPrimaryRegion'" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'myRoleToWriteToS3' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", - "source": "CFN_LINT", + "ruleId": "F3037", + "severity": "FATAL", + "message": "Array items are not unique", + "source": "SCHEMA", "entity": { - "logicalId": "myInstanceProfile", + "logicalId": "IamGroupWithNestedConditions", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::IAM::Group" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 147, - "startColumn": 5, - "endLine": 147, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", - "entity": { - "logicalId": "mySecurityGroupVpc1", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "propertyPath": "Properties.ManagedPolicyArns", + "category": "Schema", + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 24, + "conditionScenario": { + "isPrimaryRegion": true }, - "propertyPath": "Properties.SecurityGroupIngress.0.IpProtocol", - "category": "Best Practice", - "startLine": 29, - "startColumn": 11, - "endLine": 29, - "endColumn": 21, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Array items not unique", + "phase": "SCHEMA", + "context": { + "actualValue": [ + "arn:aws:iam::aws:policy/AdministratorPolicy", + "arn:aws:iam::aws:policy/AdministratorPolicy" + ] + } + } + ] + }, + "bad/resources/properties/primitive_types_map.yaml": { + "filePath": "bad/resources/properties/primitive_types_map.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 4, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W9003", + "ruleId": "W2531", "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupVpc1", + "logicalId": "ExampleLambda", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SecurityGroupIngress.1.IpProtocol", - "category": "Best Practice", - "startLine": 31, - "startColumn": 11, - "endLine": 31, - "endColumn": 21, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 19, + "startColumn": 7, + "endLine": 19, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" + } }, { - "ruleId": "W9003", + "ruleId": "W2531", "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "mySecurityGroupVpc2", + "logicalId": "ExampleLambda1", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SecurityGroupIngress.0.IpProtocol", - "category": "Best Practice", + "propertyPath": "Properties.Runtime", + "category": "Deprecation", "startLine": 39, - "startColumn": 11, + "startColumn": 7, "endLine": 39, - "endColumn": 21, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" + } }, { - "ruleId": "W9003", + "ruleId": "W9013", "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", "entity": { - "logicalId": "mySecurityGroupVpc3", + "logicalId": "ExampleLambda", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SecurityGroupIngress.0.IpProtocol", - "category": "Best Practice", - "startLine": 47, - "startColumn": 11, - "endLine": 47, - "endColumn": 21, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "category": "Security", + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 16, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" }, { - "ruleId": "W9003", + "ruleId": "W9013", "severity": "WARN", - "message": "0 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "ExampleLambda1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.NetworkInterfaces.0.DeviceIndex", - "category": "Best Practice", - "startLine": 61, - "startColumn": 11, - "endLine": 61, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "category": "Security", + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 17, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'ExampleLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "myKms", + "logicalId": "ExampleLambda", "entityType": "Resource", - "resourceType": "AWS::KMS::Key" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 153, - "startColumn": 3, - "endLine": 153, - "endColumn": 8, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'ExampleLambda1' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "myKms", + "logicalId": "ExampleLambda1", "entityType": "Resource", - "resourceType": "AWS::KMS::Key" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 153, - "startColumn": 3, - "endLine": 153, - "endColumn": 8, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 23, + "startColumn": 5, + "endLine": 23, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/resources/properties/string_size.yaml": { + "filePath": "bad/resources/properties/string_size.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 5, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I3042", - "severity": "INFO", - "message": "ARN in Resource myBucketPolicy contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", - "source": "CFN_LINT", + "ruleId": "F3014", + "severity": "FATAL", + "message": "Exactly one of ['Metrics', 'MetricName', 'EvaluationCriteria'] must be specified", + "source": "SCHEMA", "entity": { - "logicalId": "myBucketPolicy", + "logicalId": "CloudWatchAlarm", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::CloudWatch::Alarm" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Resource.Fn::Sub", - "category": "Best Practice", - "startLine": 84, - "startColumn": 13, - "endLine": 84, - "endColumn": 20, - "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", - "phase": "LINT" + "propertyPath": "Properties", + "category": "Schema", + "startLine": 14, + "startColumn": 5, + "endLine": 14, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Exactly one of properties required (requiredXor)", + "phase": "SCHEMA" }, { - "ruleId": "I3042", - "severity": "INFO", - "message": "ARN in Resource myBucketPolicy contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", - "source": "CFN_LINT", + "ruleId": "F3031", + "severity": "FATAL", + "message": "'' does not match pattern '^[a-zA-Z0-9._\\-]+(? Resource2 -> Resource3 -> Resource4 -> Resource5 -> Resource6 -> Resource7 -> Resource8 -> Resource9 -> Resource]", - "source": "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": "Resource", + "logicalId": "DBInstance8", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Resources/Resource", - "category": "Reference", - "startLine": 2, + "category": "Best Practice", + "startLine": 49, "startColumn": 3, - "endLine": 2, - "endColumn": 11, - "ruleDescription": "Circular dependency detected", + "endLine": 49, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource Resource2. Circular dependency with [Resource2 -> Resource3 -> Resource4 -> Resource5 -> Resource6 -> Resource7 -> Resource8 -> Resource9 -> Resource -> Resource2]", - "source": "SCHEMA", + "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": "Resource2", + "logicalId": "DBInstance8", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Resources/Resource2", - "category": "Reference", - "startLine": 7, + "category": "Best Practice", + "startLine": 49, "startColumn": 3, - "endLine": 7, - "endColumn": 12, - "ruleDescription": "Circular dependency detected", + "endLine": 49, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource Resource3. Circular dependency with [Resource3 -> Resource4 -> Resource5 -> Resource6 -> Resource7 -> Resource8 -> Resource9 -> Resource -> Resource2 -> Resource3]", - "source": "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": "Resource3", + "logicalId": "DBInstance9", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Resources/Resource3", - "category": "Reference", - "startLine": 12, + "category": "Best Practice", + "startLine": 56, "startColumn": 3, - "endLine": 12, - "endColumn": 12, - "ruleDescription": "Circular dependency detected", + "endLine": 56, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource Resource4. Circular dependency with [Resource4 -> Resource5 -> Resource6 -> Resource7 -> Resource8 -> Resource9 -> Resource -> Resource2 -> Resource3 -> Resource4]", - "source": "SCHEMA", + "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": "Resource4", + "logicalId": "DBInstance9", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Resources/Resource4", - "category": "Reference", - "startLine": 17, + "category": "Best Practice", + "startLine": 56, "startColumn": 3, - "endLine": 17, - "endColumn": 12, - "ruleDescription": "Circular dependency detected", + "endLine": 56, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource Resource5. Circular dependency with [Resource5 -> Resource6 -> Resource7 -> Resource8 -> Resource9 -> Resource -> Resource2 -> Resource3 -> Resource4 -> Resource5]", - "source": "SCHEMA", + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "Resource5", + "logicalId": "DBInstance2", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Resources/Resource5", - "category": "Reference", - "startLine": 22, - "startColumn": 3, - "endLine": 22, - "endColumn": 12, - "ruleDescription": "Circular dependency detected", + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 18, + "startColumn": 5, + "endLine": 18, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource Resource6. Circular dependency with [Resource6 -> Resource7 -> Resource8 -> Resource9 -> Resource -> Resource2 -> Resource3 -> Resource4 -> Resource5 -> Resource6]", - "source": "SCHEMA", + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "Resource6", + "logicalId": "DBInstance3", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Resources/Resource6", - "category": "Reference", - "startLine": 27, - "startColumn": 3, - "endLine": 27, - "endColumn": 12, - "ruleDescription": "Circular dependency detected", + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 25, + "startColumn": 5, + "endLine": 25, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource Resource7. Circular dependency with [Resource7 -> Resource8 -> Resource9 -> Resource -> Resource2 -> Resource3 -> Resource4 -> Resource5 -> Resource6 -> Resource7]", - "source": "SCHEMA", + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "Resource7", + "logicalId": "DBInstance4", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Resources/Resource7", - "category": "Reference", + "propertyPath": "Properties", + "category": "Best Practice", "startLine": 32, - "startColumn": 3, + "startColumn": 5, "endLine": 32, - "endColumn": 12, - "ruleDescription": "Circular dependency detected", - "phase": "LINT" - }, - { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource Resource8. Circular dependency with [Resource8 -> Resource9 -> Resource -> Resource2 -> Resource3 -> Resource4 -> Resource5 -> Resource6 -> Resource7 -> Resource8]", - "source": "SCHEMA", - "entity": { - "logicalId": "Resource8", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Resources/Resource8", - "category": "Reference", - "startLine": 37, - "startColumn": 3, - "endLine": 37, - "endColumn": 12, - "ruleDescription": "Circular dependency detected", + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource Resource9. Circular dependency with [Resource9 -> Resource -> Resource2 -> Resource3 -> Resource4 -> Resource5 -> Resource6 -> Resource7 -> Resource8 -> Resource9]", - "source": "SCHEMA", + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "Resource9", + "logicalId": "DBInstance7", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Resources/Resource9", - "category": "Reference", - "startLine": 42, - "startColumn": 3, - "endLine": 42, - "endColumn": 12, - "ruleDescription": "Circular dependency detected", + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 44, + "startColumn": 5, + "endLine": 44, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'Resource' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "Resource", + "logicalId": "DBInstance8", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 4, + "startLine": 51, "startColumn": 5, - "endLine": 4, + "endLine": 51, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'Resource2' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "Resource2", + "logicalId": "DBInstance9", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 9, + "startLine": 58, "startColumn": 5, - "endLine": 9, + "endLine": 58, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Resource3' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource3", + "logicalId": "DBInstance1", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Engine", "category": "Best Practice", "startLine": 14, - "startColumn": 5, + "startColumn": 7, "endLine": 14, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Resource4' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource4", + "logicalId": "DBInstance2", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 19, - "startColumn": 5, - "endLine": 19, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 20, + "startColumn": 7, + "endLine": 20, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Resource5' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Resource5", + "logicalId": "DBInstance3", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 24, - "startColumn": 5, - "endLine": 24, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 27, + "startColumn": 7, + "endLine": 27, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "DBInstance4", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 34, + "startColumn": 7, + "endLine": 34, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "DBInstance5", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 40, + "startColumn": 7, + "endLine": 40, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "parameter 'DatabaseEngine' (type String)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "DBInstance7", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 46, + "startColumn": 7, + "endLine": 46, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "DBInstance8", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 53, + "startColumn": 7, + "endLine": 53, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "DBInstance9", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 60, + "startColumn": 7, + "endLine": 60, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource6' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'DBInstance1' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource6", + "logicalId": "DBInstance1", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 29, + "startLine": 12, "startColumn": 5, - "endLine": 29, + "endLine": 12, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -5429,19 +5466,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource7' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'DBInstance2' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource7", + "logicalId": "DBInstance2", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 34, + "startLine": 18, "startColumn": 5, - "endLine": 34, + "endLine": 18, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -5449,19 +5486,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource8' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'DBInstance3' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource8", + "logicalId": "DBInstance3", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 39, + "startLine": 25, "startColumn": 5, - "endLine": 39, + "endLine": 25, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -5469,132 +5506,115 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource9' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'DBInstance4' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource9", + "logicalId": "DBInstance4", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 42, - "startColumn": 3, - "endLine": 42, - "endColumn": 12, + "startLine": 32, + "startColumn": 5, + "endLine": 32, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/resources_circular_dependency_dependson.yaml": { - "filePath": "bad/resources_circular_dependency_dependson.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 2, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource Resource. Circular dependency with [Resource -> Resource2 -> Resource]", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DBInstance5' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource", + "logicalId": "DBInstance5", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Resources/Resource", - "category": "Reference", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 11, - "ruleDescription": "Circular dependency detected", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 38, + "startColumn": 5, + "endLine": 38, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "F3004", - "severity": "FATAL", - "message": "Circular Dependencies for resource Resource2. Circular dependency with [Resource2 -> Resource -> Resource2]", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DBInstance7' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Resource2", + "logicalId": "DBInstance7", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Resources/Resource2", - "category": "Reference", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 12, - "ruleDescription": "Circular dependency detected", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 44, + "startColumn": 5, + "endLine": 44, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'DBInstance8' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource", + "logicalId": "DBInstance8", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 11, + "startLine": 51, + "startColumn": 5, + "endLine": 51, + "endColumn": 15, "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", + "message": "Resource 'DBInstance9' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource2", + "logicalId": "DBInstance9", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 12, + "startLine": 58, + "startColumn": 5, + "endLine": 58, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/resources_cloudfront_invalid_aliases.yaml": { - "filePath": "bad/resources_cloudfront_invalid_aliases.yaml", + "bad/resources/rds/not_enum_master_username.yaml": { + "filePath": "bad/resources/rds/not_enum_master_username.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 0, - "errors": 8, - "warnings": 0, - "informational": 1, + "fatal": 1, + "errors": 0, + "warnings": 1, + "informational": 6, "debug": 0 }, "suppressed": 0, @@ -5603,166 +5623,154 @@ }, "diagnostics": [ { - "ruleId": "E3013", - "severity": "ERROR", - "message": "CloudFront alias 'email.*.example.com' has wildcard in invalid position", - "source": "CFN_LINT", + "ruleId": "F3017", + "severity": "FATAL", + "message": "'rdsadmin' at 'MasterUsername' does not satisfy the composition branch constraint (none of ['rdsadmin']): 'rdsadmin' must not be one of ['rdsadmin']", + "source": "SCHEMA", "entity": { - "logicalId": "CloudFrontDistribution", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.DistributionConfig.Aliases.13", - "category": "Resource", - "startLine": 21, - "startColumn": 13, - "endLine": 21, - "endColumn": 15, - "ruleDescription": "CloudFront Aliases", - "phase": "LINT" + "propertyPath": "Properties.MasterUsername", + "category": "Schema", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Value not valid under anyOf", + "phase": "SCHEMA" }, { - "ruleId": "E3013", - "severity": "ERROR", - "message": "CloudFront alias 'WWW.EXAMPLE.COM' is not a valid domain name", + "ruleId": "W2501", + "severity": "WARN", + "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", "source": "CFN_LINT", "entity": { - "logicalId": "CloudFrontDistribution", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.DistributionConfig.Aliases.14", - "category": "Resource", - "startLine": 22, - "startColumn": 13, - "endLine": 22, - "endColumn": 15, - "ruleDescription": "CloudFront Aliases", + "propertyPath": "Properties.MasterUserPassword", + "category": "Security", + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 25, + "ruleDescription": "Check if Password Properties are correctly configured", "phase": "LINT" }, { - "ruleId": "E3013", - "severity": "ERROR", - "message": "CloudFront alias '-example.com' is not a valid domain name", + "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": "CloudFrontDistribution", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.DistributionConfig.Aliases.15", - "category": "Resource", - "startLine": 23, - "startColumn": 13, - "endLine": 23, - "endColumn": 15, - "ruleDescription": "CloudFront Aliases", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 7, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "E3013", - "severity": "ERROR", - "message": "CloudFront alias 'example.c' is not a valid domain name", + "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": "CloudFrontDistribution", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.DistributionConfig.Aliases.16", - "category": "Resource", - "startLine": 24, - "startColumn": 13, - "endLine": 24, - "endColumn": 15, - "ruleDescription": "CloudFront Aliases", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 7, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "E3013", - "severity": "ERROR", - "message": "CloudFront alias 'www.example.com ' is not a valid domain name", + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "CloudFrontDistribution", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.DistributionConfig.Aliases.17", - "category": "Resource", - "startLine": 25, - "startColumn": 13, - "endLine": 25, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, "endColumn": 15, - "ruleDescription": "CloudFront Aliases", + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "E3013", - "severity": "ERROR", - "message": "CloudFront alias 'www.-example.com' is not a valid domain name", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CloudFrontDistribution", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.DistributionConfig.Aliases.18", - "category": "Resource", - "startLine": 26, - "startColumn": 13, - "endLine": 26, - "endColumn": 15, - "ruleDescription": "CloudFront Aliases", - "phase": "LINT" - }, - { - "ruleId": "E3013", - "severity": "ERROR", - "message": "CloudFront alias '-www.example.com' is not a valid domain name", - "source": "CFN_LINT", - "entity": { - "logicalId": "CloudFrontDistribution", - "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" - }, - "propertyPath": "Properties.DistributionConfig.Aliases.19", - "category": "Resource", - "startLine": 27, - "startColumn": 13, - "endLine": 27, - "endColumn": 15, - "ruleDescription": "CloudFront Aliases", - "phase": "LINT" + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "E3013", - "severity": "ERROR", - "message": "CloudFront alias 'www.example.com-' is not a valid domain name", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CloudFrontDistribution", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.DistributionConfig.Aliases.20", - "category": "Resource", - "startLine": 28, - "startColumn": 13, - "endLine": 28, - "endColumn": 15, - "ruleDescription": "CloudFront Aliases", - "phase": "LINT" + "propertyPath": "Properties.MasterUsername", + "category": "Best Practice", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CloudFrontDistribution' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", + "message": "Resource 'MyDB' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CloudFrontDistribution", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::RDS::DBCluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -5776,8 +5784,8 @@ } ] }, - "bad/resources_cognito_userpool_tag_is_list.yaml": { - "filePath": "bad/resources_cognito_userpool_tag_is_list.yaml", + "bad/resources/rds/not_enum_master_username_join.yaml": { + "filePath": "bad/resources/rds/not_enum_master_username_join.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, @@ -5785,7 +5793,7 @@ "fatal": 1, "errors": 0, "warnings": 0, - "informational": 2, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -5794,86 +5802,102 @@ }, "diagnostics": [ { - "ruleId": "F3012", + "ruleId": "F3017", "severity": "FATAL", - "message": "[{'Key': 'Key1', 'Value': 'Value1'}, {'Key': 'Key2', 'Value': 'Value2'}] is not of type 'object'", + "message": "'rdsadmin' at 'MasterUsername' does not satisfy the composition branch constraint (none of ['rdsadmin']): 'rdsadmin' must not be one of ['rdsadmin']", "source": "SCHEMA", "entity": { - "logicalId": "MyCognitoUserPool", + "logicalId": "JoinedUsername", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPool" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.UserPoolTags", + "propertyPath": "Properties.MasterUsername", "category": "Schema", - "startLine": 16, + "startLine": 9, "startColumn": 7, - "endLine": 16, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property type mismatch", - "phase": "SCHEMA", - "context": { - "actualValue": [ - { - "Key": "Key1", - "Value": "Value1" - }, - { - "Key": "Key2", - "Value": "Value2" - } - ], - "expectedConstraint": "object" - } + "endLine": 9, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Value not valid under anyOf", + "phase": "SCHEMA" }, { - "ruleId": "I3011", + "ruleId": "I1022", "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)", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "MyCognitoUserPool", + "logicalId": "JoinedUsername", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPool" + "resourceType": "AWS::RDS::DBCluster" }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.MasterUsername.Fn::Join", + "category": "Intrinsic Function", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Use Sub instead of Join", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyCognitoUserPool", + "logicalId": "JoinedUsername", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPool" + "resourceType": "AWS::RDS::DBCluster" }, + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "JoinedUsername", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBCluster" + }, + "propertyPath": "Properties.MasterUsername", + "category": "Best Practice", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } } ] }, - "bad/resources_deletionpolicy.yaml": { - "filePath": "bad/resources_deletionpolicy.yaml", + "bad/resources/s3/access-control-obsolete.yaml": { + "filePath": "bad/resources/s3/access-control-obsolete.yaml", "status": "OK", "metadata": { - "resourcesScanned": 5, + "resourcesScanned": 2, "counts": { - "fatal": 5, + "fatal": 0, "errors": 0, - "warnings": 8, - "informational": 17, + "warnings": 2, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -5882,918 +5906,826 @@ }, "diagnostics": [ { - "ruleId": "F3016", - "severity": "FATAL", - "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, Snapshot, got a list", - "source": "SCHEMA", + "ruleId": "W3045", + "severity": "WARN", + "message": "AccessControl property is deprecated. Use bucket policies instead", + "source": "CFN_LINT", "entity": { - "logicalId": "PolicyList", + "logicalId": "Bucket1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "DeletionPolicy", - "category": "Structure", - "startLine": 16, - "startColumn": 5, - "endLine": 16, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "DeletionPolicy must be valid", - "phase": "SCHEMA" + "propertyPath": "Properties.AccessControl", + "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", + "category": "Deprecation", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 20, + "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", + "phase": "LINT", + "context": { + "actualValue": "Private" + } }, { - "ruleId": "F3016", - "severity": "FATAL", - "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, Snapshot, got 'CopyRegion'", - "source": "SCHEMA", + "ruleId": "W3045", + "severity": "WARN", + "message": "AccessControl property is deprecated. Use bucket policies instead", + "source": "CFN_LINT", "entity": { - "logicalId": "MadeUpPolicy", + "logicalId": "Bucket2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "DeletionPolicy", - "category": "Structure", - "startLine": 23, - "startColumn": 5, - "endLine": 23, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "DeletionPolicy must be valid", - "phase": "SCHEMA" - }, - { - "ruleId": "F3016", - "severity": "FATAL", - "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got 'Snapshot'", - "source": "SCHEMA", + "propertyPath": "Properties.AccessControl", + "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", + "category": "Deprecation", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 20, + "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", + "phase": "LINT", + "context": { + "actualValue": "BucketOwnerFullControl" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Bucket1' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyIAMUser", + "logicalId": "Bucket1", "entityType": "Resource", - "resourceType": "AWS::IAM::User" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "DeletionPolicy", - "category": "Structure", - "startLine": 29, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, "startColumn": 5, - "endLine": 29, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "DeletionPolicy must be valid", - "phase": "SCHEMA" + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "F3016", - "severity": "FATAL", - "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got a list", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Bucket2' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "UnsupportedIntrinsic", + "logicalId": "Bucket2", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::WaitConditionHandle" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "DeletionPolicy", - "category": "Structure", - "startLine": 32, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 10, "startColumn": 5, - "endLine": 32, - "endColumn": 19, - "ruleDescription": "DeletionPolicy must be valid", - "phase": "SCHEMA" + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/resources/sns/topic_name.yaml": { + "filePath": "bad/resources/sns/topic_name.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "F3016", + "ruleId": "F3033", "severity": "FATAL", - "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, Snapshot, got an object", + "message": "length 362 exceeds maximum 256", "source": "SCHEMA", "entity": { - "logicalId": "InvalidMapping", + "logicalId": "MyTopic", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "DeletionPolicy", - "category": "Structure", - "startLine": 43, - "startColumn": 5, - "endLine": 43, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "DeletionPolicy must be valid", - "phase": "SCHEMA" + "propertyPath": "Properties.TopicName", + "category": "Schema", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "String length out of bounds", + "phase": "SCHEMA", + "context": { + "actualValue": "DXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheDXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheDXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheDXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheDXPPuqwhVLODAIIVeagGODxciscAVDptCqTYUlDZCNoFchzHdsWBvtQVHjLldJSLrjgbheSNSTopicName", + "extra": { + "actual_length": 362, + "max_length": 256 + } + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'DBPolicy' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DBPolicy", - "entityType": "Parameter" + "logicalId": "MyTopic", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Parameters/DBPolicy", + "propertyPath": "Properties.TopicName", "category": "Best Practice", - "startLine": 6, - "startColumn": 3, - "endLine": 6, - "endColumn": 11, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "PolicyList", + "logicalId": "MyTopic", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::SNS::Topic" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, - "startColumn": 3, - "endLine": 10, - "endColumn": 13, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/resources/uniqueNames.yaml": { + "filePath": "bad/resources/uniqueNames.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 1, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", - "source": "CFN_LINT", + "ruleId": "F3007", + "severity": "FATAL", + "message": "'Name' is used as both a parameter and resource logical ID", + "source": "SCHEMA", "entity": { - "logicalId": "MadeUpPolicy", + "logicalId": "Name", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::SNS::Topic" }, - "category": "Best Practice", - "startLine": 17, + "category": "Structure", + "startLine": 5, "startColumn": 3, - "endLine": 17, - "endColumn": 15, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", - "phase": "LINT" + "endLine": 5, + "endColumn": 7, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Logical ID used as both parameter and resource", + "phase": "SCHEMA" }, { - "ruleId": "W3011", + "ruleId": "W2001", "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "message": "Parameter 'Name' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "MyIAMUser", - "entityType": "Resource", - "resourceType": "AWS::IAM::User" + "logicalId": "Name", + "entityType": "Parameter" }, + "propertyPath": "Parameters/Name", "category": "Best Practice", - "startLine": 24, + "startLine": 2, "startColumn": 3, - "endLine": 24, - "endColumn": 12, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "endLine": 2, + "endColumn": 7, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Name' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "UnsupportedIntrinsic", + "logicalId": "Name", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::WaitConditionHandle" + "resourceType": "AWS::SNS::Topic" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 30, + "startLine": 5, "startColumn": 3, - "endLine": 30, - "endColumn": 23, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", - "phase": "LINT" + "endLine": 5, + "endColumn": 7, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/resources/update_policy_unsupported_e3016.yaml": { + "filePath": "bad/resources/update_policy_unsupported_e3016.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", + "ruleId": "E3016", + "severity": "ERROR", + "message": "UpdatePolicy is not supported on resource type 'AWS::S3::Bucket'", + "source": "CFN_LINT", "entity": { - "logicalId": "PolicyList", + "logicalId": "MyBucket", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 12, + "propertyPath": "UpdatePolicy", + "suggestedFix": "Remove UpdatePolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::ElastiCache::ReplicationGroup, AWS::Elasticsearch::Domain, AWS::Lambda::Alias, AWS::OpenSearchService::Domain", + "category": "Resource", + "startLine": 5, "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", + "endLine": 5, + "endColumn": 17, + "ruleDescription": "Check UpdatePolicy values for Resources", "phase": "LINT" }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MadeUpPolicy", + "logicalId": "MyBucket", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 19, - "startColumn": 5, - "endLine": 19, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "propertyPath": "Properties.BucketName", + "category": "Best Practice", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "InvalidMapping", + "logicalId": "MyBucket", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 39, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 8, "startColumn": 5, - "endLine": 39, + "endLine": 8, "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/resources_circular_dependency.yaml": { + "filePath": "bad/resources_circular_dependency.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 11, + "counts": { + "fatal": 6, + "errors": 9, + "warnings": 9, + "informational": 38, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "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", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource mySecurityGroupVpc1. Circular dependency with [mySecurityGroupVpc1 -> mySecurityGroupVpc2 -> mySecurityGroupVpc1]", + "source": "SCHEMA", "entity": { - "logicalId": "PolicyList", + "logicalId": "mySecurityGroupVpc1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "category": "Best Practice", - "startLine": 10, + "propertyPath": "Resources/mySecurityGroupVpc1", + "category": "Reference", + "startLine": 23, "startColumn": 3, - "endLine": 10, - "endColumn": 13, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 23, + "endColumn": 22, + "ruleDescription": "Circular dependency detected", "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", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource mySecurityGroupVpc2. Circular dependency with [mySecurityGroupVpc2 -> mySecurityGroupVpc1 -> mySecurityGroupVpc2]", + "source": "SCHEMA", "entity": { - "logicalId": "MadeUpPolicy", + "logicalId": "mySecurityGroupVpc2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "category": "Best Practice", - "startLine": 17, + "propertyPath": "Resources/mySecurityGroupVpc2", + "category": "Reference", + "startLine": 33, "startColumn": 3, - "endLine": 17, - "endColumn": 15, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 33, + "endColumn": 22, + "ruleDescription": "Circular dependency detected", "phase": "LINT" }, { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource mySecurityGroupVpc3. Circular dependency with [mySecurityGroupVpc3 -> mySecurityGroupVpc3]", + "source": "SCHEMA", "entity": { - "logicalId": "PolicyList", + "logicalId": "mySecurityGroupVpc3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "propertyPath": "Resources/mySecurityGroupVpc3", + "category": "Reference", + "startLine": 41, + "startColumn": 3, + "endLine": 41, + "endColumn": 22, + "ruleDescription": "Circular dependency detected", "phase": "LINT" }, { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource myRoleToWriteToS3. Circular dependency with [myRoleToWriteToS3 -> myKms -> myInstanceProfile -> myRoleToWriteToS3]", + "source": "SCHEMA", "entity": { - "logicalId": "MadeUpPolicy", + "logicalId": "myRoleToWriteToS3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 19, - "startColumn": 5, - "endLine": 19, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "propertyPath": "Resources/myRoleToWriteToS3", + "category": "Reference", + "startLine": 96, + "startColumn": 3, + "endLine": 96, + "endColumn": 20, + "ruleDescription": "Circular dependency detected", "phase": "LINT" }, { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource myInstanceProfile. Circular dependency with [myInstanceProfile -> myRoleToWriteToS3 -> myKms -> myInstanceProfile]", + "source": "SCHEMA", "entity": { - "logicalId": "InvalidMapping", + "logicalId": "myInstanceProfile", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 39, - "startColumn": 5, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "propertyPath": "Resources/myInstanceProfile", + "category": "Reference", + "startLine": 145, + "startColumn": 3, + "endLine": 145, + "endColumn": 20, + "ruleDescription": "Circular dependency detected", "phase": "LINT" }, { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", - "source": "CFN_LINT", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource myKms. Circular dependency with [myKms -> myInstanceProfile -> myRoleToWriteToS3 -> myKms]", + "source": "SCHEMA", "entity": { - "logicalId": "PolicyList", + "logicalId": "myKms", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::KMS::Key" }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" - }, - { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", - "source": "CFN_LINT", - "entity": { - "logicalId": "MadeUpPolicy", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 21, - "startColumn": 7, - "endLine": 21, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", + "propertyPath": "Resources/myKms", + "category": "Reference", + "startLine": 153, + "startColumn": 3, + "endLine": 153, + "endColumn": 8, + "ruleDescription": "Circular dependency detected", "phase": "LINT" }, { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "ruleId": "E1150", + "severity": "ERROR", + "message": "'sg-1234567' does not match format 'AWS::EC2::SecurityGroup.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "InvalidMapping", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 41, - "startColumn": 7, - "endLine": 41, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "PolicyList", + "logicalId": "mySecurityGroupVpc1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 15, - "startColumn": 7, - "endLine": 15, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "propertyPath": "Properties.SecurityGroupIngress.0.SourceSecurityGroupId", + "category": "Intrinsic Function", + "startLine": 30, + "startColumn": 11, + "endLine": 30, + "endColumn": 32, + "ruleDescription": "Validate security group format", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "actualValue": "sg-1234567" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'String' does not match format 'AWS::EC2::Image.Id'", + "source": "CFN_LINT", "entity": { - "logicalId": "MadeUpPolicy", + "logicalId": "myInstanceSub", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 22, + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 216, "startColumn": 7, - "endLine": 22, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 216, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "actualValue": "String" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate requires Cpu to be specified", + "source": "CFN_LINT", "entity": { - "logicalId": "MyIAMUser", + "logicalId": "taskdefinition", "entityType": "Resource", - "resourceType": "AWS::IAM::User" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.UserName", - "category": "Best Practice", - "startLine": 28, - "startColumn": 7, - "endLine": 28, + "propertyPath": "Properties", + "suggestedFix": "Set Cpu to a valid Fargate value (256, 512, 1024, 2048, 4096, 8192, 16384, or 32768)", + "category": "Resource", + "startLine": 222, + "startColumn": 5, + "endLine": 222, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "InvalidMapping", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 42, - "startColumn": 7, - "endLine": 42, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'PolicyList' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate requires Memory to be specified", + "source": "CFN_LINT", "entity": { - "logicalId": "PolicyList", + "logicalId": "taskdefinition", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 12, + "propertyPath": "Properties", + "suggestedFix": "Set Memory to a valid Fargate value", + "category": "Resource", + "startLine": 222, "startColumn": 5, - "endLine": 12, + "endLine": 222, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MadeUpPolicy' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3048", + "severity": "ERROR", + "message": "Fargate requires NetworkMode to be specified as 'awsvpc'", + "source": "CFN_LINT", "entity": { - "logicalId": "MadeUpPolicy", + "logicalId": "taskdefinition", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 19, + "propertyPath": "Properties", + "suggestedFix": "Set NetworkMode to 'awsvpc'", + "category": "Resource", + "startLine": 222, "startColumn": 5, - "endLine": 19, + "endLine": 222, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Validate ECS Fargate tasks have required properties and values", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyIAMUser' of type 'AWS::IAM::User' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3687", + "severity": "ERROR", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "source": "CFN_LINT", "entity": { - "logicalId": "MyIAMUser", + "logicalId": "mySecurityGroupVpc1", "entityType": "Resource", - "resourceType": "AWS::IAM::User" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 26, - "startColumn": 5, - "endLine": 26, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.SecurityGroupIngress.0", + "category": "Resource", + "startLine": 29, + "startColumn": 21, + "endLine": 29, + "endColumn": 22, + "ruleDescription": "Validate to and from ports based on the protocol", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'InvalidMapping' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3687", + "severity": "ERROR", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "source": "CFN_LINT", "entity": { - "logicalId": "InvalidMapping", + "logicalId": "mySecurityGroupVpc1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 39, - "startColumn": 5, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.SecurityGroupIngress.1", + "category": "Resource", + "startLine": 31, + "startColumn": 21, + "endLine": 31, + "endColumn": 22, + "ruleDescription": "Validate to and from ports based on the protocol", "phase": "LINT" - } - ] - }, - "bad/resources_iam_instanceprofile_roles.yaml": { - "filePath": "bad/resources_iam_instanceprofile_roles.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F3032", - "severity": "FATAL", - "message": "expected maximum item count: 1, found: 2", - "source": "SCHEMA", - "entity": { - "logicalId": "IamUser", - "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" - }, - "propertyPath": "Properties.Roles", - "category": "Schema", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 12, - "ruleDescription": "Array item count out of bounds", - "phase": "SCHEMA", - "context": { - "extra": { - "actual_count": 2, - "max_items": 1, - "min_items": 0 - } - } - } - ] - }, - "bad/resources_updatereplacepolicy.yaml": { - "filePath": "bad/resources_updatereplacepolicy.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 5, - "errors": 0, - "warnings": 9, - "informational": 18, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F0018", - "severity": "FATAL", - "message": "UpdateReplacePolicy must be one of Delete, Retain, Snapshot, got a list", - "source": "SCHEMA", + "ruleId": "E3687", + "severity": "ERROR", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "source": "CFN_LINT", "entity": { - "logicalId": "PolicyList", + "logicalId": "mySecurityGroupVpc2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "UpdateReplacePolicy", - "category": "Structure", - "startLine": 16, - "startColumn": 5, - "endLine": 16, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "UpdateReplacePolicy must be valid", - "phase": "SCHEMA" + "propertyPath": "Properties.SecurityGroupIngress.0", + "category": "Resource", + "startLine": 39, + "startColumn": 21, + "endLine": 39, + "endColumn": 22, + "ruleDescription": "Validate to and from ports based on the protocol", + "phase": "LINT" }, { - "ruleId": "F0018", - "severity": "FATAL", - "message": "UpdateReplacePolicy must be one of Delete, Retain, Snapshot, got 'CopyRegion'", - "source": "SCHEMA", + "ruleId": "E3687", + "severity": "ERROR", + "message": "['FromPort', 'ToPort'] are required properties when using 'IpProtocol' value 1", + "source": "CFN_LINT", "entity": { - "logicalId": "MadeUpPolicy", + "logicalId": "mySecurityGroupVpc3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "UpdateReplacePolicy", - "category": "Structure", - "startLine": 23, - "startColumn": 5, - "endLine": 23, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "UpdateReplacePolicy must be valid", - "phase": "SCHEMA" + "propertyPath": "Properties.SecurityGroupIngress.0", + "category": "Resource", + "startLine": 47, + "startColumn": 21, + "endLine": 47, + "endColumn": 22, + "ruleDescription": "Validate to and from ports based on the protocol", + "phase": "LINT" }, { - "ruleId": "F0018", - "severity": "FATAL", - "message": "UpdateReplacePolicy must be one of Delete, Retain, got 'Snapshot'", - "source": "SCHEMA", + "ruleId": "W3005", + "severity": "WARN", + "message": "'myInstanceProfile' dependency already enforced by a 'Ref' at 'Properties.IamInstanceProfile'", + "source": "CFN_LINT", "entity": { - "logicalId": "MyIAMUser", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::IAM::User" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "UpdateReplacePolicy", - "category": "Structure", - "startLine": 29, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 51, "startColumn": 5, - "endLine": 29, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "UpdateReplacePolicy must be valid", - "phase": "SCHEMA" + "endLine": 51, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "F0018", - "severity": "FATAL", - "message": "UpdateReplacePolicy must be one of Delete, Retain, got a list", - "source": "SCHEMA", + "ruleId": "W3005", + "severity": "WARN", + "message": "'myKms' dependency already enforced by a 'Ref' at 'Properties.BucketEncryption.ServerSideEncryptionConfiguration.0.ServerSideEncryptionByDefault.KMSMasterKeyID'", + "source": "CFN_LINT", "entity": { - "logicalId": "UnsupportedIntrinsic", + "logicalId": "myBucket", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::WaitConditionHandle" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "UpdateReplacePolicy", - "category": "Structure", - "startLine": 32, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 64, "startColumn": 5, - "endLine": 32, - "endColumn": 24, - "ruleDescription": "UpdateReplacePolicy must be valid", - "phase": "SCHEMA" + "endLine": 64, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "F0018", - "severity": "FATAL", - "message": "UpdateReplacePolicy must be one of Delete, Retain, Snapshot, got an object", - "source": "SCHEMA", + "ruleId": "W3005", + "severity": "WARN", + "message": "'myKms' dependency already enforced by a 'Ref' at 'Properties.Policies.0.PolicyDocument.Statement.0.Condition.StringEquals.s3:x-amz-server-side-encryption-aws-kms-key-id'", + "source": "CFN_LINT", "entity": { - "logicalId": "InvalidMapping", + "logicalId": "myRoleToWriteToS3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "UpdateReplacePolicy", - "category": "Structure", - "startLine": 43, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 98, "startColumn": 5, - "endLine": 43, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "UpdateReplacePolicy must be valid", - "phase": "SCHEMA" + "endLine": 98, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "W2001", + "ruleId": "W3005", "severity": "WARN", - "message": "Parameter 'DBPolicy' is not referenced anywhere in the template", + "message": "'myRoleToWriteToS3' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", "source": "CFN_LINT", "entity": { - "logicalId": "DBPolicy", - "entityType": "Parameter" + "logicalId": "myInstanceProfile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Parameters/DBPolicy", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 6, - "startColumn": 3, - "endLine": 6, - "endColumn": 11, - "ruleDescription": "Check if Parameters are Used", + "startLine": 147, + "startColumn": 5, + "endLine": 147, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "W3011", + "ruleId": "W9003", "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "message": "1 is not of type 'string' - automatically coerced (number to string)", "source": "CFN_LINT", "entity": { - "logicalId": "PolicyList", + "logicalId": "mySecurityGroupVpc1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, + "propertyPath": "Properties.SecurityGroupIngress.0.IpProtocol", "category": "Best Practice", - "startLine": 10, - "startColumn": 3, - "endLine": 10, - "endColumn": 13, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", - "phase": "LINT" + "startLine": 29, + "startColumn": 11, + "endLine": 29, + "endColumn": 21, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "W3011", + "ruleId": "W9003", "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "message": "1 is not of type 'string' - automatically coerced (number to string)", "source": "CFN_LINT", "entity": { - "logicalId": "MadeUpPolicy", + "logicalId": "mySecurityGroupVpc1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, + "propertyPath": "Properties.SecurityGroupIngress.1.IpProtocol", "category": "Best Practice", - "startLine": 17, - "startColumn": 3, - "endLine": 17, - "endColumn": 15, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", - "phase": "LINT" + "startLine": 31, + "startColumn": 11, + "endLine": 31, + "endColumn": 21, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "W3011", + "ruleId": "W9003", "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "message": "1 is not of type 'string' - automatically coerced (number to string)", "source": "CFN_LINT", "entity": { - "logicalId": "MyIAMUser", + "logicalId": "mySecurityGroupVpc2", "entityType": "Resource", - "resourceType": "AWS::IAM::User" + "resourceType": "AWS::EC2::SecurityGroup" }, + "propertyPath": "Properties.SecurityGroupIngress.0.IpProtocol", "category": "Best Practice", - "startLine": 24, - "startColumn": 3, - "endLine": 24, - "endColumn": 12, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", - "phase": "LINT" + "startLine": 39, + "startColumn": 11, + "endLine": 39, + "endColumn": 21, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "W3011", + "ruleId": "W9003", "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "message": "1 is not of type 'string' - automatically coerced (number to string)", "source": "CFN_LINT", "entity": { - "logicalId": "UnsupportedIntrinsic", + "logicalId": "mySecurityGroupVpc3", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::WaitConditionHandle" + "resourceType": "AWS::EC2::SecurityGroup" }, + "propertyPath": "Properties.SecurityGroupIngress.0.IpProtocol", "category": "Best Practice", - "startLine": 30, - "startColumn": 3, - "endLine": 30, - "endColumn": 23, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", - "phase": "LINT" + "startLine": 47, + "startColumn": 11, + "endLine": 47, + "endColumn": 21, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "W3011", + "ruleId": "W9003", "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "message": "0 is not of type 'string' - automatically coerced (number to string)", "source": "CFN_LINT", "entity": { - "logicalId": "InvalidMapping", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.NetworkInterfaces.0.DeviceIndex", "category": "Best Practice", - "startLine": 37, - "startColumn": 3, - "endLine": 37, - "endColumn": 17, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", - "phase": "LINT" - }, - { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", - "entity": { - "logicalId": "PolicyList", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" - }, - { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", - "entity": { - "logicalId": "MadeUpPolicy", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 19, - "startColumn": 5, - "endLine": 19, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" - }, - { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", - "entity": { - "logicalId": "InvalidMapping", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 39, - "startColumn": 5, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "startLine": 61, + "startColumn": 11, + "endLine": 61, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { "ruleId": "I3011", @@ -6801,2045 +6733,2155 @@ "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": "PolicyList", + "logicalId": "myKms", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::KMS::Key" }, "category": "Best Practice", - "startLine": 10, + "startLine": 153, "startColumn": 3, - "endLine": 10, - "endColumn": 13, + "endLine": 153, + "endColumn": 8, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "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)", + "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": "MadeUpPolicy", + "logicalId": "myKms", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::KMS::Key" }, "category": "Best Practice", - "startLine": 17, + "startLine": 153, "startColumn": 3, - "endLine": 17, - "endColumn": 15, + "endLine": 153, + "endColumn": 8, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I3042", "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)", + "message": "ARN in Resource myBucketPolicy contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", "source": "CFN_LINT", "entity": { - "logicalId": "InvalidMapping", + "logicalId": "myBucketPolicy", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::BucketPolicy" }, + "propertyPath": "Properties.PolicyDocument.Statement.0.Resource.Fn::Sub", "category": "Best Practice", - "startLine": 37, - "startColumn": 3, - "endLine": 37, - "endColumn": 17, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 84, + "startColumn": 13, + "endLine": 84, + "endColumn": 20, + "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I3042", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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)", + "message": "ARN in Resource myBucketPolicy contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", "source": "CFN_LINT", "entity": { - "logicalId": "PolicyList", + "logicalId": "myBucketPolicy", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Properties", + "propertyPath": "Properties.PolicyDocument.Statement.1.Resource.Fn::Sub", "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "startLine": 92, + "startColumn": 13, + "endLine": 92, + "endColumn": 20, + "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I3042", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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)", + "message": "ARN in Resource myKms contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", "source": "CFN_LINT", "entity": { - "logicalId": "MadeUpPolicy", + "logicalId": "myKms", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::KMS::Key" }, - "propertyPath": "Properties", + "propertyPath": "Properties.KeyPolicy.Statement.0.Principal.AWS.Fn::Sub", "category": "Best Practice", - "startLine": 19, - "startColumn": 5, - "endLine": 19, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "startLine": 165, + "startColumn": 15, + "endLine": 165, + "endColumn": 22, + "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I3042", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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)", + "message": "ARN in Resource myKms contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", "source": "CFN_LINT", "entity": { - "logicalId": "InvalidMapping", + "logicalId": "myKms", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::KMS::Key" }, - "propertyPath": "Properties", + "propertyPath": "Properties.KeyPolicy.Statement.1.Principal.AWS.Fn::Sub", "category": "Best Practice", - "startLine": 39, - "startColumn": 5, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "startLine": 171, + "startColumn": 15, + "endLine": 171, + "endColumn": 22, + "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", "phase": "LINT" }, { - "ruleId": "I3100", + "ruleId": "I3042", "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "message": "ARN in Resource myKms contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", "source": "CFN_LINT", "entity": { - "logicalId": "PolicyList", + "logicalId": "myKms", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::KMS::Key" }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", + "propertyPath": "Properties.KeyPolicy.Statement.2.Principal.AWS.0.Fn::Sub", "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", + "startLine": 192, + "startColumn": 24, + "endLine": 192, + "endColumn": 31, + "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", "phase": "LINT" }, { - "ruleId": "I3100", + "ruleId": "I3042", "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "message": "ARN in Resource myKms contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", "source": "CFN_LINT", "entity": { - "logicalId": "MadeUpPolicy", + "logicalId": "myKms", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::KMS::Key" }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", + "propertyPath": "Properties.KeyPolicy.Statement.3.Principal.AWS.Fn::Sub", "category": "Best Practice", - "startLine": 21, - "startColumn": 7, - "endLine": 21, + "startLine": 204, + "startColumn": 15, + "endLine": 204, "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", + "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", "phase": "LINT" }, { - "ruleId": "I3100", + "ruleId": "I9001", "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", - "source": "CFN_LINT", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "InvalidMapping", + "logicalId": "mySecurityGroupVpc1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 41, + "startLine": 26, "startColumn": 7, - "endLine": 41, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" + "endLine": 26, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PolicyList", + "logicalId": "mySecurityGroupVpc1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 15, + "startLine": 27, "startColumn": 7, - "endLine": 15, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 27, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter 'myVpcId' (type AWS::EC2::VPC::Id)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MadeUpPolicy", + "logicalId": "mySecurityGroupVpc2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 22, + "startLine": 36, "startColumn": 7, - "endLine": 22, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 36, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyIAMUser", + "logicalId": "mySecurityGroupVpc2", "entityType": "Resource", - "resourceType": "AWS::IAM::User" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.UserName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 28, + "startLine": 37, "startColumn": 7, - "endLine": 28, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 37, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter 'myVpcId' (type AWS::EC2::VPC::Id)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "InvalidMapping", + "logicalId": "mySecurityGroupVpc3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 42, + "startLine": 44, "startColumn": 7, - "endLine": 42, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 44, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { - "ruleId": "I9003", + "ruleId": "I9001", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", + "entity": { + "logicalId": "mySecurityGroupVpc3", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" + "startLine": 45, + "startColumn": 7, + "endLine": 45, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'myVpcId' (type AWS::EC2::VPC::Id)" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'PolicyList' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PolicyList", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 54, + "startColumn": 7, + "endLine": 54, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'Ec2ImageId' (type AWS::EC2::Image::Id)" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MadeUpPolicy' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MadeUpPolicy", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 19, - "startColumn": 5, - "endLine": 19, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 55, + "startColumn": 7, + "endLine": 55, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyIAMUser' of type 'AWS::IAM::User' supports Tags but none are configured", + "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyIAMUser", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::IAM::User" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkInterfaces", "category": "Best Practice", - "startLine": 26, - "startColumn": 5, - "endLine": 26, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 56, + "startColumn": 7, + "endLine": 56, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'InvalidMapping' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "InvalidMapping", + "logicalId": "myBucket", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 39, - "startColumn": 5, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/route53.yaml": { - "filePath": "bad/route53.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 11, - "counts": { - "fatal": 0, - "errors": 30, - "warnings": 1, - "informational": 12, - "debug": 0 + "startLine": 71, + "startColumn": 7, + "endLine": 71, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'myBucketName' (type String)" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3023", - "severity": "ERROR", - "message": "TXT record value '\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"' must be enclosed in double quotes", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyTXTRecordSet", + "logicalId": "myBucketPolicy", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Properties.ResourceRecords.0", - "category": "Resource", - "startLine": 32, - "startColumn": 11, - "endLine": 32, - "endColumn": 12, - "ruleDescription": "Validate Route53 RecordSets", - "phase": "LINT" + "propertyPath": "Properties.Bucket", + "category": "Best Practice", + "startLine": 75, + "startColumn": 7, + "endLine": 75, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'myBucket'" + } }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "TXT record value '\"a\"\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\"' must be enclosed in double quotes", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyTXTRecordSet", + "logicalId": "myRoleToWriteToS3", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.ResourceRecords.1", - "category": "Resource", - "startLine": 33, - "startColumn": 11, - "endLine": 33, - "endColumn": 12, - "ruleDescription": "Validate Route53 RecordSets", - "phase": "LINT" + "propertyPath": "Properties.RoleName", + "category": "Best Practice", + "startLine": 100, + "startColumn": 7, + "endLine": 100, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "TXT record value 'test2' must be enclosed in double quotes", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyTXTRecordSet", + "logicalId": "myRoleToWriteToS3", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.ResourceRecords.3", - "category": "Resource", - "startLine": 35, - "startColumn": 11, - "endLine": 35, - "endColumn": 12, - "ruleDescription": "Validate Route53 RecordSets", - "phase": "LINT" + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 110, + "startColumn": 7, + "endLine": 110, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'127.0.0.1' is not a valid IPv6 address for record type 'AAAA'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceProfileName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyAAAARecordSet", + "logicalId": "myInstanceProfile", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties.ResourceRecords.0", - "category": "Resource", - "startLine": 55, - "startColumn": 11, - "endLine": 55, - "endColumn": 12, - "ruleDescription": "Validate Route53 RecordSets", - "phase": "LINT" + "propertyPath": "Properties.InstanceProfileName", + "category": "Best Practice", + "startLine": 149, + "startColumn": 7, + "endLine": 149, + "endColumn": 26, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:1.2.3.4' is not a valid IPv6 address for record type 'AAAA'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyAAAARecordSet", + "logicalId": "myInstanceProfile", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties.ResourceRecords.1", - "category": "Resource", - "startLine": 56, - "startColumn": 11, - "endLine": 56, - "endColumn": 12, - "ruleDescription": "Validate Route53 RecordSets", - "phase": "LINT" + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 150, + "startColumn": 7, + "endLine": 150, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'2001:0db8: 85a3:0:0:8a2e:0370:7334' is not a valid IPv6 address for record type 'AAAA'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyAAAARecordSet", + "logicalId": "myInstanceSub", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ResourceRecords.2", - "category": "Resource", - "startLine": 57, - "startColumn": 11, - "endLine": 57, - "endColumn": 12, - "ruleDescription": "Validate Route53 RecordSets", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 216, + "startColumn": 7, + "endLine": 216, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'1111:2222:3333:4444:5555:6666:7777' is not a valid IPv6 address for record type 'AAAA'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyAAAARecordSet", + "logicalId": "myInstanceSub", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ResourceRecords.3", - "category": "Resource", - "startLine": 58, - "startColumn": 11, - "endLine": 58, - "endColumn": 12, - "ruleDescription": "Validate Route53 RecordSets", - "phase": "LINT" + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 217, + "startColumn": 7, + "endLine": 217, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'1111:2222:3333:4444:5555:6666:7777:8888::' is not a valid IPv6 address for record type 'AAAA'", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyAAAARecordSet", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "taskdefinition", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ResourceRecords.4", - "category": "Resource", - "startLine": 59, - "startColumn": 11, - "endLine": 59, - "endColumn": 12, - "ruleDescription": "Validate Route53 RecordSets", - "phase": "LINT" + "propertyPath": "Properties.RequiresCompatibilities", + "category": "Best Practice", + "startLine": 223, + "startColumn": 7, + "endLine": 223, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "CAA record value '127.0.0.1' must match format: flag tag 'value'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyCAARecordSet", + "logicalId": "taskdefinition", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ResourceRecords.0", - "category": "Resource", - "startLine": 69, - "startColumn": 11, - "endLine": 69, - "endColumn": 12, - "ruleDescription": "Validate Route53 RecordSets", - "phase": "LINT" + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 226, + "startColumn": 7, + "endLine": 226, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "CAA record value '0 issue amazon.com; henk' must match format: flag tag 'value'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Volumes' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyCAARecordSet", + "logicalId": "taskdefinition", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ResourceRecords.1", - "category": "Resource", - "startLine": 70, - "startColumn": 11, - "endLine": 70, - "endColumn": 12, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.Volumes", + "category": "Best Practice", + "startLine": 258, + "startColumn": 7, + "endLine": 258, + "endColumn": 14, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "CNAME records must have at most 1 ResourceRecord", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'mySecurityGroupVpc1' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyCNAMERecordSet", + "logicalId": "mySecurityGroupVpc1", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ResourceRecords", - "category": "Resource", - "startLine": 79, - "startColumn": 7, - "endLine": 79, - "endColumn": 22, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 25, + "startColumn": 5, + "endLine": 25, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "CNAME records must have at most 1 ResourceRecord", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'mySecurityGroupVpc2' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyCNAMERecordSetConditions", + "logicalId": "mySecurityGroupVpc2", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ResourceRecords", - "category": "Resource", - "startLine": 93, - "startColumn": 11, - "endLine": 93, - "endColumn": 12, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 35, + "startColumn": 5, + "endLine": 35, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "MX record value '127.0.0.1' must match format: priority domain", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'mySecurityGroupVpc3' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyMXRecordSet", + "logicalId": "mySecurityGroupVpc3", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ResourceRecords.0", - "category": "Resource", - "startLine": 104, - "startColumn": 11, - "endLine": 104, - "endColumn": 12, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 43, + "startColumn": 5, + "endLine": 43, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "MX record value '10 my domain' must match format: priority domain", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyMXRecordSet", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ResourceRecords.1", - "category": "Resource", - "startLine": 105, - "startColumn": 11, - "endLine": 105, - "endColumn": 12, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 52, + "startColumn": 5, + "endLine": 52, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "TXT record value 'test4' must be enclosed in double quotes", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "myBucket", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.RecordSets.0.ResourceRecords.0", - "category": "Resource", - "startLine": 127, - "startColumn": 15, - "endLine": 127, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 65, + "startColumn": 5, + "endLine": 65, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'a.example.com' is not a valid IPv4 address for record type 'A'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myRoleToWriteToS3' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "myRoleToWriteToS3", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RecordSets.1.ResourceRecords.0", - "category": "Resource", - "startLine": 132, - "startColumn": 15, - "endLine": 132, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", - "phase": "LINT" - }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 99, + "startColumn": 5, + "endLine": 99, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'1111:2222:3333:4444:55556666:7777:8888' is not a valid IPv6 address for record type 'AAAA'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myKms' of type 'AWS::KMS::Key' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "myKms", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::KMS::Key" }, - "propertyPath": "Properties.RecordSets.2.ResourceRecords.0", - "category": "Resource", - "startLine": 137, - "startColumn": 15, - "endLine": 137, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 155, + "startColumn": 5, + "endLine": 155, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'1111:2222:3333:4444:5555:6666:7777:8888:' is not a valid IPv6 address for record type 'AAAA'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myInstanceSub' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "myInstanceSub", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.RecordSets.2.ResourceRecords.1", - "category": "Resource", - "startLine": 138, - "startColumn": 15, - "endLine": 138, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 215, + "startColumn": 5, + "endLine": 215, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'1111:2222:3333:::5555:6666:7777:8888' is not a valid IPv6 address for record type 'AAAA'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'taskdefinition' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "taskdefinition", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RecordSets.2.ResourceRecords.2", - "category": "Resource", - "startLine": 139, - "startColumn": 15, - "endLine": 139, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 222, + "startColumn": 5, + "endLine": 222, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/resources_circular_dependency_2.yaml": { + "filePath": "bad/resources_circular_dependency_2.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 9, + "counts": { + "fatal": 9, + "errors": 0, + "warnings": 0, + "informational": 9, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'1111::3333:4444:5555::7777:8888' is not a valid IPv6 address for record type 'AAAA'", - "source": "CFN_LINT", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource Resource. Circular dependency with [Resource -> Resource2 -> Resource3 -> Resource4 -> Resource5 -> Resource6 -> Resource7 -> Resource8 -> Resource9 -> Resource]", + "source": "SCHEMA", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "Resource", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.RecordSets.2.ResourceRecords.3", - "category": "Resource", - "startLine": 140, - "startColumn": 15, - "endLine": 140, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Resources/Resource", + "category": "Reference", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 11, + "ruleDescription": "Circular dependency detected", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'::1.2.3.' is not a valid IPv6 address for record type 'AAAA'", - "source": "CFN_LINT", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource Resource2. Circular dependency with [Resource2 -> Resource3 -> Resource4 -> Resource5 -> Resource6 -> Resource7 -> Resource8 -> Resource9 -> Resource -> Resource2]", + "source": "SCHEMA", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "Resource2", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.RecordSets.2.ResourceRecords.4", - "category": "Resource", - "startLine": 141, - "startColumn": 15, - "endLine": 141, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Resources/Resource2", + "category": "Reference", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 12, + "ruleDescription": "Circular dependency detected", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "':1111:2222:3333:4444:5555::7777:8888' is not a valid IPv6 address for record type 'AAAA'", - "source": "CFN_LINT", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource Resource3. Circular dependency with [Resource3 -> Resource4 -> Resource5 -> Resource6 -> Resource7 -> Resource8 -> Resource9 -> Resource -> Resource2 -> Resource3]", + "source": "SCHEMA", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "Resource3", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.RecordSets.2.ResourceRecords.5", - "category": "Resource", - "startLine": 142, - "startColumn": 15, - "endLine": 142, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Resources/Resource3", + "category": "Reference", + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 12, + "ruleDescription": "Circular dependency detected", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'127.0.0.1 ' is not a valid IPv4 address for record type 'A'", - "source": "CFN_LINT", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource Resource4. Circular dependency with [Resource4 -> Resource5 -> Resource6 -> Resource7 -> Resource8 -> Resource9 -> Resource -> Resource2 -> Resource3 -> Resource4]", + "source": "SCHEMA", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "Resource4", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.RecordSets.3.ResourceRecords.0", - "category": "Resource", - "startLine": 147, - "startColumn": 15, - "endLine": 147, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Resources/Resource4", + "category": "Reference", + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 12, + "ruleDescription": "Circular dependency detected", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'256.10.1.256' is not a valid IPv4 address for record type 'A'", - "source": "CFN_LINT", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource Resource5. Circular dependency with [Resource5 -> Resource6 -> Resource7 -> Resource8 -> Resource9 -> Resource -> Resource2 -> Resource3 -> Resource4 -> Resource5]", + "source": "SCHEMA", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "Resource5", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.RecordSets.4.ResourceRecords.0", - "category": "Resource", - "startLine": 152, - "startColumn": 15, - "endLine": 152, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Resources/Resource5", + "category": "Reference", + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 12, + "ruleDescription": "Circular dependency detected", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "CAA record value '1 issue \"amazon.com; example.com\"' must match format: flag tag 'value'", - "source": "CFN_LINT", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource Resource6. Circular dependency with [Resource6 -> Resource7 -> Resource8 -> Resource9 -> Resource -> Resource2 -> Resource3 -> Resource4 -> Resource5 -> Resource6]", + "source": "SCHEMA", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "Resource6", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.RecordSets.5.ResourceRecords.0", - "category": "Resource", - "startLine": 157, - "startColumn": 15, - "endLine": 157, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Resources/Resource6", + "category": "Reference", + "startLine": 27, + "startColumn": 3, + "endLine": 27, + "endColumn": 12, + "ruleDescription": "Circular dependency detected", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "CAA record value 'A issue \"amazon.com; example.com\"' must match format: flag tag 'value'", - "source": "CFN_LINT", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource Resource7. Circular dependency with [Resource7 -> Resource8 -> Resource9 -> Resource -> Resource2 -> Resource3 -> Resource4 -> Resource5 -> Resource6 -> Resource7]", + "source": "SCHEMA", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "Resource7", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.RecordSets.5.ResourceRecords.1", - "category": "Resource", - "startLine": 158, - "startColumn": 15, - "endLine": 158, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Resources/Resource7", + "category": "Reference", + "startLine": 32, + "startColumn": 3, + "endLine": 32, + "endColumn": 12, + "ruleDescription": "Circular dependency detected", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "CAA record value '0 special-value \"amazon.com\"' must match format: flag tag 'value'", - "source": "CFN_LINT", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource Resource8. Circular dependency with [Resource8 -> Resource9 -> Resource -> Resource2 -> Resource3 -> Resource4 -> Resource5 -> Resource6 -> Resource7 -> Resource8]", + "source": "SCHEMA", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "Resource8", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.RecordSets.5.ResourceRecords.2", - "category": "Resource", - "startLine": 159, - "startColumn": 15, - "endLine": 159, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Resources/Resource8", + "category": "Reference", + "startLine": 37, + "startColumn": 3, + "endLine": 37, + "endColumn": 12, + "ruleDescription": "Circular dependency detected", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "MX record value 'mx1.example.com' must match format: priority domain", - "source": "CFN_LINT", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource Resource9. Circular dependency with [Resource9 -> Resource -> Resource2 -> Resource3 -> Resource4 -> Resource5 -> Resource6 -> Resource7 -> Resource8 -> Resource9]", + "source": "SCHEMA", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "Resource9", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.RecordSets.7.ResourceRecords.0", - "category": "Resource", - "startLine": 169, - "startColumn": 15, - "endLine": 169, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Resources/Resource9", + "category": "Reference", + "startLine": 42, + "startColumn": 3, + "endLine": 42, + "endColumn": 12, + "ruleDescription": "Circular dependency detected", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "MX record value '65536 mx2.example.com' must match format: priority domain", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "Resource", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.RecordSets.7.ResourceRecords.1", - "category": "Resource", - "startLine": 170, - "startColumn": 15, - "endLine": 170, - "endColumn": 16, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E3029", - "severity": "ERROR", - "message": "TTL must not be set when AliasTarget is specified", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource2' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyAliasRecordSet", + "logicalId": "Resource2", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.TTL", - "category": "Resource", - "startLine": 113, - "startColumn": 7, - "endLine": 113, - "endColumn": 10, - "ruleDescription": "Validate Route53 record set aliases", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W1054", - "severity": "WARN", - "message": "Found a string 'AWS::Region' that appears to be a pseudo parameter reference; use 'Ref: AWS::Region' instead", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource3' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyHostedZone", + "logicalId": "Resource3", "entityType": "Resource", - "resourceType": "AWS::Route53::HostedZone" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.VPCs.0.VPCRegion", - "suggestedFix": "Use Ref to reference pseudo parameters instead of embedding them as literal strings", - "category": "Intrinsic Function", - "startLine": 22, - "startColumn": 11, - "endLine": 22, - "endColumn": 20, - "ruleDescription": "String value matches a pseudo parameter; use Ref instead", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 14, + "startColumn": 5, + "endLine": 14, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Resource 'Resource4' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyHostedZone", + "logicalId": "Resource4", "entityType": "Resource", - "resourceType": "AWS::Route53::HostedZone" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 19, - "startColumn": 7, + "startColumn": 5, "endLine": 19, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Resource5' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyTXTRecordSet", + "logicalId": "Resource5", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.HostedZoneId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 27, - "startColumn": 7, - "endLine": 27, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyHostedZone'" - } + "startLine": 24, + "startColumn": 5, + "endLine": 24, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Resource6' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyARecordSet", + "logicalId": "Resource6", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.HostedZoneId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 40, - "startColumn": 7, - "endLine": 40, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyHostedZone'" - } + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Resource7' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyAAAARecordSet", + "logicalId": "Resource7", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.HostedZoneId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 50, - "startColumn": 7, - "endLine": 50, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyHostedZone'" - } + "startLine": 34, + "startColumn": 5, + "endLine": 34, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Resource8' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyCAARecordSet", + "logicalId": "Resource8", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.HostedZoneId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 64, - "startColumn": 7, - "endLine": 64, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyHostedZone'" - } + "startLine": 39, + "startColumn": 5, + "endLine": 39, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Resource9' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyCNAMERecordSet", + "logicalId": "Resource9", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.HostedZoneId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 75, - "startColumn": 7, - "endLine": 75, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyHostedZone'" - } + "startLine": 42, + "startColumn": 3, + "endLine": 42, + "endColumn": 12, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/resources_circular_dependency_dependson.yaml": { + "filePath": "bad/resources_circular_dependency_dependson.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 2, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource Resource. Circular dependency with [Resource -> Resource2 -> Resource]", + "source": "SCHEMA", "entity": { - "logicalId": "MyCNAMERecordSetConditions", + "logicalId": "Resource", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.HostedZoneId", - "category": "Best Practice", - "startLine": 86, - "startColumn": 7, - "endLine": 86, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyHostedZone'" - } + "propertyPath": "Resources/Resource", + "category": "Reference", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 11, + "ruleDescription": "Circular dependency detected", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3004", + "severity": "FATAL", + "message": "Circular Dependencies for resource Resource2. Circular dependency with [Resource2 -> Resource -> Resource2]", + "source": "SCHEMA", "entity": { - "logicalId": "MyMXRecordSet", + "logicalId": "Resource2", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.HostedZoneId", - "category": "Best Practice", - "startLine": 99, - "startColumn": 7, - "endLine": 99, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyHostedZone'" - } + "propertyPath": "Resources/Resource2", + "category": "Reference", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 12, + "ruleDescription": "Circular dependency detected", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Resource' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyAliasRecordSet", + "logicalId": "Resource", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.HostedZoneId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 110, - "startColumn": 7, - "endLine": 110, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyHostedZone'" - } + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 11, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Resource2' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyRecordSetGroup", + "logicalId": "Resource2", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.HostedZoneId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 121, - "startColumn": 7, - "endLine": 121, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyHostedZone'" - } + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 12, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/resources_cloudfront_invalid_aliases.yaml": { + "filePath": "bad/resources_cloudfront_invalid_aliases.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 8, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3013", + "severity": "ERROR", + "message": "CloudFront alias 'email.*.example.com' has wildcard in invalid position", + "source": "CFN_LINT", "entity": { - "logicalId": "PoorlyConfiguredRoute53", + "logicalId": "CloudFrontDistribution", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Properties.HostedZoneId", - "category": "Best Practice", - "startLine": 174, - "startColumn": 7, - "endLine": 174, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyHostedZone'" - } - }, - { - "ruleId": "I9002", - "severity": "INFO", - "message": "'TTL' is ignored in this configuration (from extension)", - "source": "ENGINE", - "entity": { - "logicalId": "MyAliasRecordSet", - "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" - }, - "propertyPath": "Properties.TTL", - "category": "Best Practice", - "startLine": 113, - "startColumn": 7, - "endLine": 113, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Property is ignored in this configuration (from extension)", - "phase": "SCHEMA" - } - ] - }, - "bad/route53_conditional_record_arrays.yaml": { - "filePath": "bad/route53_conditional_record_arrays.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 10, - "counts": { - "fatal": 0, - "errors": 10, - "warnings": 0, - "informational": 10, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'invalid-standalone-true' is not a valid IPv4 address for record type 'A'", - "source": "CFN_LINT", - "entity": { - "logicalId": "StandaloneInvalidTrue", - "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" - }, - "propertyPath": "Properties.ResourceRecords.0", + "propertyPath": "Properties.DistributionConfig.Aliases.13", "category": "Resource", "startLine": 21, - "startColumn": 12, + "startColumn": 13, "endLine": 21, - "endColumn": 13, - "ruleDescription": "Validate Route53 RecordSets", + "endColumn": 15, + "ruleDescription": "CloudFront Aliases", "phase": "LINT" }, { - "ruleId": "E3023", + "ruleId": "E3013", "severity": "ERROR", - "message": "'invalid-standalone-false' is not a valid IPv4 address for record type 'A'", + "message": "CloudFront alias 'WWW.EXAMPLE.COM' is not a valid domain name", "source": "CFN_LINT", "entity": { - "logicalId": "StandaloneInvalidFalse", + "logicalId": "CloudFrontDistribution", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Properties.ResourceRecords.0", + "propertyPath": "Properties.DistributionConfig.Aliases.14", "category": "Resource", - "startLine": 33, - "startColumn": 12, - "endLine": 33, - "endColumn": 13, - "ruleDescription": "Validate Route53 RecordSets", + "startLine": 22, + "startColumn": 13, + "endLine": 22, + "endColumn": 15, + "ruleDescription": "CloudFront Aliases", "phase": "LINT" }, { - "ruleId": "E3023", + "ruleId": "E3013", "severity": "ERROR", - "message": "'invalid-standalone-mixed-true' is not a valid IPv4 address for record type 'A'", + "message": "CloudFront alias '-example.com' is not a valid domain name", "source": "CFN_LINT", "entity": { - "logicalId": "StandaloneMixedInvalidTrue", + "logicalId": "CloudFrontDistribution", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Properties.ResourceRecords.1", + "propertyPath": "Properties.DistributionConfig.Aliases.15", "category": "Resource", - "startLine": 44, + "startLine": 23, "startColumn": 13, - "endLine": 44, - "endColumn": 14, - "ruleDescription": "Validate Route53 RecordSets", + "endLine": 23, + "endColumn": 15, + "ruleDescription": "CloudFront Aliases", "phase": "LINT" }, { - "ruleId": "E3023", + "ruleId": "E3013", "severity": "ERROR", - "message": "'invalid-standalone-mixed-false' is not a valid IPv4 address for record type 'A'", + "message": "CloudFront alias 'example.c' is not a valid domain name", "source": "CFN_LINT", "entity": { - "logicalId": "StandaloneMixedInvalidFalse", + "logicalId": "CloudFrontDistribution", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Properties.ResourceRecords.1", + "propertyPath": "Properties.DistributionConfig.Aliases.16", "category": "Resource", - "startLine": 57, + "startLine": 24, "startColumn": 13, - "endLine": 57, - "endColumn": 14, - "ruleDescription": "Validate Route53 RecordSets", + "endLine": 24, + "endColumn": 15, + "ruleDescription": "CloudFront Aliases", "phase": "LINT" }, { - "ruleId": "E3023", + "ruleId": "E3013", "severity": "ERROR", - "message": "'invalid-group-true' is not a valid IPv4 address for record type 'A'", + "message": "CloudFront alias 'www.example.com ' is not a valid domain name", "source": "CFN_LINT", "entity": { - "logicalId": "GroupInvalidTrue", + "logicalId": "CloudFrontDistribution", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Properties.RecordSets.0.ResourceRecords.0", + "propertyPath": "Properties.DistributionConfig.Aliases.17", "category": "Resource", - "startLine": 67, - "startColumn": 31, - "endLine": 67, - "endColumn": 32, - "ruleDescription": "Validate Route53 RecordSets", + "startLine": 25, + "startColumn": 13, + "endLine": 25, + "endColumn": 15, + "ruleDescription": "CloudFront Aliases", "phase": "LINT" }, { - "ruleId": "E3023", + "ruleId": "E3013", "severity": "ERROR", - "message": "'invalid-group-false' is not a valid IPv4 address for record type 'A'", + "message": "CloudFront alias 'www.-example.com' is not a valid domain name", "source": "CFN_LINT", "entity": { - "logicalId": "GroupInvalidFalse", + "logicalId": "CloudFrontDistribution", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Properties.RecordSets.0.ResourceRecords.0", + "propertyPath": "Properties.DistributionConfig.Aliases.18", "category": "Resource", - "startLine": 85, - "startColumn": 31, - "endLine": 85, - "endColumn": 32, - "ruleDescription": "Validate Route53 RecordSets", + "startLine": 26, + "startColumn": 13, + "endLine": 26, + "endColumn": 15, + "ruleDescription": "CloudFront Aliases", "phase": "LINT" }, { - "ruleId": "E3023", + "ruleId": "E3013", "severity": "ERROR", - "message": "'invalid-group-mixed-true' is not a valid IPv4 address for record type 'A'", + "message": "CloudFront alias '-www.example.com' is not a valid domain name", "source": "CFN_LINT", "entity": { - "logicalId": "GroupMixedInvalidTrue", + "logicalId": "CloudFrontDistribution", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Properties.RecordSets.0.ResourceRecords.1", + "propertyPath": "Properties.DistributionConfig.Aliases.19", "category": "Resource", - "startLine": 97, - "startColumn": 17, - "endLine": 97, - "endColumn": 18, - "ruleDescription": "Validate Route53 RecordSets", + "startLine": 27, + "startColumn": 13, + "endLine": 27, + "endColumn": 15, + "ruleDescription": "CloudFront Aliases", "phase": "LINT" }, { - "ruleId": "E3023", + "ruleId": "E3013", "severity": "ERROR", - "message": "'invalid-group-mixed-false' is not a valid IPv4 address for record type 'A'", + "message": "CloudFront alias 'www.example.com-' is not a valid domain name", "source": "CFN_LINT", "entity": { - "logicalId": "GroupMixedInvalidFalse", + "logicalId": "CloudFrontDistribution", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Properties.RecordSets.0.ResourceRecords.1", + "propertyPath": "Properties.DistributionConfig.Aliases.20", "category": "Resource", - "startLine": 117, - "startColumn": 17, - "endLine": 117, - "endColumn": 18, - "ruleDescription": "Validate Route53 RecordSets", + "startLine": 28, + "startColumn": 13, + "endLine": 28, + "endColumn": 15, + "ruleDescription": "CloudFront Aliases", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "CNAME records must have at most 1 ResourceRecord", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CloudFrontDistribution' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "StandaloneUnresolvedCnameCardinality", + "logicalId": "CloudFrontDistribution", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Properties.ResourceRecords", - "category": "Resource", - "startLine": 125, - "startColumn": 7, - "endLine": 125, - "endColumn": 22, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/resources_cognito_userpool_tag_is_list.yaml": { + "filePath": "bad/resources_cognito_userpool_tag_is_list.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "E3023", - "severity": "ERROR", - "message": "CNAME records must have at most 1 ResourceRecord", - "source": "CFN_LINT", + "ruleId": "F3012", + "severity": "FATAL", + "message": "[{'Key': 'Key1', 'Value': 'Value1'}, {'Key': 'Key2', 'Value': 'Value2'}] is not of type 'object'", + "source": "SCHEMA", "entity": { - "logicalId": "GroupUnresolvedCnameCardinality", + "logicalId": "MyCognitoUserPool", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::Cognito::UserPool" }, - "propertyPath": "Properties.RecordSets.0.ResourceRecords", - "category": "Resource", - "startLine": 136, - "startColumn": 11, - "endLine": 136, - "endColumn": 26, - "ruleDescription": "Validate Route53 RecordSets", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "StandaloneInvalidTrue", - "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" - }, - "propertyPath": "Properties.HostedZoneName", - "category": "Best Practice", - "startLine": 15, + "propertyPath": "Properties.UserPoolTags", + "category": "Schema", + "startLine": 16, "startColumn": 7, - "endLine": 15, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 16, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Property type mismatch", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": [ + { + "Key": "Key1", + "Value": "Value1" + }, + { + "Key": "Key2", + "Value": "Value2" + } + ], + "expectedConstraint": "object" } }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "StandaloneInvalidFalse", + "logicalId": "MyCognitoUserPool", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::Cognito::UserPool" }, - "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 26, - "startColumn": 7, - "endLine": 26, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "StandaloneMixedInvalidTrue", + "logicalId": "MyCognitoUserPool", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::Cognito::UserPool" }, - "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 37, - "startColumn": 7, - "endLine": 37, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + } + ] + }, + "bad/resources_deletionpolicy.yaml": { + "filePath": "bad/resources_deletionpolicy.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 5, + "errors": 0, + "warnings": 8, + "informational": 17, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3016", + "severity": "FATAL", + "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, Snapshot, got a list", + "source": "SCHEMA", "entity": { - "logicalId": "StandaloneMixedInvalidFalse", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneName", - "category": "Best Practice", - "startLine": 49, - "startColumn": 7, - "endLine": 49, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "DeletionPolicy", + "category": "Structure", + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "DeletionPolicy must be valid", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3016", + "severity": "FATAL", + "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, Snapshot, got 'CopyRegion'", + "source": "SCHEMA", "entity": { - "logicalId": "GroupInvalidTrue", + "logicalId": "MadeUpPolicy", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneName", - "category": "Best Practice", - "startLine": 61, - "startColumn": 7, - "endLine": 61, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "DeletionPolicy", + "category": "Structure", + "startLine": 23, + "startColumn": 5, + "endLine": 23, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "DeletionPolicy must be valid", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3016", + "severity": "FATAL", + "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got 'Snapshot'", + "source": "SCHEMA", "entity": { - "logicalId": "GroupInvalidFalse", + "logicalId": "MyIAMUser", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::IAM::User" }, - "propertyPath": "Properties.HostedZoneName", - "category": "Best Practice", - "startLine": 75, - "startColumn": 7, - "endLine": 75, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "DeletionPolicy", + "category": "Structure", + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "DeletionPolicy must be valid", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3016", + "severity": "FATAL", + "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, got a list", + "source": "SCHEMA", "entity": { - "logicalId": "GroupMixedInvalidTrue", + "logicalId": "UnsupportedIntrinsic", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::CloudFormation::WaitConditionHandle" }, - "propertyPath": "Properties.HostedZoneName", - "category": "Best Practice", - "startLine": 89, - "startColumn": 7, - "endLine": 89, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "DeletionPolicy", + "category": "Structure", + "startLine": 32, + "startColumn": 5, + "endLine": 32, + "endColumn": 19, + "ruleDescription": "DeletionPolicy must be valid", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3016", + "severity": "FATAL", + "message": "DeletionPolicy must be one of Delete, Retain, RetainExceptOnCreate, Snapshot, got an object", + "source": "SCHEMA", "entity": { - "logicalId": "GroupMixedInvalidFalse", + "logicalId": "InvalidMapping", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneName", - "category": "Best Practice", - "startLine": 105, - "startColumn": 7, - "endLine": 105, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "DeletionPolicy", + "category": "Structure", + "startLine": 43, + "startColumn": 5, + "endLine": 43, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "DeletionPolicy must be valid", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'DBPolicy' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "StandaloneUnresolvedCnameCardinality", - "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "logicalId": "DBPolicy", + "entityType": "Parameter" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Parameters/DBPolicy", "category": "Best Practice", - "startLine": 121, - "startColumn": 7, - "endLine": 121, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 11, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "source": "CFN_LINT", "entity": { - "logicalId": "GroupUnresolvedCnameCardinality", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 131, - "startColumn": 7, - "endLine": 131, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - } - ] - }, - "bad/route53_conditional_scenarios.yaml": { - "filePath": "bad/route53_conditional_scenarios.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 0, - "errors": 8, - "warnings": 0, - "informational": 3, - "debug": 0 + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 13, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "phase": "LINT" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'not-an-ipv4-address' is not a valid IPv4 address for record type 'A'", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", "source": "CFN_LINT", "entity": { - "logicalId": "ConditionalRecordSetsInvalidFirst", + "logicalId": "MadeUpPolicy", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.RecordSets.0.ResourceRecords.0", - "category": "Resource", - "startLine": 60, - "startColumn": 31, - "endLine": 60, - "endColumn": 32, - "ruleDescription": "Validate Route53 RecordSets", + "category": "Best Practice", + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 15, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'still-not-an-ipv4-address' is not a valid IPv4 address for record type 'A'", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", "source": "CFN_LINT", "entity": { - "logicalId": "ConditionalRecordSetsInvalidSecond", + "logicalId": "MyIAMUser", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::IAM::User" }, - "propertyPath": "Properties.RecordSets.0.ResourceRecords.0", - "category": "Resource", - "startLine": 78, - "startColumn": 31, - "endLine": 78, - "endColumn": 32, - "ruleDescription": "Validate Route53 RecordSets", + "category": "Best Practice", + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 12, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'invalid-first-branch' is not a valid IPv4 address for record type 'A'", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", "source": "CFN_LINT", "entity": { - "logicalId": "WholePropertiesRecordsInvalidFirst", + "logicalId": "UnsupportedIntrinsic", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::CloudFormation::WaitConditionHandle" }, - "propertyPath": "Properties.RecordSets.0.ResourceRecords.0", - "category": "Resource", - "startLine": 88, - "startColumn": 31, - "endLine": 88, - "endColumn": 32, - "ruleDescription": "Validate Route53 RecordSets", + "category": "Best Practice", + "startLine": 30, + "startColumn": 3, + "endLine": 30, + "endColumn": 23, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", "phase": "LINT" }, { - "ruleId": "E3023", - "severity": "ERROR", - "message": "'invalid-second-branch' is not a valid IPv4 address for record type 'A'", - "source": "CFN_LINT", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", "entity": { - "logicalId": "WholePropertiesRecordsInvalidSecond", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.RecordSets.0.ResourceRecords.0", - "category": "Resource", - "startLine": 110, - "startColumn": 31, - "endLine": 110, - "endColumn": 32, - "ruleDescription": "Validate Route53 RecordSets", + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, { - "ruleId": "E3029", - "severity": "ERROR", - "message": "TTL must not be set when AliasTarget is specified", - "source": "CFN_LINT", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", "entity": { - "logicalId": "AliasConflictFirst", + "logicalId": "MadeUpPolicy", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.TTL", - "category": "Resource", - "startLine": 12, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 19, "startColumn": 5, - "endLine": 12, + "endLine": 19, "endColumn": 15, - "ruleDescription": "Validate Route53 record set aliases", + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, { - "ruleId": "E3029", - "severity": "ERROR", - "message": "TTL must not be set when AliasTarget is specified", - "source": "CFN_LINT", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", "entity": { - "logicalId": "AliasConflictSecond", + "logicalId": "InvalidMapping", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.TTL", - "category": "Resource", - "startLine": 28, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 39, "startColumn": 5, - "endLine": 28, + "endLine": 39, "endColumn": 15, - "ruleDescription": "Validate Route53 record set aliases", + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, { - "ruleId": "E3029", - "severity": "ERROR", - "message": "AliasTarget cannot be used with record type 'NS'", + "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": "ConditionalInvalidAliasTypes", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.AliasTarget", - "category": "Resource", - "startLine": 48, - "startColumn": 7, - "endLine": 48, - "endColumn": 18, - "ruleDescription": "Validate Route53 record set aliases", + "category": "Best Practice", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 13, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "E3029", - "severity": "ERROR", - "message": "AliasTarget cannot be used with record type 'SOA'", + "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": "ConditionalInvalidAliasTypes", + "logicalId": "MadeUpPolicy", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.AliasTarget", - "category": "Resource", - "startLine": 48, - "startColumn": 7, - "endLine": 48, - "endColumn": 18, - "ruleDescription": "Validate Route53 record set aliases", + "category": "Best Practice", + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 15, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "ConditionalInvalidAliasTypes", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 45, - "startColumn": 7, - "endLine": 45, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "ConditionalRecordSetsInvalidFirst", + "logicalId": "MadeUpPolicy", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 54, - "startColumn": 7, - "endLine": 54, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 19, + "startColumn": 5, + "endLine": 19, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "ConditionalRecordSetsInvalidSecond", + "logicalId": "InvalidMapping", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 68, - "startColumn": 7, - "endLine": 68, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - } - ] - }, - "bad/s3_tiering_bad_days.yaml": { - "filePath": "bad/s3_tiering_bad_days.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 4, - "warnings": 0, - "informational": 1, - "debug": 0 + "startLine": 39, + "startColumn": 5, + "endLine": 39, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3061", - "severity": "ERROR", - "message": "Days 30 for ARCHIVE_ACCESS must be between 90 and 730", + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", "source": "CFN_LINT", "entity": { - "logicalId": "Bucket", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.IntelligentTieringConfigurations[0].Tierings[0].Days", - "suggestedFix": "Set Days between 90 and 730", - "category": "Resource", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Validate the days for tierings in IntelligentTieringConfigurations", + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", + "category": "Best Practice", + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", "phase": "LINT" }, { - "ruleId": "E3061", - "severity": "ERROR", - "message": "Days 800 for ARCHIVE_ACCESS must be between 90 and 730", + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", "source": "CFN_LINT", "entity": { - "logicalId": "Bucket", + "logicalId": "MadeUpPolicy", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.IntelligentTieringConfigurations[1].Tierings[0].Days", - "suggestedFix": "Set Days between 90 and 730", - "category": "Resource", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Validate the days for tierings in IntelligentTieringConfigurations", + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", + "category": "Best Practice", + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", "phase": "LINT" }, { - "ruleId": "E3061", - "severity": "ERROR", - "message": "Days 100 for DEEP_ARCHIVE_ACCESS must be between 180 and 730", + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", "source": "CFN_LINT", "entity": { - "logicalId": "Bucket", + "logicalId": "InvalidMapping", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.IntelligentTieringConfigurations[1].Tierings[1].Days", - "suggestedFix": "Set Days between 180 and 730", - "category": "Resource", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Validate the days for tierings in IntelligentTieringConfigurations", + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", + "category": "Best Practice", + "startLine": 41, + "startColumn": 7, + "endLine": 41, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", "phase": "LINT" }, { - "ruleId": "E3061", - "severity": "ERROR", - "message": "Days 900 for DEEP_ARCHIVE_ACCESS must be between 180 and 730", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.IntelligentTieringConfigurations[1].Tierings[2].Days", - "suggestedFix": "Set Days between 180 and 730", - "category": "Resource", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Validate the days for tierings in IntelligentTieringConfigurations", - "phase": "LINT" + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 15, + "startColumn": 7, + "endLine": 15, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "MadeUpPolicy", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 5, + "startLine": 22, + "startColumn": 7, + "endLine": 22, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyIAMUser", + "entityType": "Resource", + "resourceType": "AWS::IAM::User" + }, + "propertyPath": "Properties.UserName", + "category": "Best Practice", + "startLine": 28, + "startColumn": 7, + "endLine": 28, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "InvalidMapping", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 42, + "startColumn": 7, + "endLine": 42, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'PolicyList' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "PolicyList", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 12, "startColumn": 5, - "endLine": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MadeUpPolicy' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "MadeUpPolicy", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 19, + "startColumn": 5, + "endLine": 19, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyIAMUser' of type 'AWS::IAM::User' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "MyIAMUser", + "entityType": "Resource", + "resourceType": "AWS::IAM::User" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 26, + "startColumn": 5, + "endLine": 26, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'InvalidMapping' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "InvalidMapping", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 39, + "startColumn": 5, + "endLine": 39, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/sagemaker_instance_types.yaml": { - "filePath": "bad/sagemaker_instance_types.yaml", + "bad/resources_iam_instanceprofile_roles.yaml": { + "filePath": "bad/resources_iam_instanceprofile_roles.yaml", "status": "OK", "metadata": { - "resourcesScanned": 5, + "resourcesScanned": 1, "counts": { - "fatal": 36, - "errors": 5, + "fatal": 1, + "errors": 0, "warnings": 0, - "informational": 8, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -8848,1665 +8890,1571 @@ }, "diagnostics": [ { - "ruleId": "F3003", + "ruleId": "F3032", "severity": "FATAL", - "message": "'MonitoringScheduleName' is a required property", + "message": "expected maximum item count: 1, found: 2", "source": "SCHEMA", "entity": { - "logicalId": "MonitoringSchedule", + "logicalId": "IamUser", "entityType": "Resource", - "resourceType": "AWS::SageMaker::MonitoringSchedule" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'MonitoringScheduleName'", + "propertyPath": "Properties.Roles", "category": "Schema", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 12, + "ruleDescription": "Array item count out of bounds", + "phase": "SCHEMA", + "context": { + "extra": { + "actual_count": 2, + "max_items": 1, + "min_items": 0 + } + } + } + ] + }, + "bad/resources_updatereplacepolicy.yaml": { + "filePath": "bad/resources_updatereplacepolicy.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 5, + "errors": 0, + "warnings": 9, + "informational": 18, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "F3003", + "ruleId": "F0018", "severity": "FATAL", - "message": "'MonitoringAppSpecification' is a required property", + "message": "UpdateReplacePolicy must be one of Delete, Retain, Snapshot, got a list", "source": "SCHEMA", "entity": { - "logicalId": "MonitoringSchedule", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::SageMaker::MonitoringSchedule" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.MonitoringScheduleConfig.MonitoringJobDefinition", - "suggestedFix": "Add the required property 'MonitoringAppSpecification'", - "category": "Schema", - "startLine": 8, - "startColumn": 9, - "endLine": 8, - "endColumn": 32, - "ruleDescription": "Required property missing", + "propertyPath": "UpdateReplacePolicy", + "category": "Structure", + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "UpdateReplacePolicy must be valid", "phase": "SCHEMA" }, { - "ruleId": "F3003", + "ruleId": "F0018", "severity": "FATAL", - "message": "'MonitoringInputs' is a required property", + "message": "UpdateReplacePolicy must be one of Delete, Retain, Snapshot, got 'CopyRegion'", "source": "SCHEMA", "entity": { - "logicalId": "MonitoringSchedule", + "logicalId": "MadeUpPolicy", "entityType": "Resource", - "resourceType": "AWS::SageMaker::MonitoringSchedule" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.MonitoringScheduleConfig.MonitoringJobDefinition", - "suggestedFix": "Add the required property 'MonitoringInputs'", - "category": "Schema", - "startLine": 8, - "startColumn": 9, - "endLine": 8, - "endColumn": 32, - "ruleDescription": "Required property missing", + "propertyPath": "UpdateReplacePolicy", + "category": "Structure", + "startLine": 23, + "startColumn": 5, + "endLine": 23, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "UpdateReplacePolicy must be valid", "phase": "SCHEMA" }, { - "ruleId": "F3003", + "ruleId": "F0018", "severity": "FATAL", - "message": "'MonitoringOutputConfig' is a required property", + "message": "UpdateReplacePolicy must be one of Delete, Retain, got 'Snapshot'", "source": "SCHEMA", "entity": { - "logicalId": "MonitoringSchedule", + "logicalId": "MyIAMUser", "entityType": "Resource", - "resourceType": "AWS::SageMaker::MonitoringSchedule" + "resourceType": "AWS::IAM::User" }, - "propertyPath": "Properties.MonitoringScheduleConfig.MonitoringJobDefinition", - "suggestedFix": "Add the required property 'MonitoringOutputConfig'", - "category": "Schema", - "startLine": 8, - "startColumn": 9, - "endLine": 8, - "endColumn": 32, - "ruleDescription": "Required property missing", + "propertyPath": "UpdateReplacePolicy", + "category": "Structure", + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "UpdateReplacePolicy must be valid", "phase": "SCHEMA" }, { - "ruleId": "F3003", + "ruleId": "F0018", "severity": "FATAL", - "message": "'RoleArn' is a required property", + "message": "UpdateReplacePolicy must be one of Delete, Retain, got a list", "source": "SCHEMA", "entity": { - "logicalId": "MonitoringSchedule", + "logicalId": "UnsupportedIntrinsic", "entityType": "Resource", - "resourceType": "AWS::SageMaker::MonitoringSchedule" + "resourceType": "AWS::CloudFormation::WaitConditionHandle" }, - "propertyPath": "Properties.MonitoringScheduleConfig.MonitoringJobDefinition", - "suggestedFix": "Add the required property 'RoleArn'", - "category": "Schema", - "startLine": 8, - "startColumn": 9, - "endLine": 8, - "endColumn": 32, - "ruleDescription": "Required property missing", + "propertyPath": "UpdateReplacePolicy", + "category": "Structure", + "startLine": 32, + "startColumn": 5, + "endLine": 32, + "endColumn": 24, + "ruleDescription": "UpdateReplacePolicy must be valid", "phase": "SCHEMA" }, { - "ruleId": "F3003", + "ruleId": "F0018", "severity": "FATAL", - "message": "'InstanceCount' is a required property", + "message": "UpdateReplacePolicy must be one of Delete, Retain, Snapshot, got an object", "source": "SCHEMA", "entity": { - "logicalId": "MonitoringSchedule", + "logicalId": "InvalidMapping", "entityType": "Resource", - "resourceType": "AWS::SageMaker::MonitoringSchedule" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.MonitoringScheduleConfig.MonitoringJobDefinition.MonitoringResources.ClusterConfig", - "suggestedFix": "Add the required property 'InstanceCount'", - "category": "Schema", - "startLine": 10, - "startColumn": 13, - "endLine": 10, - "endColumn": 26, - "ruleDescription": "Required property missing", + "propertyPath": "UpdateReplacePolicy", + "category": "Structure", + "startLine": 43, + "startColumn": 5, + "endLine": 43, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "UpdateReplacePolicy must be valid", "phase": "SCHEMA" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'VolumeSizeInGB' is a required property", - "source": "SCHEMA", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'DBPolicy' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "MonitoringSchedule", + "logicalId": "DBPolicy", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/DBPolicy", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 11, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "source": "CFN_LINT", + "entity": { + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::SageMaker::MonitoringSchedule" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.MonitoringScheduleConfig.MonitoringJobDefinition.MonitoringResources.ClusterConfig", - "suggestedFix": "Add the required property 'VolumeSizeInGB'", - "category": "Schema", + "category": "Best Practice", "startLine": 10, - "startColumn": 13, + "startColumn": 3, "endLine": 10, - "endColumn": 26, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "endColumn": 13, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'ModelQualityAppSpecification' is a required property", - "source": "SCHEMA", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "source": "CFN_LINT", "entity": { - "logicalId": "ModelQualityJobDefinition", + "logicalId": "MadeUpPolicy", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'ModelQualityAppSpecification'", - "category": "Schema", - "startLine": 14, - "startColumn": 5, - "endLine": 14, + "category": "Best Practice", + "startLine": 17, + "startColumn": 3, + "endLine": 17, "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'ModelQualityJobInput' is a required property", - "source": "SCHEMA", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "source": "CFN_LINT", "entity": { - "logicalId": "ModelQualityJobDefinition", + "logicalId": "MyIAMUser", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" + "resourceType": "AWS::IAM::User" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'ModelQualityJobInput'", - "category": "Schema", - "startLine": 14, - "startColumn": 5, - "endLine": 14, - "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "category": "Best Practice", + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 12, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'ModelQualityJobOutputConfig' is a required property", - "source": "SCHEMA", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "source": "CFN_LINT", "entity": { - "logicalId": "ModelQualityJobDefinition", + "logicalId": "UnsupportedIntrinsic", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" + "resourceType": "AWS::CloudFormation::WaitConditionHandle" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'ModelQualityJobOutputConfig'", - "category": "Schema", - "startLine": 14, - "startColumn": 5, - "endLine": 14, - "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "category": "Best Practice", + "startLine": 30, + "startColumn": 3, + "endLine": 30, + "endColumn": 23, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'RoleArn' is a required property", - "source": "SCHEMA", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "source": "CFN_LINT", "entity": { - "logicalId": "ModelQualityJobDefinition", + "logicalId": "InvalidMapping", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'RoleArn'", - "category": "Schema", - "startLine": 14, - "startColumn": 5, - "endLine": 14, - "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "category": "Best Practice", + "startLine": 37, + "startColumn": 3, + "endLine": 37, + "endColumn": 17, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'InstanceCount' is a required property", - "source": "SCHEMA", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", "entity": { - "logicalId": "ModelQualityJobDefinition", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.JobResources.ClusterConfig", - "suggestedFix": "Add the required property 'InstanceCount'", - "category": "Schema", - "startLine": 16, - "startColumn": 9, - "endLine": 16, - "endColumn": 22, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'VolumeSizeInGB' is a required property", - "source": "SCHEMA", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", "entity": { - "logicalId": "ModelQualityJobDefinition", + "logicalId": "MadeUpPolicy", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.JobResources.ClusterConfig", - "suggestedFix": "Add the required property 'VolumeSizeInGB'", - "category": "Schema", - "startLine": 16, - "startColumn": 9, - "endLine": 16, - "endColumn": 22, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 19, + "startColumn": 5, + "endLine": 19, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'EndpointName' is a required property", - "source": "SCHEMA", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", "entity": { - "logicalId": "InferenceExperiment", + "logicalId": "InvalidMapping", "entityType": "Resource", - "resourceType": "AWS::SageMaker::InferenceExperiment" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'EndpointName'", - "category": "Schema", - "startLine": 22, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 39, "startColumn": 5, - "endLine": 22, + "endLine": 39, "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'Name' is a required property", - "source": "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": "InferenceExperiment", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::SageMaker::InferenceExperiment" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'Name'", - "category": "Schema", - "startLine": 22, - "startColumn": 5, - "endLine": 22, + "category": "Best Practice", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 13, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "MadeUpPolicy", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 17, + "startColumn": 3, + "endLine": 17, "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'RoleArn' is a required property", - "source": "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": "InferenceExperiment", + "logicalId": "InvalidMapping", "entityType": "Resource", - "resourceType": "AWS::SageMaker::InferenceExperiment" + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 37, + "startColumn": 3, + "endLine": 37, + "endColumn": 17, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "PolicyList", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties", - "suggestedFix": "Add the required property 'RoleArn'", - "category": "Schema", - "startLine": 22, + "category": "Best Practice", + "startLine": 12, "startColumn": 5, - "endLine": 22, + "endLine": 12, "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'Type' is a required property", - "source": "SCHEMA", + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "InferenceExperiment", + "logicalId": "MadeUpPolicy", "entityType": "Resource", - "resourceType": "AWS::SageMaker::InferenceExperiment" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties", - "suggestedFix": "Add the required property 'Type'", - "category": "Schema", - "startLine": 22, + "category": "Best Practice", + "startLine": 19, "startColumn": 5, - "endLine": 22, + "endLine": 19, "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'InfrastructureType' is a required property", - "source": "SCHEMA", + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "InferenceExperiment", + "logicalId": "InvalidMapping", "entityType": "Resource", - "resourceType": "AWS::SageMaker::InferenceExperiment" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ModelVariants.0.InfrastructureConfig", - "suggestedFix": "Add the required property 'InfrastructureType'", - "category": "Schema", - "startLine": 24, - "startColumn": 11, - "endLine": 24, - "endColumn": 31, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 39, + "startColumn": 5, + "endLine": 39, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'ModelName' is a required property", - "source": "SCHEMA", + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "InferenceExperiment", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::SageMaker::InferenceExperiment" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ModelVariants.0", - "suggestedFix": "Add the required property 'ModelName'", - "category": "Schema", - "startLine": 24, - "startColumn": 31, - "endLine": 24, - "endColumn": 32, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", + "category": "Best Practice", + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'VariantName' is a required property", - "source": "SCHEMA", + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "InferenceExperiment", + "logicalId": "MadeUpPolicy", "entityType": "Resource", - "resourceType": "AWS::SageMaker::InferenceExperiment" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ModelVariants.0", - "suggestedFix": "Add the required property 'VariantName'", - "category": "Schema", - "startLine": 24, - "startColumn": 31, - "endLine": 24, - "endColumn": 32, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", + "category": "Best Practice", + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'InstanceCount' is a required property", - "source": "SCHEMA", + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "InferenceExperiment", + "logicalId": "InvalidMapping", "entityType": "Resource", - "resourceType": "AWS::SageMaker::InferenceExperiment" - }, - "propertyPath": "Properties.ModelVariants.0.InfrastructureConfig.RealTimeInferenceConfig", - "suggestedFix": "Add the required property 'InstanceCount'", - "category": "Schema", - "startLine": 25, - "startColumn": 13, - "endLine": 25, - "endColumn": 36, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" - }, - { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'InfrastructureType' is a required property", - "source": "SCHEMA", - "entity": { - "logicalId": "InferenceExperiment", - "entityType": "Resource", - "resourceType": "AWS::SageMaker::InferenceExperiment" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ModelVariants.1.InfrastructureConfig", - "suggestedFix": "Add the required property 'InfrastructureType'", - "category": "Schema", - "startLine": 27, - "startColumn": 11, - "endLine": 27, - "endColumn": 31, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", + "category": "Best Practice", + "startLine": 41, + "startColumn": 7, + "endLine": 41, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'ModelName' is a required property", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "InferenceExperiment", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::SageMaker::InferenceExperiment" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ModelVariants.1", - "suggestedFix": "Add the required property 'ModelName'", - "category": "Schema", - "startLine": 27, - "startColumn": 31, - "endLine": 27, - "endColumn": 32, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 15, + "startColumn": 7, + "endLine": 15, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'VariantName' is a required property", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "InferenceExperiment", + "logicalId": "MadeUpPolicy", "entityType": "Resource", - "resourceType": "AWS::SageMaker::InferenceExperiment" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ModelVariants.1", - "suggestedFix": "Add the required property 'VariantName'", - "category": "Schema", - "startLine": 27, - "startColumn": 31, - "endLine": 27, - "endColumn": 32, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 22, + "startColumn": 7, + "endLine": 22, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'InstanceCount' is a required property", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "InferenceExperiment", + "logicalId": "MyIAMUser", "entityType": "Resource", - "resourceType": "AWS::SageMaker::InferenceExperiment" + "resourceType": "AWS::IAM::User" }, - "propertyPath": "Properties.ModelVariants.1.InfrastructureConfig.RealTimeInferenceConfig", - "suggestedFix": "Add the required property 'InstanceCount'", - "category": "Schema", + "propertyPath": "Properties.UserName", + "category": "Best Practice", "startLine": 28, - "startColumn": 13, + "startColumn": 7, "endLine": 28, - "endColumn": 36, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'ValidationRole' is a required property", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ModelPackage", + "logicalId": "InvalidMapping", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelPackage" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ValidationSpecification", - "suggestedFix": "Add the required property 'ValidationRole'", - "category": "Schema", - "startLine": 35, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 42, "startColumn": 7, - "endLine": 35, - "endColumn": 30, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker", - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "endLine": 42, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'TransformInput' is a required property", - "source": "SCHEMA", + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'PolicyList' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ModelPackage", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelPackage" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ValidationSpecification.ValidationProfiles.0.TransformJobDefinition", - "suggestedFix": "Add the required property 'TransformInput'", - "category": "Schema", - "startLine": 37, - "startColumn": 13, - "endLine": 37, - "endColumn": 35, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker", - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'TransformOutput' is a required property", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MadeUpPolicy' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ModelPackage", + "logicalId": "MadeUpPolicy", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelPackage" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ValidationSpecification.ValidationProfiles.0.TransformJobDefinition", - "suggestedFix": "Add the required property 'TransformOutput'", - "category": "Schema", - "startLine": 37, - "startColumn": 13, - "endLine": 37, - "endColumn": 35, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker", - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 19, + "startColumn": 5, + "endLine": 19, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'ProfileName' is a required property", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyIAMUser' of type 'AWS::IAM::User' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ModelPackage", + "logicalId": "MyIAMUser", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelPackage" + "resourceType": "AWS::IAM::User" }, - "propertyPath": "Properties.ValidationSpecification.ValidationProfiles.0", - "suggestedFix": "Add the required property 'ProfileName'", - "category": "Schema", - "startLine": 37, - "startColumn": 35, - "endLine": 37, - "endColumn": 36, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker", - "ruleDescription": "Required property missing", - "phase": "SCHEMA" - }, - { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'InstanceCount' is a required property", - "source": "SCHEMA", - "entity": { - "logicalId": "ModelPackage", - "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelPackage" - }, - "propertyPath": "Properties.ValidationSpecification.ValidationProfiles.0.TransformJobDefinition.TransformResources", - "suggestedFix": "Add the required property 'InstanceCount'", - "category": "Schema", - "startLine": 38, - "startColumn": 15, - "endLine": 38, - "endColumn": 33, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker", - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 26, + "startColumn": 5, + "endLine": 26, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'ExecutionRole' is a required property", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'InvalidMapping' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "InvalidMapping", "entityType": "Resource", - "resourceType": "AWS::SageMaker::Cluster" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.InstanceGroups.0", - "suggestedFix": "Add the required property 'ExecutionRole'", - "category": "Schema", - "startLine": 46, - "startColumn": 23, - "endLine": 46, - "endColumn": 24, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 39, + "startColumn": 5, + "endLine": 39, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/route53.yaml": { + "filePath": "bad/route53.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 11, + "counts": { + "fatal": 0, + "errors": 30, + "warnings": 1, + "informational": 12, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'InstanceCount' is a required property", - "source": "SCHEMA", + "ruleId": "E3023", + "severity": "ERROR", + "message": "TXT record value '\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"' must be enclosed in double quotes", + "source": "CFN_LINT", "entity": { - "logicalId": "Cluster", + "logicalId": "MyTXTRecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::Cluster" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.InstanceGroups.0", - "suggestedFix": "Add the required property 'InstanceCount'", - "category": "Schema", - "startLine": 46, - "startColumn": 23, - "endLine": 46, - "endColumn": 24, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.ResourceRecords.0", + "category": "Resource", + "startLine": 32, + "startColumn": 11, + "endLine": 32, + "endColumn": 12, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'InstanceGroupName' is a required property", - "source": "SCHEMA", + "ruleId": "E3023", + "severity": "ERROR", + "message": "TXT record value '\"a\"\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\"' must be enclosed in double quotes", + "source": "CFN_LINT", "entity": { - "logicalId": "Cluster", + "logicalId": "MyTXTRecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::Cluster" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.InstanceGroups.0", - "suggestedFix": "Add the required property 'InstanceGroupName'", - "category": "Schema", - "startLine": 46, - "startColumn": 23, - "endLine": 46, - "endColumn": 24, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.ResourceRecords.1", + "category": "Resource", + "startLine": 33, + "startColumn": 11, + "endLine": 33, + "endColumn": 12, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'ExecutionRole' is a required property", - "source": "SCHEMA", + "ruleId": "E3023", + "severity": "ERROR", + "message": "TXT record value 'test2' must be enclosed in double quotes", + "source": "CFN_LINT", "entity": { - "logicalId": "Cluster", + "logicalId": "MyTXTRecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::Cluster" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.RestrictedInstanceGroups.0", - "suggestedFix": "Add the required property 'ExecutionRole'", - "category": "Schema", - "startLine": 48, - "startColumn": 23, - "endLine": 48, - "endColumn": 24, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.ResourceRecords.3", + "category": "Resource", + "startLine": 35, + "startColumn": 11, + "endLine": 35, + "endColumn": 12, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'InstanceCount' is a required property", - "source": "SCHEMA", + "ruleId": "E3023", + "severity": "ERROR", + "message": "'127.0.0.1' is not a valid IPv6 address for record type 'AAAA'", + "source": "CFN_LINT", "entity": { - "logicalId": "Cluster", + "logicalId": "MyAAAARecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::Cluster" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.RestrictedInstanceGroups.0", - "suggestedFix": "Add the required property 'InstanceCount'", - "category": "Schema", - "startLine": 48, - "startColumn": 23, - "endLine": 48, - "endColumn": 24, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.ResourceRecords.0", + "category": "Resource", + "startLine": 55, + "startColumn": 11, + "endLine": 55, + "endColumn": 12, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'InstanceGroupName' is a required property", - "source": "SCHEMA", + "ruleId": "E3023", + "severity": "ERROR", + "message": "'XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:1.2.3.4' is not a valid IPv6 address for record type 'AAAA'", + "source": "CFN_LINT", "entity": { - "logicalId": "Cluster", + "logicalId": "MyAAAARecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::Cluster" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.RestrictedInstanceGroups.0", - "suggestedFix": "Add the required property 'InstanceGroupName'", - "category": "Schema", - "startLine": 48, - "startColumn": 23, - "endLine": 48, - "endColumn": 24, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.ResourceRecords.1", + "category": "Resource", + "startLine": 56, + "startColumn": 11, + "endLine": 56, + "endColumn": 12, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "E3640", + "ruleId": "E3023", "severity": "ERROR", - "message": "'ml.fake.xlarge' is not valid in any region", + "message": "'2001:0db8: 85a3:0:0:8a2e:0370:7334' is not a valid IPv6 address for record type 'AAAA'", "source": "CFN_LINT", "entity": { - "logicalId": "MonitoringSchedule", + "logicalId": "MyAAAARecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::MonitoringSchedule" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.MonitoringScheduleConfig.MonitoringJobDefinition.MonitoringResources.ClusterConfig.InstanceType", + "propertyPath": "Properties.ResourceRecords.2", "category": "Resource", - "startLine": 11, - "startColumn": 15, - "endLine": 11, - "endColumn": 27, - "ruleDescription": "Validate SageMaker processing instance types based on region", + "startLine": 57, + "startColumn": 11, + "endLine": 57, + "endColumn": 12, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" }, { - "ruleId": "E3642", + "ruleId": "E3023", "severity": "ERROR", - "message": "'ml.fake.xlarge' is not valid in any region", + "message": "'1111:2222:3333:4444:5555:6666:7777' is not a valid IPv6 address for record type 'AAAA'", "source": "CFN_LINT", "entity": { - "logicalId": "InferenceExperiment", + "logicalId": "MyAAAARecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::InferenceExperiment" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.ModelVariants.InfrastructureConfig.RealTimeInferenceConfig.InstanceType", + "propertyPath": "Properties.ResourceRecords.3", "category": "Resource", - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 20, - "ruleDescription": "Validate SageMaker hosting instance types based on region", + "startLine": 58, + "startColumn": 11, + "endLine": 58, + "endColumn": 12, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" }, { - "ruleId": "E3643", + "ruleId": "E3023", "severity": "ERROR", - "message": "'ml.bogus.large' is not valid in any region", + "message": "'1111:2222:3333:4444:5555:6666:7777:8888::' is not a valid IPv6 address for record type 'AAAA'", "source": "CFN_LINT", "entity": { - "logicalId": "ModelPackage", + "logicalId": "MyAAAARecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelPackage" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.ValidationSpecification.ValidationProfiles.TransformJobDefinition.TransformResources.InstanceType", + "propertyPath": "Properties.ResourceRecords.4", "category": "Resource", - "startLine": 36, - "startColumn": 9, - "endLine": 36, - "endColumn": 27, - "ruleDescription": "Validate SageMaker transform instance types based on region", + "startLine": 59, + "startColumn": 11, + "endLine": 59, + "endColumn": 12, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" }, { - "ruleId": "E3644", + "ruleId": "E3023", "severity": "ERROR", - "message": "'ml.fake.xlarge' is not valid in any region", + "message": "CAA record value '127.0.0.1' must match format: flag tag 'value'", "source": "CFN_LINT", "entity": { - "logicalId": "Cluster", + "logicalId": "MyCAARecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::Cluster" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.InstanceGroups.InstanceType", + "propertyPath": "Properties.ResourceRecords.0", "category": "Resource", - "startLine": 45, - "startColumn": 7, - "endLine": 45, - "endColumn": 21, - "ruleDescription": "Validate SageMaker cluster instance types based on region", + "startLine": 69, + "startColumn": 11, + "endLine": 69, + "endColumn": 12, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" }, { - "ruleId": "E3644", + "ruleId": "E3023", "severity": "ERROR", - "message": "'ml.bogus.large' is not valid in any region", + "message": "CAA record value '0 issue amazon.com; henk' must match format: flag tag 'value'", "source": "CFN_LINT", "entity": { - "logicalId": "Cluster", + "logicalId": "MyCAARecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::Cluster" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.RestrictedInstanceGroups.InstanceType", + "propertyPath": "Properties.ResourceRecords.1", "category": "Resource", - "startLine": 47, - "startColumn": 7, - "endLine": 47, - "endColumn": 31, - "ruleDescription": "Validate SageMaker cluster instance types based on region", + "startLine": 70, + "startColumn": 11, + "endLine": 70, + "endColumn": 12, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'JobResources' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3023", + "severity": "ERROR", + "message": "CNAME records must have at most 1 ResourceRecord", + "source": "CFN_LINT", "entity": { - "logicalId": "ModelQualityJobDefinition", + "logicalId": "MyCNAMERecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.JobResources", - "category": "Best Practice", - "startLine": 15, + "propertyPath": "Properties.ResourceRecords", + "category": "Resource", + "startLine": 79, "startColumn": 7, - "endLine": 15, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 79, + "endColumn": 22, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ValidationSpecification' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3023", + "severity": "ERROR", + "message": "CNAME records must have at most 1 ResourceRecord", + "source": "CFN_LINT", "entity": { - "logicalId": "ModelPackage", + "logicalId": "MyCNAMERecordSetConditions", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelPackage" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.ValidationSpecification", - "category": "Best Practice", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 30, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "propertyPath": "Properties.ResourceRecords", + "category": "Resource", + "startLine": 93, + "startColumn": 11, + "endLine": 93, + "endColumn": 12, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MonitoringSchedule' of type 'AWS::SageMaker::MonitoringSchedule' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3023", + "severity": "ERROR", + "message": "MX record value '127.0.0.1' must match format: priority domain", + "source": "CFN_LINT", "entity": { - "logicalId": "MonitoringSchedule", + "logicalId": "MyMXRecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::MonitoringSchedule" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.ResourceRecords.0", + "category": "Resource", + "startLine": 104, + "startColumn": 11, + "endLine": 104, + "endColumn": 12, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ModelQualityJobDefinition' of type 'AWS::SageMaker::ModelQualityJobDefinition' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3023", + "severity": "ERROR", + "message": "MX record value '10 my domain' must match format: priority domain", + "source": "CFN_LINT", "entity": { - "logicalId": "ModelQualityJobDefinition", + "logicalId": "MyMXRecordSet", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 14, - "startColumn": 5, - "endLine": 14, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.ResourceRecords.1", + "category": "Resource", + "startLine": 105, + "startColumn": 11, + "endLine": 105, + "endColumn": 12, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'InferenceExperiment' of type 'AWS::SageMaker::InferenceExperiment' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3023", + "severity": "ERROR", + "message": "TXT record value 'test4' must be enclosed in double quotes", + "source": "CFN_LINT", "entity": { - "logicalId": "InferenceExperiment", + "logicalId": "MyRecordSetGroup", "entityType": "Resource", - "resourceType": "AWS::SageMaker::InferenceExperiment" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 22, - "startColumn": 5, - "endLine": 22, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.RecordSets.0.ResourceRecords.0", + "category": "Resource", + "startLine": 127, + "startColumn": 15, + "endLine": 127, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ModelPackage' of type 'AWS::SageMaker::ModelPackage' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3023", + "severity": "ERROR", + "message": "'a.example.com' is not a valid IPv4 address for record type 'A'", + "source": "CFN_LINT", "entity": { - "logicalId": "ModelPackage", + "logicalId": "MyRecordSetGroup", "entityType": "Resource", - "resourceType": "AWS::SageMaker::ModelPackage" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 34, - "startColumn": 5, - "endLine": 34, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.RecordSets.1.ResourceRecords.0", + "category": "Resource", + "startLine": 132, + "startColumn": 15, + "endLine": 132, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Cluster' of type 'AWS::SageMaker::Cluster' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3023", + "severity": "ERROR", + "message": "'1111:2222:3333:4444:55556666:7777:8888' is not a valid IPv6 address for record type 'AAAA'", + "source": "CFN_LINT", "entity": { - "logicalId": "Cluster", + "logicalId": "MyRecordSetGroup", "entityType": "Resource", - "resourceType": "AWS::SageMaker::Cluster" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 44, - "startColumn": 5, - "endLine": 44, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.RecordSets.2.ResourceRecords.0", + "category": "Resource", + "startLine": 137, + "startColumn": 15, + "endLine": 137, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/api_missing_stagename.yaml": { - "filePath": "bad/sam/api_missing_stagename.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [MyApi] is invalid. Missing required property 'StageName'.", + "message": "'1111:2222:3333:4444:5555:6666:7777:8888:' is not a valid IPv6 address for record type 'AAAA'", "source": "CFN_LINT", "entity": { - "logicalId": "MyApi", + "logicalId": "MyRecordSetGroup", "entityType": "Resource", - "resourceType": "AWS::Serverless::Api" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties/StageName", - "category": "Structure", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 8, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.RecordSets.2.ResourceRecords.1", + "category": "Resource", + "startLine": 138, + "startColumn": 15, + "endLine": 138, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/connector_missing_destination.yaml": { - "filePath": "bad/sam/connector_missing_destination.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [MyConn] is invalid. Missing required property 'Destination'.", + "message": "'1111:2222:3333:::5555:6666:7777:8888' is not a valid IPv6 address for record type 'AAAA'", "source": "CFN_LINT", "entity": { - "logicalId": "MyConn", + "logicalId": "MyRecordSetGroup", "entityType": "Resource", - "resourceType": "AWS::Serverless::Connector" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties/Destination", - "category": "Structure", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 9, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.RecordSets.2.ResourceRecords.2", + "category": "Resource", + "startLine": 139, + "startColumn": 15, + "endLine": 139, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/connector_missing_source.yaml": { - "filePath": "bad/sam/connector_missing_source.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [MyConn] is invalid. Missing required property 'Source'.", + "message": "'1111::3333:4444:5555::7777:8888' is not a valid IPv6 address for record type 'AAAA'", "source": "CFN_LINT", "entity": { - "logicalId": "MyConn", + "logicalId": "MyRecordSetGroup", "entityType": "Resource", - "resourceType": "AWS::Serverless::Connector" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties/Source", - "category": "Structure", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 9, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.RecordSets.2.ResourceRecords.3", + "category": "Resource", + "startLine": 140, + "startColumn": 15, + "endLine": 140, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/function_autopublishalias_invalid_name.yaml": { - "filePath": "bad/sam/function_autopublishalias_invalid_name.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [Fn] is invalid. AutoPublishAlias name ('123') must contain only alphanumeric characters, hyphens, or underscores matching (?!^[0-9]+$)([a-zA-Z0-9-_]+) pattern.", + "message": "'::1.2.3.' is not a valid IPv6 address for record type 'AAAA'", "source": "CFN_LINT", "entity": { - "logicalId": "Fn", + "logicalId": "MyRecordSetGroup", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.RecordSets.2.ResourceRecords.4", + "category": "Resource", + "startLine": 141, + "startColumn": 15, + "endLine": 141, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/function_capacityprovider_with_vpcconfig.yaml": { - "filePath": "bad/sam/function_capacityprovider_with_vpcconfig.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [Fn] is invalid. Cannot specify 'CapacityProviderConfig' and 'VpcConfig' together.", + "message": "':1111:2222:3333:4444:5555::7777:8888' is not a valid IPv6 address for record type 'AAAA'", "source": "CFN_LINT", "entity": { - "logicalId": "Fn", + "logicalId": "MyRecordSetGroup", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.RecordSets.2.ResourceRecords.5", + "category": "Resource", + "startLine": 142, + "startColumn": 15, + "endLine": 142, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/function_deploymentpreference_without_alias.yaml": { - "filePath": "bad/sam/function_deploymentpreference_without_alias.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [Fn] is invalid. 'DeploymentPreference' requires AutoPublishAlias property to be specified.", + "message": "'127.0.0.1 ' is not a valid IPv4 address for record type 'A'", "source": "CFN_LINT", "entity": { - "logicalId": "Fn", + "logicalId": "MyRecordSetGroup", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.RecordSets.3.ResourceRecords.0", + "category": "Resource", + "startLine": 147, + "startColumn": 15, + "endLine": 147, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/function_dlq_invalid_type.yaml": { - "filePath": "bad/sam/function_dlq_invalid_type.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [Fn] is invalid. 'DeadLetterQueue' requires Type of ['SQS', 'SNS']", + "message": "'256.10.1.256' is not a valid IPv4 address for record type 'A'", "source": "CFN_LINT", "entity": { - "logicalId": "Fn", + "logicalId": "MyRecordSetGroup", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.RecordSets.4.ResourceRecords.0", + "category": "Resource", + "startLine": 152, + "startColumn": 15, + "endLine": 152, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/function_dlq_missing_targetarn.yaml": { - "filePath": "bad/sam/function_dlq_missing_targetarn.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [Fn] is invalid. 'DeadLetterQueue' requires Type and TargetArn properties to be specified.", + "message": "CAA record value '1 issue \"amazon.com; example.com\"' must match format: flag tag 'value'", "source": "CFN_LINT", "entity": { - "logicalId": "Fn", + "logicalId": "MyRecordSetGroup", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.RecordSets.5.ResourceRecords.0", + "category": "Resource", + "startLine": 157, + "startColumn": 15, + "endLine": 157, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/function_functionscaling_without_capacityprovider.yaml": { - "filePath": "bad/sam/function_functionscaling_without_capacityprovider.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [Fn] is invalid. 'FunctionScalingConfig' requires 'CapacityProviderConfig'.", + "message": "CAA record value 'A issue \"amazon.com; example.com\"' must match format: flag tag 'value'", "source": "CFN_LINT", "entity": { - "logicalId": "Fn", + "logicalId": "MyRecordSetGroup", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.RecordSets.5.ResourceRecords.1", + "category": "Resource", + "startLine": 158, + "startColumn": 15, + "endLine": 158, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/function_image_with_handler_runtime.yaml": { - "filePath": "bad/sam/function_image_with_handler_runtime.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [Fn] is invalid. Runtime, Handler, Layers cannot be present when PackageType is of type `Image`", + "message": "CAA record value '0 special-value \"amazon.com\"' must match format: flag tag 'value'", "source": "CFN_LINT", "entity": { - "logicalId": "Fn", + "logicalId": "MyRecordSetGroup", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.RecordSets.5.ResourceRecords.2", + "category": "Resource", + "startLine": 159, + "startColumn": 15, + "endLine": 159, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/function_packagetype_invalid.yaml": { - "filePath": "bad/sam/function_packagetype_invalid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [Fn] is invalid. invalid 'PackageType' : Banana", + "message": "MX record value 'mx1.example.com' must match format: priority domain", "source": "CFN_LINT", "entity": { - "logicalId": "Fn", + "logicalId": "MyRecordSetGroup", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.RecordSets.7.ResourceRecords.0", + "category": "Resource", + "startLine": 169, + "startColumn": 15, + "endLine": 169, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/function_provisioned_concurrency_without_alias.yaml": { - "filePath": "bad/sam/function_provisioned_concurrency_without_alias.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [Fn] is invalid. To set ProvisionedConcurrencyConfig AutoPublishALias must be defined on the function", + "message": "MX record value '65536 mx2.example.com' must match format: priority domain", "source": "CFN_LINT", "entity": { - "logicalId": "Fn", + "logicalId": "MyRecordSetGroup", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.RecordSets.7.ResourceRecords.1", + "category": "Resource", + "startLine": 170, + "startColumn": 15, + "endLine": 170, + "endColumn": 16, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/function_url_config_missing_authtype.yaml": { - "filePath": "bad/sam/function_url_config_missing_authtype.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3029", "severity": "ERROR", - "message": "Error transforming template: Resource with id [Fn] is invalid. AuthType is required to configure function property `FunctionUrlConfig`. Please provide either AWS_IAM or NONE.", + "message": "TTL must not be set when AliasTarget is specified", "source": "CFN_LINT", "entity": { - "logicalId": "Fn", + "logicalId": "MyAliasRecordSet", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.TTL", + "category": "Resource", + "startLine": 113, + "startColumn": 7, + "endLine": 113, + "endColumn": 10, + "ruleDescription": "Validate Route53 record set aliases", "phase": "LINT" - } - ] - }, - "bad/sam/function_versiondeletionpolicy_without_alias.yaml": { - "filePath": "bad/sam/function_versiondeletionpolicy_without_alias.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", - "severity": "ERROR", - "message": "Error transforming template: Resource with id [Fn] is invalid. 'VersionDeletionPolicy' requires 'AutoPublishAlias'.", + "ruleId": "W1054", + "severity": "WARN", + "message": "Found a string 'AWS::Region' that appears to be a pseudo parameter reference; use 'Ref: AWS::Region' instead", "source": "CFN_LINT", "entity": { - "logicalId": "Fn", + "logicalId": "MyHostedZone", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::HostedZone" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.VPCs.0.VPCRegion", + "suggestedFix": "Use Ref to reference pseudo parameters instead of embedding them as literal strings", + "category": "Intrinsic Function", + "startLine": 22, + "startColumn": 11, + "endLine": 22, + "endColumn": 20, + "ruleDescription": "String value matches a pseudo parameter; use Ref instead", "phase": "LINT" - } - ] - }, - "bad/sam/function_zip_missing_runtime_handler.yaml": { - "filePath": "bad/sam/function_zip_missing_runtime_handler.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", - "severity": "ERROR", - "message": "Error transforming template: Resource with id [Fn] is invalid. Runtime and Handler needs to be present when PackageType is of type `Zip`", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Fn", + "logicalId": "MyHostedZone", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::HostedZone" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", - "phase": "LINT" - } - ] - }, - "bad/sam/function_zip_with_imageuri.yaml": { - "filePath": "bad/sam/function_zip_with_imageuri.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 19, + "startColumn": 7, + "endLine": 19, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", - "severity": "ERROR", - "message": "Error transforming template: Resource with id [Fn] is invalid. ImageUri or ImageConfig cannot be present when PackageType is of type `Zip`", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Fn", + "logicalId": "MyTXTRecordSet", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", - "phase": "LINT" - } - ] - }, - "bad/sam/globals_not_dict.yaml": { - "filePath": "bad/sam/globals_not_dict.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 + "propertyPath": "Properties.HostedZoneId", + "category": "Best Practice", + "startLine": 27, + "startColumn": 7, + "endLine": 27, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyHostedZone'" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", - "severity": "ERROR", - "message": "Error transforming template: 'Globals' section is invalid. It must be a non-empty dictionary", - "source": "CFN_LINT", - "propertyPath": "Globals", - "category": "Structure", - "startLine": 2, - "startColumn": 1, - "endLine": 2, - "endColumn": 8, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", - "phase": "LINT" - } - ] - }, - "bad/sam/globals_section_not_dict.yaml": { - "filePath": "bad/sam/globals_section_not_dict.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyARecordSet", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.HostedZoneId", + "category": "Best Practice", + "startLine": 40, + "startColumn": 7, + "endLine": 40, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyHostedZone'" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", - "severity": "ERROR", - "message": "Error transforming template: 'Globals' section is invalid. Value of ${section} must be a dictionary", - "source": "CFN_LINT", - "propertyPath": "Globals", - "category": "Structure", - "startLine": 2, - "startColumn": 1, - "endLine": 2, - "endColumn": 8, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", - "phase": "LINT" + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyAAAARecordSet", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.HostedZoneId", + "category": "Best Practice", + "startLine": 50, + "startColumn": 7, + "endLine": 50, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyHostedZone'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyCAARecordSet", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.HostedZoneId", + "category": "Best Practice", + "startLine": 64, + "startColumn": 7, + "endLine": 64, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyHostedZone'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyCNAMERecordSet", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.HostedZoneId", + "category": "Best Practice", + "startLine": 75, + "startColumn": 7, + "endLine": 75, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyHostedZone'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyCNAMERecordSetConditions", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.HostedZoneId", + "category": "Best Practice", + "startLine": 86, + "startColumn": 7, + "endLine": 86, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyHostedZone'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyMXRecordSet", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.HostedZoneId", + "category": "Best Practice", + "startLine": 99, + "startColumn": 7, + "endLine": 99, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyHostedZone'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyAliasRecordSet", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.HostedZoneId", + "category": "Best Practice", + "startLine": 110, + "startColumn": 7, + "endLine": 110, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyHostedZone'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyRecordSetGroup", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "propertyPath": "Properties.HostedZoneId", + "category": "Best Practice", + "startLine": 121, + "startColumn": 7, + "endLine": 121, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyHostedZone'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PoorlyConfiguredRoute53", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "propertyPath": "Properties.HostedZoneId", + "category": "Best Practice", + "startLine": 174, + "startColumn": 7, + "endLine": 174, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyHostedZone'" + } + }, + { + "ruleId": "I9002", + "severity": "INFO", + "message": "'TTL' is ignored in this configuration (from extension)", + "source": "ENGINE", + "entity": { + "logicalId": "MyAliasRecordSet", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.TTL", + "category": "Best Practice", + "startLine": 113, + "startColumn": 7, + "endLine": 113, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Property is ignored in this configuration (from extension)", + "phase": "SCHEMA" } ] }, - "bad/sam/globals_unknown_property.yaml": { - "filePath": "bad/sam/globals_unknown_property.yaml", + "bad/route53_conditional_record_arrays.yaml": { + "filePath": "bad/route53_conditional_record_arrays.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 10, "counts": { "fatal": 0, - "errors": 1, + "errors": 10, "warnings": 0, - "informational": 0, + "informational": 10, "debug": 0 }, "suppressed": 0, @@ -10515,579 +10463,325 @@ }, "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: 'Globals' section is invalid. 'NotARealProperty' is not a supported property of 'Function'. Must be one of the following values - ['Handler', 'Runtime', 'CodeUri', 'DeadLetterQueue', 'Description', 'MemorySize', 'Timeout', 'VpcConfig', 'Environment', 'Tags', 'PropagateTags', 'Tracing', 'KmsKeyArn', 'AutoPublishAlias', 'AutoPublishAliasAllProperties', 'Layers', 'DeploymentPreference', 'RolePath', 'PermissionsBoundary', 'ReservedConcurrentExecutions', 'ProvisionedConcurrencyConfig', 'AssumeRolePolicyDocument', 'EventInvokeConfig', 'FileSystemConfigs', 'CodeSigningConfigArn', 'Architectures', 'SnapStart', 'EphemeralStorage', 'FunctionUrlConfig', 'RuntimeManagementConfig', 'LoggingConfig', 'RecursiveLoop', 'SourceKMSKeyArn', 'TenancyConfig', 'DurableConfig', 'CapacityProviderConfig', 'FunctionScalingConfig', 'PublishToLatestPublished', 'VersionDeletionPolicy']", + "message": "'invalid-standalone-true' is not a valid IPv4 address for record type 'A'", "source": "CFN_LINT", - "propertyPath": "Globals", - "category": "Structure", - "startLine": 2, - "startColumn": 1, - "endLine": 2, - "endColumn": 8, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "entity": { + "logicalId": "StandaloneInvalidTrue", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.ResourceRecords.0", + "category": "Resource", + "startLine": 21, + "startColumn": 12, + "endLine": 21, + "endColumn": 13, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/globals_unknown_section.yaml": { - "filePath": "bad/sam/globals_unknown_section.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: 'Globals' section is invalid. 'Foo' is not supported. Must be one of the following values - ['Api', 'CapacityProvider', 'Function', 'HttpApi', 'LayerVersion', 'MicrovmImage', 'NetworkConnector', 'SimpleTable', 'StateMachine', 'WebSocketApi']", + "message": "'invalid-standalone-false' is not a valid IPv4 address for record type 'A'", "source": "CFN_LINT", - "propertyPath": "Globals", - "category": "Structure", - "startLine": 2, - "startColumn": 1, - "endLine": 2, - "endColumn": 8, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "entity": { + "logicalId": "StandaloneInvalidFalse", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.ResourceRecords.0", + "category": "Resource", + "startLine": 33, + "startColumn": 12, + "endLine": 33, + "endColumn": 13, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/graphqlapi_missing_auth.yaml": { - "filePath": "bad/sam/graphqlapi_missing_auth.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [MyApi] is invalid. Missing required property 'Auth'.", + "message": "'invalid-standalone-mixed-true' is not a valid IPv4 address for record type 'A'", "source": "CFN_LINT", "entity": { - "logicalId": "MyApi", + "logicalId": "StandaloneMixedInvalidTrue", "entityType": "Resource", - "resourceType": "AWS::Serverless::GraphQLApi" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties/Auth", - "category": "Structure", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 8, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.ResourceRecords.1", + "category": "Resource", + "startLine": 44, + "startColumn": 13, + "endLine": 44, + "endColumn": 14, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/layerversion_invalid_compatible_architectures.yaml": { - "filePath": "bad/sam/layerversion_invalid_compatible_architectures.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [Layer] is invalid. CompatibleArchitectures needs to be a list of 'x86_64' or 'arm64'", + "message": "'invalid-standalone-mixed-false' is not a valid IPv4 address for record type 'A'", "source": "CFN_LINT", "entity": { - "logicalId": "Layer", + "logicalId": "StandaloneMixedInvalidFalse", "entityType": "Resource", - "resourceType": "AWS::Serverless::LayerVersion" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.ResourceRecords.1", + "category": "Resource", + "startLine": 57, + "startColumn": 13, + "endLine": 57, + "endColumn": 14, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/layerversion_invalid_retention_policy.yaml": { - "filePath": "bad/sam/layerversion_invalid_retention_policy.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [Layer] is invalid. 'RetentionPolicy' must be one of the following options: ['Retain', 'Delete'].", + "message": "'invalid-group-true' is not a valid IPv4 address for record type 'A'", "source": "CFN_LINT", "entity": { - "logicalId": "Layer", + "logicalId": "GroupInvalidTrue", "entityType": "Resource", - "resourceType": "AWS::Serverless::LayerVersion" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.RecordSets.0.ResourceRecords.0", + "category": "Resource", + "startLine": 67, + "startColumn": 31, + "endLine": 67, + "endColumn": 32, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/simpletable_primarykey_invalid_type.yaml": { - "filePath": "bad/sam/simpletable_primarykey_invalid_type.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [MyTable] is invalid. Invalid 'Type' \"Banana\".", + "message": "'invalid-group-false' is not a valid IPv4 address for record type 'A'", "source": "CFN_LINT", "entity": { - "logicalId": "MyTable", + "logicalId": "GroupInvalidFalse", "entityType": "Resource", - "resourceType": "AWS::Serverless::SimpleTable" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties/PrimaryKey", - "category": "Structure", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 17, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.RecordSets.0.ResourceRecords.0", + "category": "Resource", + "startLine": 85, + "startColumn": 31, + "endLine": 85, + "endColumn": 32, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/simpletable_primarykey_missing_type.yaml": { - "filePath": "bad/sam/simpletable_primarykey_missing_type.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [MyTable] is invalid. Property 'PrimaryKey.Type' is required.", + "message": "'invalid-group-mixed-true' is not a valid IPv4 address for record type 'A'", "source": "CFN_LINT", "entity": { - "logicalId": "MyTable", + "logicalId": "GroupMixedInvalidTrue", "entityType": "Resource", - "resourceType": "AWS::Serverless::SimpleTable" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties/PrimaryKey", - "category": "Structure", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 17, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.RecordSets.0.ResourceRecords.1", + "category": "Resource", + "startLine": 97, + "startColumn": 17, + "endLine": 97, + "endColumn": 18, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/statemachine_both_definitions.yaml": { - "filePath": "bad/sam/statemachine_both_definitions.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [MySM] is invalid. Specify either 'Definition' or 'DefinitionUri' property and not both.", + "message": "'invalid-group-mixed-false' is not a valid IPv4 address for record type 'A'", "source": "CFN_LINT", "entity": { - "logicalId": "MySM", + "logicalId": "GroupMixedInvalidFalse", "entityType": "Resource", - "resourceType": "AWS::Serverless::StateMachine" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.RecordSets.0.ResourceRecords.1", + "category": "Resource", + "startLine": 117, + "startColumn": 17, + "endLine": 117, + "endColumn": 18, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/statemachine_no_definition.yaml": { - "filePath": "bad/sam/statemachine_no_definition.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", + "ruleId": "E3023", "severity": "ERROR", - "message": "Error transforming template: Resource with id [MySM] is invalid. Either 'Definition' or 'DefinitionUri' property must be specified.", + "message": "CNAME records must have at most 1 ResourceRecord", "source": "CFN_LINT", "entity": { - "logicalId": "MySM", + "logicalId": "StandaloneUnresolvedCnameCardinality", "entityType": "Resource", - "resourceType": "AWS::Serverless::StateMachine" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties", - "category": "Structure", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.ResourceRecords", + "category": "Resource", + "startLine": 125, + "startColumn": 7, + "endLine": 125, + "endColumn": 22, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" - } - ] - }, - "bad/sam/transform_bogus_name.yaml": { - "filePath": "bad/sam/transform_bogus_name.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3038", + "ruleId": "E3023", "severity": "ERROR", - "message": "Resource type 'AWS::Serverless::Function' requires the AWS::Serverless-2016-10-31 transform", + "message": "CNAME records must have at most 1 ResourceRecord", "source": "CFN_LINT", "entity": { - "logicalId": "MyFn", + "logicalId": "GroupUnresolvedCnameCardinality", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "category": "Structure", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 7, - "ruleDescription": "Check if Serverless Resources have Serverless Transform", + "propertyPath": "Properties.RecordSets.0.ResourceRecords", + "category": "Resource", + "startLine": 136, + "startColumn": 11, + "endLine": 136, + "endColumn": 26, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyFn", + "logicalId": "StandaloneInvalidTrue", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/sam/transform_wrong_date.yaml": { - "filePath": "bad/sam/transform_wrong_date.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 1, - "debug": 0 + "startLine": 15, + "startColumn": 7, + "endLine": 15, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3038", - "severity": "ERROR", - "message": "Resource type 'AWS::Serverless::Function' requires the AWS::Serverless-2016-10-31 transform", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyFn", + "logicalId": "StandaloneInvalidFalse", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSet" }, - "category": "Structure", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 7, - "ruleDescription": "Check if Serverless Resources have Serverless Transform", - "phase": "LINT" + "propertyPath": "Properties.HostedZoneName", + "category": "Best Practice", + "startLine": 26, + "startColumn": 7, + "endLine": 26, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyFn", + "logicalId": "StandaloneMixedInvalidTrue", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/schema_additional_props.yaml": { - "filePath": "bad/schema_additional_props.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 2, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('NotARealProperty' was unexpected)", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "StandaloneMixedInvalidFalse", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.NotARealProperty", - "category": "Schema", - "startLine": 7, + "propertyPath": "Properties.HostedZoneName", + "category": "Best Practice", + "startLine": 49, "startColumn": 7, - "endLine": 7, - "endColumn": 23, - "ruleDescription": "Additional properties are not allowed", + "endLine": 49, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "NotARealProperty", - "extra": { - "allowed_properties": [ - "AbacStatus", - "AccelerateConfiguration", - "AccessControl", - "AnalyticsConfigurations", - "Arn", - "BucketEncryption", - "BucketName", - "BucketNamePrefix", - "BucketNamespace", - "CorsConfiguration", - "DomainName", - "DualStackDomainName", - "IntelligentTieringConfigurations", - "InventoryConfigurations", - "LifecycleConfiguration", - "LoggingConfiguration", - "MetadataConfiguration", - "MetadataTableConfiguration", - "MetricsConfigurations", - "NotificationConfiguration", - "ObjectLockConfiguration", - "ObjectLockEnabled", - "OwnershipControls", - "PublicAccessBlockConfiguration", - "RegionalDomainName", - "ReplicationConfiguration", - "Tags", - "VersioningConfiguration", - "WebsiteConfiguration", - "WebsiteURL" - ] - } + "lifecycle": "create-only" } }, { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('BukcetName' was unexpected)", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "GroupInvalidTrue", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.BukcetName", - "category": "Schema", - "startLine": 8, + "propertyPath": "Properties.HostedZoneName", + "category": "Best Practice", + "startLine": 61, "startColumn": 7, - "endLine": 8, - "endColumn": 17, - "ruleDescription": "Additional properties are not allowed", + "endLine": 61, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "BukcetName", - "extra": { - "allowed_properties": [ - "AbacStatus", - "AccelerateConfiguration", - "AccessControl", - "AnalyticsConfigurations", - "Arn", - "BucketEncryption", - "BucketName", - "BucketNamePrefix", - "BucketNamespace", - "CorsConfiguration", - "DomainName", - "DualStackDomainName", - "IntelligentTieringConfigurations", - "InventoryConfigurations", - "LifecycleConfiguration", - "LoggingConfiguration", - "MetadataConfiguration", - "MetadataTableConfiguration", - "MetricsConfigurations", - "NotificationConfiguration", - "ObjectLockConfiguration", - "ObjectLockEnabled", - "OwnershipControls", - "PublicAccessBlockConfiguration", - "RegionalDomainName", - "ReplicationConfiguration", - "Tags", - "VersioningConfiguration", - "WebsiteConfiguration", - "WebsiteURL" - ] - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "GroupInvalidFalse", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 6, + "startLine": 75, "startColumn": 7, - "endLine": 6, - "endColumn": 17, + "endLine": 75, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -11095,37 +10789,106 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "GroupMixedInvalidTrue", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 89, + "startColumn": 7, + "endLine": 89, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "GroupMixedInvalidFalse", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "propertyPath": "Properties.HostedZoneName", + "category": "Best Practice", + "startLine": 105, + "startColumn": 7, + "endLine": 105, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "StandaloneUnresolvedCnameCardinality", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.HostedZoneName", + "category": "Best Practice", + "startLine": 121, + "startColumn": 7, + "endLine": 121, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "GroupUnresolvedCnameCardinality", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "propertyPath": "Properties.HostedZoneName", + "category": "Best Practice", + "startLine": 131, + "startColumn": 7, + "endLine": 131, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } } ] }, - "bad/schema_composition.yaml": { - "filePath": "bad/schema_composition.yaml", + "bad/route53_conditional_scenarios.yaml": { + "filePath": "bad/route53_conditional_scenarios.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 7, "counts": { - "fatal": 2, - "errors": 0, + "fatal": 0, + "errors": 8, "warnings": 0, - "informational": 5, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -11134,371 +10897,236 @@ }, "diagnostics": [ { - "ruleId": "F3017", - "severity": "FATAL", - "message": "Value is not valid under any of the 5 anyOf schemas for AWS::EC2::Volume (0 branches matched; at least one is required). Required property combinations: ['AvailabilityZone', 'Size'] or ['AvailabilityZone', 'SnapshotId'] or ['AvailabilityZoneId', 'Size'] or ['AvailabilityZoneId', 'SnapshotId'] or ['SourceVolumeId']. Branch failures: branch 1: 'AvailabilityZone' is a required property, 'Size' is a required property; branch 2: 'AvailabilityZone' is a required property, 'SnapshotId' is a required property; branch 3: 'AvailabilityZoneId' is a required property, 'Size' is a required property; branch 4: 'AvailabilityZoneId' is a required property, 'SnapshotId' is a required property; branch 5: 'SourceVolumeId' is a required property.", - "source": "SCHEMA", + "ruleId": "E3023", + "severity": "ERROR", + "message": "'not-an-ipv4-address' is not a valid IPv4 address for record type 'A'", + "source": "CFN_LINT", "entity": { - "logicalId": "NoAZ", + "logicalId": "ConditionalRecordSetsInvalidFirst", "entityType": "Resource", - "resourceType": "AWS::EC2::Volume" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties", - "category": "Schema", - "startLine": 13, - "startColumn": 5, - "endLine": 13, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Value not valid under anyOf", - "phase": "SCHEMA", - "context": { - "expectedConstraint": "at least one anyOf branch", - "extra": { - "branchCount": 5, - "branchFailures": [ - { - "branch": 1, - "reasons": [ - { - "message": "'AvailabilityZone' is a required property", - "propertyPath": "Properties" - }, - { - "message": "'Size' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 2, - "reasons": [ - { - "message": "'AvailabilityZone' is a required property", - "propertyPath": "Properties" - }, - { - "message": "'SnapshotId' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 3, - "reasons": [ - { - "message": "'AvailabilityZoneId' is a required property", - "propertyPath": "Properties" - }, - { - "message": "'Size' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 4, - "reasons": [ - { - "message": "'AvailabilityZoneId' is a required property", - "propertyPath": "Properties" - }, - { - "message": "'SnapshotId' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 5, - "reasons": [ - { - "message": "'SourceVolumeId' is a required property", - "propertyPath": "Properties" - } - ] - } - ], - "compositionKind": "anyOf", - "matchCount": 0, - "matchOutcome": "zeroMatches", - "validPropertyCombinations": [ - [ - "AvailabilityZone", - "Size" - ], - [ - "AvailabilityZone", - "SnapshotId" - ], - [ - "AvailabilityZoneId", - "Size" - ], - [ - "AvailabilityZoneId", - "SnapshotId" - ], - [ - "SourceVolumeId" - ] - ] - } - } + "propertyPath": "Properties.RecordSets.0.ResourceRecords.0", + "category": "Resource", + "startLine": 60, + "startColumn": 31, + "endLine": 60, + "endColumn": 32, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" }, { - "ruleId": "F3018", - "severity": "FATAL", - "message": "Value is not valid under any of the 2 oneOf schemas for AWS::AppStream::ImageBuilder (0 branches matched; exactly one is required). Required property combinations: ['ImageArn'] or ['ImageName']. Branch failures: branch 1: 'ImageName' is a required property; branch 2: 'ImageArn' is a required property.", - "source": "SCHEMA", + "ruleId": "E3023", + "severity": "ERROR", + "message": "'still-not-an-ipv4-address' is not a valid IPv4 address for record type 'A'", + "source": "CFN_LINT", "entity": { - "logicalId": "NoImage", + "logicalId": "ConditionalRecordSetsInvalidSecond", "entityType": "Resource", - "resourceType": "AWS::AppStream::ImageBuilder" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties", - "category": "Schema", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Value not valid under oneOf", - "phase": "SCHEMA", - "context": { - "expectedConstraint": "exactly one oneOf branch", - "extra": { - "branchCount": 2, - "branchFailures": [ - { - "branch": 1, - "reasons": [ - { - "message": "'ImageName' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 2, - "reasons": [ - { - "message": "'ImageArn' is a required property", - "propertyPath": "Properties" - } - ] - } - ], - "compositionKind": "oneOf", - "matchCount": 0, - "matchOutcome": "zeroMatches", - "validPropertyCombinations": [ - [ - "ImageArn" - ], - [ - "ImageName" - ] - ] - } - } + "propertyPath": "Properties.RecordSets.0.ResourceRecords.0", + "category": "Resource", + "startLine": 78, + "startColumn": 31, + "endLine": 78, + "endColumn": 32, + "ruleDescription": "Validate Route53 RecordSets", + "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)", + "ruleId": "E3023", + "severity": "ERROR", + "message": "'invalid-first-branch' is not a valid IPv4 address for record type 'A'", "source": "CFN_LINT", "entity": { - "logicalId": "NoAZ", + "logicalId": "WholePropertiesRecordsInvalidFirst", "entityType": "Resource", - "resourceType": "AWS::EC2::Volume" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "category": "Best Practice", - "startLine": 11, - "startColumn": 3, - "endLine": 11, - "endColumn": 7, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.RecordSets.0.ResourceRecords.0", + "category": "Resource", + "startLine": 88, + "startColumn": 31, + "endLine": 88, + "endColumn": 32, + "ruleDescription": "Validate Route53 RecordSets", "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)", + "ruleId": "E3023", + "severity": "ERROR", + "message": "'invalid-second-branch' is not a valid IPv4 address for record type 'A'", "source": "CFN_LINT", "entity": { - "logicalId": "NoAZ", + "logicalId": "WholePropertiesRecordsInvalidSecond", "entityType": "Resource", - "resourceType": "AWS::EC2::Volume" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "category": "Best Practice", - "startLine": 11, - "startColumn": 3, - "endLine": 11, - "endColumn": 7, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.RecordSets.0.ResourceRecords.0", + "category": "Resource", + "startLine": 110, + "startColumn": 31, + "endLine": 110, + "endColumn": 32, + "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3029", + "severity": "ERROR", + "message": "TTL must not be set when AliasTarget is specified", + "source": "CFN_LINT", "entity": { - "logicalId": "NoImage", + "logicalId": "AliasConflictFirst", "entityType": "Resource", - "resourceType": "AWS::AppStream::ImageBuilder" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.TTL", + "category": "Resource", + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Validate Route53 record set aliases", + "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'NoImage' of type 'AWS::AppStream::ImageBuilder' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3029", + "severity": "ERROR", + "message": "TTL must not be set when AliasTarget is specified", + "source": "CFN_LINT", "entity": { - "logicalId": "NoImage", + "logicalId": "AliasConflictSecond", "entityType": "Resource", - "resourceType": "AWS::AppStream::ImageBuilder" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 6, + "propertyPath": "Properties.TTL", + "category": "Resource", + "startLine": 28, "startColumn": 5, - "endLine": 6, + "endLine": 28, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Validate Route53 record set aliases", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'NoAZ' of type 'AWS::EC2::Volume' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "NoAZ", + "ruleId": "E3029", + "severity": "ERROR", + "message": "AliasTarget cannot be used with record type 'NS'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConditionalInvalidAliasTypes", "entityType": "Resource", - "resourceType": "AWS::EC2::Volume" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 13, - "startColumn": 5, - "endLine": 13, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.AliasTarget", + "category": "Resource", + "startLine": 48, + "startColumn": 7, + "endLine": 48, + "endColumn": 18, + "ruleDescription": "Validate Route53 record set aliases", "phase": "LINT" - } - ] - }, - "bad/schema_conditional_type.yaml": { - "filePath": "bad/schema_conditional_type.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W9003", - "severity": "WARN", - "message": "12345 (from Fn::If on condition 'IsProd') is not of type 'string' - automatically coerced (number to string)", + "ruleId": "E3029", + "severity": "ERROR", + "message": "AliasTarget cannot be used with record type 'SOA'", "source": "CFN_LINT", "entity": { - "logicalId": "Bucket", + "logicalId": "ConditionalInvalidAliasTypes", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 12, + "propertyPath": "Properties.AliasTarget", + "category": "Resource", + "startLine": 48, "startColumn": 7, - "endLine": 12, - "endColumn": 17, - "conditionScenario": { - "IsProd": true + "endLine": 48, + "endColumn": 18, + "ruleDescription": "Validate Route53 record set aliases", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalInvalidAliasTypes", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" }, - "ruleDescription": "Property type coercion warning", + "propertyPath": "Properties.HostedZoneName", + "category": "Best Practice", + "startLine": 45, + "startColumn": 7, + "endLine": 45, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "resolutionSource": "Fn::If on condition 'IsProd'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "ConditionalRecordSetsInvalidFirst", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 12, + "startLine": 54, "startColumn": 7, - "endLine": 12, - "endColumn": 17, + "endLine": 54, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "ConditionalRecordSetsInvalidSecond", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 11, - "startColumn": 5, - "endLine": 11, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 68, + "startColumn": 7, + "endLine": 68, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } } ] }, - "bad/schema_enum_violation.yaml": { - "filePath": "bad/schema_enum_violation.yaml", + "bad/s3_tiering_bad_days.yaml": { + "filePath": "bad/s3_tiering_bad_days.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 1, - "warnings": 2, - "informational": 2, + "errors": 4, + "warnings": 0, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -11507,103 +11135,84 @@ }, "diagnostics": [ { - "ruleId": "E3045", + "ruleId": "E3061", "severity": "ERROR", - "message": "A bucket with 'AccessControl' set should also have at least one 'OwnershipControl' configured", + "message": "Days 30 for ARCHIVE_ACCESS must be between 90 and 730", "source": "CFN_LINT", "entity": { "logicalId": "Bucket", "entityType": "Resource", "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties", - "suggestedFix": "Add OwnershipControls to the bucket when using AccessControl", + "propertyPath": "Properties.IntelligentTieringConfigurations[0].Tierings[0].Days", + "suggestedFix": "Set Days between 90 and 730", "category": "Resource", "startLine": 5, "startColumn": 5, "endLine": 5, "endColumn": 15, - "ruleDescription": "Validate AccessControl are set with OwnershipControls", + "ruleDescription": "Validate the days for tierings in IntelligentTieringConfigurations", "phase": "LINT" }, { - "ruleId": "W3030", - "severity": "WARN", - "message": "'InvalidAccessControl' is not one of ['AuthenticatedRead', 'AwsExecRead', 'BucketOwnerFullControl', 'BucketOwnerRead', 'LogDeliveryWrite', 'Private', 'PublicRead', 'PublicReadWrite']", + "ruleId": "E3061", + "severity": "ERROR", + "message": "Days 800 for ARCHIVE_ACCESS must be between 90 and 730", "source": "CFN_LINT", "entity": { "logicalId": "Bucket", "entityType": "Resource", "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.AccessControl", - "category": "Schema", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 20, - "ruleDescription": "Value not in allowed enum", - "phase": "SCHEMA", - "context": { - "actualValue": "InvalidAccessControl", - "extra": { - "allowed_values": [ - "AuthenticatedRead", - "AwsExecRead", - "BucketOwnerFullControl", - "BucketOwnerRead", - "LogDeliveryWrite", - "Private", - "PublicRead", - "PublicReadWrite" - ] - } - } + "propertyPath": "Properties.IntelligentTieringConfigurations[1].Tierings[0].Days", + "suggestedFix": "Set Days between 90 and 730", + "category": "Resource", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Validate the days for tierings in IntelligentTieringConfigurations", + "phase": "LINT" }, { - "ruleId": "W3045", - "severity": "WARN", - "message": "AccessControl property is deprecated. Use bucket policies instead", + "ruleId": "E3061", + "severity": "ERROR", + "message": "Days 100 for DEEP_ARCHIVE_ACCESS must be between 180 and 730", "source": "CFN_LINT", "entity": { "logicalId": "Bucket", "entityType": "Resource", "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.AccessControl", - "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", - "category": "Deprecation", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 20, - "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", - "phase": "LINT", - "context": { - "actualValue": "InvalidAccessControl" - } + "propertyPath": "Properties.IntelligentTieringConfigurations[1].Tierings[1].Days", + "suggestedFix": "Set Days between 180 and 730", + "category": "Resource", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Validate the days for tierings in IntelligentTieringConfigurations", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3061", + "severity": "ERROR", + "message": "Days 900 for DEEP_ARCHIVE_ACCESS must be between 180 and 730", + "source": "CFN_LINT", "entity": { "logicalId": "Bucket", "entityType": "Resource", "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.IntelligentTieringConfigurations[1].Tierings[2].Days", + "suggestedFix": "Set Days between 180 and 730", + "category": "Resource", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Validate the days for tierings in IntelligentTieringConfigurations", + "phase": "LINT" }, { "ruleId": "I9040", @@ -11627,874 +11236,859 @@ } ] }, - "bad/schema_format_violation.yaml": { - "filePath": "bad/schema_format_violation.yaml", + "bad/sagemaker_instance_types.yaml": { + "filePath": "bad/sagemaker_instance_types.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 5, "counts": { - "fatal": 0, - "errors": 1, - "warnings": 1, - "informational": 4, - "debug": 0 - }, - "suppressed": 0, + "fatal": 36, + "errors": 5, + "warnings": 0, + "informational": 8, + "debug": 0 + }, + "suppressed": 0, "strict": false, "severityLevel": "DEBUG" }, "diagnostics": [ { - "ruleId": "E1154", - "severity": "ERROR", - "message": "'subnet-bad' does not match format 'AWS::EC2::Subnet.Id'", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'MonitoringScheduleName' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Instance", + "logicalId": "MonitoringSchedule", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SageMaker::MonitoringSchedule" }, - "propertyPath": "Properties.SubnetId", - "category": "Intrinsic Function", - "startLine": 7, - "startColumn": 7, - "endLine": 7, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'MonitoringScheduleName'", + "category": "Schema", + "startLine": 6, + "startColumn": 5, + "endLine": 6, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate VPC subnet id format", - "phase": "SCHEMA", - "context": { - "actualValue": "subnet-bad" - } + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'MonitoringAppSpecification' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Instance", + "logicalId": "MonitoringSchedule", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SageMaker::MonitoringSchedule" }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", - "phase": "LINT" + "propertyPath": "Properties.MonitoringScheduleConfig.MonitoringJobDefinition", + "suggestedFix": "Add the required property 'MonitoringAppSpecification'", + "category": "Schema", + "startLine": 8, + "startColumn": 9, + "endLine": 8, + "endColumn": 32, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'MonitoringInputs' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Instance", + "logicalId": "MonitoringSchedule", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SageMaker::MonitoringSchedule" }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.MonitoringScheduleConfig.MonitoringJobDefinition", + "suggestedFix": "Add the required property 'MonitoringInputs'", + "category": "Schema", + "startLine": 8, + "startColumn": 9, + "endLine": 8, + "endColumn": 32, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'MonitoringOutputConfig' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Instance", + "logicalId": "MonitoringSchedule", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SageMaker::MonitoringSchedule" }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.MonitoringScheduleConfig.MonitoringJobDefinition", + "suggestedFix": "Add the required property 'MonitoringOutputConfig'", + "category": "Schema", + "startLine": 8, + "startColumn": 9, + "endLine": 8, + "endColumn": 32, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'RoleArn' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Instance", + "logicalId": "MonitoringSchedule", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SageMaker::MonitoringSchedule" }, - "propertyPath": "Properties.SecurityGroupIds", - "category": "Best Practice", + "propertyPath": "Properties.MonitoringScheduleConfig.MonitoringJobDefinition", + "suggestedFix": "Add the required property 'RoleArn'", + "category": "Schema", "startLine": 8, - "startColumn": 7, + "startColumn": 9, "endLine": 8, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endColumn": 32, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'InstanceCount' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Instance", + "logicalId": "MonitoringSchedule", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SageMaker::MonitoringSchedule" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/schema_lifecycle.yaml": { - "filePath": "bad/schema_lifecycle.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 1, - "errors": 3, - "warnings": 5, - "informational": 8, - "debug": 0 + "propertyPath": "Properties.MonitoringScheduleConfig.MonitoringJobDefinition.MonitoringResources.ClusterConfig", + "suggestedFix": "Add the required property 'InstanceCount'", + "category": "Schema", + "startLine": 10, + "startColumn": 13, + "endLine": 10, + "endColumn": 26, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "F3003", "severity": "FATAL", - "message": "'RepositoryOwner' is a required property", + "message": "'VolumeSizeInGB' is a required property", "source": "SCHEMA", "entity": { - "logicalId": "ShutdownResource", + "logicalId": "MonitoringSchedule", "entityType": "Resource", - "resourceType": "AWS::CodeStar::GitHubRepository" + "resourceType": "AWS::SageMaker::MonitoringSchedule" + }, + "propertyPath": "Properties.MonitoringScheduleConfig.MonitoringJobDefinition.MonitoringResources.ClusterConfig", + "suggestedFix": "Add the required property 'VolumeSizeInGB'", + "category": "Schema", + "startLine": 10, + "startColumn": 13, + "endLine": 10, + "endColumn": 26, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "F3003", + "severity": "FATAL", + "message": "'ModelQualityAppSpecification' is a required property", + "source": "SCHEMA", + "entity": { + "logicalId": "ModelQualityJobDefinition", + "entityType": "Resource", + "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" }, "propertyPath": "Properties", - "suggestedFix": "Add the required property 'RepositoryOwner'", + "suggestedFix": "Add the required property 'ModelQualityAppSpecification'", "category": "Schema", - "startLine": 6, + "startLine": 14, "startColumn": 5, - "endLine": 6, + "endLine": 14, "endColumn": 15, "ruleDescription": "Required property missing", "phase": "SCHEMA" }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'dotnetcore2.1' was deprecated on '2022-01-05'. Creation was disabled on '2022-01-05', and updates were disabled on '2022-04-13'. Please consider updating to 'dotnet10'", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'ModelQualityJobInput' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "EolLambda", + "logicalId": "ModelQualityJobDefinition", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 27, - "startColumn": 7, - "endLine": 27, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "dotnetcore2.1", - "lifecycle": "end-of-life" - } + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'ModelQualityJobInput'", + "category": "Schema", + "startLine": 14, + "startColumn": 5, + "endLine": 14, + "endColumn": 15, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "E3677", - "severity": "ERROR", - "message": "Runtime 'dotnetcore2.1' is not supported with Code.ZipFile - use nodejs or python", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'ModelQualityJobOutputConfig' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "EolLambda", + "logicalId": "ModelQualityJobDefinition", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" }, - "category": "Resource", - "startLine": 23, - "startColumn": 3, - "endLine": 23, - "endColumn": 12, - "ruleDescription": "Lambda ZipFile requires nodejs or python runtime", - "phase": "LINT" + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'ModelQualityJobOutputConfig'", + "category": "Schema", + "startLine": 14, + "startColumn": 5, + "endLine": 14, + "endColumn": 15, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "E3710", - "severity": "ERROR", - "message": "Resource type 'AWS::CodeStar::GitHubRepository' is from a service that was shut down on 2024-07-25", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'RoleArn' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "ShutdownResource", + "logicalId": "ModelQualityJobDefinition", "entityType": "Resource", - "resourceType": "AWS::CodeStar::GitHubRepository" + "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" }, - "category": "Deprecation", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 19, - "ruleDescription": "Resource type is from a service that has been shut down", + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'RoleArn'", + "category": "Schema", + "startLine": 14, + "startColumn": 5, + "endLine": 14, + "endColumn": 15, + "ruleDescription": "Required property missing", "phase": "SCHEMA" }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs16.x' was deprecated on '2024-06-12'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'InstanceCount' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "DeprecatedLambda", + "logicalId": "ModelQualityJobDefinition", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 38, - "startColumn": 7, - "endLine": 38, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs16.x", - "lifecycle": "deprecated" - } + "propertyPath": "Properties.JobResources.ClusterConfig", + "suggestedFix": "Add the required property 'InstanceCount'", + "category": "Schema", + "startLine": 16, + "startColumn": 9, + "endLine": 16, + "endColumn": 22, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "W3696", - "severity": "WARN", - "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'VolumeSizeInGB' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "SunsetResource", + "logicalId": "ModelQualityJobDefinition", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" }, - "category": "Deprecation", - "startLine": 10, - "startColumn": 3, - "endLine": 10, - "endColumn": 17, - "ruleDescription": "Resource type is from a service that is sunsetting", + "propertyPath": "Properties.JobResources.ClusterConfig", + "suggestedFix": "Add the required property 'VolumeSizeInGB'", + "category": "Schema", + "startLine": 16, + "startColumn": 9, + "endLine": 16, + "endColumn": 22, + "ruleDescription": "Required property missing", "phase": "SCHEMA" }, { - "ruleId": "W3697", - "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'EndpointName' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "MaintenanceResource", + "logicalId": "InferenceExperiment", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::SageMaker::InferenceExperiment" }, - "category": "Deprecation", - "startLine": 16, - "startColumn": 3, - "endLine": 16, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'EndpointName'", + "category": "Schema", + "startLine": 22, + "startColumn": 5, + "endLine": 22, + "endColumn": 15, + "ruleDescription": "Required property missing", "phase": "SCHEMA" }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'Name' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "EolLambda", + "logicalId": "InferenceExperiment", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SageMaker::InferenceExperiment" }, - "category": "Security", - "startLine": 23, - "startColumn": 3, - "endLine": 23, - "endColumn": 12, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'Name'", + "category": "Schema", + "startLine": 22, + "startColumn": 5, + "endLine": 22, + "endColumn": 15, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'RoleArn' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "DeprecatedLambda", + "logicalId": "InferenceExperiment", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SageMaker::InferenceExperiment" }, - "category": "Security", - "startLine": 34, - "startColumn": 3, - "endLine": 34, - "endColumn": 19, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'RoleArn'", + "category": "Schema", + "startLine": 22, + "startColumn": 5, + "endLine": 22, + "endColumn": 15, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'Type' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "SunsetResource", + "logicalId": "InferenceExperiment", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::SageMaker::InferenceExperiment" }, - "propertyPath": "Properties.MeshName", - "category": "Best Practice", - "startLine": 13, - "startColumn": 7, - "endLine": 13, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'Type'", + "category": "Schema", + "startLine": 22, + "startColumn": 5, + "endLine": 22, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'InfrastructureType' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "MaintenanceResource", + "logicalId": "InferenceExperiment", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::SageMaker::InferenceExperiment" }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 19, - "startColumn": 7, - "endLine": 19, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.ModelVariants.0.InfrastructureConfig", + "suggestedFix": "Add the required property 'InfrastructureType'", + "category": "Schema", + "startLine": 24, + "startColumn": 11, + "endLine": 24, + "endColumn": 31, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'ModelName' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "MaintenanceResource", + "logicalId": "InferenceExperiment", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::SageMaker::InferenceExperiment" }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 20, - "startColumn": 7, - "endLine": 20, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.ModelVariants.0", + "suggestedFix": "Add the required property 'ModelName'", + "category": "Schema", + "startLine": 24, + "startColumn": 31, + "endLine": 24, + "endColumn": 32, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'VariantName' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "EolLambda", + "logicalId": "InferenceExperiment", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SageMaker::InferenceExperiment" }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 26, - "startColumn": 7, - "endLine": 26, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.ModelVariants.0", + "suggestedFix": "Add the required property 'VariantName'", + "category": "Schema", + "startLine": 24, + "startColumn": 31, + "endLine": 24, + "endColumn": 32, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'InstanceCount' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "DeprecatedLambda", + "logicalId": "InferenceExperiment", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SageMaker::InferenceExperiment" }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 37, - "startColumn": 7, - "endLine": 37, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.ModelVariants.0.InfrastructureConfig.RealTimeInferenceConfig", + "suggestedFix": "Add the required property 'InstanceCount'", + "category": "Schema", + "startLine": 25, + "startColumn": 13, + "endLine": 25, + "endColumn": 36, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SunsetResource' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'InfrastructureType' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "SunsetResource", + "logicalId": "InferenceExperiment", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::SageMaker::InferenceExperiment" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.ModelVariants.1.InfrastructureConfig", + "suggestedFix": "Add the required property 'InfrastructureType'", + "category": "Schema", + "startLine": 27, + "startColumn": 11, + "endLine": 27, + "endColumn": 31, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'EolLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'ModelName' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "EolLambda", + "logicalId": "InferenceExperiment", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SageMaker::InferenceExperiment" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.ModelVariants.1", + "suggestedFix": "Add the required property 'ModelName'", + "category": "Schema", + "startLine": 27, + "startColumn": 31, + "endLine": 27, + "endColumn": 32, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DeprecatedLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'VariantName' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "DeprecatedLambda", + "logicalId": "InferenceExperiment", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SageMaker::InferenceExperiment" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 36, - "startColumn": 5, - "endLine": 36, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/schema_numeric_bounds.yaml": { - "filePath": "bad/schema_numeric_bounds.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 5, - "debug": 0 + "propertyPath": "Properties.ModelVariants.1", + "suggestedFix": "Add the required property 'VariantName'", + "category": "Schema", + "startLine": 27, + "startColumn": 31, + "endLine": 27, + "endColumn": 32, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3034", + "ruleId": "F3003", "severity": "FATAL", - "message": "-1 is less than the minimum of 0", + "message": "'InstanceCount' is a required property", "source": "SCHEMA", "entity": { - "logicalId": "Queue", + "logicalId": "InferenceExperiment", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::SageMaker::InferenceExperiment" }, - "propertyPath": "Properties.VisibilityTimeout", + "propertyPath": "Properties.ModelVariants.1.InfrastructureConfig.RealTimeInferenceConfig", + "suggestedFix": "Add the required property 'InstanceCount'", "category": "Schema", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Numeric value out of bounds", - "phase": "SCHEMA", - "context": { - "actualValue": -1, - "extra": { - "maximum": 43200.0, - "minimum": 0.0 - } - } - }, - { - "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", + "startLine": 28, + "startColumn": 13, + "endLine": 28, + "endColumn": 36, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "F3003", + "severity": "FATAL", + "message": "'ValidationRole' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Queue", + "logicalId": "ModelPackage", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::SageMaker::ModelPackage" }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 8, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Properties.ValidationSpecification", + "suggestedFix": "Add the required property 'ValidationRole'", + "category": "Schema", + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 30, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker", + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "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", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'TransformInput' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Queue", + "logicalId": "ModelPackage", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::SageMaker::ModelPackage" }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 8, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Properties.ValidationSpecification.ValidationProfiles.0.TransformJobDefinition", + "suggestedFix": "Add the required property 'TransformInput'", + "category": "Schema", + "startLine": 37, + "startColumn": 13, + "endLine": 37, + "endColumn": 35, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker", + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "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", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'TransformOutput' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Queue", + "logicalId": "ModelPackage", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::SageMaker::ModelPackage" }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "propertyPath": "Properties.ValidationSpecification.ValidationProfiles.0.TransformJobDefinition", + "suggestedFix": "Add the required property 'TransformOutput'", + "category": "Schema", + "startLine": 37, + "startColumn": 13, + "endLine": 37, + "endColumn": 35, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker", + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'ProfileName' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Queue", + "logicalId": "ModelPackage", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::SageMaker::ModelPackage" }, - "propertyPath": "Properties.QueueName", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.ValidationSpecification.ValidationProfiles.0", + "suggestedFix": "Add the required property 'ProfileName'", + "category": "Schema", + "startLine": 37, + "startColumn": 35, + "endLine": 37, + "endColumn": 36, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker", + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Queue' of type 'AWS::SQS::Queue' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'InstanceCount' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Queue", + "logicalId": "ModelPackage", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::SageMaker::ModelPackage" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/schema_property_constraints.yaml": { - "filePath": "bad/schema_property_constraints.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 3, - "informational": 8, - "debug": 0 + "propertyPath": "Properties.ValidationSpecification.ValidationProfiles.0.TransformJobDefinition.TransformResources", + "suggestedFix": "Add the required property 'InstanceCount'", + "category": "Schema", + "startLine": 38, + "startColumn": 15, + "endLine": 38, + "endColumn": 33, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker", + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3031", + "ruleId": "F3003", "severity": "FATAL", - "message": "'INVALID_UPPERCASE_BUCKET' does not match pattern '^([a-z0-9][a-z0-9.-]*[a-z0-9])?$'", + "message": "'ExecutionRole' is a required property", "source": "SCHEMA", "entity": { - "logicalId": "PatternBucket", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SageMaker::Cluster" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.InstanceGroups.0", + "suggestedFix": "Add the required property 'ExecutionRole'", "category": "Schema", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 17, - "ruleDescription": "Value does not match pattern", - "phase": "SCHEMA", - "context": { - "actualValue": "INVALID_UPPERCASE_BUCKET", - "expectedConstraint": "^([a-z0-9][a-z0-9.-]*[a-z0-9])?$" - } + "startLine": 46, + "startColumn": 23, + "endLine": 46, + "endColumn": 24, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'CertificateAuthorityArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'InstanceCount' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "ReadOnlyProp", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::ACMPCA::Certificate" + "resourceType": "AWS::SageMaker::Cluster" }, - "propertyPath": "Properties.CertificateAuthorityArn", - "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 30, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" + "propertyPath": "Properties.InstanceGroups.0", + "suggestedFix": "Add the required property 'InstanceCount'", + "category": "Schema", + "startLine": 46, + "startColumn": 23, + "endLine": 46, + "endColumn": 24, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "W9009", - "severity": "WARN", - "message": "Property 'WorkGroupConfigurationUpdates' is deprecated", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'InstanceGroupName' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "DeprecatedProp", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::Athena::WorkGroup" + "resourceType": "AWS::SageMaker::Cluster" }, - "propertyPath": "Properties.WorkGroupConfigurationUpdates", - "category": "Deprecation", - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 36, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", - "ruleDescription": "Resource type sunset or shutdown", - "phase": "SCHEMA", - "context": { - "lifecycle": "deprecated" - } + "propertyPath": "Properties.InstanceGroups.0", + "suggestedFix": "Add the required property 'InstanceGroupName'", + "category": "Schema", + "startLine": 46, + "startColumn": 23, + "endLine": 46, + "endColumn": 24, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'ExecutionRole' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "ReadOnlyProp", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::ACMPCA::Certificate" + "resourceType": "AWS::SageMaker::Cluster" }, - "category": "Security", - "startLine": 8, - "startColumn": 3, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "propertyPath": "Properties.RestrictedInstanceGroups.0", + "suggestedFix": "Add the required property 'ExecutionRole'", + "category": "Schema", + "startLine": 48, + "startColumn": 23, + "endLine": 48, + "endColumn": 24, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'InstanceCount' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "PatternBucket", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SageMaker::Cluster" }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.RestrictedInstanceGroups.0", + "suggestedFix": "Add the required property 'InstanceCount'", + "category": "Schema", + "startLine": 48, + "startColumn": 23, + "endLine": 48, + "endColumn": 24, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CertificateAuthorityArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'InstanceGroupName' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "ReadOnlyProp", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::ACMPCA::Certificate" + "resourceType": "AWS::SageMaker::Cluster" }, - "propertyPath": "Properties.CertificateAuthorityArn", - "category": "Best Practice", + "propertyPath": "Properties.RestrictedInstanceGroups.0", + "suggestedFix": "Add the required property 'InstanceGroupName'", + "category": "Schema", + "startLine": 48, + "startColumn": 23, + "endLine": 48, + "endColumn": 24, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "E3640", + "severity": "ERROR", + "message": "'ml.fake.xlarge' is not valid in any region", + "source": "CFN_LINT", + "entity": { + "logicalId": "MonitoringSchedule", + "entityType": "Resource", + "resourceType": "AWS::SageMaker::MonitoringSchedule" + }, + "propertyPath": "Properties.MonitoringScheduleConfig.MonitoringJobDefinition.MonitoringResources.ClusterConfig.InstanceType", + "category": "Resource", "startLine": 11, - "startColumn": 7, + "startColumn": 15, "endLine": 11, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endColumn": 27, + "ruleDescription": "Validate SageMaker processing instance types based on region", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CertificateSigningRequest' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3642", + "severity": "ERROR", + "message": "'ml.fake.xlarge' is not valid in any region", + "source": "CFN_LINT", "entity": { - "logicalId": "ReadOnlyProp", + "logicalId": "InferenceExperiment", "entityType": "Resource", - "resourceType": "AWS::ACMPCA::Certificate" + "resourceType": "AWS::SageMaker::InferenceExperiment" }, - "propertyPath": "Properties.CertificateSigningRequest", - "category": "Best Practice", - "startLine": 12, + "propertyPath": "Properties.ModelVariants.InfrastructureConfig.RealTimeInferenceConfig.InstanceType", + "category": "Resource", + "startLine": 23, "startColumn": 7, - "endLine": 12, - "endColumn": 32, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 23, + "endColumn": 20, + "ruleDescription": "Validate SageMaker hosting instance types based on region", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SigningAlgorithm' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3643", + "severity": "ERROR", + "message": "'ml.bogus.large' is not valid in any region", + "source": "CFN_LINT", "entity": { - "logicalId": "ReadOnlyProp", + "logicalId": "ModelPackage", "entityType": "Resource", - "resourceType": "AWS::ACMPCA::Certificate" + "resourceType": "AWS::SageMaker::ModelPackage" }, - "propertyPath": "Properties.SigningAlgorithm", - "category": "Best Practice", - "startLine": 13, + "propertyPath": "Properties.ValidationSpecification.ValidationProfiles.TransformJobDefinition.TransformResources.InstanceType", + "category": "Resource", + "startLine": 36, + "startColumn": 9, + "endLine": 36, + "endColumn": 27, + "ruleDescription": "Validate SageMaker transform instance types based on region", + "phase": "LINT" + }, + { + "ruleId": "E3644", + "severity": "ERROR", + "message": "'ml.fake.xlarge' is not valid in any region", + "source": "CFN_LINT", + "entity": { + "logicalId": "Cluster", + "entityType": "Resource", + "resourceType": "AWS::SageMaker::Cluster" + }, + "propertyPath": "Properties.InstanceGroups.InstanceType", + "category": "Resource", + "startLine": 45, "startColumn": 7, - "endLine": 13, - "endColumn": 23, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 45, + "endColumn": 21, + "ruleDescription": "Validate SageMaker cluster instance types based on region", + "phase": "LINT" + }, + { + "ruleId": "E3644", + "severity": "ERROR", + "message": "'ml.bogus.large' is not valid in any region", + "source": "CFN_LINT", + "entity": { + "logicalId": "Cluster", + "entityType": "Resource", + "resourceType": "AWS::SageMaker::Cluster" + }, + "propertyPath": "Properties.RestrictedInstanceGroups.InstanceType", + "category": "Resource", + "startLine": 47, + "startColumn": 7, + "endLine": 47, + "endColumn": 31, + "ruleDescription": "Validate SageMaker cluster instance types based on region", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Validity' is create-only; updating it will cause resource replacement", + "message": "Property 'JobResources' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ReadOnlyProp", + "logicalId": "ModelQualityJobDefinition", "entityType": "Resource", - "resourceType": "AWS::ACMPCA::Certificate" + "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" }, - "propertyPath": "Properties.Validity", + "propertyPath": "Properties.JobResources", "category": "Best Practice", - "startLine": 14, + "startLine": 15, "startColumn": 7, - "endLine": 14, - "endColumn": 15, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html", + "endLine": 15, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -12504,20 +12098,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'ValidationSpecification' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DeprecatedProp", + "logicalId": "ModelPackage", "entityType": "Resource", - "resourceType": "AWS::Athena::WorkGroup" + "resourceType": "AWS::SageMaker::ModelPackage" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.ValidationSpecification", "category": "Best Practice", - "startLine": 22, + "startLine": 35, "startColumn": 7, - "endLine": 22, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "endLine": 35, + "endColumn": 30, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -12525,216 +12119,164 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9003", "severity": "INFO", - "message": "Resource 'PatternBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", "source": "ENGINE", - "entity": { - "logicalId": "PatternBucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DeprecatedProp' of type 'AWS::Athena::WorkGroup' supports Tags but none are configured", + "message": "Resource 'MonitoringSchedule' of type 'AWS::SageMaker::MonitoringSchedule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DeprecatedProp", + "logicalId": "MonitoringSchedule", "entityType": "Resource", - "resourceType": "AWS::Athena::WorkGroup" + "resourceType": "AWS::SageMaker::MonitoringSchedule" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 21, + "startLine": 6, "startColumn": 5, - "endLine": 21, + "endLine": 6, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/schema_required_xor_conditional.yaml": { - "filePath": "bad/schema_required_xor_conditional.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 5, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F3014", - "severity": "FATAL", - "message": "Exactly one of ['ScalingTargetId', 'ResourceId'] must be specified", - "source": "SCHEMA", - "entity": { - "logicalId": "Policy", - "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" - }, - "propertyPath": "Properties", - "category": "Schema", - "startLine": 13, - "startColumn": 5, - "endLine": 13, - "endColumn": 15, - "conditionScenario": { - "DuplicateTarget": true - }, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Exactly one of properties required (requiredXor)", - "phase": "SCHEMA" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", + "message": "Resource 'ModelQualityJobDefinition' of type 'AWS::SageMaker::ModelQualityJobDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Policy", + "logicalId": "ModelQualityJobDefinition", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" }, - "propertyPath": "Properties.PolicyName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 14, - "startColumn": 7, + "startColumn": 5, "endLine": 14, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ScalingTargetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'InferenceExperiment' of type 'AWS::SageMaker::InferenceExperiment' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Policy", + "logicalId": "InferenceExperiment", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::SageMaker::InferenceExperiment" }, - "propertyPath": "Properties.ScalingTargetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 16, - "startColumn": 7, - "endLine": 16, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'TargetId' (type String)" - } + "startLine": 22, + "startColumn": 5, + "endLine": 22, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Resource 'ModelPackage' of type 'AWS::SageMaker::ModelPackage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Policy", + "logicalId": "ModelPackage", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::SageMaker::ModelPackage" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'DuplicateTarget'" - } + "startLine": 34, + "startColumn": 5, + "endLine": 34, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ScalableDimension' is create-only; updating it will cause resource replacement", + "message": "Resource 'Cluster' of type 'AWS::SageMaker::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Policy", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::SageMaker::Cluster" }, - "propertyPath": "Properties.ScalableDimension", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 18, - "startColumn": 7, - "endLine": 18, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 44, + "startColumn": 5, + "endLine": 44, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/sam/api_missing_stagename.yaml": { + "filePath": "bad/sam/api_missing_stagename.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ServiceNamespace' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [MyApi] is invalid. Missing required property 'StageName'.", + "source": "CFN_LINT", "entity": { - "logicalId": "Policy", + "logicalId": "MyApi", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::Serverless::Api" }, - "propertyPath": "Properties.ServiceNamespace", - "category": "Best Practice", - "startLine": 19, - "startColumn": 7, - "endLine": 19, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties/StageName", + "category": "Structure", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 8, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" } ] }, - "bad/schema_string_length.yaml": { - "filePath": "bad/schema_string_length.yaml", + "bad/sam/connector_missing_destination.yaml": { + "filePath": "bad/sam/connector_missing_destination.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 2, + "errors": 1, + "warnings": 0, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -12743,77 +12285,74 @@ }, "diagnostics": [ { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [MyConn] is invalid. Missing required property 'Destination'.", + "source": "CFN_LINT", "entity": { - "logicalId": "Lambda", + "logicalId": "MyConn", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Serverless::Connector" }, - "category": "Security", + "propertyPath": "Properties/Destination", + "category": "Structure", "startLine": 3, "startColumn": 3, "endLine": 3, "endColumn": 9, - "ruleDescription": "Hardcoded account ID in ARN", + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", "phase": "LINT" + } + ] + }, + "bad/sam/connector_missing_source.yaml": { + "filePath": "bad/sam/connector_missing_source.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Lambda", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Lambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [MyConn] is invalid. Missing required property 'Source'.", + "source": "CFN_LINT", "entity": { - "logicalId": "Lambda", + "logicalId": "MyConn", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Serverless::Connector" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties/Source", + "category": "Structure", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", "phase": "LINT" } ] }, - "bad/schema_structural.yaml": { - "filePath": "bad/schema_structural.yaml", + "bad/sam/function_autopublishalias_invalid_name.yaml": { + "filePath": "bad/sam/function_autopublishalias_invalid_name.yaml", "status": "OK", "metadata": { - "resourcesScanned": 4, + "resourcesScanned": 1, "counts": { - "fatal": 6, - "errors": 0, + "fatal": 0, + "errors": 1, "warnings": 0, - "informational": 10, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -12822,367 +12361,340 @@ }, "diagnostics": [ { - "ruleId": "F3014", - "severity": "FATAL", - "message": "Exactly one of ['ScalingTargetId', 'ResourceId'] must be specified", - "source": "SCHEMA", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Fn] is invalid. AutoPublishAlias name ('123') must contain only alphanumeric characters, hyphens, or underscores matching (?!^[0-9]+$)([a-zA-Z0-9-_]+) pattern.", + "source": "CFN_LINT", "entity": { - "logicalId": "ScalingPolicyBothIds", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties", - "category": "Schema", - "startLine": 25, + "category": "Structure", + "startLine": 5, "startColumn": 5, - "endLine": 25, + "endLine": 5, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Exactly one of properties required (requiredXor)", - "phase": "SCHEMA" - }, - { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'Statistic' should not be included with 'ExtendedStatistic'", - "source": "SCHEMA", - "entity": { - "logicalId": "AlarmBothStats", - "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" - }, - "propertyPath": "Properties.Statistic", - "category": "Schema", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Mutually exclusive properties", - "phase": "SCHEMA", - "context": { - "property": "Statistic" - } + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/sam/function_capacityprovider_with_vpcconfig.yaml": { + "filePath": "bad/sam/function_capacityprovider_with_vpcconfig.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'ExtendedStatistic' should not be included with 'Statistic'", - "source": "SCHEMA", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Fn] is invalid. Cannot specify 'CapacityProviderConfig' and 'VpcConfig' together.", + "source": "CFN_LINT", "entity": { - "logicalId": "AlarmBothStats", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.ExtendedStatistic", - "category": "Schema", - "startLine": 13, - "startColumn": 7, - "endLine": 13, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Mutually exclusive properties", - "phase": "SCHEMA", - "context": { - "property": "ExtendedStatistic" - } + "propertyPath": "Properties", + "category": "Structure", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/sam/function_deploymentpreference_without_alias.yaml": { + "filePath": "bad/sam/function_deploymentpreference_without_alias.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "F3021", - "severity": "FATAL", - "message": "'ScalableDimension' is a dependency of 'ResourceId'", - "source": "SCHEMA", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Fn] is invalid. 'DeploymentPreference' requires AutoPublishAlias property to be specified.", + "source": "CFN_LINT", "entity": { - "logicalId": "ScalingPolicyMissingDeps", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties", - "suggestedFix": "Add 'ScalableDimension' when 'ResourceId' is specified", - "category": "Schema", - "startLine": 36, + "category": "Structure", + "startLine": 5, "startColumn": 5, - "endLine": 36, + "endLine": 5, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Dependent property required", - "phase": "SCHEMA" + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/sam/function_dlq_invalid_type.yaml": { + "filePath": "bad/sam/function_dlq_invalid_type.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "F3021", - "severity": "FATAL", - "message": "'ServiceNamespace' is a dependency of 'ResourceId'", - "source": "SCHEMA", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Fn] is invalid. 'DeadLetterQueue' requires Type of ['SQS', 'SNS']", + "source": "CFN_LINT", "entity": { - "logicalId": "ScalingPolicyMissingDeps", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties", - "suggestedFix": "Add 'ServiceNamespace' when 'ResourceId' is specified", - "category": "Schema", - "startLine": 36, + "category": "Structure", + "startLine": 5, "startColumn": 5, - "endLine": 36, + "endLine": 5, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Dependent property required", - "phase": "SCHEMA" - }, - { - "ruleId": "F3058", - "severity": "FATAL", - "message": "One of ['CidrBlock', 'Ipv4IpamPoolId', 'Ipv6IpamPoolId', 'Ipv6CidrBlock'] is a required property", - "source": "SCHEMA", + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/sam/function_dlq_missing_targetarn.yaml": { + "filePath": "bad/sam/function_dlq_missing_targetarn.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Fn] is invalid. 'DeadLetterQueue' requires Type and TargetArn properties to be specified.", + "source": "CFN_LINT", "entity": { - "logicalId": "SubnetNoCidr", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties", - "category": "Schema", - "startLine": 19, + "category": "Structure", + "startLine": 5, "startColumn": 5, - "endLine": 19, + "endLine": 5, "endColumn": 15, - "ruleDescription": "One of properties required (requiredOr)", - "phase": "SCHEMA" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SubnetNoCidr", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 20, - "startColumn": 7, - "endLine": 20, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/sam/function_functionscaling_without_capacityprovider.yaml": { + "filePath": "bad/sam/function_functionscaling_without_capacityprovider.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Fn] is invalid. 'FunctionScalingConfig' requires 'CapacityProviderConfig'.", + "source": "CFN_LINT", "entity": { - "logicalId": "ScalingPolicyBothIds", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.PolicyName", - "category": "Best Practice", - "startLine": 26, - "startColumn": 7, - "endLine": 26, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties", + "category": "Structure", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/sam/function_image_with_handler_runtime.yaml": { + "filePath": "bad/sam/function_image_with_handler_runtime.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ScalingTargetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Fn] is invalid. Runtime, Handler, Layers cannot be present when PackageType is of type `Image`", + "source": "CFN_LINT", "entity": { - "logicalId": "ScalingPolicyBothIds", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.ScalingTargetId", - "category": "Best Practice", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties", + "category": "Structure", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/sam/function_packagetype_invalid.yaml": { + "filePath": "bad/sam/function_packagetype_invalid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Fn] is invalid. invalid 'PackageType' : Banana", + "source": "CFN_LINT", "entity": { - "logicalId": "ScalingPolicyBothIds", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.ResourceId", - "category": "Best Practice", - "startLine": 29, - "startColumn": 7, - "endLine": 29, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties", + "category": "Structure", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/sam/function_provisioned_concurrency_without_alias.yaml": { + "filePath": "bad/sam/function_provisioned_concurrency_without_alias.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ScalableDimension' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Fn] is invalid. To set ProvisionedConcurrencyConfig AutoPublishALias must be defined on the function", + "source": "CFN_LINT", "entity": { - "logicalId": "ScalingPolicyBothIds", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.ScalableDimension", - "category": "Best Practice", - "startLine": 30, - "startColumn": 7, - "endLine": 30, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ServiceNamespace' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ScalingPolicyBothIds", - "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" - }, - "propertyPath": "Properties.ServiceNamespace", - "category": "Best Practice", - "startLine": 31, - "startColumn": 7, - "endLine": 31, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ScalingPolicyMissingDeps", - "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" - }, - "propertyPath": "Properties.PolicyName", - "category": "Best Practice", - "startLine": 37, - "startColumn": 7, - "endLine": 37, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ScalingPolicyMissingDeps", - "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" - }, - "propertyPath": "Properties.ResourceId", - "category": "Best Practice", - "startLine": 39, - "startColumn": 7, - "endLine": 39, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'AlarmBothStats' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "AlarmBothStats", - "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SubnetNoCidr' of type 'AWS::EC2::Subnet' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SubnetNoCidr", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 19, + "propertyPath": "Properties", + "category": "Structure", + "startLine": 5, "startColumn": 5, - "endLine": 19, + "endLine": 5, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", "phase": "LINT" } ] }, - "bad/schema_type_mismatch.yaml": { - "filePath": "bad/schema_type_mismatch.yaml", + "bad/sam/function_url_config_missing_authtype.yaml": { + "filePath": "bad/sam/function_url_config_missing_authtype.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 0, - "warnings": 3, - "informational": 2, + "errors": 1, + "warnings": 0, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -13191,123 +12703,34 @@ }, "diagnostics": [ { - "ruleId": "W3030", - "severity": "WARN", - "message": "true is not one of ['Enabled', 'Suspended']", - "source": "CFN_LINT", - "entity": { - "logicalId": "Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.VersioningConfiguration.Status", - "category": "Schema", - "startLine": 8, - "startColumn": 9, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Value not in allowed enum", - "phase": "SCHEMA", - "context": { - "actualValue": true, - "extra": { - "allowed_values": [ - "Enabled", - "Suspended" - ] - } - } - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "12345 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", - "entity": { - "logicalId": "Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 17, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "true is not of type 'string' - automatically coerced (boolean to string)", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Fn] is invalid. AuthType is required to configure function property `FunctionUrlConfig`. Please provide either AWS_IAM or NONE.", "source": "CFN_LINT", "entity": { - "logicalId": "Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.VersioningConfiguration.Status", - "category": "Best Practice", - "startLine": 8, - "startColumn": 9, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", + "propertyPath": "Properties", + "category": "Structure", "startLine": 5, "startColumn": 5, "endLine": 5, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", "phase": "LINT" } ] }, - "bad/schema_unique_items.yaml": { - "filePath": "bad/schema_unique_items.yaml", + "bad/sam/function_versiondeletionpolicy_without_alias.yaml": { + "filePath": "bad/sam/function_versiondeletionpolicy_without_alias.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 2, - "errors": 0, + "fatal": 0, + "errors": 1, "warnings": 0, "informational": 0, "debug": 0 @@ -13318,68 +12741,36 @@ }, "diagnostics": [ { - "ruleId": "F3032", - "severity": "FATAL", - "message": "expected maximum item count: 1, found: 2", - "source": "SCHEMA", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Fn] is invalid. 'VersionDeletionPolicy' requires 'AutoPublishAlias'.", + "source": "CFN_LINT", "entity": { - "logicalId": "Profile", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.Roles", - "category": "Schema", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 12, - "ruleDescription": "Array item count out of bounds", - "phase": "SCHEMA", - "context": { - "extra": { - "actual_count": 2, - "max_items": 1, - "min_items": 0 - } - } - }, - { - "ruleId": "F3037", - "severity": "FATAL", - "message": "Array items are not unique", - "source": "SCHEMA", - "entity": { - "logicalId": "Profile", - "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" - }, - "propertyPath": "Properties.Roles", - "category": "Schema", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 12, - "ruleDescription": "Array items not unique", - "phase": "SCHEMA", - "context": { - "actualValue": [ - "arn:aws:iam::012345678901:role/SameRole", - "arn:aws:iam::012345678901:role/SameRole" - ] - } + "propertyPath": "Properties", + "category": "Structure", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" } ] }, - "bad/schema_write_only.yaml": { - "filePath": "bad/schema_write_only.yaml", + "bad/sam/function_zip_missing_runtime_handler.yaml": { + "filePath": "bad/sam/function_zip_missing_runtime_handler.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 1, - "errors": 0, - "warnings": 3, - "informational": 1, + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -13388,118 +12779,107 @@ }, "diagnostics": [ { - "ruleId": "F6101", - "severity": "FATAL", - "message": "'Certificate' is not one of ['CompleteCertificateChain']", - "source": "SCHEMA", - "entity": { - "logicalId": "WriteOnlyOutput", - "entityType": "Output" - }, - "propertyPath": "Outputs/WriteOnlyOutput/Value.Fn::GetAtt.1", - "category": "Structure", - "startLine": 10, - "startColumn": 3, - "endLine": 10, - "endColumn": 18, - "ruleDescription": "Output value must be a string", - "phase": "SCHEMA" - }, - { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'CertificateAuthorityArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Fn] is invalid. Runtime and Handler needs to be present when PackageType is of type `Zip`", + "source": "CFN_LINT", "entity": { - "logicalId": "CertAuth", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::ACMPCA::CertificateAuthorityActivation" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.CertificateAuthorityArn", - "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 30, - "ruleDescription": "Hardcoded ARN property", + "propertyPath": "Properties", + "category": "Structure", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", "phase": "LINT" + } + ] + }, + "bad/sam/function_zip_with_imageuri.yaml": { + "filePath": "bad/sam/function_zip_with_imageuri.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Fn] is invalid. ImageUri or ImageConfig cannot be present when PackageType is of type `Zip`", + "source": "CFN_LINT", "entity": { - "logicalId": "CertAuth", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::ACMPCA::CertificateAuthorityActivation" + "resourceType": "AWS::Serverless::Function" }, - "category": "Security", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 11, - "ruleDescription": "Hardcoded account ID in ARN", + "propertyPath": "Properties", + "category": "Structure", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", "phase": "LINT" + } + ] + }, + "bad/sam/globals_not_dict.yaml": { + "filePath": "bad/sam/globals_not_dict.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W9054", - "severity": "WARN", - "message": "Write-only property 'Certificate' of 'CertAuth' is referenced in output 'WriteOnlyOutput'", - "source": "ENGINE", - "entity": { - "logicalId": "CertAuth", - "entityType": "Resource", - "resourceType": "AWS::ACMPCA::CertificateAuthorityActivation" - }, - "propertyPath": "Properties.Certificate", - "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html", - "ruleDescription": "Write-only property referenced in output", - "phase": "SCHEMA", - "context": { - "lifecycle": "write-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CertificateAuthorityArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CertAuth", - "entityType": "Resource", - "resourceType": "AWS::ACMPCA::CertificateAuthorityActivation" - }, - "propertyPath": "Properties.CertificateAuthorityArn", - "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: 'Globals' section is invalid. It must be a non-empty dictionary", + "source": "CFN_LINT", + "propertyPath": "Globals", + "category": "Structure", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 8, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" } ] }, - "bad/security_issues.yaml": { - "filePath": "bad/security_issues.yaml", + "bad/sam/globals_section_not_dict.yaml": { + "filePath": "bad/sam/globals_section_not_dict.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 1, "counts": { - "fatal": 1, - "errors": 0, - "warnings": 1, - "informational": 2, + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -13508,140 +12888,56 @@ }, "diagnostics": [ { - "ruleId": "F3017", - "severity": "FATAL", - "message": "Value is not valid under any of the 3 anyOf schemas for AWS::IAM::Policy (0 branches matched; at least one is required). Required property combinations: ['Groups'] or ['Roles'] or ['Users']. Branch failures: branch 1: 'Users' is a required property; branch 2: 'Groups' is a required property; branch 3: 'Roles' is a required property.", - "source": "SCHEMA", - "entity": { - "logicalId": "WildcardPolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" - }, - "propertyPath": "Properties", - "category": "Schema", - "startLine": 14, - "startColumn": 5, - "endLine": 14, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Value not valid under anyOf", - "phase": "SCHEMA", - "context": { - "expectedConstraint": "at least one anyOf branch", - "extra": { - "branchCount": 3, - "branchFailures": [ - { - "branch": 1, - "reasons": [ - { - "message": "'Users' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 2, - "reasons": [ - { - "message": "'Groups' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 3, - "reasons": [ - { - "message": "'Roles' is a required property", - "propertyPath": "Properties" - } - ] - } - ], - "compositionKind": "anyOf", - "matchCount": 0, - "matchOutcome": "zeroMatches", - "validPropertyCombinations": [ - [ - "Groups" - ], - [ - "Roles" - ], - [ - "Users" - ] - ] - } - } - }, - { - "ruleId": "W2508", - "severity": "WARN", - "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", - "source": "ENGINE", - "entity": { - "logicalId": "OpenSSH", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress", - "suggestedFix": "Restrict the CIDR range to specific IP addresses", - "category": "Security", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 27, - "ruleDescription": "Security group allows open access to sensitive port", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: 'Globals' section is invalid. Value of ${section} must be a dictionary", + "source": "CFN_LINT", + "propertyPath": "Globals", + "category": "Structure", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 8, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", "phase": "LINT" + } + ] + }, + "bad/sam/globals_unknown_property.yaml": { + "filePath": "bad/sam/globals_unknown_property.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OpenSSH", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'OpenSSH' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "OpenSSH", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: 'Globals' section is invalid. 'NotARealProperty' is not a supported property of 'Function'. Must be one of the following values - ['Handler', 'Runtime', 'CodeUri', 'DeadLetterQueue', 'Description', 'MemorySize', 'Timeout', 'VpcConfig', 'Environment', 'Tags', 'PropagateTags', 'Tracing', 'KmsKeyArn', 'AutoPublishAlias', 'AutoPublishAliasAllProperties', 'Layers', 'DeploymentPreference', 'RolePath', 'PermissionsBoundary', 'ReservedConcurrentExecutions', 'ProvisionedConcurrencyConfig', 'AssumeRolePolicyDocument', 'EventInvokeConfig', 'FileSystemConfigs', 'CodeSigningConfigArn', 'Architectures', 'SnapStart', 'EphemeralStorage', 'FunctionUrlConfig', 'RuntimeManagementConfig', 'LoggingConfig', 'RecursiveLoop', 'SourceKMSKeyArn', 'TenancyConfig', 'DurableConfig', 'CapacityProviderConfig', 'FunctionScalingConfig', 'PublishToLatestPublished', 'VersionDeletionPolicy']", + "source": "CFN_LINT", + "propertyPath": "Globals", + "category": "Structure", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 8, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", "phase": "LINT" } ] }, - "bad/sg_bad_port_range.yaml": { - "filePath": "bad/sg_bad_port_range.yaml", + "bad/sam/globals_unknown_section.yaml": { + "filePath": "bad/sam/globals_unknown_section.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, @@ -13649,7 +12945,7 @@ "fatal": 0, "errors": 1, "warnings": 0, - "informational": 2, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -13658,89 +12954,31 @@ }, "diagnostics": [ { - "ruleId": "E9002", + "ruleId": "E0001", "severity": "ERROR", - "message": "FromPort 443 is greater than ToPort 80", - "source": "ENGINE", - "entity": { - "logicalId": "SG", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.SecurityGroupIngress.0", - "suggestedFix": "Set FromPort to a value less than or equal to ToPort", - "category": "Resource", - "startLine": 8, - "startColumn": 21, - "endLine": 8, - "endColumn": 22, - "ruleDescription": "SecurityGroup FromPort must be <= ToPort for the TCP and UDP protocols", - "phase": "LINT", - "context": { - "actualValue": [ - { - "IpProtocol": "tcp", - "FromPort": 443, - "ToPort": 80, - "CidrIp": "10.0.0.0/8" - } - ] - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SG", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SG' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SG", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "message": "Error transforming template: 'Globals' section is invalid. 'Foo' is not supported. Must be one of the following values - ['Api', 'CapacityProvider', 'Function', 'HttpApi', 'LayerVersion', 'MicrovmImage', 'NetworkConnector', 'SimpleTable', 'StateMachine', 'WebSocketApi']", + "source": "CFN_LINT", + "propertyPath": "Globals", + "category": "Structure", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 8, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", "phase": "LINT" } ] }, - "bad/sg_open_egress.yaml": { - "filePath": "bad/sg_open_egress.yaml", + "bad/sam/graphqlapi_missing_auth.yaml": { + "filePath": "bad/sam/graphqlapi_missing_auth.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 1, - "errors": 0, + "fatal": 0, + "errors": 1, "warnings": 0, - "informational": 2, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -13749,79 +12987,112 @@ }, "diagnostics": [ { - "ruleId": "F3021", - "severity": "FATAL", - "message": "'VpcId' is a dependency of 'SecurityGroupEgress'", - "source": "SCHEMA", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [MyApi] is invalid. Missing required property 'Auth'.", + "source": "CFN_LINT", "entity": { - "logicalId": "OpenSG", + "logicalId": "MyApi", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Serverless::GraphQLApi" }, - "propertyPath": "Properties", - "suggestedFix": "Add 'VpcId' when 'SecurityGroupEgress' is specified", - "category": "Schema", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Dependent property required", - "phase": "SCHEMA" + "propertyPath": "Properties/Auth", + "category": "Structure", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 8, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/sam/layerversion_invalid_compatible_architectures.yaml": { + "filePath": "bad/sam/layerversion_invalid_compatible_architectures.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Layer] is invalid. CompatibleArchitectures needs to be a list of 'x86_64' or 'arm64'", + "source": "CFN_LINT", "entity": { - "logicalId": "OpenSG", + "logicalId": "Layer", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Serverless::LayerVersion" }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties", + "category": "Structure", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/sam/layerversion_invalid_retention_policy.yaml": { + "filePath": "bad/sam/layerversion_invalid_retention_policy.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'OpenSG' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [Layer] is invalid. 'RetentionPolicy' must be one of the following options: ['Retain', 'Delete'].", + "source": "CFN_LINT", "entity": { - "logicalId": "OpenSG", + "logicalId": "Layer", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Serverless::LayerVersion" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", + "propertyPath": "Properties", + "category": "Structure", "startLine": 5, "startColumn": 5, "endLine": 5, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", "phase": "LINT" } ] }, - "bad/simple_sub_param.yaml": { - "filePath": "bad/simple_sub_param.yaml", + "bad/sam/simpletable_primarykey_invalid_type.yaml": { + "filePath": "bad/sam/simpletable_primarykey_invalid_type.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 0, + "errors": 1, "warnings": 0, - "informational": 2, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -13830,60 +13101,36 @@ }, "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [MyTable] is invalid. Invalid 'Type' \"Banana\".", + "source": "CFN_LINT", "entity": { - "logicalId": "Bucket", + "logicalId": "MyTable", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Serverless::SimpleTable" }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 9, + "propertyPath": "Properties/PrimaryKey", + "category": "Structure", + "startLine": 6, "startColumn": 7, - "endLine": 9, + "endLine": 6, "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:${Env})" - } - }, - { - "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": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", "phase": "LINT" } ] }, - "bad/sns_cross_account.yaml": { - "filePath": "bad/sns_cross_account.yaml", + "bad/sam/simpletable_primarykey_missing_type.yaml": { + "filePath": "bad/sam/simpletable_primarykey_missing_type.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 0, + "errors": 1, "warnings": 0, - "informational": 2, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -13892,60 +13139,74 @@ }, "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [MyTable] is invalid. Property 'PrimaryKey.Type' is required.", + "source": "CFN_LINT", "entity": { - "logicalId": "Topic", + "logicalId": "MyTable", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::Serverless::SimpleTable" }, - "propertyPath": "Properties.TopicName", - "category": "Best Practice", + "propertyPath": "Properties/PrimaryKey", + "category": "Structure", "startLine": 6, "startColumn": 7, "endLine": 6, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endColumn": 17, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/sam/statemachine_both_definitions.yaml": { + "filePath": "bad/sam/statemachine_both_definitions.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Topic' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [MySM] is invalid. Specify either 'Definition' or 'DefinitionUri' property and not both.", + "source": "CFN_LINT", "entity": { - "logicalId": "Topic", + "logicalId": "MySM", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::Serverless::StateMachine" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", + "propertyPath": "Properties", + "category": "Structure", "startLine": 5, "startColumn": 5, "endLine": 5, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", "phase": "LINT" } ] }, - "bad/some_logs_stream_lambda.yaml": { - "filePath": "bad/some_logs_stream_lambda.yaml", + "bad/sam/statemachine_no_definition.yaml": { + "filePath": "bad/sam/statemachine_no_definition.yaml", "status": "OK", "metadata": { - "resourcesScanned": 8, + "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 4, + "errors": 1, "warnings": 0, - "informational": 20, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -13954,473 +13215,573 @@ }, "diagnostics": [ { - "ruleId": "E2533", + "ruleId": "E0001", "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", + "message": "Error transforming template: Resource with id [MySM] is invalid. Either 'Definition' or 'DefinitionUri' property must be specified.", "source": "CFN_LINT", "entity": { - "logicalId": "FunctionA", + "logicalId": "MySM", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Serverless::StateMachine" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 21, - "startColumn": 7, - "endLine": 21, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.6", - "lifecycle": "end-of-life" - } - }, - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", - "entity": { - "logicalId": "FunctionB", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.6", - "lifecycle": "end-of-life" - } - }, - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", - "entity": { - "logicalId": "FunctionC", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 44, - "startColumn": 7, - "endLine": 44, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.6", - "lifecycle": "end-of-life" - } + "propertyPath": "Properties", + "category": "Structure", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/sam/transform_bogus_name.yaml": { + "filePath": "bad/sam/transform_bogus_name.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "E2533", + "ruleId": "E3038", "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", + "message": "Resource type 'AWS::Serverless::Function' requires the AWS::Serverless-2016-10-31 transform", "source": "CFN_LINT", "entity": { - "logicalId": "LogSubscriptionFunction", + "logicalId": "MyFn", "entityType": "Resource", "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 56, - "startColumn": 7, - "endLine": 56, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.6", - "lifecycle": "end-of-life" - } - }, - { - "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": "FunctionALogGroup", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "category": "Best Practice", - "startLine": 22, - "startColumn": 3, - "endLine": 22, - "endColumn": 20, - "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": "FunctionALogGroup", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "category": "Best Practice", - "startLine": 22, + "category": "Structure", + "startLine": 3, "startColumn": 3, - "endLine": 22, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 3, + "endColumn": 7, + "ruleDescription": "Check if Serverless Resources have Serverless Transform", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "FunctionBLogGroup", + "logicalId": "MyFn", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Serverless::Function" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 34, - "startColumn": 3, - "endLine": 34, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/sam/transform_wrong_date.yaml": { + "filePath": "bad/sam/transform_wrong_date.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "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)", + "ruleId": "E3038", + "severity": "ERROR", + "message": "Resource type 'AWS::Serverless::Function' requires the AWS::Serverless-2016-10-31 transform", "source": "CFN_LINT", "entity": { - "logicalId": "FunctionBLogGroup", + "logicalId": "MyFn", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Serverless::Function" }, - "category": "Best Practice", - "startLine": 34, + "category": "Structure", + "startLine": 3, "startColumn": 3, - "endLine": 34, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 3, + "endColumn": 7, + "ruleDescription": "Check if Serverless Resources have Serverless Transform", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "FunctionCLogGroup", + "logicalId": "MyFn", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Serverless::Function" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 45, - "startColumn": 3, - "endLine": 45, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/schema_additional_props.yaml": { + "filePath": "bad/schema_additional_props.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 2, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "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", + "ruleId": "F3002", + "severity": "FATAL", + "message": "Additional properties are not allowed ('NotARealProperty' was unexpected)", + "source": "SCHEMA", "entity": { - "logicalId": "FunctionCLogGroup", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::S3::Bucket" }, - "category": "Best Practice", - "startLine": 45, - "startColumn": 3, - "endLine": 45, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "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": "LogSubscriptionFunctionLogGroup", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "category": "Best Practice", - "startLine": 78, - "startColumn": 3, - "endLine": 78, - "endColumn": 34, - "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": "LogSubscriptionFunctionLogGroup", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "category": "Best Practice", - "startLine": 78, - "startColumn": 3, - "endLine": 78, - "endColumn": 34, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FunctionALogGroup", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "propertyPath": "Properties.LogGroupName", - "category": "Best Practice", - "startLine": 25, - "startColumn": 7, - "endLine": 25, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:/aws/lambda/${FunctionA})" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FunctionBLogGroup", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "propertyPath": "Properties.LogGroupName", - "category": "Best Practice", - "startLine": 37, + "propertyPath": "Properties.NotARealProperty", + "category": "Schema", + "startLine": 7, "startColumn": 7, - "endLine": 37, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 7, + "endColumn": 23, + "ruleDescription": "Additional properties are not allowed", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:/aws/lambda/${FunctionB})" + "property": "NotARealProperty", + "extra": { + "allowed_properties": [ + "AbacStatus", + "AccelerateConfiguration", + "AccessControl", + "AnalyticsConfigurations", + "Arn", + "BucketEncryption", + "BucketName", + "BucketNamePrefix", + "BucketNamespace", + "CorsConfiguration", + "DomainName", + "DualStackDomainName", + "IntelligentTieringConfigurations", + "InventoryConfigurations", + "LifecycleConfiguration", + "LoggingConfiguration", + "MetadataConfiguration", + "MetadataTableConfiguration", + "MetricsConfigurations", + "NotificationConfiguration", + "ObjectLockConfiguration", + "ObjectLockEnabled", + "OwnershipControls", + "PublicAccessBlockConfiguration", + "RegionalDomainName", + "ReplicationConfiguration", + "Tags", + "VersioningConfiguration", + "WebsiteConfiguration", + "WebsiteURL" + ] + } } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3002", + "severity": "FATAL", + "message": "Additional properties are not allowed ('BukcetName' was unexpected)", + "source": "SCHEMA", "entity": { - "logicalId": "FunctionCLogGroup", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.LogGroupName", - "category": "Best Practice", - "startLine": 48, + "propertyPath": "Properties.BukcetName", + "category": "Schema", + "startLine": 8, "startColumn": 7, - "endLine": 48, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 8, + "endColumn": 17, + "ruleDescription": "Additional properties are not allowed", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:/aws/lambda/${FunctionC})" + "property": "BukcetName", + "extra": { + "allowed_properties": [ + "AbacStatus", + "AccelerateConfiguration", + "AccessControl", + "AnalyticsConfigurations", + "Arn", + "BucketEncryption", + "BucketName", + "BucketNamePrefix", + "BucketNamespace", + "CorsConfiguration", + "DomainName", + "DualStackDomainName", + "IntelligentTieringConfigurations", + "InventoryConfigurations", + "LifecycleConfiguration", + "LoggingConfiguration", + "MetadataConfiguration", + "MetadataTableConfiguration", + "MetricsConfigurations", + "NotificationConfiguration", + "ObjectLockConfiguration", + "ObjectLockEnabled", + "OwnershipControls", + "PublicAccessBlockConfiguration", + "RegionalDomainName", + "ReplicationConfiguration", + "Tags", + "VersioningConfiguration", + "WebsiteConfiguration", + "WebsiteURL" + ] + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LogSubscriptionFunctionLogGroup", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 81, + "startLine": 6, "startColumn": 7, - "endLine": 81, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "endLine": 6, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:/aws/lambda/${LogSubscriptionFunction})" + "lifecycle": "create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FunctionA' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FunctionA", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 18, + "startLine": 5, "startColumn": 5, - "endLine": 18, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/schema_composition.yaml": { + "filePath": "bad/schema_composition.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 2, + "errors": 0, + "warnings": 0, + "informational": 5, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FunctionALogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F3017", + "severity": "FATAL", + "message": "Value is not valid under any of the 5 anyOf schemas for AWS::EC2::Volume (0 branches matched; at least one is required). Required property combinations: ['AvailabilityZone', 'Size'] or ['AvailabilityZone', 'SnapshotId'] or ['AvailabilityZoneId', 'Size'] or ['AvailabilityZoneId', 'SnapshotId'] or ['SourceVolumeId']. Branch failures: branch 1: 'AvailabilityZone' is a required property, 'Size' is a required property; branch 2: 'AvailabilityZone' is a required property, 'SnapshotId' is a required property; branch 3: 'AvailabilityZoneId' is a required property, 'Size' is a required property; branch 4: 'AvailabilityZoneId' is a required property, 'SnapshotId' is a required property; branch 5: 'SourceVolumeId' is a required property.", + "source": "SCHEMA", "entity": { - "logicalId": "FunctionALogGroup", + "logicalId": "NoAZ", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::EC2::Volume" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 24, + "propertyPath": "Properties", + "category": "Schema", + "startLine": 13, "startColumn": 5, - "endLine": 24, + "endLine": 13, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FunctionB' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FunctionB", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Value not valid under anyOf", + "phase": "SCHEMA", + "context": { + "expectedConstraint": "at least one anyOf branch", + "extra": { + "branchCount": 5, + "branchFailures": [ + { + "branch": 1, + "reasons": [ + { + "message": "'AvailabilityZone' is a required property", + "propertyPath": "Properties" + }, + { + "message": "'Size' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 2, + "reasons": [ + { + "message": "'AvailabilityZone' is a required property", + "propertyPath": "Properties" + }, + { + "message": "'SnapshotId' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 3, + "reasons": [ + { + "message": "'AvailabilityZoneId' is a required property", + "propertyPath": "Properties" + }, + { + "message": "'Size' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 4, + "reasons": [ + { + "message": "'AvailabilityZoneId' is a required property", + "propertyPath": "Properties" + }, + { + "message": "'SnapshotId' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 5, + "reasons": [ + { + "message": "'SourceVolumeId' is a required property", + "propertyPath": "Properties" + } + ] + } + ], + "compositionKind": "anyOf", + "matchCount": 0, + "matchOutcome": "zeroMatches", + "validPropertyCombinations": [ + [ + "AvailabilityZone", + "Size" + ], + [ + "AvailabilityZone", + "SnapshotId" + ], + [ + "AvailabilityZoneId", + "Size" + ], + [ + "AvailabilityZoneId", + "SnapshotId" + ], + [ + "SourceVolumeId" + ] + ] + } + } + }, + { + "ruleId": "F3018", + "severity": "FATAL", + "message": "Value is not valid under any of the 2 oneOf schemas for AWS::AppStream::ImageBuilder (0 branches matched; exactly one is required). Required property combinations: ['ImageArn'] or ['ImageName']. Branch failures: branch 1: 'ImageName' is a required property; branch 2: 'ImageArn' is a required property.", + "source": "SCHEMA", + "entity": { + "logicalId": "NoImage", + "entityType": "Resource", + "resourceType": "AWS::AppStream::ImageBuilder" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 30, + "propertyPath": "Properties", + "category": "Schema", + "startLine": 6, "startColumn": 5, - "endLine": 30, + "endLine": 6, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Value not valid under oneOf", + "phase": "SCHEMA", + "context": { + "expectedConstraint": "exactly one oneOf branch", + "extra": { + "branchCount": 2, + "branchFailures": [ + { + "branch": 1, + "reasons": [ + { + "message": "'ImageName' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 2, + "reasons": [ + { + "message": "'ImageArn' is a required property", + "propertyPath": "Properties" + } + ] + } + ], + "compositionKind": "oneOf", + "matchCount": 0, + "matchOutcome": "zeroMatches", + "validPropertyCombinations": [ + [ + "ImageArn" + ], + [ + "ImageName" + ] + ] + } + } }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'FunctionBLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", - "source": "ENGINE", + "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": "FunctionBLogGroup", + "logicalId": "NoAZ", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::EC2::Volume" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 36, - "startColumn": 5, - "endLine": 36, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 7, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'FunctionC' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", + "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": "FunctionC", + "logicalId": "NoAZ", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::EC2::Volume" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 41, - "startColumn": 5, - "endLine": 41, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 7, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FunctionCLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionCLogGroup", + "logicalId": "NoImage", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::AppStream::ImageBuilder" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 47, - "startColumn": 5, - "endLine": 47, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LogSubscriptionFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'NoImage' of type 'AWS::AppStream::ImageBuilder' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LogSubscriptionFunction", + "logicalId": "NoImage", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::AppStream::ImageBuilder" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 53, + "startLine": 6, "startColumn": 5, - "endLine": 53, + "endLine": 6, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -14428,181 +13789,222 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LogSubscriptionFunctionLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Resource 'NoAZ' of type 'AWS::EC2::Volume' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LogSubscriptionFunctionLogGroup", + "logicalId": "NoAZ", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::EC2::Volume" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 80, + "startLine": 13, "startColumn": 5, - "endLine": 80, + "endLine": 13, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/sqs_fifo_no_suffix.yaml": { - "filePath": "bad/sqs_fifo_no_suffix.yaml", + "bad/schema_conditional_type.yaml": { + "filePath": "bad/schema_conditional_type.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 2, - "warnings": 0, - "informational": 6, - "debug": 0 - }, + "errors": 0, + "warnings": 1, + "informational": 2, + "debug": 0 + }, "suppressed": 0, "strict": false, "severityLevel": "DEBUG" }, "diagnostics": [ { - "ruleId": "E2504", - "severity": "ERROR", - "message": "FIFO queue name 'my-queue' must end with '.fifo'", - "source": "ENGINE", - "entity": { - "logicalId": "FifoQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.QueueName", - "category": "Resource", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 16, - "ruleDescription": "FIFO queue name must end with .fifo", - "phase": "LINT" - }, - { - "ruleId": "E3501", - "severity": "ERROR", - "message": "FIFO queue name 'my-queue' must end with '.fifo'", + "ruleId": "W9003", + "severity": "WARN", + "message": "12345 (from Fn::If on condition 'IsProd') is not of type 'string' - automatically coerced (number to string)", "source": "CFN_LINT", "entity": { - "logicalId": "FifoQueue", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.QueueName", - "suggestedFix": "Append .fifo to the queue name", - "category": "Resource", - "startLine": 6, + "propertyPath": "Properties.BucketName", + "category": "Best Practice", + "startLine": 12, "startColumn": 7, - "endLine": 6, - "endColumn": 16, - "ruleDescription": "Validate SQS queue properties are valid", - "phase": "LINT", + "endLine": 12, + "endColumn": 17, + "conditionScenario": { + "IsProd": true + }, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA", "context": { - "extra": { - "queue_name": "my-queue" - } + "resolutionSource": "Fn::If on condition 'IsProd'" } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FifoQueue", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::S3::Bucket" }, + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" + } }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "FifoQueue", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::S3::Bucket" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 11, + "startColumn": 5, + "endLine": 11, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/schema_enum_violation.yaml": { + "filePath": "bad/schema_enum_violation.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 2, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "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)", + "ruleId": "E3045", + "severity": "ERROR", + "message": "A bucket with 'AccessControl' set should also have at least one 'OwnershipControl' configured", "source": "CFN_LINT", "entity": { - "logicalId": "FifoQueue", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties", - "category": "Best Practice", + "suggestedFix": "Add OwnershipControls to the bucket when using AccessControl", + "category": "Resource", "startLine": 5, "startColumn": 5, "endLine": 5, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Validate AccessControl are set with OwnershipControls", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3030", + "severity": "WARN", + "message": "'InvalidAccessControl' is not one of ['AuthenticatedRead', 'AwsExecRead', 'BucketOwnerFullControl', 'BucketOwnerRead', 'LogDeliveryWrite', 'Private', 'PublicRead', 'PublicReadWrite']", + "source": "CFN_LINT", "entity": { - "logicalId": "FifoQueue", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.QueueName", - "category": "Best Practice", - "startLine": 6, + "propertyPath": "Properties.AccessControl", + "category": "Schema", + "startLine": 7, "startColumn": 7, - "endLine": 6, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 7, + "endColumn": 20, + "ruleDescription": "Value not in allowed enum", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "InvalidAccessControl", + "extra": { + "allowed_values": [ + "AuthenticatedRead", + "AwsExecRead", + "BucketOwnerFullControl", + "BucketOwnerRead", + "LogDeliveryWrite", + "Private", + "PublicRead", + "PublicReadWrite" + ] + } + } + }, + { + "ruleId": "W3045", + "severity": "WARN", + "message": "AccessControl property is deprecated. Use bucket policies instead", + "source": "CFN_LINT", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.AccessControl", + "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", + "category": "Deprecation", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 20, + "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", + "phase": "LINT", + "context": { + "actualValue": "InvalidAccessControl" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FifoQueue", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.FifoQueue", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 7, + "startLine": 6, "startColumn": 7, - "endLine": 7, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "endLine": 6, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -14612,12 +14014,12 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FifoQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FifoQueue", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -14631,16 +14033,16 @@ } ] }, - "bad/sqs_fifo_standard_dlq.yaml": { - "filePath": "bad/sqs_fifo_standard_dlq.yaml", + "bad/schema_format_violation.yaml": { + "filePath": "bad/schema_format_violation.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 1, - "warnings": 0, - "informational": 11, + "warnings": 1, + "informational": 4, "debug": 0 }, "suppressed": 0, @@ -14649,151 +14051,64 @@ }, "diagnostics": [ { - "ruleId": "E3502", + "ruleId": "E1154", "severity": "ERROR", - "message": "Source queue type 'FIFO' does not match destination queue type 'standard'", + "message": "'subnet-bad' does not match format 'AWS::EC2::Subnet.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "MainQueue", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.RedrivePolicy", - "category": "Resource", - "startLine": 12, + "propertyPath": "Properties.SubnetId", + "category": "Intrinsic Function", + "startLine": 7, "startColumn": 7, - "endLine": 12, - "endColumn": 20, - "ruleDescription": "Validate SQS DLQ queues are the same type", - "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": "DLQ", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 6, - "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": "DLQ", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 6, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "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": "MainQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 12, - "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": "MainQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 7, - "startColumn": 3, "endLine": 7, - "endColumn": 12, - "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": "DLQ", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate VPC subnet id format", + "phase": "SCHEMA", + "context": { + "actualValue": "subnet-bad" + } }, { - "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", + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", "entity": { - "logicalId": "MainQueue", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DLQ", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.QueueName", + "propertyPath": "Properties.ImageId", "category": "Best Practice", "startLine": 6, "startColumn": 7, "endLine": 6, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -14803,20 +14118,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MainQueue", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.QueueName", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 10, + "startLine": 7, "startColumn": 7, - "endLine": 10, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "endLine": 7, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -14826,35 +14141,35 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", + "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MainQueue", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.FifoQueue", + "propertyPath": "Properties.SecurityGroupIds", "category": "Best Practice", - "startLine": 11, + "startLine": 8, "startColumn": 7, - "endLine": 11, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "endLine": 8, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DLQ' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Resource 'Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DLQ", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -14865,39 +14180,19 @@ "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MainQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MainQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" } ] }, - "bad/ssm_document_invalid.yaml": { - "filePath": "bad/ssm_document_invalid.yaml", + "bad/schema_lifecycle.yaml": { + "filePath": "bad/schema_lifecycle.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 5, "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 3, + "fatal": 1, + "errors": 3, + "warnings": 5, + "informational": 8, "debug": 0 }, "suppressed": 0, @@ -14906,391 +14201,286 @@ }, "diagnostics": [ { - "ruleId": "E3051", - "severity": "ERROR", - "message": "SSM Document Content must include 'schemaVersion'", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'RepositoryOwner' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Doc", + "logicalId": "ShutdownResource", "entityType": "Resource", - "resourceType": "AWS::SSM::Document" + "resourceType": "AWS::CodeStar::GitHubRepository" }, - "propertyPath": "Properties.Content", - "category": "Resource", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 14, - "ruleDescription": "Validate the structure of a SSM document", - "phase": "LINT" + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'RepositoryOwner'", + "category": "Schema", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DocumentType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'dotnetcore2.1' was deprecated on '2022-01-05'. Creation was disabled on '2022-01-05', and updates were disabled on '2022-04-13'. Please consider updating to 'dotnet10'", + "source": "CFN_LINT", "entity": { - "logicalId": "Doc", + "logicalId": "EolLambda", "entityType": "Resource", - "resourceType": "AWS::SSM::Document" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.DocumentType", - "category": "Best Practice", - "startLine": 6, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 27, "startColumn": 7, - "endLine": 6, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 27, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Content' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Doc", - "entityType": "Resource", - "resourceType": "AWS::SSM::Document" - }, - "propertyPath": "Properties.Content", - "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" + "actualValue": "dotnetcore2.1", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Doc' of type 'AWS::SSM::Document' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3677", + "severity": "ERROR", + "message": "Runtime 'dotnetcore2.1' is not supported with Code.ZipFile - use nodejs or python", + "source": "CFN_LINT", "entity": { - "logicalId": "Doc", + "logicalId": "EolLambda", "entityType": "Resource", - "resourceType": "AWS::SSM::Document" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "category": "Resource", + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 12, + "ruleDescription": "Lambda ZipFile requires nodejs or python runtime", "phase": "LINT" - } - ] - }, - "bad/stepfunctions_bad_start_at.yaml": { - "filePath": "bad/stepfunctions_bad_start_at.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 1, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3601", + "ruleId": "E3710", "severity": "ERROR", - "message": "StartAt 'NonExistentState' does not reference a valid state at StartAt", + "message": "Resource type 'AWS::CodeStar::GitHubRepository' is from a service that was shut down on 2024-07-25", "source": "CFN_LINT", "entity": { - "logicalId": "SM", + "logicalId": "ShutdownResource", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::CodeStar::GitHubRepository" }, - "propertyPath": "Properties.DefinitionString", - "category": "Resource", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 23, - "ruleDescription": "Validate the structure of a StateMachine definition", - "phase": "LINT" + "category": "Deprecation", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 19, + "ruleDescription": "Resource type is from a service that has been shut down", + "phase": "SCHEMA" }, { - "ruleId": "W9002", + "ruleId": "W2531", "severity": "WARN", - "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", - "source": "ENGINE", + "message": "Runtime 'nodejs16.x' was deprecated on '2024-06-12'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "SM", + "logicalId": "DeprecatedLambda", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RoleArn", - "category": "Best Practice", - "startLine": 16, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 38, "startColumn": 7, - "endLine": 16, + "endLine": 38, "endColumn": 14, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs16.x", + "lifecycle": "deprecated" + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SM' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3696", + "severity": "WARN", + "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", + "source": "CFN_LINT", "entity": { - "logicalId": "SM", + "logicalId": "SunsetResource", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::AppMesh::Mesh" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/stepfunctions_invalid_state.yaml": { - "filePath": "bad/stepfunctions_invalid_state.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 2, - "warnings": 1, - "informational": 1, - "debug": 0 + "category": "Deprecation", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 17, + "ruleDescription": "Resource type is from a service that is sunsetting", + "phase": "SCHEMA" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3601", - "severity": "ERROR", - "message": "StartAt 'NonExistentState' does not reference a valid state at StartAt", + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", "source": "CFN_LINT", "entity": { - "logicalId": "StateMachine", + "logicalId": "MaintenanceResource", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.DefinitionString", - "category": "Resource", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 23, - "ruleDescription": "Validate the structure of a StateMachine definition", - "phase": "LINT" + "category": "Deprecation", + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" }, { - "ruleId": "E3601", - "severity": "ERROR", - "message": "State 'DoWork' has invalid Type 'InvalidType'. Must be one of ['Task', 'Pass', 'Choice', 'Wait', 'Succeed', 'Fail', 'Parallel', 'Map']", - "source": "CFN_LINT", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", "entity": { - "logicalId": "StateMachine", + "logicalId": "EolLambda", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.DefinitionString", - "category": "Resource", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 23, - "ruleDescription": "Validate the structure of a StateMachine definition", + "category": "Security", + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 12, + "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, { - "ruleId": "W9002", + "ruleId": "W9013", "severity": "WARN", - "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "StateMachine", + "logicalId": "DeprecatedLambda", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RoleArn", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 14, - "ruleDescription": "Hardcoded ARN property", + "category": "Security", + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 19, + "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'StateMachine' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StateMachine", + "logicalId": "SunsetResource", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::AppMesh::Mesh" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.MeshName", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, + "startLine": 13, + "startColumn": 7, + "endLine": 13, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "bad/string.yaml": { - "filePath": "bad/string.yaml", - "status": "ERROR", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F1101", - "severity": "FATAL", - "message": "Template root must be a YAML mapping", - "source": "SCHEMA", - "category": "Structure", - "startLine": 1, - "startColumn": 1, - "endLine": 1, - "endColumn": 1, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" - } - ] - }, - "bad/sub_needed.yaml": { - "filePath": "bad/sub_needed.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 1, - "errors": 1, - "warnings": 1, - "informational": 2, - "debug": 0 + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3031", - "severity": "FATAL", - "message": "'${MyParam}-bucket' does not match pattern '^([a-z0-9][a-z0-9.-]*[a-z0-9])?$'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "MaintenanceResource", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.BucketName", - "category": "Schema", - "startLine": 9, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 19, "startColumn": 7, - "endLine": 9, - "endColumn": 17, - "ruleDescription": "Value does not match pattern", + "endLine": 19, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "${MyParam}-bucket", - "expectedConstraint": "^([a-z0-9][a-z0-9.-]*[a-z0-9])?$" + "lifecycle": "create-only" } }, { - "ruleId": "E1029", - "severity": "ERROR", - "message": "Found an embedded parameter '${MyParam}' outside of an 'Fn::Sub' at Properties.BucketName", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "MaintenanceResource", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.BucketName", - "suggestedFix": "Wrap the string with Fn::Sub", - "category": "Intrinsic Function", - "startLine": 9, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 20, "startColumn": 7, - "endLine": 9, - "endColumn": 17, - "ruleDescription": "Substitution variable ${X} requires Fn::Sub", - "phase": "LINT" + "endLine": 20, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'MyParam' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyParam", - "entityType": "Parameter" + "logicalId": "EolLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Parameters/MyParam", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 10, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 26, + "startColumn": 7, + "endLine": 26, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "DeprecatedLambda", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 9, + "startLine": 37, "startColumn": 7, - "endLine": 9, - "endColumn": 17, + "endLine": 37, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -15300,80 +14490,39 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'SunsetResource' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "SunsetResource", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::AppMesh::Mesh" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 8, + "startLine": 12, "startColumn": 5, - "endLine": 8, + "endLine": 12, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/sub_nested_intrinsic.yaml": { - "filePath": "bad/sub_nested_intrinsic.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'EolLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "EolLambda", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 25, "startColumn": 5, - "endLine": 5, + "endLine": 25, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -15381,33 +14530,33 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'OtherBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'DeprecatedLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "OtherBucket", + "logicalId": "DeprecatedLambda", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 14, + "startLine": 36, + "startColumn": 5, + "endLine": 36, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/subnet_outside_vpc.yaml": { - "filePath": "bad/subnet_outside_vpc.yaml", + "bad/schema_numeric_bounds.yaml": { + "filePath": "bad/schema_numeric_bounds.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 1, "counts": { - "fatal": 0, - "errors": 1, + "fatal": 1, + "errors": 0, "warnings": 0, "informational": 5, "debug": 0 @@ -15418,85 +14567,104 @@ }, "diagnostics": [ { - "ruleId": "E3059", - "severity": "ERROR", - "message": "Subnet CIDR '192.168.1.0/24' is not within VPC CIDR '10.0.0.0/16'", - "source": "CFN_LINT", + "ruleId": "F3034", + "severity": "FATAL", + "message": "-1 is less than the minimum of 0", + "source": "SCHEMA", "entity": { - "logicalId": "SubnetOutside", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.CidrBlock", - "category": "Resource", - "startLine": 11, + "propertyPath": "Properties.VisibilityTimeout", + "category": "Schema", + "startLine": 8, "startColumn": 7, - "endLine": 11, - "endColumn": 16, - "ruleDescription": "Validate subnet CIDRs are within the CIDRs of the VPC", + "endLine": 8, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Numeric value out of bounds", + "phase": "SCHEMA", + "context": { + "actualValue": -1, + "extra": { + "maximum": 43200.0, + "minimum": 0.0 + } + } + }, + { + "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": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 8, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "VPC", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 8, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "SubnetOutside", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetOutside", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.QueueName", "category": "Best Practice", - "startLine": 11, + "startLine": 6, "startColumn": 7, - "endLine": 11, + "endLine": 6, "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -15506,12 +14674,12 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'VPC' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "message": "Resource 'Queue' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPC", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::SQS::Queue" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -15522,39 +14690,19 @@ "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SubnetOutside' of type 'AWS::EC2::Subnet' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SubnetOutside", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" } ] }, - "bad/subnet_overlap.yaml": { - "filePath": "bad/subnet_overlap.yaml", + "bad/schema_property_constraints.yaml": { + "filePath": "bad/schema_property_constraints.yaml", "status": "OK", "metadata": { "resourcesScanned": 3, "counts": { - "fatal": 0, - "errors": 1, - "warnings": 2, - "informational": 10, + "fatal": 1, + "errors": 0, + "warnings": 3, + "informational": 8, "debug": 0 }, "suppressed": 0, @@ -15563,98 +14711,104 @@ }, "diagnostics": [ { - "ruleId": "E3060", - "severity": "ERROR", - "message": "'10.0.0.0/24' overlaps with '10.0.0.0/24'", - "source": "CFN_LINT", + "ruleId": "F3031", + "severity": "FATAL", + "message": "'INVALID_UPPERCASE_BUCKET' does not match pattern '^([a-z0-9][a-z0-9.-]*[a-z0-9])?$'", + "source": "SCHEMA", "entity": { - "logicalId": "SubnetB", + "logicalId": "PatternBucket", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.CidrBlock", - "category": "Resource", - "startLine": 17, + "propertyPath": "Properties.BucketName", + "category": "Schema", + "startLine": 6, "startColumn": 7, - "endLine": 17, - "endColumn": 16, - "relatedResources": [ - { - "resource": { - "id": "SubnetA", - "resourceType": "AWS::EC2::Subnet" - }, - "location": { - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 10 - }, - "message": "Overlapping subnet CIDR 10.0.0.0/24" - } - ], - "ruleDescription": "Validate subnet CIDRs do not overlap with other subnets", - "phase": "LINT", + "endLine": 6, + "endColumn": 17, + "ruleDescription": "Value does not match pattern", + "phase": "SCHEMA", "context": { - "extra": { - "cidr": "10.0.0.0/24" - } + "actualValue": "INVALID_UPPERCASE_BUCKET", + "expectedConstraint": "^([a-z0-9][a-z0-9.-]*[a-z0-9])?$" } }, { - "ruleId": "W3010", + "ruleId": "W9002", "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1a'", - "source": "CFN_LINT", + "message": "Property 'CertificateAuthorityArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "ReadOnlyProp", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ACMPCA::Certificate" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.CertificateAuthorityArn", "category": "Best Practice", - "startLine": 12, + "startLine": 11, "startColumn": 7, - "endLine": 12, - "endColumn": 23, - "ruleDescription": "Availability zone properties should not be hardcoded", + "endLine": 11, + "endColumn": 30, + "ruleDescription": "Hardcoded ARN property", "phase": "LINT" }, { - "ruleId": "W3010", + "ruleId": "W9009", "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1b'", - "source": "CFN_LINT", + "message": "Property 'WorkGroupConfigurationUpdates' is deprecated", + "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "DeprecatedProp", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Athena::WorkGroup" }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 18, + "propertyPath": "Properties.WorkGroupConfigurationUpdates", + "category": "Deprecation", + "startLine": 23, "startColumn": 7, - "endLine": 18, - "endColumn": 23, - "ruleDescription": "Availability zone properties should not be hardcoded", + "endLine": 23, + "endColumn": 36, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", + "ruleDescription": "Resource type sunset or shutdown", + "phase": "SCHEMA", + "context": { + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "ReadOnlyProp", + "entityType": "Resource", + "resourceType": "AWS::ACMPCA::Certificate" + }, + "category": "Security", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPC", + "logicalId": "PatternBucket", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.BucketName", "category": "Best Practice", "startLine": 6, "startColumn": 7, "endLine": 6, - "endColumn": 16, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -15664,42 +14818,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SubnetA", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'CertificateAuthorityArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "ReadOnlyProp", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ACMPCA::Certificate" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.CertificateAuthorityArn", "category": "Best Practice", "startLine": 11, "startColumn": 7, "endLine": 11, - "endColumn": 16, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -15709,19 +14841,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'CertificateSigningRequest' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "ReadOnlyProp", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ACMPCA::Certificate" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.CertificateSigningRequest", "category": "Best Practice", "startLine": 12, "startColumn": 7, "endLine": 12, - "endColumn": 23, + "endColumn": 32, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -15731,42 +14864,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'SigningAlgorithm' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "ReadOnlyProp", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ACMPCA::Certificate" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.SigningAlgorithm", "category": "Best Practice", - "startLine": 16, + "startLine": 13, "startColumn": 7, - "endLine": 16, - "endColumn": 12, + "endLine": 13, + "endColumn": 23, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Validity' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "ReadOnlyProp", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ACMPCA::Certificate" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Validity", "category": "Best Practice", - "startLine": 17, + "startLine": 14, "startColumn": 7, - "endLine": 17, - "endColumn": 16, + "endLine": 14, + "endColumn": 15, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -15776,19 +14910,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "DeprecatedProp", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Athena::WorkGroup" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 18, + "startLine": 22, "startColumn": 7, - "endLine": 18, - "endColumn": 23, + "endLine": 22, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-athena.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -15798,12 +14933,12 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'VPC' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "message": "Resource 'PatternBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VPC", + "logicalId": "PatternBucket", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -15818,55 +14953,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SubnetA' of type 'AWS::EC2::Subnet' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SubnetA", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SubnetB' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'DeprecatedProp' of type 'AWS::Athena::WorkGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "DeprecatedProp", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Athena::WorkGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 15, + "startLine": 21, "startColumn": 5, - "endLine": 15, + "endLine": 21, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/subnet_overlap_multi.yaml": { - "filePath": "bad/subnet_overlap_multi.yaml", + "bad/schema_required_xor_conditional.yaml": { + "filePath": "bad/schema_required_xor_conditional.yaml", "status": "OK", "metadata": { - "resourcesScanned": 5, + "resourcesScanned": 1, "counts": { - "fatal": 0, - "errors": 4, - "warnings": 4, - "informational": 18, + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 5, "debug": 0 }, "suppressed": 0, @@ -15875,412 +14990,409 @@ }, "diagnostics": [ { - "ruleId": "E3059", - "severity": "ERROR", - "message": "Subnet CIDR '172.16.0.0/16' is not within VPC CIDR '10.0.0.0/8'", - "source": "CFN_LINT", + "ruleId": "F3014", + "severity": "FATAL", + "message": "Exactly one of ['ScalingTargetId', 'ResourceId'] must be specified", + "source": "SCHEMA", "entity": { - "logicalId": "SubnetC", + "logicalId": "Policy", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.CidrBlock", - "category": "Resource", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 16, - "ruleDescription": "Validate subnet CIDRs are within the CIDRs of the VPC", - "phase": "LINT" + "propertyPath": "Properties", + "category": "Schema", + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 15, + "conditionScenario": { + "DuplicateTarget": true + }, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Exactly one of properties required (requiredXor)", + "phase": "SCHEMA" }, { - "ruleId": "E3060", - "severity": "ERROR", - "message": "'10.0.0.0/16' overlaps with '10.0.0.0/8'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "Policy", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.CidrBlock", - "category": "Resource", - "startLine": 22, + "propertyPath": "Properties.PolicyName", + "category": "Best Practice", + "startLine": 14, "startColumn": 7, - "endLine": 22, - "endColumn": 16, - "relatedResources": [ - { - "resource": { - "id": "SubnetA", - "resourceType": "AWS::EC2::Subnet" - }, - "location": { - "startLine": 12, - "startColumn": 3, - "endLine": 12, - "endColumn": 10 - }, - "message": "Overlapping subnet CIDR 10.0.0.0/8" - } - ], - "ruleDescription": "Validate subnet CIDRs do not overlap with other subnets", - "phase": "LINT", + "endLine": 14, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { - "extra": { - "cidr": "10.0.0.0/16" - } + "lifecycle": "create-only" } }, { - "ruleId": "E3060", - "severity": "ERROR", - "message": "'10.0.1.0/24' overlaps with '10.0.0.0/16'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ScalingTargetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SubnetD", + "logicalId": "Policy", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.CidrBlock", - "category": "Resource", - "startLine": 34, + "propertyPath": "Properties.ScalingTargetId", + "category": "Best Practice", + "startLine": 16, "startColumn": 7, - "endLine": 34, - "endColumn": 16, - "relatedResources": [ - { - "resource": { - "id": "SubnetB", - "resourceType": "AWS::EC2::Subnet" - }, - "location": { - "startLine": 18, - "startColumn": 3, - "endLine": 18, - "endColumn": 10 - }, - "message": "Overlapping subnet CIDR 10.0.0.0/16" - } - ], - "ruleDescription": "Validate subnet CIDRs do not overlap with other subnets", - "phase": "LINT", - "context": { - "extra": { - "cidr": "10.0.1.0/24" - } - } - }, - { - "ruleId": "E3060", - "severity": "ERROR", - "message": "'10.0.1.0/24' overlaps with '10.0.0.0/8'", - "source": "CFN_LINT", - "entity": { - "logicalId": "SubnetD", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Resource", - "startLine": 34, - "startColumn": 7, - "endLine": 34, - "endColumn": 16, - "relatedResources": [ - { - "resource": { - "id": "SubnetA", - "resourceType": "AWS::EC2::Subnet" - }, - "location": { - "startLine": 12, - "startColumn": 3, - "endLine": 12, - "endColumn": 10 - }, - "message": "Overlapping subnet CIDR 10.0.0.0/8" - } - ], - "ruleDescription": "Validate subnet CIDRs do not overlap with other subnets", - "phase": "LINT", + "endLine": 16, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { - "extra": { - "cidr": "10.0.1.0/24" - } + "lifecycle": "create-only", + "resolutionSource": "parameter 'TargetId' (type String)" } }, - { - "ruleId": "W3010", - "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1a'", - "source": "CFN_LINT", - "entity": { - "logicalId": "SubnetA", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 23, - "ruleDescription": "Availability zone properties should not be hardcoded", - "phase": "LINT" - }, - { - "ruleId": "W3010", - "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1b'", - "source": "CFN_LINT", - "entity": { - "logicalId": "SubnetB", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 23, - "ruleDescription": "Availability zone properties should not be hardcoded", - "phase": "LINT" - }, - { - "ruleId": "W3010", - "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1c'", - "source": "CFN_LINT", - "entity": { - "logicalId": "SubnetC", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 29, - "startColumn": 7, - "endLine": 29, - "endColumn": 23, - "ruleDescription": "Availability zone properties should not be hardcoded", - "phase": "LINT" - }, - { - "ruleId": "W3010", - "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1d'", - "source": "CFN_LINT", - "entity": { - "logicalId": "SubnetD", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 23, - "ruleDescription": "Availability zone properties should not be hardcoded", - "phase": "LINT" - }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPC", + "logicalId": "Policy", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 11, + "startLine": 17, "startColumn": 7, - "endLine": 11, - "endColumn": 16, + "endLine": 17, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'DuplicateTarget'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ScalableDimension' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "Policy", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ScalableDimension", "category": "Best Practice", - "startLine": 15, + "startLine": 18, "startColumn": 7, - "endLine": 15, - "endColumn": 12, + "endLine": 18, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ServiceNamespace' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "Policy", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.ServiceNamespace", "category": "Best Practice", - "startLine": 16, + "startLine": 19, "startColumn": 7, - "endLine": 16, - "endColumn": 16, + "endLine": 19, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } + } + ] + }, + "bad/schema_string_length.yaml": { + "filePath": "bad/schema_string_length.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "Lambda", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "category": "Security", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "Lambda", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 21, + "startLine": 6, "startColumn": 7, - "endLine": 21, - "endColumn": 12, + "endLine": 6, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'Lambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "Lambda", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 22, + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/schema_structural.yaml": { + "filePath": "bad/schema_structural.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 6, + "errors": 0, + "warnings": 0, + "informational": 10, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3014", + "severity": "FATAL", + "message": "Exactly one of ['ScalingTargetId', 'ResourceId'] must be specified", + "source": "SCHEMA", + "entity": { + "logicalId": "ScalingPolicyBothIds", + "entityType": "Resource", + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + }, + "propertyPath": "Properties", + "category": "Schema", + "startLine": 25, + "startColumn": 5, + "endLine": 25, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Exactly one of properties required (requiredXor)", + "phase": "SCHEMA" + }, + { + "ruleId": "F3020", + "severity": "FATAL", + "message": "'Statistic' should not be included with 'ExtendedStatistic'", + "source": "SCHEMA", + "entity": { + "logicalId": "AlarmBothStats", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Statistic", + "category": "Schema", + "startLine": 12, "startColumn": 7, - "endLine": 22, + "endLine": 12, "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Mutually exclusive properties", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "property": "Statistic" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3020", + "severity": "FATAL", + "message": "'ExtendedStatistic' should not be included with 'Statistic'", + "source": "SCHEMA", "entity": { - "logicalId": "SubnetB", + "logicalId": "AlarmBothStats", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::CloudWatch::Alarm" }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 23, + "propertyPath": "Properties.ExtendedStatistic", + "category": "Schema", + "startLine": 13, "startColumn": 7, - "endLine": 23, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 13, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Mutually exclusive properties", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "property": "ExtendedStatistic" } }, + { + "ruleId": "F3021", + "severity": "FATAL", + "message": "'ScalableDimension' is a dependency of 'ResourceId'", + "source": "SCHEMA", + "entity": { + "logicalId": "ScalingPolicyMissingDeps", + "entityType": "Resource", + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + }, + "propertyPath": "Properties", + "suggestedFix": "Add 'ScalableDimension' when 'ResourceId' is specified", + "category": "Schema", + "startLine": 36, + "startColumn": 5, + "endLine": 36, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Dependent property required", + "phase": "SCHEMA" + }, + { + "ruleId": "F3021", + "severity": "FATAL", + "message": "'ServiceNamespace' is a dependency of 'ResourceId'", + "source": "SCHEMA", + "entity": { + "logicalId": "ScalingPolicyMissingDeps", + "entityType": "Resource", + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + }, + "propertyPath": "Properties", + "suggestedFix": "Add 'ServiceNamespace' when 'ResourceId' is specified", + "category": "Schema", + "startLine": 36, + "startColumn": 5, + "endLine": 36, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Dependent property required", + "phase": "SCHEMA" + }, + { + "ruleId": "F3058", + "severity": "FATAL", + "message": "One of ['CidrBlock', 'Ipv4IpamPoolId', 'Ipv6IpamPoolId', 'Ipv6CidrBlock'] is a required property", + "source": "SCHEMA", + "entity": { + "logicalId": "SubnetNoCidr", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties", + "category": "Schema", + "startLine": 19, + "startColumn": 5, + "endLine": 19, + "endColumn": 15, + "ruleDescription": "One of properties required (requiredOr)", + "phase": "SCHEMA" + }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetC", + "logicalId": "SubnetNoCidr", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 27, + "startLine": 20, "startColumn": 7, - "endLine": 27, + "endLine": 20, "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetC", + "logicalId": "ScalingPolicyBothIds", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.PolicyName", "category": "Best Practice", - "startLine": 28, + "startLine": 26, "startColumn": 7, - "endLine": 28, - "endColumn": 16, + "endLine": 26, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16290,19 +15402,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'ScalingTargetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetC", + "logicalId": "ScalingPolicyBothIds", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.ScalingTargetId", "category": "Best Practice", - "startLine": 29, + "startLine": 28, "startColumn": 7, - "endLine": 29, - "endColumn": 23, + "endLine": 28, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16312,42 +15425,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetD", + "logicalId": "ScalingPolicyBothIds", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 33, + "startLine": 29, "startColumn": 7, - "endLine": 33, - "endColumn": 12, + "endLine": 29, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ScalableDimension' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetD", + "logicalId": "ScalingPolicyBothIds", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.ScalableDimension", "category": "Best Practice", - "startLine": 34, + "startLine": 30, "startColumn": 7, - "endLine": 34, - "endColumn": 16, + "endLine": 30, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16357,19 +15471,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'ServiceNamespace' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetD", + "logicalId": "ScalingPolicyBothIds", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.ServiceNamespace", "category": "Best Practice", - "startLine": 35, + "startLine": 31, "startColumn": 7, - "endLine": 35, + "endLine": 31, "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16377,61 +15492,67 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'VPC' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPC", + "logicalId": "ScalingPolicyMissingDeps", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.PolicyName", "category": "Best Practice", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SubnetA' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "ScalingPolicyMissingDeps", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 14, - "startColumn": 5, - "endLine": 14, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 39, + "startColumn": 7, + "endLine": 39, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SubnetB' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'AlarmBothStats' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "AlarmBothStats", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::CloudWatch::Alarm" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 20, + "startLine": 6, "startColumn": 5, - "endLine": 20, + "endLine": 6, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -16439,52 +15560,159 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SubnetC' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'SubnetNoCidr' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetC", + "logicalId": "SubnetNoCidr", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 26, + "startLine": 19, "startColumn": 5, - "endLine": 26, + "endLine": 19, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "bad/schema_type_mismatch.yaml": { + "filePath": "bad/schema_type_mismatch.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 3, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W3030", + "severity": "WARN", + "message": "true is not one of ['Enabled', 'Suspended']", + "source": "CFN_LINT", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.VersioningConfiguration.Status", + "category": "Schema", + "startLine": 8, + "startColumn": 9, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Value not in allowed enum", + "phase": "SCHEMA", + "context": { + "actualValue": true, + "extra": { + "allowed_values": [ + "Enabled", + "Suspended" + ] + } + } + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "12345 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.BucketName", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 17, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "true is not of type 'string' - automatically coerced (boolean to string)", + "source": "CFN_LINT", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.VersioningConfiguration.Status", + "category": "Best Practice", + "startLine": 8, + "startColumn": 9, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.BucketName", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SubnetD' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetD", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 32, + "startLine": 5, "startColumn": 5, - "endLine": 32, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/template.yaml": { - "filePath": "bad/template.yaml", - "status": "ERROR", + "bad/schema_unique_items.yaml": { + "filePath": "bad/schema_unique_items.yaml", + "status": "OK", "metadata": { - "resourcesScanned": 0, + "resourcesScanned": 1, "counts": { - "fatal": 1, + "fatal": 2, "errors": 0, "warnings": 0, "informational": 0, @@ -16496,30 +15724,68 @@ }, "diagnostics": [ { - "ruleId": "F1101", + "ruleId": "F3032", "severity": "FATAL", - "message": "YAML parse error: while parsing a block mapping, did not find expected key at byte 234 line 12 column 11", + "message": "expected maximum item count: 1, found: 2", "source": "SCHEMA", - "category": "Structure", - "startLine": 12, - "startColumn": 11, - "endLine": 12, - "endColumn": 11, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" + "entity": { + "logicalId": "Profile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "Properties.Roles", + "category": "Schema", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 12, + "ruleDescription": "Array item count out of bounds", + "phase": "SCHEMA", + "context": { + "extra": { + "actual_count": 2, + "max_items": 1, + "min_items": 0 + } + } + }, + { + "ruleId": "F3037", + "severity": "FATAL", + "message": "Array items are not unique", + "source": "SCHEMA", + "entity": { + "logicalId": "Profile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "Properties.Roles", + "category": "Schema", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 12, + "ruleDescription": "Array items not unique", + "phase": "SCHEMA", + "context": { + "actualValue": [ + "arn:aws:iam::012345678901:role/SameRole", + "arn:aws:iam::012345678901:role/SameRole" + ] + } } ] }, - "bad/templates/base.yaml": { - "filePath": "bad/templates/base.yaml", + "bad/schema_write_only.yaml": { + "filePath": "bad/schema_write_only.yaml", "status": "OK", "metadata": { - "resourcesScanned": 0, + "resourcesScanned": 1, "counts": { - "fatal": 2, - "errors": 2, - "warnings": 0, - "informational": 0, + "fatal": 1, + "errors": 0, + "warnings": 3, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -16528,178 +15794,118 @@ }, "diagnostics": [ { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "startLine": 4, - "startColumn": 1, - "endLine": 4, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" - }, - { - "ruleId": "F0002", + "ruleId": "F6101", "severity": "FATAL", - "message": "AWSTemplateFormatVersion must be '2010-09-09', got '2010-09-10'", + "message": "'Certificate' is not one of ['CompleteCertificateChain']", "source": "SCHEMA", - "propertyPath": "AWSTemplateFormatVersion", - "category": "Structure", - "startLine": 1, - "startColumn": 1, - "endLine": 1, - "endColumn": 25, - "ruleDescription": "AWSTemplateFormatVersion must be 2010-09-09", - "phase": "SCHEMA" - }, - { - "ruleId": "E1005", - "severity": "ERROR", - "message": "Transform object is missing required 'Name' property", - "source": "CFN_LINT", - "propertyPath": "Transform", - "category": "Structure", - "startLine": 2, - "startColumn": 1, - "endLine": 2, - "endColumn": 10, - "ruleDescription": "Validate Transform configuration", - "phase": "PARSE" - }, - { - "ruleId": "E1005", - "severity": "ERROR", - "message": "Transform object has unknown property 'key' - expected one of 'Name', 'Parameters'", - "source": "CFN_LINT", - "propertyPath": "Transform", + "entity": { + "logicalId": "WriteOnlyOutput", + "entityType": "Output" + }, + "propertyPath": "Outputs/WriteOnlyOutput/Value.Fn::GetAtt.1", "category": "Structure", - "startLine": 3, + "startLine": 10, "startColumn": 3, - "endLine": 3, - "endColumn": 6, - "ruleDescription": "Validate Transform configuration", - "phase": "PARSE" - } - ] - }, - "bad/templates/base_date.yaml": { - "filePath": "bad/templates/base_date.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 2, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "startLine": 2, - "startColumn": 1, - "endLine": 2, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", + "endLine": 10, + "endColumn": 18, + "ruleDescription": "Output value must be a string", "phase": "SCHEMA" }, { - "ruleId": "F0002", - "severity": "FATAL", - "message": "AWSTemplateFormatVersion must be '2010-09-09', got '2010-09-10'", - "source": "SCHEMA", - "propertyPath": "AWSTemplateFormatVersion", - "category": "Structure", - "startLine": 1, - "startColumn": 1, - "endLine": 1, - "endColumn": 25, - "ruleDescription": "AWSTemplateFormatVersion must be 2010-09-09", - "phase": "SCHEMA" - } - ] - }, - "bad/templates/base_null.yaml": { - "filePath": "bad/templates/base_null.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 2, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'CertificateAuthorityArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", + "entity": { + "logicalId": "CertAuth", + "entityType": "Resource", + "resourceType": "AWS::ACMPCA::CertificateAuthorityActivation" + }, + "propertyPath": "Properties.CertificateAuthorityArn", + "category": "Best Practice", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 30, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "startLine": 3, - "startColumn": 1, - "endLine": 3, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "CertAuth", + "entityType": "Resource", + "resourceType": "AWS::ACMPCA::CertificateAuthorityActivation" + }, + "category": "Security", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 11, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" }, { - "ruleId": "F0002", - "severity": "FATAL", - "message": "AWSTemplateFormatVersion must be '2010-09-09', got null", - "source": "SCHEMA", - "propertyPath": "AWSTemplateFormatVersion", - "category": "Structure", - "startLine": 1, - "startColumn": 1, - "endLine": 1, - "endColumn": 25, - "ruleDescription": "AWSTemplateFormatVersion must be 2010-09-09", - "phase": "PARSE" + "ruleId": "W9054", + "severity": "WARN", + "message": "Write-only property 'Certificate' of 'CertAuth' is referenced in output 'WriteOnlyOutput'", + "source": "ENGINE", + "entity": { + "logicalId": "CertAuth", + "entityType": "Resource", + "resourceType": "AWS::ACMPCA::CertificateAuthorityActivation" + }, + "propertyPath": "Properties.Certificate", + "category": "Best Practice", + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html", + "ruleDescription": "Write-only property referenced in output", + "phase": "SCHEMA", + "context": { + "lifecycle": "write-only" + } }, { - "ruleId": "E1005", - "severity": "ERROR", - "message": "Transform must be a transform name, a list of transforms, or a {Name, Parameters} object, got null", - "source": "CFN_LINT", - "propertyPath": "Transform", - "category": "Structure", - "startLine": 2, - "startColumn": 1, - "endLine": 2, - "endColumn": 10, - "ruleDescription": "Validate Transform configuration", - "phase": "PARSE" + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CertificateAuthorityArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CertAuth", + "entityType": "Resource", + "resourceType": "AWS::ACMPCA::CertificateAuthorityActivation" + }, + "propertyPath": "Properties.CertificateAuthorityArn", + "category": "Best Practice", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ACMPCA.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } } ] }, - "bad/templates/description_object.yaml": { - "filePath": "bad/templates/description_object.yaml", + "bad/security_issues.yaml": { + "filePath": "bad/security_issues.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 2, "counts": { "fatal": 1, "errors": 0, - "warnings": 0, - "informational": 0, + "warnings": 1, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -16708,223 +15914,2984 @@ }, "diagnostics": [ { - "ruleId": "F1004", + "ruleId": "F3017", "severity": "FATAL", - "message": "Description must be a string, got a list", + "message": "Value is not valid under any of the 3 anyOf schemas for AWS::IAM::Policy (0 branches matched; at least one is required). Required property combinations: ['Groups'] or ['Roles'] or ['Users']. Branch failures: branch 1: 'Users' is a required property; branch 2: 'Groups' is a required property; branch 3: 'Roles' is a required property.", "source": "SCHEMA", - "propertyPath": "Description", - "category": "Structure", - "startLine": 2, - "startColumn": 1, - "endLine": 2, - "endColumn": 12, - "ruleDescription": "Description must be a string", - "phase": "PARSE" - } - ] - }, - "bad/templates/transform_invalid_entries.yaml": { - "filePath": "bad/templates/transform_invalid_entries.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 3, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E1005", - "severity": "ERROR", - "message": "Transform entry must be a transform name or a {Name, Parameters} object, got a number", - "source": "CFN_LINT", - "propertyPath": "Transform", - "category": "Structure", - "startLine": 4, + "entity": { + "logicalId": "WildcardPolicy", + "entityType": "Resource", + "resourceType": "AWS::IAM::Policy" + }, + "propertyPath": "Properties", + "category": "Schema", + "startLine": 14, "startColumn": 5, - "endLine": 4, - "endColumn": 6, - "ruleDescription": "Validate Transform configuration", - "phase": "PARSE" + "endLine": 14, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Value not valid under anyOf", + "phase": "SCHEMA", + "context": { + "expectedConstraint": "at least one anyOf branch", + "extra": { + "branchCount": 3, + "branchFailures": [ + { + "branch": 1, + "reasons": [ + { + "message": "'Users' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 2, + "reasons": [ + { + "message": "'Groups' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 3, + "reasons": [ + { + "message": "'Roles' is a required property", + "propertyPath": "Properties" + } + ] + } + ], + "compositionKind": "anyOf", + "matchCount": 0, + "matchOutcome": "zeroMatches", + "validPropertyCombinations": [ + [ + "Groups" + ], + [ + "Roles" + ], + [ + "Users" + ] + ] + } + } + }, + { + "ruleId": "W2508", + "severity": "WARN", + "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", + "source": "ENGINE", + "entity": { + "logicalId": "OpenSSH", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress", + "suggestedFix": "Restrict the CIDR range to specific IP addresses", + "category": "Security", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 27, + "ruleDescription": "Security group allows open access to sensitive port", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenSSH", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'OpenSSH' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "OpenSSH", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/sg_bad_port_range.yaml": { + "filePath": "bad/sg_bad_port_range.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E9002", + "severity": "ERROR", + "message": "FromPort 443 is greater than ToPort 80", + "source": "ENGINE", + "entity": { + "logicalId": "SG", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0", + "suggestedFix": "Set FromPort to a value less than or equal to ToPort", + "category": "Resource", + "startLine": 8, + "startColumn": 21, + "endLine": 8, + "endColumn": 22, + "ruleDescription": "SecurityGroup FromPort must be <= ToPort for the TCP and UDP protocols", + "phase": "LINT", + "context": { + "actualValue": [ + { + "IpProtocol": "tcp", + "FromPort": 443, + "ToPort": 80, + "CidrIp": "10.0.0.0/8" + } + ] + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SG", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SG' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SG", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/sg_open_egress.yaml": { + "filePath": "bad/sg_open_egress.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3021", + "severity": "FATAL", + "message": "'VpcId' is a dependency of 'SecurityGroupEgress'", + "source": "SCHEMA", + "entity": { + "logicalId": "OpenSG", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties", + "suggestedFix": "Add 'VpcId' when 'SecurityGroupEgress' is specified", + "category": "Schema", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Dependent property required", + "phase": "SCHEMA" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "OpenSG", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'OpenSG' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "OpenSG", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/simple_sub_param.yaml": { + "filePath": "bad/simple_sub_param.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.BucketName", + "category": "Best Practice", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:${Env})" + } + }, + { + "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": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/sns_cross_account.yaml": { + "filePath": "bad/sns_cross_account.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Topic", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.TopicName", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Topic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Topic", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/some_logs_stream_lambda.yaml": { + "filePath": "bad/some_logs_stream_lambda.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 8, + "counts": { + "fatal": 0, + "errors": 4, + "warnings": 0, + "informational": 20, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionA", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.6", + "lifecycle": "end-of-life" + } + }, + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionB", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.6", + "lifecycle": "end-of-life" + } + }, + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionC", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 44, + "startColumn": 7, + "endLine": 44, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.6", + "lifecycle": "end-of-life" + } + }, + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "LogSubscriptionFunction", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 56, + "startColumn": 7, + "endLine": 56, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.6", + "lifecycle": "end-of-life" + } + }, + { + "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": "FunctionALogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "category": "Best Practice", + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 20, + "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": "FunctionALogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "category": "Best Practice", + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "FunctionBLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "category": "Best Practice", + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 20, + "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": "FunctionBLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "category": "Best Practice", + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "FunctionCLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "category": "Best Practice", + "startLine": 45, + "startColumn": 3, + "endLine": 45, + "endColumn": 20, + "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": "FunctionCLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "category": "Best Practice", + "startLine": 45, + "startColumn": 3, + "endLine": 45, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "LogSubscriptionFunctionLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "category": "Best Practice", + "startLine": 78, + "startColumn": 3, + "endLine": 78, + "endColumn": 34, + "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": "LogSubscriptionFunctionLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "category": "Best Practice", + "startLine": 78, + "startColumn": 3, + "endLine": 78, + "endColumn": 34, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionALogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "propertyPath": "Properties.LogGroupName", + "category": "Best Practice", + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:/aws/lambda/${FunctionA})" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionBLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "propertyPath": "Properties.LogGroupName", + "category": "Best Practice", + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:/aws/lambda/${FunctionB})" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionCLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "propertyPath": "Properties.LogGroupName", + "category": "Best Practice", + "startLine": 48, + "startColumn": 7, + "endLine": 48, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:/aws/lambda/${FunctionC})" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "LogSubscriptionFunctionLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "propertyPath": "Properties.LogGroupName", + "category": "Best Practice", + "startLine": 81, + "startColumn": 7, + "endLine": 81, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:/aws/lambda/${LogSubscriptionFunction})" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionA' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionA", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 18, + "startColumn": 5, + "endLine": 18, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionALogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionALogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 24, + "startColumn": 5, + "endLine": 24, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionB' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionB", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 30, + "startColumn": 5, + "endLine": 30, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionBLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionBLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 36, + "startColumn": 5, + "endLine": 36, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionC' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionC", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 41, + "startColumn": 5, + "endLine": 41, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionCLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionCLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 47, + "startColumn": 5, + "endLine": 47, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LogSubscriptionFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "LogSubscriptionFunction", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 53, + "startColumn": 5, + "endLine": 53, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LogSubscriptionFunctionLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "LogSubscriptionFunctionLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 80, + "startColumn": 5, + "endLine": 80, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/sqs_fifo_no_suffix.yaml": { + "filePath": "bad/sqs_fifo_no_suffix.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 0, + "informational": 6, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E2504", + "severity": "ERROR", + "message": "FIFO queue name 'my-queue' must end with '.fifo'", + "source": "ENGINE", + "entity": { + "logicalId": "FifoQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.QueueName", + "category": "Resource", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 16, + "ruleDescription": "FIFO queue name must end with .fifo", + "phase": "LINT" + }, + { + "ruleId": "E3501", + "severity": "ERROR", + "message": "FIFO queue name 'my-queue' must end with '.fifo'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FifoQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.QueueName", + "suggestedFix": "Append .fifo to the queue name", + "category": "Resource", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 16, + "ruleDescription": "Validate SQS queue properties are valid", + "phase": "LINT", + "context": { + "extra": { + "queue_name": "my-queue" + } + } + }, + { + "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": "FifoQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 12, + "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": "FifoQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 12, + "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": "FifoQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FifoQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.QueueName", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FifoQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.FifoQueue", + "category": "Best Practice", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FifoQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FifoQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/sqs_fifo_standard_dlq.yaml": { + "filePath": "bad/sqs_fifo_standard_dlq.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 11, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3502", + "severity": "ERROR", + "message": "Source queue type 'FIFO' does not match destination queue type 'standard'", + "source": "CFN_LINT", + "entity": { + "logicalId": "MainQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.RedrivePolicy", + "category": "Resource", + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 20, + "ruleDescription": "Validate SQS DLQ queues are the same type", + "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": "DLQ", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 6, + "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": "DLQ", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 6, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "MainQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "category": "Best Practice", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 12, + "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": "MainQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "category": "Best Practice", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 12, + "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": "DLQ", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "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": "MainQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "DLQ", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.QueueName", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MainQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.QueueName", + "category": "Best Practice", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MainQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.FifoQueue", + "category": "Best Practice", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DLQ' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "DLQ", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MainQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "MainQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/ssm_document_invalid.yaml": { + "filePath": "bad/ssm_document_invalid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 3, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3051", + "severity": "ERROR", + "message": "SSM Document Content must include 'schemaVersion'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Doc", + "entityType": "Resource", + "resourceType": "AWS::SSM::Document" + }, + "propertyPath": "Properties.Content", + "category": "Resource", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 14, + "ruleDescription": "Validate the structure of a SSM document", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DocumentType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Doc", + "entityType": "Resource", + "resourceType": "AWS::SSM::Document" + }, + "propertyPath": "Properties.DocumentType", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Content' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Doc", + "entityType": "Resource", + "resourceType": "AWS::SSM::Document" + }, + "propertyPath": "Properties.Content", + "category": "Best Practice", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Doc' of type 'AWS::SSM::Document' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Doc", + "entityType": "Resource", + "resourceType": "AWS::SSM::Document" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/stepfunctions_bad_start_at.yaml": { + "filePath": "bad/stepfunctions_bad_start_at.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 1, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3601", + "severity": "ERROR", + "message": "StartAt 'NonExistentState' does not reference a valid state at StartAt", + "source": "CFN_LINT", + "entity": { + "logicalId": "SM", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "Properties.DefinitionString", + "category": "Resource", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 23, + "ruleDescription": "Validate the structure of a StateMachine definition", + "phase": "LINT" + }, + { + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", + "entity": { + "logicalId": "SM", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "Properties.RoleArn", + "category": "Best Practice", + "startLine": 16, + "startColumn": 7, + "endLine": 16, + "endColumn": 14, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SM' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SM", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/stepfunctions_invalid_state.yaml": { + "filePath": "bad/stepfunctions_invalid_state.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 1, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3601", + "severity": "ERROR", + "message": "StartAt 'NonExistentState' does not reference a valid state at StartAt", + "source": "CFN_LINT", + "entity": { + "logicalId": "StateMachine", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "Properties.DefinitionString", + "category": "Resource", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 23, + "ruleDescription": "Validate the structure of a StateMachine definition", + "phase": "LINT" + }, + { + "ruleId": "E3601", + "severity": "ERROR", + "message": "State 'DoWork' has invalid Type 'InvalidType'. Must be one of ['Task', 'Pass', 'Choice', 'Wait', 'Succeed', 'Fail', 'Parallel', 'Map']", + "source": "CFN_LINT", + "entity": { + "logicalId": "StateMachine", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "Properties.DefinitionString", + "category": "Resource", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 23, + "ruleDescription": "Validate the structure of a StateMachine definition", + "phase": "LINT" + }, + { + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", + "entity": { + "logicalId": "StateMachine", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "Properties.RoleArn", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 14, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'StateMachine' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "StateMachine", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/string.yaml": { + "filePath": "bad/string.yaml", + "status": "ERROR", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F1101", + "severity": "FATAL", + "message": "Template root must be a YAML mapping", + "source": "SCHEMA", + "category": "Structure", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 1, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" + } + ] + }, + "bad/sub_needed.yaml": { + "filePath": "bad/sub_needed.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 1, + "warnings": 1, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3031", + "severity": "FATAL", + "message": "'${MyParam}-bucket' does not match pattern '^([a-z0-9][a-z0-9.-]*[a-z0-9])?$'", + "source": "SCHEMA", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.BucketName", + "category": "Schema", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 17, + "ruleDescription": "Value does not match pattern", + "phase": "SCHEMA", + "context": { + "actualValue": "${MyParam}-bucket", + "expectedConstraint": "^([a-z0-9][a-z0-9.-]*[a-z0-9])?$" + } + }, + { + "ruleId": "E1029", + "severity": "ERROR", + "message": "Found an embedded parameter '${MyParam}' outside of an 'Fn::Sub' at Properties.BucketName", + "source": "CFN_LINT", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.BucketName", + "suggestedFix": "Wrap the string with Fn::Sub", + "category": "Intrinsic Function", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 17, + "ruleDescription": "Substitution variable ${X} requires Fn::Sub", + "phase": "LINT" + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'MyParam' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyParam", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/MyParam", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.BucketName", + "category": "Best Practice", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "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": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/sub_nested_intrinsic.yaml": { + "filePath": "bad/sub_nested_intrinsic.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.BucketName", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "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": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'OtherBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "OtherBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 14, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/subnet_outside_vpc.yaml": { + "filePath": "bad/subnet_outside_vpc.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 5, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3059", + "severity": "ERROR", + "message": "Subnet CIDR '192.168.1.0/24' is not within VPC CIDR '10.0.0.0/16'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SubnetOutside", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Resource", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 16, + "ruleDescription": "Validate subnet CIDRs are within the CIDRs of the VPC", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "VPC", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetOutside", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetOutside", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'VPC' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "VPC", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SubnetOutside' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetOutside", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/subnet_overlap.yaml": { + "filePath": "bad/subnet_overlap.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 2, + "informational": 10, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3060", + "severity": "ERROR", + "message": "'10.0.0.0/24' overlaps with '10.0.0.0/24'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Resource", + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "SubnetA", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 10 + }, + "message": "Overlapping subnet CIDR 10.0.0.0/24" + } + ], + "ruleDescription": "Validate subnet CIDRs do not overlap with other subnets", + "phase": "LINT", + "context": { + "extra": { + "cidr": "10.0.0.0/24" + } + } + }, + { + "ruleId": "W3010", + "severity": "WARN", + "message": "Avoid hardcoding availability zones 'us-east-1a'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 23, + "ruleDescription": "Availability zone properties should not be hardcoded", + "phase": "LINT" + }, + { + "ruleId": "W3010", + "severity": "WARN", + "message": "Avoid hardcoding availability zones 'us-east-1b'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 18, + "startColumn": 7, + "endLine": 18, + "endColumn": 23, + "ruleDescription": "Availability zone properties should not be hardcoded", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "VPC", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 16, + "startColumn": 7, + "endLine": 16, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 18, + "startColumn": 7, + "endLine": 18, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'VPC' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "VPC", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SubnetA' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SubnetB' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/subnet_overlap_multi.yaml": { + "filePath": "bad/subnet_overlap_multi.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 4, + "warnings": 4, + "informational": 18, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3059", + "severity": "ERROR", + "message": "Subnet CIDR '172.16.0.0/16' is not within VPC CIDR '10.0.0.0/8'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SubnetC", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Resource", + "startLine": 28, + "startColumn": 7, + "endLine": 28, + "endColumn": 16, + "ruleDescription": "Validate subnet CIDRs are within the CIDRs of the VPC", + "phase": "LINT" + }, + { + "ruleId": "E3060", + "severity": "ERROR", + "message": "'10.0.0.0/16' overlaps with '10.0.0.0/8'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Resource", + "startLine": 22, + "startColumn": 7, + "endLine": 22, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "SubnetA", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 10 + }, + "message": "Overlapping subnet CIDR 10.0.0.0/8" + } + ], + "ruleDescription": "Validate subnet CIDRs do not overlap with other subnets", + "phase": "LINT", + "context": { + "extra": { + "cidr": "10.0.0.0/16" + } + } + }, + { + "ruleId": "E3060", + "severity": "ERROR", + "message": "'10.0.1.0/24' overlaps with '10.0.0.0/16'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SubnetD", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Resource", + "startLine": 34, + "startColumn": 7, + "endLine": 34, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "SubnetB", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 10 + }, + "message": "Overlapping subnet CIDR 10.0.0.0/16" + } + ], + "ruleDescription": "Validate subnet CIDRs do not overlap with other subnets", + "phase": "LINT", + "context": { + "extra": { + "cidr": "10.0.1.0/24" + } + } + }, + { + "ruleId": "E3060", + "severity": "ERROR", + "message": "'10.0.1.0/24' overlaps with '10.0.0.0/8'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SubnetD", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Resource", + "startLine": 34, + "startColumn": 7, + "endLine": 34, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "SubnetA", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 10 + }, + "message": "Overlapping subnet CIDR 10.0.0.0/8" + } + ], + "ruleDescription": "Validate subnet CIDRs do not overlap with other subnets", + "phase": "LINT", + "context": { + "extra": { + "cidr": "10.0.1.0/24" + } + } + }, + { + "ruleId": "W3010", + "severity": "WARN", + "message": "Avoid hardcoding availability zones 'us-east-1a'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 23, + "ruleDescription": "Availability zone properties should not be hardcoded", + "phase": "LINT" + }, + { + "ruleId": "W3010", + "severity": "WARN", + "message": "Avoid hardcoding availability zones 'us-east-1b'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 23, + "ruleDescription": "Availability zone properties should not be hardcoded", + "phase": "LINT" + }, + { + "ruleId": "W3010", + "severity": "WARN", + "message": "Avoid hardcoding availability zones 'us-east-1c'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SubnetC", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 29, + "startColumn": 7, + "endLine": 29, + "endColumn": 23, + "ruleDescription": "Availability zone properties should not be hardcoded", + "phase": "LINT" + }, + { + "ruleId": "W3010", + "severity": "WARN", + "message": "Avoid hardcoding availability zones 'us-east-1d'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SubnetD", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 23, + "ruleDescription": "Availability zone properties should not be hardcoded", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "VPC", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 15, + "startColumn": 7, + "endLine": 15, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 16, + "startColumn": 7, + "endLine": 16, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 22, + "startColumn": 7, + "endLine": 22, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetC", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 27, + "startColumn": 7, + "endLine": 27, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetC", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 28, + "startColumn": 7, + "endLine": 28, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetC", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 29, + "startColumn": 7, + "endLine": 29, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetD", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetD", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 34, + "startColumn": 7, + "endLine": 34, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetD", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E1005", - "severity": "ERROR", - "message": "Transform 'Parameters' must be an object, got a string", - "source": "CFN_LINT", - "propertyPath": "Transform", - "category": "Structure", - "startLine": 6, + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'VPC' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "VPC", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 10, "startColumn": 5, - "endLine": 6, + "endLine": 10, "endColumn": 15, - "ruleDescription": "Validate Transform configuration", - "phase": "PARSE" - }, - { - "ruleId": "E1005", - "severity": "ERROR", - "message": "Transform 'Name' must be a string, got a list", - "source": "CFN_LINT", - "propertyPath": "Transform", - "category": "Structure", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 9, - "ruleDescription": "Validate Transform configuration", - "phase": "PARSE" - } - ] - }, - "bad/transform/auto_publish_alias.yaml": { - "filePath": "bad/transform/auto_publish_alias.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 2, - "warnings": 0, - "informational": 0, - "debug": 0 + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", - "severity": "ERROR", - "message": "Error transforming template: Resource with id [SkillFunctionExtraItems] is invalid. Type of property 'AutoPublishAlias' is invalid.", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SubnetA' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "SkillFunctionExtraItems", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties/AutoPublishAlias", - "category": "Structure", - "startLine": 22, - "startColumn": 7, - "endLine": 22, - "endColumn": 23, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 14, + "startColumn": 5, + "endLine": 14, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "E0001", - "severity": "ERROR", - "message": "Error transforming template: Resource with id [SkillFunctionNotRef] is invalid. 'AutoPublishAlias' must be a string or a Ref to a template parameter", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SubnetB' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "SkillFunctionNotRef", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties/AutoPublishAlias", - "category": "Structure", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 23, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 20, + "startColumn": 5, + "endLine": 20, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/transform/no_properties.yaml": { - "filePath": "bad/transform/no_properties.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", - "severity": "ERROR", - "message": "Error transforming template: Resource with id [MyApi] is invalid. Missing required property 'StageName'.", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SubnetC' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyApi", + "logicalId": "SubnetC", "entityType": "Resource", - "resourceType": "AWS::Serverless::Api" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties/StageName", - "category": "Structure", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 8, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 26, + "startColumn": 5, + "endLine": 26, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "bad/transform_serverless_auto_publish_alias.yaml": { - "filePath": "bad/transform_serverless_auto_publish_alias.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E0001", - "severity": "ERROR", - "message": "Error transforming template: Resource with id [ProcessorFunction] is invalid. 'AutoPublishAlias' must be a string or a Ref to a template parameter", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SubnetD' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ProcessorFunction", + "logicalId": "SubnetD", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties/AutoPublishAlias", - "category": "Structure", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 23, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 32, + "startColumn": 5, + "endLine": 32, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "bad/transform_serverless_template.yaml": { - "filePath": "bad/transform_serverless_template.yaml", - "status": "OK", + "bad/template.yaml": { + "filePath": "bad/template.yaml", + "status": "ERROR", "metadata": { - "resourcesScanned": 6, + "resourcesScanned": 0, "counts": { - "fatal": 0, - "errors": 3, + "fatal": 1, + "errors": 0, "warnings": 0, "informational": 0, "debug": 0 @@ -16935,61 +18902,17 @@ }, "diagnostics": [ { - "ruleId": "E0001", - "severity": "ERROR", - "message": "Error transforming template: Resource with id [myFunctionMyTimer] is invalid. Missing required property 'Schedule'.", - "source": "CFN_LINT", - "entity": { - "logicalId": "myFunction", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" - }, - "propertyPath": "Properties/Events/MyTimer", - "category": "Structure", - "startLine": 39, - "startColumn": 9, - "endLine": 39, - "endColumn": 16, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", - "phase": "LINT" - }, - { - "ruleId": "E0001", - "severity": "ERROR", - "message": "Error transforming template: Resource with id [ExampleLayer] is invalid. Missing required property 'ContentUri'.", - "source": "CFN_LINT", - "entity": { - "logicalId": "ExampleLayer", - "entityType": "Resource", - "resourceType": "AWS::Serverless::LayerVersion" - }, - "propertyPath": "Properties/ContentUri", - "category": "Structure", - "startLine": 50, - "startColumn": 3, - "endLine": 50, - "endColumn": 15, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", - "phase": "LINT" - }, - { - "ruleId": "E0001", - "severity": "ERROR", - "message": "Error transforming template: Resource with id [AppName] is invalid. Resource is missing the required [Location] property.", - "source": "CFN_LINT", - "entity": { - "logicalId": "AppName", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Application" - }, - "propertyPath": "Properties/Location", + "ruleId": "F1101", + "severity": "FATAL", + "message": "YAML parse error: while parsing a block mapping, did not find expected key at byte 234 line 12 column 11", + "source": "SCHEMA", "category": "Structure", - "startLine": 56, - "startColumn": 3, - "endLine": 56, - "endColumn": 10, - "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", - "phase": "LINT" + "startLine": 12, + "startColumn": 11, + "endLine": 12, + "endColumn": 11, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" } ] } diff --git a/src/resources/expected/validation_reports4.json b/src/resources/expected/validation_reports4.json index d61a3e43..b6487412 100644 --- a/src/resources/expected/validation_reports4.json +++ b/src/resources/expected/validation_reports4.json @@ -1,4 +1,487 @@ { + "bad/templates/base.yaml": { + "filePath": "bad/templates/base.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 2, + "errors": 2, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "startLine": 4, + "startColumn": 1, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" + }, + { + "ruleId": "F0002", + "severity": "FATAL", + "message": "AWSTemplateFormatVersion must be '2010-09-09', got '2010-09-10'", + "source": "SCHEMA", + "propertyPath": "AWSTemplateFormatVersion", + "category": "Structure", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 25, + "ruleDescription": "AWSTemplateFormatVersion must be 2010-09-09", + "phase": "SCHEMA" + }, + { + "ruleId": "E1005", + "severity": "ERROR", + "message": "Transform object is missing required 'Name' property", + "source": "CFN_LINT", + "propertyPath": "Transform", + "category": "Structure", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate Transform configuration", + "phase": "PARSE" + }, + { + "ruleId": "E1005", + "severity": "ERROR", + "message": "Transform object has unknown property 'key' - expected one of 'Name', 'Parameters'", + "source": "CFN_LINT", + "propertyPath": "Transform", + "category": "Structure", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 6, + "ruleDescription": "Validate Transform configuration", + "phase": "PARSE" + } + ] + }, + "bad/templates/base_date.yaml": { + "filePath": "bad/templates/base_date.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 2, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" + }, + { + "ruleId": "F0002", + "severity": "FATAL", + "message": "AWSTemplateFormatVersion must be '2010-09-09', got '2010-09-10'", + "source": "SCHEMA", + "propertyPath": "AWSTemplateFormatVersion", + "category": "Structure", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 25, + "ruleDescription": "AWSTemplateFormatVersion must be 2010-09-09", + "phase": "SCHEMA" + } + ] + }, + "bad/templates/base_null.yaml": { + "filePath": "bad/templates/base_null.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 2, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" + }, + { + "ruleId": "F0002", + "severity": "FATAL", + "message": "AWSTemplateFormatVersion must be '2010-09-09', got null", + "source": "SCHEMA", + "propertyPath": "AWSTemplateFormatVersion", + "category": "Structure", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 25, + "ruleDescription": "AWSTemplateFormatVersion must be 2010-09-09", + "phase": "PARSE" + }, + { + "ruleId": "E1005", + "severity": "ERROR", + "message": "Transform must be a transform name, a list of transforms, or a {Name, Parameters} object, got null", + "source": "CFN_LINT", + "propertyPath": "Transform", + "category": "Structure", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate Transform configuration", + "phase": "PARSE" + } + ] + }, + "bad/templates/description_object.yaml": { + "filePath": "bad/templates/description_object.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F1004", + "severity": "FATAL", + "message": "Description must be a string, got a list", + "source": "SCHEMA", + "propertyPath": "Description", + "category": "Structure", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Description must be a string", + "phase": "PARSE" + } + ] + }, + "bad/templates/transform_invalid_entries.yaml": { + "filePath": "bad/templates/transform_invalid_entries.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 3, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E1005", + "severity": "ERROR", + "message": "Transform entry must be a transform name or a {Name, Parameters} object, got a number", + "source": "CFN_LINT", + "propertyPath": "Transform", + "category": "Structure", + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 6, + "ruleDescription": "Validate Transform configuration", + "phase": "PARSE" + }, + { + "ruleId": "E1005", + "severity": "ERROR", + "message": "Transform 'Parameters' must be an object, got a string", + "source": "CFN_LINT", + "propertyPath": "Transform", + "category": "Structure", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Validate Transform configuration", + "phase": "PARSE" + }, + { + "ruleId": "E1005", + "severity": "ERROR", + "message": "Transform 'Name' must be a string, got a list", + "source": "CFN_LINT", + "propertyPath": "Transform", + "category": "Structure", + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 9, + "ruleDescription": "Validate Transform configuration", + "phase": "PARSE" + } + ] + }, + "bad/transform/auto_publish_alias.yaml": { + "filePath": "bad/transform/auto_publish_alias.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [SkillFunctionExtraItems] is invalid. Type of property 'AutoPublishAlias' is invalid.", + "source": "CFN_LINT", + "entity": { + "logicalId": "SkillFunctionExtraItems", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Properties/AutoPublishAlias", + "category": "Structure", + "startLine": 22, + "startColumn": 7, + "endLine": 22, + "endColumn": 23, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + }, + { + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [SkillFunctionNotRef] is invalid. 'AutoPublishAlias' must be a string or a Ref to a template parameter", + "source": "CFN_LINT", + "entity": { + "logicalId": "SkillFunctionNotRef", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Properties/AutoPublishAlias", + "category": "Structure", + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 23, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/transform/no_properties.yaml": { + "filePath": "bad/transform/no_properties.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [MyApi] is invalid. Missing required property 'StageName'.", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyApi", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Api" + }, + "propertyPath": "Properties/StageName", + "category": "Structure", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 8, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/transform_serverless_auto_publish_alias.yaml": { + "filePath": "bad/transform_serverless_auto_publish_alias.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [ProcessorFunction] is invalid. 'AutoPublishAlias' must be a string or a Ref to a template parameter", + "source": "CFN_LINT", + "entity": { + "logicalId": "ProcessorFunction", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Properties/AutoPublishAlias", + "category": "Structure", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 23, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, + "bad/transform_serverless_template.yaml": { + "filePath": "bad/transform_serverless_template.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 6, + "counts": { + "fatal": 0, + "errors": 3, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [myFunctionMyTimer] is invalid. Missing required property 'Schedule'.", + "source": "CFN_LINT", + "entity": { + "logicalId": "myFunction", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Properties/Events/MyTimer", + "category": "Structure", + "startLine": 39, + "startColumn": 9, + "endLine": 39, + "endColumn": 16, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + }, + { + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [ExampleLayer] is invalid. Missing required property 'ContentUri'.", + "source": "CFN_LINT", + "entity": { + "logicalId": "ExampleLayer", + "entityType": "Resource", + "resourceType": "AWS::Serverless::LayerVersion" + }, + "propertyPath": "Properties/ContentUri", + "category": "Structure", + "startLine": 50, + "startColumn": 3, + "endLine": 50, + "endColumn": 15, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + }, + { + "ruleId": "E0001", + "severity": "ERROR", + "message": "Error transforming template: Resource with id [AppName] is invalid. Resource is missing the required [Location] property.", + "source": "CFN_LINT", + "entity": { + "logicalId": "AppName", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Application" + }, + "propertyPath": "Properties/Location", + "category": "Structure", + "startLine": 56, + "startColumn": 3, + "endLine": 56, + "endColumn": 10, + "ruleDescription": "SAM (AWS::Serverless) transform would reject the template", + "phase": "LINT" + } + ] + }, "bad/undefined_condition.yaml": { "filePath": "bad/undefined_condition.yaml", "status": "OK", @@ -67345,4598 +67828,5 @@ "phase": "LINT" } ] - }, - "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStackEcrStack6B6F0F99.nested.template.json": { - "filePath": "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStackEcrStack6B6F0F99.nested.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 8, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 6, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiBServiceRole8C8B0491' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiB28EAD8E4", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 163, - "startColumn": 4, - "endLine": 163, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RepositoryName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FrontendRepository7D714FA2", - "entityType": "Resource", - "resourceType": "AWS::ECR::Repository" - }, - "propertyPath": "Properties.RepositoryName", - "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ecr.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RepositoryName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BackendDataRepositoryD361813E", - "entityType": "Resource", - "resourceType": "AWS::ECR::Repository" - }, - "propertyPath": "Properties.RepositoryName", - "category": "Best Practice", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ecr.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FrontendRepository7D714FA2' of type 'AWS::ECR::Repository' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FrontendRepository7D714FA2", - "entityType": "Resource", - "resourceType": "AWS::ECR::Repository" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BackendDataRepositoryD361813E' of type 'AWS::ECR::Repository' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BackendDataRepositoryD361813E", - "entityType": "Resource", - "resourceType": "AWS::ECR::Repository" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 16, - "startColumn": 4, - "endLine": 16, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiBServiceRole8C8B0491' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiBServiceRole8C8B0491", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 70, - "startColumn": 4, - "endLine": 70, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiB28EAD8E4' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiB28EAD8E4", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 144, - "startColumn": 4, - "endLine": 144, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStackEcsStack19C526D0.nested.template.json": { - "filePath": "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStackEcsStack19C526D0.nested.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 20, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 61, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ECSCluster7D463CD4", - "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" - }, - "propertyPath": "Properties.ClusterName", - "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ECSClusterDefaultServiceDiscoveryNamespace5AC2D2BE", - "entityType": "Resource", - "resourceType": "AWS::ServiceDiscovery::PrivateDnsNamespace" - }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 29, - "startColumn": 5, - "endLine": 29, - "endColumn": 10, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Vpc' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ECSClusterDefaultServiceDiscoveryNamespace5AC2D2BE", - "entityType": "Resource", - "resourceType": "AWS::ServiceDiscovery::PrivateDnsNamespace" - }, - "propertyPath": "Properties.Vpc", - "category": "Best Practice", - "startLine": 30, - "startColumn": 5, - "endLine": 30, - "endColumn": 9, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'referencetoCdkExamplesServiceConnectStackServiceConnectVPCE46B65DFRef' (type String)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ECSServiceLogGroupD961AA4E", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "propertyPath": "Properties.LogGroupName", - "category": "Best Practice", - "startLine": 41, - "startColumn": 5, - "endLine": 41, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:{ref:ECSCluster7D463CD4}-service)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ECSSecurityGroupA14DBE7D", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 219, - "startColumn": 5, - "endLine": 219, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ECSSecurityGroupA14DBE7D", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 238, - "startColumn": 5, - "endLine": 238, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'referencetoCdkExamplesServiceConnectStackServiceConnectVPCE46B65DFRef' (type String)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" - }, - "propertyPath": "Properties.FromPort", - "category": "Best Practice", - "startLine": 250, - "startColumn": 5, - "endLine": 250, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" - }, - "propertyPath": "Properties.GroupId", - "category": "Best Practice", - "startLine": 251, - "startColumn": 5, - "endLine": 251, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ECSSecurityGroupA14DBE7D.GroupId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" - }, - "propertyPath": "Properties.IpProtocol", - "category": "Best Practice", - "startLine": 257, - "startColumn": 5, - "endLine": 257, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" - }, - "propertyPath": "Properties.SourceSecurityGroupId", - "category": "Best Practice", - "startLine": 258, - "startColumn": 5, - "endLine": 258, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt PublicLBSG963B1ACE.GroupId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" - }, - "propertyPath": "Properties.ToPort", - "category": "Best Practice", - "startLine": 264, - "startColumn": 5, - "endLine": 264, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FrontendTaskDefinition6CBC2B00", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 273, - "startColumn": 5, - "endLine": 273, - "endColumn": 26, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FrontendTaskDefinition6CBC2B00", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Cpu", - "category": "Best Practice", - "startLine": 302, - "startColumn": 5, - "endLine": 302, - "endColumn": 9, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FrontendTaskDefinition6CBC2B00", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.ExecutionRoleArn", - "category": "Best Practice", - "startLine": 303, - "startColumn": 5, - "endLine": 303, - "endColumn": 22, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ECSTaskIamRole84EB0A02.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FrontendTaskDefinition6CBC2B00", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Family", - "category": "Best Practice", - "startLine": 309, - "startColumn": 5, - "endLine": 309, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FrontendTaskDefinition6CBC2B00", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Memory", - "category": "Best Practice", - "startLine": 310, - "startColumn": 5, - "endLine": 310, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FrontendTaskDefinition6CBC2B00", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 311, - "startColumn": 5, - "endLine": 311, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FrontendTaskDefinition6CBC2B00", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 312, - "startColumn": 5, - "endLine": 312, - "endColumn": 29, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FrontendTaskDefinition6CBC2B00", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.TaskRoleArn", - "category": "Best Practice", - "startLine": 315, - "startColumn": 5, - "endLine": 315, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt TaskexecutionRole978012CD.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BackendTaskDefinitionEC224DE6", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 337, - "startColumn": 5, - "endLine": 337, - "endColumn": 26, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BackendTaskDefinitionEC224DE6", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Cpu", - "category": "Best Practice", - "startLine": 366, - "startColumn": 5, - "endLine": 366, - "endColumn": 9, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BackendTaskDefinitionEC224DE6", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.ExecutionRoleArn", - "category": "Best Practice", - "startLine": 367, - "startColumn": 5, - "endLine": 367, - "endColumn": 22, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ECSTaskIamRole84EB0A02.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BackendTaskDefinitionEC224DE6", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Family", - "category": "Best Practice", - "startLine": 373, - "startColumn": 5, - "endLine": 373, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BackendTaskDefinitionEC224DE6", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Memory", - "category": "Best Practice", - "startLine": 374, - "startColumn": 5, - "endLine": 374, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BackendTaskDefinitionEC224DE6", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 375, - "startColumn": 5, - "endLine": 375, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BackendTaskDefinitionEC224DE6", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 376, - "startColumn": 5, - "endLine": 376, - "endColumn": 29, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BackendTaskDefinitionEC224DE6", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.TaskRoleArn", - "category": "Best Practice", - "startLine": 379, - "startColumn": 5, - "endLine": 379, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt TaskexecutionRole978012CD.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FrontendServiceBC94BA93", - "entityType": "Resource", - "resourceType": "AWS::ECS::Service" - }, - "propertyPath": "Properties.Cluster", - "category": "Best Practice", - "startLine": 401, - "startColumn": 5, - "endLine": 401, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ECSCluster7D463CD4'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FrontendServiceBC94BA93", - "entityType": "Resource", - "resourceType": "AWS::ECS::Service" - }, - "propertyPath": "Properties.LaunchType", - "category": "Best Practice", - "startLine": 411, - "startColumn": 5, - "endLine": 411, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ServiceName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FrontendServiceBC94BA93", - "entityType": "Resource", - "resourceType": "AWS::ECS::Service" - }, - "propertyPath": "Properties.ServiceName", - "category": "Best Practice", - "startLine": 456, - "startColumn": 5, - "endLine": 456, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BackendService7A4224EE", - "entityType": "Resource", - "resourceType": "AWS::ECS::Service" - }, - "propertyPath": "Properties.Cluster", - "category": "Best Practice", - "startLine": 473, - "startColumn": 5, - "endLine": 473, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ECSCluster7D463CD4'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BackendService7A4224EE", - "entityType": "Resource", - "resourceType": "AWS::ECS::Service" - }, - "propertyPath": "Properties.LaunchType", - "category": "Best Practice", - "startLine": 482, - "startColumn": 5, - "endLine": 482, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ServiceName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BackendService7A4224EE", - "entityType": "Resource", - "resourceType": "AWS::ECS::Service" - }, - "propertyPath": "Properties.ServiceName", - "category": "Best Practice", - "startLine": 518, - "startColumn": 5, - "endLine": 518, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "PublicLBSG963B1ACE", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 533, - "startColumn": 5, - "endLine": 533, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "PublicLBSG963B1ACE", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 550, - "startColumn": 5, - "endLine": 550, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'referencetoCdkExamplesServiceConnectStackServiceConnectVPCE46B65DFRef' (type String)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TargetGroup3D7CD9B8", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" - }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 566, - "startColumn": 5, - "endLine": 566, - "endColumn": 10, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TargetGroup3D7CD9B8", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" - }, - "propertyPath": "Properties.Port", - "category": "Best Practice", - "startLine": 567, - "startColumn": 5, - "endLine": 567, - "endColumn": 10, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TargetGroup3D7CD9B8", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" - }, - "propertyPath": "Properties.Protocol", - "category": "Best Practice", - "startLine": 568, - "startColumn": 5, - "endLine": 568, - "endColumn": 14, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TargetGroup3D7CD9B8", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" - }, - "propertyPath": "Properties.TargetType", - "category": "Best Practice", - "startLine": 579, - "startColumn": 5, - "endLine": 579, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TargetGroup3D7CD9B8", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 581, - "startColumn": 5, - "endLine": 581, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'referencetoCdkExamplesServiceConnectStackServiceConnectVPCE46B65DFRef' (type String)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FrontendLB2FA80AC2", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" - }, - "propertyPath": "Properties.Scheme", - "category": "Best Practice", - "startLine": 602, - "startColumn": 5, - "endLine": 602, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FrontendLB2FA80AC2", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" - }, - "propertyPath": "Properties.Type", - "category": "Best Practice", - "startLine": 619, - "startColumn": 5, - "endLine": 619, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FrontendLBListener230479D8", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" - }, - "propertyPath": "Properties.LoadBalancerArn", - "category": "Best Practice", - "startLine": 636, - "startColumn": 5, - "endLine": 636, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'FrontendLB2FA80AC2'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ListenerArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ListenerRule73F9AC5E", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::ListenerRule" - }, - "propertyPath": "Properties.ListenerArn", - "category": "Best Practice", - "startLine": 667, - "startColumn": 5, - "endLine": 667, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'FrontendLBListener230479D8'" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ECSCluster7D463CD4' of type 'AWS::ECS::Cluster' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ECSCluster7D463CD4", - "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ECSClusterDefaultServiceDiscoveryNamespace5AC2D2BE' of type 'AWS::ServiceDiscovery::PrivateDnsNamespace' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ECSClusterDefaultServiceDiscoveryNamespace5AC2D2BE", - "entityType": "Resource", - "resourceType": "AWS::ServiceDiscovery::PrivateDnsNamespace" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 28, - "startColumn": 4, - "endLine": 28, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ECSServiceLogGroupD961AA4E' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ECSServiceLogGroupD961AA4E", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 40, - "startColumn": 4, - "endLine": 40, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ECSTaskIamRole84EB0A02' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ECSTaskIamRole84EB0A02", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 62, - "startColumn": 4, - "endLine": 62, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TaskexecutionRole978012CD' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TaskexecutionRole978012CD", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 172, - "startColumn": 4, - "endLine": 172, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ECSSecurityGroupA14DBE7D' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ECSSecurityGroupA14DBE7D", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 218, - "startColumn": 4, - "endLine": 218, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FrontendTaskDefinition6CBC2B00' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FrontendTaskDefinition6CBC2B00", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 272, - "startColumn": 4, - "endLine": 272, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FrontendTaskDefinitionFrontendContainerLogGroup994ED50C' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FrontendTaskDefinitionFrontendContainerLogGroup994ED50C", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 326, - "startColumn": 3, - "endLine": 326, - "endColumn": 59, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BackendTaskDefinitionEC224DE6' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BackendTaskDefinitionEC224DE6", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 336, - "startColumn": 4, - "endLine": 336, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BackendTaskDefinitionBackendContainerLogGroup5E30F6E8' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BackendTaskDefinitionBackendContainerLogGroup5E30F6E8", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 390, - "startColumn": 3, - "endLine": 390, - "endColumn": 57, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FrontendServiceBC94BA93' of type 'AWS::ECS::Service' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FrontendServiceBC94BA93", - "entityType": "Resource", - "resourceType": "AWS::ECS::Service" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 400, - "startColumn": 4, - "endLine": 400, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BackendService7A4224EE' of type 'AWS::ECS::Service' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BackendService7A4224EE", - "entityType": "Resource", - "resourceType": "AWS::ECS::Service" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 472, - "startColumn": 4, - "endLine": 472, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'PublicLBSG963B1ACE' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "PublicLBSG963B1ACE", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 532, - "startColumn": 4, - "endLine": 532, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TargetGroup3D7CD9B8' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TargetGroup3D7CD9B8", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 560, - "startColumn": 4, - "endLine": 560, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FrontendLB2FA80AC2' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FrontendLB2FA80AC2", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 591, - "startColumn": 4, - "endLine": 591, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FrontendLBListener230479D8' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FrontendLBListener230479D8", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 627, - "startColumn": 4, - "endLine": 627, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ListenerRule73F9AC5E' of type 'AWS::ElasticLoadBalancingV2::ListenerRule' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ListenerRule73F9AC5E", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::ListenerRule" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 648, - "startColumn": 4, - "endLine": 648, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/py-emr--emr-cluster.template.json": { - "filePath": "cdk/py-emr--emr-cluster.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 16, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 33, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "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": "emrcluster", - "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" - }, - "category": "Best Practice", - "startLine": 314, - "startColumn": 3, - "endLine": 314, - "endColumn": 14, - "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": "emrcluster", - "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" - }, - "category": "Best Practice", - "startLine": 314, - "startColumn": 3, - "endLine": 314, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "vpcA2121C38", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "vpcA2121C38", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.InstanceTenancy", - "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "vpcpublicSubnet1SubnetA635257E", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 24, - "startColumn": 5, - "endLine": 24, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "vpcpublicSubnet1SubnetA635257E", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 32, - "startColumn": 5, - "endLine": 32, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "vpcpublicSubnet1SubnetA635257E", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 48, - "startColumn": 5, - "endLine": 48, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcA2121C38'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "vpcpublicSubnet1RouteTableA38152FE", - "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 65, - "startColumn": 5, - "endLine": 65, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcA2121C38'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "vpcpublicSubnet1RouteTableAssociationB46101B8", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 76, - "startColumn": 5, - "endLine": 76, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcpublicSubnet1RouteTableA38152FE'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "vpcpublicSubnet1RouteTableAssociationB46101B8", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 79, - "startColumn": 5, - "endLine": 79, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcpublicSubnet1SubnetA635257E'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "vpcpublicSubnet1DefaultRouteF0973989", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.DestinationCidrBlock", - "category": "Best Practice", - "startLine": 90, - "startColumn": 5, - "endLine": 90, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "vpcpublicSubnet1DefaultRouteF0973989", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 94, - "startColumn": 5, - "endLine": 94, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcpublicSubnet1RouteTableA38152FE'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "vpcpublicSubnet2Subnet027D165B", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 108, - "startColumn": 5, - "endLine": 108, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "vpcpublicSubnet2Subnet027D165B", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 116, - "startColumn": 5, - "endLine": 116, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "vpcpublicSubnet2Subnet027D165B", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 132, - "startColumn": 5, - "endLine": 132, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcA2121C38'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "vpcpublicSubnet2RouteTableA6135437", - "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 149, - "startColumn": 5, - "endLine": 149, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcA2121C38'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "vpcpublicSubnet2RouteTableAssociation73F6478A", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 160, - "startColumn": 5, - "endLine": 160, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcpublicSubnet2RouteTableA6135437'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "vpcpublicSubnet2RouteTableAssociation73F6478A", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 163, - "startColumn": 5, - "endLine": 163, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcpublicSubnet2Subnet027D165B'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "vpcpublicSubnet2DefaultRoute13685A07", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.DestinationCidrBlock", - "category": "Best Practice", - "startLine": 174, - "startColumn": 5, - "endLine": 174, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "vpcpublicSubnet2DefaultRoute13685A07", - "entityType": "Resource", - "resourceType": "AWS::EC2::Route" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 178, - "startColumn": 5, - "endLine": 178, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcpublicSubnet2RouteTableA6135437'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "vpcVPCGW7984C166", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 209, - "startColumn": 5, - "endLine": 209, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'vpcA2121C38'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceProfileName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "emrjobflowprofile", - "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" - }, - "propertyPath": "Properties.InstanceProfileName", - "category": "Best Practice", - "startLine": 303, - "startColumn": 5, - "endLine": 303, - "endColumn": 25, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Applications' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "emrcluster", - "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" - }, - "propertyPath": "Properties.Applications", - "category": "Best Practice", - "startLine": 317, - "startColumn": 5, - "endLine": 317, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Configurations' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "emrcluster", - "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" - }, - "propertyPath": "Properties.Configurations", - "category": "Best Practice", - "startLine": 322, - "startColumn": 5, - "endLine": 322, - "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'JobFlowRole' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "emrcluster", - "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" - }, - "propertyPath": "Properties.JobFlowRole", - "category": "Best Practice", - "startLine": 365, - "startColumn": 5, - "endLine": 365, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LogUri' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "emrcluster", - "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" - }, - "propertyPath": "Properties.LogUri", - "category": "Best Practice", - "startLine": 366, - "startColumn": 5, - "endLine": 366, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "emrcluster", - "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" - }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 378, - "startColumn": 5, - "endLine": 378, - "endColumn": 10, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ReleaseLabel' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "emrcluster", - "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" - }, - "propertyPath": "Properties.ReleaseLabel", - "category": "Best Practice", - "startLine": 379, - "startColumn": 5, - "endLine": 379, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ServiceRole' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "emrcluster", - "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" - }, - "propertyPath": "Properties.ServiceRole", - "category": "Best Practice", - "startLine": 380, - "startColumn": 5, - "endLine": 380, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'emrservicerole3BE5EDAF'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Steps' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "emrcluster", - "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" - }, - "propertyPath": "Properties.Steps", - "category": "Best Practice", - "startLine": 383, - "startColumn": 5, - "endLine": 383, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'emrservicerole3BE5EDAF' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "emrservicerole3BE5EDAF", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 219, - "startColumn": 4, - "endLine": 219, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'emrjobflowrole15D4DAE5' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "emrjobflowrole15D4DAE5", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 268, - "startColumn": 4, - "endLine": 268, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'emrcluster' of type 'AWS::EMR::Cluster' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "emrcluster", - "entityType": "Resource", - "resourceType": "AWS::EMR::Cluster" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 316, - "startColumn": 4, - "endLine": 316, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/py-iotcore--CdkIotThingStack.template.json": { - "filePath": "cdk/py-iotcore--CdkIotThingStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 19, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 5, - "informational": 22, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 189, - "startColumn": 5, - "endLine": 189, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" - } - }, - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "IoTCertProviderframeworkonEvent8FF1476F", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 321, - "startColumn": 5, - "endLine": 321, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" - } - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'CdkThing001LambdaRoleD7EE5CD3' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "CertHandler220363A9", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 87, - "startColumn": 4, - "endLine": 87, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 204, - "startColumn": 4, - "endLine": 204, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'IoTCertProviderframeworkonEventServiceRole80DDBEA7' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "IoTCertProviderframeworkonEvent8FF1476F", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 324, - "startColumn": 4, - "endLine": 324, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for 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": "CfnLogGroup", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "category": "Best Practice", - "startLine": 516, - "startColumn": 3, - "endLine": 516, - "endColumn": 15, - "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": "CfnLogGroup", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "category": "Best Practice", - "startLine": 516, - "startColumn": 3, - "endLine": 516, - "endColumn": 15, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ThingName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyCdkThing", - "entityType": "Resource", - "resourceType": "AWS::IoT::Thing" - }, - "propertyPath": "Properties.ThingName", - "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CertHandler220363A9", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 76, - "startColumn": 5, - "endLine": 76, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "IoTCertCustomResource", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::CustomResource" - }, - "propertyPath": "Properties.ServiceToken", - "category": "Best Practice", - "startLine": 338, - "startColumn": 5, - "endLine": 338, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt IoTCertProviderframeworkonEvent8FF1476F.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CfnPolicy", - "entityType": "Resource", - "resourceType": "AWS::IoT::Policy" - }, - "propertyPath": "Properties.PolicyName", - "category": "Best Practice", - "startLine": 407, - "startColumn": 5, - "endLine": 407, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CdkThing001PolicyPrincipalAttachment", - "entityType": "Resource", - "resourceType": "AWS::IoT::PolicyPrincipalAttachment" - }, - "propertyPath": "Properties.PolicyName", - "category": "Best Practice", - "startLine": 416, - "startColumn": 5, - "endLine": 416, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CdkThing001PolicyPrincipalAttachment", - "entityType": "Resource", - "resourceType": "AWS::IoT::PolicyPrincipalAttachment" - }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 417, - "startColumn": 5, - "endLine": 417, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:iot:us-east-1:123456789012:cert/{ref:IoTCertCustomResource})" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CdkThing001ThingPrincipalAttachment", - "entityType": "Resource", - "resourceType": "AWS::IoT::ThingPrincipalAttachment" - }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 447, - "startColumn": 5, - "endLine": 447, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:iot:us-east-1:123456789012:cert/{ref:IoTCertCustomResource})" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ThingName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CdkThing001ThingPrincipalAttachment", - "entityType": "Resource", - "resourceType": "AWS::IoT::ThingPrincipalAttachment" - }, - "propertyPath": "Properties.ThingName", - "category": "Best Practice", - "startLine": 469, - "startColumn": 5, - "endLine": 469, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CfnRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.RoleName", - "category": "Best Practice", - "startLine": 510, - "startColumn": 5, - "endLine": 510, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CfnLogGroup", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "propertyPath": "Properties.LogGroupName", - "category": "Best Practice", - "startLine": 519, - "startColumn": 5, - "endLine": 519, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CdkThing001LambdaRoleD7EE5CD3' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CdkThing001LambdaRoleD7EE5CD3", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 14, - "startColumn": 4, - "endLine": 14, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CertHandler220363A9' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CertHandler220363A9", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 69, - "startColumn": 4, - "endLine": 69, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 126, - "startColumn": 4, - "endLine": 126, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 187, - "startColumn": 4, - "endLine": 187, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'IoTCertProviderframeworkonEventServiceRole80DDBEA7' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "IoTCertProviderframeworkonEventServiceRole80DDBEA7", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 217, - "startColumn": 4, - "endLine": 217, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'IoTCertProviderframeworkonEvent8FF1476F' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "IoTCertProviderframeworkonEvent8FF1476F", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 296, - "startColumn": 4, - "endLine": 296, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CfnPolicy' of type 'AWS::IoT::Policy' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CfnPolicy", - "entityType": "Resource", - "resourceType": "AWS::IoT::Policy" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 353, - "startColumn": 4, - "endLine": 353, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CfnRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CfnRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 477, - "startColumn": 4, - "endLine": 477, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CfnLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CfnLogGroup", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 518, - "startColumn": 4, - "endLine": 518, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CdkIoTCoreRule' of type 'AWS::IoT::TopicRule' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CdkIoTCoreRule", - "entityType": "Resource", - "resourceType": "AWS::IoT::TopicRule" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 528, - "startColumn": 4, - "endLine": 528, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/py-lambda-cron--LambdaCronExample.template.json": { - "filePath": "cdk/py-lambda-cron--LambdaCronExample.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 7, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'SingletonServiceRoleDDD815CD' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Singleton8C7B99F3", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 53, - "startColumn": 4, - "endLine": 53, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 84, - "startColumn": 5, - "endLine": 84, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 85, - "startColumn": 5, - "endLine": 85, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt Singleton8C7B99F3.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 91, - "startColumn": 5, - "endLine": 91, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 92, - "startColumn": 5, - "endLine": 92, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt Rule4C995B7F.Arn" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SingletonServiceRoleDDD815CD' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SingletonServiceRoleDDD815CD", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Singleton8C7B99F3' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Singleton8C7B99F3", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 39, - "startColumn": 4, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Rule4C995B7F' of type 'AWS::Events::Rule' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Rule4C995B7F", - "entityType": "Resource", - "resourceType": "AWS::Events::Rule" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 62, - "startColumn": 4, - "endLine": 62, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/py-lambda-from-container--LambdaContainerFunctionStack.template.json": { - "filePath": "cdk/py-lambda-from-container--LambdaContainerFunctionStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 4, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'lambdaContainerFunctionServiceRole5E36DB3C' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "lambdaContainerFunction5815FD88", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 63, - "startColumn": 4, - "endLine": 63, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "lambdaContainerFunction5815FD88", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 51, - "startColumn": 5, - "endLine": 51, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PackageType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "lambdaContainerFunction5815FD88", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.PackageType", - "category": "Best Practice", - "startLine": 53, - "startColumn": 5, - "endLine": 53, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'lambdaContainerFunctionServiceRole5E36DB3C' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "lambdaContainerFunctionServiceRole5E36DB3C", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'lambdaContainerFunction5815FD88' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "lambdaContainerFunction5815FD88", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 39, - "startColumn": 4, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/py-lambda-layer--LambdaLayerExample.template.json": { - "filePath": "cdk/py-lambda-layer--LambdaLayerExample.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 5, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", - "entity": { - "logicalId": "lambdafunction45C982D3", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 83, - "startColumn": 5, - "endLine": 83, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" - } - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'lambdafunctionServiceRole85538ADB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "lambdafunction45C982D3", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 85, - "startColumn": 4, - "endLine": 85, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CompatibleRuntimes' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "helperlayerC2FA2F58", - "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" - }, - "propertyPath": "Properties.CompatibleRuntimes", - "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Content' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "helperlayerC2FA2F58", - "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" - }, - "propertyPath": "Properties.Content", - "category": "Best Practice", - "startLine": 11, - "startColumn": 5, - "endLine": 11, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "helperlayerC2FA2F58", - "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" - }, - "propertyPath": "Properties.Description", - "category": "Best Practice", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'lambdafunctionServiceRole85538ADB' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "lambdafunctionServiceRole85538ADB", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 30, - "startColumn": 4, - "endLine": 30, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'lambdafunction45C982D3' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "lambdafunction45C982D3", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 64, - "startColumn": 4, - "endLine": 64, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/py-stepfunctions--aws-stepfunctions-integ.template.json": { - "filePath": "cdk/py-stepfunctions--aws-stepfunctions-integ.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 8, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 5, - "informational": 6, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", - "entity": { - "logicalId": "submitLambda3C32AFD4", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 53, - "startColumn": 5, - "endLine": 53, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.9", - "lifecycle": "deprecated" - } - }, - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", - "entity": { - "logicalId": "statusLambdaCF47B86D", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 115, - "startColumn": 5, - "endLine": 115, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.9", - "lifecycle": "deprecated" - } - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'submitLambdaServiceRole576DCA8F' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "submitLambda3C32AFD4", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 55, - "startColumn": 4, - "endLine": 55, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'statusLambdaServiceRoleD1132168' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "statusLambdaCF47B86D", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 117, - "startColumn": 4, - "endLine": 117, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'StateMachineRoleB840431D' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", - "source": "CFN_LINT", - "entity": { - "logicalId": "StateMachine2E01A3A5", - "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 258, - "startColumn": 4, - "endLine": 258, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'submitLambdaServiceRole576DCA8F' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "submitLambdaServiceRole576DCA8F", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'submitLambda3C32AFD4' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "submitLambda3C32AFD4", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 39, - "startColumn": 4, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'statusLambdaServiceRoleD1132168' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "statusLambdaServiceRoleD1132168", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 67, - "startColumn": 4, - "endLine": 67, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'statusLambdaCF47B86D' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "statusLambdaCF47B86D", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 101, - "startColumn": 4, - "endLine": 101, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'StateMachineRoleB840431D' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "StateMachineRoleB840431D", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 129, - "startColumn": 4, - "endLine": 129, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'StateMachine2E01A3A5' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "StateMachine2E01A3A5", - "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 220, - "startColumn": 4, - "endLine": 220, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/py-url-shortener--urlshort-app.template.json": { - "filePath": "cdk/py-url-shortener--urlshort-app.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 20, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 3, - "informational": 39, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E2531", - "severity": "ERROR", - "message": "Runtime 'python3.7' was deprecated on '2023-12-04'. Creation was disabled on '2024-01-09', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", - "entity": { - "logicalId": "UrlShortenerFunctionB5E87AC1", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 141, - "startColumn": 5, - "endLine": 141, - "endColumn": 13, - "ruleDescription": "Check if Lambda Function Runtimes are blocked for create", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.7", - "lifecycle": "create-blocked" - } - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'UrlShortenerFunctionServiceRole2FBF9CDA' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "UrlShortenerFunctionB5E87AC1", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 144, - "startColumn": 4, - "endLine": 144, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'RegionalCertificateArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiDomain85D0CE65", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::DomainName" - }, - "propertyPath": "Properties.RegionalCertificateArn", - "category": "Best Practice", - "startLine": 499, - "startColumn": 5, - "endLine": 499, - "endColumn": 28, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" - }, - { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiDomain85D0CE65", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::DomainName" - }, - "category": "Security", - "startLine": 490, - "startColumn": 3, - "endLine": 490, - "endColumn": 33, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TableCD117FA1", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.KeySchema", - "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiDeployment97FF782966d8a7a27285a49d048d420aab9f3106", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 223, - "startColumn": 5, - "endLine": 223, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiDeploymentStageprod9A3CCA44", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 243, - "startColumn": 5, - "endLine": 243, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiDeploymentStageprod9A3CCA44", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" - }, - "propertyPath": "Properties.StageName", - "category": "Best Practice", - "startLine": 246, - "startColumn": 5, - "endLine": 246, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiproxy991A3B5C", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" - }, - "propertyPath": "Properties.ParentId", - "category": "Best Practice", - "startLine": 258, - "startColumn": 5, - "endLine": 258, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt UrlShortenerApi1FE619BE.RootResourceId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiproxy991A3B5C", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" - }, - "propertyPath": "Properties.PathPart", - "category": "Best Practice", - "startLine": 264, - "startColumn": 5, - "endLine": 264, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiproxy991A3B5C", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 265, - "startColumn": 5, - "endLine": 265, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiproxyANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYproxy8ED41C08", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 276, - "startColumn": 5, - "endLine": 276, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiproxyANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYproxy8ED41C08", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 277, - "startColumn": 5, - "endLine": 277, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt UrlShortenerFunctionB5E87AC1.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiproxyANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYproxy8ED41C08", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 283, - "startColumn": 5, - "endLine": 283, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiproxyANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYproxy8ED41C08", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 284, - "startColumn": 5, - "endLine": 284, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:111111111111:{ref:UrlShortenerApi1FE619BE}/{ref:UrlShortenerApiDeploymentStageprod9A3CCA44}/*/*)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiproxyANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYproxy1B61094D", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 312, - "startColumn": 5, - "endLine": 312, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiproxyANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYproxy1B61094D", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 313, - "startColumn": 5, - "endLine": 313, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt UrlShortenerFunctionB5E87AC1.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiproxyANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYproxy1B61094D", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 319, - "startColumn": 5, - "endLine": 319, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiproxyANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYproxy1B61094D", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 320, - "startColumn": 5, - "endLine": 320, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:111111111111:{ref:UrlShortenerApi1FE619BE}/test-invoke-stage/*/*)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiproxyANY05B511A9", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.HttpMethod", - "category": "Best Practice", - "startLine": 345, - "startColumn": 5, - "endLine": 345, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiproxyANY05B511A9", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.ResourceId", - "category": "Best Practice", - "startLine": 369, - "startColumn": 5, - "endLine": 369, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UrlShortenerApiproxy991A3B5C'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiproxyANY05B511A9", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 372, - "startColumn": 5, - "endLine": 372, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYB5D53F00", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 383, - "startColumn": 5, - "endLine": 383, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYB5D53F00", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 384, - "startColumn": 5, - "endLine": 384, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt UrlShortenerFunctionB5E87AC1.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYB5D53F00", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 390, - "startColumn": 5, - "endLine": 390, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYB5D53F00", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 391, - "startColumn": 5, - "endLine": 391, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:111111111111:{ref:UrlShortenerApi1FE619BE}/{ref:UrlShortenerApiDeploymentStageprod9A3CCA44}/*/)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYD47A7EFF", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 419, - "startColumn": 5, - "endLine": 419, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYD47A7EFF", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 420, - "startColumn": 5, - "endLine": 420, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt UrlShortenerFunctionB5E87AC1.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYD47A7EFF", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 426, - "startColumn": 5, - "endLine": 426, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYD47A7EFF", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 427, - "startColumn": 5, - "endLine": 427, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:111111111111:{ref:UrlShortenerApi1FE619BE}/test-invoke-stage/*/)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiANY5994BD69", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.HttpMethod", - "category": "Best Practice", - "startLine": 452, - "startColumn": 5, - "endLine": 452, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiANY5994BD69", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.ResourceId", - "category": "Best Practice", - "startLine": 476, - "startColumn": 5, - "endLine": 476, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt UrlShortenerApi1FE619BE.RootResourceId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiANY5994BD69", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 482, - "startColumn": 5, - "endLine": 482, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DomainName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiDomain85D0CE65", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::DomainName" - }, - "propertyPath": "Properties.DomainName", - "category": "Best Practice", - "startLine": 493, - "startColumn": 5, - "endLine": 493, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DomainName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiDomainMapurlshortappUrlShortenerApiB1BAB0CD7C6BCC1C", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::BasePathMapping" - }, - "propertyPath": "Properties.DomainName", - "category": "Best Practice", - "startLine": 508, - "startColumn": 5, - "endLine": 508, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UrlShortenerApiDomain85D0CE65'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerDomain9F16453F", - "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" - }, - "propertyPath": "Properties.HostedZoneId", - "category": "Best Practice", - "startLine": 539, - "startColumn": 5, - "endLine": 539, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TableCD117FA1' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TableCD117FA1", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'UrlShortenerFunctionServiceRole2FBF9CDA' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerFunctionServiceRole2FBF9CDA", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 31, - "startColumn": 4, - "endLine": 31, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'UrlShortenerFunctionB5E87AC1' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerFunctionB5E87AC1", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 122, - "startColumn": 4, - "endLine": 122, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'UrlShortenerApi1FE619BE' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApi1FE619BE", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 157, - "startColumn": 4, - "endLine": 157, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'UrlShortenerApiCloudWatchRole28577D98' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiCloudWatchRole28577D98", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 166, - "startColumn": 4, - "endLine": 166, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'UrlShortenerApiDeploymentStageprod9A3CCA44' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiDeploymentStageprod9A3CCA44", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 239, - "startColumn": 4, - "endLine": 239, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'UrlShortenerApiDomain85D0CE65' of type 'AWS::ApiGateway::DomainName' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "UrlShortenerApiDomain85D0CE65", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::DomainName" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 492, - "startColumn": 4, - "endLine": 492, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] } } diff --git a/src/resources/expected/validation_reports5.json b/src/resources/expected/validation_reports5.json index 2c1c14d6..13049617 100644 --- a/src/resources/expected/validation_reports5.json +++ b/src/resources/expected/validation_reports5.json @@ -1,14 +1,14 @@ { - "cdk/py-url-shortener--urlshort-load-test.template.json": { - "filePath": "cdk/py-url-shortener--urlshort-load-test.template.json", + "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStackEcrStack6B6F0F99.nested.template.json": { + "filePath": "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStackEcrStack6B6F0F99.nested.template.json", "status": "OK", "metadata": { "resourcesScanned": 8, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 18, + "warnings": 1, + "informational": 6, "debug": 0 }, "suppressed": 0, @@ -16,23 +16,43 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiBServiceRole8C8B0491' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiB28EAD8E4", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 163, + "startColumn": 4, + "endLine": 163, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'RepositoryName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "generatorPingTask1D3C2E79", + "logicalId": "FrontendRepository7D714FA2", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::ECR::Repository" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.RepositoryName", "category": "Best Practice", - "startLine": 32, + "startLine": 6, "startColumn": 5, - "endLine": 32, - "endColumn": 26, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 6, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ecr.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -42,20 +62,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'RepositoryName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "generatorPingTask1D3C2E79", + "logicalId": "BackendDataRepositoryD361813E", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::ECR::Repository" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.RepositoryName", "category": "Best Practice", - "startLine": 47, + "startLine": 17, "startColumn": 5, - "endLine": 47, - "endColumn": 9, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 17, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ecr.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -63,115 +83,120 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'FrontendRepository7D714FA2' of type 'AWS::ECR::Repository' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "generatorPingTask1D3C2E79", + "logicalId": "FrontendRepository7D714FA2", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::ECR::Repository" }, - "propertyPath": "Properties.ExecutionRoleArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 48, - "startColumn": 5, - "endLine": 48, - "endColumn": 22, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt generatorPingTaskExecutionRoleA7BE7F8B.Arn" - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Resource 'BackendDataRepositoryD361813E' of type 'AWS::ECR::Repository' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "generatorPingTask1D3C2E79", + "logicalId": "BackendDataRepositoryD361813E", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::ECR::Repository" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 54, - "startColumn": 5, - "endLine": 54, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 16, + "startColumn": 4, + "endLine": 16, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Resource 'CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiBServiceRole8C8B0491' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "generatorPingTask1D3C2E79", + "logicalId": "CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiBServiceRole8C8B0491", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 55, - "startColumn": 5, - "endLine": 55, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 70, + "startColumn": 4, + "endLine": 70, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Resource 'CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiB28EAD8E4' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "generatorPingTask1D3C2E79", + "logicalId": "CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiB28EAD8E4", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 56, - "startColumn": 5, - "endLine": 56, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 144, + "startColumn": 4, + "endLine": 144, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStackEcsStack19C526D0.nested.template.json": { + "filePath": "cdk/py-ecs-serviceconnect--CdkExamplesServiceConnectStackEcsStack19C526D0.nested.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 20, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 61, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "generatorPingTask1D3C2E79", + "logicalId": "ECSCluster7D463CD4", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::ECS::Cluster" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.ClusterName", "category": "Best Practice", - "startLine": 57, + "startLine": 6, "startColumn": 5, - "endLine": 57, - "endColumn": 29, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 6, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -181,70 +206,70 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "generatorPingTask1D3C2E79", + "logicalId": "ECSClusterDefaultServiceDiscoveryNamespace5AC2D2BE", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::ServiceDiscovery::PrivateDnsNamespace" }, - "propertyPath": "Properties.TaskRoleArn", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 60, + "startLine": 29, "startColumn": 5, - "endLine": 60, - "endColumn": 17, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 29, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt generatorPingTaskTaskRoleA4886BE8.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", + "message": "Property 'Vpc' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "generatorserviceServiceA6AC5079", + "logicalId": "ECSClusterDefaultServiceDiscoveryNamespace5AC2D2BE", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::ServiceDiscovery::PrivateDnsNamespace" }, - "propertyPath": "Properties.Cluster", + "propertyPath": "Properties.Vpc", "category": "Best Practice", - "startLine": 138, + "startLine": 30, "startColumn": 5, - "endLine": 138, - "endColumn": 13, + "endLine": 30, + "endColumn": 9, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'generatorcluster9804CB70'" + "resolutionSource": "parameter 'referencetoCdkExamplesServiceConnectStackServiceConnectVPCE46B65DFRef' (type String)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "generatorserviceServiceA6AC5079", + "logicalId": "ECSServiceLogGroupD961AA4E", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.LaunchType", + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 152, + "startLine": 41, "startColumn": 5, - "endLine": 152, - "endColumn": 16, + "endLine": 41, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:{ref:ECSCluster7D463CD4}-service)" } }, { @@ -253,15 +278,15 @@ "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "generatorserviceSecurityGroup3D8BECF8", + "logicalId": "ECSSecurityGroupA14DBE7D", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 185, + "startLine": 219, "startColumn": 5, - "endLine": 185, + "endLine": 219, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -275,241 +300,250 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "generatorserviceSecurityGroup3D8BECF8", + "logicalId": "ECSSecurityGroupA14DBE7D", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 193, + "startLine": 238, "startColumn": 5, - "endLine": 193, + "endLine": 238, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter 'referencetoCdkExamplesServiceConnectStackServiceConnectVPCE46B65DFRef' (type String)" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'generatorcluster9804CB70' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "generatorcluster9804CB70", + "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 28, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 250, + "startColumn": 5, + "endLine": 250, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'generatorPingTaskTaskRoleA4886BE8' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "generatorPingTaskTaskRoleA4886BE8", + "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 11, - "startColumn": 4, - "endLine": 11, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 251, + "startColumn": 5, + "endLine": 251, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt ECSSecurityGroupA14DBE7D.GroupId" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'generatorPingTask1D3C2E79' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "generatorPingTask1D3C2E79", + "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 31, - "startColumn": 4, - "endLine": 31, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 257, + "startColumn": 5, + "endLine": 257, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'generatorPingTaskExecutionRoleA7BE7F8B' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "generatorPingTaskExecutionRoleA7BE7F8B", + "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SourceSecurityGroupId", "category": "Best Practice", - "startLine": 73, - "startColumn": 4, - "endLine": 73, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 258, + "startColumn": 5, + "endLine": 258, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt PublicLBSG963B1ACE.GroupId" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'generatorserviceServiceA6AC5079' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "generatorserviceServiceA6AC5079", + "logicalId": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 137, - "startColumn": 4, - "endLine": 137, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 264, + "startColumn": 5, + "endLine": 264, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'generatorserviceSecurityGroup3D8BECF8' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "generatorserviceSecurityGroup3D8BECF8", + "logicalId": "FrontendTaskDefinition6CBC2B00", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 184, - "startColumn": 4, - "endLine": 184, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/r53-resolver--R53ResolverStack.template.json": { - "filePath": "cdk/r53-resolver--R53ResolverStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 18, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 33, - "debug": 0 + "startLine": 273, + "startColumn": 5, + "endLine": 273, + "endColumn": 26, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W3005", - "severity": "WARN", - "message": "'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", + "logicalId": "FrontendTaskDefinition6CBC2B00", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 271, - "startColumn": 4, - "endLine": 271, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 302, + "startColumn": 5, + "endLine": 302, + "endColumn": 9, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPC9B993306", + "logicalId": "FrontendTaskDefinition6CBC2B00", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.ExecutionRoleArn", "category": "Best Practice", - "startLine": 6, + "startLine": 303, "startColumn": 5, - "endLine": 6, - "endColumn": 15, + "endLine": 303, + "endColumn": 22, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt ECSTaskIamRole84EB0A02.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPC9B993306", + "logicalId": "FrontendTaskDefinition6CBC2B00", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 9, + "startLine": 309, "startColumn": 5, - "endLine": 9, - "endColumn": 21, + "endLine": 309, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet1Subnet5DBB6B2C", + "logicalId": "FrontendTaskDefinition6CBC2B00", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 24, + "startLine": 310, "startColumn": 5, - "endLine": 24, - "endColumn": 22, + "endLine": 310, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -519,19 +553,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet1Subnet5DBB6B2C", + "logicalId": "FrontendTaskDefinition6CBC2B00", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 32, + "startLine": 311, "startColumn": 5, - "endLine": 32, - "endColumn": 15, + "endLine": 311, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -541,142 +576,137 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet1Subnet5DBB6B2C", + "logicalId": "FrontendTaskDefinition6CBC2B00", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 48, + "startLine": 312, "startColumn": 5, - "endLine": 48, - "endColumn": 11, + "endLine": 312, + "endColumn": 29, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet1RouteTable6E169019", + "logicalId": "FrontendTaskDefinition6CBC2B00", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 65, + "startLine": 315, "startColumn": 5, - "endLine": 65, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 315, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" + "resolutionSource": "GetAtt TaskexecutionRole978012CD.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet1RouteTableAssociation41B46D9B", + "logicalId": "BackendTaskDefinitionEC224DE6", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 76, + "startLine": 337, "startColumn": 5, - "endLine": 76, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 337, + "endColumn": 26, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPCPrivateSubnet1RouteTable6E169019'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet1RouteTableAssociation41B46D9B", + "logicalId": "BackendTaskDefinitionEC224DE6", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 79, + "startLine": 366, "startColumn": 5, - "endLine": 79, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 366, + "endColumn": 9, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPCPrivateSubnet1Subnet5DBB6B2C'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet2Subnet495784E7", + "logicalId": "BackendTaskDefinitionEC224DE6", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.ExecutionRoleArn", "category": "Best Practice", - "startLine": 90, + "startLine": 367, "startColumn": 5, - "endLine": 90, + "endLine": 367, "endColumn": 22, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt ECSTaskIamRole84EB0A02.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet2Subnet495784E7", + "logicalId": "BackendTaskDefinitionEC224DE6", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 98, + "startLine": 373, "startColumn": 5, - "endLine": 98, - "endColumn": 15, + "endLine": 373, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -686,166 +716,157 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet2Subnet495784E7", + "logicalId": "BackendTaskDefinitionEC224DE6", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 114, + "startLine": 374, "startColumn": 5, - "endLine": 114, - "endColumn": 11, + "endLine": 374, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet2RouteTable0899A697", + "logicalId": "BackendTaskDefinitionEC224DE6", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 131, + "startLine": 375, "startColumn": 5, - "endLine": 131, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 375, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet2RouteTableAssociation53E27A3B", + "logicalId": "BackendTaskDefinitionEC224DE6", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 142, + "startLine": 376, "startColumn": 5, - "endLine": 142, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 376, + "endColumn": 29, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPCPrivateSubnet2RouteTable0899A697'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R53ResolverTestVPCPrivateSubnet2RouteTableAssociation53E27A3B", + "logicalId": "BackendTaskDefinitionEC224DE6", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 145, + "startLine": 379, "startColumn": 5, - "endLine": 145, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 379, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPCPrivateSubnet2Subnet495784E7'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt TaskexecutionRole978012CD.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FirewallRuleGroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BlockListRuleGroupDirectBlockListRuleGroupAssociation40E90DB0", + "logicalId": "FrontendServiceBC94BA93", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.FirewallRuleGroupId", + "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 316, + "startLine": 401, "startColumn": 5, - "endLine": 316, - "endColumn": 25, + "endLine": 401, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt BlockListRuleGroup55F6B55D.Id" + "resolutionSource": "Ref to 'ECSCluster7D463CD4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BlockListRuleGroupDirectBlockListRuleGroupAssociation40E90DB0", + "logicalId": "FrontendServiceBC94BA93", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 323, + "startLine": 411, "startColumn": 5, - "endLine": 323, - "endColumn": 11, + "endLine": 411, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'ServiceName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgoutboundendpointEC0509A3", + "logicalId": "FrontendServiceBC94BA93", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.ServiceName", "category": "Best Practice", - "startLine": 334, + "startLine": 456, "startColumn": 5, - "endLine": 334, - "endColumn": 22, + "endLine": 456, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -855,66 +876,64 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sgoutboundendpointEC0509A3", + "logicalId": "BackendService7A4224EE", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 396, + "startLine": 473, "startColumn": 5, - "endLine": 396, - "endColumn": 11, + "endLine": 473, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" + "resolutionSource": "Ref to 'ECSCluster7D463CD4'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Direction' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OutboundEndpoint", + "logicalId": "BackendService7A4224EE", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverEndpoint" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.Direction", + "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 407, + "startLine": 482, "startColumn": 5, - "endLine": 407, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53resolver", + "endLine": 482, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SecurityGroupIds' is create-only; updating it will cause resource replacement", + "message": "Property 'ServiceName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "OutboundEndpoint", + "logicalId": "BackendService7A4224EE", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverEndpoint" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.SecurityGroupIds", + "propertyPath": "Properties.ServiceName", "category": "Best Practice", - "startLine": 420, + "startLine": 518, "startColumn": 5, - "endLine": 420, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53resolver", + "endLine": 518, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -927,15 +946,15 @@ "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sginboundendpoint32081788", + "logicalId": "PublicLBSG963B1ACE", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 436, + "startLine": 533, "startColumn": 5, - "endLine": 436, + "endLine": 533, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -949,40 +968,39 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "sginboundendpoint32081788", + "logicalId": "PublicLBSG963B1ACE", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 460, + "startLine": 550, "startColumn": 5, - "endLine": 460, + "endLine": 550, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" + "resolutionSource": "parameter 'referencetoCdkExamplesServiceConnectStackServiceConnectVPCE46B65DFRef' (type String)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Direction' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "InboundEndpoint", + "logicalId": "TargetGroup3D7CD9B8", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverEndpoint" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Direction", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 471, + "startLine": 566, "startColumn": 5, - "endLine": 471, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53resolver", + "endLine": 566, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -992,20 +1010,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SecurityGroupIds' is create-only; updating it will cause resource replacement", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "InboundEndpoint", + "logicalId": "TargetGroup3D7CD9B8", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverEndpoint" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.SecurityGroupIds", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 484, + "startLine": 567, "startColumn": 5, - "endLine": 484, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53resolver", + "endLine": 567, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -1013,61 +1030,182 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0", + "logicalId": "TargetGroup3D7CD9B8", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 180, - "startColumn": 4, - "endLine": 180, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "startLine": 568, + "startColumn": 5, + "endLine": 568, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'TargetType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", + "logicalId": "TargetGroup3D7CD9B8", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.TargetType", "category": "Best Practice", - "startLine": 252, - "startColumn": 4, - "endLine": 252, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 579, + "startColumn": 5, + "endLine": 579, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "TargetGroup3D7CD9B8", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 581, + "startColumn": 5, + "endLine": 581, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'referencetoCdkExamplesServiceConnectStackServiceConnectVPCE46B65DFRef' (type String)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FrontendLB2FA80AC2", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + }, + "propertyPath": "Properties.Scheme", + "category": "Best Practice", + "startLine": 602, + "startColumn": 5, + "endLine": 602, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FrontendLB2FA80AC2", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + }, + "propertyPath": "Properties.Type", + "category": "Best Practice", + "startLine": 619, + "startColumn": 5, + "endLine": 619, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FrontendLBListener230479D8", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + }, + "propertyPath": "Properties.LoadBalancerArn", + "category": "Best Practice", + "startLine": 636, + "startColumn": 5, + "endLine": 636, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'FrontendLB2FA80AC2'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ListenerArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ListenerRule73F9AC5E", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::ListenerRule" + }, + "propertyPath": "Properties.ListenerArn", + "category": "Best Practice", + "startLine": 667, + "startColumn": 5, + "endLine": 667, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'FrontendLBListener230479D8'" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BlockListC03D0423' of type 'AWS::Route53Resolver::FirewallDomainList' supports Tags but none are configured", + "message": "Resource 'ECSCluster7D463CD4' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BlockListC03D0423", + "logicalId": "ECSCluster7D463CD4", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallDomainList" + "resourceType": "AWS::ECS::Cluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 282, + "startLine": 5, "startColumn": 4, - "endLine": 282, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -1075,19 +1213,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BlockListRuleGroup55F6B55D' of type 'AWS::Route53Resolver::FirewallRuleGroup' supports Tags but none are configured", + "message": "Resource 'ECSClusterDefaultServiceDiscoveryNamespace5AC2D2BE' of type 'AWS::ServiceDiscovery::PrivateDnsNamespace' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BlockListRuleGroup55F6B55D", + "logicalId": "ECSClusterDefaultServiceDiscoveryNamespace5AC2D2BE", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallRuleGroup" + "resourceType": "AWS::ServiceDiscovery::PrivateDnsNamespace" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 294, + "startLine": 28, "startColumn": 4, - "endLine": 294, + "endLine": 28, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -1095,19 +1233,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BlockListRuleGroupDirectBlockListRuleGroupAssociation40E90DB0' of type 'AWS::Route53Resolver::FirewallRuleGroupAssociation' supports Tags but none are configured", + "message": "Resource 'ECSServiceLogGroupD961AA4E' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BlockListRuleGroupDirectBlockListRuleGroupAssociation40E90DB0", + "logicalId": "ECSServiceLogGroupD961AA4E", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" + "resourceType": "AWS::Logs::LogGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 315, + "startLine": 40, "startColumn": 4, - "endLine": 315, + "endLine": 40, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -1115,19 +1253,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sgoutboundendpointEC0509A3' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'ECSTaskIamRole84EB0A02' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sgoutboundendpointEC0509A3", + "logicalId": "ECSTaskIamRole84EB0A02", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 333, + "startLine": 62, "startColumn": 4, - "endLine": 333, + "endLine": 62, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -1135,19 +1273,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'OutboundEndpoint' of type 'AWS::Route53Resolver::ResolverEndpoint' supports Tags but none are configured", + "message": "Resource 'TaskexecutionRole978012CD' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "OutboundEndpoint", + "logicalId": "TaskexecutionRole978012CD", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverEndpoint" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 406, + "startLine": 172, "startColumn": 4, - "endLine": 406, + "endLine": 172, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -1155,19 +1293,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'sginboundendpoint32081788' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'ECSSecurityGroupA14DBE7D' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "sginboundendpoint32081788", + "logicalId": "ECSSecurityGroupA14DBE7D", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 435, + "startLine": 218, "startColumn": 4, - "endLine": 435, + "endLine": 218, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -1175,295 +1313,99 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'InboundEndpoint' of type 'AWS::Route53Resolver::ResolverEndpoint' supports Tags but none are configured", + "message": "Resource 'FrontendTaskDefinition6CBC2B00' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "InboundEndpoint", + "logicalId": "FrontendTaskDefinition6CBC2B00", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverEndpoint" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 470, + "startLine": 272, "startColumn": 4, - "endLine": 470, + "endLine": 272, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "cdk/rekognition-lambda-s3-trigger--RekognitionLambdaS3TriggerStack.template.json": { - "filePath": "cdk/rekognition-lambda-s3-trigger--RekognitionLambdaS3TriggerStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 15, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 4, - "informational": 14, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FrontendTaskDefinitionFrontendContainerLogGroup994ED50C' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "RekFunction9837D13D", + "logicalId": "FrontendTaskDefinitionFrontendContainerLogGroup994ED50C", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 310, - "startColumn": 5, - "endLine": 310, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs20.x", - "lifecycle": "deprecated" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 326, + "startColumn": 3, + "endLine": 326, + "endColumn": 59, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'RekFunctionServiceRole3947AEF4' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BackendTaskDefinitionEC224DE6' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "RekFunction9837D13D", + "logicalId": "BackendTaskDefinitionEC224DE6", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 312, + "startLine": 336, "startColumn": 4, - "endLine": 312, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 336, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BackendTaskDefinitionBackendContainerLogGroup5E30F6E8' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", + "logicalId": "BackendTaskDefinitionBackendContainerLogGroup5E30F6E8", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 428, - "startColumn": 4, - "endLine": 428, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 516, - "startColumn": 4, - "endLine": 516, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 103, - "startColumn": 5, - "endLine": 103, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 104, - "startColumn": 5, - "endLine": 104, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt RekFunction9837D13D.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 110, - "startColumn": 5, - "endLine": 110, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceAccount' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceAccount", - "category": "Best Practice", - "startLine": 111, - "startColumn": 5, - "endLine": 111, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.SourceArn", - "category": "Best Practice", - "startLine": 114, - "startColumn": 5, - "endLine": 114, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt Bucket83908E77.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Classifications0C921F6C", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.KeySchema", - "category": "Best Practice", - "startLine": 134, - "startColumn": 5, - "endLine": 134, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Bucket83908E77' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket83908E77", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Logs::LogGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 3, + "startLine": 390, "startColumn": 3, - "endLine": 3, - "endColumn": 18, + "endLine": 390, + "endColumn": 57, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Classifications0C921F6C' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'FrontendServiceBC94BA93' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Classifications0C921F6C", + "logicalId": "FrontendServiceBC94BA93", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 127, + "startLine": 400, "startColumn": 4, - "endLine": 127, + "endLine": 400, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -1471,19 +1413,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'RekFunctionServiceRole3947AEF4' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'BackendService7A4224EE' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RekFunctionServiceRole3947AEF4", + "logicalId": "BackendService7A4224EE", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 153, + "startLine": 472, "startColumn": 4, - "endLine": 153, + "endLine": 472, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -1491,19 +1433,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'RekFunction9837D13D' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'PublicLBSG963B1ACE' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RekFunction9837D13D", + "logicalId": "PublicLBSG963B1ACE", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 286, + "startLine": 532, "startColumn": 4, - "endLine": 286, + "endLine": 532, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -1511,19 +1453,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'TargetGroup3D7CD9B8' of type 'AWS::ElasticLoadBalancingV2::TargetGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC", + "logicalId": "TargetGroup3D7CD9B8", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 350, + "startLine": 560, "startColumn": 4, - "endLine": 350, + "endLine": 560, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -1531,19 +1473,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'FrontendLB2FA80AC2' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", + "logicalId": "FrontendLB2FA80AC2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 413, + "startLine": 591, "startColumn": 4, - "endLine": 413, + "endLine": 591, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -1551,19 +1493,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'FrontendLBListener230479D8' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + "logicalId": "FrontendLBListener230479D8", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 438, + "startLine": 627, "startColumn": 4, - "endLine": 438, + "endLine": 627, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -1571,35 +1513,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'ListenerRule73F9AC5E' of type 'AWS::ElasticLoadBalancingV2::ListenerRule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "logicalId": "ListenerRule73F9AC5E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::ListenerRule" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 499, + "startLine": 648, "startColumn": 4, - "endLine": 499, + "endLine": 648, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/resource-overrides--resource-overrides.template.json": { - "filePath": "cdk/resource-overrides--resource-overrides.template.json", + "cdk/py-emr--emr-cluster.template.json": { + "filePath": "cdk/py-emr--emr-cluster.template.json", "status": "OK", "metadata": { - "resourcesScanned": 21, + "resourcesScanned": 16, "counts": { - "fatal": 2, - "errors": 2, - "warnings": 4, - "informational": 31, + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 33, "debug": 0 }, "suppressed": 0, @@ -1608,206 +1550,56 @@ }, "diagnostics": [ { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('Foo' was unexpected)", - "source": "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": "ASGLaunchConfigC00AF12B", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EMR::Cluster" }, - "propertyPath": "Properties.Foo", - "category": "Schema", - "startLine": 418, - "startColumn": 5, - "endLine": 418, - "endColumn": 9, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Additional properties are not allowed", - "phase": "SCHEMA", - "context": { - "property": "Foo", - "extra": { - "allowed_properties": [ - "AssociatePublicIpAddress", - "BlockDeviceMappings", - "ClassicLinkVPCId", - "ClassicLinkVPCSecurityGroups", - "EbsOptimized", - "IamInstanceProfile", - "ImageId", - "InstanceId", - "InstanceMonitoring", - "InstanceType", - "KernelId", - "KeyName", - "LaunchConfigurationName", - "MetadataOptions", - "PlacementTenancy", - "RamDiskId", - "SecurityGroups", - "SpotPrice", - "UserData" - ] - } - } - }, - { - "ruleId": "F3006", - "severity": "FATAL", - "message": "Unknown resource type 'AWS::S3::Bucketeer'", - "source": "SCHEMA", - "entity": { - "logicalId": "MyBucketF68F3FF0", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucketeer" - }, - "category": "Schema", - "startLine": 11, - "startColumn": 3, - "endLine": 11, - "endColumn": 20, - "ruleDescription": "AWS resource type must be recognized and available in the configured region", - "phase": "SCHEMA", - "context": { - "extra": { - "resource_type": "AWS::S3::Bucketeer" - } - } - }, - { - "ruleId": "E3001", - "severity": "ERROR", - "message": "Resource 'MyBucketF68F3FF0' has invalid property 'Transform'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyBucketF68F3FF0", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucketeer" - }, - "category": "Resource", - "startLine": 78, - "startColumn": 4, - "endLine": 78, - "endColumn": 14, - "ruleDescription": "Basic CloudFormation Resource Check", - "phase": "PARSE" - }, - { - "ruleId": "E3016", - "severity": "ERROR", - "message": "UpdatePolicy is not supported on resource type 'AWS::S3::Bucketeer'", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyBucketF68F3FF0", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucketeer" - }, - "propertyPath": "UpdatePolicy", - "suggestedFix": "Remove UpdatePolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::ElastiCache::ReplicationGroup, AWS::Elasticsearch::Domain, AWS::Lambda::Alias, AWS::OpenSearchService::Domain", - "category": "Resource", - "startLine": 71, - "startColumn": 4, - "endLine": 71, - "endColumn": 17, - "ruleDescription": "Check UpdatePolicy values for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'Other34654A52' dependency already enforced by a 'GetAtt' at 'Properties.AnalyticsConfigurations.0.StorageClassAnalysis.DataExport.Destination.BucketArn'", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyBucketF68F3FF0", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucketeer" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 68, - "startColumn": 4, - "endLine": 68, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'Other34654A52' dependency already enforced by a 'GetAtt' at 'Properties.Token'", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyBucketF68F3FF0", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucketeer" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 68, - "startColumn": 4, - "endLine": 68, + "startLine": 314, + "startColumn": 3, + "endLine": 314, "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'Other34654A52' dependency already enforced by a 'Ref' at 'Properties.LoggingConfiguration.DestinationBucketName'", + "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": "MyBucketF68F3FF0", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::S3::Bucketeer" + "resourceType": "AWS::EMR::Cluster" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 68, - "startColumn": 4, - "endLine": 68, + "startLine": 314, + "startColumn": 3, + "endLine": 314, "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, - { - "ruleId": "W3697", - "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", - "source": "CFN_LINT", - "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "category": "Deprecation", - "startLine": 397, - "startColumn": 3, - "endLine": 397, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" - }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCB9E5F0B4", + "logicalId": "vpcA2121C38", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 83, + "startLine": 6, "startColumn": 5, - "endLine": 83, + "endLine": 6, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -1821,15 +1613,15 @@ "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCB9E5F0B4", + "logicalId": "vpcA2121C38", "entityType": "Resource", "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 86, + "startLine": 9, "startColumn": 5, - "endLine": 86, + "endLine": 9, "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -1843,15 +1635,15 @@ "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1SubnetB4246D30", + "logicalId": "vpcpublicSubnet1SubnetA635257E", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 101, + "startLine": 24, "startColumn": 5, - "endLine": 101, + "endLine": 24, "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -1865,15 +1657,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1SubnetB4246D30", + "logicalId": "vpcpublicSubnet1SubnetA635257E", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 109, + "startLine": 32, "startColumn": 5, - "endLine": 109, + "endLine": 32, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -1887,21 +1679,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1SubnetB4246D30", + "logicalId": "vpcpublicSubnet1SubnetA635257E", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 125, + "startLine": 48, "startColumn": 5, - "endLine": 125, + "endLine": 48, "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'vpcA2121C38'" } }, { @@ -1910,22 +1702,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1RouteTableFEE4B781", + "logicalId": "vpcpublicSubnet1RouteTableA38152FE", "entityType": "Resource", "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 142, + "startLine": 65, "startColumn": 5, - "endLine": 142, + "endLine": 65, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'vpcA2121C38'" } }, { @@ -1934,22 +1726,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", + "logicalId": "vpcpublicSubnet1RouteTableAssociationB46101B8", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 153, + "startLine": 76, "startColumn": 5, - "endLine": 153, + "endLine": 76, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'", + "resolutionSource": "Ref to 'vpcpublicSubnet1RouteTableA38152FE'", "extra": { "replacement_strategy": "delete_then_create" } @@ -1961,22 +1753,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", + "logicalId": "vpcpublicSubnet1RouteTableAssociationB46101B8", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 156, + "startLine": 79, "startColumn": 5, - "endLine": 156, + "endLine": 79, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'", + "resolutionSource": "Ref to 'vpcpublicSubnet1SubnetA635257E'", "extra": { "replacement_strategy": "delete_then_create" } @@ -1988,15 +1780,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", + "logicalId": "vpcpublicSubnet1DefaultRouteF0973989", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 167, + "startLine": 90, "startColumn": 5, - "endLine": 167, + "endLine": 90, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -2011,159 +1803,113 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", + "logicalId": "vpcpublicSubnet1DefaultRouteF0973989", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 171, + "startLine": 94, "startColumn": 5, - "endLine": 171, + "endLine": 94, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'" + "resolutionSource": "Ref to 'vpcpublicSubnet1RouteTableA38152FE'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1NATGatewayE0556630", + "logicalId": "vpcpublicSubnet2Subnet027D165B", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 200, + "startLine": 108, "startColumn": 5, - "endLine": 200, - "endColumn": 18, + "endLine": 108, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt VPCPublicSubnet1EIP6AD938E8.AllocationId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPublicSubnet1NATGatewayE0556630", + "logicalId": "vpcpublicSubnet2Subnet027D165B", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 206, + "startLine": 116, "startColumn": 5, - "endLine": 206, - "endColumn": 14, + "endLine": 116, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", + "logicalId": "vpcpublicSubnet2Subnet027D165B", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 227, + "startLine": 132, "startColumn": 5, - "endLine": 227, - "endColumn": 22, + "endLine": 132, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'vpcA2121C38'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", + "logicalId": "vpcpublicSubnet2RouteTableA6135437", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 235, - "startColumn": 5, - "endLine": 235, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 251, - "startColumn": 5, - "endLine": 251, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VPCPrivateSubnet1RouteTableBE8A6027", - "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::EC2::RouteTable" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 268, + "startLine": 149, "startColumn": 5, - "endLine": 268, + "endLine": 149, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "resolutionSource": "Ref to 'vpcA2121C38'" } }, { @@ -2172,22 +1918,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1RouteTableAssociation347902D1", + "logicalId": "vpcpublicSubnet2RouteTableAssociation73F6478A", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 279, + "startLine": 160, "startColumn": 5, - "endLine": 279, + "endLine": 160, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet1RouteTableBE8A6027'", + "resolutionSource": "Ref to 'vpcpublicSubnet2RouteTableA6135437'", "extra": { "replacement_strategy": "delete_then_create" } @@ -2199,22 +1945,22 @@ "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1RouteTableAssociation347902D1", + "logicalId": "vpcpublicSubnet2RouteTableAssociation73F6478A", "entityType": "Resource", "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 282, + "startLine": 163, "startColumn": 5, - "endLine": 282, + "endLine": 163, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet1Subnet8BCA10E0'", + "resolutionSource": "Ref to 'vpcpublicSubnet2Subnet027D165B'", "extra": { "replacement_strategy": "delete_then_create" } @@ -2226,15 +1972,15 @@ "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1DefaultRouteAE1D6490", + "logicalId": "vpcpublicSubnet2DefaultRoute13685A07", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 293, + "startLine": 174, "startColumn": 5, - "endLine": 293, + "endLine": 174, "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -2249,22 +1995,22 @@ "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCPrivateSubnet1DefaultRouteAE1D6490", + "logicalId": "vpcpublicSubnet2DefaultRoute13685A07", "entityType": "Resource", "resourceType": "AWS::EC2::Route" }, "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 297, + "startLine": 178, "startColumn": 5, - "endLine": 297, + "endLine": 178, "endColumn": 18, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCPrivateSubnet1RouteTableBE8A6027'" + "resolutionSource": "Ref to 'vpcpublicSubnet2RouteTableA6135437'" } }, { @@ -2273,22 +2019,22 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPCVPCGW99B986DC", + "logicalId": "vpcVPCGW7984C166", "entityType": "Resource", "resourceType": "AWS::EC2::VPCGatewayAttachment" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 325, + "startLine": 209, "startColumn": 5, - "endLine": 325, + "endLine": 209, "endColumn": 11, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'", + "resolutionSource": "Ref to 'vpcA2121C38'", "extra": { "replacement_strategy": "delete_then_create" } @@ -2297,19 +2043,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceProfileName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroup0525485D", + "logicalId": "emrjobflowprofile", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.InstanceProfileName", "category": "Best Practice", - "startLine": 336, + "startLine": 303, "startColumn": 5, - "endLine": 336, - "endColumn": 22, + "endLine": 303, + "endColumn": 25, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2319,67 +2065,63 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Applications' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGInstanceSecurityGroup0525485D", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EMR::Cluster" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Applications", "category": "Best Practice", - "startLine": 350, + "startLine": 317, "startColumn": 5, - "endLine": 350, - "endColumn": 11, + "endLine": 317, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPCB9E5F0B4'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", + "message": "Property 'Configurations' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EMR::Cluster" }, - "propertyPath": "Properties.IamInstanceProfile", + "propertyPath": "Properties.Configurations", "category": "Best Practice", - "startLine": 400, + "startLine": 322, "startColumn": 5, - "endLine": 400, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 322, + "endColumn": 20, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ASGInstanceProfile0A2834D7'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'JobFlowRole' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EMR::Cluster" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.JobFlowRole", "category": "Best Practice", - "startLine": 403, + "startLine": 365, "startColumn": 5, - "endLine": 403, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 365, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2389,20 +2131,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "message": "Property 'LogUri' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EMR::Cluster" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.LogUri", "category": "Best Practice", - "startLine": 406, + "startLine": 366, "startColumn": 5, - "endLine": 406, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 366, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2412,20 +2153,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EMR::Cluster" }, - "propertyPath": "Properties.SecurityGroups", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 407, + "startLine": 378, "startColumn": 5, - "endLine": 407, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 378, + "endColumn": 10, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2435,20 +2175,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is create-only; updating it will cause resource replacement", + "message": "Property 'ReleaseLabel' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASGLaunchConfigC00AF12B", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EMR::Cluster" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.ReleaseLabel", "category": "Best Practice", - "startLine": 415, + "startLine": 379, "startColumn": 5, - "endLine": 415, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 379, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2458,80 +2197,120 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ServiceRole' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASG46ED3070", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::EMR::Cluster" }, - "propertyPath": "Properties.LaunchConfigurationName", + "propertyPath": "Properties.ServiceRole", "category": "Best Practice", - "startLine": 432, + "startLine": 380, "startColumn": 5, - "endLine": 432, - "endColumn": 29, + "endLine": 380, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'ASGLaunchConfigC00AF12B'" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'emrservicerole3BE5EDAF'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Steps' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ASG46ED3070", + "logicalId": "emrcluster", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::EMR::Cluster" }, - "propertyPath": "Properties.VPCZoneIdentifier", + "propertyPath": "Properties.Steps", "category": "Best Practice", - "startLine": 444, + "startLine": 383, "startColumn": 5, - "endLine": 444, - "endColumn": 23, + "endLine": 383, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Other34654A52' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'emrservicerole3BE5EDAF' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Other34654A52", + "logicalId": "emrservicerole3BE5EDAF", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 17, + "startLine": 219, + "startColumn": 4, + "endLine": 219, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'emrjobflowrole15D4DAE5' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "emrjobflowrole15D4DAE5", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 268, + "startColumn": 4, + "endLine": 268, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'emrcluster' of type 'AWS::EMR::Cluster' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "emrcluster", + "entityType": "Resource", + "resourceType": "AWS::EMR::Cluster" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 316, + "startColumn": 4, + "endLine": 316, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/route53-resolver-dns-firewall--Route53ResolverDnsFirewallStack.template.json": { - "filePath": "cdk/route53-resolver-dns-firewall--Route53ResolverDnsFirewallStack.template.json", + "cdk/py-iotcore--CdkIotThingStack.template.json": { + "filePath": "cdk/py-iotcore--CdkIotThingStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 31, + "resourcesScanned": 19, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 55, + "warnings": 5, + "informational": 22, "debug": 0 }, "suppressed": 0, @@ -2540,211 +2319,230 @@ }, "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "Vpc8378EB38", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 6, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 189, "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 189, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "Vpc8378EB38", + "logicalId": "IoTCertProviderframeworkonEvent8FF1476F", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.InstanceTenancy", - "category": "Best Practice", - "startLine": 9, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 321, "startColumn": 5, - "endLine": 9, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 321, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'CdkThing001LambdaRoleD7EE5CD3' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "CertHandler220363A9", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 24, - "startColumn": 5, - "endLine": 24, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 87, + "startColumn": 4, + "endLine": 87, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "W3005", + "severity": "WARN", + "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 204, + "startColumn": 4, + "endLine": 204, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'IoTCertProviderframeworkonEventServiceRole80DDBEA7' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "IoTCertProviderframeworkonEvent8FF1476F", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 324, + "startColumn": 4, + "endLine": 324, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "CfnLogGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 32, - "startColumn": 5, - "endLine": 32, + "startLine": 516, + "startColumn": 3, + "endLine": 516, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "VpcPublicSubnet1Subnet5C2D37C4", + "logicalId": "CfnLogGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 48, - "startColumn": 5, - "endLine": 48, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } + "startLine": 516, + "startColumn": 3, + "endLine": 516, + "endColumn": 15, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'ThingName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTable6C95E38E", + "logicalId": "MyCdkThing", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::IoT::Thing" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.ThingName", "category": "Best Practice", - "startLine": 65, + "startLine": 6, "startColumn": 5, - "endLine": 65, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 6, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", + "logicalId": "CertHandler220363A9", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", "startLine": 76, "startColumn": 5, "endLine": 76, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", + "logicalId": "IoTCertCustomResource", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::CloudFormation::CustomResource" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.ServiceToken", "category": "Best Practice", - "startLine": 79, + "startLine": 338, "startColumn": 5, - "endLine": 79, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 338, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt IoTCertProviderframeworkonEvent8FF1476F.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", + "logicalId": "CfnPolicy", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::IoT::Policy" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.PolicyName", "category": "Best Practice", - "startLine": 90, + "startLine": 407, "startColumn": 5, - "endLine": 90, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 407, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2754,89 +2552,89 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", + "logicalId": "CdkThing001PolicyPrincipalAttachment", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::IoT::PolicyPrincipalAttachment" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.PolicyName", "category": "Best Practice", - "startLine": 94, + "startLine": 416, "startColumn": 5, - "endLine": 94, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 416, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", + "logicalId": "CdkThing001PolicyPrincipalAttachment", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::IoT::PolicyPrincipalAttachment" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 123, + "startLine": 417, "startColumn": 5, - "endLine": 123, - "endColumn": 18, + "endLine": 417, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcPublicSubnet1EIPD7E02669.AllocationId" + "resolutionSource": "dynamic (Join:arn:aws:iot:us-east-1:123456789012:cert/{ref:IoTCertCustomResource})" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", + "logicalId": "CdkThing001ThingPrincipalAttachment", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::IoT::ThingPrincipalAttachment" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 129, + "startLine": 447, "startColumn": 5, - "endLine": 129, - "endColumn": 14, + "endLine": 447, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'" + "resolutionSource": "dynamic (Join:arn:aws:iot:us-east-1:123456789012:cert/{ref:IoTCertCustomResource})" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'ThingName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "CdkThing001ThingPrincipalAttachment", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IoT::ThingPrincipalAttachment" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.ThingName", "category": "Best Practice", - "startLine": 150, + "startLine": 469, "startColumn": 5, - "endLine": 150, - "endColumn": 22, + "endLine": 469, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2846,19 +2644,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "CfnRole", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 158, + "startLine": 510, "startColumn": 5, - "endLine": 158, - "endColumn": 15, + "endLine": 510, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2868,359 +2667,326 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2Subnet691E08A3", + "logicalId": "CfnLogGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 174, + "startLine": 519, "startColumn": 5, - "endLine": 174, - "endColumn": 11, + "endLine": 519, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'CdkThing001LambdaRoleD7EE5CD3' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTable94F7E489", + "logicalId": "CdkThing001LambdaRoleD7EE5CD3", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 191, - "startColumn": 5, - "endLine": 191, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } + "startLine": 14, + "startColumn": 4, + "endLine": 14, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'CertHandler220363A9' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "logicalId": "CertHandler220363A9", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 202, - "startColumn": 5, - "endLine": 202, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 69, + "startColumn": 4, + "endLine": 69, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 205, - "startColumn": 5, - "endLine": 205, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 126, + "startColumn": 4, + "endLine": 126, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 216, - "startColumn": 5, - "endLine": 216, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 187, + "startColumn": 4, + "endLine": 187, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'IoTCertProviderframeworkonEventServiceRole80DDBEA7' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", + "logicalId": "IoTCertProviderframeworkonEventServiceRole80DDBEA7", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 220, - "startColumn": 5, - "endLine": 220, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'" - } + "startLine": 217, + "startColumn": 4, + "endLine": 217, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "message": "Resource 'IoTCertProviderframeworkonEvent8FF1476F' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2NATGateway9182C01D", + "logicalId": "IoTCertProviderframeworkonEvent8FF1476F", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AllocationId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 249, - "startColumn": 5, - "endLine": 249, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcPublicSubnet2EIP3C605A87.AllocationId" - } + "startLine": 296, + "startColumn": 4, + "endLine": 296, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'CfnPolicy' of type 'AWS::IoT::Policy' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPublicSubnet2NATGateway9182C01D", + "logicalId": "CfnPolicy", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::IoT::Policy" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 255, - "startColumn": 5, - "endLine": 255, - "endColumn": 14, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'" - } + "startLine": 353, + "startColumn": 4, + "endLine": 353, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Resource 'CfnRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "CfnRole", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 276, - "startColumn": 5, - "endLine": 276, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 477, + "startColumn": 4, + "endLine": 477, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'CfnLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "CfnLogGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 284, - "startColumn": 5, - "endLine": 284, + "startLine": 518, + "startColumn": 4, + "endLine": 518, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'CdkIoTCoreRule' of type 'AWS::IoT::TopicRule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1Subnet536B997A", + "logicalId": "CdkIoTCoreRule", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IoT::TopicRule" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 300, - "startColumn": 5, - "endLine": 300, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "startLine": 528, + "startColumn": 4, + "endLine": 528, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/py-lambda-cron--LambdaCronExample.template.json": { + "filePath": "cdk/py-lambda-cron--LambdaCronExample.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 7, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'SingletonServiceRoleDDD815CD' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableB2C5B500", + "logicalId": "Singleton8C7B99F3", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 317, - "startColumn": 5, - "endLine": 317, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } + "startLine": 53, + "startColumn": 4, + "endLine": 53, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", + "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 328, + "startLine": 84, "startColumn": 5, - "endLine": 328, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 84, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", + "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 331, + "startLine": 85, "startColumn": 5, - "endLine": 331, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 85, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1Subnet536B997A'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt Singleton8C7B99F3.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 342, + "startLine": 91, "startColumn": 5, - "endLine": 342, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 91, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3230,263 +2996,311 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "logicalId": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 346, + "startLine": 92, "startColumn": 5, - "endLine": 346, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 92, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'" + "resolutionSource": "GetAtt Rule4C995B7F.Arn" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Resource 'SingletonServiceRoleDDD815CD' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "SingletonServiceRoleDDD815CD", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 357, - "startColumn": 5, - "endLine": 357, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'Singleton8C7B99F3' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "Singleton8C7B99F3", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 365, - "startColumn": 5, - "endLine": 365, + "startLine": 39, + "startColumn": 4, + "endLine": 39, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Rule4C995B7F' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Rule4C995B7F", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 62, + "startColumn": 4, + "endLine": 62, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/py-lambda-from-container--LambdaContainerFunctionStack.template.json": { + "filePath": "cdk/py-lambda-from-container--LambdaContainerFunctionStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 4, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'lambdaContainerFunctionServiceRole5E36DB3C' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "lambdaContainerFunction5815FD88", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 63, + "startColumn": 4, + "endLine": 63, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", + "logicalId": "lambdaContainerFunction5815FD88", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 381, + "startLine": 51, "startColumn": 5, - "endLine": 381, - "endColumn": 11, + "endLine": 51, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'PackageType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableA678073B", + "logicalId": "lambdaContainerFunction5815FD88", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.PackageType", "category": "Best Practice", - "startLine": 398, + "startLine": 53, "startColumn": 5, - "endLine": 398, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 53, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'lambdaContainerFunctionServiceRole5E36DB3C' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", + "logicalId": "lambdaContainerFunctionServiceRole5E36DB3C", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 409, - "startColumn": 5, - "endLine": 409, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'lambdaContainerFunction5815FD88' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", + "logicalId": "lambdaContainerFunction5815FD88", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 412, - "startColumn": 5, - "endLine": 412, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2Subnet3788AAA1'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 39, + "startColumn": 4, + "endLine": 39, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/py-lambda-layer--LambdaLayerExample.template.json": { + "filePath": "cdk/py-lambda-layer--LambdaLayerExample.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 5, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", + "logicalId": "lambdafunction45C982D3", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.DestinationCidrBlock", - "category": "Best Practice", - "startLine": 423, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 83, "startColumn": 5, - "endLine": 423, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 83, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "python3.8", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'lambdafunctionServiceRole85538ADB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", + "logicalId": "lambdafunction45C982D3", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 427, - "startColumn": 5, - "endLine": 427, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'" - } + "startLine": 85, + "startColumn": 4, + "endLine": 85, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'CompatibleRuntimes' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VpcVPCGWBF912B6E", + "logicalId": "helperlayerC2FA2F58", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.CompatibleRuntimes", "category": "Best Practice", - "startLine": 455, + "startLine": 6, "startColumn": 5, - "endLine": 455, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "endLine": 6, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'Content' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DNSFirewallLogGroupF0EEB7D4", + "logicalId": "helperlayerC2FA2F58", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.Content", "category": "Best Practice", - "startLine": 466, + "startLine": 11, "startColumn": 5, - "endLine": 466, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "endLine": 11, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3496,222 +3310,207 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationArn' is create-only; updating it will cause resource replacement", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DNSLogsConfig", + "logicalId": "helperlayerC2FA2F58", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfig" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.DestinationArn", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 478, + "startLine": 17, "startColumn": 5, - "endLine": 478, - "endColumn": 20, + "endLine": 17, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt DNSFirewallLogGroupF0EEB7D4.Arn" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Resource 'lambdafunctionServiceRole85538ADB' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DNSLogsConfig", + "logicalId": "lambdafunctionServiceRole85538ADB", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfig" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 484, - "startColumn": 5, - "endLine": 484, - "endColumn": 10, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 30, + "startColumn": 4, + "endLine": 30, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ResolverQueryLogConfigId' is create-only; updating it will cause resource replacement", + "message": "Resource 'lambdafunction45C982D3' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DNSLogAssoc", + "logicalId": "lambdafunction45C982D3", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ResolverQueryLogConfigId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 493, + "startLine": 64, + "startColumn": 4, + "endLine": 64, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/py-stepfunctions--aws-stepfunctions-integ.template.json": { + "filePath": "cdk/py-stepfunctions--aws-stepfunctions-integ.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 8, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 5, + "informational": 6, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "submitLambda3C32AFD4", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 53, "startColumn": 5, - "endLine": 493, - "endColumn": 30, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 53, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'DNSLogsConfig'" + "actualValue": "python3.9", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DNSLogAssoc", - "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation" - }, - "propertyPath": "Properties.ResourceId", - "category": "Best Practice", - "startLine": 496, - "startColumn": 5, - "endLine": 496, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AllowedDomainList", - "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallDomainList" - }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 510, - "startColumn": 5, - "endLine": 510, - "endColumn": 10, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "BlockedDomainList", + "logicalId": "statusLambdaCF47B86D", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallDomainList" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 523, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 115, "startColumn": 5, - "endLine": 523, - "endColumn": 10, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 115, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "python3.9", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'submitLambdaServiceRole576DCA8F' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "DNSRuleGroup", + "logicalId": "submitLambda3C32AFD4", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallRuleGroup" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Name", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 549, - "startColumn": 5, - "endLine": 549, - "endColumn": 10, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 55, + "startColumn": 4, + "endLine": 55, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FirewallRuleGroupId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'statusLambdaServiceRoleD1132168' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "FirewallRuleGroupAssociation", + "logicalId": "statusLambdaCF47B86D", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.FirewallRuleGroupId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 558, - "startColumn": 5, - "endLine": 558, - "endColumn": 25, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'DNSRuleGroup'" - } + "startLine": 117, + "startColumn": 4, + "endLine": 117, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'StateMachineRoleB840431D' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", + "source": "CFN_LINT", "entity": { - "logicalId": "FirewallRuleGroupAssociation", + "logicalId": "StateMachine2E01A3A5", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 563, - "startColumn": 5, - "endLine": 563, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc8378EB38'" - } + "startLine": 258, + "startColumn": 4, + "endLine": 258, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DNSFirewallLogGroupF0EEB7D4' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Resource 'submitLambdaServiceRole576DCA8F' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DNSFirewallLogGroupF0EEB7D4", + "logicalId": "submitLambdaServiceRole576DCA8F", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 465, + "startLine": 5, "startColumn": 4, - "endLine": 465, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -3719,19 +3518,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DNSLogsConfig' of type 'AWS::Route53Resolver::ResolverQueryLoggingConfig' supports Tags but none are configured", + "message": "Resource 'submitLambda3C32AFD4' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DNSLogsConfig", + "logicalId": "submitLambda3C32AFD4", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfig" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 477, + "startLine": 39, "startColumn": 4, - "endLine": 477, + "endLine": 39, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -3739,19 +3538,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'AllowedDomainList' of type 'AWS::Route53Resolver::FirewallDomainList' supports Tags but none are configured", + "message": "Resource 'statusLambdaServiceRoleD1132168' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AllowedDomainList", + "logicalId": "statusLambdaServiceRoleD1132168", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallDomainList" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 506, + "startLine": 67, "startColumn": 4, - "endLine": 506, + "endLine": 67, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -3759,19 +3558,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BlockedDomainList' of type 'AWS::Route53Resolver::FirewallDomainList' supports Tags but none are configured", + "message": "Resource 'statusLambdaCF47B86D' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BlockedDomainList", + "logicalId": "statusLambdaCF47B86D", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallDomainList" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 518, + "startLine": 101, "startColumn": 4, - "endLine": 518, + "endLine": 101, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -3779,19 +3578,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DNSRuleGroup' of type 'AWS::Route53Resolver::FirewallRuleGroup' supports Tags but none are configured", + "message": "Resource 'StateMachineRoleB840431D' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DNSRuleGroup", + "logicalId": "StateMachineRoleB840431D", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallRuleGroup" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 531, + "startLine": 129, "startColumn": 4, - "endLine": 531, + "endLine": 129, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -3799,35 +3598,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FirewallRuleGroupAssociation' of type 'AWS::Route53Resolver::FirewallRuleGroupAssociation' supports Tags but none are configured", + "message": "Resource 'StateMachine2E01A3A5' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FirewallRuleGroupAssociation", + "logicalId": "StateMachine2E01A3A5", "entityType": "Resource", - "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" + "resourceType": "AWS::StepFunctions::StateMachine" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 557, + "startLine": 220, "startColumn": 4, - "endLine": 557, + "endLine": 220, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/s3-object-lambda--S3ObjectLambdaStack.template.json": { - "filePath": "cdk/s3-object-lambda--S3ObjectLambdaStack.template.json", + "cdk/py-url-shortener--urlshort-app.template.json": { + "filePath": "cdk/py-url-shortener--urlshort-app.template.json", "status": "OK", "metadata": { - "resourcesScanned": 9, + "resourcesScanned": 20, "counts": { "fatal": 0, - "errors": 0, + "errors": 1, "warnings": 3, - "informational": 12, + "informational": 39, "debug": 0 }, "suppressed": 0, @@ -3836,155 +3635,172 @@ }, "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "ruleId": "E2531", + "severity": "ERROR", + "message": "Runtime 'python3.7' was deprecated on '2023-12-04'. Creation was disabled on '2024-01-09', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "retrieveTransformedObjectLambdaD5D6532C", + "logicalId": "UrlShortenerFunctionB5E87AC1", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 155, + "startLine": 141, "startColumn": 5, - "endLine": 155, + "endLine": 141, "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "ruleDescription": "Check if Lambda Function Runtimes are blocked for create", "phase": "SCHEMA", "context": { - "actualValue": "nodejs20.x", - "lifecycle": "deprecated" + "actualValue": "python3.7", + "lifecycle": "create-blocked" } }, { "ruleId": "W3005", "severity": "WARN", - "message": "'retrieveTransformedObjectLambdaServiceRole27FF342E' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "'UrlShortenerFunctionServiceRole2FBF9CDA' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "retrieveTransformedObjectLambdaD5D6532C", + "logicalId": "UrlShortenerFunctionB5E87AC1", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "DependsOn", "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 157, + "startLine": 144, "startColumn": 4, - "endLine": 157, + "endLine": 144, "endColumn": 14, "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "W3045", + "ruleId": "W9002", "severity": "WARN", - "message": "AccessControl property is deprecated. Use bucket policies instead", - "source": "CFN_LINT", + "message": "Property 'RegionalCertificateArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", "entity": { - "logicalId": "examplebucketC9DFA43E", + "logicalId": "UrlShortenerApiDomain85D0CE65", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ApiGateway::DomainName" }, - "propertyPath": "Properties.AccessControl", - "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", - "category": "Deprecation", - "startLine": 6, + "propertyPath": "Properties.RegionalCertificateArn", + "category": "Best Practice", + "startLine": 499, "startColumn": 5, - "endLine": 6, - "endColumn": 19, - "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", - "phase": "LINT", - "context": { - "actualValue": "BucketOwnerFullControl" - } + "endLine": 499, + "endColumn": 28, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "examplebucketPolicyE09B485E", + "logicalId": "UrlShortenerApiDomain85D0CE65", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::ApiGateway::DomainName" }, - "propertyPath": "Properties.Bucket", + "category": "Security", + "startLine": 490, + "startColumn": 3, + "endLine": 490, + "endColumn": 33, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "TableCD117FA1", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 32, + "startLine": 12, "startColumn": 5, - "endLine": 32, - "endColumn": 12, + "endLine": 12, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'examplebucketC9DFA43E'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "retrieveTransformedObjectLambdainvocationRestrictionD58B0218", + "logicalId": "UrlShortenerApiDeployment97FF782966d8a7a27285a49d048d420aab9f3106", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 171, + "startLine": 223, "startColumn": 5, - "endLine": 171, - "endColumn": 12, + "endLine": 223, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "retrieveTransformedObjectLambdainvocationRestrictionD58B0218", + "logicalId": "UrlShortenerApiDeploymentStageprod9A3CCA44", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 172, + "startLine": 243, "startColumn": 5, - "endLine": 172, - "endColumn": 18, + "endLine": 243, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt retrieveTransformedObjectLambdaD5D6532C.Arn" + "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "retrieveTransformedObjectLambdainvocationRestrictionD58B0218", + "logicalId": "UrlShortenerApiDeploymentStageprod9A3CCA44", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 178, + "startLine": 246, "startColumn": 5, - "endLine": 178, + "endLine": 246, "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3994,89 +3810,90 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceAccount' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "retrieveTransformedObjectLambdainvocationRestrictionD58B0218", + "logicalId": "UrlShortenerApiproxy991A3B5C", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.SourceAccount", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 181, + "startLine": 258, "startColumn": 5, - "endLine": 181, - "endColumn": 19, + "endLine": 258, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt UrlShortenerApi1FE619BE.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "exampleBucketAP", + "logicalId": "UrlShortenerApiproxy991A3B5C", "entityType": "Resource", - "resourceType": "AWS::S3::AccessPoint" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 192, + "startLine": 264, "startColumn": 5, - "endLine": 192, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-s3", + "endLine": 264, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'examplebucketC9DFA43E'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "exampleBucketAP", + "logicalId": "UrlShortenerApiproxy991A3B5C", "entityType": "Resource", - "resourceType": "AWS::S3::AccessPoint" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 195, + "startLine": 265, "startColumn": 5, - "endLine": 195, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-s3", + "endLine": 265, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "s3ObjectLambdaAP", + "logicalId": "UrlShortenerApiproxyANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYproxy8ED41C08", "entityType": "Resource", - "resourceType": "AWS::S3ObjectLambda::AccessPoint" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 238, + "startLine": 276, "startColumn": 5, - "endLine": 238, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 276, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -4084,187 +3901,180 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'examplebucketC9DFA43E' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "examplebucketC9DFA43E", + "logicalId": "UrlShortenerApiproxyANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYproxy8ED41C08", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 277, + "startColumn": 5, + "endLine": 277, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt UrlShortenerFunctionB5E87AC1.Arn" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'retrieveTransformedObjectLambdaServiceRole27FF342E' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "retrieveTransformedObjectLambdaServiceRole27FF342E", + "logicalId": "UrlShortenerApiproxyANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYproxy8ED41C08", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 83, - "startColumn": 4, - "endLine": 83, + "startLine": 283, + "startColumn": 5, + "endLine": 283, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'retrieveTransformedObjectLambdaD5D6532C' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "retrieveTransformedObjectLambdaD5D6532C", + "logicalId": "UrlShortenerApiproxyANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYproxy8ED41C08", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 141, - "startColumn": 4, - "endLine": 141, + "startLine": 284, + "startColumn": 5, + "endLine": 284, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:111111111111:{ref:UrlShortenerApi1FE619BE}/{ref:UrlShortenerApiDeploymentStageprod9A3CCA44}/*/*)" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'exampleBucketAP' of type 'AWS::S3::AccessPoint' supports Tags but none are configured", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "exampleBucketAP", + "logicalId": "UrlShortenerApiproxyANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYproxy1B61094D", "entityType": "Resource", - "resourceType": "AWS::S3::AccessPoint" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 191, - "startColumn": 4, - "endLine": 191, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/ssm-document-association--SsmDocumentAssociationStack.template.json": { - "filePath": "cdk/ssm-document-association--SsmDocumentAssociationStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 17, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 28, - "debug": 0 + "startLine": 312, + "startColumn": 5, + "endLine": 312, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W3005", - "severity": "WARN", - "message": "'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", + "logicalId": "UrlShortenerApiproxyANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYproxy1B61094D", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 316, - "startColumn": 4, - "endLine": 316, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 313, + "startColumn": 5, + "endLine": 313, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt UrlShortenerFunctionB5E87AC1.Arn" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Content' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TimeWriterDocument", + "logicalId": "UrlShortenerApiproxyANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYproxy1B61094D", "entityType": "Resource", - "resourceType": "AWS::SSM::Document" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Content", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 6, + "startLine": 319, "startColumn": 5, - "endLine": 6, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", + "endLine": 319, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DocumentType' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TimeWriterDocument", + "logicalId": "UrlShortenerApiproxyANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYproxy1B61094D", "entityType": "Resource", - "resourceType": "AWS::SSM::Document" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.DocumentType", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 36, + "startLine": 320, "startColumn": 5, - "endLine": 36, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", + "endLine": 320, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:111111111111:{ref:UrlShortenerApi1FE619BE}/test-invoke-stage/*/*)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TimeWriterDocument", + "logicalId": "UrlShortenerApiproxyANY05B511A9", "entityType": "Resource", - "resourceType": "AWS::SSM::Document" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 37, + "startLine": 345, "startColumn": 5, - "endLine": 37, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", + "endLine": 345, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -4274,63 +4084,67 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpc2979FA29", + "logicalId": "UrlShortenerApiproxyANY05B511A9", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 71, + "startLine": 369, "startColumn": 5, - "endLine": 71, - "endColumn": 15, + "endLine": 369, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UrlShortenerApiproxy991A3B5C'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpc2979FA29", + "logicalId": "UrlShortenerApiproxyANY05B511A9", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 74, + "startLine": 372, "startColumn": 5, - "endLine": 74, - "endColumn": 21, + "endLine": 372, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E", + "logicalId": "UrlShortenerApiANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYB5D53F00", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 89, + "startLine": 383, "startColumn": 5, - "endLine": 89, - "endColumn": 22, + "endLine": 383, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -4340,143 +4154,132 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E", + "logicalId": "UrlShortenerApiANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYB5D53F00", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 97, + "startLine": 384, "startColumn": 5, - "endLine": 97, - "endColumn": 15, + "endLine": 384, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt UrlShortenerFunctionB5E87AC1.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E", + "logicalId": "UrlShortenerApiANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYB5D53F00", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 113, + "startLine": 390, "startColumn": 5, - "endLine": 113, - "endColumn": 11, + "endLine": 390, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'SSMDocumentTestVpc2979FA29'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpcpublicSubnet1RouteTable4C0F352E", + "logicalId": "UrlShortenerApiANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYB5D53F00", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 130, + "startLine": 391, "startColumn": 5, - "endLine": 130, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 391, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SSMDocumentTestVpc2979FA29'" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:111111111111:{ref:UrlShortenerApi1FE619BE}/{ref:UrlShortenerApiDeploymentStageprod9A3CCA44}/*/)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpcpublicSubnet1RouteTableAssociation3C51BE77", + "logicalId": "UrlShortenerApiANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYD47A7EFF", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 141, + "startLine": 419, "startColumn": 5, - "endLine": 141, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 419, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'SSMDocumentTestVpcpublicSubnet1RouteTable4C0F352E'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpcpublicSubnet1RouteTableAssociation3C51BE77", + "logicalId": "UrlShortenerApiANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYD47A7EFF", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 144, + "startLine": 420, "startColumn": 5, - "endLine": 144, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 420, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "GetAtt UrlShortenerFunctionB5E87AC1.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpcpublicSubnet1DefaultRouteE60C709F", + "logicalId": "UrlShortenerApiANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYD47A7EFF", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 155, + "startLine": 426, "startColumn": 5, - "endLine": 155, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 426, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -4486,116 +4289,114 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpcpublicSubnet1DefaultRouteE60C709F", + "logicalId": "UrlShortenerApiANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYD47A7EFF", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 159, + "startLine": 427, "startColumn": 5, - "endLine": 159, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "endLine": 427, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SSMDocumentTestVpcpublicSubnet1RouteTable4C0F352E'" + "resolutionSource": "dynamic (Join:arn:aws:execute-api:us-east-1:111111111111:{ref:UrlShortenerApi1FE619BE}/test-invoke-stage/*/)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMDocumentTestVpcVPCGW7C58FC59", + "logicalId": "UrlShortenerApiANY5994BD69", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCGatewayAttachment" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 190, + "startLine": 452, "startColumn": 5, - "endLine": 190, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "endLine": 452, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'SSMDocumentTestVpc2979FA29'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMTestInstanceInstanceSecurityGroup68B5BAFB", + "logicalId": "UrlShortenerApiANY5994BD69", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 362, + "startLine": 476, "startColumn": 5, - "endLine": 362, - "endColumn": 22, + "endLine": 476, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt UrlShortenerApi1FE619BE.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMTestInstanceInstanceSecurityGroup68B5BAFB", + "logicalId": "UrlShortenerApiANY5994BD69", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 380, + "startLine": 482, "startColumn": 5, - "endLine": 380, - "endColumn": 11, + "endLine": 482, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SSMDocumentTestVpc2979FA29'" + "resolutionSource": "Ref to 'UrlShortenerApi1FE619BE'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'DomainName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMTestInstanceA55C9969", + "logicalId": "UrlShortenerApiDomain85D0CE65", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ApiGateway::DomainName" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.DomainName", "category": "Best Practice", - "startLine": 404, + "startLine": 493, "startColumn": 5, - "endLine": 404, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 493, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -4605,144 +4406,106 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'DomainName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMTestInstanceA55C9969", + "logicalId": "UrlShortenerApiDomainMapurlshortappUrlShortenerApiB1BAB0CD7C6BCC1C", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ApiGateway::BasePathMapping" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.DomainName", "category": "Best Practice", - "startLine": 415, + "startLine": 508, "startColumn": 5, - "endLine": 415, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 508, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UrlShortenerApiDomain85D0CE65'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'HostedZoneId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSMTestInstanceA55C9969", + "logicalId": "UrlShortenerDomain9F16453F", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.HostedZoneId", "category": "Best Practice", - "startLine": 418, + "startLine": 539, "startColumn": 5, - "endLine": 418, + "endLine": 539, "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SSMTestInstanceA55C9969", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.SecurityGroupIds", - "category": "Best Practice", - "startLine": 419, - "startColumn": 5, - "endLine": 419, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'TableCD117FA1' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SSMTestInstanceA55C9969", + "logicalId": "TableCD117FA1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 427, - "startColumn": 5, - "endLine": 427, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E'" - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'UrlShortenerFunctionServiceRole2FBF9CDA' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SSMTestInstanceA55C9969", + "logicalId": "UrlShortenerFunctionServiceRole2FBF9CDA", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.UserData", - "category": "Best Practice", - "startLine": 440, - "startColumn": 5, - "endLine": 440, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "startLine": 31, + "startColumn": 4, + "endLine": 31, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TimeWriterDocument' of type 'AWS::SSM::Document' supports Tags but none are configured", + "message": "Resource 'UrlShortenerFunctionB5E87AC1' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TimeWriterDocument", + "logicalId": "UrlShortenerFunctionB5E87AC1", "entityType": "Resource", - "resourceType": "AWS::SSM::Document" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 122, "startColumn": 4, - "endLine": 5, + "endLine": 122, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -4750,19 +4513,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DocumentAssociation' of type 'AWS::SSM::Association' supports Tags but none are configured", + "message": "Resource 'UrlShortenerApi1FE619BE' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DocumentAssociation", + "logicalId": "UrlShortenerApi1FE619BE", "entityType": "Resource", - "resourceType": "AWS::SSM::Association" + "resourceType": "AWS::ApiGateway::RestApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 45, + "startLine": 157, "startColumn": 4, - "endLine": 45, + "endLine": 157, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -4770,19 +4533,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'UrlShortenerApiCloudWatchRole28577D98' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0", + "logicalId": "UrlShortenerApiCloudWatchRole28577D98", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 225, + "startLine": 166, "startColumn": 4, - "endLine": 225, + "endLine": 166, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -4790,19 +4553,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'UrlShortenerApiDeploymentStageprod9A3CCA44' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", + "logicalId": "UrlShortenerApiDeploymentStageprod9A3CCA44", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 297, + "startLine": 239, "startColumn": 4, - "endLine": 297, + "endLine": 239, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -4810,35 +4573,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'EC2SSMRole1C0EBD7B' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'UrlShortenerApiDomain85D0CE65' of type 'AWS::ApiGateway::DomainName' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EC2SSMRole1C0EBD7B", + "logicalId": "UrlShortenerApiDomain85D0CE65", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::DomainName" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 327, + "startLine": 492, "startColumn": 4, - "endLine": 327, + "endLine": 492, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/static-site-basic--MyStaticSite.template.json": { - "filePath": "cdk/static-site-basic--MyStaticSite.template.json", + "cdk/py-url-shortener--urlshort-load-test.template.json": { + "filePath": "cdk/py-url-shortener--urlshort-load-test.template.json", "status": "OK", "metadata": { - "resourcesScanned": 11, + "resourcesScanned": 8, "counts": { "fatal": 0, "errors": 0, - "warnings": 2, - "informational": 7, + "warnings": 0, + "informational": 18, "debug": 0 }, "suppressed": 0, @@ -4847,108 +4610,92 @@ }, "diagnostics": [ { - "ruleId": "W3005", - "severity": "WARN", - "message": "'CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", - "entity": { - "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 235, - "startColumn": 4, - "endLine": 235, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", + "logicalId": "generatorPingTask1D3C2E79", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 404, - "startColumn": 4, - "endLine": 404, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 32, + "startColumn": 5, + "endLine": 32, + "endColumn": 26, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StaticSiteBasicWebsiteBucketPolicy8E799A1F", + "logicalId": "generatorPingTask1D3C2E79", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 35, + "startLine": 47, "startColumn": 5, - "endLine": 35, - "endColumn": 12, + "endLine": 47, + "endColumn": 9, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'StaticSiteBasicWebsiteBucket3BB70B77'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Content' is create-only; updating it will cause resource replacement", + "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StaticSiteBasicDeployWebsiteAwsCliLayer198D4134", + "logicalId": "generatorPingTask1D3C2E79", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Content", + "propertyPath": "Properties.ExecutionRoleArn", "category": "Best Practice", - "startLine": 133, + "startLine": 48, "startColumn": 5, - "endLine": 133, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "endLine": 48, + "endColumn": 22, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt generatorPingTaskExecutionRoleA7BE7F8B.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StaticSiteBasicDeployWebsiteAwsCliLayer198D4134", + "logicalId": "generatorPingTask1D3C2E79", "entityType": "Resource", - "resourceType": "AWS::Lambda::LayerVersion" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Description", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 139, + "startLine": 54, "startColumn": 5, - "endLine": 139, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", + "endLine": 54, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -4956,141 +4703,45 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 180, - "startColumn": 4, - "endLine": 180, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 205, - "startColumn": 4, - "endLine": 205, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 246, - "startColumn": 4, - "endLine": 246, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 377, - "startColumn": 4, - "endLine": 377, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "cdk/stepfunction-external-definition--StepfunctionExternalDefinitionStack.template.json": { - "filePath": "cdk/stepfunction-external-definition--StepfunctionExternalDefinitionStack.template.json", - "status": "OK", - "metadata": { - "resourcesScanned": 12, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 17, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MyStateMachineRoleD59FFEBC' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyStateMachine6C968CA5", + "logicalId": "generatorPingTask1D3C2E79", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 109, - "startColumn": 4, - "endLine": 109, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 55, + "startColumn": 5, + "endLine": 55, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyStateMachineLogGroup9955D1FE", + "logicalId": "generatorPingTask1D3C2E79", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 6, + "startLine": 56, "startColumn": 5, - "endLine": 6, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "endLine": 56, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5100,20 +4751,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StateMachineType' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyStateMachine6C968CA5", + "logicalId": "generatorPingTask1D3C2E79", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.StateMachineType", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 107, + "startLine": 57, "startColumn": 5, - "endLine": 107, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-stepfunctions.git", + "endLine": 57, + "endColumn": 29, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5123,115 +4774,110 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiDeployment77C863276f473a57d5bd4cb772b382f83651c7a2", + "logicalId": "generatorPingTask1D3C2E79", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 138, + "startLine": 60, "startColumn": 5, - "endLine": 138, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 60, + "endColumn": 17, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'StepFuncApiE896FCA7'" + "resolutionSource": "GetAtt generatorPingTaskTaskRoleA4886BE8.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Cluster' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiDeploymentStageprod5FF8FD8E", + "logicalId": "generatorserviceServiceA6AC5079", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Cluster", "category": "Best Practice", - "startLine": 157, + "startLine": 138, "startColumn": 5, - "endLine": 157, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 138, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'StepFuncApiE896FCA7'" + "resolutionSource": "Ref to 'generatorcluster9804CB70'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiDeploymentStageprod5FF8FD8E", + "logicalId": "generatorserviceServiceA6AC5079", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 160, + "startLine": 152, "startColumn": 5, - "endLine": 160, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 152, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiorders391C1FA5", + "logicalId": "generatorserviceSecurityGroup3D8BECF8", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ParentId", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 169, + "startLine": 185, "startColumn": 5, - "endLine": 169, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 185, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt StepFuncApiE896FCA7.RootResourceId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiorders391C1FA5", + "logicalId": "generatorserviceSecurityGroup3D8BECF8", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.PathPart", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 175, + "startLine": 193, "startColumn": 5, - "endLine": 175, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 193, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5239,136 +4885,41 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Resource 'generatorcluster9804CB70' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiorders391C1FA5", + "logicalId": "generatorcluster9804CB70", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Resource" + "resourceType": "AWS::ECS::Cluster" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 176, - "startColumn": 5, - "endLine": 176, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'StepFuncApiE896FCA7'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "StepFuncApiordersGET0318ABB9", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.HttpMethod", - "category": "Best Practice", - "startLine": 234, - "startColumn": 5, - "endLine": 234, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "StepFuncApiordersGET0318ABB9", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.ResourceId", - "category": "Best Practice", - "startLine": 318, - "startColumn": 5, - "endLine": 318, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'StepFuncApiorders391C1FA5'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "StepFuncApiordersGET0318ABB9", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 321, - "startColumn": 5, - "endLine": 321, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'StepFuncApiE896FCA7'" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyStateMachineLogGroup9955D1FE' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MyStateMachineLogGroup9955D1FE", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 28, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyStateMachineRoleD59FFEBC' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'generatorPingTaskTaskRoleA4886BE8' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyStateMachineRoleD59FFEBC", + "logicalId": "generatorPingTaskTaskRoleA4886BE8", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, + "startLine": 11, "startColumn": 4, - "endLine": 17, + "endLine": 11, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -5376,19 +4927,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyStateMachine6C968CA5' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "message": "Resource 'generatorPingTask1D3C2E79' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyStateMachine6C968CA5", + "logicalId": "generatorPingTask1D3C2E79", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 83, + "startLine": 31, "startColumn": 4, - "endLine": 83, + "endLine": 31, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -5396,19 +4947,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'StepFuncApiE896FCA7' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Resource 'generatorPingTaskExecutionRoleA7BE7F8B' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiE896FCA7", + "logicalId": "generatorPingTaskExecutionRoleA7BE7F8B", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 121, + "startLine": 73, "startColumn": 4, - "endLine": 121, + "endLine": 73, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -5416,19 +4967,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'StepFuncApiDeploymentStageprod5FF8FD8E' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Resource 'generatorserviceServiceA6AC5079' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiDeploymentStageprod5FF8FD8E", + "logicalId": "generatorserviceServiceA6AC5079", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::ECS::Service" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 153, + "startLine": 137, "startColumn": 4, - "endLine": 153, + "endLine": 137, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -5436,35 +4987,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'StepFuncApiordersGETStartSyncExecutionRole90998151' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'generatorserviceSecurityGroup3D8BECF8' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StepFuncApiordersGETStartSyncExecutionRole90998151", + "logicalId": "generatorserviceSecurityGroup3D8BECF8", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 186, + "startLine": 184, "startColumn": 4, - "endLine": 186, + "endLine": 184, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "cdk/stepfunctions-job-poller--aws-stepfunctions-integ.template.json": { - "filePath": "cdk/stepfunctions-job-poller--aws-stepfunctions-integ.template.json", + "cdk/r53-resolver--R53ResolverStack.template.json": { + "filePath": "cdk/r53-resolver--R53ResolverStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 11, + "resourcesScanned": 18, "counts": { "fatal": 0, "errors": 0, - "warnings": 5, - "informational": 8, + "warnings": 1, + "informational": 33, "debug": 0 }, "suppressed": 0, @@ -5473,522 +5024,467 @@ }, "diagnostics": [ { - "ruleId": "W2531", + "ruleId": "W3005", "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "CheckLambda9CBBF9BA", + "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 50, - "startColumn": 5, - "endLine": 50, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.9", - "lifecycle": "deprecated" - } + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 271, + "startColumn": 4, + "endLine": 271, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SubmitLambda8054545E", + "logicalId": "R53ResolverTestVPC9B993306", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 107, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 6, "startColumn": 5, - "endLine": 107, - "endColumn": 13, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.9", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'CheckLambdaServiceRole74B86E23' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CheckLambda9CBBF9BA", + "logicalId": "R53ResolverTestVPC9B993306", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 53, - "startColumn": 4, - "endLine": 53, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'SubmitLambdaServiceRole98C85C39' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SubmitLambda8054545E", + "logicalId": "R53ResolverTestVPCPrivateSubnet1Subnet5DBB6B2C", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 110, - "startColumn": 4, - "endLine": 110, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 24, + "startColumn": 5, + "endLine": 24, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'CronStateMachineRoleFE85923B' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CronStateMachine7E50955B", + "logicalId": "R53ResolverTestVPCPrivateSubnet1Subnet5DBB6B2C", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 259, - "startColumn": 4, - "endLine": 259, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "startLine": 32, + "startColumn": 5, + "endLine": 32, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CheckLambdaServiceRole74B86E23' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CheckLambdaServiceRole74B86E23", + "logicalId": "R53ResolverTestVPCPrivateSubnet1Subnet5DBB6B2C", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 48, + "startColumn": 5, + "endLine": 48, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CheckLambda9CBBF9BA' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CheckLambda9CBBF9BA", + "logicalId": "R53ResolverTestVPCPrivateSubnet1RouteTable6E169019", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 39, - "startColumn": 4, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 65, + "startColumn": 5, + "endLine": 65, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SubmitLambdaServiceRole98C85C39' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubmitLambdaServiceRole98C85C39", + "logicalId": "R53ResolverTestVPCPrivateSubnet1RouteTableAssociation41B46D9B", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 62, - "startColumn": 4, - "endLine": 62, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 76, + "startColumn": 5, + "endLine": 76, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'R53ResolverTestVPCPrivateSubnet1RouteTable6E169019'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SubmitLambda8054545E' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubmitLambda8054545E", + "logicalId": "R53ResolverTestVPCPrivateSubnet1RouteTableAssociation41B46D9B", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 96, - "startColumn": 4, - "endLine": 96, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 79, + "startColumn": 5, + "endLine": 79, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'R53ResolverTestVPCPrivateSubnet1Subnet5DBB6B2C'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CronStateMachineRoleFE85923B' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CronStateMachineRoleFE85923B", + "logicalId": "R53ResolverTestVPCPrivateSubnet2Subnet495784E7", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 119, - "startColumn": 4, - "endLine": 119, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 90, + "startColumn": 5, + "endLine": 90, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CronStateMachine7E50955B' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CronStateMachine7E50955B", + "logicalId": "R53ResolverTestVPCPrivateSubnet2Subnet495784E7", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 210, - "startColumn": 4, - "endLine": 210, + "startLine": 98, + "startColumn": 5, + "endLine": 98, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CronStateMachineEventsRoleA3F136B0' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CronStateMachineEventsRoleA3F136B0", + "logicalId": "R53ResolverTestVPCPrivateSubnet2Subnet495784E7", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 271, - "startColumn": 4, - "endLine": 271, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 114, + "startColumn": 5, + "endLine": 114, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Rule4C995B7F' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Rule4C995B7F", + "logicalId": "R53ResolverTestVPCPrivateSubnet2RouteTable0899A697", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 317, - "startColumn": 4, - "endLine": 317, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "empty.yaml": { - "filePath": "empty.yaml", - "status": "ERROR", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F1101", - "severity": "FATAL", - "message": "Empty YAML document", - "source": "SCHEMA", - "category": "Structure", - "startLine": 1, - "startColumn": 1, - "endLine": 1, - "endColumn": 1, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" - } - ] - }, - "gh-issues/issue-144.yaml": { - "filePath": "gh-issues/issue-144.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 + "startLine": 131, + "startColumn": 5, + "endLine": 131, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Flow", + "logicalId": "R53ResolverTestVPCPrivateSubnet2RouteTableAssociation53E27A3B", "entityType": "Resource", - "resourceType": "AWS::MediaConnect::Flow" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-mediaconnect.git", + "startLine": 142, + "startColumn": 5, + "endLine": 142, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'R53ResolverTestVPCPrivateSubnet2RouteTable0899A697'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Source.Name' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Flow", + "logicalId": "R53ResolverTestVPCPrivateSubnet2RouteTableAssociation53E27A3B", "entityType": "Resource", - "resourceType": "AWS::MediaConnect::Flow" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Source.Name", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 13, - "startColumn": 9, - "endLine": 13, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-mediaconnect.git", + "startLine": 145, + "startColumn": 5, + "endLine": 145, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'R53ResolverTestVPCPrivateSubnet2Subnet495784E7'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Flow' of type 'AWS::MediaConnect::Flow' supports Tags but none are configured", + "message": "Property 'FirewallRuleGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Flow", + "logicalId": "BlockListRuleGroupDirectBlockListRuleGroupAssociation40E90DB0", "entityType": "Resource", - "resourceType": "AWS::MediaConnect::Flow" + "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FirewallRuleGroupId", "category": "Best Practice", - "startLine": 10, + "startLine": 316, "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "gh-issues/issue-183.yaml": { - "filePath": "gh-issues/issue-183.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 4, - "informational": 9, - "debug": 0 + "endLine": 316, + "endColumn": 25, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt BlockListRuleGroup55F6B55D.Id" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3031", - "severity": "FATAL", - "message": "'arn:aws:sqs:us-east-1:1111111111:MyQueue' does not match pattern '^arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:((eusc-)?[a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)$'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "PermissionInvalidAccountId", + "logicalId": "BlockListRuleGroupDirectBlockListRuleGroupAssociation40E90DB0", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" }, - "propertyPath": "Properties.SourceArn", - "category": "Schema", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 16, - "ruleDescription": "Value does not match pattern", + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 323, + "startColumn": 5, + "endLine": 323, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "arn:aws:sqs:us-east-1:1111111111:MyQueue", - "expectedConstraint": "^arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:((eusc-)?[a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)$" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" } }, { - "ruleId": "W3663", - "severity": "WARN", - "message": "Lambda Permission with a SourceArn that has no account id should also specify SourceAccount", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "PermissionInvalidAccountId", + "logicalId": "sgoutboundendpointEC0509A3", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties", - "suggestedFix": "Add SourceAccount property", - "category": "Security", - "startLine": 31, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 334, "startColumn": 5, - "endLine": 31, - "endColumn": 15, - "ruleDescription": "Validate SourceAccount is required property", - "phase": "LINT" + "endLine": 334, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'SourceArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionWithAccountId", + "logicalId": "sgoutboundendpointEC0509A3", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 25, - "startColumn": 7, - "endLine": 25, - "endColumn": 16, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" + "startLine": 396, + "startColumn": 5, + "endLine": 396, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" + } }, { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'SourceArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Direction' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionInvalidAccountId", + "logicalId": "OutboundEndpoint", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Route53Resolver::ResolverEndpoint" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Direction", "category": "Best Practice", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 16, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" - }, - { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", - "entity": { - "logicalId": "PermissionWithAccountId", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "category": "Security", - "startLine": 19, - "startColumn": 3, - "endLine": 19, - "endColumn": 26, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "PermissionWithAccountId", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 22, - "startColumn": 7, - "endLine": 22, - "endColumn": 13, + "startLine": 407, + "startColumn": 5, + "endLine": 407, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53resolver", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5998,42 +5494,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'SecurityGroupIds' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionWithAccountId", + "logicalId": "OutboundEndpoint", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Route53Resolver::ResolverEndpoint" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.SecurityGroupIds", "category": "Best Practice", - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 19, + "startLine": 420, + "startColumn": 5, + "endLine": 420, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53resolver", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt MyLambda.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionWithAccountId", + "logicalId": "sginboundendpoint32081788", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 24, - "startColumn": 7, - "endLine": 24, - "endColumn": 16, + "startLine": 436, + "startColumn": 5, + "endLine": 436, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6043,41 +5539,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionWithAccountId", + "logicalId": "sginboundendpoint32081788", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 25, - "startColumn": 7, - "endLine": 25, - "endColumn": 16, + "startLine": 460, + "startColumn": 5, + "endLine": 460, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'R53ResolverTestVPC9B993306'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'Direction' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionInvalidAccountId", + "logicalId": "InboundEndpoint", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Route53Resolver::ResolverEndpoint" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Direction", "category": "Best Practice", - "startLine": 32, - "startColumn": 7, - "endLine": 32, - "endColumn": 13, + "startLine": 471, + "startColumn": 5, + "endLine": 471, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53resolver", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6087,246 +5585,218 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'SecurityGroupIds' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PermissionInvalidAccountId", + "logicalId": "InboundEndpoint", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Route53Resolver::ResolverEndpoint" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.SecurityGroupIds", "category": "Best Practice", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 19, + "startLine": 484, + "startColumn": 5, + "endLine": 484, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53resolver", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt MyLambda.Arn" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "PermissionInvalidAccountId", + "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 34, - "startColumn": 7, - "endLine": 34, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 180, + "startColumn": 4, + "endLine": 180, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "PermissionInvalidAccountId", + "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 252, + "startColumn": 4, + "endLine": 252, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'BlockListC03D0423' of type 'AWS::Route53Resolver::FirewallDomainList' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyLambda", + "logicalId": "BlockListC03D0423", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Route53Resolver::FirewallDomainList" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, + "startLine": 282, + "startColumn": 4, + "endLine": 282, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "gh-issues/issue-184.yaml": { - "filePath": "gh-issues/issue-184.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 5, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3025", - "severity": "ERROR", - "message": "'db.m5.large' is not one of ['db.r3.2xlarge', 'db.r3.4xlarge', 'db.r3.8xlarge', 'db.r3.large', 'db.r3.xlarge', 'db.r4.16xlarge', 'db.r4.2xlarge', 'db.r4.4xlarge', 'db.r4.8xlarge', 'db.r4.large', 'db.r4.xlarge', 'db.r5.12xlarge', 'db.r5.16xlarge', 'db.r5.24xlarge', 'db.r5.2xlarge', 'db.r5.4xlarge', 'db.r5.8xlarge', 'db.r5.large', 'db.r5.xlarge', 'db.r6g.12xlarge', 'db.r6g.16xlarge', 'db.r6g.2xlarge', 'db.r6g.4xlarge', 'db.r6g.8xlarge', 'db.r6g.large', 'db.r6g.xlarge', 'db.r6i.12xlarge', 'db.r6i.16xlarge', 'db.r6i.24xlarge', 'db.r6i.2xlarge', 'db.r6i.32xlarge', 'db.r6i.4xlarge', 'db.r6i.8xlarge', 'db.r6i.large', 'db.r6i.xlarge', 'db.r7g.12xlarge', 'db.r7g.16xlarge', 'db.r7g.2xlarge', 'db.r7g.4xlarge', 'db.r7g.8xlarge', 'db.r7g.large', 'db.r7g.xlarge', 'db.r7i.12xlarge', 'db.r7i.16xlarge', 'db.r7i.24xlarge', 'db.r7i.2xlarge', 'db.r7i.48xlarge', 'db.r7i.4xlarge', 'db.r7i.8xlarge', 'db.r7i.large', 'db.r7i.xlarge', 'db.r8g.12xlarge', 'db.r8g.16xlarge', 'db.r8g.24xlarge', 'db.r8g.2xlarge', 'db.r8g.48xlarge', 'db.r8g.4xlarge', 'db.r8g.8xlarge', 'db.r8g.large', 'db.r8g.xlarge', 'db.serverless', 'db.t2.medium', 'db.t2.small', 'db.t3.large', 'db.t3.medium', 'db.t3.small', 'db.t4g.large', 'db.t4g.medium', 'db.x2g.12xlarge', 'db.x2g.16xlarge', 'db.x2g.2xlarge', 'db.x2g.4xlarge', 'db.x2g.8xlarge', 'db.x2g.large', 'db.x2g.xlarge'] when Engine is 'aurora-mysql' in any region", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BlockListRuleGroup55F6B55D' of type 'AWS::Route53Resolver::FirewallRuleGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "AuroraInstance", + "logicalId": "BlockListRuleGroup55F6B55D", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::FirewallRuleGroup" }, - "propertyPath": "Properties.DBInstanceClass", - "category": "Resource", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 22, - "ruleDescription": "Validates RDS DB Instance Class", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 294, + "startColumn": 4, + "endLine": 294, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'BlockListRuleGroupDirectBlockListRuleGroupAssociation40E90DB0' of type 'AWS::Route53Resolver::FirewallRuleGroupAssociation' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "AuroraInstance", + "logicalId": "BlockListRuleGroupDirectBlockListRuleGroupAssociation40E90DB0", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 2, - "startColumn": 3, - "endLine": 2, - "endColumn": 17, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 315, + "startColumn": 4, + "endLine": 315, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'sgoutboundendpointEC0509A3' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "AuroraInstance", + "logicalId": "sgoutboundendpointEC0509A3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 2, - "startColumn": 3, - "endLine": 2, - "endColumn": 17, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 333, + "startColumn": 4, + "endLine": 333, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'OutboundEndpoint' of type 'AWS::Route53Resolver::ResolverEndpoint' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AuroraInstance", + "logicalId": "OutboundEndpoint", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::ResolverEndpoint" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 406, + "startColumn": 4, + "endLine": 406, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9003", + "ruleId": "I9040", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "message": "Resource 'sginboundendpoint32081788' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", + "entity": { + "logicalId": "sginboundendpoint32081788", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "startLine": 435, + "startColumn": 4, + "endLine": 435, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'AuroraInstance' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Resource 'InboundEndpoint' of type 'AWS::Route53Resolver::ResolverEndpoint' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AuroraInstance", + "logicalId": "InboundEndpoint", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::ResolverEndpoint" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 4, - "startColumn": 5, - "endLine": 4, + "startLine": 470, + "startColumn": 4, + "endLine": 470, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "gh-issues/issue-185.yaml": { - "filePath": "gh-issues/issue-185.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "gh-issues/issue-186-clb.json": { - "filePath": "gh-issues/issue-186-clb.json", + "cdk/rekognition-lambda-s3-trigger--RekognitionLambdaS3TriggerStack.template.json": { + "filePath": "cdk/rekognition-lambda-s3-trigger--RekognitionLambdaS3TriggerStack.template.json", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 15, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 2, + "warnings": 4, + "informational": 14, "debug": 0 }, "suppressed": 0, @@ -6335,2891 +5805,3344 @@ }, "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "CLBA83A883E", + "logicalId": "RekFunction9837D13D", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Scheme", - "category": "Best Practice", - "startLine": 15, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 310, "startColumn": 5, - "endLine": 15, - "endColumn": 12, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 310, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs20.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Subnets' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'RekFunctionServiceRole3947AEF4' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "CLBA83A883E", + "logicalId": "RekFunction9837D13D", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Subnets", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 19, - "startColumn": 5, - "endLine": 19, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - } - ] - }, - "gh-issues/issue-186-imagebuilder.json": { - "filePath": "gh-issues/issue-186-imagebuilder.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 1, - "debug": 0 + "startLine": 312, + "startColumn": 4, + "endLine": 312, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W3030", + "ruleId": "W3005", "severity": "WARN", - "message": "'Abort' is not one of ['CONTINUE', 'ABORT']", + "message": "'BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "ImagePipeline7DDDE57F", + "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::ImagePipeline" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Workflows.0.OnFailure", - "category": "Schema", - "startLine": 31, - "startColumn": 7, - "endLine": 31, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", - "ruleDescription": "Value not in allowed enum", - "phase": "SCHEMA", - "context": { - "actualValue": "Abort" - } + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 428, + "startColumn": 4, + "endLine": 428, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 516, + "startColumn": 4, + "endLine": 516, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ImagePipeline7DDDE57F", + "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", "entityType": "Resource", - "resourceType": "AWS::ImageBuilder::ImagePipeline" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 24, + "startLine": 103, "startColumn": 5, - "endLine": 24, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", + "endLine": 103, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } - } - ] - }, - "gh-issues/issue-194.json": { - "filePath": "gh-issues/issue-194.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'SomeParameter': Default must be a string", - "source": "CFN_LINT", - "entity": { - "logicalId": "SomeParameter", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/SomeParameter/Default", - "category": "Parameter", - "startLine": 5, - "startColumn": 4, - "endLine": 5, - "endColumn": 12, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" - } - ] - }, - "gh-issues/issue-201.json": { - "filePath": "gh-issues/issue-201.json", - "status": "OK", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 2, - "errors": 0, - "warnings": 1, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" }, { - "ruleId": "F2002", - "severity": "FATAL", - "message": "Parameter 'MyParam' has invalid Type 'Blimp'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyParam", - "entityType": "Parameter" + "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Parameters/MyParam/Type", - "category": "Parameter", - "startLine": 4, - "startColumn": 7, - "endLine": 4, - "endColumn": 12, - "ruleDescription": "Parameter Type must be valid", - "phase": "SCHEMA" + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 104, + "startColumn": 5, + "endLine": 104, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt RekFunction9837D13D.Arn" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'MyParam' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyParam", - "entityType": "Parameter" + "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Parameters/MyParam", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 3, + "startLine": 110, "startColumn": 5, - "endLine": 3, - "endColumn": 13, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - } - ] - }, - "gh-issues/issue-226.yaml": { - "filePath": "gh-issues/issue-226.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 4, - "debug": 0 + "endLine": 110, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E9002", - "severity": "ERROR", - "message": "FromPort 443 is greater than ToPort 80", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SourceAccount' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "InvertedRangeSecurityGroup", + "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.SecurityGroupIngress.0", - "suggestedFix": "Set FromPort to a value less than or equal to ToPort", - "category": "Resource", - "startLine": 26, - "startColumn": 17, - "endLine": 26, - "endColumn": 18, - "ruleDescription": "SecurityGroup FromPort must be <= ToPort for the TCP and UDP protocols", - "phase": "LINT", + "propertyPath": "Properties.SourceAccount", + "category": "Best Practice", + "startLine": 111, + "startColumn": 5, + "endLine": 111, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { - "actualValue": [ - { - "CidrIp": "10.0.0.0/8", - "IpProtocol": "tcp", - "FromPort": 443, - "ToPort": 80 - } - ] + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PingSecurityGroup", + "logicalId": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 23, + "startLine": 114, + "startColumn": 5, + "endLine": 114, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt Bucket83908E77.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "InvertedRangeSecurityGroup", + "logicalId": "Classifications0C921F6C", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 24, - "startColumn": 7, - "endLine": 24, - "endColumn": 23, + "startLine": 134, + "startColumn": 5, + "endLine": 134, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'PingSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'Bucket83908E77' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "PingSecurityGroup", + "logicalId": "Bucket83908E77", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'InvertedRangeSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'Classifications0C921F6C' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "InvertedRangeSecurityGroup", + "logicalId": "Classifications0C921F6C", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 23, - "startColumn": 5, - "endLine": 23, + "startLine": 127, + "startColumn": 4, + "endLine": 127, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "gh-issues/issue-235.yaml": { - "filePath": "gh-issues/issue-235.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 38, - "counts": { - "fatal": 2, - "errors": 0, - "warnings": 20, - "informational": 208, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'StorageEncrypted' is a required property (from extension)", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'RekFunctionServiceRole3947AEF4' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "KmsKeyWithoutEncryption", + "logicalId": "RekFunctionServiceRole3947AEF4", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties", - "suggestedFix": "Add 'StorageEncrypted'", - "category": "Schema", - "startLine": 37, - "startColumn": 5, - "endLine": 37, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 153, + "startColumn": 4, + "endLine": 153, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "F3012", - "severity": "FATAL", - "message": "'invalid' is not of type 'boolean'", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'RekFunction9837D13D' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "InvalidEncryptionValue", + "logicalId": "RekFunction9837D13D", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.StorageEncrypted", - "category": "Schema", - "startLine": 128, - "startColumn": 7, - "endLine": 128, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property type mismatch", - "phase": "SCHEMA", - "context": { - "actualValue": "invalid", - "expectedConstraint": "boolean" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 286, + "startColumn": 4, + "endLine": 286, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'SourceDBInstanceAutomatedBackupsArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AutomatedBackupRestore", + "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.SourceDBInstanceAutomatedBackupsArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 191, - "startColumn": 7, - "endLine": 191, - "endColumn": 42, - "ruleDescription": "Hardcoded ARN property", + "startLine": 350, + "startColumn": 4, + "endLine": 350, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'false' is not of type 'boolean' - automatically coerced (string to boolean)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "StringFalseEncryption", + "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 51, - "startColumn": 7, - "endLine": 51, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 413, + "startColumn": 4, + "endLine": 413, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'false' is not of type 'boolean' - automatically coerced (string to boolean)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "CustomStringFalseEncryption", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 92, - "startColumn": 7, - "endLine": 92, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 438, + "startColumn": 4, + "endLine": 438, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "StringTrueEncryption", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 104, - "startColumn": 7, - "endLine": 104, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 499, + "startColumn": 4, + "endLine": 499, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/resource-overrides--resource-overrides.template.json": { + "filePath": "cdk/resource-overrides--resource-overrides.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 21, + "counts": { + "fatal": 2, + "errors": 2, + "warnings": 4, + "informational": 31, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W9003", - "severity": "WARN", - "message": "Parameter type 'String' may not be compatible with expected type 'boolean'", - "source": "CFN_LINT", + "ruleId": "F3002", + "severity": "FATAL", + "message": "Additional properties are not allowed ('Foo' was unexpected)", + "source": "SCHEMA", "entity": { - "logicalId": "DynamicEncryptionValue", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.StorageEncrypted", - "category": "Best Practice", - "startLine": 116, - "startColumn": 7, - "endLine": 116, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property type coercion warning", + "propertyPath": "Properties.Foo", + "category": "Schema", + "startLine": 418, + "startColumn": 5, + "endLine": 418, + "endColumn": 9, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Additional properties are not allowed", "phase": "SCHEMA", "context": { - "resolutionSource": "parameter 'DynamicEncryption' (type String)" + "property": "Foo", + "extra": { + "allowed_properties": [ + "AssociatePublicIpAddress", + "BlockDeviceMappings", + "ClassicLinkVPCId", + "ClassicLinkVPCSecurityGroups", + "EbsOptimized", + "IamInstanceProfile", + "ImageId", + "InstanceId", + "InstanceMonitoring", + "InstanceType", + "KernelId", + "KeyName", + "LaunchConfigurationName", + "MetadataOptions", + "PlacementTenancy", + "RamDiskId", + "SecurityGroups", + "SpotPrice", + "UserData" + ] + } } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "Parameter type 'String' may not be compatible with expected type 'boolean'", - "source": "CFN_LINT", + "ruleId": "F3006", + "severity": "FATAL", + "message": "Unknown resource type 'AWS::S3::Bucketeer'", + "source": "SCHEMA", "entity": { - "logicalId": "DynamicReferenceEncryption", + "logicalId": "MyBucketF68F3FF0", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucketeer" }, - "propertyPath": "Properties.StorageEncrypted", - "category": "Best Practice", - "startLine": 122, - "startColumn": 7, - "endLine": 122, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property type coercion warning", + "category": "Schema", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 20, + "ruleDescription": "AWS resource type must be recognized and available in the configured region", "phase": "SCHEMA", "context": { - "resolutionSource": "dynamic (dynamic reference: {{resolve:ssm:/rds/storage-encrypted}})" + "extra": { + "resource_type": "AWS::S3::Bucketeer" + } } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", + "ruleId": "E3001", + "severity": "ERROR", + "message": "Resource 'MyBucketF68F3FF0' has invalid property 'Transform'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", + "source": "CFN_LINT", "entity": { - "logicalId": "MissingEncryption", + "logicalId": "MyBucketF68F3FF0", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucketeer" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 32, - "startColumn": 5, - "endLine": 32, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "category": "Resource", + "startLine": 78, + "startColumn": 4, + "endLine": 78, + "endColumn": 14, + "ruleDescription": "Basic CloudFormation Resource Check", + "phase": "PARSE" }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", + "ruleId": "E3016", + "severity": "ERROR", + "message": "UpdatePolicy is not supported on resource type 'AWS::S3::Bucketeer'", + "source": "CFN_LINT", "entity": { - "logicalId": "KmsKeyWithoutEncryption", + "logicalId": "MyBucketF68F3FF0", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucketeer" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 37, - "startColumn": 5, - "endLine": 37, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", + "propertyPath": "UpdatePolicy", + "suggestedFix": "Remove UpdatePolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::ElastiCache::ReplicationGroup, AWS::Elasticsearch::Domain, AWS::Lambda::Alias, AWS::OpenSearchService::Domain", + "category": "Resource", + "startLine": 71, + "startColumn": 4, + "endLine": 71, + "endColumn": 17, + "ruleDescription": "Check UpdatePolicy values for Resources", "phase": "LINT" }, { - "ruleId": "W9008", + "ruleId": "W3005", "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", + "message": "'Other34654A52' dependency already enforced by a 'GetAtt' at 'Properties.AnalyticsConfigurations.0.StorageClassAnalysis.DataExport.Destination.BucketArn'", + "source": "CFN_LINT", "entity": { - "logicalId": "FalseEncryption", + "logicalId": "MyBucketF68F3FF0", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucketeer" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 45, - "startColumn": 7, - "endLine": 45, - "endColumn": 23, - "ruleDescription": "RDS instance should have StorageEncrypted", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 68, + "startColumn": 4, + "endLine": 68, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "W9008", + "ruleId": "W3005", "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", + "message": "'Other34654A52' dependency already enforced by a 'GetAtt' at 'Properties.Token'", + "source": "CFN_LINT", "entity": { - "logicalId": "StringFalseEncryption", + "logicalId": "MyBucketF68F3FF0", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucketeer" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 51, - "startColumn": 7, - "endLine": 51, - "endColumn": 23, - "ruleDescription": "RDS instance should have StorageEncrypted", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 68, + "startColumn": 4, + "endLine": 68, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "W9008", + "ruleId": "W3005", "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", + "message": "'Other34654A52' dependency already enforced by a 'Ref' at 'Properties.LoggingConfiguration.DestinationBucketName'", + "source": "CFN_LINT", "entity": { - "logicalId": "ConditionalFalseEncryption", + "logicalId": "MyBucketF68F3FF0", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucketeer" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 57, - "startColumn": 7, - "endLine": 57, - "endColumn": 23, - "ruleDescription": "RDS instance should have StorageEncrypted", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 68, + "startColumn": 4, + "endLine": 68, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "W9008", + "ruleId": "W3697", "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "source": "CFN_LINT", "entity": { - "logicalId": "ConditionalNoValueEncryption", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 63, - "startColumn": 7, - "endLine": 63, - "endColumn": 23, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "category": "Deprecation", + "startLine": 397, + "startColumn": 3, + "endLine": 397, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AllowedValuesEncryption", + "logicalId": "VPCB9E5F0B4", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 69, - "startColumn": 7, - "endLine": 69, - "endColumn": 23, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 83, + "startColumn": 5, + "endLine": 83, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EngineAllowedValuesMissingEncryption", + "logicalId": "VPCB9E5F0B4", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 73, + "propertyPath": "Properties.InstanceTenancy", + "category": "Best Practice", + "startLine": 86, "startColumn": 5, - "endLine": 73, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "endLine": 86, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalClusterOrStandalone", + "logicalId": "VPCPublicSubnet1SubnetB4246D30", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 78, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 101, "startColumn": 5, - "endLine": 78, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" - }, - { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", - "entity": { - "logicalId": "CustomFalseEncryption", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 86, - "startColumn": 7, - "endLine": 86, - "endColumn": 23, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "endLine": 101, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CustomStringFalseEncryption", + "logicalId": "VPCPublicSubnet1SubnetB4246D30", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 92, - "startColumn": 7, - "endLine": 92, - "endColumn": 23, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 109, + "startColumn": 5, + "endLine": 109, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EmptySnapshotIdentifier", + "logicalId": "VPCPublicSubnet1SubnetB4246D30", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 159, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 125, "startColumn": 5, - "endLine": 159, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "endLine": 125, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WholePropertiesFalseEncryption", + "logicalId": "VPCPublicSubnet1RouteTableFEE4B781", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 241, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 142, "startColumn": 5, - "endLine": 241, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "endLine": 142, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'" + } }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AutomatedBackupRestore", + "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "category": "Security", - "startLine": 187, - "startColumn": 3, - "endLine": 187, - "endColumn": 25, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 153, + "startColumn": 5, + "endLine": 153, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "VPCPublicSubnet1RouteTableAssociation0B0896DC", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 24, - "startColumn": 3, - "endLine": 24, - "endColumn": 10, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 156, + "startColumn": 5, + "endLine": 156, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::Route" }, + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 24, - "startColumn": 3, - "endLine": 24, - "endColumn": 10, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 167, + "startColumn": 5, + "endLine": 167, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MissingEncryption", + "logicalId": "VPCPublicSubnet1DefaultRoute91CEF279", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Route" }, + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 30, - "startColumn": 3, - "endLine": 30, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 171, + "startColumn": 5, + "endLine": 171, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet1RouteTableFEE4B781'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MissingEncryption", + "logicalId": "VPCPublicSubnet1NATGatewayE0556630", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::NatGateway" }, + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 30, - "startColumn": 3, - "endLine": 30, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 200, + "startColumn": 5, + "endLine": 200, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt VPCPublicSubnet1EIP6AD938E8.AllocationId" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "KmsKeyWithoutEncryption", + "logicalId": "VPCPublicSubnet1NATGatewayE0556630", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::NatGateway" }, + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 35, - "startColumn": 3, - "endLine": 35, - "endColumn": 26, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 206, + "startColumn": 5, + "endLine": 206, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPublicSubnet1SubnetB4246D30'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "KmsKeyWithoutEncryption", + "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 35, - "startColumn": 3, - "endLine": 35, - "endColumn": 26, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 227, + "startColumn": 5, + "endLine": 227, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FalseEncryption", + "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 41, - "startColumn": 3, - "endLine": 41, - "endColumn": 18, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 235, + "startColumn": 5, + "endLine": 235, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FalseEncryption", + "logicalId": "VPCPrivateSubnet1Subnet8BCA10E0", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 41, - "startColumn": 3, - "endLine": 41, - "endColumn": 18, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 251, + "startColumn": 5, + "endLine": 251, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "StringFalseEncryption", + "logicalId": "VPCPrivateSubnet1RouteTableBE8A6027", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::RouteTable" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 47, - "startColumn": 3, - "endLine": 47, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 268, + "startColumn": 5, + "endLine": 268, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "StringFalseEncryption", + "logicalId": "VPCPrivateSubnet1RouteTableAssociation347902D1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 47, - "startColumn": 3, - "endLine": 47, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 279, + "startColumn": 5, + "endLine": 279, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPrivateSubnet1RouteTableBE8A6027'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalFalseEncryption", + "logicalId": "VPCPrivateSubnet1RouteTableAssociation347902D1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 53, - "startColumn": 3, - "endLine": 53, - "endColumn": 29, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 282, + "startColumn": 5, + "endLine": 282, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPrivateSubnet1Subnet8BCA10E0'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalFalseEncryption", + "logicalId": "VPCPrivateSubnet1DefaultRouteAE1D6490", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Route" }, + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 53, - "startColumn": 3, - "endLine": 53, - "endColumn": 29, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 293, + "startColumn": 5, + "endLine": 293, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalNoValueEncryption", + "logicalId": "VPCPrivateSubnet1DefaultRouteAE1D6490", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Route" }, + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 59, - "startColumn": 3, - "endLine": 59, - "endColumn": 31, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 297, + "startColumn": 5, + "endLine": 297, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCPrivateSubnet1RouteTableBE8A6027'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalNoValueEncryption", + "logicalId": "VPCVPCGW99B986DC", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 59, - "startColumn": 3, - "endLine": 59, - "endColumn": 31, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 325, + "startColumn": 5, + "endLine": 325, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AllowedValuesEncryption", + "logicalId": "ASGInstanceSecurityGroup0525485D", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 65, - "startColumn": 3, - "endLine": 65, - "endColumn": 26, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 336, + "startColumn": 5, + "endLine": 336, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AllowedValuesEncryption", + "logicalId": "ASGInstanceSecurityGroup0525485D", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 65, - "startColumn": 3, - "endLine": 65, - "endColumn": 26, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 350, + "startColumn": 5, + "endLine": 350, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPCB9E5F0B4'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'IamInstanceProfile' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "EngineAllowedValuesMissingEncryption", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, + "propertyPath": "Properties.IamInstanceProfile", "category": "Best Practice", - "startLine": 71, - "startColumn": 3, - "endLine": 71, - "endColumn": 39, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 400, + "startColumn": 5, + "endLine": 400, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ASGInstanceProfile0A2834D7'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "EngineAllowedValuesMissingEncryption", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 71, - "startColumn": 3, - "endLine": 71, - "endColumn": 39, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 403, + "startColumn": 5, + "endLine": 403, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalClusterOrStandalone", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 76, - "startColumn": 3, - "endLine": 76, - "endColumn": 33, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 406, + "startColumn": 5, + "endLine": 406, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalClusterOrStandalone", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, + "propertyPath": "Properties.SecurityGroups", "category": "Best Practice", - "startLine": 76, - "startColumn": 3, - "endLine": 76, - "endColumn": 33, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 407, + "startColumn": 5, + "endLine": 407, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'UserData' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CustomFalseEncryption", + "logicalId": "ASGLaunchConfigC00AF12B", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 82, - "startColumn": 3, - "endLine": 82, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 415, + "startColumn": 5, + "endLine": 415, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CustomFalseEncryption", + "logicalId": "ASG46ED3070", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, + "propertyPath": "Properties.LaunchConfigurationName", "category": "Best Practice", - "startLine": 82, - "startColumn": 3, - "endLine": 82, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "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": "CustomStringFalseEncryption", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "category": "Best Practice", - "startLine": 88, - "startColumn": 3, - "endLine": 88, - "endColumn": 30, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 432, + "startColumn": 5, + "endLine": 432, + "endColumn": 29, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'ASGLaunchConfigC00AF12B'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CustomStringFalseEncryption", + "logicalId": "ASG46ED3070", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, + "propertyPath": "Properties.VPCZoneIdentifier", "category": "Best Practice", - "startLine": 88, - "startColumn": 3, - "endLine": 88, - "endColumn": 30, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 444, + "startColumn": 5, + "endLine": 444, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'Other34654A52' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "TrueEncryption", + "logicalId": "Other34654A52", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucket" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 94, + "startLine": 3, "startColumn": 3, - "endLine": 94, + "endLine": 3, "endColumn": 17, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "cdk/route53-resolver-dns-firewall--Route53ResolverDnsFirewallStack.template.json": { + "filePath": "cdk/route53-resolver-dns-firewall--Route53ResolverDnsFirewallStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 31, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 55, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "TrueEncryption", + "logicalId": "Vpc8378EB38", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::VPC" }, + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 94, - "startColumn": 3, - "endLine": 94, - "endColumn": 17, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "StringTrueEncryption", + "logicalId": "Vpc8378EB38", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::VPC" }, + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 100, - "startColumn": 3, - "endLine": 100, - "endColumn": 23, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "StringTrueEncryption", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 100, - "startColumn": 3, - "endLine": 100, - "endColumn": 23, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 24, + "startColumn": 5, + "endLine": 24, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalTrueEncryption", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 106, - "startColumn": 3, - "endLine": 106, - "endColumn": 28, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 32, + "startColumn": 5, + "endLine": 32, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalTrueEncryption", + "logicalId": "VpcPublicSubnet1Subnet5C2D37C4", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 106, - "startColumn": 3, - "endLine": 106, - "endColumn": 28, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 48, + "startColumn": 5, + "endLine": 48, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DynamicEncryptionValue", + "logicalId": "VpcPublicSubnet1RouteTable6C95E38E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::RouteTable" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 112, - "startColumn": 3, - "endLine": 112, - "endColumn": 25, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 65, + "startColumn": 5, + "endLine": 65, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DynamicEncryptionValue", + "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 112, - "startColumn": 3, - "endLine": 112, - "endColumn": 25, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 76, + "startColumn": 5, + "endLine": 76, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DynamicReferenceEncryption", + "logicalId": "VpcPublicSubnet1RouteTableAssociation97140677", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 118, - "startColumn": 3, - "endLine": 118, - "endColumn": 29, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 79, + "startColumn": 5, + "endLine": 79, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DynamicReferenceEncryption", + "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Route" }, + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 118, - "startColumn": 3, - "endLine": 118, - "endColumn": 29, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 90, + "startColumn": 5, + "endLine": 90, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "InvalidEncryptionValue", + "logicalId": "VpcPublicSubnet1DefaultRoute3DA9E72A", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Route" }, + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 124, - "startColumn": 3, - "endLine": 124, - "endColumn": 25, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 94, + "startColumn": 5, + "endLine": 94, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet1RouteTable6C95E38E'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "InvalidEncryptionValue", + "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::NatGateway" }, + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 124, - "startColumn": 3, - "endLine": 124, - "endColumn": 25, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 123, + "startColumn": 5, + "endLine": 123, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt VpcPublicSubnet1EIPD7E02669.AllocationId" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DynamicEngineValue", + "logicalId": "VpcPublicSubnet1NATGateway4D7517AA", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::NatGateway" }, + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 130, - "startColumn": 3, - "endLine": 130, - "endColumn": 21, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 129, + "startColumn": 5, + "endLine": 129, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet1Subnet5C2D37C4'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DynamicEngineValue", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 130, - "startColumn": 3, - "endLine": 130, - "endColumn": 21, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 150, + "startColumn": 5, + "endLine": 150, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AuroraEngine", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 135, - "startColumn": 3, - "endLine": 135, + "startLine": 158, + "startColumn": 5, + "endLine": 158, "endColumn": 15, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AuroraEngine", + "logicalId": "VpcPublicSubnet2Subnet691E08A3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 135, - "startColumn": 3, - "endLine": 135, - "endColumn": 15, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 174, + "startColumn": 5, + "endLine": 174, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AuroraAllowedValues", + "logicalId": "VpcPublicSubnet2RouteTable94F7E489", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::RouteTable" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 140, - "startColumn": 3, - "endLine": 140, - "endColumn": 22, - "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": "AuroraAllowedValues", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "category": "Best Practice", - "startLine": 140, - "startColumn": 3, - "endLine": 140, - "endColumn": 22, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 191, + "startColumn": 5, + "endLine": 191, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ClusterMember", + "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 145, - "startColumn": 3, - "endLine": 145, - "endColumn": 16, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 202, + "startColumn": 5, + "endLine": 202, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ClusterMember", + "logicalId": "VpcPublicSubnet2RouteTableAssociationDD5762D8", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 145, - "startColumn": 3, - "endLine": 145, - "endColumn": 16, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 205, + "startColumn": 5, + "endLine": 205, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SnapshotRestore", + "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Route" }, + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 151, - "startColumn": 3, - "endLine": 151, - "endColumn": 18, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 216, + "startColumn": 5, + "endLine": 216, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SnapshotRestore", + "logicalId": "VpcPublicSubnet2DefaultRoute97F91067", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Route" }, + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 151, - "startColumn": 3, - "endLine": 151, + "startLine": 220, + "startColumn": 5, + "endLine": 220, "endColumn": 18, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet2RouteTable94F7E489'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'AllocationId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "EmptySnapshotIdentifier", + "logicalId": "VpcPublicSubnet2NATGateway9182C01D", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::NatGateway" }, + "propertyPath": "Properties.AllocationId", "category": "Best Practice", - "startLine": 157, - "startColumn": 3, - "endLine": 157, - "endColumn": 26, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 249, + "startColumn": 5, + "endLine": 249, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt VpcPublicSubnet2EIP3C605A87.AllocationId" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "EmptySnapshotIdentifier", + "logicalId": "VpcPublicSubnet2NATGateway9182C01D", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::NatGateway" }, + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 157, - "startColumn": 3, - "endLine": 157, - "endColumn": 26, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 255, + "startColumn": 5, + "endLine": 255, + "endColumn": 14, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPublicSubnet2Subnet691E08A3'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ClusterSnapshotRestore", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 163, - "startColumn": 3, - "endLine": 163, - "endColumn": 25, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 276, + "startColumn": 5, + "endLine": 276, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ClusterSnapshotRestore", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 163, - "startColumn": 3, - "endLine": 163, - "endColumn": 25, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 284, + "startColumn": 5, + "endLine": 284, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "EncryptedSource", + "logicalId": "VpcPrivateSubnet1Subnet536B997A", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 169, - "startColumn": 3, - "endLine": 169, - "endColumn": 18, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 300, + "startColumn": 5, + "endLine": 300, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "EncryptedSource", + "logicalId": "VpcPrivateSubnet1RouteTableB2C5B500", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::RouteTable" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 169, - "startColumn": 3, - "endLine": 169, - "endColumn": 18, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 317, + "startColumn": 5, + "endLine": 317, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SourceInstanceReplica", + "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 175, - "startColumn": 3, - "endLine": 175, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 328, + "startColumn": 5, + "endLine": 328, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SourceInstanceReplica", + "logicalId": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 175, - "startColumn": 3, - "endLine": 175, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 331, + "startColumn": 5, + "endLine": 331, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet1Subnet536B997A'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SourceResourceRestore", + "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Route" }, + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 181, - "startColumn": 3, - "endLine": 181, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 342, + "startColumn": 5, + "endLine": 342, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SourceResourceRestore", + "logicalId": "VpcPrivateSubnet1DefaultRouteBE02A9ED", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Route" }, + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 181, - "startColumn": 3, - "endLine": 181, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 346, + "startColumn": 5, + "endLine": 346, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet1RouteTableB2C5B500'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AutomatedBackupRestore", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 187, - "startColumn": 3, - "endLine": 187, - "endColumn": 25, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 357, + "startColumn": 5, + "endLine": 357, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AutomatedBackupRestore", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 187, - "startColumn": 3, - "endLine": 187, - "endColumn": 25, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 365, + "startColumn": 5, + "endLine": 365, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SourceClusterReplica", + "logicalId": "VpcPrivateSubnet2Subnet3788AAA1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 193, - "startColumn": 3, - "endLine": 193, - "endColumn": 23, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 381, + "startColumn": 5, + "endLine": 381, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SourceClusterReplica", + "logicalId": "VpcPrivateSubnet2RouteTableA678073B", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::RouteTable" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 193, - "startColumn": 3, - "endLine": 193, - "endColumn": 23, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 398, + "startColumn": 5, + "endLine": 398, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CustomImplicitEncryption", + "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 199, - "startColumn": 3, - "endLine": 199, - "endColumn": 27, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 409, + "startColumn": 5, + "endLine": 409, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CustomImplicitEncryption", + "logicalId": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 199, - "startColumn": 3, - "endLine": 199, - "endColumn": 27, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 412, + "startColumn": 5, + "endLine": 412, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet2Subnet3788AAA1'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CustomTrueEncryption", + "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Route" }, + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 204, - "startColumn": 3, - "endLine": 204, - "endColumn": 23, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 423, + "startColumn": 5, + "endLine": 423, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CustomTrueEncryption", + "logicalId": "VpcPrivateSubnet2DefaultRoute060D2087", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Route" }, + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 204, - "startColumn": 3, - "endLine": 204, - "endColumn": 23, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 427, + "startColumn": 5, + "endLine": 427, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcPrivateSubnet2RouteTableA678073B'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LegacySecurityGroups", + "logicalId": "VpcVPCGWBF912B6E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 210, - "startColumn": 3, - "endLine": 210, - "endColumn": 23, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 455, + "startColumn": 5, + "endLine": 455, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LegacySecurityGroups", + "logicalId": "DNSFirewallLogGroupF0EEB7D4", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Logs::LogGroup" }, + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 210, - "startColumn": 3, - "endLine": 210, - "endColumn": 23, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 466, + "startColumn": 5, + "endLine": 466, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'DestinationArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CorrelatedClusterOrEncryptedStandalone", + "logicalId": "DNSLogsConfig", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfig" }, + "propertyPath": "Properties.DestinationArn", "category": "Best Practice", - "startLine": 216, - "startColumn": 3, - "endLine": 216, - "endColumn": 41, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 478, + "startColumn": 5, + "endLine": 478, + "endColumn": 20, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt DNSFirewallLogGroupF0EEB7D4.Arn" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CorrelatedClusterOrEncryptedStandalone", + "logicalId": "DNSLogsConfig", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfig" }, + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 216, - "startColumn": 3, - "endLine": 216, - "endColumn": 41, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 484, + "startColumn": 5, + "endLine": 484, + "endColumn": 10, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'ResolverQueryLogConfigId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalSnapshotOrEncryptedStandalone", + "logicalId": "DNSLogAssoc", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation" }, + "propertyPath": "Properties.ResolverQueryLogConfigId", "category": "Best Practice", - "startLine": 223, - "startColumn": 3, - "endLine": 223, - "endColumn": 43, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 493, + "startColumn": 5, + "endLine": 493, + "endColumn": 30, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'DNSLogsConfig'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalSnapshotOrEncryptedStandalone", + "logicalId": "DNSLogAssoc", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation" }, + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 223, - "startColumn": 3, - "endLine": 223, - "endColumn": 43, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 496, + "startColumn": 5, + "endLine": 496, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WholePropertiesCorrelated", + "logicalId": "AllowedDomainList", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::FirewallDomainList" }, + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 230, - "startColumn": 3, - "endLine": 230, - "endColumn": 28, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 510, + "startColumn": 5, + "endLine": 510, + "endColumn": 10, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WholePropertiesCorrelated", + "logicalId": "BlockedDomainList", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::FirewallDomainList" }, + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 230, - "startColumn": 3, - "endLine": 230, - "endColumn": 28, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 523, + "startColumn": 5, + "endLine": 523, + "endColumn": 10, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WholePropertiesFalseEncryption", + "logicalId": "DNSRuleGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::FirewallRuleGroup" }, + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 239, - "startColumn": 3, - "endLine": 239, - "endColumn": 33, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 549, + "startColumn": 5, + "endLine": 549, + "endColumn": 10, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'FirewallRuleGroupId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WholePropertiesFalseEncryption", + "logicalId": "FirewallRuleGroupAssociation", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" }, + "propertyPath": "Properties.FirewallRuleGroupId", "category": "Best Practice", - "startLine": 239, - "startColumn": 3, - "endLine": 239, - "endColumn": 33, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 558, + "startColumn": 5, + "endLine": 558, + "endColumn": 25, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'DNSRuleGroup'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DynamicProperties", + "logicalId": "FirewallRuleGroupAssociation", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 248, - "startColumn": 3, - "endLine": 248, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 563, + "startColumn": 5, + "endLine": 563, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc8378EB38'" + } }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'DNSFirewallLogGroupF0EEB7D4' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DynamicProperties", + "logicalId": "DNSFirewallLogGroupF0EEB7D4", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Logs::LogGroup" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 248, - "startColumn": 3, - "endLine": 248, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 465, + "startColumn": 4, + "endLine": 465, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'DNSLogsConfig' of type 'AWS::Route53Resolver::ResolverQueryLoggingConfig' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "DNSLogsConfig", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfig" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 26, - "startColumn": 5, - "endLine": 26, + "startLine": 477, + "startColumn": 4, + "endLine": 477, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'AllowedDomainList' of type 'AWS::Route53Resolver::FirewallDomainList' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MissingEncryption", + "logicalId": "AllowedDomainList", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::FirewallDomainList" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 32, - "startColumn": 5, - "endLine": 32, + "startLine": 506, + "startColumn": 4, + "endLine": 506, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'BlockedDomainList' of type 'AWS::Route53Resolver::FirewallDomainList' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "KmsKeyWithoutEncryption", + "logicalId": "BlockedDomainList", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::FirewallDomainList" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 37, - "startColumn": 5, - "endLine": 37, + "startLine": 518, + "startColumn": 4, + "endLine": 518, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'DNSRuleGroup' of type 'AWS::Route53Resolver::FirewallRuleGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "FalseEncryption", + "logicalId": "DNSRuleGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::FirewallRuleGroup" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 43, - "startColumn": 5, - "endLine": 43, + "startLine": 531, + "startColumn": 4, + "endLine": 531, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'FirewallRuleGroupAssociation' of type 'AWS::Route53Resolver::FirewallRuleGroupAssociation' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "StringFalseEncryption", + "logicalId": "FirewallRuleGroupAssociation", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 49, - "startColumn": 5, - "endLine": 49, + "startLine": 557, + "startColumn": 4, + "endLine": 557, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "cdk/s3-object-lambda--S3ObjectLambdaStack.template.json": { + "filePath": "cdk/s3-object-lambda--S3ObjectLambdaStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 9, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 3, + "informational": 12, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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)", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs20.x' was deprecated on '2026-04-30'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "ConditionalFalseEncryption", + "logicalId": "retrieveTransformedObjectLambdaD5D6532C", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 55, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 155, "startColumn": 5, - "endLine": 55, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "endLine": 155, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs20.x", + "lifecycle": "deprecated" + } }, { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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)", + "ruleId": "W3005", + "severity": "WARN", + "message": "'retrieveTransformedObjectLambdaServiceRole27FF342E' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "ConditionalNoValueEncryption", + "logicalId": "retrieveTransformedObjectLambdaD5D6532C", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 61, - "startColumn": 5, - "endLine": 61, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "startLine": 157, + "startColumn": 4, + "endLine": 157, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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)", + "ruleId": "W3045", + "severity": "WARN", + "message": "AccessControl property is deprecated. Use bucket policies instead", "source": "CFN_LINT", "entity": { - "logicalId": "AllowedValuesEncryption", + "logicalId": "examplebucketC9DFA43E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 67, + "propertyPath": "Properties.AccessControl", + "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", + "category": "Deprecation", + "startLine": 6, "startColumn": 5, - "endLine": 67, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "endLine": 6, + "endColumn": 19, + "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", + "phase": "LINT", + "context": { + "actualValue": "BucketOwnerFullControl" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalClusterOrStandalone", + "logicalId": "examplebucketPolicyE09B485E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 78, + "startLine": 32, "startColumn": 5, - "endLine": 78, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "endLine": 32, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'examplebucketC9DFA43E'" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CustomFalseEncryption", + "logicalId": "retrieveTransformedObjectLambdainvocationRestrictionD58B0218", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 84, + "startLine": 171, "startColumn": 5, - "endLine": 84, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "endLine": 171, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CustomStringFalseEncryption", + "logicalId": "retrieveTransformedObjectLambdainvocationRestrictionD58B0218", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 90, + "startLine": 172, "startColumn": 5, - "endLine": 90, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "endLine": 172, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt retrieveTransformedObjectLambdaD5D6532C.Arn" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "TrueEncryption", + "logicalId": "retrieveTransformedObjectLambdainvocationRestrictionD58B0218", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 96, + "startLine": 178, "startColumn": 5, - "endLine": 96, + "endLine": 178, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'SourceAccount' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "StringTrueEncryption", + "logicalId": "retrieveTransformedObjectLambdainvocationRestrictionD58B0218", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties", + "propertyPath": "Properties.SourceAccount", "category": "Best Practice", - "startLine": 102, + "startLine": 181, "startColumn": 5, - "endLine": 102, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "endLine": 181, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalTrueEncryption", + "logicalId": "exampleBucketAP", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::AccessPoint" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 108, + "startLine": 192, "startColumn": 5, - "endLine": 108, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "endLine": 192, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-s3", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'examplebucketC9DFA43E'" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DynamicEncryptionValue", + "logicalId": "exampleBucketAP", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::AccessPoint" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 114, + "startLine": 195, "startColumn": 5, - "endLine": 114, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "endLine": 195, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-s3", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DynamicReferenceEncryption", + "logicalId": "s3ObjectLambdaAP", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3ObjectLambda::AccessPoint" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 120, + "startLine": 238, "startColumn": 5, - "endLine": 120, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "endLine": 238, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'examplebucketC9DFA43E' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "InvalidEncryptionValue", + "logicalId": "examplebucketC9DFA43E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 126, - "startColumn": 5, - "endLine": 126, + "startLine": 5, + "startColumn": 4, + "endLine": 5, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'retrieveTransformedObjectLambdaServiceRole27FF342E' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "SnapshotRestore", + "logicalId": "retrieveTransformedObjectLambdaServiceRole27FF342E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 153, - "startColumn": 5, - "endLine": 153, + "startLine": 83, + "startColumn": 4, + "endLine": 83, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'retrieveTransformedObjectLambdaD5D6532C' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "EmptySnapshotIdentifier", + "logicalId": "retrieveTransformedObjectLambdaD5D6532C", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 159, - "startColumn": 5, - "endLine": 159, + "startLine": 141, + "startColumn": 4, + "endLine": 141, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'exampleBucketAP' of type 'AWS::S3::AccessPoint' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ClusterSnapshotRestore", + "logicalId": "exampleBucketAP", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::AccessPoint" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 165, - "startColumn": 5, - "endLine": 165, + "startLine": 191, + "startColumn": 4, + "endLine": 191, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "cdk/ssm-document-association--SsmDocumentAssociationStack.template.json": { + "filePath": "cdk/ssm-document-association--SsmDocumentAssociationStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 17, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 28, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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)", + "ruleId": "W3005", + "severity": "WARN", + "message": "'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' dependency already enforced by a 'GetAtt' at 'Properties.Role'", "source": "CFN_LINT", "entity": { - "logicalId": "EncryptedSource", + "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 171, - "startColumn": 5, - "endLine": 171, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "startLine": 316, + "startColumn": 4, + "endLine": 316, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'Content' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SourceResourceRestore", + "logicalId": "TimeWriterDocument", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::SSM::Document" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Content", "category": "Best Practice", - "startLine": 183, + "startLine": 6, "startColumn": 5, - "endLine": 183, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "endLine": 6, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'DocumentType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AutomatedBackupRestore", + "logicalId": "TimeWriterDocument", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::SSM::Document" }, - "propertyPath": "Properties", + "propertyPath": "Properties.DocumentType", "category": "Best Practice", - "startLine": 189, + "startLine": 36, "startColumn": 5, - "endLine": 189, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "endLine": 36, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SourceClusterReplica", + "logicalId": "TimeWriterDocument", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::SSM::Document" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 195, + "startLine": 37, "startColumn": 5, - "endLine": 195, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "endLine": 37, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CustomImplicitEncryption", + "logicalId": "SSMDocumentTestVpc2979FA29", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 201, + "startLine": 71, "startColumn": 5, - "endLine": 201, + "endLine": 71, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CustomTrueEncryption", + "logicalId": "SSMDocumentTestVpc2979FA29", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 206, + "startLine": 74, "startColumn": 5, - "endLine": 206, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "endLine": 74, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LegacySecurityGroups", + "logicalId": "SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 212, + "startLine": 89, "startColumn": 5, - "endLine": 212, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "endLine": 89, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CorrelatedClusterOrEncryptedStandalone", + "logicalId": "SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 218, + "startLine": 97, "startColumn": 5, - "endLine": 218, + "endLine": 97, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalSnapshotOrEncryptedStandalone", + "logicalId": "SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 225, + "startLine": 113, "startColumn": 5, - "endLine": 225, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "endLine": 113, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SSMDocumentTestVpc2979FA29'" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "SSMDocumentTestVpcpublicSubnet1RouteTable4C0F352E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 27, - "startColumn": 7, - "endLine": 27, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "startLine": 130, + "startColumn": 5, + "endLine": 130, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SSMDocumentTestVpc2979FA29'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "SSMDocumentTestVpcpublicSubnet1RouteTableAssociation3C51BE77", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "startLine": 141, + "startColumn": 5, + "endLine": 141, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SSMDocumentTestVpcpublicSubnet1RouteTable4C0F352E'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MissingEncryption", + "logicalId": "SSMDocumentTestVpcpublicSubnet1RouteTableAssociation3C51BE77", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 144, + "startColumn": 5, + "endLine": 144, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "KmsKeyWithoutEncryption", + "logicalId": "SSMDocumentTestVpcpublicSubnet1DefaultRouteE60C709F", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 38, - "startColumn": 7, - "endLine": 38, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 155, + "startColumn": 5, + "endLine": 155, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KmsKeyId' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "KmsKeyWithoutEncryption", + "logicalId": "SSMDocumentTestVpcpublicSubnet1DefaultRouteE60C709F", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Route" }, - "propertyPath": "Properties.KmsKeyId", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 39, - "startColumn": 7, - "endLine": 39, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 159, + "startColumn": 5, + "endLine": 159, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SSMDocumentTestVpcpublicSubnet1RouteTable4C0F352E'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FalseEncryption", + "logicalId": "SSMDocumentTestVpcVPCGW7C58FC59", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::VPCGatewayAttachment" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 44, - "startColumn": 7, - "endLine": 44, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 190, + "startColumn": 5, + "endLine": 190, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2-vpc-gateway-attachment.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SSMDocumentTestVpc2979FA29'", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FalseEncryption", + "logicalId": "SSMTestInstanceInstanceSecurityGroup68B5BAFB", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 45, - "startColumn": 7, - "endLine": 45, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 362, + "startColumn": 5, + "endLine": 362, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9229,43 +9152,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StringFalseEncryption", + "logicalId": "SSMTestInstanceInstanceSecurityGroup68B5BAFB", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 50, - "startColumn": 7, - "endLine": 50, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 380, + "startColumn": 5, + "endLine": 380, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SSMDocumentTestVpc2979FA29'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StringFalseEncryption", + "logicalId": "SSMTestInstanceA55C9969", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 51, - "startColumn": 7, - "endLine": 51, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 404, + "startColumn": 5, + "endLine": 404, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9275,67 +9198,66 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalFalseEncryption", + "logicalId": "SSMTestInstanceA55C9969", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 56, - "startColumn": 7, - "endLine": 56, + "startLine": 415, + "startColumn": 5, + "endLine": 415, "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalFalseEncryption", + "logicalId": "SSMTestInstanceA55C9969", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 57, - "startColumn": 7, - "endLine": 57, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 418, + "startColumn": 5, + "endLine": 418, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseClusterCondition'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'SecurityGroupIds' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalNoValueEncryption", + "logicalId": "SSMTestInstanceA55C9969", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.SecurityGroupIds", "category": "Best Practice", - "startLine": 62, - "startColumn": 7, - "endLine": 62, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 419, + "startColumn": 5, + "endLine": 419, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9345,44 +9267,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalNoValueEncryption", + "logicalId": "SSMTestInstanceA55C9969", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 63, - "startColumn": 7, - "endLine": 63, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 427, + "startColumn": 5, + "endLine": 427, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseClusterCondition'" + "resolutionSource": "Ref to 'SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AllowedValuesEncryption", + "logicalId": "SSMTestInstanceA55C9969", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 68, - "startColumn": 7, - "endLine": 68, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 440, + "startColumn": 5, + "endLine": 440, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9390,232 +9312,236 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9003", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", "source": "ENGINE", - "entity": { - "logicalId": "AllowedValuesEncryption", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 69, - "startColumn": 7, - "endLine": 69, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" - } + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'TimeWriterDocument' of type 'AWS::SSM::Document' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EngineAllowedValuesMissingEncryption", + "logicalId": "TimeWriterDocument", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::SSM::Document" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 74, - "startColumn": 7, - "endLine": 74, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "parameter with AllowedValues" - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'DocumentAssociation' of type 'AWS::SSM::Association' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConditionalClusterOrStandalone", + "logicalId": "DocumentAssociation", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::SSM::Association" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 79, - "startColumn": 7, - "endLine": 79, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 45, + "startColumn": 4, + "endLine": 45, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", + "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConditionalClusterOrStandalone", + "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.DBClusterIdentifier", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 80, - "startColumn": 7, - "endLine": 80, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseClusterCondition'" - } + "startLine": 225, + "startColumn": 4, + "endLine": 225, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomFalseEncryption", + "logicalId": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 85, - "startColumn": 7, - "endLine": 85, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 297, + "startColumn": 4, + "endLine": 297, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Resource 'EC2SSMRole1C0EBD7B' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomFalseEncryption", + "logicalId": "EC2SSMRole1C0EBD7B", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 86, - "startColumn": 7, - "endLine": 86, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 327, + "startColumn": 4, + "endLine": 327, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/static-site-basic--MyStaticSite.template.json": { + "filePath": "cdk/static-site-basic--MyStaticSite.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 11, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 7, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "CustomStringFalseEncryption", + "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Engine", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 91, - "startColumn": 7, - "endLine": 91, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 235, + "startColumn": 4, + "endLine": 235, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 404, + "startColumn": 4, + "endLine": 404, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CustomStringFalseEncryption", + "logicalId": "StaticSiteBasicWebsiteBucketPolicy8E799A1F", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 92, - "startColumn": 7, - "endLine": 92, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 35, + "startColumn": 5, + "endLine": 35, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'StaticSiteBasicWebsiteBucket3BB70B77'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Content' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TrueEncryption", + "logicalId": "StaticSiteBasicDeployWebsiteAwsCliLayer198D4134", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Content", "category": "Best Practice", - "startLine": 97, - "startColumn": 7, - "endLine": 97, + "startLine": 133, + "startColumn": 5, + "endLine": 133, "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TrueEncryption", + "logicalId": "StaticSiteBasicDeployWebsiteAwsCliLayer198D4134", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::LayerVersion" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 98, - "startColumn": 7, - "endLine": 98, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 139, + "startColumn": 5, + "endLine": 139, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9623,1249 +9549,5916 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StringTrueEncryption", + "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 103, - "startColumn": 7, - "endLine": 103, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 180, + "startColumn": 4, + "endLine": 180, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Resource 'CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StringTrueEncryption", + "logicalId": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 104, - "startColumn": 7, - "endLine": 104, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 205, + "startColumn": 4, + "endLine": 205, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConditionalTrueEncryption", + "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 109, - "startColumn": 7, - "endLine": 109, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 246, + "startColumn": 4, + "endLine": 246, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Resource 'CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConditionalTrueEncryption", + "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 110, - "startColumn": 7, - "endLine": 110, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseClusterCondition'" - } + "startLine": 377, + "startColumn": 4, + "endLine": 377, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/stepfunction-external-definition--StepfunctionExternalDefinitionStack.template.json": { + "filePath": "cdk/stepfunction-external-definition--StepfunctionExternalDefinitionStack.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 12, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 17, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'MyStateMachineRoleD59FFEBC' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyStateMachine6C968CA5", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 109, + "startColumn": 4, + "endLine": 109, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamicEncryptionValue", + "logicalId": "MyStateMachineLogGroup9955D1FE", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 115, - "startColumn": 7, - "endLine": 115, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Property 'StateMachineType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamicEncryptionValue", + "logicalId": "MyStateMachine6C968CA5", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.StateMachineType", "category": "Best Practice", - "startLine": 116, - "startColumn": 7, - "endLine": 116, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 107, + "startColumn": 5, + "endLine": 107, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-stepfunctions.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'DynamicEncryption' (type String)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamicReferenceEncryption", + "logicalId": "StepFuncApiDeployment77C863276f473a57d5bd4cb772b382f83651c7a2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 121, - "startColumn": 7, - "endLine": 121, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 138, + "startColumn": 5, + "endLine": 138, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'StepFuncApiE896FCA7'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamicReferenceEncryption", + "logicalId": "StepFuncApiDeploymentStageprod5FF8FD8E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 122, - "startColumn": 7, - "endLine": 122, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 157, + "startColumn": 5, + "endLine": 157, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (dynamic reference: {{resolve:ssm:/rds/storage-encrypted}})" + "resolutionSource": "Ref to 'StepFuncApiE896FCA7'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "InvalidEncryptionValue", + "logicalId": "StepFuncApiDeploymentStageprod5FF8FD8E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 127, - "startColumn": 7, - "endLine": 127, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 160, + "startColumn": 5, + "endLine": 160, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Property 'ParentId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "InvalidEncryptionValue", + "logicalId": "StepFuncApiorders391C1FA5", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.ParentId", "category": "Best Practice", - "startLine": 128, - "startColumn": 7, - "endLine": 128, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 169, + "startColumn": 5, + "endLine": 169, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt StepFuncApiE896FCA7.RootResourceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'PathPart' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DynamicEngineValue", + "logicalId": "StepFuncApiorders391C1FA5", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.PathPart", "category": "Best Practice", - "startLine": 133, - "startColumn": 7, - "endLine": 133, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 175, + "startColumn": 5, + "endLine": 175, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "parameter 'DynamicEngine' (type String)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AuroraEngine", + "logicalId": "StepFuncApiorders391C1FA5", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ApiGateway::Resource" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 138, - "startColumn": 7, - "endLine": 138, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 176, + "startColumn": 5, + "endLine": 176, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'StepFuncApiE896FCA7'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AuroraAllowedValues", + "logicalId": "StepFuncApiordersGET0318ABB9", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 143, - "startColumn": 7, - "endLine": 143, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 234, + "startColumn": 5, + "endLine": 234, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "parameter with AllowedValues" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterMember", + "logicalId": "StepFuncApiordersGET0318ABB9", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 148, - "startColumn": 7, - "endLine": 148, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 318, + "startColumn": 5, + "endLine": 318, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'StepFuncApiorders391C1FA5'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterMember", + "logicalId": "StepFuncApiordersGET0318ABB9", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.DBClusterIdentifier", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 149, - "startColumn": 7, - "endLine": 149, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 321, + "startColumn": 5, + "endLine": 321, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Cluster'" + "resolutionSource": "Ref to 'StepFuncApiE896FCA7'" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'MyStateMachineLogGroup9955D1FE' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SnapshotRestore", + "logicalId": "MyStateMachineLogGroup9955D1FE", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 154, - "startColumn": 7, - "endLine": 154, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'DBSnapshotIdentifier' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'MyStateMachineRoleD59FFEBC' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SnapshotRestore", + "logicalId": "MyStateMachineRoleD59FFEBC", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.DBSnapshotIdentifier", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 155, - "startColumn": 7, - "endLine": 155, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "parameter 'SnapshotName' (type String)" - } + "startLine": 17, + "startColumn": 4, + "endLine": 17, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'MyStateMachine6C968CA5' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EmptySnapshotIdentifier", + "logicalId": "MyStateMachine6C968CA5", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 160, - "startColumn": 7, - "endLine": 160, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 83, + "startColumn": 4, + "endLine": 83, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'DBSnapshotIdentifier' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'StepFuncApiE896FCA7' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EmptySnapshotIdentifier", + "logicalId": "StepFuncApiE896FCA7", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ApiGateway::RestApi" }, - "propertyPath": "Properties.DBSnapshotIdentifier", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 161, - "startColumn": 7, - "endLine": 161, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 121, + "startColumn": 4, + "endLine": 121, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'StepFuncApiDeploymentStageprod5FF8FD8E' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ClusterSnapshotRestore", + "logicalId": "StepFuncApiDeploymentStageprod5FF8FD8E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 166, - "startColumn": 7, - "endLine": 166, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 153, + "startColumn": 4, + "endLine": 153, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'DBClusterSnapshotIdentifier' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'StepFuncApiordersGETStartSyncExecutionRole90998151' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ClusterSnapshotRestore", + "logicalId": "StepFuncApiordersGETStartSyncExecutionRole90998151", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.DBClusterSnapshotIdentifier", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 167, - "startColumn": 7, - "endLine": 167, - "endColumn": 34, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 186, + "startColumn": 4, + "endLine": 186, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "cdk/stepfunctions-job-poller--aws-stepfunctions-integ.template.json": { + "filePath": "cdk/stepfunctions-job-poller--aws-stepfunctions-integ.template.json", + "status": "OK", + "metadata": { + "resourcesScanned": 11, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 5, + "informational": 8, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "EncryptedSource", + "logicalId": "CheckLambda9CBBF9BA", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 172, - "startColumn": 7, - "endLine": 172, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 50, + "startColumn": 5, + "endLine": 50, "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "actualValue": "python3.9", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "EncryptedSource", + "logicalId": "SubmitLambda8054545E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.StorageEncrypted", - "category": "Best Practice", - "startLine": 173, - "startColumn": 7, - "endLine": 173, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 107, + "startColumn": 5, + "endLine": 107, + "endColumn": 13, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "python3.9", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'CheckLambdaServiceRole74B86E23' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "SourceInstanceReplica", + "logicalId": "CheckLambda9CBBF9BA", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Engine", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 178, - "startColumn": 7, - "endLine": 178, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 53, + "startColumn": 4, + "endLine": 53, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SourceDBInstanceIdentifier' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'SubmitLambdaServiceRole98C85C39' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", "entity": { - "logicalId": "SourceInstanceReplica", + "logicalId": "SubmitLambda8054545E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SourceDBInstanceIdentifier", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 179, - "startColumn": 7, - "endLine": 179, - "endColumn": 33, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'EncryptedSource'" - } + "startLine": 110, + "startColumn": 4, + "endLine": 110, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3005", + "severity": "WARN", + "message": "'CronStateMachineRoleFE85923B' dependency already enforced by a 'GetAtt' at 'Properties.RoleArn'", + "source": "CFN_LINT", "entity": { - "logicalId": "SourceResourceRestore", + "logicalId": "CronStateMachine7E50955B", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.Engine", + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 184, - "startColumn": 7, - "endLine": 184, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 259, + "startColumn": 4, + "endLine": 259, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SourceDbiResourceId' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'CheckLambdaServiceRole74B86E23' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SourceResourceRestore", + "logicalId": "CheckLambdaServiceRole74B86E23", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.SourceDbiResourceId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 185, - "startColumn": 7, - "endLine": 185, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'CheckLambda9CBBF9BA' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AutomatedBackupRestore", + "logicalId": "CheckLambda9CBBF9BA", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 190, - "startColumn": 7, - "endLine": 190, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 39, + "startColumn": 4, + "endLine": 39, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SourceDBInstanceAutomatedBackupsArn' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'SubmitLambdaServiceRole98C85C39' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AutomatedBackupRestore", + "logicalId": "SubmitLambdaServiceRole98C85C39", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.SourceDBInstanceAutomatedBackupsArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 191, - "startColumn": 7, - "endLine": 191, - "endColumn": 42, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 62, + "startColumn": 4, + "endLine": 62, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'SubmitLambda8054545E' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SourceClusterReplica", + "logicalId": "SubmitLambda8054545E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 196, - "startColumn": 7, - "endLine": 196, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 96, + "startColumn": 4, + "endLine": 96, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SourceDBClusterIdentifier' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'CronStateMachineRoleFE85923B' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SourceClusterReplica", + "logicalId": "CronStateMachineRoleFE85923B", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.SourceDBClusterIdentifier", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 197, - "startColumn": 7, - "endLine": 197, - "endColumn": 32, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'Cluster'" - } + "startLine": 119, + "startColumn": 4, + "endLine": 119, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'CronStateMachine7E50955B' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomImplicitEncryption", + "logicalId": "CronStateMachine7E50955B", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 202, - "startColumn": 7, - "endLine": 202, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 210, + "startColumn": 4, + "endLine": 210, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'CronStateMachineEventsRoleA3F136B0' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomTrueEncryption", + "logicalId": "CronStateMachineEventsRoleA3F136B0", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 207, - "startColumn": 7, - "endLine": 207, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 271, + "startColumn": 4, + "endLine": 271, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Resource 'Rule4C995B7F' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomTrueEncryption", + "logicalId": "Rule4C995B7F", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 208, - "startColumn": 7, - "endLine": 208, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 317, + "startColumn": 4, + "endLine": 317, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "empty.yaml": { + "filePath": "empty.yaml", + "status": "ERROR", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F1101", + "severity": "FATAL", + "message": "Empty YAML document", + "source": "SCHEMA", + "category": "Structure", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 1, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" + } + ] + }, + "gh-issues/issue-144.yaml": { + "filePath": "gh-issues/issue-144.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LegacySecurityGroups", + "logicalId": "Flow", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::MediaConnect::Flow" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 213, + "startLine": 11, "startColumn": 7, - "endLine": 213, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 11, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-mediaconnect.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Source.Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedClusterOrEncryptedStandalone", + "logicalId": "Flow", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::MediaConnect::Flow" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Source.Name", "category": "Best Practice", - "startLine": 219, - "startColumn": 7, - "endLine": 219, + "startLine": 13, + "startColumn": 9, + "endLine": 13, "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-mediaconnect.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", + "message": "Resource 'Flow' of type 'AWS::MediaConnect::Flow' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedClusterOrEncryptedStandalone", + "logicalId": "Flow", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::MediaConnect::Flow" }, - "propertyPath": "Properties.DBClusterIdentifier", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 220, - "startColumn": 7, - "endLine": 220, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseClusterCondition'" - } + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-183.yaml": { + "filePath": "gh-issues/issue-183.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 4, + "informational": 9, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3031", + "severity": "FATAL", + "message": "'arn:aws:sqs:us-east-1:1111111111:MyQueue' does not match pattern '^arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:((eusc-)?[a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)$'", + "source": "SCHEMA", "entity": { - "logicalId": "CorrelatedClusterOrEncryptedStandalone", + "logicalId": "PermissionInvalidAccountId", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.StorageEncrypted", - "category": "Best Practice", - "startLine": 221, + "propertyPath": "Properties.SourceArn", + "category": "Schema", + "startLine": 35, "startColumn": 7, - "endLine": 221, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 35, + "endColumn": 16, + "ruleDescription": "Value does not match pattern", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseClusterCondition'" + "actualValue": "arn:aws:sqs:us-east-1:1111111111:MyQueue", + "expectedConstraint": "^arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:((eusc-)?[a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)$" } }, + { + "ruleId": "W3663", + "severity": "WARN", + "message": "Lambda Permission with a SourceArn that has no account id should also specify SourceAccount", + "source": "CFN_LINT", + "entity": { + "logicalId": "PermissionInvalidAccountId", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties", + "suggestedFix": "Add SourceAccount property", + "category": "Security", + "startLine": 31, + "startColumn": 5, + "endLine": 31, + "endColumn": 15, + "ruleDescription": "Validate SourceAccount is required property", + "phase": "LINT" + }, + { + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'SourceArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", + "entity": { + "logicalId": "PermissionWithAccountId", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.SourceArn", + "category": "Best Practice", + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 16, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" + }, + { + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'SourceArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", + "entity": { + "logicalId": "PermissionInvalidAccountId", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.SourceArn", + "category": "Best Practice", + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 16, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "PermissionWithAccountId", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "category": "Security", + "startLine": 19, + "startColumn": 3, + "endLine": 19, + "endColumn": 26, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalSnapshotOrEncryptedStandalone", + "logicalId": "PermissionWithAccountId", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 226, + "startLine": 22, "startColumn": 7, - "endLine": 226, + "endLine": 22, "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DBSnapshotIdentifier' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalSnapshotOrEncryptedStandalone", + "logicalId": "PermissionWithAccountId", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.DBSnapshotIdentifier", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 227, + "startLine": 23, "startColumn": 7, - "endLine": 227, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 23, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Fn::If on condition 'UseClusterCondition'" + "lifecycle": "create-only", + "resolutionSource": "GetAtt MyLambda.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalSnapshotOrEncryptedStandalone", + "logicalId": "PermissionWithAccountId", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 228, + "startLine": 24, "startColumn": 7, - "endLine": 228, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 24, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseClusterCondition'" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Cluster' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "PermissionWithAccountId", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 26, - "startColumn": 5, - "endLine": 26, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MissingEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MissingEncryption", + "logicalId": "PermissionInvalidAccountId", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Action", "category": "Best Practice", "startLine": 32, - "startColumn": 5, + "startColumn": 7, "endLine": 32, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'KmsKeyWithoutEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "KmsKeyWithoutEncryption", + "logicalId": "PermissionInvalidAccountId", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 37, - "startColumn": 5, - "endLine": 37, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt MyLambda.Arn" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FalseEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FalseEncryption", + "logicalId": "PermissionInvalidAccountId", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 43, - "startColumn": 5, - "endLine": 43, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 34, + "startColumn": 7, + "endLine": 34, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'StringFalseEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StringFalseEncryption", + "logicalId": "PermissionInvalidAccountId", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 49, - "startColumn": 5, - "endLine": 49, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ConditionalFalseEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Resource 'MyLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConditionalFalseEncryption", + "logicalId": "MyLambda", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 55, + "startLine": 12, "startColumn": 5, - "endLine": 55, + "endLine": 12, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "gh-issues/issue-184.yaml": { + "filePath": "gh-issues/issue-184.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 5, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ConditionalNoValueEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3025", + "severity": "ERROR", + "message": "'db.m5.large' is not one of ['db.r3.2xlarge', 'db.r3.4xlarge', 'db.r3.8xlarge', 'db.r3.large', 'db.r3.xlarge', 'db.r4.16xlarge', 'db.r4.2xlarge', 'db.r4.4xlarge', 'db.r4.8xlarge', 'db.r4.large', 'db.r4.xlarge', 'db.r5.12xlarge', 'db.r5.16xlarge', 'db.r5.24xlarge', 'db.r5.2xlarge', 'db.r5.4xlarge', 'db.r5.8xlarge', 'db.r5.large', 'db.r5.xlarge', 'db.r6g.12xlarge', 'db.r6g.16xlarge', 'db.r6g.2xlarge', 'db.r6g.4xlarge', 'db.r6g.8xlarge', 'db.r6g.large', 'db.r6g.xlarge', 'db.r6i.12xlarge', 'db.r6i.16xlarge', 'db.r6i.24xlarge', 'db.r6i.2xlarge', 'db.r6i.32xlarge', 'db.r6i.4xlarge', 'db.r6i.8xlarge', 'db.r6i.large', 'db.r6i.xlarge', 'db.r7g.12xlarge', 'db.r7g.16xlarge', 'db.r7g.2xlarge', 'db.r7g.4xlarge', 'db.r7g.8xlarge', 'db.r7g.large', 'db.r7g.xlarge', 'db.r7i.12xlarge', 'db.r7i.16xlarge', 'db.r7i.24xlarge', 'db.r7i.2xlarge', 'db.r7i.48xlarge', 'db.r7i.4xlarge', 'db.r7i.8xlarge', 'db.r7i.large', 'db.r7i.xlarge', 'db.r8g.12xlarge', 'db.r8g.16xlarge', 'db.r8g.24xlarge', 'db.r8g.2xlarge', 'db.r8g.48xlarge', 'db.r8g.4xlarge', 'db.r8g.8xlarge', 'db.r8g.large', 'db.r8g.xlarge', 'db.serverless', 'db.t2.medium', 'db.t2.small', 'db.t3.large', 'db.t3.medium', 'db.t3.small', 'db.t4g.large', 'db.t4g.medium', 'db.x2g.12xlarge', 'db.x2g.16xlarge', 'db.x2g.2xlarge', 'db.x2g.4xlarge', 'db.x2g.8xlarge', 'db.x2g.large', 'db.x2g.xlarge'] when Engine is 'aurora-mysql' in any region", + "source": "CFN_LINT", "entity": { - "logicalId": "ConditionalNoValueEncryption", + "logicalId": "AuroraInstance", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 61, - "startColumn": 5, - "endLine": 61, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.DBInstanceClass", + "category": "Resource", + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 22, + "ruleDescription": "Validates RDS DB Instance Class", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'AllowedValuesEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "AllowedValuesEncryption", + "logicalId": "AuroraInstance", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 67, - "startColumn": 5, - "endLine": 67, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 17, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'EngineAllowedValuesMissingEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "EngineAllowedValuesMissingEncryption", + "logicalId": "AuroraInstance", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 73, - "startColumn": 5, - "endLine": 73, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 17, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ConditionalClusterOrStandalone' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalClusterOrStandalone", + "logicalId": "AuroraInstance", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 78, - "startColumn": 5, - "endLine": 78, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9003", "severity": "INFO", - "message": "Resource 'CustomFalseEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", "source": "ENGINE", - "entity": { - "logicalId": "CustomFalseEncryption", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 84, - "startColumn": 5, - "endLine": 84, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CustomStringFalseEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Resource 'AuroraInstance' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomStringFalseEncryption", + "logicalId": "AuroraInstance", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 90, + "startLine": 4, "startColumn": 5, - "endLine": 90, + "endLine": 4, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "gh-issues/issue-185.yaml": { + "filePath": "gh-issues/issue-185.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "gh-issues/issue-186-clb.json": { + "filePath": "gh-issues/issue-186-clb.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TrueEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TrueEncryption", + "logicalId": "CLBA83A883E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Scheme", "category": "Best Practice", - "startLine": 96, + "startLine": 15, "startColumn": 5, - "endLine": 96, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 15, + "endColumn": 12, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'StringTrueEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Property 'Subnets' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StringTrueEncryption", + "logicalId": "CLBA83A883E", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Subnets", "category": "Best Practice", - "startLine": 102, + "startLine": 19, "startColumn": 5, - "endLine": 102, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ConditionalTrueEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ConditionalTrueEncryption", - "entityType": "Resource", + "endLine": 19, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + } + ] + }, + "gh-issues/issue-186-imagebuilder.json": { + "filePath": "gh-issues/issue-186-imagebuilder.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W3030", + "severity": "WARN", + "message": "'Abort' is not one of ['CONTINUE', 'ABORT']", + "source": "CFN_LINT", + "entity": { + "logicalId": "ImagePipeline7DDDE57F", + "entityType": "Resource", + "resourceType": "AWS::ImageBuilder::ImagePipeline" + }, + "propertyPath": "Properties.Workflows.0.OnFailure", + "category": "Schema", + "startLine": 31, + "startColumn": 7, + "endLine": 31, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", + "ruleDescription": "Value not in allowed enum", + "phase": "SCHEMA", + "context": { + "actualValue": "Abort" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ImagePipeline7DDDE57F", + "entityType": "Resource", + "resourceType": "AWS::ImageBuilder::ImagePipeline" + }, + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 24, + "startColumn": 5, + "endLine": 24, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-imagebuilder.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + } + ] + }, + "gh-issues/issue-194.json": { + "filePath": "gh-issues/issue-194.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'SomeParameter': Default must be a string", + "source": "CFN_LINT", + "entity": { + "logicalId": "SomeParameter", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/SomeParameter/Default", + "category": "Parameter", + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 12, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" + } + ] + }, + "gh-issues/issue-201.json": { + "filePath": "gh-issues/issue-201.json", + "status": "OK", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 2, + "errors": 0, + "warnings": 1, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" + }, + { + "ruleId": "F2002", + "severity": "FATAL", + "message": "Parameter 'MyParam' has invalid Type 'Blimp'", + "source": "SCHEMA", + "entity": { + "logicalId": "MyParam", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/MyParam/Type", + "category": "Parameter", + "startLine": 4, + "startColumn": 7, + "endLine": 4, + "endColumn": 12, + "ruleDescription": "Parameter Type must be valid", + "phase": "SCHEMA" + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'MyParam' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyParam", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/MyParam", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 13, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-226.yaml": { + "filePath": "gh-issues/issue-226.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 4, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E9002", + "severity": "ERROR", + "message": "FromPort 443 is greater than ToPort 80", + "source": "ENGINE", + "entity": { + "logicalId": "InvertedRangeSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.SecurityGroupIngress.0", + "suggestedFix": "Set FromPort to a value less than or equal to ToPort", + "category": "Resource", + "startLine": 26, + "startColumn": 17, + "endLine": 26, + "endColumn": 18, + "ruleDescription": "SecurityGroup FromPort must be <= ToPort for the TCP and UDP protocols", + "phase": "LINT", + "context": { + "actualValue": [ + { + "CidrIp": "10.0.0.0/8", + "IpProtocol": "tcp", + "FromPort": 443, + "ToPort": 80 + } + ] + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PingSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "InvertedRangeSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 24, + "startColumn": 7, + "endLine": 24, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'PingSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "PingSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'InvertedRangeSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "InvertedRangeSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 23, + "startColumn": 5, + "endLine": 23, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-235.yaml": { + "filePath": "gh-issues/issue-235.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 38, + "counts": { + "fatal": 2, + "errors": 0, + "warnings": 20, + "informational": 208, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3003", + "severity": "FATAL", + "message": "'StorageEncrypted' is a required property (from extension)", + "source": "SCHEMA", + "entity": { + "logicalId": "KmsKeyWithoutEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "suggestedFix": "Add 'StorageEncrypted'", + "category": "Schema", + "startLine": 37, + "startColumn": 5, + "endLine": 37, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "F3012", + "severity": "FATAL", + "message": "'invalid' is not of type 'boolean'", + "source": "SCHEMA", + "entity": { + "logicalId": "InvalidEncryptionValue", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Schema", + "startLine": 128, + "startColumn": 7, + "endLine": 128, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Property type mismatch", + "phase": "SCHEMA", + "context": { + "actualValue": "invalid", + "expectedConstraint": "boolean" + } + }, + { + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'SourceDBInstanceAutomatedBackupsArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", + "entity": { + "logicalId": "AutomatedBackupRestore", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.SourceDBInstanceAutomatedBackupsArn", + "category": "Best Practice", + "startLine": 191, + "startColumn": 7, + "endLine": 191, + "endColumn": 42, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'false' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", + "entity": { + "logicalId": "StringFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 51, + "startColumn": 7, + "endLine": 51, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'false' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", + "entity": { + "logicalId": "CustomStringFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 92, + "startColumn": 7, + "endLine": 92, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'true' is not of type 'boolean' - automatically coerced (string to boolean)", + "source": "CFN_LINT", + "entity": { + "logicalId": "StringTrueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 104, + "startColumn": 7, + "endLine": 104, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "Parameter type 'String' may not be compatible with expected type 'boolean'", + "source": "CFN_LINT", + "entity": { + "logicalId": "DynamicEncryptionValue", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 116, + "startColumn": 7, + "endLine": 116, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA", + "context": { + "resolutionSource": "parameter 'DynamicEncryption' (type String)" + } + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "Parameter type 'String' may not be compatible with expected type 'boolean'", + "source": "CFN_LINT", + "entity": { + "logicalId": "DynamicReferenceEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 122, + "startColumn": 7, + "endLine": 122, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA", + "context": { + "resolutionSource": "dynamic (dynamic reference: {{resolve:ssm:/rds/storage-encrypted}})" + } + }, + { + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", + "entity": { + "logicalId": "MissingEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 32, + "startColumn": 5, + "endLine": 32, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" + }, + { + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", + "entity": { + "logicalId": "KmsKeyWithoutEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 37, + "startColumn": 5, + "endLine": 37, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" + }, + { + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", + "entity": { + "logicalId": "FalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 45, + "startColumn": 7, + "endLine": 45, + "endColumn": 23, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" + }, + { + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", + "entity": { + "logicalId": "StringFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 51, + "startColumn": 7, + "endLine": 51, + "endColumn": 23, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" + }, + { + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 57, + "startColumn": 7, + "endLine": 57, + "endColumn": 23, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" + }, + { + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalNoValueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 63, + "startColumn": 7, + "endLine": 63, + "endColumn": 23, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" + }, + { + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", + "entity": { + "logicalId": "AllowedValuesEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 69, + "startColumn": 7, + "endLine": 69, + "endColumn": 23, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" + }, + { + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", + "entity": { + "logicalId": "EngineAllowedValuesMissingEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 73, + "startColumn": 5, + "endLine": 73, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" + }, + { + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalClusterOrStandalone", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 78, + "startColumn": 5, + "endLine": 78, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" + }, + { + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", + "entity": { + "logicalId": "CustomFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 86, + "startColumn": 7, + "endLine": 86, + "endColumn": 23, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" + }, + { + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", + "entity": { + "logicalId": "CustomStringFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 92, + "startColumn": 7, + "endLine": 92, + "endColumn": 23, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" + }, + { + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", + "entity": { + "logicalId": "EmptySnapshotIdentifier", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 159, + "startColumn": 5, + "endLine": 159, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" + }, + { + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", + "entity": { + "logicalId": "WholePropertiesFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 241, + "startColumn": 5, + "endLine": 241, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "AutomatedBackupRestore", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Security", + "startLine": 187, + "startColumn": 3, + "endLine": 187, + "endColumn": 25, + "ruleDescription": "Hardcoded account ID in ARN", + "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": "Cluster", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBCluster" + }, + "category": "Best Practice", + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 10, + "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": "Cluster", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBCluster" + }, + "category": "Best Practice", + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 10, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "MissingEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 30, + "startColumn": 3, + "endLine": 30, + "endColumn": 20, + "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": "MissingEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 30, + "startColumn": 3, + "endLine": 30, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "KmsKeyWithoutEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 35, + "startColumn": 3, + "endLine": 35, + "endColumn": 26, + "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": "KmsKeyWithoutEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 35, + "startColumn": 3, + "endLine": 35, + "endColumn": 26, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "FalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 41, + "startColumn": 3, + "endLine": 41, + "endColumn": 18, + "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": "FalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 41, + "startColumn": 3, + "endLine": 41, + "endColumn": 18, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "StringFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 47, + "startColumn": 3, + "endLine": 47, + "endColumn": 24, + "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": "StringFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 47, + "startColumn": 3, + "endLine": 47, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "ConditionalFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 53, + "startColumn": 3, + "endLine": 53, + "endColumn": 29, + "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": "ConditionalFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 53, + "startColumn": 3, + "endLine": 53, + "endColumn": 29, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "ConditionalNoValueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 59, + "startColumn": 3, + "endLine": 59, + "endColumn": 31, + "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": "ConditionalNoValueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 59, + "startColumn": 3, + "endLine": 59, + "endColumn": 31, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "AllowedValuesEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 65, + "startColumn": 3, + "endLine": 65, + "endColumn": 26, + "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": "AllowedValuesEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 65, + "startColumn": 3, + "endLine": 65, + "endColumn": 26, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "EngineAllowedValuesMissingEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 71, + "startColumn": 3, + "endLine": 71, + "endColumn": 39, + "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": "EngineAllowedValuesMissingEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 71, + "startColumn": 3, + "endLine": 71, + "endColumn": 39, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "ConditionalClusterOrStandalone", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 76, + "startColumn": 3, + "endLine": 76, + "endColumn": 33, + "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": "ConditionalClusterOrStandalone", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 76, + "startColumn": 3, + "endLine": 76, + "endColumn": 33, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "CustomFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 82, + "startColumn": 3, + "endLine": 82, + "endColumn": 24, + "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": "CustomFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 82, + "startColumn": 3, + "endLine": 82, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "CustomStringFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 88, + "startColumn": 3, + "endLine": 88, + "endColumn": 30, + "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": "CustomStringFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 88, + "startColumn": 3, + "endLine": 88, + "endColumn": 30, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "TrueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 94, + "startColumn": 3, + "endLine": 94, + "endColumn": 17, + "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": "TrueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 94, + "startColumn": 3, + "endLine": 94, + "endColumn": 17, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "StringTrueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 100, + "startColumn": 3, + "endLine": 100, + "endColumn": 23, + "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": "StringTrueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 100, + "startColumn": 3, + "endLine": 100, + "endColumn": 23, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "ConditionalTrueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 106, + "startColumn": 3, + "endLine": 106, + "endColumn": 28, + "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": "ConditionalTrueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 106, + "startColumn": 3, + "endLine": 106, + "endColumn": 28, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "DynamicEncryptionValue", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 112, + "startColumn": 3, + "endLine": 112, + "endColumn": 25, + "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": "DynamicEncryptionValue", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 112, + "startColumn": 3, + "endLine": 112, + "endColumn": 25, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "DynamicReferenceEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 118, + "startColumn": 3, + "endLine": 118, + "endColumn": 29, + "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": "DynamicReferenceEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 118, + "startColumn": 3, + "endLine": 118, + "endColumn": 29, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "InvalidEncryptionValue", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 124, + "startColumn": 3, + "endLine": 124, + "endColumn": 25, + "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": "InvalidEncryptionValue", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 124, + "startColumn": 3, + "endLine": 124, + "endColumn": 25, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "DynamicEngineValue", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 130, + "startColumn": 3, + "endLine": 130, + "endColumn": 21, + "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": "DynamicEngineValue", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 130, + "startColumn": 3, + "endLine": 130, + "endColumn": 21, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "AuroraEngine", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 135, + "startColumn": 3, + "endLine": 135, + "endColumn": 15, + "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": "AuroraEngine", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 135, + "startColumn": 3, + "endLine": 135, + "endColumn": 15, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "AuroraAllowedValues", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 140, + "startColumn": 3, + "endLine": 140, + "endColumn": 22, + "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": "AuroraAllowedValues", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 140, + "startColumn": 3, + "endLine": 140, + "endColumn": 22, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "ClusterMember", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 145, + "startColumn": 3, + "endLine": 145, + "endColumn": 16, + "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": "ClusterMember", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 145, + "startColumn": 3, + "endLine": 145, + "endColumn": 16, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "SnapshotRestore", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 151, + "startColumn": 3, + "endLine": 151, + "endColumn": 18, + "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": "SnapshotRestore", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 151, + "startColumn": 3, + "endLine": 151, + "endColumn": 18, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "EmptySnapshotIdentifier", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 157, + "startColumn": 3, + "endLine": 157, + "endColumn": 26, + "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": "EmptySnapshotIdentifier", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 157, + "startColumn": 3, + "endLine": 157, + "endColumn": 26, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "ClusterSnapshotRestore", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 163, + "startColumn": 3, + "endLine": 163, + "endColumn": 25, + "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": "ClusterSnapshotRestore", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 163, + "startColumn": 3, + "endLine": 163, + "endColumn": 25, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "EncryptedSource", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 169, + "startColumn": 3, + "endLine": 169, + "endColumn": 18, + "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": "EncryptedSource", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 169, + "startColumn": 3, + "endLine": 169, + "endColumn": 18, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "SourceInstanceReplica", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 175, + "startColumn": 3, + "endLine": 175, + "endColumn": 24, + "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": "SourceInstanceReplica", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 175, + "startColumn": 3, + "endLine": 175, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "SourceResourceRestore", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 181, + "startColumn": 3, + "endLine": 181, + "endColumn": 24, + "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": "SourceResourceRestore", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 181, + "startColumn": 3, + "endLine": 181, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "AutomatedBackupRestore", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 187, + "startColumn": 3, + "endLine": 187, + "endColumn": 25, + "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": "AutomatedBackupRestore", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 187, + "startColumn": 3, + "endLine": 187, + "endColumn": 25, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "SourceClusterReplica", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 193, + "startColumn": 3, + "endLine": 193, + "endColumn": 23, + "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": "SourceClusterReplica", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 193, + "startColumn": 3, + "endLine": 193, + "endColumn": 23, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "CustomImplicitEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 199, + "startColumn": 3, + "endLine": 199, + "endColumn": 27, + "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": "CustomImplicitEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 199, + "startColumn": 3, + "endLine": 199, + "endColumn": 27, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "CustomTrueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 204, + "startColumn": 3, + "endLine": 204, + "endColumn": 23, + "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": "CustomTrueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 204, + "startColumn": 3, + "endLine": 204, + "endColumn": 23, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "LegacySecurityGroups", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 210, + "startColumn": 3, + "endLine": 210, + "endColumn": 23, + "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": "LegacySecurityGroups", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 210, + "startColumn": 3, + "endLine": 210, + "endColumn": 23, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "CorrelatedClusterOrEncryptedStandalone", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 216, + "startColumn": 3, + "endLine": 216, + "endColumn": 41, + "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": "CorrelatedClusterOrEncryptedStandalone", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 216, + "startColumn": 3, + "endLine": 216, + "endColumn": 41, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "ConditionalSnapshotOrEncryptedStandalone", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 223, + "startColumn": 3, + "endLine": 223, + "endColumn": 43, + "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": "ConditionalSnapshotOrEncryptedStandalone", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 223, + "startColumn": 3, + "endLine": 223, + "endColumn": 43, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "WholePropertiesCorrelated", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 230, + "startColumn": 3, + "endLine": 230, + "endColumn": 28, + "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": "WholePropertiesCorrelated", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 230, + "startColumn": 3, + "endLine": 230, + "endColumn": 28, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "WholePropertiesFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 239, + "startColumn": 3, + "endLine": 239, + "endColumn": 33, + "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": "WholePropertiesFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 239, + "startColumn": 3, + "endLine": 239, + "endColumn": 33, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "DynamicProperties", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 248, + "startColumn": 3, + "endLine": 248, + "endColumn": 20, + "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": "DynamicProperties", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 248, + "startColumn": 3, + "endLine": 248, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "Cluster", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBCluster" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 26, + "startColumn": 5, + "endLine": 26, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "MissingEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 32, + "startColumn": 5, + "endLine": 32, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "KmsKeyWithoutEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 37, + "startColumn": 5, + "endLine": 37, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "FalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 43, + "startColumn": 5, + "endLine": 43, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "StringFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 49, + "startColumn": 5, + "endLine": 49, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "ConditionalFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 55, + "startColumn": 5, + "endLine": 55, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "ConditionalNoValueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 61, + "startColumn": 5, + "endLine": 61, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "AllowedValuesEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 67, + "startColumn": 5, + "endLine": 67, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "ConditionalClusterOrStandalone", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 78, + "startColumn": 5, + "endLine": 78, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "CustomFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 84, + "startColumn": 5, + "endLine": 84, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "CustomStringFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 90, + "startColumn": 5, + "endLine": 90, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "TrueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 96, + "startColumn": 5, + "endLine": 96, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "StringTrueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 102, + "startColumn": 5, + "endLine": 102, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "ConditionalTrueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 108, + "startColumn": 5, + "endLine": 108, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "DynamicEncryptionValue", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 114, + "startColumn": 5, + "endLine": 114, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "DynamicReferenceEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 120, + "startColumn": 5, + "endLine": 120, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "InvalidEncryptionValue", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 126, + "startColumn": 5, + "endLine": 126, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "SnapshotRestore", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 153, + "startColumn": 5, + "endLine": 153, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "EmptySnapshotIdentifier", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 159, + "startColumn": 5, + "endLine": 159, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "ClusterSnapshotRestore", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 165, + "startColumn": 5, + "endLine": 165, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "EncryptedSource", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 171, + "startColumn": 5, + "endLine": 171, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "SourceResourceRestore", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 183, + "startColumn": 5, + "endLine": 183, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "AutomatedBackupRestore", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 189, + "startColumn": 5, + "endLine": 189, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "SourceClusterReplica", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 195, + "startColumn": 5, + "endLine": 195, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "CustomImplicitEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 201, + "startColumn": 5, + "endLine": 201, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "CustomTrueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 206, + "startColumn": 5, + "endLine": 206, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "LegacySecurityGroups", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 212, + "startColumn": 5, + "endLine": 212, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "CorrelatedClusterOrEncryptedStandalone", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 218, + "startColumn": 5, + "endLine": 218, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "ConditionalSnapshotOrEncryptedStandalone", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 225, + "startColumn": 5, + "endLine": 225, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBCluster" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 27, + "startColumn": 7, + "endLine": 27, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBCluster" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 28, + "startColumn": 7, + "endLine": 28, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MissingEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "KmsKeyWithoutEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 38, + "startColumn": 7, + "endLine": 38, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KmsKeyId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "KmsKeyWithoutEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.KmsKeyId", + "category": "Best Practice", + "startLine": 39, + "startColumn": 7, + "endLine": 39, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 44, + "startColumn": 7, + "endLine": 44, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 45, + "startColumn": 7, + "endLine": 45, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "StringFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 50, + "startColumn": 7, + "endLine": 50, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "StringFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 51, + "startColumn": 7, + "endLine": 51, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 56, + "startColumn": 7, + "endLine": 56, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 57, + "startColumn": 7, + "endLine": 57, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseClusterCondition'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalNoValueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 62, + "startColumn": 7, + "endLine": 62, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalNoValueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 63, + "startColumn": 7, + "endLine": 63, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseClusterCondition'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AllowedValuesEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 68, + "startColumn": 7, + "endLine": 68, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AllowedValuesEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 69, + "startColumn": 7, + "endLine": 69, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "EngineAllowedValuesMissingEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 74, + "startColumn": 7, + "endLine": 74, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "parameter with AllowedValues" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalClusterOrStandalone", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 79, + "startColumn": 7, + "endLine": 79, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalClusterOrStandalone", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.DBClusterIdentifier", + "category": "Best Practice", + "startLine": 80, + "startColumn": 7, + "endLine": 80, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseClusterCondition'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CustomFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 85, + "startColumn": 7, + "endLine": 85, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CustomFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 86, + "startColumn": 7, + "endLine": 86, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CustomStringFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 91, + "startColumn": 7, + "endLine": 91, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CustomStringFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 92, + "startColumn": 7, + "endLine": 92, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "TrueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 97, + "startColumn": 7, + "endLine": 97, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "TrueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 98, + "startColumn": 7, + "endLine": 98, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "StringTrueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 103, + "startColumn": 7, + "endLine": 103, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "StringTrueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 104, + "startColumn": 7, + "endLine": 104, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalTrueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 109, + "startColumn": 7, + "endLine": 109, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalTrueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 110, + "startColumn": 7, + "endLine": 110, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseClusterCondition'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "DynamicEncryptionValue", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 115, + "startColumn": 7, + "endLine": 115, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "DynamicEncryptionValue", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 116, + "startColumn": 7, + "endLine": 116, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'DynamicEncryption' (type String)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "DynamicReferenceEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 121, + "startColumn": 7, + "endLine": 121, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "DynamicReferenceEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 122, + "startColumn": 7, + "endLine": 122, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (dynamic reference: {{resolve:ssm:/rds/storage-encrypted}})" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "InvalidEncryptionValue", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 127, + "startColumn": 7, + "endLine": 127, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "InvalidEncryptionValue", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 128, + "startColumn": 7, + "endLine": 128, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "DynamicEngineValue", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 133, + "startColumn": 7, + "endLine": 133, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "parameter 'DynamicEngine' (type String)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AuroraEngine", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 138, + "startColumn": 7, + "endLine": 138, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AuroraAllowedValues", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 143, + "startColumn": 7, + "endLine": 143, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "parameter with AllowedValues" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ClusterMember", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 148, + "startColumn": 7, + "endLine": 148, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ClusterMember", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.DBClusterIdentifier", + "category": "Best Practice", + "startLine": 149, + "startColumn": 7, + "endLine": 149, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Cluster'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SnapshotRestore", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 154, + "startColumn": 7, + "endLine": 154, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DBSnapshotIdentifier' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SnapshotRestore", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.DBSnapshotIdentifier", + "category": "Best Practice", + "startLine": 155, + "startColumn": 7, + "endLine": 155, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "parameter 'SnapshotName' (type String)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "EmptySnapshotIdentifier", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 160, + "startColumn": 7, + "endLine": 160, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DBSnapshotIdentifier' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "EmptySnapshotIdentifier", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.DBSnapshotIdentifier", + "category": "Best Practice", + "startLine": 161, + "startColumn": 7, + "endLine": 161, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ClusterSnapshotRestore", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 166, + "startColumn": 7, + "endLine": 166, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DBClusterSnapshotIdentifier' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ClusterSnapshotRestore", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.DBClusterSnapshotIdentifier", + "category": "Best Practice", + "startLine": 167, + "startColumn": 7, + "endLine": 167, + "endColumn": 34, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "EncryptedSource", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 172, + "startColumn": 7, + "endLine": 172, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "EncryptedSource", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 173, + "startColumn": 7, + "endLine": 173, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SourceInstanceReplica", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 178, + "startColumn": 7, + "endLine": 178, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SourceDBInstanceIdentifier' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SourceInstanceReplica", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.SourceDBInstanceIdentifier", + "category": "Best Practice", + "startLine": 179, + "startColumn": 7, + "endLine": 179, + "endColumn": 33, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'EncryptedSource'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SourceResourceRestore", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 184, + "startColumn": 7, + "endLine": 184, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SourceDbiResourceId' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SourceResourceRestore", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.SourceDbiResourceId", + "category": "Best Practice", + "startLine": 185, + "startColumn": 7, + "endLine": 185, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AutomatedBackupRestore", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 190, + "startColumn": 7, + "endLine": 190, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SourceDBInstanceAutomatedBackupsArn' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AutomatedBackupRestore", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.SourceDBInstanceAutomatedBackupsArn", + "category": "Best Practice", + "startLine": 191, + "startColumn": 7, + "endLine": 191, + "endColumn": 42, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SourceClusterReplica", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 196, + "startColumn": 7, + "endLine": 196, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SourceDBClusterIdentifier' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SourceClusterReplica", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.SourceDBClusterIdentifier", + "category": "Best Practice", + "startLine": 197, + "startColumn": 7, + "endLine": 197, + "endColumn": 32, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'Cluster'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CustomImplicitEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 202, + "startColumn": 7, + "endLine": 202, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CustomTrueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 207, + "startColumn": 7, + "endLine": 207, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CustomTrueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 208, + "startColumn": 7, + "endLine": 208, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "LegacySecurityGroups", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 213, + "startColumn": 7, + "endLine": 213, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CorrelatedClusterOrEncryptedStandalone", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 219, + "startColumn": 7, + "endLine": 219, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CorrelatedClusterOrEncryptedStandalone", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.DBClusterIdentifier", + "category": "Best Practice", + "startLine": 220, + "startColumn": 7, + "endLine": 220, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseClusterCondition'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CorrelatedClusterOrEncryptedStandalone", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 221, + "startColumn": 7, + "endLine": 221, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseClusterCondition'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalSnapshotOrEncryptedStandalone", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 226, + "startColumn": 7, + "endLine": 226, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DBSnapshotIdentifier' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalSnapshotOrEncryptedStandalone", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.DBSnapshotIdentifier", + "category": "Best Practice", + "startLine": 227, + "startColumn": 7, + "endLine": 227, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "Fn::If on condition 'UseClusterCondition'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalSnapshotOrEncryptedStandalone", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "category": "Best Practice", + "startLine": 228, + "startColumn": 7, + "endLine": 228, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseClusterCondition'" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Cluster' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBCluster" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 26, + "startColumn": 5, + "endLine": 26, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MissingEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "MissingEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 32, + "startColumn": 5, + "endLine": 32, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'KmsKeyWithoutEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "KmsKeyWithoutEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 37, + "startColumn": 5, + "endLine": 37, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FalseEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 43, + "startColumn": 5, + "endLine": 43, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'StringFalseEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "StringFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 49, + "startColumn": 5, + "endLine": 49, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ConditionalFalseEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 55, + "startColumn": 5, + "endLine": 55, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ConditionalNoValueEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalNoValueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 61, + "startColumn": 5, + "endLine": 61, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'AllowedValuesEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "AllowedValuesEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 67, + "startColumn": 5, + "endLine": 67, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'EngineAllowedValuesMissingEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "EngineAllowedValuesMissingEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 73, + "startColumn": 5, + "endLine": 73, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ConditionalClusterOrStandalone' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalClusterOrStandalone", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 78, + "startColumn": 5, + "endLine": 78, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CustomFalseEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "CustomFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 84, + "startColumn": 5, + "endLine": 84, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CustomStringFalseEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "CustomStringFalseEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 90, + "startColumn": 5, + "endLine": 90, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TrueEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "TrueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 96, + "startColumn": 5, + "endLine": 96, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'StringTrueEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "StringTrueEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 102, + "startColumn": 5, + "endLine": 102, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ConditionalTrueEncryption' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalTrueEncryption", + "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", @@ -16113,200 +20706,60 @@ "logicalId": "ClusterNodegroupDefaultCapacityDA0920A3", "entityType": "Resource", "resourceType": "AWS::EKS::Nodegroup" - }, - "propertyPath": "Properties.NodeRole", - "category": "Best Practice", - "startLine": 965, - "startColumn": 5, - "endLine": 965, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ClusterNodegroupDefaultCapacityNodeGroupRole55953B04.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Subnets' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ClusterNodegroupDefaultCapacityDA0920A3", - "entityType": "Resource", - "resourceType": "AWS::EKS::Nodegroup" - }, - "propertyPath": "Properties.Subnets", - "category": "Best Practice", - "startLine": 976, - "startColumn": 5, - "endLine": 976, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'UserRoleB7C3739B' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "UserRoleB7C3739B", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 444, - "startColumn": 4, - "endLine": 444, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ClusterKubectlHandlerRole94549F93' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ClusterKubectlHandlerRole94549F93", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 474, - "startColumn": 4, - "endLine": 474, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ClusterControlPlaneSecurityGroupD274242C' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ClusterControlPlaneSecurityGroupD274242C", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 595, - "startColumn": 4, - "endLine": 595, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ClusterCreationRole360249B6' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ClusterCreationRole360249B6", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 616, - "startColumn": 4, - "endLine": 616, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ClusterKubectlReadyBarrier200052AF' of type 'AWS::SSM::Parameter' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ClusterKubectlReadyBarrier200052AF", - "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 882, - "startColumn": 4, - "endLine": 882, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ClusterNodegroupDefaultCapacityNodeGroupRole55953B04' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ClusterNodegroupDefaultCapacityNodeGroupRole55953B04", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + }, + "propertyPath": "Properties.NodeRole", "category": "Best Practice", - "startLine": 896, - "startColumn": 4, - "endLine": 896, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 965, + "startColumn": 5, + "endLine": 965, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt ClusterNodegroupDefaultCapacityNodeGroupRole55953B04.Arn" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ClusterNodegroupDefaultCapacityDA0920A3' of type 'AWS::EKS::Nodegroup' supports Tags but none are configured", + "message": "Property 'Subnets' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { "logicalId": "ClusterNodegroupDefaultCapacityDA0920A3", "entityType": "Resource", "resourceType": "AWS::EKS::Nodegroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Subnets", "category": "Best Practice", - "startLine": 956, - "startColumn": 4, - "endLine": 956, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 976, + "startColumn": 5, + "endLine": 976, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'awscdkawseksClusterResourceProviderNestedStackawscdkawseksClusterResourceProviderNestedStackResource9827C454' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Resource 'UserRoleB7C3739B' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "awscdkawseksClusterResourceProviderNestedStackawscdkawseksClusterResourceProviderNestedStackResource9827C454", + "logicalId": "UserRoleB7C3739B", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1035, + "startLine": 444, "startColumn": 4, - "endLine": 1035, + "endLine": 444, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -16314,359 +20767,175 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'awscdkawseksKubectlProviderNestedStackawscdkawseksKubectlProviderNestedStackResourceA7AEBA6B' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Resource 'ClusterKubectlHandlerRole94549F93' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "awscdkawseksKubectlProviderNestedStackawscdkawseksKubectlProviderNestedStackResourceA7AEBA6B", + "logicalId": "ClusterKubectlHandlerRole94549F93", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1058, + "startLine": 474, "startColumn": 4, - "endLine": 1058, + "endLine": 474, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "gh-issues/issue-54-bare.json": { - "filePath": "gh-issues/issue-54-bare.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'ClusterControlPlaneSecurityGroupD274242C' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "ClusterControlPlaneSecurityGroupD274242C", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 3, - "startColumn": 5, - "endLine": 3, - "endColumn": 12, + "startLine": 595, + "startColumn": 4, + "endLine": 595, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "gh-issues/issue-54-with-ownership.json": { - "filePath": "gh-issues/issue-54-with-ownership.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 1, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W3045", - "severity": "WARN", - "message": "AccessControl property is deprecated. Use bucket policies instead", - "source": "CFN_LINT", - "entity": { - "logicalId": "Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.AccessControl", - "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", - "category": "Deprecation", - "startLine": 6, - "startColumn": 9, - "endLine": 6, - "endColumn": 23, - "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", - "phase": "LINT", - "context": { - "actualValue": "PublicRead" - } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'ClusterCreationRole360249B6' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "ClusterCreationRole360249B6", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, + "startLine": 616, + "startColumn": 4, + "endLine": 616, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "gh-issues/issue-54.json": { - "filePath": "gh-issues/issue-54.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 1, - "informational": 1, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3045", - "severity": "ERROR", - "message": "A bucket with 'AccessControl' set should also have at least one 'OwnershipControl' configured", - "source": "CFN_LINT", - "entity": { - "logicalId": "Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties", - "suggestedFix": "Add OwnershipControls to the bucket when using AccessControl", - "category": "Resource", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Validate AccessControl are set with OwnershipControls", - "phase": "LINT" - }, - { - "ruleId": "W3045", - "severity": "WARN", - "message": "AccessControl property is deprecated. Use bucket policies instead", - "source": "CFN_LINT", - "entity": { - "logicalId": "Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.AccessControl", - "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", - "category": "Deprecation", - "startLine": 6, - "startColumn": 9, - "endLine": 6, - "endColumn": 23, - "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", - "phase": "LINT", - "context": { - "actualValue": "PublicRead" - } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'ClusterKubectlReadyBarrier200052AF' of type 'AWS::SSM::Parameter' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "ClusterKubectlReadyBarrier200052AF", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SSM::Parameter" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, + "startLine": 882, + "startColumn": 4, + "endLine": 882, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "gh-issues/issue-55.json": { - "filePath": "gh-issues/issue-55.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'ClusterNodegroupDefaultCapacityNodeGroupRole55953B04' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "ClusterNodegroupDefaultCapacityNodeGroupRole55953B04", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 18, + "startLine": 896, + "startColumn": 4, + "endLine": 896, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "gh-issues/issue-56.json": { - "filePath": "gh-issues/issue-56.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", + "message": "Resource 'ClusterNodegroupDefaultCapacityDA0920A3' of type 'AWS::EKS::Nodegroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WeakConsumer", + "logicalId": "ClusterNodegroupDefaultCapacityDA0920A3", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::EKS::Nodegroup" }, - "propertyPath": "Properties.TopicName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, - "startColumn": 9, - "endLine": 6, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack output: StackName=\"Stack1\", Region=\"us-east-1\", OutputName=\"PublishOutputFnGetAttMyResourceArn8F315E6B\")" - } + "startLine": 956, + "startColumn": 4, + "endLine": 956, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'WeakConsumer' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'awscdkawseksClusterResourceProviderNestedStackawscdkawseksClusterResourceProviderNestedStackResource9827C454' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WeakConsumer", + "logicalId": "awscdkawseksClusterResourceProviderNestedStackawscdkawseksClusterResourceProviderNestedStackResource9827C454", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::CloudFormation::Stack" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, + "startLine": 1035, + "startColumn": 4, + "endLine": 1035, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "gh-issues/issue-57.json": { - "filePath": "gh-issues/issue-57.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'AReallyAwesomeDistributionWithAMemorableNameThatIWillNeverForget046C0FA9' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", + "message": "Resource 'awscdkawseksKubectlProviderNestedStackawscdkawseksKubectlProviderNestedStackResourceA7AEBA6B' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AReallyAwesomeDistributionWithAMemorableNameThatIWillNeverForget046C0FA9", + "logicalId": "awscdkawseksKubectlProviderNestedStackawscdkawseksKubectlProviderNestedStackResourceA7AEBA6B", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::CloudFormation::Stack" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, + "startLine": 1058, + "startColumn": 4, + "endLine": 1058, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "gh-issues/issue-61.json": { - "filePath": "gh-issues/issue-61.json", + "gh-issues/issue-54-bare.json": { + "filePath": "gh-issues/issue-54-bare.json", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 1, + "fatal": 0, "errors": 0, "warnings": 0, - "informational": 3, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -16674,164 +20943,15 @@ "severityLevel": "DEBUG" }, "diagnostics": [ - { - "ruleId": "F3017", - "severity": "FATAL", - "message": "Value is not valid under any of the 5 anyOf schemas for AWS::EC2::Volume (0 branches matched; at least one is required). Required property combinations: ['AvailabilityZone', 'Size'] or ['AvailabilityZone', 'SnapshotId'] or ['AvailabilityZoneId', 'Size'] or ['AvailabilityZoneId', 'SnapshotId'] or ['SourceVolumeId']. Branch failures: branch 1: 'AvailabilityZone' is a required property, 'Size' is a required property; branch 2: 'AvailabilityZone' is a required property, 'SnapshotId' is a required property; branch 3: 'AvailabilityZoneId' is a required property, 'Size' is a required property; branch 4: 'AvailabilityZoneId' is a required property, 'SnapshotId' is a required property; branch 5: 'SourceVolumeId' is a required property.", - "source": "SCHEMA", - "entity": { - "logicalId": "Resource", - "entityType": "Resource", - "resourceType": "AWS::EC2::Volume" - }, - "propertyPath": "Properties", - "category": "Schema", - "startLine": 3, - "startColumn": 5, - "endLine": 3, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Value not valid under anyOf", - "phase": "SCHEMA", - "context": { - "expectedConstraint": "at least one anyOf branch", - "extra": { - "branchCount": 5, - "branchFailures": [ - { - "branch": 1, - "reasons": [ - { - "message": "'AvailabilityZone' is a required property", - "propertyPath": "Properties" - }, - { - "message": "'Size' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 2, - "reasons": [ - { - "message": "'AvailabilityZone' is a required property", - "propertyPath": "Properties" - }, - { - "message": "'SnapshotId' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 3, - "reasons": [ - { - "message": "'AvailabilityZoneId' is a required property", - "propertyPath": "Properties" - }, - { - "message": "'Size' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 4, - "reasons": [ - { - "message": "'AvailabilityZoneId' is a required property", - "propertyPath": "Properties" - }, - { - "message": "'SnapshotId' is a required property", - "propertyPath": "Properties" - } - ] - }, - { - "branch": 5, - "reasons": [ - { - "message": "'SourceVolumeId' is a required property", - "propertyPath": "Properties" - } - ] - } - ], - "compositionKind": "anyOf", - "matchCount": 0, - "matchOutcome": "zeroMatches", - "validPropertyCombinations": [ - [ - "AvailabilityZone", - "Size" - ], - [ - "AvailabilityZone", - "SnapshotId" - ], - [ - "AvailabilityZoneId", - "Size" - ], - [ - "AvailabilityZoneId", - "SnapshotId" - ], - [ - "SourceVolumeId" - ] - ] - } - } - }, - { - "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": "Resource", - "entityType": "Resource", - "resourceType": "AWS::EC2::Volume" - }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 5, - "endLine": 3, - "endColumn": 14, - "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": "Resource", - "entityType": "Resource", - "resourceType": "AWS::EC2::Volume" - }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 5, - "endLine": 3, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" - }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Resource' of type 'AWS::EC2::Volume' supports Tags but none are configured", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Resource", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::Volume" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -16839,22 +20959,22 @@ "startLine": 3, "startColumn": 5, "endLine": 3, - "endColumn": 14, + "endColumn": 12, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "gh-issues/issue-62.json": { - "filePath": "gh-issues/issue-62.json", + "gh-issues/issue-54-with-ownership.json": { + "filePath": "gh-issues/issue-54-with-ownership.json", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 1, + "fatal": 0, "errors": 0, - "warnings": 2, - "informational": 3, + "warnings": 1, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -16863,120 +20983,119 @@ }, "diagnostics": [ { - "ruleId": "F3032", - "severity": "FATAL", - "message": "expected minimum item count: 1, found: 0", - "source": "SCHEMA", + "ruleId": "W3045", + "severity": "WARN", + "message": "AccessControl property is deprecated. Use bucket policies instead", + "source": "CFN_LINT", "entity": { - "logicalId": "Canary", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Synthetics::Canary" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ResourcesToReplicateTags", - "category": "Schema", - "startLine": 18, + "propertyPath": "Properties.AccessControl", + "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", + "category": "Deprecation", + "startLine": 6, "startColumn": 9, - "endLine": 18, - "endColumn": 34, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-synthetics", - "ruleDescription": "Array item count out of bounds", - "phase": "SCHEMA", + "endLine": 6, + "endColumn": 23, + "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", + "phase": "LINT", "context": { - "extra": { - "actual_count": 0, - "max_items": 1, - "min_items": 1 - } + "actualValue": "PublicRead" } }, { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'ExecutionRoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Canary", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Synthetics::Canary" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ExecutionRoleArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 8, - "startColumn": 9, - "endLine": 8, - "endColumn": 26, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" - }, - { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", - "entity": { - "logicalId": "Canary", - "entityType": "Resource", - "resourceType": "AWS::Synthetics::Canary" - }, - "category": "Security", - "startLine": 3, - "startColumn": 5, - "endLine": 3, - "endColumn": 12, - "ruleDescription": "Hardcoded account ID in ARN", + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "gh-issues/issue-54.json": { + "filePath": "gh-issues/issue-54.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 1, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I3013", - "severity": "INFO", - "message": "'SuccessRetentionPeriod' 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)", + "ruleId": "E3045", + "severity": "ERROR", + "message": "A bucket with 'AccessControl' set should also have at least one 'OwnershipControl' configured", "source": "CFN_LINT", "entity": { - "logicalId": "Canary", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Synthetics::Canary" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties", - "category": "Best Practice", + "suggestedFix": "Add OwnershipControls to the bucket when using AccessControl", + "category": "Resource", "startLine": 5, "startColumn": 7, "endLine": 5, "endColumn": 18, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Validate AccessControl are set with OwnershipControls", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3045", + "severity": "WARN", + "message": "AccessControl property is deprecated. Use bucket policies instead", + "source": "CFN_LINT", "entity": { - "logicalId": "Canary", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Synthetics::Canary" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Name", - "category": "Best Practice", + "propertyPath": "Properties.AccessControl", + "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", + "category": "Deprecation", "startLine": 6, "startColumn": 9, "endLine": 6, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-synthetics", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", + "endColumn": 23, + "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", + "phase": "LINT", "context": { - "lifecycle": "create-only" + "actualValue": "PublicRead" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Canary' of type 'AWS::Synthetics::Canary' supports Tags but none are configured", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Canary", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Synthetics::Canary" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -16990,14 +21109,14 @@ } ] }, - "gh-issues/issue-63.json": { - "filePath": "gh-issues/issue-63.json", + "gh-issues/issue-55.json": { + "filePath": "gh-issues/issue-55.json", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 1, + "errors": 0, "warnings": 0, "informational": 1, "debug": 0 @@ -17008,55 +21127,139 @@ }, "diagnostics": [ { - "ruleId": "E2001", - "severity": "ERROR", - "message": "Parameter 'SomeParameter': Default must be a string", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "SomeParameter", - "entityType": "Parameter" + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Parameters/SomeParameter/Default", - "category": "Parameter", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-56.json": { + "filePath": "gh-issues/issue-56.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "WeakConsumer", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.TopicName", + "category": "Best Practice", + "startLine": 6, + "startColumn": 9, + "endLine": 6, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack output: StackName=\"Stack1\", Region=\"us-east-1\", OutputName=\"PublishOutputFnGetAttMyResourceArn8F315E6B\")" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'WeakConsumer' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "WeakConsumer", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", "startLine": 5, "startColumn": 7, "endLine": 5, - "endColumn": 15, - "ruleDescription": "Parameters have appropriate properties", - "phase": "PARSE" + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-57.json": { + "filePath": "gh-issues/issue-57.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Topic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'AReallyAwesomeDistributionWithAMemorableNameThatIWillNeverForget046C0FA9' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Topic", + "logicalId": "AReallyAwesomeDistributionWithAMemorableNameThatIWillNeverForget046C0FA9", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::CloudFront::Distribution" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 29, + "startLine": 5, "startColumn": 7, - "endLine": 29, + "endLine": 5, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "gh-issues/issue-65.json": { - "filePath": "gh-issues/issue-65.json", + "gh-issues/issue-61.json": { + "filePath": "gh-issues/issue-61.json", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 1, "counts": { - "fatal": 0, + "fatal": 1, "errors": 0, - "warnings": 2, - "informational": 6, + "warnings": 0, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -17065,189 +21268,186 @@ }, "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyLambda", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 7, - "startColumn": 9, - "endLine": 7, - "endColumn": 17, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" - } - }, - { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", + "ruleId": "F3017", + "severity": "FATAL", + "message": "Value is not valid under any of the 5 anyOf schemas for AWS::EC2::Volume (0 branches matched; at least one is required). Required property combinations: ['AvailabilityZone', 'Size'] or ['AvailabilityZone', 'SnapshotId'] or ['AvailabilityZoneId', 'Size'] or ['AvailabilityZoneId', 'SnapshotId'] or ['SourceVolumeId']. Branch failures: branch 1: 'AvailabilityZone' is a required property, 'Size' is a required property; branch 2: 'AvailabilityZone' is a required property, 'SnapshotId' is a required property; branch 3: 'AvailabilityZoneId' is a required property, 'Size' is a required property; branch 4: 'AvailabilityZoneId' is a required property, 'SnapshotId' is a required property; branch 5: 'SourceVolumeId' is a required property.", + "source": "SCHEMA", "entity": { - "logicalId": "MyLambda", + "logicalId": "Resource", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Volume" }, - "category": "Security", + "propertyPath": "Properties", + "category": "Schema", "startLine": 3, "startColumn": 5, "endLine": 3, "endColumn": 14, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyLambda", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 6, - "startColumn": 9, - "endLine": 6, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "S3Permission", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 18, - "startColumn": 9, - "endLine": 18, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "S3Permission", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 19, - "startColumn": 9, - "endLine": 19, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Value not valid under anyOf", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyLambda'" + "expectedConstraint": "at least one anyOf branch", + "extra": { + "branchCount": 5, + "branchFailures": [ + { + "branch": 1, + "reasons": [ + { + "message": "'AvailabilityZone' is a required property", + "propertyPath": "Properties" + }, + { + "message": "'Size' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 2, + "reasons": [ + { + "message": "'AvailabilityZone' is a required property", + "propertyPath": "Properties" + }, + { + "message": "'SnapshotId' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 3, + "reasons": [ + { + "message": "'AvailabilityZoneId' is a required property", + "propertyPath": "Properties" + }, + { + "message": "'Size' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 4, + "reasons": [ + { + "message": "'AvailabilityZoneId' is a required property", + "propertyPath": "Properties" + }, + { + "message": "'SnapshotId' is a required property", + "propertyPath": "Properties" + } + ] + }, + { + "branch": 5, + "reasons": [ + { + "message": "'SourceVolumeId' is a required property", + "propertyPath": "Properties" + } + ] + } + ], + "compositionKind": "anyOf", + "matchCount": 0, + "matchOutcome": "zeroMatches", + "validPropertyCombinations": [ + [ + "AvailabilityZone", + "Size" + ], + [ + "AvailabilityZone", + "SnapshotId" + ], + [ + "AvailabilityZoneId", + "Size" + ], + [ + "AvailabilityZoneId", + "SnapshotId" + ], + [ + "SourceVolumeId" + ] + ] + } } }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "S3Permission", + "logicalId": "Resource", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Volume" }, - "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 20, - "startColumn": 9, - "endLine": 20, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'SourceAccount' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "S3Permission", + "logicalId": "Resource", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Volume" }, - "propertyPath": "Properties.SourceAccount", "category": "Best Practice", - "startLine": 21, - "startColumn": 9, - "endLine": 21, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'Resource' of type 'AWS::EC2::Volume' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyLambda", + "logicalId": "Resource", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Volume" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 14, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "gh-issues/issue-67.json": { - "filePath": "gh-issues/issue-67.json", + "gh-issues/issue-62.json": { + "filePath": "gh-issues/issue-62.json", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 0, + "fatal": 1, "errors": 0, - "warnings": 0, - "informational": 2, + "warnings": 2, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -17256,237 +21456,228 @@ }, "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3032", + "severity": "FATAL", + "message": "expected minimum item count: 1, found: 0", + "source": "SCHEMA", "entity": { - "logicalId": "PromAlarm", + "logicalId": "Canary", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Synthetics::Canary" }, - "propertyPath": "Properties.AlarmName", - "category": "Best Practice", - "startLine": 6, + "propertyPath": "Properties.ResourcesToReplicateTags", + "category": "Schema", + "startLine": 18, "startColumn": 9, - "endLine": 6, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 18, + "endColumn": 34, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-synthetics", + "ruleDescription": "Array item count out of bounds", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "extra": { + "actual_count": 0, + "max_items": 1, + "min_items": 1 + } } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'PromAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'ExecutionRoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", "source": "ENGINE", "entity": { - "logicalId": "PromAlarm", + "logicalId": "Canary", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Synthetics::Canary" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ExecutionRoleArn", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", + "startLine": 8, + "startColumn": 9, + "endLine": 8, + "endColumn": 26, + "ruleDescription": "Hardcoded ARN property", "phase": "LINT" - } - ] - }, - "gh-issues/issue-68.json": { - "filePath": "gh-issues/issue-68.json", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 4, - "informational": 4, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3677", - "severity": "ERROR", - "message": "Runtime 'node99.x' is not supported with Code.ZipFile - use nodejs or python", - "source": "CFN_LINT", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", "entity": { - "logicalId": "FutureNodeFunc", + "logicalId": "Canary", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Synthetics::Canary" }, - "category": "Resource", - "startLine": 16, + "category": "Security", + "startLine": 3, "startColumn": 5, - "endLine": 16, - "endColumn": 20, - "ruleDescription": "Lambda ZipFile requires nodejs or python runtime", + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, { - "ruleId": "W3030", - "severity": "WARN", - "message": "'nodejs99.x' is not one of ['dotnet10', 'dotnet6', 'dotnet8', 'dotnetcore1.0', 'dotnetcore2.0', 'dotnetcore2.1', 'dotnetcore3.1', 'go1.x', 'java11', 'java11.al2023', 'java17', 'java17.al2023', 'java21', 'java25', 'java8', 'java8.al2', 'java8.al2023', 'nodejs', 'nodejs10.x', 'nodejs12.x', 'nodejs14.x', 'nodejs16.x', 'nodejs18.x', 'nodejs20.x', 'nodejs22.x', 'nodejs24.x', 'nodejs26.x', 'nodejs4.3', 'nodejs4.3-edge', 'nodejs6.10', 'nodejs8.10', 'provided', 'provided.al2', 'provided.al2023', 'python2.7', 'python3.10', 'python3.11', 'python3.12', 'python3.13', 'python3.14', 'python3.15', 'python3.6', 'python3.7', 'python3.8', 'python3.9', 'ruby2.5', 'ruby2.7', 'ruby3.2', 'ruby3.3', 'ruby3.4', 'ruby4.0']", + "ruleId": "I3013", + "severity": "INFO", + "message": "'SuccessRetentionPeriod' 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": "MyFunc", + "logicalId": "Canary", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Synthetics::Canary" }, - "propertyPath": "Properties.Runtime", - "category": "Schema", - "startLine": 10, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Canary", + "entityType": "Resource", + "resourceType": "AWS::Synthetics::Canary" + }, + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 6, "startColumn": 9, - "endLine": 10, - "endColumn": 17, - "ruleDescription": "Value not in allowed enum", + "endLine": 6, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-synthetics", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs99.x", - "extra": { - "allowed_values": [ - "dotnet10", - "dotnet6", - "dotnet8", - "dotnetcore1.0", - "dotnetcore2.0", - "dotnetcore2.1", - "dotnetcore3.1", - "go1.x", - "java11", - "java11.al2023", - "java17", - "java17.al2023", - "java21", - "java25", - "java8", - "java8.al2", - "java8.al2023", - "nodejs", - "nodejs10.x", - "nodejs12.x", - "nodejs14.x", - "nodejs16.x", - "nodejs18.x", - "nodejs20.x", - "nodejs22.x", - "nodejs24.x", - "nodejs26.x", - "nodejs4.3", - "nodejs4.3-edge", - "nodejs6.10", - "nodejs8.10", - "provided", - "provided.al2", - "provided.al2023", - "python2.7", - "python3.10", - "python3.11", - "python3.12", - "python3.13", - "python3.14", - "python3.15", - "python3.6", - "python3.7", - "python3.8", - "python3.9", - "ruby2.5", - "ruby2.7", - "ruby3.2", - "ruby3.3", - "ruby3.4", - "ruby4.0" - ] - } + "lifecycle": "create-only" } }, { - "ruleId": "W3030", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Canary' of type 'AWS::Synthetics::Canary' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Canary", + "entityType": "Resource", + "resourceType": "AWS::Synthetics::Canary" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-63.json": { + "filePath": "gh-issues/issue-63.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E2001", + "severity": "ERROR", + "message": "Parameter 'SomeParameter': Default must be a string", + "source": "CFN_LINT", + "entity": { + "logicalId": "SomeParameter", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/SomeParameter/Default", + "category": "Parameter", + "startLine": 5, + "startColumn": 7, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Parameters have appropriate properties", + "phase": "PARSE" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Topic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Topic", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 29, + "startColumn": 7, + "endLine": 29, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-65.json": { + "filePath": "gh-issues/issue-65.json", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 6, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2531", "severity": "WARN", - "message": "'node99.x' is not one of ['dotnet10', 'dotnet6', 'dotnet8', 'dotnetcore1.0', 'dotnetcore2.0', 'dotnetcore2.1', 'dotnetcore3.1', 'go1.x', 'java11', 'java11.al2023', 'java17', 'java17.al2023', 'java21', 'java25', 'java8', 'java8.al2', 'java8.al2023', 'nodejs', 'nodejs10.x', 'nodejs12.x', 'nodejs14.x', 'nodejs16.x', 'nodejs18.x', 'nodejs20.x', 'nodejs22.x', 'nodejs24.x', 'nodejs26.x', 'nodejs4.3', 'nodejs4.3-edge', 'nodejs6.10', 'nodejs8.10', 'provided', 'provided.al2', 'provided.al2023', 'python2.7', 'python3.10', 'python3.11', 'python3.12', 'python3.13', 'python3.14', 'python3.15', 'python3.6', 'python3.7', 'python3.8', 'python3.9', 'ruby2.5', 'ruby2.7', 'ruby3.2', 'ruby3.3', 'ruby3.4', 'ruby4.0']", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "FutureNodeFunc", + "logicalId": "MyLambda", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", - "category": "Schema", - "startLine": 22, + "category": "Deprecation", + "startLine": 7, "startColumn": 9, - "endLine": 22, + "endLine": 7, "endColumn": 17, - "ruleDescription": "Value not in allowed enum", + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "actualValue": "node99.x", - "extra": { - "allowed_values": [ - "dotnet10", - "dotnet6", - "dotnet8", - "dotnetcore1.0", - "dotnetcore2.0", - "dotnetcore2.1", - "dotnetcore3.1", - "go1.x", - "java11", - "java11.al2023", - "java17", - "java17.al2023", - "java21", - "java25", - "java8", - "java8.al2", - "java8.al2023", - "nodejs", - "nodejs10.x", - "nodejs12.x", - "nodejs14.x", - "nodejs16.x", - "nodejs18.x", - "nodejs20.x", - "nodejs22.x", - "nodejs24.x", - "nodejs26.x", - "nodejs4.3", - "nodejs4.3-edge", - "nodejs6.10", - "nodejs8.10", - "provided", - "provided.al2", - "provided.al2023", - "python2.7", - "python3.10", - "python3.11", - "python3.12", - "python3.13", - "python3.14", - "python3.15", - "python3.6", - "python3.7", - "python3.8", - "python3.9", - "ruby2.5", - "ruby2.7", - "ruby3.2", - "ruby3.3", - "ruby3.4", - "ruby4.0" - ] - } + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, { @@ -17495,52 +21686,56 @@ "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "MyFunc", + "logicalId": "MyLambda", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "category": "Security", - "startLine": 4, + "startLine": 3, "startColumn": 5, - "endLine": 4, - "endColumn": 12, + "endLine": 3, + "endColumn": 14, "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FutureNodeFunc", + "logicalId": "MyLambda", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "category": "Security", - "startLine": 16, - "startColumn": 5, - "endLine": 16, - "endColumn": 20, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 6, + "startColumn": 9, + "endLine": 6, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyFunc", + "logicalId": "S3Permission", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 7, + "startLine": 18, "startColumn": 9, - "endLine": 7, - "endColumn": 22, + "endLine": 18, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -17553,9 +21748,9 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FutureNodeFunc", + "logicalId": "S3Permission", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::Permission" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", @@ -17565,62 +21760,87 @@ "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyLambda'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "S3Permission", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 20, + "startColumn": 9, + "endLine": 20, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyFunc' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'SourceAccount' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyFunc", + "logicalId": "S3Permission", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SourceAccount", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 21, + "startColumn": 9, + "endLine": 21, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FutureNodeFunc' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'MyLambda' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FutureNodeFunc", + "logicalId": "MyLambda", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 18, + "startLine": 5, "startColumn": 7, - "endLine": 18, + "endLine": 5, "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "gh-issues/issue-69.yaml": { - "filePath": "gh-issues/issue-69.yaml", + "gh-issues/issue-67.json": { + "filePath": "gh-issues/issue-67.json", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 2, + "fatal": 0, "errors": 0, "warnings": 0, - "informational": 0, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -17629,68 +21849,60 @@ }, "diagnostics": [ { - "ruleId": "F3032", - "severity": "FATAL", - "message": "expected maximum item count: 1, found: 2", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Profile", + "logicalId": "PromAlarm", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::CloudWatch::Alarm" }, - "propertyPath": "Properties.Roles", - "category": "Schema", + "propertyPath": "Properties.AlarmName", + "category": "Best Practice", "startLine": 6, - "startColumn": 7, + "startColumn": 9, "endLine": 6, - "endColumn": 12, - "ruleDescription": "Array item count out of bounds", + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "extra": { - "actual_count": 2, - "max_items": 1, - "min_items": 0 - } + "lifecycle": "create-only" } }, { - "ruleId": "F3037", - "severity": "FATAL", - "message": "Array items are not unique", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'PromAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Profile", + "logicalId": "PromAlarm", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::CloudWatch::Alarm" }, - "propertyPath": "Properties.Roles", - "category": "Schema", - "startLine": 6, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, "startColumn": 7, - "endLine": 6, - "endColumn": 12, - "ruleDescription": "Array items not unique", - "phase": "SCHEMA", - "context": { - "actualValue": [ - "arn:aws:iam::012345678901:role/SameRole", - "arn:aws:iam::012345678901:role/SameRole" - ] - } + "endLine": 5, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "good/E3019_identity_no_false_positive.yaml": { - "filePath": "good/E3019_identity_no_false_positive.yaml", + "gh-issues/issue-68.json": { + "filePath": "gh-issues/issue-68.json", "status": "OK", "metadata": { - "resourcesScanned": 5, + "resourcesScanned": 2, "counts": { "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 10, + "errors": 1, + "warnings": 4, + "informational": 4, "debug": 0 }, "suppressed": 0, @@ -17699,385 +21911,371 @@ }, "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BucketA", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 13, - "startColumn": 18, - "endLine": 13, - "endColumn": 28, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'NameA' (type String)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3677", + "severity": "ERROR", + "message": "Runtime 'node99.x' is not supported with Code.ZipFile - use nodejs or python", + "source": "CFN_LINT", "entity": { - "logicalId": "BucketB", + "logicalId": "FutureNodeFunc", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", + "category": "Resource", "startLine": 16, - "startColumn": 18, + "startColumn": 5, "endLine": 16, - "endColumn": 28, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'NameB' (type String)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CompoundSub", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 20, - "startColumn": 18, - "endLine": 20, - "endColumn": 28, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:${NameA}-suffix)" - } + "endColumn": 20, + "ruleDescription": "Lambda ZipFile requires nodejs or python runtime", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3030", + "severity": "WARN", + "message": "'nodejs99.x' is not one of ['dotnet10', 'dotnet6', 'dotnet8', 'dotnetcore1.0', 'dotnetcore2.0', 'dotnetcore2.1', 'dotnetcore3.1', 'go1.x', 'java11', 'java11.al2023', 'java17', 'java17.al2023', 'java21', 'java25', 'java8', 'java8.al2', 'java8.al2023', 'nodejs', 'nodejs10.x', 'nodejs12.x', 'nodejs14.x', 'nodejs16.x', 'nodejs18.x', 'nodejs20.x', 'nodejs22.x', 'nodejs24.x', 'nodejs26.x', 'nodejs4.3', 'nodejs4.3-edge', 'nodejs6.10', 'nodejs8.10', 'provided', 'provided.al2', 'provided.al2023', 'python2.7', 'python3.10', 'python3.11', 'python3.12', 'python3.13', 'python3.14', 'python3.15', 'python3.6', 'python3.7', 'python3.8', 'python3.9', 'ruby2.5', 'ruby2.7', 'ruby3.2', 'ruby3.3', 'ruby3.4', 'ruby4.0']", + "source": "CFN_LINT", "entity": { - "logicalId": "ConditionalLeft", + "logicalId": "MyFunc", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 25, - "startColumn": 18, - "endLine": 25, - "endColumn": 28, - "ruleDescription": "Create-only property updated triggers resource replacement", + "propertyPath": "Properties.Runtime", + "category": "Schema", + "startLine": 10, + "startColumn": 9, + "endLine": 10, + "endColumn": 17, + "ruleDescription": "Value not in allowed enum", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs99.x", + "extra": { + "allowed_values": [ + "dotnet10", + "dotnet6", + "dotnet8", + "dotnetcore1.0", + "dotnetcore2.0", + "dotnetcore2.1", + "dotnetcore3.1", + "go1.x", + "java11", + "java11.al2023", + "java17", + "java17.al2023", + "java21", + "java25", + "java8", + "java8.al2", + "java8.al2023", + "nodejs", + "nodejs10.x", + "nodejs12.x", + "nodejs14.x", + "nodejs16.x", + "nodejs18.x", + "nodejs20.x", + "nodejs22.x", + "nodejs24.x", + "nodejs26.x", + "nodejs4.3", + "nodejs4.3-edge", + "nodejs6.10", + "nodejs8.10", + "provided", + "provided.al2", + "provided.al2023", + "python2.7", + "python3.10", + "python3.11", + "python3.12", + "python3.13", + "python3.14", + "python3.15", + "python3.6", + "python3.7", + "python3.8", + "python3.9", + "ruby2.5", + "ruby2.7", + "ruby3.2", + "ruby3.3", + "ruby3.4", + "ruby4.0" + ] + } } }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + { + "ruleId": "W3030", + "severity": "WARN", + "message": "'node99.x' is not one of ['dotnet10', 'dotnet6', 'dotnet8', 'dotnetcore1.0', 'dotnetcore2.0', 'dotnetcore2.1', 'dotnetcore3.1', 'go1.x', 'java11', 'java11.al2023', 'java17', 'java17.al2023', 'java21', 'java25', 'java8', 'java8.al2', 'java8.al2023', 'nodejs', 'nodejs10.x', 'nodejs12.x', 'nodejs14.x', 'nodejs16.x', 'nodejs18.x', 'nodejs20.x', 'nodejs22.x', 'nodejs24.x', 'nodejs26.x', 'nodejs4.3', 'nodejs4.3-edge', 'nodejs6.10', 'nodejs8.10', 'provided', 'provided.al2', 'provided.al2023', 'python2.7', 'python3.10', 'python3.11', 'python3.12', 'python3.13', 'python3.14', 'python3.15', 'python3.6', 'python3.7', 'python3.8', 'python3.9', 'ruby2.5', 'ruby2.7', 'ruby3.2', 'ruby3.3', 'ruby3.4', 'ruby4.0']", + "source": "CFN_LINT", "entity": { - "logicalId": "ConditionalRight", + "logicalId": "FutureNodeFunc", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 29, - "startColumn": 18, - "endLine": 29, - "endColumn": 28, - "ruleDescription": "Create-only property updated triggers resource replacement", + "propertyPath": "Properties.Runtime", + "category": "Schema", + "startLine": 22, + "startColumn": 9, + "endLine": 22, + "endColumn": 17, + "ruleDescription": "Value not in allowed enum", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "node99.x", + "extra": { + "allowed_values": [ + "dotnet10", + "dotnet6", + "dotnet8", + "dotnetcore1.0", + "dotnetcore2.0", + "dotnetcore2.1", + "dotnetcore3.1", + "go1.x", + "java11", + "java11.al2023", + "java17", + "java17.al2023", + "java21", + "java25", + "java8", + "java8.al2", + "java8.al2023", + "nodejs", + "nodejs10.x", + "nodejs12.x", + "nodejs14.x", + "nodejs16.x", + "nodejs18.x", + "nodejs20.x", + "nodejs22.x", + "nodejs24.x", + "nodejs26.x", + "nodejs4.3", + "nodejs4.3-edge", + "nodejs6.10", + "nodejs8.10", + "provided", + "provided.al2", + "provided.al2023", + "python2.7", + "python3.10", + "python3.11", + "python3.12", + "python3.13", + "python3.14", + "python3.15", + "python3.6", + "python3.7", + "python3.8", + "python3.9", + "ruby2.5", + "ruby2.7", + "ruby3.2", + "ruby3.3", + "ruby3.4", + "ruby4.0" + ] + } } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BucketA' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "BucketA", + "logicalId": "MyFunc", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 13, + "category": "Security", + "startLine": 4, "startColumn": 5, - "endLine": 13, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endLine": 4, + "endColumn": 12, + "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BucketB' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "BucketB", + "logicalId": "FutureNodeFunc", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", + "category": "Security", "startLine": 16, "startColumn": 5, "endLine": 16, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CompoundSub' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CompoundSub", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ConditionalLeft' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ConditionalLeft", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "endColumn": 20, + "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ConditionalRight' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalRight", + "logicalId": "MyFunc", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 29, - "startColumn": 5, - "endLine": 29, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/E3022_multi_element_join_distinct.yaml": { - "filePath": "good/E3022_multi_element_join_distinct.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 6, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "MultiElementJoinA", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.SubnetId.Fn::Join", - "category": "Intrinsic Function", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "MultiElementJoinB", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.SubnetId.Fn::Join", - "category": "Intrinsic Function", - "startLine": 15, - "startColumn": 7, - "endLine": 15, - "endColumn": 15, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "startLine": 7, + "startColumn": 9, + "endLine": 7, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MultiElementJoinA", + "logicalId": "FutureNodeFunc", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 19, + "startColumn": 9, + "endLine": 19, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyFunc' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MultiElementJoinA", + "logicalId": "MyFunc", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, + "startLine": 6, "startColumn": 7, - "endLine": 10, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:{dynamic}-a)", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "endLine": 6, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'FutureNodeFunc' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MultiElementJoinB", + "logicalId": "FutureNodeFunc", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 14, + "startLine": 18, "startColumn": 7, - "endLine": 14, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 18, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "gh-issues/issue-69.yaml": { + "filePath": "gh-issues/issue-69.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 2, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3032", + "severity": "FATAL", + "message": "expected maximum item count: 1, found: 2", + "source": "SCHEMA", + "entity": { + "logicalId": "Profile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "Properties.Roles", + "category": "Schema", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 12, + "ruleDescription": "Array item count out of bounds", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", "extra": { - "replacement_strategy": "delete_then_create" + "actual_count": 2, + "max_items": 1, + "min_items": 0 } } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3037", + "severity": "FATAL", + "message": "Array items are not unique", + "source": "SCHEMA", "entity": { - "logicalId": "MultiElementJoinB", + "logicalId": "Profile", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 15, + "propertyPath": "Properties.Roles", + "category": "Schema", + "startLine": 6, "startColumn": 7, - "endLine": 15, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 6, + "endColumn": 12, + "ruleDescription": "Array items not unique", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:{dynamic}-b)", - "extra": { - "replacement_strategy": "delete_then_create" - } + "actualValue": [ + "arn:aws:iam::012345678901:role/SameRole", + "arn:aws:iam::012345678901:role/SameRole" + ] } } ] }, - "good/E3031_cognito_user_pool_domain_pattern.yaml": { - "filePath": "good/E3031_cognito_user_pool_domain_pattern.yaml", + "good/E3019_identity_no_false_positive.yaml": { + "filePath": "good/E3019_identity_no_false_positive.yaml", "status": "OK", "metadata": { "resourcesScanned": 5, @@ -18085,7 +22283,7 @@ "fatal": 0, "errors": 0, "warnings": 0, - "informational": 8, + "informational": 10, "debug": 0 }, "suppressed": 0, @@ -18096,91 +22294,110 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HostedUiPrefix", + "logicalId": "BucketA", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.UserPoolId", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 18, - "startColumn": 7, - "endLine": 18, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 13, + "startColumn": 18, + "endLine": 13, + "endColumn": 28, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserPool'" + "resolutionSource": "parameter 'NameA' (type String)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Domain' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HostedUiPrefix", + "logicalId": "BucketB", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Domain", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 19, - "startColumn": 7, - "endLine": 19, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 16, + "startColumn": 18, + "endLine": 16, + "endColumn": 28, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter 'NameB' (type String)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SingleCharacterPrefix", + "logicalId": "CompoundSub", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.UserPoolId", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 20, + "startColumn": 18, + "endLine": 20, + "endColumn": 28, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserPool'" + "resolutionSource": "dynamic (Sub:${NameA}-suffix)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Domain' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SingleCharacterPrefix", + "logicalId": "ConditionalLeft", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Domain", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 24, - "startColumn": 7, - "endLine": 24, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 25, + "startColumn": 18, + "endLine": 25, + "endColumn": 28, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalRight", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.BucketName", + "category": "Best Practice", + "startLine": 29, + "startColumn": 18, + "endLine": 29, + "endColumn": 28, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -18188,130 +22405,117 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BucketA' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "BucketA", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", + "message": "Resource 'BucketB' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomDomain", + "logicalId": "BucketB", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.UserPoolId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserPool'" - } + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Domain' is create-only; updating it will cause resource replacement", + "message": "Resource 'CompoundSub' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomDomain", + "logicalId": "CompoundSub", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Domain", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 29, - "startColumn": 7, - "endLine": 29, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 20, + "startColumn": 5, + "endLine": 20, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", + "message": "Resource 'ConditionalLeft' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConditionallyCustomDomain", + "logicalId": "ConditionalLeft", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.UserPoolId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'UserPool'" - } + "startLine": 25, + "startColumn": 5, + "endLine": 25, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Domain' is create-only; updating it will cause resource replacement", + "message": "Resource 'ConditionalRight' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConditionallyCustomDomain", + "logicalId": "ConditionalRight", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPoolDomain" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Domain", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 36, - "startColumn": 7, - "endLine": 36, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseCustomDomain'" - } + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "good/E3663_custom_environment_key.yaml": { - "filePath": "good/E3663_custom_environment_key.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "good/E3680_alb_subnet_counts.yaml": { - "filePath": "good/E3680_alb_subnet_counts.yaml", + "good/E3022_multi_element_join_distinct.yaml": { + "filePath": "good/E3022_multi_element_join_distinct.yaml", "status": "OK", "metadata": { - "resourcesScanned": 9, + "resourcesScanned": 2, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 19, + "informational": 6, "debug": 0 }, "suppressed": 0, @@ -18320,226 +22524,209 @@ }, "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Vpc", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SubnetA", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 21, - "startColumn": 7, - "endLine": 21, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" - } - }, - { - "ruleId": "I9001", + "ruleId": "I1022", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", "entity": { - "logicalId": "SubnetA", + "logicalId": "MultiElementJoinA", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 22, + "propertyPath": "Properties.SubnetId.Fn::Join", + "category": "Intrinsic Function", + "startLine": 10, "startColumn": 7, - "endLine": 22, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I1022", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", "entity": { - "logicalId": "SubnetB", + "logicalId": "MultiElementJoinB", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 26, + "propertyPath": "Properties.SubnetId.Fn::Join", + "category": "Intrinsic Function", + "startLine": 15, "startColumn": 7, - "endLine": 26, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" - } + "endLine": 15, + "endColumn": 15, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "MultiElementJoinA", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 27, + "startLine": 9, "startColumn": 7, - "endLine": 27, - "endColumn": 16, + "endLine": 9, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AlbTwoSubnets", + "logicalId": "MultiElementJoinA", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 31, + "startLine": 10, "startColumn": 7, - "endLine": 31, - "endColumn": 11, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endLine": 10, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:{dynamic}-a)", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AlbSubnetsFromParameter", + "logicalId": "MultiElementJoinB", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 44, + "startLine": 14, "startColumn": 7, - "endLine": 44, - "endColumn": 11, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endLine": 14, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NlbOneSubnet", + "logicalId": "MultiElementJoinB", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 49, + "startLine": 15, "startColumn": 7, - "endLine": 49, - "endColumn": 11, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endLine": 15, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:{dynamic}-b)", + "extra": { + "replacement_strategy": "delete_then_create" + } } + } + ] + }, + "good/E3031_cognito_user_pool_domain_pattern.yaml": { + "filePath": "good/E3031_cognito_user_pool_domain_pattern.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 8, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GatewayOneSubnet", + "logicalId": "HostedUiPrefix", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::Cognito::UserPoolDomain" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.UserPoolId", "category": "Best Practice", - "startLine": 55, + "startLine": 18, "startColumn": 7, - "endLine": 55, - "endColumn": 11, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endLine": 18, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserPool'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'Domain' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ParameterTypedOneSubnet", + "logicalId": "HostedUiPrefix", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::Cognito::UserPoolDomain" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.Domain", "category": "Best Practice", - "startLine": 61, + "startLine": 19, "startColumn": 7, - "endLine": 61, - "endColumn": 11, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "endLine": 19, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -18547,258 +22734,177 @@ } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Vpc", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 16, - "startColumn": 5, - "endLine": 16, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SubnetA' of type 'AWS::EC2::Subnet' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SubnetA", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SubnetB' of type 'AWS::EC2::Subnet' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SubnetB", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'AlbTwoSubnets' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "AlbTwoSubnets", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 30, - "startColumn": 5, - "endLine": 30, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'AlbDefaultTypeTwoSubnetMappings' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "AlbDefaultTypeTwoSubnetMappings", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 37, - "startColumn": 5, - "endLine": 37, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'AlbSubnetsFromParameter' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AlbSubnetsFromParameter", + "logicalId": "SingleCharacterPrefix", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::Cognito::UserPoolDomain" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.UserPoolId", "category": "Best Practice", - "startLine": 43, - "startColumn": 5, - "endLine": 43, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserPool'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'NlbOneSubnet' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "message": "Property 'Domain' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NlbOneSubnet", + "logicalId": "SingleCharacterPrefix", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::Cognito::UserPoolDomain" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Domain", "category": "Best Practice", - "startLine": 48, - "startColumn": 5, - "endLine": 48, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 24, + "startColumn": 7, + "endLine": 24, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'GatewayOneSubnet' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GatewayOneSubnet", + "logicalId": "CustomDomain", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::Cognito::UserPoolDomain" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.UserPoolId", "category": "Best Practice", - "startLine": 54, - "startColumn": 5, - "endLine": 54, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 28, + "startColumn": 7, + "endLine": 28, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserPool'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ParameterTypedOneSubnet' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "message": "Property 'Domain' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ParameterTypedOneSubnet", + "logicalId": "CustomDomain", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::Cognito::UserPoolDomain" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Domain", "category": "Best Practice", - "startLine": 60, - "startColumn": 5, - "endLine": 60, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/E9001_aws_cdk_metadata.yaml": { - "filePath": "good/E9001_aws_cdk_metadata.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 + "startLine": 29, + "startColumn": 7, + "endLine": 29, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'UserPoolId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "ConditionallyCustomDomain", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Cognito::UserPoolDomain" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.UserPoolId", "category": "Best Practice", - "startLine": 18, + "startLine": 35, "startColumn": 7, - "endLine": 18, + "endLine": 35, "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'UserPool'" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'Domain' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "ConditionallyCustomDomain", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Cognito::UserPoolDomain" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Domain", "category": "Best Practice", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 36, + "startColumn": 7, + "endLine": 36, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseCustomDomain'" + } } ] }, - "good/E9002_port_range_exemptions.yaml": { - "filePath": "good/E9002_port_range_exemptions.yaml", + "good/E3663_custom_environment_key.yaml": { + "filePath": "good/E3663_custom_environment_key.yaml", "status": "OK", "metadata": { - "resourcesScanned": 5, + "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 20, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "good/E3680_alb_subnet_counts.yaml": { + "filePath": "good/E3680_alb_subnet_counts.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 9, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 19, "debug": 0 }, "suppressed": 0, @@ -18818,9 +22924,9 @@ }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 10, + "startLine": 17, "startColumn": 7, - "endLine": 10, + "endLine": 17, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -18828,43 +22934,21 @@ "lifecycle": "create-only" } }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 15, + "startLine": 21, "startColumn": 7, - "endLine": 15, + "endLine": 21, "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -18876,44 +22960,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "StandaloneIngressIcmpTypeCode", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" - }, - "propertyPath": "Properties.GroupId", - "category": "Best Practice", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'SecurityGroup'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpTypeCode", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 29, + "startLine": 22, "startColumn": 7, - "endLine": 29, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 22, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -18923,43 +22982,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpTypeCode", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 30, + "startLine": 26, "startColumn": 7, - "endLine": 30, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 26, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpTypeCode", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 31, + "startLine": 27, "startColumn": 7, - "endLine": 31, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 27, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -18969,20 +23027,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpTypeCode", + "logicalId": "AlbTwoSubnets", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.CidrIp", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 32, + "startLine": 31, "startColumn": 7, - "endLine": 32, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 31, + "endColumn": 11, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -18992,44 +23050,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpv6TypeCode", + "logicalId": "AlbSubnetsFromParameter", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 36, + "startLine": 44, "startColumn": 7, - "endLine": 36, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 44, + "endColumn": 11, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'SecurityGroup'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpv6TypeCode", + "logicalId": "NlbOneSubnet", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 37, + "startLine": 49, "startColumn": 7, - "endLine": 37, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 49, + "endColumn": 11, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -19039,20 +23096,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpv6TypeCode", + "logicalId": "GatewayOneSubnet", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 38, + "startLine": 55, "startColumn": 7, - "endLine": 38, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 55, + "endColumn": 11, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -19062,20 +23119,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpv6TypeCode", + "logicalId": "ParameterTypedOneSubnet", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.Type", "category": "Best Practice", - "startLine": 39, + "startLine": 61, "startColumn": 7, - "endLine": 39, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 61, + "endColumn": 11, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -19083,160 +23140,141 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrIpv6' is create-only; updating it will cause resource replacement", + "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpv6TypeCode", + "logicalId": "Vpc", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.CidrIpv6", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 40, - "startColumn": 7, - "endLine": 40, + "startLine": 16, + "startColumn": 5, + "endLine": 16, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Resource 'SubnetA' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StandaloneEgressAscendingRange", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 44, - "startColumn": 7, - "endLine": 44, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'SecurityGroup'" - } + "startLine": 20, + "startColumn": 5, + "endLine": 20, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Resource 'SubnetB' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StandaloneEgressAscendingRange", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 45, - "startColumn": 7, - "endLine": 45, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 25, + "startColumn": 5, + "endLine": 25, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Resource 'AlbTwoSubnets' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StandaloneEgressAscendingRange", + "logicalId": "AlbTwoSubnets", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 46, - "startColumn": 7, - "endLine": 46, + "startLine": 30, + "startColumn": 5, + "endLine": 30, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Resource 'AlbDefaultTypeTwoSubnetMappings' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StandaloneEgressAscendingRange", + "logicalId": "AlbDefaultTypeTwoSubnetMappings", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 47, - "startColumn": 7, - "endLine": 47, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 37, + "startColumn": 5, + "endLine": 37, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", + "message": "Resource 'AlbSubnetsFromParameter' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StandaloneEgressAscendingRange", + "logicalId": "AlbSubnetsFromParameter", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.CidrIp", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 48, - "startColumn": 7, - "endLine": 48, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 43, + "startColumn": 5, + "endLine": 43, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "message": "Resource 'NlbOneSubnet' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Vpc", + "logicalId": "NlbOneSubnet", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, + "startLine": 48, "startColumn": 5, - "endLine": 9, + "endLine": 48, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19244,66 +23282,47 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'GatewayOneSubnet' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "GatewayOneSubnet", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 13, + "startLine": 54, "startColumn": 5, - "endLine": 13, + "endLine": 54, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/W1028_pseudo_param_branches_reachable.yaml": { - "filePath": "good/W1028_pseudo_param_branches_reachable.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'KubectlHandlerRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'ParameterTypedOneSubnet' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "KubectlHandlerRole", + "logicalId": "ParameterTypedOneSubnet", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 20, + "startLine": 60, "startColumn": 5, - "endLine": 20, + "endLine": 60, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/W3010_getazs_not_flagged.yaml": { - "filePath": "good/W3010_getazs_not_flagged.yaml", + "good/E9001_aws_cdk_metadata.yaml": { + "filePath": "good/E9001_aws_cdk_metadata.yaml", "status": "OK", "metadata": { "resourcesScanned": 2, @@ -19311,7 +23330,7 @@ "fatal": 0, "errors": 0, "warnings": 0, - "informational": 6, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -19322,86 +23341,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZones' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Elb", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" - }, - "propertyPath": "Properties.AvailabilityZones", - "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 24, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 16, - "startColumn": 7, - "endLine": 16, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.BucketName", "category": "Best Practice", "startLine": 18, "startColumn": 7, "endLine": 18, - "endColumn": 23, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -19411,47 +23363,27 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Elb' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Elb", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Subnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Subnet", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 15, + "startLine": 17, "startColumn": 5, - "endLine": 15, + "endLine": 17, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/apigateway_method_authorizer_same_rest_api.yaml": { - "filePath": "good/apigateway_method_authorizer_same_rest_api.yaml", + "good/E9002_port_range_exemptions.yaml": { + "filePath": "good/E9002_port_range_exemptions.yaml", "status": "OK", "metadata": { "resourcesScanned": 5, @@ -19459,7 +23391,7 @@ "fatal": 0, "errors": 0, "warnings": 0, - "informational": 9, + "informational": 20, "debug": 0 }, "suppressed": 0, @@ -19470,92 +23402,111 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Authorizer1", + "logicalId": "Vpc", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Authorizer" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 19, + "startLine": 10, "startColumn": 7, - "endLine": 19, + "endLine": 10, "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt RestApi1.RestApiId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Method1", + "logicalId": "SecurityGroup", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 25, + "startLine": 14, "startColumn": 7, - "endLine": 25, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 14, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 15, + "startColumn": 7, + "endLine": 15, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'RestApi1'" + "resolutionSource": "Ref to 'Vpc'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Method1", + "logicalId": "StandaloneIngressIcmpTypeCode", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 26, + "startLine": 28, "startColumn": 7, - "endLine": 26, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 28, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt RestApi1.RootResourceId" + "resolutionSource": "Ref to 'SecurityGroup'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Method1", + "logicalId": "StandaloneIngressIcmpTypeCode", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 27, + "startLine": 29, "startColumn": 7, - "endLine": 27, + "endLine": 29, "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -19565,68 +23516,66 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Deployment1", + "logicalId": "StandaloneIngressIcmpTypeCode", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 36, + "startLine": 30, "startColumn": 7, - "endLine": 36, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 30, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt RestApi1.RestApiId" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Stage1", + "logicalId": "StandaloneIngressIcmpTypeCode", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 40, + "startLine": 31, "startColumn": 7, - "endLine": 40, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 31, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'RestApi1'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Stage1", + "logicalId": "StandaloneIngressIcmpTypeCode", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.StageName", + "propertyPath": "Properties.CidrIp", "category": "Best Practice", - "startLine": 42, + "startLine": 32, "startColumn": 7, - "endLine": 42, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "endLine": 32, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -19634,140 +23583,92 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'RestApi1' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RestApi1", + "logicalId": "StandaloneIngressIcmpv6TypeCode", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 36, + "startColumn": 7, + "endLine": 36, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SecurityGroup'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Stage1' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Stage1", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 39, - "startColumn": 5, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/aurora_dbinstance.yaml": { - "filePath": "good/aurora_dbinstance.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 8, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "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": "AuroraDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "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": "AuroraDB", + "logicalId": "StandaloneIngressIcmpv6TypeCode", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AuroraDB", + "logicalId": "StandaloneIngressIcmpv6TypeCode", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 6, + "startLine": 38, "startColumn": 7, - "endLine": 6, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 38, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AuroraDB", + "logicalId": "StandaloneIngressIcmpv6TypeCode", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.DBClusterIdentifier", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 7, + "startLine": 39, "startColumn": 7, - "endLine": 7, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 39, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -19777,247 +23678,193 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'CidrIpv6' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AuroraDB", + "logicalId": "StandaloneIngressIcmpv6TypeCode", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.BackupRetentionPeriod", + "propertyPath": "Properties.CidrIpv6", "category": "Best Practice", - "startLine": 9, + "startLine": 40, "startColumn": 7, - "endLine": 9, - "endColumn": 28, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 40, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { - "ruleId": "I9002", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' is ignored in this configuration (from extension)", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AuroraDB", + "logicalId": "StandaloneEgressAscendingRange", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.BackupRetentionPeriod", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 9, + "startLine": 44, "startColumn": 7, - "endLine": 9, - "endColumn": 28, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property is ignored in this configuration (from extension)", - "phase": "SCHEMA" - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" + "endLine": 44, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SecurityGroup'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'AuroraDB' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AuroraDB", + "logicalId": "StandaloneEgressAscendingRange", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/both_forms.yaml": { - "filePath": "good/both_forms.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 13, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 2, - "debug": 0 + "startLine": 45, + "startColumn": 7, + "endLine": 45, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'Combined' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Combined", - "entityType": "Condition" + "logicalId": "StandaloneEgressAscendingRange", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Conditions/Combined", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 12, - "startColumn": 3, - "endLine": 12, - "endColumn": 11, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" + "startLine": 46, + "startColumn": 7, + "endLine": 46, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BucketShort", + "logicalId": "StandaloneEgressAscendingRange", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 20, + "startLine": 47, "startColumn": 7, - "endLine": 20, - "endColumn": 17, + "endLine": 47, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BucketLong", + "logicalId": "StandaloneEgressAscendingRange", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.CidrIp", "category": "Best Practice", - "startLine": 27, + "startLine": 48, "startColumn": 7, - "endLine": 27, - "endColumn": 17, + "endLine": 48, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" + "lifecycle": "create-only" } - } - ] - }, - "good/cdk_bootstrap_version_rule.json": { - "filePath": "good/cdk_bootstrap_version_rule.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "Vpc", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 13, - "startColumn": 7, - "endLine": 13, - "endColumn": 18, + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/cloudfront_valid.yaml": { - "filePath": "good/cloudfront_valid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Distribution' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", + "message": "Resource 'SecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Distribution", + "logicalId": "SecurityGroup", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 13, "startColumn": 5, - "endLine": 5, + "endLine": 13, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/codepipeline_artifact_counts.yaml": { - "filePath": "good/codepipeline_artifact_counts.yaml", + "good/W1028_pseudo_param_branches_reachable.yaml": { + "filePath": "good/W1028_pseudo_param_branches_reachable.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 0, "informational": 1, "debug": 0 }, @@ -20026,57 +23873,38 @@ "severityLevel": "DEBUG" }, "diagnostics": [ - { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", - "source": "ENGINE", - "entity": { - "logicalId": "Pipeline", - "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" - }, - "propertyPath": "Properties.RoleArn", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 14, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" - }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Pipeline' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured", + "message": "Resource 'KubectlHandlerRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Pipeline", + "logicalId": "KubectlHandlerRole", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 20, "startColumn": 5, - "endLine": 5, + "endLine": 20, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/complex_conditions.yaml": { - "filePath": "good/complex_conditions.yaml", + "good/W2530_snapstart_unreachable_or_published.yaml": { + "filePath": "good/W2530_snapstart_unreachable_or_published.yaml", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 16, "counts": { "fatal": 0, "errors": 0, - "warnings": 2, - "informational": 12, + "warnings": 4, + "informational": 16, "debug": 0 }, "suppressed": 0, @@ -20085,588 +23913,455 @@ }, "diagnostics": [ { - "ruleId": "W2501", + "ruleId": "W1028", "severity": "WARN", - "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", + "message": "['Fn::If', 2] is not reachable. When setting condition 'IsUsEast1' to False from current status True", "source": "CFN_LINT", "entity": { - "logicalId": "Database", + "logicalId": "PropertiesBranchExcludedByResourceCondition", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 38, - "startColumn": 7, - "endLine": 38, - "endColumn": 25, - "ruleDescription": "Check if Password Properties are correctly configured", + "propertyPath": "Properties.Fn::If.Fn::If.2", + "category": "Best Practice", + "startLine": 11, + "startColumn": 5, + "endLine": 11, + "endColumn": 11, + "ruleDescription": "Check Fn::If has a path that cannot be reached", "phase": "LINT" }, { - "ruleId": "W8001", + "ruleId": "W1028", "severity": "WARN", - "message": "Condition 'IsNotProd' is not used by any resource or Fn::If", + "message": "['Fn::If', 2] is not reachable. When setting condition 'IsUsEast1' to False from current status True", "source": "CFN_LINT", "entity": { - "logicalId": "IsNotProd", - "entityType": "Condition" + "logicalId": "ApplyOnBranchExcludedByResourceCondition", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Conditions/IsNotProd", + "propertyPath": "Properties.SnapStart.ApplyOn.Fn::If.2", "category": "Best Practice", - "startLine": 20, - "startColumn": 3, - "endLine": 20, - "endColumn": 12, - "ruleDescription": "Check if Conditions are Used", + "startLine": 38, + "startColumn": 40, + "endLine": 38, + "endColumn": 41, + "ruleDescription": "Check Fn::If has a path that cannot be reached", "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)", + }, + { + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'IsUsEast1' to False from current status True", "source": "CFN_LINT", "entity": { - "logicalId": "Database", + "logicalId": "RepeatedConditionExcludesInnerBranch", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "Properties.SnapStart.Fn::If.1.ApplyOn.Fn::If.2", "category": "Best Practice", - "startLine": 31, - "startColumn": 3, - "endLine": 31, - "endColumn": 11, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 50, + "startColumn": 42, + "endLine": 50, + "endColumn": 43, + "ruleDescription": "Check Fn::If has a path that cannot be reached", "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)", + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 1] is not reachable. When setting condition 'IsUsWest2' to True", "source": "CFN_LINT", "entity": { - "logicalId": "Database", + "logicalId": "ExclusiveConditionsExcludeInnerBranch", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "Properties.SnapStart.Fn::If.1.ApplyOn.Fn::If.1", "category": "Best Practice", - "startLine": 31, - "startColumn": 3, - "endLine": 31, - "endColumn": 11, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 63, + "startColumn": 36, + "endLine": 63, + "endColumn": 37, + "ruleDescription": "Check Fn::If has a path that cannot be reached", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "PublishedThroughSubVersion", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Version" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 26, + "startLine": 92, "startColumn": 7, - "endLine": 26, - "endColumn": 17, + "endLine": 92, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" + "resolutionSource": "dynamic (Sub:${PublishedThroughSub})" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "PublishedFromConditionalPropertiesVersion", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Version" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 36, + "startLine": 114, "startColumn": 7, - "endLine": 36, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 114, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt PublishedFromConditionalProperties.Arn" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "PublishedInMatchingConditionVersion", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Version" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 37, + "startLine": 132, "startColumn": 7, - "endLine": 37, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 132, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'PublishedInMatchingCondition'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "PublishedInUsEast1Version", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Version" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 39, + "startLine": 148, "startColumn": 7, - "endLine": 39, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 148, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'PublishedInEveryDeployment'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "PublishedElsewhereVersion", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Version" }, - "propertyPath": "Properties.BackupRetentionPeriod", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 41, + "startLine": 153, "startColumn": 7, - "endLine": 41, - "endColumn": 28, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 153, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'PublishedInEveryDeployment'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DevBucket", + "logicalId": "PublishedFromMatchingFunctionNameBranchVersion", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Version" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 46, + "startLine": 168, "startColumn": 7, - "endLine": 46, - "endColumn": 17, + "endLine": 168, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsUsEast1'" } }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "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": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Database' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 34, - "startColumn": 5, - "endLine": 34, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DevBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'PropertiesBranchExcludedByResourceCondition' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DevBucket", + "logicalId": "PropertiesBranchExcludedByResourceCondition", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 45, + "startLine": 11, "startColumn": 5, - "endLine": 45, + "endLine": 11, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/conditional_constraints_composite_keys_and_monitoring.yaml": { - "filePath": "good/conditional_constraints_composite_keys_and_monitoring.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 18, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'MonitoringRoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", - "source": "ENGINE", - "entity": { - "logicalId": "ClusterWithEnhancedMonitoring", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "propertyPath": "Properties.MonitoringRoleArn", - "category": "Best Practice", - "startLine": 103, - "startColumn": 7, - "endLine": 103, - "endColumn": 24, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TableWithLsiCompositeKey", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.KeySchema", - "category": "Best Practice", - "startLine": 20, - "startColumn": 7, - "endLine": 20, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TableWithoutIndexesSimpleKey", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.KeySchema", - "category": "Best Practice", - "startLine": 43, - "startColumn": 7, - "endLine": 43, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'ApplyOnBranchExcludedByResourceCondition' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "GlobalTableWithLsiCompositeKey", + "logicalId": "ApplyOnBranchExcludedByResourceCondition", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::GlobalTable" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 59, - "startColumn": 7, - "endLine": 59, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 30, + "startColumn": 5, + "endLine": 30, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'LocalSecondaryIndexes' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'RepeatedConditionExcludesInnerBranch' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "GlobalTableWithLsiCompositeKey", + "logicalId": "RepeatedConditionExcludesInnerBranch", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::GlobalTable" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.LocalSecondaryIndexes", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 65, - "startColumn": 7, - "endLine": 65, - "endColumn": 28, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 41, + "startColumn": 5, + "endLine": 41, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'ExclusiveConditionsExcludeInnerBranch' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MysqlClusterAdminUsername", + "logicalId": "ExclusiveConditionsExcludeInnerBranch", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 81, - "startColumn": 7, - "endLine": 81, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 54, + "startColumn": 5, + "endLine": 54, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'SnapStartNoValueOrNone' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MysqlClusterAdminUsername", + "logicalId": "SnapStartNoValueOrNone", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 82, - "startColumn": 7, - "endLine": 82, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 67, + "startColumn": 5, + "endLine": 67, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'PublishedThroughSub' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "PostgresClusterOtherUsername", + "logicalId": "PublishedThroughSub", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 90, - "startColumn": 7, - "endLine": 90, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 80, + "startColumn": 5, + "endLine": 80, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'PublishedFromConditionalProperties' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "PostgresClusterOtherUsername", + "logicalId": "PublishedFromConditionalProperties", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 91, - "startColumn": 7, - "endLine": 91, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 95, + "startColumn": 5, + "endLine": 95, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'PublishedInMatchingCondition' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ClusterWithEnhancedMonitoring", + "logicalId": "PublishedInMatchingCondition", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 99, - "startColumn": 7, - "endLine": 99, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 117, + "startColumn": 5, + "endLine": 117, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'PublishedInEveryDeployment' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ClusterWithEnhancedMonitoring", + "logicalId": "PublishedInEveryDeployment", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 100, - "startColumn": 7, - "endLine": 100, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 135, + "startColumn": 5, + "endLine": 135, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'PublishedFromMatchingFunctionNameBranch' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ClusterWithoutMonitoring", + "logicalId": "PublishedFromMatchingFunctionNameBranch", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 110, - "startColumn": 7, - "endLine": 110, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 156, + "startColumn": 5, + "endLine": 156, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/W3010_getazs_not_flagged.yaml": { + "filePath": "good/W3010_getazs_not_flagged.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 6, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'AvailabilityZones' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ClusterWithoutMonitoring", + "logicalId": "Elb", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.AvailabilityZones", "category": "Best Practice", - "startLine": 111, + "startLine": 8, "startColumn": 7, - "endLine": 111, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "endLine": 8, + "endColumn": 24, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -20674,101 +24369,87 @@ } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TableWithLsiCompositeKey' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TableWithLsiCompositeKey", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TableWithoutIndexesSimpleKey' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TableWithoutIndexesSimpleKey", + "logicalId": "Subnet", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 39, - "startColumn": 5, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 16, + "startColumn": 7, + "endLine": 16, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MysqlClusterAdminUsername' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MysqlClusterAdminUsername", + "logicalId": "Subnet", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 80, - "startColumn": 5, - "endLine": 80, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'PostgresClusterOtherUsername' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PostgresClusterOtherUsername", + "logicalId": "Subnet", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 89, - "startColumn": 5, - "endLine": 89, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 18, + "startColumn": 7, + "endLine": 18, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ClusterWithEnhancedMonitoring' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", + "message": "Resource 'Elb' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ClusterWithEnhancedMonitoring", + "logicalId": "Elb", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 98, + "startLine": 7, "startColumn": 5, - "endLine": 98, + "endLine": 7, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20776,35 +24457,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ClusterWithoutMonitoring' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", + "message": "Resource 'Subnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ClusterWithoutMonitoring", + "logicalId": "Subnet", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 109, + "startLine": 15, "startColumn": 5, - "endLine": 109, + "endLine": 15, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/conditional_constraints_within_limits.yaml": { - "filePath": "good/conditional_constraints_within_limits.yaml", + "good/apigateway_method_authorizer_same_rest_api.yaml": { + "filePath": "good/apigateway_method_authorizer_same_rest_api.yaml", "status": "OK", "metadata": { - "resourcesScanned": 11, + "resourcesScanned": 5, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 21, + "informational": 9, "debug": 0 }, "suppressed": 0, @@ -20818,22 +24499,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TokenAuthorizerAtTheLimit", + "logicalId": "Authorizer1", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Authorizer" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 56, + "startLine": 19, "startColumn": 7, - "endLine": 56, + "endLine": 19, "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'RestApi'" + "resolutionSource": "GetAtt RestApi1.RestApiId" } }, { @@ -20842,22 +24523,69 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CognitoAuthorizerLongTtl", + "logicalId": "Method1", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Authorizer" + "resourceType": "AWS::ApiGateway::Method" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 65, + "startLine": 25, "startColumn": 7, - "endLine": 65, + "endLine": 25, "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'RestApi'" + "resolutionSource": "Ref to 'RestApi1'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Method1", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" + }, + "propertyPath": "Properties.ResourceId", + "category": "Best Practice", + "startLine": 26, + "startColumn": 7, + "endLine": 26, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt RestApi1.RootResourceId" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Method1", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" + }, + "propertyPath": "Properties.HttpMethod", + "category": "Best Practice", + "startLine": 27, + "startColumn": 7, + "endLine": 27, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" } }, { @@ -20866,22 +24594,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Deployment", + "logicalId": "Deployment1", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Deployment" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 74, + "startLine": 36, "startColumn": 7, - "endLine": 74, + "endLine": 36, "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'RestApi'" + "resolutionSource": "GetAtt RestApi1.RestApiId" } }, { @@ -20890,22 +24618,22 @@ "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StageWithAbsolutePaths", + "logicalId": "Stage1", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 78, + "startLine": 40, "startColumn": 7, - "endLine": 78, + "endLine": 40, "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'RestApi'" + "resolutionSource": "Ref to 'RestApi1'" } }, { @@ -20914,15 +24642,15 @@ "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StageWithAbsolutePaths", + "logicalId": "Stage1", "entityType": "Resource", "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 80, + "startLine": 42, "startColumn": 7, - "endLine": 80, + "endLine": 42, "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -20932,73 +24660,99 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'RestApi1' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AuroraLongBackupRetention", + "logicalId": "RestApi1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ApiGateway::RestApi" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 95, - "startColumn": 7, - "endLine": 95, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Stage1' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Stage1", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Stage" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 39, + "startColumn": 5, + "endLine": 39, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/aurora_dbinstance.yaml": { + "filePath": "good/aurora_dbinstance.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 8, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "AuroraLongBackupRetention", + "logicalId": "AuroraDB", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.DBClusterIdentifier", "category": "Best Practice", - "startLine": 97, - "startColumn": 7, - "endLine": 97, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "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": "AuroraLongBackupRetention", + "logicalId": "AuroraDB", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.BackupRetentionPeriod", "category": "Best Practice", - "startLine": 98, - "startColumn": 7, - "endLine": 98, - "endColumn": 28, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", @@ -21006,15 +24760,15 @@ "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MysqlBackupRetentionAtTheLimit", + "logicalId": "AuroraDB", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 104, + "startLine": 6, "startColumn": 7, - "endLine": 104, + "endLine": 6, "endColumn": 13, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -21026,42 +24780,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MysqlBackupRetentionAtTheLimit", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.MasterUsername", - "category": "Best Practice", - "startLine": 107, - "startColumn": 7, - "endLine": 107, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MysqlBackupRetentionAtTheLimit", + "logicalId": "AuroraDB", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.DBClusterIdentifier", "category": "Best Practice", - "startLine": 109, + "startLine": 7, "startColumn": 7, - "endLine": 109, - "endColumn": 23, + "endLine": 7, + "endColumn": 26, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -21075,15 +24806,15 @@ "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MysqlBackupRetentionAtTheLimit", + "logicalId": "AuroraDB", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.BackupRetentionPeriod", "category": "Best Practice", - "startLine": 110, + "startLine": 9, "startColumn": 7, - "endLine": 110, + "endLine": 9, "endColumn": 28, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -21098,15 +24829,15 @@ "message": "'BackupRetentionPeriod' is ignored in this configuration (from extension)", "source": "ENGINE", "entity": { - "logicalId": "AuroraLongBackupRetention", + "logicalId": "AuroraDB", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.BackupRetentionPeriod", "category": "Best Practice", - "startLine": 98, + "startLine": 9, "startColumn": 7, - "endLine": 98, + "endLine": 9, "endColumn": 28, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Property is ignored in this configuration (from extension)", @@ -21124,150 +24855,30 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FunctionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FunctionRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 11, - "startColumn": 5, - "endLine": 11, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TimeoutAtTheLimit' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TimeoutAtTheLimit", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 21, - "startColumn": 5, - "endLine": 21, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ManagedInstancesLongTimeout' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ManagedInstancesLongTimeout", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 31, - "startColumn": 5, - "endLine": 31, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'RestApi' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "RestApi", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 50, - "startColumn": 5, - "endLine": 50, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'StageWithAbsolutePaths' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "StageWithAbsolutePaths", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 77, - "startColumn": 5, - "endLine": 77, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'AuroraLongBackupRetention' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "AuroraLongBackupRetention", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 94, - "startColumn": 5, - "endLine": 94, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MysqlBackupRetentionAtTheLimit' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Resource 'AuroraDB' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MysqlBackupRetentionAtTheLimit", + "logicalId": "AuroraDB", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 103, + "startLine": 5, "startColumn": 5, - "endLine": 103, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/conditions.yaml": { - "filePath": "good/conditions.yaml", + "good/both_forms.yaml": { + "filePath": "good/both_forms.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 13, "counts": { "fatal": 0, "errors": 0, @@ -21281,72 +24892,73 @@ }, "diagnostics": [ { - "ruleId": "W9010", + "ruleId": "W8001", "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", - "source": "ENGINE", + "message": "Condition 'Combined' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "myInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "Combined", + "entityType": "Condition" }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", + "propertyPath": "Conditions/Combined", + "category": "Best Practice", + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 11, + "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "BucketShort", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 28, + "startLine": 20, "startColumn": 7, - "endLine": 28, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 20, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'isProd'" + "resolutionSource": "parameter with AllowedValues" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CloudFrontDistribution' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CloudFrontDistribution", + "logicalId": "BucketLong", "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 41, - "startColumn": 5, - "endLine": 41, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 27, + "startColumn": 7, + "endLine": 27, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" + } } ] }, - "good/conditions/and.yaml": { - "filePath": "good/conditions/and.yaml", + "good/cdk_bootstrap_version_rule.json": { + "filePath": "good/cdk_bootstrap_version_rule.json", "status": "OK", "metadata": { "resourcesScanned": 1, @@ -21354,480 +24966,354 @@ "fatal": 0, "errors": 0, "warnings": 0, - "informational": 0, + "informational": 1, "debug": 0 }, "suppressed": 0, "strict": false, "severityLevel": "DEBUG" }, - "diagnostics": [] - }, - "good/core/conditions.yaml": { - "filePath": "good/core/conditions.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 8, - "counts": { - "fatal": 2, - "errors": 0, - "warnings": 9, - "informational": 18, - "debug": 0 - }, - "suppressed": 2, - "strict": false, - "severityLevel": "DEBUG" - }, "diagnostics": [ { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'Role' is a required property", - "source": "SCHEMA", - "entity": { - "logicalId": "AMIIDLookup", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'Role'", - "category": "Schema", - "startLine": 101, - "startColumn": 5, - "endLine": 101, - "endColumn": 15, - "conditionScenario": { - "isPrimary": false - }, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" - }, - { - "ruleId": "F3014", - "severity": "FATAL", - "message": "Exactly one of ['VirtualName', 'Ebs', 'NoDevice'] must be specified", - "source": "SCHEMA", - "entity": { - "logicalId": "myInstance2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.BlockDeviceMappings.{}", - "category": "Schema", - "startLine": 36, - "startColumn": 7, - "endLine": 36, - "endColumn": 26, - "conditionScenario": { - "isPrimary": true, - "isPrimaryAndProduction": true - }, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Exactly one of properties required (requiredXor)", - "phase": "SCHEMA", - "context": { - "resolutionSource": "Fn::If on condition 'isPrimaryAndProduction'" - } - }, - { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'isPrimary' to False. Where existing status for condition 'isPrimaryAndProduction' is True", - "source": "CFN_LINT", - "entity": { - "logicalId": "myInstance2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.BlockDeviceMappings.Fn::If.1.0.VirtualName.Fn::If.2", - "category": "Best Practice", - "startLine": 44, - "startColumn": 19, - "endLine": 44, - "endColumn": 20, - "ruleDescription": "Check Fn::If has a path that cannot be reached", - "phase": "LINT" - }, - { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'isPrimary' to False. Where existing status for condition 'isPrimaryAndProduction' is True", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "myInstance4", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.InstanceType.Fn::If.1.Fn::If.2", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 74, - "startColumn": 13, - "endLine": 74, - "endColumn": 14, - "ruleDescription": "Check Fn::If has a path that cannot be reached", - "phase": "LINT" - }, - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "AMIIDLookup", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 111, + "startLine": 13, "startColumn": 7, - "endLine": 111, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" - } - }, - { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'isNotProduction' is not used by any resource or Fn::If", - "source": "CFN_LINT", - "entity": { - "logicalId": "isNotProduction", - "entityType": "Condition" - }, - "propertyPath": "Conditions/isNotProduction", - "category": "Best Practice", - "startLine": 17, - "startColumn": 3, - "endLine": 17, + "endLine": 13, "endColumn": 18, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" - }, - { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'isPrimaryAndProdOrStage' is not used by any resource or Fn::If", - "source": "CFN_LINT", - "entity": { - "logicalId": "isPrimaryAndProdOrStage", - "entityType": "Condition" - }, - "propertyPath": "Conditions/isPrimaryAndProdOrStage", - "category": "Best Practice", - "startLine": 19, - "startColumn": 3, - "endLine": 19, - "endColumn": 26, - "ruleDescription": "Check if Conditions are Used", + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/cloudfront_valid.yaml": { + "filePath": "good/cloudfront_valid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Distribution' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myInstance1", + "logicalId": "Distribution", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 31, - "startColumn": 7, - "endLine": 31, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/codepipeline_artifact_counts.yaml": { + "filePath": "good/codepipeline_artifact_counts.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W9010", + "ruleId": "W9002", "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", "source": "ENGINE", "entity": { - "logicalId": "myInstance2", + "logicalId": "Pipeline", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 35, + "propertyPath": "Properties.RoleArn", + "category": "Best Practice", + "startLine": 6, "startColumn": 7, - "endLine": 35, + "endLine": 6, "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", + "ruleDescription": "Hardcoded ARN property", "phase": "LINT" }, { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Pipeline' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myInstance3", + "logicalId": "Pipeline", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 53, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, "startColumn": 5, - "endLine": 53, + "endLine": 5, "endColumn": 15, - "ruleDescription": "Hardcoded AMI ID", + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/complex_conditions.yaml": { + "filePath": "good/complex_conditions.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 12, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W9010", + "ruleId": "W2501", "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", - "source": "ENGINE", + "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", + "source": "CFN_LINT", "entity": { - "logicalId": "myInstance4", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.MasterUserPassword", "category": "Security", - "startLine": 67, + "startLine": 38, "startColumn": 7, - "endLine": 67, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", + "endLine": 38, + "endColumn": 25, + "ruleDescription": "Check if Password Properties are correctly configured", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "mySubnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 25, - "startColumn": 7, - "endLine": 25, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'IsNotProd' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "mySubnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "logicalId": "IsNotProd", + "entityType": "Condition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Conditions/IsNotProd", "category": "Best Practice", - "startLine": 26, - "startColumn": 7, - "endLine": 26, + "startLine": 20, + "startColumn": 3, + "endLine": 20, "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "myInstance1", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 30, - "startColumn": 7, - "endLine": 30, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'isDevelopment'" - } + "startLine": 31, + "startColumn": 3, + "endLine": 31, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "myInstance1", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ImageId", "category": "Best Practice", "startLine": 31, - "startColumn": 7, + "startColumn": 3, "endLine": 31, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance2", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 35, + "startLine": 26, "startColumn": 7, - "endLine": 35, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 26, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance2", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.BlockDeviceMappings", + "propertyPath": "Properties.Engine", "category": "Best Practice", "startLine": 36, "startColumn": 7, "endLine": 36, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Fn::If on condition 'isPrimaryAndProduction'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance4", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 67, + "startLine": 37, "startColumn": 7, - "endLine": 67, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 37, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'isProduction'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance4", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 68, + "startLine": 39, "startColumn": 7, - "endLine": 68, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 39, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Fn::If on condition 'isPrimaryAndProduction'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaExecutionRole", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.BackupRetentionPeriod", "category": "Best Practice", - "startLine": 91, + "startLine": 41, "startColumn": 7, - "endLine": 91, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 41, + "endColumn": 28, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "InstanceProfile", + "logicalId": "DevBucket", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 96, + "startLine": 46, "startColumn": 7, - "endLine": 96, - "endColumn": 11, + "endLine": 46, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -21846,39 +25332,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'mySubnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "mySubnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 24, - "startColumn": 5, - "endLine": 24, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myInstance1' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myInstance1", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 29, + "startLine": 25, "startColumn": 5, - "endLine": 29, + "endLine": 25, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -21886,12 +25352,12 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myInstance2' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'Database' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myInstance2", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -21906,159 +25372,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myInstance3' of type 'AWS::EC2::Instance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "myInstance3", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 53, - "startColumn": 5, - "endLine": 53, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myInstance4' of type 'AWS::EC2::Instance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "myInstance4", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 66, - "startColumn": 5, - "endLine": 66, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "LambdaExecutionRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 79, - "startColumn": 5, - "endLine": 79, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'AMIIDLookup' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'DevBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AMIIDLookup", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 101, - "startColumn": 5, - "endLine": 101, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/core/config_cfn_lint.json": { - "filePath": "good/core/config_cfn_lint.json", - "status": "OK", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "startLine": 16, - "startColumn": 2, - "endLine": 16, - "endColumn": 12, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" - } - ] - }, - "good/core/config_cfn_lint.yaml": { - "filePath": "good/core/config_cfn_lint.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "startLine": 11, - "startColumn": 1, - "endLine": 11, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" + "logicalId": "DevBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 45, + "startColumn": 5, + "endLine": 45, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "good/core/config_default_e3012.yaml": { - "filePath": "good/core/config_default_e3012.yaml", + "good/conditional_constraints_composite_keys_and_monitoring.yaml": { + "filePath": "good/conditional_constraints_composite_keys_and_monitoring.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 7, "counts": { "fatal": 0, "errors": 0, "warnings": 1, - "informational": 3, + "informational": 18, "debug": 0 }, "suppressed": 0, @@ -22067,44 +25409,44 @@ }, "diagnostics": [ { - "ruleId": "W9003", + "ruleId": "W9002", "severity": "WARN", - "message": "'5' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "message": "Property 'MonitoringRoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", "entity": { - "logicalId": "myTable", + "logicalId": "ClusterWithEnhancedMonitoring", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.ProvisionedThroughput.WriteCapacityUnits", + "propertyPath": "Properties.MonitoringRoleArn", "category": "Best Practice", - "startLine": 20, - "startColumn": 9, - "endLine": 20, - "endColumn": 27, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 103, + "startColumn": 7, + "endLine": 103, + "endColumn": 24, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myTable", + "logicalId": "TableWithLsiCompositeKey", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.TableName", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 11, + "startLine": 20, "startColumn": 7, - "endLine": 11, + "endLine": 20, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { @@ -22113,15 +25455,15 @@ "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myTable", + "logicalId": "TableWithoutIndexesSimpleKey", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 15, + "startLine": 43, "startColumn": 7, - "endLine": 15, + "endLine": 43, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -22130,297 +25472,204 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myTable", + "logicalId": "GlobalTableWithLsiCompositeKey", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::DynamoDB::GlobalTable" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/core/config_only_i1002.yaml": { - "filePath": "good/core/config_only_i1002.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "startLine": 8, - "startColumn": 1, - "endLine": 8, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" - } - ] - }, - "good/core/config_only_i1003.yaml": { - "filePath": "good/core/config_only_i1003.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "startLine": 8, - "startColumn": 1, - "endLine": 8, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" - } - ] - }, - "good/core/config_parameters.yaml": { - "filePath": "good/core/config_parameters.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 + "startLine": 59, + "startColumn": 7, + "endLine": 59, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "startLine": 8, - "startColumn": 1, - "endLine": 8, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" - } - ] - }, - "good/core/directives.yaml": { - "filePath": "good/core/directives.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LocalSecondaryIndexes' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "GlobalTableWithLsiCompositeKey", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::GlobalTable" + }, + "propertyPath": "Properties.LocalSecondaryIndexes", + "category": "Best Practice", + "startLine": 65, + "startColumn": 7, + "endLine": 65, + "endColumn": 28, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyKey", + "logicalId": "MysqlClusterAdminUsername", "entityType": "Resource", - "resourceType": "AWS::KMS::Key" + "resourceType": "AWS::RDS::DBCluster" }, + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 8, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 81, + "startColumn": 7, + "endLine": 81, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyKey", + "logicalId": "MysqlClusterAdminUsername", "entityType": "Resource", - "resourceType": "AWS::KMS::Key" + "resourceType": "AWS::RDS::DBCluster" }, + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 8, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 82, + "startColumn": 7, + "endLine": 82, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyKey' of type 'AWS::KMS::Key' supports Tags but none are configured", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyKey", + "logicalId": "PostgresClusterOtherUsername", "entityType": "Resource", - "resourceType": "AWS::KMS::Key" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 8, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/core/resource_attributes.yaml": { - "filePath": "good/core/resource_attributes.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 8, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 11, - "debug": 0 + "startLine": 90, + "startColumn": 7, + "endLine": 90, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CommonCfnAttributes", + "logicalId": "PostgresClusterOtherUsername", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 26, + "startLine": 91, "startColumn": 7, - "endLine": 26, - "endColumn": 17, + "endLine": 91, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DependsOnSingleString", + "logicalId": "ClusterWithEnhancedMonitoring", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 33, + "startLine": 99, "startColumn": 7, - "endLine": 33, - "endColumn": 17, + "endLine": 99, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DependsOnList", + "logicalId": "ClusterWithEnhancedMonitoring", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 42, + "startLine": 100, "startColumn": 7, - "endLine": 42, - "endColumn": 17, + "endLine": 100, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchTemplate' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AutoScalingGroupWithPolicies", + "logicalId": "ClusterWithoutMonitoring", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.LaunchTemplate", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 63, + "startLine": 110, "startColumn": 7, - "endLine": 63, - "endColumn": 21, + "endLine": 110, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22430,41 +25679,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BucketWithTransform", + "logicalId": "ClusterWithoutMonitoring", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 82, + "startLine": 111, "startColumn": 7, - "endLine": 82, - "endColumn": 17, + "endLine": 111, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CommonCfnAttributes' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'TableWithLsiCompositeKey' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CommonCfnAttributes", + "logicalId": "TableWithLsiCompositeKey", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 25, + "startLine": 12, "startColumn": 5, - "endLine": 25, + "endLine": 12, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22472,19 +25722,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DependsOnSingleString' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'TableWithoutIndexesSimpleKey' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DependsOnSingleString", + "logicalId": "TableWithoutIndexesSimpleKey", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 32, + "startLine": 39, "startColumn": 5, - "endLine": 32, + "endLine": 39, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22492,19 +25742,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DependsOnList' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'MysqlClusterAdminUsername' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DependsOnList", + "logicalId": "MysqlClusterAdminUsername", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBCluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 41, + "startLine": 80, "startColumn": 5, - "endLine": 41, + "endLine": 80, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22512,19 +25762,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'AutoScalingGroupWithPolicies' of type 'AWS::AutoScaling::AutoScalingGroup' supports Tags but none are configured", + "message": "Resource 'PostgresClusterOtherUsername' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AutoScalingGroupWithPolicies", + "logicalId": "PostgresClusterOtherUsername", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::RDS::DBCluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 60, + "startLine": 89, "startColumn": 5, - "endLine": 60, + "endLine": 89, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22532,19 +25782,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BucketWithTransform' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'ClusterWithEnhancedMonitoring' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BucketWithTransform", + "logicalId": "ClusterWithEnhancedMonitoring", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBCluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 81, + "startLine": 98, "startColumn": 5, - "endLine": 81, + "endLine": 98, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22552,35 +25802,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'BucketWithConnectors' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'ClusterWithoutMonitoring' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BucketWithConnectors", + "logicalId": "ClusterWithoutMonitoring", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::RDS::DBCluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 94, + "startLine": 109, "startColumn": 5, - "endLine": 94, + "endLine": 109, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/custom/is-defined.yaml": { - "filePath": "good/custom/is-defined.yaml", + "good/conditional_constraints_within_limits.yaml": { + "filePath": "good/conditional_constraints_within_limits.yaml", "status": "OK", "metadata": { - "resourcesScanned": 7, + "resourcesScanned": 11, "counts": { - "fatal": 2, + "fatal": 0, "errors": 0, - "warnings": 12, - "informational": 8, + "warnings": 0, + "informational": 21, "debug": 0 }, "suppressed": 0, @@ -22589,330 +25839,350 @@ }, "diagnostics": [ { - "ruleId": "F0005", - "severity": "FATAL", - "message": "'Parameter' is not a valid top-level template section", - "source": "SCHEMA", - "propertyPath": "Parameter", - "category": "Structure", - "startLine": 4, - "startColumn": 1, - "endLine": 4, - "endColumn": 10, - "ruleDescription": "Top-level keys must be valid section names", - "phase": "SCHEMA" - }, - { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'NodeEnv' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'LambdaExecutionRole', 'LambdaFunctionTestDefinedArray', 'LambdaFunctionTestDefinedEmpty', 'LambdaFunctionTestDefinedGetAttr', 'LambdaFunctionTestDefinedObject', 'LambdaFunctionTestDefinedRef', 'LambdaFunctionTestDefinedValue']", - "source": "SCHEMA", - "entity": { - "logicalId": "LambdaFunctionTestDefinedRef", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Environment.Variables.NODE_ENV", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 70, - "startColumn": 11, - "endLine": 70, - "endColumn": 19, - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "TokenAuthorizerAtTheLimit", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Authorizer" + }, + "propertyPath": "Properties.RestApiId", + "category": "Best Practice", + "startLine": 56, + "startColumn": 7, + "endLine": 56, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'RestApi'" + } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedArray", + "logicalId": "CognitoAuthorizerLongTtl", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Authorizer" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 32, + "propertyPath": "Properties.RestApiId", + "category": "Best Practice", + "startLine": 65, "startColumn": 7, - "endLine": 32, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 65, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'RestApi'" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedEmpty", + "logicalId": "Deployment", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 42, + "propertyPath": "Properties.RestApiId", + "category": "Best Practice", + "startLine": 74, "startColumn": 7, - "endLine": 42, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 74, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'RestApi'" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedGetAttr", + "logicalId": "StageWithAbsolutePaths", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 52, + "propertyPath": "Properties.RestApiId", + "category": "Best Practice", + "startLine": 78, "startColumn": 7, - "endLine": 52, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 78, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'RestApi'" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedObject", + "logicalId": "StageWithAbsolutePaths", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 63, + "propertyPath": "Properties.StageName", + "category": "Best Practice", + "startLine": 80, "startColumn": 7, - "endLine": 63, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 80, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedRef", + "logicalId": "AuroraLongBackupRetention", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 73, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 95, "startColumn": 7, - "endLine": 73, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 95, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedValue", + "logicalId": "AuroraLongBackupRetention", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 83, + "propertyPath": "Properties.DBClusterIdentifier", + "category": "Best Practice", + "startLine": 97, "startColumn": 7, - "endLine": 83, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 97, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W3002", - "severity": "WARN", - "message": "This code may only work with 'package' cli command", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedArray", + "logicalId": "AuroraLongBackupRetention", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Code", + "propertyPath": "Properties.BackupRetentionPeriod", "category": "Best Practice", - "startLine": 24, + "startLine": 98, "startColumn": 7, - "endLine": 24, - "endColumn": 11, - "ruleDescription": "Warn when properties are configured to only work with the package command", - "phase": "LINT" + "endLine": 98, + "endColumn": 28, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W3002", - "severity": "WARN", - "message": "This code may only work with 'package' cli command", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedEmpty", + "logicalId": "MysqlBackupRetentionAtTheLimit", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Code", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 36, + "startLine": 104, "startColumn": 7, - "endLine": 36, - "endColumn": 11, - "ruleDescription": "Warn when properties are configured to only work with the package command", - "phase": "LINT" + "endLine": 104, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W3002", - "severity": "WARN", - "message": "This code may only work with 'package' cli command", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedGetAttr", + "logicalId": "MysqlBackupRetentionAtTheLimit", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Code", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 46, + "startLine": 107, "startColumn": 7, - "endLine": 46, - "endColumn": 11, - "ruleDescription": "Warn when properties are configured to only work with the package command", - "phase": "LINT" + "endLine": 107, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3002", - "severity": "WARN", - "message": "This code may only work with 'package' cli command", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedObject", + "logicalId": "MysqlBackupRetentionAtTheLimit", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Code", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 56, + "startLine": 109, "startColumn": 7, - "endLine": 56, - "endColumn": 11, - "ruleDescription": "Warn when properties are configured to only work with the package command", - "phase": "LINT" + "endLine": 109, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3002", - "severity": "WARN", - "message": "This code may only work with 'package' cli command", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedRef", + "logicalId": "MysqlBackupRetentionAtTheLimit", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Code", + "propertyPath": "Properties.BackupRetentionPeriod", "category": "Best Practice", - "startLine": 67, + "startLine": 110, "startColumn": 7, - "endLine": 67, - "endColumn": 11, - "ruleDescription": "Warn when properties are configured to only work with the package command", - "phase": "LINT" + "endLine": 110, + "endColumn": 28, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W3002", - "severity": "WARN", - "message": "This code may only work with 'package' cli command", - "source": "CFN_LINT", + "ruleId": "I9002", + "severity": "INFO", + "message": "'BackupRetentionPeriod' is ignored in this configuration (from extension)", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedValue", + "logicalId": "AuroraLongBackupRetention", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Code", + "propertyPath": "Properties.BackupRetentionPeriod", "category": "Best Practice", - "startLine": 77, + "startLine": 98, "startColumn": 7, - "endLine": 77, - "endColumn": 11, - "ruleDescription": "Warn when properties are configured to only work with the package command", + "endLine": 98, + "endColumn": 28, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Property is ignored in this configuration (from extension)", + "phase": "SCHEMA" + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Resource 'FunctionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LambdaExecutionRole", + "logicalId": "FunctionRole", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 20, - "startColumn": 7, - "endLine": 20, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 11, + "startColumn": 5, + "endLine": 11, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'TimeoutAtTheLimit' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LambdaExecutionRole", + "logicalId": "TimeoutAtTheLimit", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, + "startLine": 21, "startColumn": 5, - "endLine": 9, + "endLine": 21, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22920,19 +26190,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LambdaFunctionTestDefinedArray' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'ManagedInstancesLongTimeout' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedArray", + "logicalId": "ManagedInstancesLongTimeout", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 23, + "startLine": 31, "startColumn": 5, - "endLine": 23, + "endLine": 31, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22940,19 +26210,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LambdaFunctionTestDefinedEmpty' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'RestApi' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedEmpty", + "logicalId": "RestApi", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::RestApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 35, + "startLine": 50, "startColumn": 5, - "endLine": 35, + "endLine": 50, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22960,19 +26230,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LambdaFunctionTestDefinedGetAttr' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'StageWithAbsolutePaths' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedGetAttr", + "logicalId": "StageWithAbsolutePaths", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ApiGateway::Stage" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 45, + "startLine": 77, "startColumn": 5, - "endLine": 45, + "endLine": 77, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -22980,19 +26250,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LambdaFunctionTestDefinedObject' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'AuroraLongBackupRetention' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedObject", + "logicalId": "AuroraLongBackupRetention", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 55, + "startLine": 94, "startColumn": 5, - "endLine": 55, + "endLine": 94, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23000,130 +26270,229 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LambdaFunctionTestDefinedRef' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'MysqlBackupRetentionAtTheLimit' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedRef", + "logicalId": "MysqlBackupRetentionAtTheLimit", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 66, + "startLine": 103, "startColumn": 5, - "endLine": 66, + "endLine": 103, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/conditions.yaml": { + "filePath": "good/conditions.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 28, + "startColumn": 7, + "endLine": 28, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 28, + "startColumn": 7, + "endLine": 28, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'isProd'" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LambdaFunctionTestDefinedValue' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'CloudFrontDistribution' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestDefinedValue", + "logicalId": "CloudFrontDistribution", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::CloudFront::Distribution" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 76, + "startLine": 41, "startColumn": 5, - "endLine": 76, + "endLine": 41, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/custom/is-not-defined.yaml": { - "filePath": "good/custom/is-not-defined.yaml", + "good/conditions/and.yaml": { + "filePath": "good/conditions/and.yaml", "status": "OK", "metadata": { - "resourcesScanned": 5, + "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, - "warnings": 8, - "informational": 6, + "warnings": 0, + "informational": 0, "debug": 0 }, "suppressed": 0, "strict": false, "severityLevel": "DEBUG" }, + "diagnostics": [] + }, + "good/core/conditions.yaml": { + "filePath": "good/core/conditions.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 8, + "counts": { + "fatal": 2, + "errors": 0, + "warnings": 9, + "informational": 18, + "debug": 0 + }, + "suppressed": 2, + "strict": false, + "severityLevel": "DEBUG" + }, "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'Role' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "LambdaFunctionTestNotDefinedFromParent", + "logicalId": "AMIIDLookup", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 26, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'Role'", + "category": "Schema", + "startLine": 101, + "startColumn": 5, + "endLine": 101, + "endColumn": 15, + "conditionScenario": { + "isPrimary": false + }, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "F3014", + "severity": "FATAL", + "message": "Exactly one of ['VirtualName', 'Ebs', 'NoDevice'] must be specified", + "source": "SCHEMA", + "entity": { + "logicalId": "myInstance2", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.BlockDeviceMappings.{}", + "category": "Schema", + "startLine": 36, "startColumn": 7, - "endLine": 26, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 36, + "endColumn": 26, + "conditionScenario": { + "isPrimary": true, + "isPrimaryAndProduction": true + }, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Exactly one of properties required (requiredXor)", "phase": "SCHEMA", "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" + "resolutionSource": "Fn::If on condition 'isPrimaryAndProduction'" } }, { - "ruleId": "W2531", + "ruleId": "W1028", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "['Fn::If', 2] is not reachable. When setting condition 'isPrimary' to False. Where existing status for condition 'isPrimaryAndProduction' is True", "source": "CFN_LINT", "entity": { - "logicalId": "LambdaFunctionTestNotDefinedFromProperties", + "logicalId": "myInstance2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" - } + "propertyPath": "Properties.BlockDeviceMappings.Fn::If.1.0.VirtualName.Fn::If.2", + "category": "Best Practice", + "startLine": 44, + "startColumn": 19, + "endLine": 44, + "endColumn": 20, + "ruleDescription": "Check Fn::If has a path that cannot be reached", + "phase": "LINT" }, { - "ruleId": "W2531", + "ruleId": "W1028", "severity": "WARN", - "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "message": "['Fn::If', 2] is not reachable. When setting condition 'isPrimary' to False. Where existing status for condition 'isPrimaryAndProduction' is True", "source": "CFN_LINT", "entity": { - "logicalId": "LambdaFunctionTestNotDefinedRefAWSNoValue", + "logicalId": "myInstance4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 43, - "startColumn": 7, - "endLine": 43, + "propertyPath": "Properties.InstanceType.Fn::If.1.Fn::If.2", + "category": "Best Practice", + "startLine": 74, + "startColumn": 13, + "endLine": 74, "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs18.x", - "lifecycle": "deprecated" - } + "ruleDescription": "Check Fn::If has a path that cannot be reached", + "phase": "LINT" }, { "ruleId": "W2531", @@ -23131,15 +26500,15 @@ "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "LambdaFunctionTestNotDefinedWithSiblings", + "logicalId": "AMIIDLookup", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 53, + "startLine": 111, "startColumn": 7, - "endLine": 53, + "endLine": 111, "endColumn": 14, "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", @@ -23149,98 +26518,133 @@ } }, { - "ruleId": "W3002", + "ruleId": "W8001", "severity": "WARN", - "message": "This code may only work with 'package' cli command", + "message": "Condition 'isNotProduction' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "LambdaFunctionTestNotDefinedFromParent", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "logicalId": "isNotProduction", + "entityType": "Condition" }, - "propertyPath": "Properties.Code", + "propertyPath": "Conditions/isNotProduction", "category": "Best Practice", - "startLine": 21, - "startColumn": 7, - "endLine": 21, - "endColumn": 11, - "ruleDescription": "Warn when properties are configured to only work with the package command", + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 18, + "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, { - "ruleId": "W3002", + "ruleId": "W8001", "severity": "WARN", - "message": "This code may only work with 'package' cli command", + "message": "Condition 'isPrimaryAndProdOrStage' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "LambdaFunctionTestNotDefinedFromProperties", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "logicalId": "isPrimaryAndProdOrStage", + "entityType": "Condition" }, - "propertyPath": "Properties.Code", + "propertyPath": "Conditions/isPrimaryAndProdOrStage", "category": "Best Practice", - "startLine": 30, + "startLine": 19, + "startColumn": 3, + "endLine": 19, + "endColumn": 26, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" + }, + { + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 31, "startColumn": 7, - "endLine": 30, - "endColumn": 11, - "ruleDescription": "Warn when properties are configured to only work with the package command", + "endLine": 31, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, { - "ruleId": "W3002", + "ruleId": "W9010", "severity": "WARN", - "message": "This code may only work with 'package' cli command", - "source": "CFN_LINT", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestNotDefinedRefAWSNoValue", + "logicalId": "myInstance2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Code", - "category": "Best Practice", - "startLine": 37, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 35, "startColumn": 7, - "endLine": 37, - "endColumn": 11, - "ruleDescription": "Warn when properties are configured to only work with the package command", + "endLine": 35, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, { - "ruleId": "W3002", + "ruleId": "W9010", "severity": "WARN", - "message": "This code may only work with 'package' cli command", - "source": "CFN_LINT", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance3", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 53, + "startColumn": 5, + "endLine": 53, + "endColumn": 15, + "ruleDescription": "Hardcoded AMI ID", + "phase": "LINT" + }, + { + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestNotDefinedWithSiblings", + "logicalId": "myInstance4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Code", - "category": "Best Practice", - "startLine": 47, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 67, "startColumn": 7, - "endLine": 47, - "endColumn": 11, - "ruleDescription": "Warn when properties are configured to only work with the package command", + "endLine": 67, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaExecutionRole", + "logicalId": "mySubnet", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 17, + "startLine": 25, "startColumn": 7, - "endLine": 17, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 25, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -23248,226 +26652,191 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaExecutionRole", + "logicalId": "mySubnet", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 26, + "startColumn": 7, + "endLine": 26, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LambdaFunctionTestNotDefinedFromParent' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestNotDefinedFromParent", + "logicalId": "myInstance1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 20, - "startColumn": 5, - "endLine": 20, + "startLine": 30, + "startColumn": 7, + "endLine": 30, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'isDevelopment'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LambdaFunctionTestNotDefinedFromProperties' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestNotDefinedFromProperties", + "logicalId": "myInstance1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 29, - "startColumn": 5, - "endLine": 29, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 31, + "startColumn": 7, + "endLine": 31, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LambdaFunctionTestNotDefinedRefAWSNoValue' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestNotDefinedRefAWSNoValue", + "logicalId": "myInstance2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 36, - "startColumn": 5, - "endLine": 36, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LambdaFunctionTestNotDefinedWithSiblings' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunctionTestNotDefinedWithSiblings", + "logicalId": "myInstance2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BlockDeviceMappings", "category": "Best Practice", - "startLine": 46, - "startColumn": 5, - "endLine": 46, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/custom/numeric-inequalities-large.yaml": { - "filePath": "good/custom/numeric-inequalities-large.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 2, - "warnings": 3, - "informational": 4, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "TimeoutInNumericsFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 27, + "startLine": 36, "startColumn": 7, - "endLine": 27, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "endLine": 36, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs4.3", - "lifecycle": "end-of-life" + "lifecycle": "conditional-create-only", + "resolutionSource": "Fn::If on condition 'isPrimaryAndProduction'" } }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "TimeoutInStringFunction", + "logicalId": "myInstance4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 35, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 67, "startColumn": 7, - "endLine": 35, + "endLine": 67, "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs4.3", - "lifecycle": "end-of-life" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'isProduction'" } }, { - "ruleId": "W3002", - "severity": "WARN", - "message": "This code may only work with 'package' cli command", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "TimeoutInNumericsFunction", + "logicalId": "myInstance4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Code", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 26, + "startLine": 68, "startColumn": 7, - "endLine": 26, - "endColumn": 11, - "ruleDescription": "Warn when properties are configured to only work with the package command", - "phase": "LINT" + "endLine": 68, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "Fn::If on condition 'isPrimaryAndProduction'" + } }, { - "ruleId": "W3002", - "severity": "WARN", - "message": "This code may only work with 'package' cli command", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "TimeoutInStringFunction", + "logicalId": "LambdaExecutionRole", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Code", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 34, + "startLine": 91, "startColumn": 7, - "endLine": 34, + "endLine": 91, "endColumn": 11, - "ruleDescription": "Warn when properties are configured to only work with the package command", - "phase": "LINT" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "'100' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", - "entity": { - "logicalId": "TimeoutInStringFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Timeout", - "category": "Best Practice", - "startLine": 36, - "startColumn": 7, - "endLine": 36, - "endColumn": 14, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", @@ -23475,39 +26844,47 @@ "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaExecutionRole", + "logicalId": "InstanceProfile", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::IAM::InstanceProfile" }, "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 20, + "startLine": 96, "startColumn": 7, - "endLine": 20, + "endLine": 96, "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'mySubnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LambdaExecutionRole", + "logicalId": "mySubnet", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 8, + "startLine": 24, "startColumn": 5, - "endLine": 8, + "endLine": 24, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23515,19 +26892,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TimeoutInNumericsFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'myInstance1' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TimeoutInNumericsFunction", + "logicalId": "myInstance1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 23, + "startLine": 29, "startColumn": 5, - "endLine": 23, + "endLine": 29, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -23535,162 +26912,221 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TimeoutInStringFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'myInstance2' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TimeoutInStringFunction", + "logicalId": "myInstance2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 31, + "startLine": 34, "startColumn": 5, - "endLine": 31, + "endLine": 34, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/custom/numeric-inequalities-small.yaml": { - "filePath": "good/custom/numeric-inequalities-small.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 2, - "warnings": 3, - "informational": 4, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myInstance3' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "TimeoutInNumericsFunction", + "logicalId": "myInstance3", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 27, - "startColumn": 7, - "endLine": 27, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs4.3", - "lifecycle": "end-of-life" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 53, + "startColumn": 5, + "endLine": 53, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myInstance4' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "TimeoutInStringFunction", + "logicalId": "myInstance4", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs4.3", - "lifecycle": "end-of-life" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 66, + "startColumn": 5, + "endLine": 66, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "W3002", - "severity": "WARN", - "message": "This code may only work with 'package' cli command", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "TimeoutInNumericsFunction", + "logicalId": "LambdaExecutionRole", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Code", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 26, - "startColumn": 7, - "endLine": 26, - "endColumn": 11, - "ruleDescription": "Warn when properties are configured to only work with the package command", + "startLine": 79, + "startColumn": 5, + "endLine": 79, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3002", - "severity": "WARN", - "message": "This code may only work with 'package' cli command", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'AMIIDLookup' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "TimeoutInStringFunction", + "logicalId": "AMIIDLookup", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Code", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 34, - "startColumn": 7, - "endLine": 34, - "endColumn": 11, - "ruleDescription": "Warn when properties are configured to only work with the package command", + "startLine": 101, + "startColumn": 5, + "endLine": 101, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/core/config_cfn_lint.json": { + "filePath": "good/core/config_cfn_lint.json", + "status": "OK", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "startLine": 16, + "startColumn": 2, + "endLine": 16, + "endColumn": 12, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" + } + ] + }, + "good/core/config_cfn_lint.yaml": { + "filePath": "good/core/config_cfn_lint.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "startLine": 11, + "startColumn": 1, + "endLine": 11, + "endColumn": 10, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" + } + ] + }, + "good/core/config_default_e3012.yaml": { + "filePath": "good/core/config_default_e3012.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "W9003", "severity": "WARN", - "message": "'9' is not of type 'integer' - automatically coerced (string to integer)", + "message": "'5' is not of type 'integer' - automatically coerced (string to integer)", "source": "CFN_LINT", "entity": { - "logicalId": "TimeoutInStringFunction", + "logicalId": "myTable", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Timeout", - "category": "Best Practice", - "startLine": 36, - "startColumn": 7, - "endLine": 36, - "endColumn": 14, + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.ProvisionedThroughput.WriteCapacityUnits", + "category": "Best Practice", + "startLine": 20, + "startColumn": 9, + "endLine": 20, + "endColumn": 27, "ruleDescription": "Property type coercion warning", "phase": "SCHEMA" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaExecutionRole", + "logicalId": "myTable", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 20, + "startLine": 11, "startColumn": 7, - "endLine": 20, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 11, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -23698,76 +27134,58 @@ } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "LambdaExecutionRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TimeoutInNumericsFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TimeoutInNumericsFunction", + "logicalId": "myTable", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 23, - "startColumn": 5, - "endLine": 23, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 15, + "startColumn": 7, + "endLine": 15, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TimeoutInStringFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'myTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TimeoutInStringFunction", + "logicalId": "myTable", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 31, + "startLine": 10, "startColumn": 5, - "endLine": 31, + "endLine": 10, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/decode/parsing.json": { - "filePath": "good/decode/parsing.json", + "good/core/config_only_i1002.yaml": { + "filePath": "good/core/config_only_i1002.yaml", "status": "OK", "metadata": { "resourcesScanned": 0, "counts": { "fatal": 1, "errors": 0, - "warnings": 1, + "warnings": 0, "informational": 0, "debug": 0 }, @@ -23783,39 +27201,53 @@ "source": "SCHEMA", "category": "Structure", "startLine": 8, - "startColumn": 3, + "startColumn": 1, "endLine": 8, - "endColumn": 13, + "endColumn": 10, "ruleDescription": "Resources section must exist and be non-empty", "phase": "SCHEMA" + } + ] + }, + "good/core/config_only_i1003.yaml": { + "filePath": "good/core/config_only_i1003.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'VPN' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "VPN", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/VPN", - "category": "Best Practice", - "startLine": 3, - "startColumn": 5, - "endLine": 3, - "endColumn": 9, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "startLine": 8, + "startColumn": 1, + "endLine": 8, + "endColumn": 10, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" } ] }, - "good/decode/yaml11_scalars.yaml": { - "filePath": "good/decode/yaml11_scalars.yaml", + "good/core/config_parameters.yaml": { + "filePath": "good/core/config_parameters.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 0, "counts": { - "fatal": 0, + "fatal": 1, "errors": 0, "warnings": 0, "informational": 0, @@ -23825,18 +27257,32 @@ "strict": false, "severityLevel": "DEBUG" }, - "diagnostics": [] + "diagnostics": [ + { + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "startLine": 8, + "startColumn": 1, + "endLine": 8, + "endColumn": 10, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" + } + ] }, - "good/deletion_policies.yaml": { - "filePath": "good/deletion_policies.yaml", + "good/core/directives.yaml": { + "filePath": "good/core/directives.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, - "warnings": 4, - "informational": 7, + "warnings": 0, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -23845,228 +27291,322 @@ }, "diagnostics": [ { - "ruleId": "W2501", - "severity": "WARN", - "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", + "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": "DB", + "logicalId": "MyKey", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::KMS::Key" }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 25, - "ruleDescription": "Check if Password Properties are correctly configured", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 8, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "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": "Bucket", + "logicalId": "MyKey", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::KMS::Key" }, "category": "Best Practice", - "startLine": 3, + "startLine": 4, "startColumn": 3, - "endLine": 3, - "endColumn": 9, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "endLine": 4, + "endColumn": 8, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyKey' of type 'AWS::KMS::Key' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DB", + "logicalId": "MyKey", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::KMS::Key" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, + "startLine": 4, "startColumn": 3, - "endLine": 6, - "endColumn": 5, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "endLine": 4, + "endColumn": 8, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/core/resource_attributes.yaml": { + "filePath": "good/core/resource_attributes.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 8, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 11, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DB", + "logicalId": "CommonCfnAttributes", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "propertyPath": "Properties.BucketName", + "category": "Best Practice", + "startLine": 26, + "startColumn": 7, + "endLine": 26, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DB", + "logicalId": "DependsOnSingleString", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucket" }, + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 6, - "startColumn": 3, - "endLine": 6, - "endColumn": 5, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DB", + "logicalId": "DependsOnList", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 10, + "startLine": 42, "startColumn": 7, - "endLine": 10, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 42, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchTemplate' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DB", + "logicalId": "AutoScalingGroupWithPolicies", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.LaunchTemplate", "category": "Best Practice", - "startLine": 11, + "startLine": 63, "startColumn": 7, - "endLine": 11, + "endLine": 63, "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DB", + "logicalId": "BucketWithTransform", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.BackupRetentionPeriod", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 14, + "startLine": 82, "startColumn": 7, - "endLine": 14, - "endColumn": 28, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 82, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { - "ruleId": "I9003", + "ruleId": "I9040", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "message": "Resource 'CommonCfnAttributes' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", + "entity": { + "logicalId": "CommonCfnAttributes", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "startLine": 25, + "startColumn": 5, + "endLine": 25, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'DependsOnSingleString' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "DependsOnSingleString", "entityType": "Resource", "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 9, + "startLine": 32, + "startColumn": 5, + "endLine": 32, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DB' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Resource 'DependsOnList' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DB", + "logicalId": "DependsOnList", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, + "startLine": 41, "startColumn": 5, - "endLine": 9, + "endLine": 41, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'AutoScalingGroupWithPolicies' of type 'AWS::AutoScaling::AutoScalingGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "AutoScalingGroupWithPolicies", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 60, + "startColumn": 5, + "endLine": 60, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BucketWithTransform' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "BucketWithTransform", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 81, + "startColumn": 5, + "endLine": 81, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BucketWithConnectors' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "BucketWithConnectors", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 94, + "startColumn": 5, + "endLine": 94, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/dynamodb_provisioned.yaml": { - "filePath": "good/dynamodb_provisioned.yaml", + "good/custom/is-defined.yaml": { + "filePath": "good/custom/is-defined.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 7, "counts": { - "fatal": 0, + "fatal": 2, "errors": 0, - "warnings": 0, - "informational": 5, + "warnings": 12, + "informational": 8, "debug": 0 }, "suppressed": 0, @@ -24075,368 +27615,308 @@ }, "diagnostics": [ { - "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": "DDBTable", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "ruleId": "F0005", + "severity": "FATAL", + "message": "'Parameter' is not a valid top-level template section", + "source": "SCHEMA", + "propertyPath": "Parameter", + "category": "Structure", + "startLine": 4, + "startColumn": 1, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Top-level keys must be valid section names", + "phase": "SCHEMA" }, { - "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", + "ruleId": "F1020", + "severity": "FATAL", + "message": "'NodeEnv' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'LambdaExecutionRole', 'LambdaFunctionTestDefinedArray', 'LambdaFunctionTestDefinedEmpty', 'LambdaFunctionTestDefinedGetAttr', 'LambdaFunctionTestDefinedObject', 'LambdaFunctionTestDefinedRef', 'LambdaFunctionTestDefinedValue']", + "source": "SCHEMA", "entity": { - "logicalId": "DDBTable", + "logicalId": "LambdaFunctionTestDefinedRef", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Properties.Environment.Variables.NODE_ENV", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 70, + "startColumn": 11, + "endLine": 70, + "endColumn": 19, + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "DDBTable", + "logicalId": "LambdaFunctionTestDefinedArray", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.TableName", - "category": "Best Practice", - "startLine": 6, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 32, "startColumn": 7, - "endLine": 6, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 32, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "DDBTable", + "logicalId": "LambdaFunctionTestDefinedEmpty", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.KeySchema", - "category": "Best Practice", - "startLine": 14, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 42, "startColumn": 7, - "endLine": 14, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 42, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DDBTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "DDBTable", + "logicalId": "LambdaFunctionTestDefinedGetAttr", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/dynamodb_valid_attributes.yaml": { - "filePath": "good/dynamodb_valid_attributes.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 5, - "debug": 0 + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 52, + "startColumn": 7, + "endLine": 52, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "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)", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "GoodTable", + "logicalId": "LambdaFunctionTestDefinedObject", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 63, + "startColumn": 7, + "endLine": 63, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" + } }, { - "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)", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "GoodTable", + "logicalId": "LambdaFunctionTestDefinedRef", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 73, + "startColumn": 7, + "endLine": 73, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" + } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "GoodTable", + "logicalId": "LambdaFunctionTestDefinedValue", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.TableName", - "category": "Best Practice", - "startLine": 6, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 83, "startColumn": 7, - "endLine": 6, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 83, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", "entity": { - "logicalId": "GoodTable", + "logicalId": "LambdaFunctionTestDefinedArray", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.Code", "category": "Best Practice", - "startLine": 13, + "startLine": 24, "startColumn": 7, - "endLine": 13, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 24, + "endColumn": 11, + "ruleDescription": "Warn when properties are configured to only work with the package command", + "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'GoodTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", "entity": { - "logicalId": "GoodTable", + "logicalId": "LambdaFunctionTestDefinedEmpty", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Code", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 36, + "startColumn": 7, + "endLine": 36, + "endColumn": 11, + "ruleDescription": "Warn when properties are configured to only work with the package command", "phase": "LINT" - } - ] - }, - "good/ecs_awsvpc_valid.yaml": { - "filePath": "good/ecs_awsvpc_valid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", "entity": { - "logicalId": "Task", + "logicalId": "LambdaFunctionTestDefinedGetAttr", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Code", "category": "Best Practice", - "startLine": 6, + "startLine": 46, "startColumn": 7, - "endLine": 6, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 46, + "endColumn": 11, + "ruleDescription": "Warn when properties are configured to only work with the package command", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", "entity": { - "logicalId": "Task", + "logicalId": "LambdaFunctionTestDefinedObject", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Code", "category": "Best Practice", - "startLine": 7, + "startLine": 56, "startColumn": 7, - "endLine": 7, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 56, + "endColumn": 11, + "ruleDescription": "Warn when properties are configured to only work with the package command", + "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Task' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", "entity": { - "logicalId": "Task", + "logicalId": "LambdaFunctionTestDefinedRef", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Code", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 67, + "startColumn": 7, + "endLine": 67, + "endColumn": 11, + "ruleDescription": "Warn when properties are configured to only work with the package command", "phase": "LINT" - } - ] - }, - "good/ecs_fargate.yaml": { - "filePath": "good/ecs_fargate.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 9, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", "entity": { - "logicalId": "TaskDef", + "logicalId": "LambdaFunctionTestDefinedValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.Code", "category": "Best Practice", - "startLine": 6, + "startLine": 77, "startColumn": 7, - "endLine": 6, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 77, + "endColumn": 11, + "ruleDescription": "Warn when properties are configured to only work with the package command", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "LambdaExecutionRole", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 7, + "startLine": 20, "startColumn": 7, - "endLine": 7, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 20, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24444,135 +27924,121 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "LambdaExecutionRole", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 9, - "startColumn": 7, + "startColumn": 5, "endLine": 9, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Resource 'LambdaFunctionTestDefinedArray' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "LambdaFunctionTestDefinedArray", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 23, + "startColumn": 5, + "endLine": 23, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Resource 'LambdaFunctionTestDefinedEmpty' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "LambdaFunctionTestDefinedEmpty", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 35, + "startColumn": 5, + "endLine": 35, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Resource 'LambdaFunctionTestDefinedGetAttr' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "LambdaFunctionTestDefinedGetAttr", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 45, + "startColumn": 5, + "endLine": 45, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'LambdaFunctionTestDefinedObject' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Service", + "logicalId": "LambdaFunctionTestDefinedObject", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.LaunchType", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 19, - "startColumn": 7, - "endLine": 19, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 55, + "startColumn": 5, + "endLine": 55, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'LambdaFunctionTestDefinedRef' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "LambdaFunctionTestDefinedRef", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 66, "startColumn": 5, - "endLine": 5, + "endLine": 66, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24580,19 +28046,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Service' of type 'AWS::ECS::Service' supports Tags but none are configured", + "message": "Resource 'LambdaFunctionTestDefinedValue' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Service", + "logicalId": "LambdaFunctionTestDefinedValue", "entityType": "Resource", - "resourceType": "AWS::ECS::Service" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 18, + "startLine": 76, "startColumn": 5, - "endLine": 18, + "endLine": 76, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" diff --git a/src/resources/expected/validation_reports6.json b/src/resources/expected/validation_reports6.json index 8f466ade..37aa36d2 100644 --- a/src/resources/expected/validation_reports6.json +++ b/src/resources/expected/validation_reports6.json @@ -1,14 +1,14 @@ { - "good/ecs_fargate_ddb_valid.yaml": { - "filePath": "good/ecs_fargate_ddb_valid.yaml", + "good/custom/is-not-defined.yaml": { + "filePath": "good/custom/is-not-defined.yaml", "status": "OK", "metadata": { - "resourcesScanned": 14, + "resourcesScanned": 5, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 81, + "warnings": 8, + "informational": 6, "debug": 0 }, "suppressed": 0, @@ -17,202 +17,190 @@ }, "diagnostics": [ { - "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": "PayPerRequestTable", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "category": "Best Practice", - "startLine": 76, - "startColumn": 3, - "endLine": 76, - "endColumn": 21, - "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": "PayPerRequestTable", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "category": "Best Practice", - "startLine": 76, - "startColumn": 3, - "endLine": 76, - "endColumn": 21, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "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)", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "ProvisionedTable", + "logicalId": "LambdaFunctionTestNotDefinedFromParent", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, - "category": "Best Practice", - "startLine": 89, - "startColumn": 3, - "endLine": 89, - "endColumn": 19, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 26, + "startColumn": 7, + "endLine": 26, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" + } }, { - "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)", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "ProvisionedTable", + "logicalId": "LambdaFunctionTestNotDefinedFromProperties", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, - "category": "Best Practice", - "startLine": 89, - "startColumn": 3, - "endLine": 89, - "endColumn": 19, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" + } }, { - "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)", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "DefaultWithThroughput", + "logicalId": "LambdaFunctionTestNotDefinedRefAWSNoValue", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, - "category": "Best Practice", - "startLine": 105, - "startColumn": 3, - "endLine": 105, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 43, + "startColumn": 7, + "endLine": 43, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" + } }, { - "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)", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'nodejs18.x' was deprecated on '2025-09-01'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "DefaultWithThroughput", + "logicalId": "LambdaFunctionTestNotDefinedWithSiblings", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, - "category": "Best Practice", - "startLine": 105, - "startColumn": 3, - "endLine": 105, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 53, + "startColumn": 7, + "endLine": 53, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs18.x", + "lifecycle": "deprecated" + } }, { - "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)", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", "source": "CFN_LINT", "entity": { - "logicalId": "CorrelatedProvisionedThenOnDemand", + "logicalId": "LambdaFunctionTestNotDefinedFromParent", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "Properties.Code", "category": "Best Practice", - "startLine": 161, - "startColumn": 3, - "endLine": 161, - "endColumn": 36, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 11, + "ruleDescription": "Warn when properties are configured to only work with the package command", "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)", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", "source": "CFN_LINT", "entity": { - "logicalId": "CorrelatedProvisionedThenOnDemand", + "logicalId": "LambdaFunctionTestNotDefinedFromProperties", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "Properties.Code", "category": "Best Practice", - "startLine": 161, - "startColumn": 3, - "endLine": 161, - "endColumn": 36, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 30, + "startColumn": 7, + "endLine": 30, + "endColumn": 11, + "ruleDescription": "Warn when properties are configured to only work with the package command", "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)", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", "source": "CFN_LINT", "entity": { - "logicalId": "CorrelatedOnDemandThenProvisioned", + "logicalId": "LambdaFunctionTestNotDefinedRefAWSNoValue", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "Properties.Code", "category": "Best Practice", - "startLine": 172, - "startColumn": 3, - "endLine": 172, - "endColumn": 36, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 11, + "ruleDescription": "Warn when properties are configured to only work with the package command", "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)", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", "source": "CFN_LINT", "entity": { - "logicalId": "CorrelatedOnDemandThenProvisioned", + "logicalId": "LambdaFunctionTestNotDefinedWithSiblings", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Lambda::Function" }, + "propertyPath": "Properties.Code", "category": "Best Practice", - "startLine": 172, - "startColumn": 3, - "endLine": 172, - "endColumn": 36, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 47, + "startColumn": 7, + "endLine": 47, + "endColumn": 11, + "ruleDescription": "Warn when properties are configured to only work with the package command", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ValidFargate", + "logicalId": "LambdaExecutionRole", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 11, + "startLine": 17, "startColumn": 7, - "endLine": 11, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 17, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -220,229 +208,244 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ValidFargate", + "logicalId": "LambdaExecutionRole", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Resource 'LambdaFunctionTestNotDefinedFromParent' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ValidFargate", + "logicalId": "LambdaFunctionTestNotDefinedFromParent", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 20, + "startColumn": 5, + "endLine": 20, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Resource 'LambdaFunctionTestNotDefinedFromProperties' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ValidFargate", + "logicalId": "LambdaFunctionTestNotDefinedFromProperties", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 15, - "startColumn": 7, - "endLine": 15, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Resource 'LambdaFunctionTestNotDefinedRefAWSNoValue' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ValidFargate", + "logicalId": "LambdaFunctionTestNotDefinedRefAWSNoValue", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 16, - "startColumn": 7, - "endLine": 16, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 36, + "startColumn": 5, + "endLine": 36, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Resource 'LambdaFunctionTestNotDefinedWithSiblings' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ValidFargate", + "logicalId": "LambdaFunctionTestNotDefinedWithSiblings", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, + "startLine": 46, + "startColumn": 5, + "endLine": 46, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/custom/numeric-inequalities-large.yaml": { + "filePath": "good/custom/numeric-inequalities-large.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 3, + "informational": 4, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "TimeoutInNumericsFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 27, "startColumn": 7, - "endLine": 17, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 27, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs4.3", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "ValidFargateSplunk", + "logicalId": "TimeoutInStringFunction", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Family", - "category": "Best Practice", - "startLine": 31, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 35, "startColumn": 7, - "endLine": 31, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 35, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs4.3", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", "entity": { - "logicalId": "ValidFargateSplunk", + "logicalId": "TimeoutInNumericsFunction", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Code", "category": "Best Practice", - "startLine": 32, + "startLine": 26, "startColumn": 7, - "endLine": 32, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 26, + "endColumn": 11, + "ruleDescription": "Warn when properties are configured to only work with the package command", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", "entity": { - "logicalId": "ValidFargateSplunk", + "logicalId": "TimeoutInStringFunction", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Code", "category": "Best Practice", "startLine": 34, "startColumn": 7, "endLine": 34, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endColumn": 11, + "ruleDescription": "Warn when properties are configured to only work with the package command", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "'100' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", "entity": { - "logicalId": "ValidFargateSplunk", + "logicalId": "TimeoutInStringFunction", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Timeout", "category": "Best Practice", - "startLine": 35, + "startLine": 36, "startColumn": 7, - "endLine": 35, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 36, + "endColumn": 14, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ValidFargateSplunk", + "logicalId": "LambdaExecutionRole", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 36, + "startLine": 20, "startColumn": 7, - "endLine": 36, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 20, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -450,206 +453,204 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ValidFargateSplunk", + "logicalId": "LambdaExecutionRole", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 37, - "startColumn": 7, - "endLine": 37, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Resource 'TimeoutInNumericsFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "NonFargateTask", + "logicalId": "TimeoutInNumericsFunction", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 48, - "startColumn": 7, - "endLine": 48, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 23, + "startColumn": 5, + "endLine": 23, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Resource 'TimeoutInStringFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "NonFargateTask", + "logicalId": "TimeoutInStringFunction", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 49, - "startColumn": 7, - "endLine": 49, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 31, + "startColumn": 5, + "endLine": 31, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/custom/numeric-inequalities-small.yaml": { + "filePath": "good/custom/numeric-inequalities-small.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 3, + "informational": 4, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "NonFargateTask", + "logicalId": "TimeoutInNumericsFunction", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 51, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 27, "startColumn": 7, - "endLine": 51, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 27, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs4.3", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "NonFargateTask", + "logicalId": "TimeoutInStringFunction", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 52, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 35, "startColumn": 7, - "endLine": 52, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 35, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs4.3", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "TimeoutInNumericsFunction", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.Code", "category": "Best Practice", - "startLine": 63, + "startLine": 26, "startColumn": 7, - "endLine": 63, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 26, + "endColumn": 11, + "ruleDescription": "Warn when properties are configured to only work with the package command", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "TimeoutInStringFunction", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Code", "category": "Best Practice", - "startLine": 64, + "startLine": 34, "startColumn": 7, - "endLine": 64, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 34, + "endColumn": 11, + "ruleDescription": "Warn when properties are configured to only work with the package command", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "'9' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "TimeoutInStringFunction", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Timeout", "category": "Best Practice", - "startLine": 66, + "startLine": 36, "startColumn": 7, - "endLine": 66, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 36, + "endColumn": 14, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "LambdaExecutionRole", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 67, + "startLine": 20, "startColumn": 7, - "endLine": 67, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 20, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -657,113 +658,262 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "LambdaExecutionRole", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 68, - "startColumn": 7, - "endLine": 68, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'PlacementConstraints' is create-only; updating it will cause resource replacement", + "message": "Resource 'TimeoutInNumericsFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "TimeoutInNumericsFunction", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.PlacementConstraints", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 69, - "startColumn": 7, - "endLine": 69, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" - } + "startLine": 23, + "startColumn": 5, + "endLine": 23, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Resource 'TimeoutInStringFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "TimeoutInStringFunction", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 70, + "startLine": 31, + "startColumn": 5, + "endLine": 31, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/decode/parsing.json": { + "filePath": "good/decode/parsing.json", + "status": "OK", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 1, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 13, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'VPN' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "VPN", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/VPN", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + } + ] + }, + "good/decode/yaml11_scalars.yaml": { + "filePath": "good/decode/yaml11_scalars.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "good/deletion_policies.yaml": { + "filePath": "good/deletion_policies.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 4, + "informational": 7, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2501", + "severity": "WARN", + "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", + "source": "CFN_LINT", + "entity": { + "logicalId": "DB", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.MasterUserPassword", + "category": "Security", + "startLine": 12, "startColumn": 7, - "endLine": 70, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 12, + "endColumn": 25, + "ruleDescription": "Check if Password Properties are correctly configured", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "source": "CFN_LINT", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "phase": "LINT" + }, + { + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "source": "CFN_LINT", + "entity": { + "logicalId": "DB", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 5, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "phase": "LINT" + }, + { + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "PayPerRequestTable", + "logicalId": "DB", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "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": "DB", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 79, - "startColumn": 7, - "endLine": 79, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 5, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PayPerRequestTable", + "logicalId": "DB", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 81, + "startLine": 10, "startColumn": 7, - "endLine": 81, - "endColumn": 16, + "endLine": 10, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -773,19 +923,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProvisionedTable", + "logicalId": "DB", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.TableName", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 92, + "startLine": 11, "startColumn": 7, - "endLine": 92, - "endColumn": 16, + "endLine": 11, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -795,40 +946,145 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProvisionedTable", + "logicalId": "DB", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.BackupRetentionPeriod", "category": "Best Practice", - "startLine": 97, + "startLine": 14, "startColumn": 7, - "endLine": 97, - "endColumn": 16, + "endLine": 14, + "endColumn": 28, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "conditional-create-only" } }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "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": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DB' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "DB", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/dynamodb_provisioned.yaml": { + "filePath": "good/dynamodb_provisioned.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 5, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "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": "DDBTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "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": "DDBTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DefaultWithThroughput", + "logicalId": "DDBTable", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 108, + "startLine": 6, "startColumn": 7, - "endLine": 108, + "endLine": 6, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -842,15 +1098,15 @@ "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DefaultWithThroughput", + "logicalId": "DDBTable", "entityType": "Resource", "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 112, + "startLine": 14, "startColumn": 7, - "endLine": 112, + "endLine": 14, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -859,91 +1115,96 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Resource 'DDBTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateIntCpu", + "logicalId": "DDBTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 123, - "startColumn": 7, - "endLine": 123, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/dynamodb_valid_attributes.yaml": { + "filePath": "good/dynamodb_valid_attributes.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 5, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "FargateIntCpu", + "logicalId": "GoodTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 124, - "startColumn": 7, - "endLine": 124, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "FargateIntCpu", + "logicalId": "GoodTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 126, - "startColumn": 7, - "endLine": 126, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateIntCpu", + "logicalId": "GoodTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 127, + "startLine": 6, "startColumn": 7, - "endLine": 127, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 6, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -953,113 +1214,103 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateIntCpu", + "logicalId": "GoodTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 128, + "startLine": 13, "startColumn": 7, - "endLine": 128, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 13, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Resource 'GoodTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FargateIntCpu", + "logicalId": "GoodTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 129, - "startColumn": 7, - "endLine": 129, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CorrelatedFargateThenEc2", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 139, - "startColumn": 7, - "endLine": 139, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/ecs_awsvpc_valid.yaml": { + "filePath": "good/ecs_awsvpc_valid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedFargateThenEc2", + "logicalId": "Task", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 140, + "startLine": 6, "startColumn": 7, - "endLine": 140, + "endLine": 6, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedFargateThenEc2", + "logicalId": "Task", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 141, + "startLine": 7, "startColumn": 7, - "endLine": 141, - "endColumn": 10, + "endLine": 7, + "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -1068,44 +1319,60 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Resource 'Task' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedFargateThenEc2", + "logicalId": "Task", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 142, - "startColumn": 7, - "endLine": 142, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/ecs_fargate.yaml": { + "filePath": "good/ecs_fargate.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 9, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedFargateThenEc2", + "logicalId": "TaskDef", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 143, + "startLine": 6, "startColumn": 7, - "endLine": 143, - "endColumn": 27, + "endLine": 6, + "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -1119,22 +1386,21 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2ThenFargate", + "logicalId": "TaskDef", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 151, + "startLine": 7, "startColumn": 7, - "endLine": 151, + "endLine": 7, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" + "lifecycle": "create-only" } }, { @@ -1143,22 +1409,21 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2ThenFargate", + "logicalId": "TaskDef", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 152, + "startLine": 9, "startColumn": 7, - "endLine": 152, + "endLine": 9, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" + "lifecycle": "create-only" } }, { @@ -1167,15 +1432,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2ThenFargate", + "logicalId": "TaskDef", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 153, + "startLine": 10, "startColumn": 7, - "endLine": 153, + "endLine": 10, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -1190,15 +1455,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2ThenFargate", + "logicalId": "TaskDef", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 154, + "startLine": 11, "startColumn": 7, - "endLine": 154, + "endLine": 11, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -1213,15 +1478,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2ThenFargate", + "logicalId": "TaskDef", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 155, + "startLine": 12, "startColumn": 7, - "endLine": 155, + "endLine": 12, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -1233,19 +1498,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedProvisionedThenOnDemand", + "logicalId": "Service", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 166, + "startLine": 19, "startColumn": 7, - "endLine": 166, - "endColumn": 16, + "endLine": 19, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -1253,138 +1518,260 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedOnDemandThenProvisioned", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 177, - "startColumn": 7, - "endLine": 177, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Resource 'Service' of type 'AWS::ECS::Service' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedFargateSizeThenEc2", + "logicalId": "Service", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 187, - "startColumn": 7, - "endLine": 187, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" - } + "startLine": 18, + "startColumn": 5, + "endLine": 18, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/ecs_fargate_ddb_valid.yaml": { + "filePath": "good/ecs_fargate_ddb_valid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 14, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 81, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "CorrelatedFargateSizeThenEc2", + "logicalId": "PayPerRequestTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 188, - "startColumn": 7, - "endLine": 188, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" - } + "startLine": 76, + "startColumn": 3, + "endLine": 76, + "endColumn": 21, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "CorrelatedFargateSizeThenEc2", + "logicalId": "PayPerRequestTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 189, - "startColumn": 7, - "endLine": 189, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" - } + "startLine": 76, + "startColumn": 3, + "endLine": 76, + "endColumn": 21, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "CorrelatedFargateSizeThenEc2", + "logicalId": "ProvisionedTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 190, - "startColumn": 7, - "endLine": 190, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 89, + "startColumn": 3, + "endLine": 89, + "endColumn": 19, + "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": "ProvisionedTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 89, + "startColumn": 3, + "endLine": 89, + "endColumn": 19, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "DefaultWithThroughput", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 105, + "startColumn": 3, + "endLine": 105, + "endColumn": 24, + "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": "DefaultWithThroughput", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 105, + "startColumn": 3, + "endLine": 105, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "CorrelatedProvisionedThenOnDemand", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 161, + "startColumn": 3, + "endLine": 161, + "endColumn": 36, + "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": "CorrelatedProvisionedThenOnDemand", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 161, + "startColumn": 3, + "endLine": 161, + "endColumn": 36, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "CorrelatedOnDemandThenProvisioned", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 172, + "startColumn": 3, + "endLine": 172, + "endColumn": 36, + "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": "CorrelatedOnDemandThenProvisioned", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 172, + "startColumn": 3, + "endLine": 172, + "endColumn": 36, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedFargateSizeThenEc2", + "logicalId": "ValidFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 191, + "startLine": 11, "startColumn": 7, - "endLine": 191, - "endColumn": 27, + "endLine": 11, + "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -1398,22 +1785,21 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2SizeThenFargate", + "logicalId": "ValidFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 199, + "startLine": 12, "startColumn": 7, - "endLine": 199, + "endLine": 12, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" + "lifecycle": "create-only" } }, { @@ -1422,22 +1808,21 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2SizeThenFargate", + "logicalId": "ValidFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 200, + "startLine": 14, "startColumn": 7, - "endLine": 200, + "endLine": 14, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" + "lifecycle": "create-only" } }, { @@ -1446,22 +1831,21 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2SizeThenFargate", + "logicalId": "ValidFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 201, + "startLine": 15, "startColumn": 7, - "endLine": 201, + "endLine": 15, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" + "lifecycle": "create-only" } }, { @@ -1470,15 +1854,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2SizeThenFargate", + "logicalId": "ValidFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 202, + "startLine": 16, "startColumn": 7, - "endLine": 202, + "endLine": 16, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -1493,15 +1877,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2SizeThenFargate", + "logicalId": "ValidFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 203, + "startLine": 17, "startColumn": 7, - "endLine": 203, + "endLine": 17, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -1511,319 +1895,273 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ValidFargate' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ValidFargate", + "logicalId": "ValidFargateSplunk", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 31, + "startColumn": 7, + "endLine": 31, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ValidFargateSplunk' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { "logicalId": "ValidFargateSplunk", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 30, - "startColumn": 5, - "endLine": 30, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 32, + "startColumn": 7, + "endLine": 32, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'NonFargateTask' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NonFargateTask", + "logicalId": "ValidFargateSplunk", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 47, - "startColumn": 5, - "endLine": 47, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 34, + "startColumn": 7, + "endLine": 34, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateNullPC' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateNullPC", + "logicalId": "ValidFargateSplunk", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 62, - "startColumn": 5, - "endLine": 62, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'PayPerRequestTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PayPerRequestTable", + "logicalId": "ValidFargateSplunk", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 78, - "startColumn": 5, - "endLine": 78, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 36, + "startColumn": 7, + "endLine": 36, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ProvisionedTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProvisionedTable", + "logicalId": "ValidFargateSplunk", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 91, - "startColumn": 5, - "endLine": 91, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DefaultWithThroughput' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DefaultWithThroughput", + "logicalId": "NonFargateTask", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 107, - "startColumn": 5, - "endLine": 107, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 48, + "startColumn": 7, + "endLine": 48, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FargateIntCpu' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FargateIntCpu", + "logicalId": "NonFargateTask", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 122, - "startColumn": 5, - "endLine": 122, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 49, + "startColumn": 7, + "endLine": 49, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CorrelatedFargateThenEc2' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedFargateThenEc2", + "logicalId": "NonFargateTask", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 138, - "startColumn": 5, - "endLine": 138, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 51, + "startColumn": 7, + "endLine": 51, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CorrelatedEc2ThenFargate' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedEc2ThenFargate", + "logicalId": "NonFargateTask", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 150, - "startColumn": 5, - "endLine": 150, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 52, + "startColumn": 7, + "endLine": 52, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'CorrelatedProvisionedThenOnDemand' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedProvisionedThenOnDemand", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 163, - "startColumn": 5, - "endLine": 163, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CorrelatedOnDemandThenProvisioned' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CorrelatedOnDemandThenProvisioned", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 174, - "startColumn": 5, - "endLine": 174, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CorrelatedFargateSizeThenEc2' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CorrelatedFargateSizeThenEc2", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 186, - "startColumn": 5, - "endLine": 186, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CorrelatedEc2SizeThenFargate' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CorrelatedEc2SizeThenFargate", + "logicalId": "FargateNullPC", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 198, - "startColumn": 5, - "endLine": 198, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/ecs_fargate_decimal_units.yaml": { - "filePath": "good/ecs_fargate_decimal_units.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 42, - "debug": 0 + "startLine": 63, + "startColumn": 7, + "endLine": 63, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "QuarterVcpuDecimal", + "logicalId": "FargateNullPC", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 6, + "startLine": 64, "startColumn": 7, - "endLine": 6, + "endLine": 64, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -1838,15 +2176,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "QuarterVcpuDecimal", + "logicalId": "FargateNullPC", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 7, + "startLine": 66, "startColumn": 7, - "endLine": 7, + "endLine": 66, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -1861,15 +2199,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "QuarterVcpuDecimal", + "logicalId": "FargateNullPC", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 8, + "startLine": 67, "startColumn": 7, - "endLine": 8, + "endLine": 67, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -1884,15 +2222,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "QuarterVcpuDecimal", + "logicalId": "FargateNullPC", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 9, + "startLine": 68, "startColumn": 7, - "endLine": 9, + "endLine": 68, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -1904,42 +2242,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'PlacementConstraints' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "QuarterVcpuDecimal", + "logicalId": "FargateNullPC", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.PlacementConstraints", "category": "Best Practice", - "startLine": 10, + "startLine": 69, "startColumn": 7, - "endLine": 10, + "endLine": 69, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HalfVcpuDecimal", + "logicalId": "FargateNullPC", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 18, + "startLine": 70, "startColumn": 7, - "endLine": 18, - "endColumn": 30, + "endLine": 70, + "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -1950,20 +2289,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HalfVcpuDecimal", + "logicalId": "PayPerRequestTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 19, + "startLine": 79, "startColumn": 7, - "endLine": 19, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 79, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -1973,43 +2311,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HalfVcpuDecimal", + "logicalId": "PayPerRequestTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 20, + "startLine": 81, "startColumn": 7, - "endLine": 20, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 81, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HalfVcpuDecimal", + "logicalId": "ProvisionedTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 21, + "startLine": 92, "startColumn": 7, - "endLine": 21, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 92, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2019,43 +2355,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HalfVcpuDecimal", + "logicalId": "ProvisionedTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 22, + "startLine": 97, "startColumn": 7, - "endLine": 22, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 97, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DecimalEquivalent", + "logicalId": "DefaultWithThroughput", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 30, + "startLine": 108, "startColumn": 7, - "endLine": 30, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 108, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2065,42 +2399,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DecimalEquivalent", + "logicalId": "DefaultWithThroughput", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 31, + "startLine": 112, "startColumn": 7, - "endLine": 31, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "endLine": 112, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DecimalEquivalent", + "logicalId": "FargateIntCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 32, + "startLine": 123, "startColumn": 7, - "endLine": 32, - "endColumn": 10, + "endLine": 123, + "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -2111,64 +2444,18 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DecimalEquivalent", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Memory", - "category": "Best Practice", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DecimalEquivalent", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 34, - "startColumn": 7, - "endLine": 34, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "PlusDecimalEquivalent", + "logicalId": "FargateIntCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 42, + "startLine": 124, "startColumn": 7, - "endLine": 42, + "endLine": 124, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -2183,15 +2470,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PlusDecimalEquivalent", + "logicalId": "FargateIntCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 43, + "startLine": 126, "startColumn": 7, - "endLine": 43, + "endLine": 126, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -2206,15 +2493,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PlusDecimalEquivalent", + "logicalId": "FargateIntCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 44, + "startLine": 127, "startColumn": 7, - "endLine": 44, + "endLine": 127, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -2229,15 +2516,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PlusDecimalEquivalent", + "logicalId": "FargateIntCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 45, + "startLine": 128, "startColumn": 7, - "endLine": 45, + "endLine": 128, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -2252,15 +2539,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PlusDecimalEquivalent", + "logicalId": "FargateIntCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 46, + "startLine": 129, "startColumn": 7, - "endLine": 46, + "endLine": 129, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -2275,21 +2562,22 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LeadingZeroEquivalent", + "logicalId": "CorrelatedFargateThenEc2", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 54, + "startLine": 139, "startColumn": 7, - "endLine": 54, + "endLine": 139, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" } }, { @@ -2298,21 +2586,22 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LeadingZeroEquivalent", + "logicalId": "CorrelatedFargateThenEc2", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 55, + "startLine": 140, "startColumn": 7, - "endLine": 55, + "endLine": 140, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" } }, { @@ -2321,15 +2610,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LeadingZeroEquivalent", + "logicalId": "CorrelatedFargateThenEc2", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 56, + "startLine": 141, "startColumn": 7, - "endLine": 56, + "endLine": 141, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -2344,15 +2633,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LeadingZeroEquivalent", + "logicalId": "CorrelatedFargateThenEc2", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 57, + "startLine": 142, "startColumn": 7, - "endLine": 57, + "endLine": 142, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -2367,15 +2656,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LeadingZeroEquivalent", + "logicalId": "CorrelatedFargateThenEc2", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 58, + "startLine": 143, "startColumn": 7, - "endLine": 58, + "endLine": 143, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -2390,21 +2679,22 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LeadingDecimalPointEquivalent", + "logicalId": "CorrelatedEc2ThenFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 66, + "startLine": 151, "startColumn": 7, - "endLine": 66, + "endLine": 151, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" } }, { @@ -2413,21 +2703,22 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LeadingDecimalPointEquivalent", + "logicalId": "CorrelatedEc2ThenFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 67, + "startLine": 152, "startColumn": 7, - "endLine": 67, + "endLine": 152, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" } }, { @@ -2436,15 +2727,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LeadingDecimalPointEquivalent", + "logicalId": "CorrelatedEc2ThenFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 68, + "startLine": 153, "startColumn": 7, - "endLine": 68, + "endLine": 153, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -2459,15 +2750,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LeadingDecimalPointEquivalent", + "logicalId": "CorrelatedEc2ThenFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 69, + "startLine": 154, "startColumn": 7, - "endLine": 69, + "endLine": 154, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -2482,15 +2773,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LeadingDecimalPointEquivalent", + "logicalId": "CorrelatedEc2ThenFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 70, + "startLine": 155, "startColumn": 7, - "endLine": 70, + "endLine": 155, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -2499,27 +2790,72 @@ "lifecycle": "create-only" } }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CorrelatedProvisionedThenOnDemand", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.KeySchema", + "category": "Best Practice", + "startLine": 166, + "startColumn": 7, + "endLine": 166, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CorrelatedOnDemandThenProvisioned", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.KeySchema", + "category": "Best Practice", + "startLine": 177, + "startColumn": 7, + "endLine": 177, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TrailingDecimalPointEquivalent", + "logicalId": "CorrelatedFargateSizeThenEc2", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 78, + "startLine": 187, "startColumn": 7, - "endLine": 78, + "endLine": 187, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" } }, { @@ -2528,21 +2864,22 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TrailingDecimalPointEquivalent", + "logicalId": "CorrelatedFargateSizeThenEc2", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 79, + "startLine": 188, "startColumn": 7, - "endLine": 79, + "endLine": 188, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" } }, { @@ -2551,21 +2888,22 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TrailingDecimalPointEquivalent", + "logicalId": "CorrelatedFargateSizeThenEc2", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 80, + "startLine": 189, "startColumn": 7, - "endLine": 80, + "endLine": 189, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" } }, { @@ -2574,15 +2912,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TrailingDecimalPointEquivalent", + "logicalId": "CorrelatedFargateSizeThenEc2", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 81, + "startLine": 190, "startColumn": 7, - "endLine": 81, + "endLine": 190, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -2597,15 +2935,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TrailingDecimalPointEquivalent", + "logicalId": "CorrelatedFargateSizeThenEc2", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 82, + "startLine": 191, "startColumn": 7, - "endLine": 82, + "endLine": 191, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -2615,61 +2953,139 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'QuarterVcpuDecimal' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "QuarterVcpuDecimal", + "logicalId": "CorrelatedEc2SizeThenFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'HalfVcpuDecimal' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "HalfVcpuDecimal", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "startLine": 199, + "startColumn": 7, + "endLine": 199, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CorrelatedEc2SizeThenFargate", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 200, + "startColumn": 7, + "endLine": 200, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CorrelatedEc2SizeThenFargate", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Cpu", + "category": "Best Practice", + "startLine": 201, + "startColumn": 7, + "endLine": 201, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CorrelatedEc2SizeThenFargate", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Memory", + "category": "Best Practice", + "startLine": 202, + "startColumn": 7, + "endLine": 202, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CorrelatedEc2SizeThenFargate", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 203, + "startColumn": 7, + "endLine": 203, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DecimalEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'ValidFargate' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DecimalEquivalent", + "logicalId": "ValidFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 29, + "startLine": 10, "startColumn": 5, - "endLine": 29, + "endLine": 10, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -2677,19 +3093,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'PlusDecimalEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'ValidFargateSplunk' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "PlusDecimalEquivalent", + "logicalId": "ValidFargateSplunk", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 41, + "startLine": 30, "startColumn": 5, - "endLine": 41, + "endLine": 30, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -2697,19 +3113,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LeadingZeroEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'NonFargateTask' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LeadingZeroEquivalent", + "logicalId": "NonFargateTask", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 53, + "startLine": 47, "startColumn": 5, - "endLine": 53, + "endLine": 47, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -2717,19 +3133,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LeadingDecimalPointEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'FargateNullPC' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LeadingDecimalPointEquivalent", + "logicalId": "FargateNullPC", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 65, + "startLine": 62, "startColumn": 5, - "endLine": 65, + "endLine": 62, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -2737,193 +3153,238 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TrailingDecimalPointEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'PayPerRequestTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TrailingDecimalPointEquivalent", + "logicalId": "PayPerRequestTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 77, + "startLine": 78, "startColumn": 5, - "endLine": 77, + "endLine": 78, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/ecs_fargate_parameterized_cpu_memory.yaml": { - "filePath": "good/ecs_fargate_parameterized_cpu_memory.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 29, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I1022", + "ruleId": "I9040", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Resource 'ProvisionedTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "JoinedTask", + "logicalId": "ProvisionedTable", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Cpu.Fn::Join", - "category": "Intrinsic Function", - "startLine": 66, - "startColumn": 7, - "endLine": 66, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 91, + "startColumn": 5, + "endLine": 91, "endColumn": 15, - "ruleDescription": "Use Sub instead of Join", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Resource 'DefaultWithThroughput' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskA", + "logicalId": "DefaultWithThroughput", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 29, - "startColumn": 7, - "endLine": 29, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 107, + "startColumn": 5, + "endLine": 107, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Resource 'FargateIntCpu' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskA", + "logicalId": "FargateIntCpu", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 30, - "startColumn": 7, - "endLine": 30, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" - } + "startLine": 122, + "startColumn": 5, + "endLine": 122, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Resource 'CorrelatedFargateThenEc2' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskA", + "logicalId": "CorrelatedFargateThenEc2", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", - "category": "Best Practice", - "startLine": 31, - "startColumn": 7, - "endLine": 31, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 138, + "startColumn": 5, + "endLine": 138, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Resource 'CorrelatedEc2ThenFargate' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskA", + "logicalId": "CorrelatedEc2ThenFargate", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 32, - "startColumn": 7, - "endLine": 32, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 150, + "startColumn": 5, + "endLine": 150, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Resource 'CorrelatedProvisionedThenOnDemand' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskA", + "logicalId": "CorrelatedProvisionedThenOnDemand", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 163, + "startColumn": 5, + "endLine": 163, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CorrelatedOnDemandThenProvisioned' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "CorrelatedOnDemandThenProvisioned", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 174, + "startColumn": 5, + "endLine": 174, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CorrelatedFargateSizeThenEc2' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "CorrelatedFargateSizeThenEc2", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 186, + "startColumn": 5, + "endLine": 186, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CorrelatedEc2SizeThenFargate' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "CorrelatedEc2SizeThenFargate", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 198, + "startColumn": 5, + "endLine": 198, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/ecs_fargate_decimal_units.yaml": { + "filePath": "good/ecs_fargate_decimal_units.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 7, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 42, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskA", + "logicalId": "QuarterVcpuDecimal", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 34, + "startLine": 6, "startColumn": 7, - "endLine": 34, - "endColumn": 27, + "endLine": 6, + "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -2934,19 +3395,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskB", + "logicalId": "QuarterVcpuDecimal", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 41, + "startLine": 7, "startColumn": 7, - "endLine": 41, - "endColumn": 13, + "endLine": 7, + "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -2960,22 +3421,21 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskB", + "logicalId": "QuarterVcpuDecimal", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 42, + "startLine": 8, "startColumn": 7, - "endLine": 42, + "endLine": 8, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" + "lifecycle": "create-only" } }, { @@ -2984,15 +3444,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskB", + "logicalId": "QuarterVcpuDecimal", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 43, + "startLine": 9, "startColumn": 7, - "endLine": 43, + "endLine": 9, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -3004,19 +3464,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskB", + "logicalId": "QuarterVcpuDecimal", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 44, + "startLine": 10, "startColumn": 7, - "endLine": 44, - "endColumn": 18, + "endLine": 10, + "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -3030,15 +3490,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskB", + "logicalId": "HalfVcpuDecimal", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 45, + "startLine": 18, "startColumn": 7, - "endLine": 45, + "endLine": 18, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -3050,19 +3510,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskB", + "logicalId": "HalfVcpuDecimal", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 46, + "startLine": 19, "startColumn": 7, - "endLine": 46, - "endColumn": 27, + "endLine": 19, + "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -3073,19 +3533,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MappedTask", + "logicalId": "HalfVcpuDecimal", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 53, + "startLine": 20, "startColumn": 7, - "endLine": 53, - "endColumn": 13, + "endLine": 20, + "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -3096,67 +3556,65 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MappedTask", + "logicalId": "HalfVcpuDecimal", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 54, + "startLine": 21, "startColumn": 7, - "endLine": 54, - "endColumn": 10, + "endLine": 21, + "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MappedTask", + "logicalId": "HalfVcpuDecimal", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 55, + "startLine": 22, "startColumn": 7, - "endLine": 55, - "endColumn": 13, + "endLine": 22, + "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MappedTask", + "logicalId": "DecimalEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 56, + "startLine": 30, "startColumn": 7, - "endLine": 56, - "endColumn": 18, + "endLine": 30, + "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -3167,19 +3625,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MappedTask", + "logicalId": "DecimalEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 57, + "startLine": 31, "startColumn": 7, - "endLine": 57, - "endColumn": 30, + "endLine": 31, + "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -3190,19 +3648,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MappedTask", + "logicalId": "DecimalEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 58, + "startLine": 32, "startColumn": 7, - "endLine": 58, - "endColumn": 27, + "endLine": 32, + "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -3213,18 +3671,18 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "JoinedTask", + "logicalId": "DecimalEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 65, + "startLine": 33, "startColumn": 7, - "endLine": 65, + "endLine": 33, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -3236,43 +3694,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "JoinedTask", + "logicalId": "DecimalEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 66, + "startLine": 34, "startColumn": 7, - "endLine": 66, - "endColumn": 10, + "endLine": 34, + "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "JoinedTask", + "logicalId": "PlusDecimalEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 67, + "startLine": 42, "startColumn": 7, - "endLine": 67, - "endColumn": 13, + "endLine": 42, + "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -3286,15 +3743,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "JoinedTask", + "logicalId": "PlusDecimalEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 68, + "startLine": 43, "startColumn": 7, - "endLine": 68, + "endLine": 43, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -3306,19 +3763,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "JoinedTask", + "logicalId": "PlusDecimalEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 69, + "startLine": 44, "startColumn": 7, - "endLine": 69, - "endColumn": 30, + "endLine": 44, + "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -3329,19 +3786,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "JoinedTask", + "logicalId": "PlusDecimalEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 70, + "startLine": 45, "startColumn": 7, - "endLine": 70, - "endColumn": 27, + "endLine": 45, + "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -3349,121 +3806,22 @@ "lifecycle": "create-only" } }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TaskA' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TaskA", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 28, - "startColumn": 5, - "endLine": 28, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TaskB' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TaskB", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 40, - "startColumn": 5, - "endLine": 40, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MappedTask' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MappedTask", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 52, - "startColumn": 5, - "endLine": 52, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'JoinedTask' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "JoinedTask", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 64, - "startColumn": 5, - "endLine": 64, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/ecs_fargate_units_and_sizes.yaml": { - "filePath": "good/ecs_fargate_units_and_sizes.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 43, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "QuarterVcpuHalfGb", + "logicalId": "PlusDecimalEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 8, + "startLine": 46, "startColumn": 7, - "endLine": 8, - "endColumn": 13, + "endLine": 46, + "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -3477,15 +3835,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "QuarterVcpuHalfGb", + "logicalId": "LeadingZeroEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 9, + "startLine": 54, "startColumn": 7, - "endLine": 9, + "endLine": 54, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -3500,15 +3858,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "QuarterVcpuHalfGb", + "logicalId": "LeadingZeroEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 10, + "startLine": 55, "startColumn": 7, - "endLine": 10, + "endLine": 55, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -3523,15 +3881,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "QuarterVcpuHalfGb", + "logicalId": "LeadingZeroEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 11, + "startLine": 56, "startColumn": 7, - "endLine": 11, + "endLine": 56, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -3546,15 +3904,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "QuarterVcpuHalfGb", + "logicalId": "LeadingZeroEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 12, + "startLine": 57, "startColumn": 7, - "endLine": 12, + "endLine": 57, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -3569,15 +3927,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "QuarterVcpuHalfGb", + "logicalId": "LeadingZeroEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 16, + "startLine": 58, "startColumn": 7, - "endLine": 16, + "endLine": 58, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -3589,41 +3947,18 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EightVcpuSixtyGb", + "logicalId": "LeadingDecimalPointEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 24, + "startLine": 66, "startColumn": 7, - "endLine": 24, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "EightVcpuSixtyGb", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 25, - "startColumn": 7, - "endLine": 25, + "endLine": 66, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -3638,15 +3973,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EightVcpuSixtyGb", + "logicalId": "LeadingDecimalPointEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 26, + "startLine": 67, "startColumn": 7, - "endLine": 26, + "endLine": 67, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -3661,15 +3996,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EightVcpuSixtyGb", + "logicalId": "LeadingDecimalPointEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 27, + "startLine": 68, "startColumn": 7, - "endLine": 27, + "endLine": 68, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -3684,15 +4019,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EightVcpuSixtyGb", + "logicalId": "LeadingDecimalPointEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 28, + "startLine": 69, "startColumn": 7, - "endLine": 28, + "endLine": 69, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -3707,15 +4042,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EightVcpuSixtyGb", + "logicalId": "LeadingDecimalPointEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 32, + "startLine": 70, "startColumn": 7, - "endLine": 32, + "endLine": 70, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -3724,44 +4059,21 @@ "lifecycle": "create-only" } }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SixteenVcpuFortyGb", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Family", - "category": "Best Practice", - "startLine": 40, - "startColumn": 7, - "endLine": 40, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SixteenVcpuFortyGb", + "logicalId": "TrailingDecimalPointEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 41, + "startLine": 78, "startColumn": 7, - "endLine": 41, + "endLine": 78, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -3776,15 +4088,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SixteenVcpuFortyGb", + "logicalId": "TrailingDecimalPointEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 42, + "startLine": 79, "startColumn": 7, - "endLine": 42, + "endLine": 79, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -3799,15 +4111,15 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SixteenVcpuFortyGb", + "logicalId": "TrailingDecimalPointEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 43, + "startLine": 80, "startColumn": 7, - "endLine": 43, + "endLine": 80, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -3822,15 +4134,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SixteenVcpuFortyGb", + "logicalId": "TrailingDecimalPointEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 44, + "startLine": 81, "startColumn": 7, - "endLine": 44, + "endLine": 81, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -3845,15 +4157,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SixteenVcpuFortyGb", + "logicalId": "TrailingDecimalPointEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 48, + "startLine": 82, "startColumn": 7, - "endLine": 48, + "endLine": 82, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -3863,205 +4175,199 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Resource 'QuarterVcpuDecimal' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuSixtyGb", + "logicalId": "QuarterVcpuDecimal", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 56, - "startColumn": 7, - "endLine": 56, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Resource 'HalfVcpuDecimal' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuSixtyGb", + "logicalId": "HalfVcpuDecimal", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 57, - "startColumn": 7, - "endLine": 57, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 17, + "startColumn": 5, + "endLine": 17, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Resource 'DecimalEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuSixtyGb", + "logicalId": "DecimalEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 58, - "startColumn": 7, - "endLine": 58, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "message": "Resource 'PlusDecimalEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuSixtyGb", + "logicalId": "PlusDecimalEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Cpu", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 59, - "startColumn": 7, - "endLine": 59, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 41, + "startColumn": 5, + "endLine": 41, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "message": "Resource 'LeadingZeroEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuSixtyGb", + "logicalId": "LeadingZeroEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Memory", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 60, - "startColumn": 7, - "endLine": 60, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 53, + "startColumn": 5, + "endLine": 53, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Resource 'LeadingDecimalPointEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuSixtyGb", + "logicalId": "LeadingDecimalPointEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 64, - "startColumn": 7, - "endLine": 64, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 65, + "startColumn": 5, + "endLine": 65, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Resource 'TrailingDecimalPointEquivalent' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuOneTwentyGb", + "logicalId": "TrailingDecimalPointEquivalent", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 72, - "startColumn": 7, - "endLine": 72, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 77, + "startColumn": 5, + "endLine": 77, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/ecs_fargate_parameterized_cpu_memory.yaml": { + "filePath": "good/ecs_fargate_parameterized_cpu_memory.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 29, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I1022", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", "entity": { - "logicalId": "ThirtyTwoVcpuOneTwentyGb", + "logicalId": "JoinedTask", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 73, + "propertyPath": "Properties.Cpu.Fn::Join", + "category": "Intrinsic Function", + "startLine": 66, "startColumn": 7, - "endLine": 73, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 66, + "endColumn": 15, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuOneTwentyGb", + "logicalId": "TaskA", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 74, + "startLine": 29, "startColumn": 7, - "endLine": 74, - "endColumn": 18, + "endLine": 29, + "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -4075,21 +4381,22 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuOneTwentyGb", + "logicalId": "TaskA", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 75, + "startLine": 30, "startColumn": 7, - "endLine": 75, + "endLine": 30, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { @@ -4098,15 +4405,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuOneTwentyGb", + "logicalId": "TaskA", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 76, + "startLine": 31, "startColumn": 7, - "endLine": 76, + "endLine": 31, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -4118,19 +4425,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuOneTwentyGb", + "logicalId": "TaskA", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 80, + "startLine": 32, "startColumn": 7, - "endLine": 80, - "endColumn": 27, + "endLine": 32, + "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -4141,19 +4448,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", + "logicalId": "TaskA", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 88, + "startLine": 33, "startColumn": 7, - "endLine": 88, - "endColumn": 13, + "endLine": 33, + "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -4164,19 +4471,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", + "logicalId": "TaskA", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 89, + "startLine": 34, "startColumn": 7, - "endLine": 89, - "endColumn": 30, + "endLine": 34, + "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -4187,19 +4494,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", + "logicalId": "TaskB", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 90, + "startLine": 41, "startColumn": 7, - "endLine": 90, - "endColumn": 18, + "endLine": 41, + "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -4213,21 +4520,22 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", + "logicalId": "TaskB", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 91, + "startLine": 42, "startColumn": 7, - "endLine": 91, + "endLine": 42, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { @@ -4236,15 +4544,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", + "logicalId": "TaskB", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 92, + "startLine": 43, "startColumn": 7, - "endLine": 92, + "endLine": 43, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -4256,19 +4564,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", + "logicalId": "TaskB", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 96, + "startLine": 44, "startColumn": 7, - "endLine": 96, - "endColumn": 27, + "endLine": 44, + "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -4279,19 +4587,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalRequiredProperties", + "logicalId": "TaskB", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Family", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 105, + "startLine": 45, "startColumn": 7, - "endLine": 105, - "endColumn": 13, + "endLine": 45, + "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -4302,19 +4610,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalRequiredProperties", + "logicalId": "TaskB", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.RequiresCompatibilities", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 106, + "startLine": 46, "startColumn": 7, - "endLine": 106, - "endColumn": 30, + "endLine": 46, + "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -4325,25 +4633,24 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalRequiredProperties", + "logicalId": "MappedTask", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.NetworkMode", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 107, + "startLine": 53, "startColumn": 7, - "endLine": 107, - "endColumn": 18, + "endLine": 53, + "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseAlternateSize'" + "lifecycle": "create-only" } }, { @@ -4352,22 +4659,22 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalRequiredProperties", + "logicalId": "MappedTask", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 108, + "startLine": 54, "startColumn": 7, - "endLine": 108, + "endLine": 54, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseAlternateSize'" + "resolutionSource": "parameter with AllowedValues" } }, { @@ -4376,105 +4683,108 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalRequiredProperties", + "logicalId": "MappedTask", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 109, + "startLine": 55, "startColumn": 7, - "endLine": 109, + "endLine": 55, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseAlternateSize'" + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PlacementConstraints' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalRequiredProperties", + "logicalId": "MappedTask", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.PlacementConstraints", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 110, + "startLine": 56, "startColumn": 7, - "endLine": 110, - "endColumn": 27, + "endLine": 56, + "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'UseAlternateSize'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalRequiredProperties", + "logicalId": "MappedTask", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ContainerDefinitions", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 114, + "startLine": 57, "startColumn": 7, - "endLine": 114, - "endColumn": 27, + "endLine": 57, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MappedTask", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 58, + "startColumn": 7, + "endLine": 58, + "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } - } - ] - }, - "good/ecs_fargate_valid.yaml": { - "filePath": "good/ecs_fargate_valid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 7, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "JoinedTask", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 6, + "startLine": 65, "startColumn": 7, - "endLine": 6, + "endLine": 65, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -4489,21 +4799,22 @@ "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "JoinedTask", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 7, + "startLine": 66, "startColumn": 7, - "endLine": 7, + "endLine": 66, "endColumn": 10, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { @@ -4512,15 +4823,15 @@ "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "JoinedTask", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 8, + "startLine": 67, "startColumn": 7, - "endLine": 8, + "endLine": 67, "endColumn": 13, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -4535,15 +4846,15 @@ "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "JoinedTask", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 9, + "startLine": 68, "startColumn": 7, - "endLine": 9, + "endLine": 68, "endColumn": 18, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -4558,15 +4869,15 @@ "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "JoinedTask", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 10, + "startLine": 69, "startColumn": 7, - "endLine": 10, + "endLine": 69, "endColumn": 30, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -4581,15 +4892,15 @@ "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "JoinedTask", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 12, + "startLine": 70, "startColumn": 7, - "endLine": 12, + "endLine": 70, "endColumn": 27, "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", @@ -4601,74 +4912,95 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "message": "Resource 'TaskA' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TaskDef", + "logicalId": "TaskA", "entityType": "Resource", "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 28, "startColumn": 5, - "endLine": 5, + "endLine": 28, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/elb_https_empty_sslcertificateid.yaml": { - "filePath": "good/elb_https_empty_sslcertificateid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ELB' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", + "message": "Resource 'TaskB' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ELB", + "logicalId": "TaskB", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 7, + "startLine": 40, "startColumn": 5, - "endLine": 7, + "endLine": 40, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MappedTask' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "MappedTask", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 52, + "startColumn": 5, + "endLine": 52, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'JoinedTask' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "JoinedTask", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 64, + "startColumn": 5, + "endLine": 64, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/enum_case_insensitive_casing.yaml": { - "filePath": "good/enum_case_insensitive_casing.yaml", + "good/ecs_fargate_units_and_sizes.yaml": { + "filePath": "good/ecs_fargate_units_and_sizes.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 7, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 6, + "informational": 43, "debug": 0 }, "suppressed": 0, @@ -4679,19 +5011,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LowercaseType", + "logicalId": "QuarterVcpuHalfGb", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 13, + "startLine": 8, "startColumn": 7, - "endLine": 13, - "endColumn": 11, + "endLine": 8, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -4701,63 +5034,66 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ComputeResources.Subnets' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LowercaseType", + "logicalId": "QuarterVcpuHalfGb", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ComputeResources.Subnets", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 16, - "startColumn": 9, - "endLine": 16, - "endColumn": 16, + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ComputeResources.Type' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LowercaseType", + "logicalId": "QuarterVcpuHalfGb", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ComputeResources.Type", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 18, - "startColumn": 9, - "endLine": 18, - "endColumn": 13, + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Tags' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LowercaseType", + "logicalId": "QuarterVcpuHalfGb", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 20, + "startLine": 11, "startColumn": 7, - "endLine": 20, - "endColumn": 11, + "endLine": 11, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -4767,19 +5103,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MixedCaseType", + "logicalId": "QuarterVcpuHalfGb", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Type", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 25, + "startLine": 12, "startColumn": 7, - "endLine": 25, - "endColumn": 11, + "endLine": 12, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -4789,60 +5126,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Tags' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MixedCaseType", + "logicalId": "QuarterVcpuHalfGb", "entityType": "Resource", - "resourceType": "AWS::Batch::ComputeEnvironment" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 27, + "startLine": 16, "startColumn": 7, - "endLine": 27, - "endColumn": 11, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", + "endLine": 16, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { "lifecycle": "create-only" } - } - ] - }, - "good/functions/dynamic_reference_embedded.yaml": { - "filePath": "good/functions/dynamic_reference_embedded.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 8, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Sg", + "logicalId": "EightVcpuSixtyGb", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 11, + "startLine": 24, "startColumn": 7, - "endLine": 11, - "endColumn": 23, + "endLine": 24, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -4852,543 +5172,457 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Sg", + "logicalId": "EightVcpuSixtyGb", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.GroupName", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 12, + "startLine": 25, "startColumn": 7, - "endLine": 12, - "endColumn": 16, + "endLine": 25, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (dynamic reference: prefix-{{resolve:ssm:/network/sg-name}})" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "EightVcpuSixtyGb", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 19, + "startLine": 26, "startColumn": 7, - "endLine": 19, - "endColumn": 17, + "endLine": 26, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (dynamic reference: {{resolve:ssm:/config/bucket-name}})" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Instance", + "logicalId": "EightVcpuSixtyGb", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 34, + "startLine": 27, "startColumn": 7, - "endLine": 34, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 27, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (dynamic reference: prefix-{{resolve:ssm:/ec2/ami-id}})" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Instance", + "logicalId": "EightVcpuSixtyGb", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 35, + "startLine": 28, "startColumn": 7, - "endLine": 35, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 28, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ScheduledRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ScheduledRule", + "logicalId": "EightVcpuSixtyGb", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 32, + "startColumn": 7, + "endLine": 32, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Instance", + "logicalId": "SixteenVcpuFortyGb", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 33, - "startColumn": 5, - "endLine": 33, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/functions/foreach.yaml": { - "filePath": "good/functions/foreach.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 + "startLine": 40, + "startColumn": 7, + "endLine": 40, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'S3BucketA' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "S3BucketA", + "logicalId": "SixteenVcpuFortyGb", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 10, - "startColumn": 1, - "endLine": 10, - "endColumn": 10, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 41, + "startColumn": 7, + "endLine": 41, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'S3BucketB' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "S3BucketB", + "logicalId": "SixteenVcpuFortyGb", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 10, - "startColumn": 1, - "endLine": 10, - "endColumn": 10, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 42, + "startColumn": 7, + "endLine": 42, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'S3BucketC' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "S3BucketC", + "logicalId": "SixteenVcpuFortyGb", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 10, - "startColumn": 1, - "endLine": 10, + "startLine": 43, + "startColumn": 7, + "endLine": 43, "endColumn": 10, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/functions/get_stack_output.yaml": { - "filePath": "good/functions/get_stack_output.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 10, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 10, - "debug": 0 + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Topic1' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic1", + "logicalId": "SixteenVcpuFortyGb", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 15, - "startColumn": 5, - "endLine": 15, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 44, + "startColumn": 7, + "endLine": 44, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Topic2' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic2", + "logicalId": "SixteenVcpuFortyGb", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 23, - "startColumn": 5, - "endLine": 23, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 48, + "startColumn": 7, + "endLine": 48, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Topic3' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic3", + "logicalId": "ThirtyTwoVcpuSixtyGb", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 33, - "startColumn": 5, - "endLine": 33, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 56, + "startColumn": 7, + "endLine": 56, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Topic4' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic4", + "logicalId": "ThirtyTwoVcpuSixtyGb", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 44, - "startColumn": 5, - "endLine": 44, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 57, + "startColumn": 7, + "endLine": 57, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Topic5' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic5", + "logicalId": "ThirtyTwoVcpuSixtyGb", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 55, - "startColumn": 5, - "endLine": 55, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 58, + "startColumn": 7, + "endLine": 58, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Topic6' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic6", + "logicalId": "ThirtyTwoVcpuSixtyGb", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 65, - "startColumn": 5, - "endLine": 65, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 59, + "startColumn": 7, + "endLine": 59, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Topic7' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic7", + "logicalId": "ThirtyTwoVcpuSixtyGb", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 74, - "startColumn": 5, - "endLine": 74, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 60, + "startColumn": 7, + "endLine": 60, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Topic8' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic8", + "logicalId": "ThirtyTwoVcpuSixtyGb", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 83, - "startColumn": 5, - "endLine": 83, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 64, + "startColumn": 7, + "endLine": 64, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Topic9' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic9", + "logicalId": "ThirtyTwoVcpuOneTwentyGb", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 95, - "startColumn": 5, - "endLine": 95, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 72, + "startColumn": 7, + "endLine": 72, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Topic10' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Topic10", + "logicalId": "ThirtyTwoVcpuOneTwentyGb", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 106, - "startColumn": 5, - "endLine": 106, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/functions/ref.yaml": { - "filePath": "good/functions/ref.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "good/functions/relationship_conditions.yaml": { - "filePath": "good/functions/relationship_conditions.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 1, - "errors": 1, - "warnings": 0, - "informational": 4, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'Role' is a required property", - "source": "SCHEMA", - "entity": { - "logicalId": "AMIIDLookup", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'Role'", - "category": "Schema", - "startLine": 36, - "startColumn": 5, - "endLine": 36, - "endColumn": 15, - "conditionScenario": { - "isPrimary": false - }, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" - }, - { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "AMIIDLookup", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 46, + "startLine": 73, "startColumn": 7, - "endLine": 46, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "endLine": 73, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs4.3", - "lifecycle": "end-of-life" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaExecutionRole", + "logicalId": "ThirtyTwoVcpuOneTwentyGb", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 26, + "startLine": 74, "startColumn": 7, - "endLine": 26, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 74, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5398,19 +5632,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "InstanceProfile", + "logicalId": "ThirtyTwoVcpuOneTwentyGb", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 31, + "startLine": 75, "startColumn": 7, - "endLine": 31, - "endColumn": 11, + "endLine": 75, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5418,229 +5653,160 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaExecutionRole", + "logicalId": "ThirtyTwoVcpuOneTwentyGb", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 14, - "startColumn": 5, - "endLine": 14, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 76, + "startColumn": 7, + "endLine": 76, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'AMIIDLookup' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AMIIDLookup", + "logicalId": "ThirtyTwoVcpuOneTwentyGb", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 36, - "startColumn": 5, - "endLine": 36, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/functions/relationship_conditions_sam.yaml": { - "filePath": "good/functions/relationship_conditions_sam.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 4, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'provided.al2' was deprecated on '2026-07-31'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'provided.al2023'", - "source": "CFN_LINT", - "entity": { - "logicalId": "FunctionC", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 36, + "startLine": 80, "startColumn": 7, - "endLine": 36, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 80, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "provided.al2", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApplicationId' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigEnvironment", + "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", "entityType": "Resource", - "resourceType": "AWS::AppConfig::Environment" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.ApplicationId", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 31, + "startLine": 88, "startColumn": 7, - "endLine": 31, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appconfig.git", + "endLine": 88, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'ConfigApplication'" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ConfigApplication' of type 'AWS::AppConfig::Application' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ConfigApplication", - "entityType": "Resource", - "resourceType": "AWS::AppConfig::Application" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ConfigEnvironment' of type 'AWS::AppConfig::Environment' supports Tags but none are configured", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigEnvironment", + "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", "entityType": "Resource", - "resourceType": "AWS::AppConfig::Environment" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 30, - "startColumn": 5, - "endLine": 30, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 89, + "startColumn": 7, + "endLine": 89, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FunctionC' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionC", + "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 35, - "startColumn": 5, - "endLine": 35, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/functions/select_string_index.yaml": { - "filePath": "good/functions/select_string_index.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 10, - "debug": 0 + "startLine": 90, + "startColumn": 7, + "endLine": 90, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 10, + "startLine": 91, "startColumn": 7, - "endLine": 10, - "endColumn": 12, + "endLine": 91, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 11, + "startLine": 92, "startColumn": 7, - "endLine": 11, - "endColumn": 16, + "endLine": 92, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5650,65 +5816,66 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "ThirtyTwoVcpuTwoFortyFourGb", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 12, + "startLine": 96, "startColumn": 7, - "endLine": 12, - "endColumn": 23, + "endLine": 96, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Select on non-list value)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "ConditionalRequiredProperties", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 19, + "startLine": 105, "startColumn": 7, - "endLine": 19, - "endColumn": 12, + "endLine": 105, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "ConditionalRequiredProperties", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 20, + "startLine": 106, "startColumn": 7, - "endLine": 20, - "endColumn": 16, + "endLine": 106, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -5718,120 +5885,134 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "ConditionalRequiredProperties", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 21, + "startLine": 107, "startColumn": 7, - "endLine": 21, - "endColumn": 23, + "endLine": 107, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Select on non-list value)" + "resolutionSource": "Fn::If on condition 'UseAlternateSize'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Vpc", + "logicalId": "ConditionalRequiredProperties", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 28, + "startLine": 108, "startColumn": 7, - "endLine": 28, - "endColumn": 16, + "endLine": 108, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseAlternateSize'" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SubnetA' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "ConditionalRequiredProperties", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 109, + "startColumn": 7, + "endLine": 109, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseAlternateSize'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SubnetB' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Property 'PlacementConstraints' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "ConditionalRequiredProperties", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.PlacementConstraints", "category": "Best Practice", - "startLine": 18, - "startColumn": 5, - "endLine": 18, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 110, + "startColumn": 7, + "endLine": 110, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'UseAlternateSize'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Vpc", + "logicalId": "ConditionalRequiredProperties", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 27, - "startColumn": 5, - "endLine": 27, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 114, + "startColumn": 7, + "endLine": 114, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } } ] }, - "good/functions/split_get_stack_output.yaml": { - "filePath": "good/functions/split_get_stack_output.yaml", + "good/ecs_fargate_valid.yaml": { + "filePath": "good/ecs_fargate_valid.yaml", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 3, + "informational": 7, "debug": 0 }, "suppressed": 0, @@ -5840,77 +6021,214 @@ }, "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Family", "category": "Best Practice", "startLine": 6, - "startColumn": 5, + "startColumn": 7, "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "TaskDef", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Cpu", + "category": "Best Practice", + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "TaskDef", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.Memory", + "category": "Best Practice", + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "TaskDef", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.NetworkMode", + "category": "Best Practice", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "TaskDef", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.RequiresCompatibilities", + "category": "Best Practice", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "TaskDef", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'AllHeaders' of type 'AWS::SSM::Parameter' supports Tags but none are configured", + "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AllHeaders", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 21, + "startLine": 5, "startColumn": 5, - "endLine": 21, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/elb_https_empty_sslcertificateid.yaml": { + "filePath": "good/elb_https_empty_sslcertificateid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FirstHeader' of type 'AWS::SSM::Parameter' supports Tags but none are configured", + "message": "Resource 'ELB' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FirstHeader", + "logicalId": "ELB", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 34, + "startLine": 7, "startColumn": 5, - "endLine": 34, + "endLine": 7, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/functions/sub.yaml": { - "filePath": "good/functions/sub.yaml", + "good/enum_case_insensitive_casing.yaml": { + "filePath": "good/enum_case_insensitive_casing.yaml", "status": "OK", "metadata": { - "resourcesScanned": 7, + "resourcesScanned": 2, "counts": { - "fatal": 3, - "errors": 2, - "warnings": 2, - "informational": 16, + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 6, "debug": 0 }, "suppressed": 0, @@ -5919,520 +6237,411 @@ }, "diagnostics": [ { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('ProductName' was unexpected)", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyStack", + "logicalId": "LowercaseType", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Batch::ComputeEnvironment" }, - "propertyPath": "Properties.ProductName", - "category": "Schema", - "startLine": 67, + "propertyPath": "Properties.Type", + "category": "Best Practice", + "startLine": 13, "startColumn": 7, - "endLine": 67, - "endColumn": 18, - "ruleDescription": "Additional properties are not allowed", + "endLine": 13, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "ProductName", - "extra": { - "allowed_properties": [ - "NotificationARNs", - "Parameters", - "StackId", - "Tags", - "TemplateURL", - "TimeoutInMinutes" - ] - } + "lifecycle": "create-only" } }, { - "ruleId": "F3002", - "severity": "FATAL", - "message": "Additional properties are not allowed ('ProvisioningArtifactName' was unexpected)", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ComputeResources.Subnets' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyStack", + "logicalId": "LowercaseType", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Batch::ComputeEnvironment" }, - "propertyPath": "Properties.ProvisioningArtifactName", - "category": "Schema", - "startLine": 68, - "startColumn": 7, - "endLine": 68, - "endColumn": 31, - "ruleDescription": "Additional properties are not allowed", + "propertyPath": "Properties.ComputeResources.Subnets", + "category": "Best Practice", + "startLine": 16, + "startColumn": 9, + "endLine": 16, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "ProvisioningArtifactName", - "extra": { - "allowed_properties": [ - "NotificationARNs", - "Parameters", - "StackId", - "Tags", - "TemplateURL", - "TimeoutInMinutes" - ] - } + "lifecycle": "conditional-create-only" } }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'TemplateURL' is a required property", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ComputeResources.Type' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyStack", + "logicalId": "LowercaseType", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Batch::ComputeEnvironment" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'TemplateURL'", - "category": "Schema", - "startLine": 66, - "startColumn": 5, - "endLine": 66, - "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "propertyPath": "Properties.ComputeResources.Type", + "category": "Best Practice", + "startLine": 18, + "startColumn": 9, + "endLine": 18, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'String' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Tags' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "LowercaseType", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Batch::ComputeEnvironment" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 33, + "propertyPath": "Properties.Tags", + "category": "Best Practice", + "startLine": 20, "startColumn": 7, - "endLine": 33, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", + "endLine": 20, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "String" + "lifecycle": "create-only" } }, { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-123456' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LaunchConfiguration", + "logicalId": "MixedCaseType", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Batch::ComputeEnvironment" }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 57, + "propertyPath": "Properties.Type", + "category": "Best Practice", + "startLine": 25, "startColumn": 7, - "endLine": 57, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Validate AMI id format", + "endLine": 25, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "ami-123456" + "lifecycle": "create-only" } }, { - "ruleId": "W3002", - "severity": "WARN", - "message": "This code may only work with 'package' cli command", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Tags' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "mySubStack", + "logicalId": "MixedCaseType", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::Batch::ComputeEnvironment" }, - "propertyPath": "Properties.TemplateURL", + "propertyPath": "Properties.Tags", "category": "Best Practice", - "startLine": 44, + "startLine": 27, "startColumn": 7, - "endLine": 44, - "endColumn": 18, - "ruleDescription": "Warn when properties are configured to only work with the package command", - "phase": "LINT" + "endLine": 27, + "endColumn": 11, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + } + ] + }, + "good/functions/dynamic_reference_embedded.yaml": { + "filePath": "good/functions/dynamic_reference_embedded.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 8, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W3697", - "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LaunchConfiguration", + "logicalId": "Sg", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EC2::SecurityGroup" }, - "category": "Deprecation", - "startLine": 54, - "startColumn": 3, - "endLine": 54, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "mySubStack", + "logicalId": "Sg", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::EC2::SecurityGroup" }, + "propertyPath": "Properties.GroupName", "category": "Best Practice", - "startLine": 41, - "startColumn": 3, - "endLine": 41, - "endColumn": 13, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (dynamic reference: prefix-{{resolve:ssm:/network/sg-name}})" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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": "mySubStack", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "category": "Best Practice", - "startLine": 41, - "startColumn": 3, - "endLine": 41, - "endColumn": 13, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "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": "MyStack", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "category": "Best Practice", - "startLine": 64, - "startColumn": 3, - "endLine": 64, - "endColumn": 10, - "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": "MyStack", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "category": "Best Practice", - "startLine": 64, - "startColumn": 3, - "endLine": 64, - "endColumn": 10, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 33, + "startLine": 19, "startColumn": 7, - "endLine": 33, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 19, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (dynamic reference: {{resolve:ssm:/config/bucket-name}})" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "Instance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.ImageId", "category": "Best Practice", "startLine": 34, "startColumn": 7, "endLine": 34, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Base64 with unresolvable argument)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "myAlb", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" - }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 52, - "startColumn": 7, - "endLine": 52, - "endColumn": 11, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LaunchConfiguration", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 57, - "startColumn": 7, - "endLine": 57, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (dynamic reference: prefix-{{resolve:ssm:/ec2/ami-id}})" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LaunchConfiguration", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 58, + "startLine": 35, "startColumn": 7, - "endLine": 58, + "endLine": 35, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9003", "severity": "INFO", - "message": "Property 'UserData' is create-only; updating it will cause resource replacement", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", "source": "ENGINE", - "entity": { - "logicalId": "LaunchConfiguration", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 59, - "startColumn": 7, - "endLine": 59, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Base64 with unresolvable argument)" - } + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'ScheduledRule' of type 'AWS::Events::Rule' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myVPc2", + "logicalId": "ScheduledRule", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Events::Rule" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 72, - "startColumn": 7, - "endLine": 72, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:${myCidr}1)" - } + "startLine": 25, + "startColumn": 5, + "endLine": 25, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "Instance", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 32, + "startLine": 33, "startColumn": 5, - "endLine": 32, + "endLine": 33, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/functions/foreach.yaml": { + "filePath": "good/functions/foreach.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'mySubStack' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Resource 'S3BucketA' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySubStack", + "logicalId": "S3BucketA", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 43, - "startColumn": 5, - "endLine": 43, - "endColumn": 15, + "startLine": 10, + "startColumn": 1, + "endLine": 10, + "endColumn": 10, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myAlb' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "message": "Resource 'S3BucketB' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myAlb", + "logicalId": "S3BucketB", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 51, - "startColumn": 5, - "endLine": 51, - "endColumn": 15, + "startLine": 10, + "startColumn": 1, + "endLine": 10, + "endColumn": 10, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyStack' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Resource 'S3BucketC' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyStack", + "logicalId": "S3BucketC", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 66, - "startColumn": 5, - "endLine": 66, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myVPc2' of type 'AWS::EC2::VPC' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "myVPc2", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 71, - "startColumn": 5, - "endLine": 71, - "endColumn": 15, + "startLine": 10, + "startColumn": 1, + "endLine": 10, + "endColumn": 10, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/functions/sub_needed.yaml": { - "filePath": "good/functions/sub_needed.yaml", + "good/functions/get_stack_output.yaml": { + "filePath": "good/functions/get_stack_output.yaml", "status": "OK", "metadata": { - "resourcesScanned": 6, + "resourcesScanned": 10, "counts": { - "fatal": 3, + "fatal": 0, "errors": 0, - "warnings": 4, - "informational": 9, + "warnings": 0, + "informational": 10, "debug": 0 }, "suppressed": 0, @@ -6441,271 +6650,327 @@ }, "diagnostics": [ { - "ruleId": "F1020", - "severity": "FATAL", - "message": "Fn::GetAtt references non-existent resource 'GreetingLambda'", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Topic1' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "GreetingRequest", + "logicalId": "Topic1", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::SNS::Topic" }, - "suggestedFix": "Check that the GetAtt target resource exists in the template", - "category": "Intrinsic Function", - "startLine": 86, - "startColumn": 3, - "endLine": 86, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'GreetingResource' is not one of ['AMIId', 'AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'GreetingRequest', 'IOTPolicies', 'Key', 'MyContentBucket', 'TestGoodStateMachine1', 'myPolicy', 'myPolicy2']", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Topic2' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "GreetingRequest", + "logicalId": "Topic2", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ResourceId", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 114, - "startColumn": 7, - "endLine": 114, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA", - "context": { - "resolutionSource": "dynamic (unknown ref target: GreetingResource)" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 23, + "startColumn": 5, + "endLine": 23, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'GreetingApi' is not one of ['AMIId', 'AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'GreetingRequest', 'IOTPolicies', 'Key', 'MyContentBucket', 'TestGoodStateMachine1', 'myPolicy', 'myPolicy2']", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Topic3' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "GreetingRequest", + "logicalId": "Topic3", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.RestApiId", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 115, - "startColumn": 7, - "endLine": 115, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA", - "context": { - "resolutionSource": "dynamic (unknown ref target: GreetingApi)" - } - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'MyContentBucket' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyContentBucket", - "entityType": "Parameter" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Parameters/MyContentBucket", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 18, - "ruleDescription": "Check if Parameters are Used", + "startLine": 33, + "startColumn": 5, + "endLine": 33, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'AMIId' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Topic4' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "AMIId", - "entityType": "Parameter" + "logicalId": "Topic4", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Parameters/AMIId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 8, - "ruleDescription": "Check if Parameters are Used", + "startLine": 44, + "startColumn": 5, + "endLine": 44, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Topic5' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TestGoodStateMachine1", + "logicalId": "Topic5", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.RoleArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 156, - "startColumn": 7, - "endLine": 156, - "endColumn": 14, - "ruleDescription": "Hardcoded ARN property", + "startLine": 55, + "startColumn": 5, + "endLine": 55, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Topic6' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TestGoodStateMachine1", + "logicalId": "Topic6", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::SNS::Topic" }, - "category": "Security", - "startLine": 137, - "startColumn": 3, - "endLine": 137, - "endColumn": 24, - "ruleDescription": "Hardcoded account ID in ARN", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 65, + "startColumn": 5, + "endLine": 65, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I1022", + "ruleId": "I9040", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Resource 'Topic7' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "GreetingRequest", + "logicalId": "Topic7", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.Integration.Uri.Fn::Join", - "category": "Intrinsic Function", - "startLine": 95, - "startColumn": 11, - "endLine": 95, - "endColumn": 19, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 74, + "startColumn": 5, + "endLine": 74, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I1022", + "ruleId": "I9040", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Resource 'Topic8' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "GreetingRequest", + "logicalId": "Topic8", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.Integration.RequestTemplates.application/json.Fn::Join", - "category": "Intrinsic Function", - "startLine": 107, - "startColumn": 13, - "endLine": 107, - "endColumn": 21, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 83, + "startColumn": 5, + "endLine": 83, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "message": "Resource 'Topic9' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "GreetingRequest", + "logicalId": "Topic9", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.HttpMethod", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 90, - "startColumn": 7, - "endLine": 90, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 95, + "startColumn": 5, + "endLine": 95, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Topic10' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "GreetingRequest", + "logicalId": "Topic10", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 114, + "startLine": 106, + "startColumn": 5, + "endLine": 106, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/functions/ref.yaml": { + "filePath": "good/functions/ref.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "good/functions/relationship_conditions.yaml": { + "filePath": "good/functions/relationship_conditions.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 1, + "errors": 1, + "warnings": 0, + "informational": 4, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3003", + "severity": "FATAL", + "message": "'Role' is a required property", + "source": "SCHEMA", + "entity": { + "logicalId": "AMIIDLookup", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'Role'", + "category": "Schema", + "startLine": 36, + "startColumn": 5, + "endLine": 36, + "endColumn": 15, + "conditionScenario": { + "isPrimary": false + }, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs4.3' was deprecated on '2020-03-05'. Creation was disabled on '2020-02-03', and updates were disabled on '2020-03-05'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "AMIIDLookup", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 46, "startColumn": 7, - "endLine": 114, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 46, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (unknown ref target: GreetingResource)" + "actualValue": "nodejs4.3", + "lifecycle": "end-of-life" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GreetingRequest", + "logicalId": "LambdaExecutionRole", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 115, + "startLine": 26, "startColumn": 7, - "endLine": 115, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "endLine": 26, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (unknown ref target: GreetingApi)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "IOTPolicies", + "logicalId": "InstanceProfile", "entityType": "Resource", - "resourceType": "AWS::IoT::Policy" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties.PolicyName", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 121, + "startLine": 31, "startColumn": 7, - "endLine": 121, - "endColumn": 17, + "endLine": 31, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6715,39 +6980,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Key' of type 'AWS::ApiGateway::ApiKey' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Key", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::ApiKey" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 84, - "startColumn": 5, - "endLine": 84, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'IOTPolicies' of type 'AWS::IoT::Policy' supports Tags but none are configured", + "message": "Resource 'LambdaExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "IOTPolicies", + "logicalId": "LambdaExecutionRole", "entityType": "Resource", - "resourceType": "AWS::IoT::Policy" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 120, + "startLine": 14, "startColumn": 5, - "endLine": 120, + "endLine": 14, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -6755,35 +7000,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TestGoodStateMachine1' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "message": "Resource 'AMIIDLookup' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TestGoodStateMachine1", + "logicalId": "AMIIDLookup", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 139, + "startLine": 36, "startColumn": 5, - "endLine": 139, + "endLine": 36, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/functions/sub_needed_custom_excludes.yaml": { - "filePath": "good/functions/sub_needed_custom_excludes.yaml", + "good/functions/relationship_conditions_sam.yaml": { + "filePath": "good/functions/relationship_conditions_sam.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 3, "counts": { - "fatal": 1, - "errors": 1, + "fatal": 0, + "errors": 0, "warnings": 1, - "informational": 2, + "informational": 4, "debug": 0 }, "suppressed": 0, @@ -6792,132 +7037,116 @@ }, "diagnostics": [ { - "ruleId": "F3031", - "severity": "FATAL", - "message": "'TestRole-${Stage}' does not match pattern '^[\\w+=,.@-]+$'", - "source": "SCHEMA", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'provided.al2' was deprecated on '2026-07-31'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'provided.al2023'", + "source": "CFN_LINT", "entity": { - "logicalId": "TestRole", + "logicalId": "FunctionC", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.RoleName", - "category": "Schema", - "startLine": 10, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 36, "startColumn": 7, - "endLine": 10, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Value does not match pattern", - "phase": "SCHEMA", - "context": { - "actualValue": "TestRole-${Stage}", - "expectedConstraint": "^[\\w+=,.@-]+$" + "endLine": 36, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "provided.al2", + "lifecycle": "deprecated" } }, { - "ruleId": "E1029", - "severity": "ERROR", - "message": "Found an embedded parameter '${Stage}' outside of an 'Fn::Sub' at Properties.RoleName", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ApplicationId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "TestRole", + "logicalId": "ConfigEnvironment", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::AppConfig::Environment" }, - "propertyPath": "Properties.RoleName", - "suggestedFix": "Wrap the string with Fn::Sub", - "category": "Intrinsic Function", - "startLine": 10, + "propertyPath": "Properties.ApplicationId", + "category": "Best Practice", + "startLine": 31, "startColumn": 7, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Substitution variable ${X} requires Fn::Sub", - "phase": "LINT" + "endLine": 31, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-appconfig.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'ConfigApplication'" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'Stage' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ConfigApplication' of type 'AWS::AppConfig::Application' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Stage", - "entityType": "Parameter" + "logicalId": "ConfigApplication", + "entityType": "Resource", + "resourceType": "AWS::AppConfig::Application" }, - "propertyPath": "Parameters/Stage", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 8, - "ruleDescription": "Check if Parameters are Used", + "startLine": 25, + "startColumn": 5, + "endLine": 25, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", + "message": "Resource 'ConfigEnvironment' of type 'AWS::AppConfig::Environment' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TestRole", + "logicalId": "ConfigEnvironment", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::AppConfig::Environment" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, + "startLine": 30, + "startColumn": 5, + "endLine": 30, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TestRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'FunctionC' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TestRole", + "logicalId": "FunctionC", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, + "startLine": 35, "startColumn": 5, - "endLine": 9, + "endLine": 35, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/functions/sub_needed_transform.yaml": { - "filePath": "good/functions/sub_needed_transform.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "good/functions_findinmap.yaml": { - "filePath": "good/functions_findinmap.yaml", + "good/functions/select_string_index.yaml": { + "filePath": "good/functions/select_string_index.yaml", "status": "OK", "metadata": { "resourcesScanned": 3, @@ -6925,7 +7154,7 @@ "fatal": 0, "errors": 0, "warnings": 0, - "informational": 6, + "informational": 10, "debug": 0 }, "suppressed": 0, @@ -6936,282 +7165,155 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance1", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 14, + "startLine": 10, "startColumn": 7, - "endLine": 14, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 10, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (FindInMap with dynamic map name)" + "resolutionSource": "Ref to 'Vpc'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance2", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 18, + "startLine": 11, "startColumn": 7, - "endLine": 18, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 11, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (FindInMap with dynamic map name)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance3", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 26, + "startLine": 12, "startColumn": 7, - "endLine": 26, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 12, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (FindInMap with dynamic map name)" + "resolutionSource": "dynamic (Select on non-list value)" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myInstance1' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance1", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 13, - "startColumn": 5, - "endLine": 13, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 19, + "startColumn": 7, + "endLine": 19, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myInstance2' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance2", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 20, + "startColumn": 7, + "endLine": 20, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myInstance3' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myInstance3", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/functions_findinmap_default_value.yaml": { - "filePath": "good/functions_findinmap_default_value.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 9, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 5, - "informational": 18, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W3696", - "severity": "WARN", - "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", - "source": "CFN_LINT", - "entity": { - "logicalId": "Mesh0", - "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" - }, - "category": "Deprecation", - "startLine": 43, - "startColumn": 3, - "endLine": 43, - "endColumn": 8, - "ruleDescription": "Resource type is from a service that is sunsetting", - "phase": "SCHEMA" - }, - { - "ruleId": "W3696", - "severity": "WARN", - "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", - "source": "CFN_LINT", - "entity": { - "logicalId": "Mesh1", - "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" - }, - "category": "Deprecation", - "startLine": 59, - "startColumn": 3, - "endLine": 59, - "endColumn": 8, - "ruleDescription": "Resource type is from a service that is sunsetting", - "phase": "SCHEMA" - }, - { - "ruleId": "W3696", - "severity": "WARN", - "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", - "source": "CFN_LINT", - "entity": { - "logicalId": "Mesh2", - "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" - }, - "category": "Deprecation", - "startLine": 70, - "startColumn": 3, - "endLine": 70, - "endColumn": 8, - "ruleDescription": "Resource type is from a service that is sunsetting", - "phase": "SCHEMA" - }, - { - "ruleId": "W3696", - "severity": "WARN", - "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", - "source": "CFN_LINT", - "entity": { - "logicalId": "Mesh3", - "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" - }, - "category": "Deprecation", - "startLine": 81, - "startColumn": 3, - "endLine": 81, - "endColumn": 8, - "ruleDescription": "Resource type is from a service that is sunsetting", - "phase": "SCHEMA" - }, - { - "ruleId": "W3696", - "severity": "WARN", - "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", - "source": "CFN_LINT", - "entity": { - "logicalId": "Mesh4", - "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" - }, - "category": "Deprecation", - "startLine": 93, - "startColumn": 3, - "endLine": 93, - "endColumn": 8, - "ruleDescription": "Resource type is from a service that is sunsetting", - "phase": "SCHEMA" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Cluster0", - "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" - }, - "propertyPath": "Properties.ClusterName", - "category": "Best Practice", - "startLine": 14, + "startLine": 21, "startColumn": 7, - "endLine": 14, - "endColumn": 18, + "endLine": 21, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Select on non-list value)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Cluster1", + "logicalId": "Vpc", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.ClusterName", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 22, + "startLine": 28, "startColumn": 7, - "endLine": 22, - "endColumn": 18, + "endLine": 28, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -7219,521 +7321,513 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", + "message": "Resource 'SubnetA' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Cluster2", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ClusterName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 30, - "startColumn": 7, - "endLine": 30, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", + "message": "Resource 'SubnetB' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Cluster3", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ClusterName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 38, - "startColumn": 7, - "endLine": 38, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 18, + "startColumn": 5, + "endLine": 18, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", + "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Mesh0", + "logicalId": "Vpc", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.MeshName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 46, - "startColumn": 7, - "endLine": 46, + "startLine": 27, + "startColumn": 5, + "endLine": 27, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/functions/split_get_stack_output.yaml": { + "filePath": "good/functions/split_get_stack_output.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Mesh1", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.MeshName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 62, - "startColumn": 7, - "endLine": 62, + "startLine": 6, + "startColumn": 5, + "endLine": 6, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", + "message": "Resource 'AllHeaders' of type 'AWS::SSM::Parameter' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Mesh2", + "logicalId": "AllHeaders", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::SSM::Parameter" }, - "propertyPath": "Properties.MeshName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 73, - "startColumn": 7, - "endLine": 73, + "startLine": 21, + "startColumn": 5, + "endLine": 21, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", + "message": "Resource 'FirstHeader' of type 'AWS::SSM::Parameter' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Mesh3", + "logicalId": "FirstHeader", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::SSM::Parameter" }, - "propertyPath": "Properties.MeshName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 84, - "startColumn": 7, - "endLine": 84, + "startLine": 34, + "startColumn": 5, + "endLine": 34, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/functions/sub.yaml": { + "filePath": "good/functions/sub.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 7, + "counts": { + "fatal": 3, + "errors": 2, + "warnings": 2, + "informational": 16, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3002", + "severity": "FATAL", + "message": "Additional properties are not allowed ('ProductName' was unexpected)", + "source": "SCHEMA", + "entity": { + "logicalId": "MyStack", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.ProductName", + "category": "Schema", + "startLine": 67, + "startColumn": 7, + "endLine": 67, + "endColumn": 18, + "ruleDescription": "Additional properties are not allowed", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "property": "ProductName", + "extra": { + "allowed_properties": [ + "NotificationARNs", + "Parameters", + "StackId", + "Tags", + "TemplateURL", + "TimeoutInMinutes" + ] + } } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3002", + "severity": "FATAL", + "message": "Additional properties are not allowed ('ProvisioningArtifactName' was unexpected)", + "source": "SCHEMA", "entity": { - "logicalId": "Mesh4", + "logicalId": "MyStack", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.MeshName", - "category": "Best Practice", - "startLine": 96, + "propertyPath": "Properties.ProvisioningArtifactName", + "category": "Schema", + "startLine": 68, "startColumn": 7, - "endLine": 96, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 68, + "endColumn": 31, + "ruleDescription": "Additional properties are not allowed", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "property": "ProvisioningArtifactName", + "extra": { + "allowed_properties": [ + "NotificationARNs", + "Parameters", + "StackId", + "Tags", + "TemplateURL", + "TimeoutInMinutes" + ] + } } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Cluster0' of type 'AWS::ECS::Cluster' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'TemplateURL' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "Cluster0", + "logicalId": "MyStack", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 13, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'TemplateURL'", + "category": "Schema", + "startLine": 66, "startColumn": 5, - "endLine": 13, + "endLine": 66, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Cluster1' of type 'AWS::ECS::Cluster' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'String' does not match format 'AWS::EC2::Image.Id'", + "source": "CFN_LINT", "entity": { - "logicalId": "Cluster1", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 21, - "startColumn": 5, - "endLine": 21, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "String" + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Cluster2' of type 'AWS::ECS::Cluster' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-123456' does not match format 'AWS::EC2::Image.Id'", + "source": "CFN_LINT", "entity": { - "logicalId": "Cluster2", + "logicalId": "LaunchConfiguration", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 29, - "startColumn": 5, - "endLine": 29, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 57, + "startColumn": 7, + "endLine": 57, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-123456" + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Cluster3' of type 'AWS::ECS::Cluster' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", "entity": { - "logicalId": "Cluster3", + "logicalId": "mySubStack", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.TemplateURL", "category": "Best Practice", - "startLine": 37, - "startColumn": 5, - "endLine": 37, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 44, + "startColumn": 7, + "endLine": 44, + "endColumn": 18, + "ruleDescription": "Warn when properties are configured to only work with the package command", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Mesh0' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "source": "CFN_LINT", "entity": { - "logicalId": "Mesh0", + "logicalId": "LaunchConfiguration", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 45, - "startColumn": 5, - "endLine": 45, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "category": "Deprecation", + "startLine": 54, + "startColumn": 3, + "endLine": 54, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'Mesh1' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", - "source": "ENGINE", + "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": "Mesh1", + "logicalId": "mySubStack", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 61, - "startColumn": 5, - "endLine": 61, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 41, + "startColumn": 3, + "endLine": 41, + "endColumn": 13, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'Mesh2' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", - "source": "ENGINE", + "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": "Mesh2", + "logicalId": "mySubStack", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 72, - "startColumn": 5, - "endLine": 72, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 41, + "startColumn": 3, + "endLine": 41, + "endColumn": 13, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'Mesh3' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", - "source": "ENGINE", + "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": "Mesh3", + "logicalId": "MyStack", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 83, - "startColumn": 5, - "endLine": 83, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 64, + "startColumn": 3, + "endLine": 64, + "endColumn": 10, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'Mesh4' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", - "source": "ENGINE", + "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": "Mesh4", + "logicalId": "MyStack", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 95, - "startColumn": 5, - "endLine": 95, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 64, + "startColumn": 3, + "endLine": 64, + "endColumn": 10, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "good/functions_findinmap_enhanced.yaml": { - "filePath": "good/functions_findinmap_enhanced.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 6, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 2, - "informational": 17, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E7001", - "severity": "ERROR", - "message": "Mapping 'MapName'.'TopKey1' key '{\"To\":\"Json\",\"String\":\"Function\"}' does not match format '^[a-zA-Z0-9]+$'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MapName", - "entityType": "Mapping" + "logicalId": "myInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Mappings/MapName/TopKey1/{\"To\":\"Json\",\"String\":\"Function\"}", - "category": "Structure", - "startLine": 15, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 33, "startColumn": 7, - "endLine": 15, - "endColumn": 40, - "ruleDescription": "Mappings are appropriately configured", - "phase": "LINT" + "endLine": 33, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3696", - "severity": "WARN", - "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Mesh", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::EC2::Instance" }, - "category": "Deprecation", - "startLine": 20, - "startColumn": 3, - "endLine": 20, - "endColumn": 7, - "ruleDescription": "Resource type is from a service that is sunsetting", - "phase": "SCHEMA" + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 34, + "startColumn": 7, + "endLine": 34, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Base64 with unresolvable argument)" + } }, { - "ruleId": "W3696", - "severity": "WARN", - "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Mesh2", + "logicalId": "myAlb", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "category": "Deprecation", - "startLine": 33, - "startColumn": 3, - "endLine": 33, - "endColumn": 8, - "ruleDescription": "Resource type is from a service that is sunsetting", - "phase": "SCHEMA" + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 52, + "startColumn": 7, + "endLine": 52, + "endColumn": 11, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I1022", + "ruleId": "I9001", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "LaunchConfiguration", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.ClusterName.Fn::FindInMap.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 52, - "startColumn": 11, - "endLine": 52, - "endColumn": 19, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 57, + "startColumn": 7, + "endLine": 57, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I1022", + "ruleId": "I9001", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Cluster", - "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" - }, - "propertyPath": "Properties.ClusterName.Fn::FindInMap.2.Fn::Join", - "category": "Intrinsic Function", - "startLine": 56, - "startColumn": 11, - "endLine": 56, - "endColumn": 19, - "ruleDescription": "Use Sub instead of Join", - "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": 59, - "startColumn": 3, - "endLine": 59, - "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": 59, - "startColumn": 3, - "endLine": 59, - "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": 61, - "startColumn": 5, - "endLine": 61, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Mesh", + "logicalId": "LaunchConfiguration", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.MeshName", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 23, + "startLine": 58, "startColumn": 7, - "endLine": 23, - "endColumn": 15, + "endLine": 58, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -7743,151 +7837,66 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", + "message": "Property 'UserData' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Mesh2", + "logicalId": "LaunchConfiguration", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.MeshName", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 36, + "startLine": 59, "startColumn": 7, - "endLine": 36, + "endLine": 59, "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Cluster", - "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" - }, - "propertyPath": "Properties.ClusterName", - "category": "Best Practice", - "startLine": 49, - "startColumn": 7, - "endLine": 49, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" + "resolutionSource": "dynamic (Base64 with unresolvable argument)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "myVPc2", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.QueueName", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 62, + "startLine": 72, "startColumn": 7, - "endLine": 62, + "endLine": 72, "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Cluster2", - "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" - }, - "propertyPath": "Properties.ClusterName", - "category": "Best Practice", - "startLine": 81, - "startColumn": 7, - "endLine": 81, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Cluster3", - "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" - }, - "propertyPath": "Properties.ClusterName", - "category": "Best Practice", - "startLine": 103, - "startColumn": 7, - "endLine": 103, - "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:${myCidr}1)" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Mesh' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Mesh", - "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 22, - "startColumn": 5, - "endLine": 22, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Mesh2' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", + "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Mesh2", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::AppMesh::Mesh" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 35, + "startLine": 32, "startColumn": 5, - "endLine": 35, + "endLine": 32, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -7895,19 +7904,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Cluster' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Resource 'mySubStack' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "mySubStack", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::CloudFormation::Stack" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 48, + "startLine": 43, "startColumn": 5, - "endLine": 48, + "endLine": 43, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -7915,19 +7924,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Queue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Resource 'myAlb' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Queue", + "logicalId": "myAlb", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 61, + "startLine": 51, "startColumn": 5, - "endLine": 61, + "endLine": 51, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -7935,19 +7944,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Cluster2' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Resource 'MyStack' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Cluster2", + "logicalId": "MyStack", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::CloudFormation::Stack" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 80, + "startLine": 66, "startColumn": 5, - "endLine": 80, + "endLine": 66, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -7955,35 +7964,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Cluster3' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "message": "Resource 'myVPc2' of type 'AWS::EC2::VPC' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Cluster3", + "logicalId": "myVPc2", "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" + "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 102, + "startLine": 71, "startColumn": 5, - "endLine": 102, + "endLine": 71, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/generic.yaml": { - "filePath": "good/generic.yaml", + "good/functions/sub_needed.yaml": { + "filePath": "good/functions/sub_needed.yaml", "status": "OK", "metadata": { - "resourcesScanned": 13, + "resourcesScanned": 6, "counts": { - "fatal": 0, + "fatal": 3, "errors": 0, - "warnings": 3, - "informational": 25, + "warnings": 4, + "informational": 9, "debug": 0 }, "suppressed": 0, @@ -7992,41 +8001,126 @@ }, "diagnostics": [ { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", - "source": "ENGINE", + "ruleId": "F1020", + "severity": "FATAL", + "message": "Fn::GetAtt references non-existent resource 'GreetingLambda'", + "source": "SCHEMA", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "GreetingRequest", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 75, + "suggestedFix": "Check that the GetAtt target resource exists in the template", + "category": "Intrinsic Function", + "startLine": 86, + "startColumn": 3, + "endLine": 86, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" + }, + { + "ruleId": "F1020", + "severity": "FATAL", + "message": "'GreetingResource' is not one of ['AMIId', 'AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'GreetingRequest', 'IOTPolicies', 'Key', 'MyContentBucket', 'TestGoodStateMachine1', 'myPolicy', 'myPolicy2']", + "source": "SCHEMA", + "entity": { + "logicalId": "GreetingRequest", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" + }, + "propertyPath": "Properties.ResourceId", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 114, "startColumn": 7, - "endLine": 75, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", + "endLine": 114, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA", + "context": { + "resolutionSource": "dynamic (unknown ref target: GreetingResource)" + } + }, + { + "ruleId": "F1020", + "severity": "FATAL", + "message": "'GreetingApi' is not one of ['AMIId', 'AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'GreetingRequest', 'IOTPolicies', 'Key', 'MyContentBucket', 'TestGoodStateMachine1', 'myPolicy', 'myPolicy2']", + "source": "SCHEMA", + "entity": { + "logicalId": "GreetingRequest", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" + }, + "propertyPath": "Properties.RestApiId", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 115, + "startColumn": 7, + "endLine": 115, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA", + "context": { + "resolutionSource": "dynamic (unknown ref target: GreetingApi)" + } + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'MyContentBucket' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyContentBucket", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/MyContentBucket", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 18, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W9010", + "ruleId": "W2001", "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "message": "Parameter 'AMIId' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "AMIId", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/AMIId", + "category": "Best Practice", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 8, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance1", + "logicalId": "TestGoodStateMachine1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::StepFunctions::StateMachine" }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 95, + "propertyPath": "Properties.RoleArn", + "category": "Best Practice", + "startLine": 156, "startColumn": 7, - "endLine": 95, + "endLine": 156, "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", + "ruleDescription": "Hardcoded ARN property", "phase": "LINT" }, { @@ -8035,35 +8129,73 @@ "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunction", + "logicalId": "TestGoodStateMachine1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::StepFunctions::StateMachine" }, "category": "Security", - "startLine": 160, + "startLine": 137, "startColumn": 3, - "endLine": 160, - "endColumn": 17, + "endLine": 137, + "endColumn": 24, "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "GreetingRequest", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" + }, + "propertyPath": "Properties.Integration.Uri.Fn::Join", + "category": "Intrinsic Function", + "startLine": 95, + "startColumn": 11, + "endLine": 95, + "endColumn": 19, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "GreetingRequest", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" + }, + "propertyPath": "Properties.Integration.RequestTemplates.application/json.Fn::Join", + "category": "Intrinsic Function", + "startLine": 107, + "startColumn": 13, + "endLine": 107, + "endColumn": 21, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RootRole", + "logicalId": "GreetingRequest", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.HttpMethod", "category": "Best Practice", - "startLine": 45, + "startLine": 90, "startColumn": 7, - "endLine": 45, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 90, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -8073,134 +8205,231 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RootInstanceProfile", + "logicalId": "GreetingRequest", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 69, + "startLine": 114, "startColumn": 7, - "endLine": 69, - "endColumn": 11, + "endLine": 114, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (unknown ref target: GreetingResource)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "GreetingRequest", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 75, + "startLine": 115, "startColumn": 7, - "endLine": 75, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 115, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (unknown ref target: GreetingApi)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "IOTPolicies", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IoT::Policy" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.PolicyName", "category": "Best Practice", - "startLine": 76, + "startLine": 121, "startColumn": 7, - "endLine": 76, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 121, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "message": "Resource 'Key' of type 'AWS::ApiGateway::ApiKey' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "Key", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ApiGateway::ApiKey" }, - "propertyPath": "Properties.KeyName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 77, - "startColumn": 7, - "endLine": 77, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 84, + "startColumn": 5, + "endLine": 84, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'IOTPolicies' of type 'AWS::IoT::Policy' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "IOTPolicies", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IoT::Policy" }, - "propertyPath": "Properties.BlockDeviceMappings", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 79, + "startLine": 120, + "startColumn": 5, + "endLine": 120, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TestGoodStateMachine1' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "TestGoodStateMachine1", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 139, + "startColumn": 5, + "endLine": 139, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/functions/sub_needed_custom_excludes.yaml": { + "filePath": "good/functions/sub_needed_custom_excludes.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 1, + "errors": 1, + "warnings": 1, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3031", + "severity": "FATAL", + "message": "'TestRole-${Stage}' does not match pattern '^[\\w+=,.@-]+$'", + "source": "SCHEMA", + "entity": { + "logicalId": "TestRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.RoleName", + "category": "Schema", + "startLine": 10, "startColumn": 7, - "endLine": 79, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 10, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Value does not match pattern", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "actualValue": "TestRole-${Stage}", + "expectedConstraint": "^[\\w+=,.@-]+$" } }, + { + "ruleId": "E1029", + "severity": "ERROR", + "message": "Found an embedded parameter '${Stage}' outside of an 'Fn::Sub' at Properties.RoleName", + "source": "CFN_LINT", + "entity": { + "logicalId": "TestRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.RoleName", + "suggestedFix": "Wrap the string with Fn::Sub", + "category": "Intrinsic Function", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Substitution variable ${X} requires Fn::Sub", + "phase": "LINT" + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'Stage' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "Stage", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/Stage", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 8, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "TestRole", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.NetworkInterfaces", + "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 86, + "startLine": 10, "startColumn": 7, - "endLine": 86, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 10, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -8208,137 +8437,319 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'TestRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "TestRole", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 88, - "startColumn": 7, - "endLine": 88, + "startLine": 9, + "startColumn": 5, + "endLine": 9, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/functions/sub_needed_transform.yaml": { + "filePath": "good/functions/sub_needed_transform.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "good/functions_findinmap.yaml": { + "filePath": "good/functions_findinmap.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 6, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance1", + "logicalId": "myInstance1", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 95, + "startLine": 14, "startColumn": 7, - "endLine": 95, + "endLine": 14, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (FindInMap with dynamic map name)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance1", + "logicalId": "myInstance2", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 96, + "startLine": 18, "startColumn": 7, - "endLine": 96, - "endColumn": 19, + "endLine": 18, + "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (FindInMap with dynamic map name)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance1", + "logicalId": "myInstance3", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.KeyName", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 97, + "startLine": 26, "startColumn": 7, - "endLine": 97, + "endLine": 26, "endColumn": 14, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (FindInMap with dynamic map name)" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'myInstance1' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance1", + "logicalId": "myInstance1", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.BlockDeviceMappings", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 98, - "startColumn": 7, - "endLine": 98, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "message": "Resource 'myInstance2' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance1", + "logicalId": "myInstance2", "entityType": "Resource", "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.NetworkInterfaces", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 106, + "startLine": 17, + "startColumn": 5, + "endLine": 17, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myInstance3' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance3", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 25, + "startColumn": 5, + "endLine": 25, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/functions_findinmap_default_value.yaml": { + "filePath": "good/functions_findinmap_default_value.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 9, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 5, + "informational": 18, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W3696", + "severity": "WARN", + "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "Mesh0", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "category": "Deprecation", + "startLine": 43, + "startColumn": 3, + "endLine": 43, + "endColumn": 8, + "ruleDescription": "Resource type is from a service that is sunsetting", + "phase": "SCHEMA" + }, + { + "ruleId": "W3696", + "severity": "WARN", + "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "Mesh1", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "category": "Deprecation", + "startLine": 59, + "startColumn": 3, + "endLine": 59, + "endColumn": 8, + "ruleDescription": "Resource type is from a service that is sunsetting", + "phase": "SCHEMA" + }, + { + "ruleId": "W3696", + "severity": "WARN", + "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "Mesh2", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "category": "Deprecation", + "startLine": 70, + "startColumn": 3, + "endLine": 70, + "endColumn": 8, + "ruleDescription": "Resource type is from a service that is sunsetting", + "phase": "SCHEMA" + }, + { + "ruleId": "W3696", + "severity": "WARN", + "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "Mesh3", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "category": "Deprecation", + "startLine": 81, + "startColumn": 3, + "endLine": 81, + "endColumn": 8, + "ruleDescription": "Resource type is from a service that is sunsetting", + "phase": "SCHEMA" + }, + { + "ruleId": "W3696", + "severity": "WARN", + "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "Mesh4", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "category": "Deprecation", + "startLine": 93, + "startColumn": 3, + "endLine": 93, + "endColumn": 8, + "ruleDescription": "Resource type is from a service that is sunsetting", + "phase": "SCHEMA" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster0", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" + }, + "propertyPath": "Properties.ClusterName", + "category": "Best Practice", + "startLine": 14, "startColumn": 7, - "endLine": 106, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 14, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -8348,117 +8759,195 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance1", + "logicalId": "Cluster1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::Cluster" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.ClusterName", "category": "Best Practice", - "startLine": 113, + "startLine": 22, "startColumn": 7, - "endLine": 113, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 22, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZones' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ElasticLoadBalancer", + "logicalId": "Cluster2", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::ECS::Cluster" }, - "propertyPath": "Properties.AvailabilityZones", + "propertyPath": "Properties.ClusterName", "category": "Best Practice", - "startLine": 124, + "startLine": 30, "startColumn": 7, - "endLine": 124, - "endColumn": 24, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "endLine": 30, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HealthCheck' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ElasticLoadBalancer", + "logicalId": "Cluster3", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::ECS::Cluster" }, - "propertyPath": "Properties.HealthCheck", + "propertyPath": "Properties.ClusterName", "category": "Best Practice", - "startLine": 133, + "startLine": 38, "startColumn": 7, - "endLine": 133, + "endLine": 38, "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'RootRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RootRole", + "logicalId": "Mesh0", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::AppMesh::Mesh" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.MeshName", "category": "Best Practice", - "startLine": 35, - "startColumn": 5, - "endLine": 35, + "startLine": 46, + "startColumn": 7, + "endLine": 46, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Mesh1", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "propertyPath": "Properties.MeshName", + "category": "Best Practice", + "startLine": 62, + "startColumn": 7, + "endLine": 62, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Mesh2", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "propertyPath": "Properties.MeshName", + "category": "Best Practice", + "startLine": 73, + "startColumn": 7, + "endLine": 73, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Mesh3", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "propertyPath": "Properties.MeshName", + "category": "Best Practice", + "startLine": 84, + "startColumn": 7, + "endLine": 84, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Mesh4", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "propertyPath": "Properties.MeshName", + "category": "Best Practice", + "startLine": 96, + "startColumn": 7, + "endLine": 96, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyEC2Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'Cluster0' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance", + "logicalId": "Cluster0", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::Cluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 74, + "startLine": 13, "startColumn": 5, - "endLine": 74, + "endLine": 13, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -8466,39 +8955,39 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'mySnsTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Cluster1' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySnsTopic", + "logicalId": "Cluster1", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ECS::Cluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 90, - "startColumn": 3, - "endLine": 90, - "endColumn": 13, + "startLine": 21, + "startColumn": 5, + "endLine": 21, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyEC2Instance1' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'Cluster2' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyEC2Instance1", + "logicalId": "Cluster2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::Cluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 94, + "startLine": 29, "startColumn": 5, - "endLine": 94, + "endLine": 29, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -8506,19 +8995,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ElasticIP' of type 'AWS::EC2::EIP' supports Tags but none are configured", + "message": "Resource 'Cluster3' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ElasticIP", + "logicalId": "Cluster3", "entityType": "Resource", - "resourceType": "AWS::EC2::EIP" + "resourceType": "AWS::ECS::Cluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 119, + "startLine": 37, "startColumn": 5, - "endLine": 119, + "endLine": 37, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -8526,19 +9015,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ElasticLoadBalancer' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", + "message": "Resource 'Mesh0' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ElasticLoadBalancer", + "logicalId": "Mesh0", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + "resourceType": "AWS::AppMesh::Mesh" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 123, + "startLine": 45, "startColumn": 5, - "endLine": 123, + "endLine": 45, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -8546,19 +9035,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'IamPipeline' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Resource 'Mesh1' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "IamPipeline", + "logicalId": "Mesh1", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::AppMesh::Mesh" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 144, + "startLine": 61, "startColumn": 5, - "endLine": 144, + "endLine": 61, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -8566,58 +9055,39 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LambdaFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'Mesh2' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunction", + "logicalId": "Mesh2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::AppMesh::Mesh" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 162, + "startLine": 72, "startColumn": 5, - "endLine": 162, + "endLine": 72, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/getatt_provisioned_product_outputs.yaml": { - "filePath": "good/getatt_provisioned_product_outputs.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ProvisionedProduct' of type 'AWS::ServiceCatalog::CloudFormationProvisionedProduct' supports Tags but none are configured", + "message": "Resource 'Mesh3' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ProvisionedProduct", + "logicalId": "Mesh3", "entityType": "Resource", - "resourceType": "AWS::ServiceCatalog::CloudFormationProvisionedProduct" + "resourceType": "AWS::AppMesh::Mesh" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 8, + "startLine": 83, "startColumn": 5, - "endLine": 8, + "endLine": 83, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -8625,35 +9095,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Topic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Mesh4' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Topic", + "logicalId": "Mesh4", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::AppMesh::Mesh" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 13, + "startLine": 95, "startColumn": 5, - "endLine": 13, + "endLine": 95, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/getatt_ref_typed_nested_attribute.yaml": { - "filePath": "good/getatt_ref_typed_nested_attribute.yaml", + "good/functions_findinmap_enhanced.yaml": { + "filePath": "good/functions_findinmap_enhanced.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 6, "counts": { "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 7, + "errors": 1, + "warnings": 2, + "informational": 17, "debug": 0 }, "suppressed": 0, @@ -8662,181 +9132,168 @@ }, "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "E7001", + "severity": "ERROR", + "message": "Mapping 'MapName'.'TopKey1' key '{\"To\":\"Json\",\"String\":\"Function\"}' does not match format '^[a-zA-Z0-9]+$'", + "source": "CFN_LINT", "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "logicalId": "MapName", + "entityType": "Mapping" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 11, + "propertyPath": "Mappings/MapName/TopKey1/{\"To\":\"Json\",\"String\":\"Function\"}", + "category": "Structure", + "startLine": 15, "startColumn": 7, - "endLine": 11, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 15, + "endColumn": 40, + "ruleDescription": "Mappings are appropriately configured", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W3696", + "severity": "WARN", + "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", + "source": "CFN_LINT", "entity": { - "logicalId": "Database", + "logicalId": "Mesh", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::AppMesh::Mesh" }, - "propertyPath": "Properties.MasterUsername", - "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "category": "Deprecation", + "startLine": 20, + "startColumn": 3, + "endLine": 20, + "endColumn": 7, + "ruleDescription": "Resource type is from a service that is sunsetting", + "phase": "SCHEMA" }, { - "ruleId": "I9001", + "ruleId": "W3696", + "severity": "WARN", + "message": "Resource type 'AWS::AppMesh::Mesh' is from a service that will be shut down on 2026-09-30. Plan to migrate to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "Mesh2", + "entityType": "Resource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "category": "Deprecation", + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 8, + "ruleDescription": "Resource type is from a service that is sunsetting", + "phase": "SCHEMA" + }, + { + "ruleId": "I1022", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", "entity": { - "logicalId": "Database", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ECS::Cluster" }, - "propertyPath": "Properties.StorageEncrypted", - "category": "Best Practice", - "startLine": 16, - "startColumn": 7, - "endLine": 16, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.ClusterName.Fn::FindInMap.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 52, + "startColumn": 11, + "endLine": 52, + "endColumn": 19, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I1022", "severity": "INFO", - "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", "entity": { - "logicalId": "Database", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ECS::Cluster" }, - "propertyPath": "Properties.BackupRetentionPeriod", - "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 28, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "propertyPath": "Properties.ClusterName.Fn::FindInMap.2.Fn::Join", + "category": "Intrinsic Function", + "startLine": 56, + "startColumn": 11, + "endLine": 56, + "endColumn": 19, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { - "ruleId": "I9003", + "ruleId": "I3011", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", + "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", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "startLine": 59, + "startColumn": 3, + "endLine": 59, + "endColumn": 8, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'Database' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", + "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": "Database", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 59, + "startColumn": 3, + "endLine": 59, + "endColumn": 8, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'Parameter' of type 'AWS::SSM::Parameter' supports Tags but none are configured", - "source": "ENGINE", + "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": "Parameter", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 22, + "startLine": 61, "startColumn": 5, - "endLine": 22, + "endLine": 61, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" - } - ] - }, - "good/getazs_resolves_current_regions.yaml": { - "filePath": "good/getazs_resolves_current_regions.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 8, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetApEast2", + "logicalId": "Mesh", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AppMesh::Mesh" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.MeshName", "category": "Best Practice", - "startLine": 10, + "startLine": 23, "startColumn": 7, - "endLine": 10, - "endColumn": 12, + "endLine": 23, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -8846,41 +9303,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'MeshName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetApEast2", + "logicalId": "Mesh2", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AppMesh::Mesh" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.MeshName", "category": "Best Practice", - "startLine": 11, + "startLine": 36, "startColumn": 7, - "endLine": 11, - "endColumn": 16, + "endLine": 36, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetApEast2", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::Cluster" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.ClusterName", "category": "Best Practice", - "startLine": 12, + "startLine": 49, "startColumn": 7, - "endLine": 12, - "endColumn": 23, + "endLine": 49, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -8890,19 +9348,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetMxCentral1", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.QueueName", "category": "Best Practice", - "startLine": 16, + "startLine": 62, "startColumn": 7, - "endLine": 16, - "endColumn": 12, + "endLine": 62, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -8912,19 +9371,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetMxCentral1", + "logicalId": "Cluster2", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::Cluster" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.ClusterName", "category": "Best Practice", - "startLine": 17, + "startLine": 81, "startColumn": 7, - "endLine": 17, - "endColumn": 16, + "endLine": 81, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -8934,19 +9393,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'ClusterName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetMxCentral1", + "logicalId": "Cluster3", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ECS::Cluster" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.ClusterName", "category": "Best Practice", - "startLine": 18, + "startLine": 103, "startColumn": 7, - "endLine": 18, - "endColumn": 23, + "endLine": 103, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -8956,19 +9415,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SubnetApEast2' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'Mesh' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetApEast2", + "logicalId": "Mesh", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AppMesh::Mesh" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, + "startLine": 22, "startColumn": 5, - "endLine": 9, + "endLine": 22, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -8976,149 +9435,115 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SubnetMxCentral1' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'Mesh2' of type 'AWS::AppMesh::Mesh' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetMxCentral1", + "logicalId": "Mesh2", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::AppMesh::Mesh" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 15, + "startLine": 35, "startColumn": 5, - "endLine": 15, + "endLine": 35, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/good_conditions_valid_refs.yaml": { - "filePath": "good/good_conditions_valid_refs.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'IsDev' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Cluster' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "IsDev", - "entityType": "Condition" + "logicalId": "Cluster", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" }, - "propertyPath": "Conditions/IsDev", + "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": "Check if Conditions are Used", + "startLine": 48, + "startColumn": 5, + "endLine": 48, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ProdBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'Queue' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ProdBucket", + "logicalId": "Queue", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SQS::Queue" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 22, - "startColumn": 3, - "endLine": 22, - "endColumn": 13, + "startLine": 61, + "startColumn": 5, + "endLine": 61, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/iam_conditional_resource_arns.yaml": { - "filePath": "good/iam_conditional_resource_arns.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "good/iam_intrinsic_resource_arns.yaml": { - "filePath": "good/iam_intrinsic_resource_arns.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Cluster2' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster2", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 80, + "startColumn": 5, + "endLine": 80, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SomeBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'Cluster3' of type 'AWS::ECS::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SomeBucket", + "logicalId": "Cluster3", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECS::Cluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, - "startColumn": 3, - "endLine": 10, - "endColumn": 13, + "startLine": 102, + "startColumn": 5, + "endLine": 102, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/iam_intrinsic_resource_arns_schema_valid.yaml": { - "filePath": "good/iam_intrinsic_resource_arns_schema_valid.yaml", + "good/generic.yaml": { + "filePath": "good/generic.yaml", "status": "OK", "metadata": { - "resourcesScanned": 5, + "resourcesScanned": 13, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 8, + "warnings": 3, + "informational": 25, "debug": 0 }, "suppressed": 0, @@ -9127,65 +9552,79 @@ }, "diagnostics": [ { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", "entity": { - "logicalId": "PolicyWithJoinResource", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::IAM::Policy" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Resource.Fn::Join", - "category": "Intrinsic Function", - "startLine": 48, - "startColumn": 15, - "endLine": 48, - "endColumn": 23, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 75, + "startColumn": 7, + "endLine": 75, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", "source": "ENGINE", "entity": { - "logicalId": "RoleInlinePolicy", + "logicalId": "MyEC2Instance1", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.RoleName", - "category": "Best Practice", - "startLine": 17, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 95, "startColumn": 7, - "endLine": 17, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 95, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserName' is create-only; updating it will cause resource replacement", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "PolicyWithRefResource", + "logicalId": "LambdaFunction", "entityType": "Resource", - "resourceType": "AWS::IAM::UserPolicy" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.UserName", - "category": "Best Practice", - "startLine": 65, - "startColumn": 7, - "endLine": 65, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "category": "Security", + "startLine": 160, + "startColumn": 3, + "endLine": 160, + "endColumn": 17, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "RootRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 45, + "startColumn": 7, + "endLine": 45, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" @@ -9194,20 +9633,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PolicyWithRefResource", + "logicalId": "RootInstanceProfile", "entityType": "Resource", - "resourceType": "AWS::IAM::UserPolicy" + "resourceType": "AWS::IAM::InstanceProfile" }, - "propertyPath": "Properties.PolicyName", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 66, + "startLine": 69, "startColumn": 7, - "endLine": 66, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 69, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9217,44 +9655,66 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSOPermissionSet", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::SSO::PermissionSet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.InstanceArn", + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 75, + "startColumn": 7, + "endLine": 75, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.InstanceType", "category": "Best Practice", "startLine": 76, "startColumn": 7, "endLine": 76, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sso/aws-sso-permissionset", + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'SsoInstanceArn' (type String)" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSOPermissionSet", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::SSO::PermissionSet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.KeyName", "category": "Best Practice", "startLine": 77, "startColumn": 7, "endLine": 77, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sso/aws-sso-permissionset", + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9262,173 +9722,283 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'RoleInlinePolicy' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RoleInlinePolicy", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BlockDeviceMappings", "category": "Best Practice", - "startLine": 16, - "startColumn": 5, - "endLine": 16, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 79, + "startColumn": 7, + "endLine": 79, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SSOPermissionSet' of type 'AWS::SSO::PermissionSet' supports Tags but none are configured", + "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SSOPermissionSet", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::SSO::PermissionSet" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkInterfaces", "category": "Best Practice", - "startLine": 75, - "startColumn": 5, - "endLine": 75, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/iam_valid.yaml": { - "filePath": "good/iam_valid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 + "startLine": 86, + "startColumn": 7, + "endLine": 86, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Role' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Role", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 18, - "startColumn": 5, - "endLine": 18, + "startLine": 88, + "startColumn": 7, + "endLine": 88, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/kms_key_identifier_forms.yaml": { - "filePath": "good/kms_key_identifier_forms.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 3, - "informational": 7, - "debug": 0 + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TopicKeyArn", + "logicalId": "MyEC2Instance1", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::EC2::Instance" }, - "category": "Security", - "startLine": 8, - "startColumn": 3, - "endLine": 8, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 95, + "startColumn": 7, + "endLine": 95, "endColumn": 14, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TopicAliasArn", + "logicalId": "MyEC2Instance1", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::EC2::Instance" }, - "category": "Security", - "startLine": 16, - "startColumn": 3, - "endLine": 16, - "endColumn": 16, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" - }, - { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 96, + "startColumn": 7, + "endLine": 96, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TopicMultiRegionKeyArn", + "logicalId": "MyEC2Instance1", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::EC2::Instance" }, - "category": "Security", - "startLine": 24, - "startColumn": 3, - "endLine": 24, - "endColumn": 25, - "ruleDescription": "Hardcoded account ID in ARN", + "propertyPath": "Properties.KeyName", + "category": "Best Practice", + "startLine": 97, + "startColumn": 7, + "endLine": 97, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.BlockDeviceMappings", + "category": "Best Practice", + "startLine": 98, + "startColumn": 7, + "endLine": 98, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.NetworkInterfaces", + "category": "Best Practice", + "startLine": 106, + "startColumn": 7, + "endLine": 106, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 113, + "startColumn": 7, + "endLine": 113, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZones' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ElasticLoadBalancer", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.AvailabilityZones", + "category": "Best Practice", + "startLine": 124, + "startColumn": 7, + "endLine": 124, + "endColumn": 24, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HealthCheck' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ElasticLoadBalancer", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Properties.HealthCheck", + "category": "Best Practice", + "startLine": 133, + "startColumn": 7, + "endLine": 133, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TopicKeyId' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'RootRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TopicKeyId", + "logicalId": "RootRole", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, + "startLine": 35, "startColumn": 5, - "endLine": 6, + "endLine": 35, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -9436,19 +10006,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TopicKeyArn' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'MyEC2Instance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TopicKeyArn", + "logicalId": "MyEC2Instance", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, + "startLine": 74, "startColumn": 5, - "endLine": 10, + "endLine": 74, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -9456,19 +10026,39 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TopicAliasName' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'mySnsTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TopicAliasName", + "logicalId": "mySnsTopic", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 14, + "startLine": 90, + "startColumn": 3, + "endLine": 90, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyEC2Instance1' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 94, "startColumn": 5, - "endLine": 14, + "endLine": 94, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -9476,19 +10066,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TopicAliasArn' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'ElasticIP' of type 'AWS::EC2::EIP' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TopicAliasArn", + "logicalId": "ElasticIP", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::EC2::EIP" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 18, + "startLine": 119, "startColumn": 5, - "endLine": 18, + "endLine": 119, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -9496,19 +10086,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TopicMultiRegionKeyId' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'ElasticLoadBalancer' of type 'AWS::ElasticLoadBalancing::LoadBalancer' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TopicMultiRegionKeyId", + "logicalId": "ElasticLoadBalancer", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 22, + "startLine": 123, "startColumn": 5, - "endLine": 22, + "endLine": 123, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -9516,19 +10106,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TopicMultiRegionKeyArn' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'IamPipeline' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TopicMultiRegionKeyArn", + "logicalId": "IamPipeline", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::CloudFormation::Stack" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 26, + "startLine": 144, "startColumn": 5, - "endLine": 26, + "endLine": 144, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -9536,35 +10126,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TopicIntrinsicAliasArn' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'LambdaFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TopicIntrinsicAliasArn", + "logicalId": "LambdaFunction", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 30, + "startLine": 162, "startColumn": 5, - "endLine": 30, + "endLine": 162, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/lambda_permission_source_account.yaml": { - "filePath": "good/lambda_permission_source_account.yaml", + "good/getatt_provisioned_product_outputs.yaml": { + "filePath": "good/getatt_provisioned_product_outputs.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 2, "counts": { "fatal": 0, "errors": 0, - "warnings": 2, - "informational": 4, + "warnings": 0, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -9573,80 +10163,104 @@ }, "diagnostics": [ { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'SourceArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ProvisionedProduct' of type 'AWS::ServiceCatalog::CloudFormationProvisionedProduct' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Perm", + "logicalId": "ProvisionedProduct", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ServiceCatalog::CloudFormationProvisionedProduct" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 8, - "startColumn": 7, + "startColumn": 5, "endLine": 8, - "endColumn": 16, - "ruleDescription": "Hardcoded ARN property", + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Topic' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Perm", + "logicalId": "Topic", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SNS::Topic" }, - "category": "Security", - "startLine": 2, - "startColumn": 3, - "endLine": 2, - "endColumn": 7, - "ruleDescription": "Hardcoded account ID in ARN", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/getatt_ref_typed_nested_attribute.yaml": { + "filePath": "good/getatt_ref_typed_nested_attribute.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 7, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Perm", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 5, + "startLine": 11, "startColumn": 7, - "endLine": 5, + "endLine": 11, "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Perm", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 6, + "startLine": 14, "startColumn": 7, - "endLine": 6, - "endColumn": 19, + "endLine": 14, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9656,19 +10270,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Perm", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 7, + "startLine": 16, "startColumn": 7, - "endLine": 7, - "endColumn": 16, + "endLine": 16, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9678,37 +10293,87 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Perm", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.BackupRetentionPeriod", "category": "Best Practice", - "startLine": 8, + "startLine": 17, "startColumn": 7, - "endLine": 8, - "endColumn": 16, + "endLine": 17, + "endColumn": 28, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Database' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Database", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Parameter' of type 'AWS::SSM::Parameter' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Parameter", + "entityType": "Resource", + "resourceType": "AWS::SSM::Parameter" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 22, + "startColumn": 5, + "endLine": 22, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "good/lambda_permission_sourcearn_ref_no_account.yaml": { - "filePath": "good/lambda_permission_sourcearn_ref_no_account.yaml", + "good/getazs_resolves_current_regions.yaml": { + "filePath": "good/getazs_resolves_current_regions.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 2, "counts": { "fatal": 0, "errors": 0, - "warnings": 1, - "informational": 4, + "warnings": 0, + "informational": 8, "debug": 0 }, "suppressed": 0, @@ -9717,40 +10382,43 @@ }, "diagnostics": [ { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'SourceArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Perm", + "logicalId": "SubnetApEast2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 15, + "startLine": 10, "startColumn": 7, - "endLine": 15, - "endColumn": 16, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" + "endLine": 10, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Perm", + "logicalId": "SubnetApEast2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 12, + "startLine": 11, "startColumn": 7, - "endLine": 12, - "endColumn": 13, + "endLine": 11, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9760,19 +10428,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Perm", + "logicalId": "SubnetApEast2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 13, + "startLine": 12, "startColumn": 7, - "endLine": 13, - "endColumn": 19, + "endLine": 12, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9782,19 +10450,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Perm", + "logicalId": "SubnetMxCentral1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 14, + "startLine": 16, "startColumn": 7, - "endLine": 14, - "endColumn": 16, + "endLine": 16, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9804,98 +10472,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Perm", + "logicalId": "SubnetMxCentral1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 15, + "startLine": 17, "startColumn": 7, - "endLine": 15, + "endLine": 17, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } - } - ] - }, - "good/lambda_snapstart.yaml": { - "filePath": "good/lambda_snapstart.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 2, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2530", - "severity": "WARN", - "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", - "source": "CFN_LINT", - "entity": { - "logicalId": "SnapStartFunc", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.SnapStart", - "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", - "category": "Best Practice", - "startLine": 13, - "startColumn": 7, - "endLine": 13, - "endColumn": 16, - "ruleDescription": "Validate that SnapStart is properly configured", - "phase": "LINT" - }, - { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", - "entity": { - "logicalId": "SnapStartFunc", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "category": "Security", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 16, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SnapStartFunc", + "logicalId": "SubnetMxCentral1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 6, + "startLine": 18, "startColumn": 7, - "endLine": 6, - "endColumn": 19, + "endLine": 18, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -9905,35 +10516,55 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SnapStartFunc' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'SubnetApEast2' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SnapStartFunc", + "logicalId": "SubnetApEast2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 9, "startColumn": 5, - "endLine": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SubnetMxCentral1' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetMxCentral1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 15, + "startColumn": 5, + "endLine": 15, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/lambda_zipfile.yaml": { - "filePath": "good/lambda_zipfile.yaml", + "good/good_conditions_valid_refs.yaml": { + "filePath": "good/good_conditions_valid_refs.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 3, + "warnings": 1, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -9942,73 +10573,50 @@ }, "diagnostics": [ { - "ruleId": "I3042", - "severity": "INFO", - "message": "ARN in Resource LambdaFn contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'IsDev' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "LambdaFn", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "logicalId": "IsDev", + "entityType": "Condition" }, - "propertyPath": "Properties.Role.Fn::Sub", + "propertyPath": "Conditions/IsDev", "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 14, - "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 8, + "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LambdaFn", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LambdaFn' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'ProdBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LambdaFn", + "logicalId": "ProdBucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/lifecycle_intrinsic_scenarios.yaml": { - "filePath": "good/lifecycle_intrinsic_scenarios.yaml", + "good/iam_conditional_resource_arns.yaml": { + "filePath": "good/iam_conditional_resource_arns.yaml", "status": "OK", "metadata": { - "resourcesScanned": 13, + "resourcesScanned": 2, "counts": { "fatal": 0, "errors": 0, @@ -10022,16 +10630,16 @@ }, "diagnostics": [] }, - "good/mappings/name.yaml": { - "filePath": "good/mappings/name.yaml", + "good/iam_intrinsic_resource_arns.yaml": { + "filePath": "good/iam_intrinsic_resource_arns.yaml", "status": "OK", "metadata": { - "resourcesScanned": 0, + "resourcesScanned": 3, "counts": { - "fatal": 1, + "fatal": 0, "errors": 0, - "warnings": 1, - "informational": 0, + "warnings": 0, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -10040,48 +10648,37 @@ }, "diagnostics": [ { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "startLine": 10, - "startColumn": 1, - "endLine": 10, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" - }, - { - "ruleId": "W7001", - "severity": "WARN", - "message": "Mapping 'RegionMap' is not referenced by any Fn::FindInMap", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SomeBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "RegionMap", - "entityType": "Mapping" + "logicalId": "SomeBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Mappings/RegionMap", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 3, + "startLine": 10, "startColumn": 3, - "endLine": 3, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 10, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/mappings/used.yaml": { - "filePath": "good/mappings/used.yaml", + "good/iam_intrinsic_resource_arns_schema_valid.yaml": { + "filePath": "good/iam_intrinsic_resource_arns_schema_valid.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 5, "counts": { "fatal": 0, - "errors": 1, + "errors": 0, "warnings": 0, - "informational": 3, + "informational": 8, "debug": 0 }, "suppressed": 0, @@ -10090,43 +10687,41 @@ }, "diagnostics": [ { - "ruleId": "E1151", - "severity": "ERROR", - "message": "'vpc-123456' does not match format 'AWS::EC2::VPC.Id'", + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "mySubnet", + "logicalId": "PolicyWithJoinResource", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Policy" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.PolicyDocument.Statement.0.Resource.Fn::Join", "category": "Intrinsic Function", - "startLine": 21, - "startColumn": 7, - "endLine": 21, - "endColumn": 12, - "ruleDescription": "Validate VPC id format", - "phase": "SCHEMA", - "context": { - "actualValue": "vpc-123456" - } + "startLine": 48, + "startColumn": 15, + "endLine": 48, + "endColumn": 23, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySubnet", + "logicalId": "RoleInlinePolicy", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 21, + "startLine": 17, "startColumn": 7, - "endLine": 21, - "endColumn": 12, + "endLine": 17, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -10136,1913 +10731,148 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'UserName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySubnet", + "logicalId": "PolicyWithRefResource", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::IAM::UserPolicy" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.UserName", "category": "Best Practice", - "startLine": 23, + "startLine": 65, "startColumn": 7, - "endLine": 23, - "endColumn": 16, + "endLine": 65, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (FindInMap with dynamic map name)" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'mySubnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "mySubnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/mappings_valid.yaml": { - "filePath": "good/mappings_valid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 1, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W7001", - "severity": "WARN", - "message": "Mapping 'RegionMap' is not referenced by any Fn::FindInMap", - "source": "CFN_LINT", - "entity": { - "logicalId": "RegionMap", - "entityType": "Mapping" - }, - "propertyPath": "Mappings/RegionMap", - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'R' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "R", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 9, - "startColumn": 3, - "endLine": 9, - "endColumn": 4, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/metadata_context_complete.yaml": { - "filePath": "good/metadata_context_complete.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 6, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 13, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "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": 18, - "startColumn": 3, - "endLine": 18, - "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": 18, - "startColumn": 3, - "endLine": 18, - "endColumn": 13, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "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": "LegacyTable", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "category": "Best Practice", - "startLine": 35, - "startColumn": 3, - "endLine": 35, - "endColumn": 14, - "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": "LegacyTable", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "category": "Best Practice", - "startLine": 35, - "startColumn": 3, - "endLine": 35, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "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": "ServiceLogGroup", + "logicalId": "PolicyWithRefResource", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::IAM::UserPolicy" }, + "propertyPath": "Properties.PolicyName", "category": "Best Practice", - "startLine": 64, - "startColumn": 3, - "endLine": 64, - "endColumn": 18, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 66, + "startColumn": 7, + "endLine": 66, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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": "ServiceLogGroup", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "category": "Best Practice", - "startLine": 64, - "startColumn": 3, - "endLine": 64, - "endColumn": 18, - "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": 18, - "startColumn": 3, - "endLine": 18, - "endColumn": 13, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LegacyTable", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.KeySchema", - "category": "Best Practice", - "startLine": 38, - "startColumn": 7, - "endLine": 38, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "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": 18, - "startColumn": 3, - "endLine": 18, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LegacyTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "LegacyTable", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 37, - "startColumn": 5, - "endLine": 37, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ServiceLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ServiceLogGroup", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 66, - "startColumn": 5, - "endLine": 66, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 70, - "startColumn": 5, - "endLine": 70, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CustomResourceProviderframeworkonEvent' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CustomResourceProviderframeworkonEvent", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 78, - "startColumn": 5, - "endLine": 78, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/minimal.yaml": { - "filePath": "good/minimal.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'IamPipeline' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "IamPipeline", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/modules/minimal.yaml": { - "filePath": "good/modules/minimal.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'OtherResource' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "OtherResource", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 8, - "startColumn": 3, - "endLine": 8, - "endColumn": 16, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/neptune_valid_instanceclass.yaml": { - "filePath": "good/neptune_valid_instanceclass.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 4, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "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": "Instance", - "entityType": "Resource", - "resourceType": "AWS::Neptune::DBInstance" - }, - "category": "Best Practice", - "startLine": 2, - "startColumn": 3, - "endLine": 2, - "endColumn": 11, - "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": "Instance", - "entityType": "Resource", - "resourceType": "AWS::Neptune::DBInstance" - }, - "category": "Best Practice", - "startLine": 2, - "startColumn": 3, - "endLine": 2, - "endColumn": 11, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Instance' of type 'AWS::Neptune::DBInstance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Instance", - "entityType": "Resource", - "resourceType": "AWS::Neptune::DBInstance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 4, - "startColumn": 5, - "endLine": 4, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/no_value.yaml": { - "filePath": "good/no_value.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 13, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'pProdMonitoringInterval' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "pProdMonitoringInterval", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/pProdMonitoringInterval", - "category": "Best Practice", - "startLine": 45, - "startColumn": 5, - "endLine": 45, - "endColumn": 28, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'pDevMonitoringInterval' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "pDevMonitoringInterval", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/pDevMonitoringInterval", - "category": "Best Practice", - "startLine": 49, - "startColumn": 5, - "endLine": 49, - "endColumn": 27, - "ruleDescription": "Check if Parameters are Used", - "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": "rDBServerInstance", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "category": "Best Practice", - "startLine": 123, - "startColumn": 5, - "endLine": 123, - "endColumn": 22, - "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": "rDBServerInstance", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "category": "Best Practice", - "startLine": 123, - "startColumn": 5, - "endLine": 123, - "endColumn": 22, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rParameterGroup", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBParameterGroup" - }, - "propertyPath": "Properties.Description", - "category": "Best Practice", - "startLine": 59, - "startColumn": 13, - "endLine": 59, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Family' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rParameterGroup", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBParameterGroup" - }, - "propertyPath": "Properties.Family", - "category": "Best Practice", - "startLine": 60, - "startColumn": 13, - "endLine": 60, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'pDBParameterGroupFamily' (type String)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AutoMinorVersionUpgrade' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rDBServerInstance", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.AutoMinorVersionUpgrade", - "category": "Best Practice", - "startLine": 128, - "startColumn": 13, - "endLine": 128, - "endColumn": 36, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rDBServerInstance", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.BackupRetentionPeriod", - "category": "Best Practice", - "startLine": 129, - "startColumn": 13, - "endLine": 129, - "endColumn": 34, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DBParameterGroupName' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rDBServerInstance", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.DBParameterGroupName", - "category": "Best Practice", - "startLine": 132, - "startColumn": 13, - "endLine": 132, - "endColumn": 33, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'rParameterGroup'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DBSubnetGroupName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rDBServerInstance", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.DBSubnetGroupName", - "category": "Best Practice", - "startLine": 133, - "startColumn": 13, - "endLine": 133, - "endColumn": 30, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'rDBSubnetGroup'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rDBServerInstance", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 134, - "startColumn": 13, - "endLine": 134, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "parameter 'pDBEngine' (type String)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rDBServerInstance", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.MasterUsername", - "category": "Best Practice", - "startLine": 138, - "startColumn": 13, - "endLine": 138, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'pDBMasterUsername' (type String)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'MultiAZ' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rDBServerInstance", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.MultiAZ", - "category": "Best Practice", - "startLine": 145, - "startColumn": 13, - "endLine": 145, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Fn::If on condition 'MultiAZ'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rDBServerInstance", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.StorageEncrypted", - "category": "Best Practice", - "startLine": 148, - "startColumn": 13, - "endLine": 148, - "endColumn": 29, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'rDBMonitoringRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "rDBMonitoringRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 96, - "startColumn": 9, - "endLine": 96, - "endColumn": 19, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/no_w3010_on_unlisted_type.yaml": { - "filePath": "good/no_w3010_on_unlisted_type.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 7, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2501", - "severity": "WARN", - "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", - "source": "CFN_LINT", - "entity": { - "logicalId": "Cluster", - "entityType": "Resource", - "resourceType": "AWS::DocDB::DBCluster" - }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 25, - "ruleDescription": "Check if Password Properties are correctly configured", - "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": "Cluster", - "entityType": "Resource", - "resourceType": "AWS::DocDB::DBCluster" - }, - "category": "Best Practice", - "startLine": 6, - "startColumn": 3, - "endLine": 6, - "endColumn": 10, - "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": "Cluster", - "entityType": "Resource", - "resourceType": "AWS::DocDB::DBCluster" - }, - "category": "Best Practice", - "startLine": 6, - "startColumn": 3, - "endLine": 6, - "endColumn": 10, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" - }, - { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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": "Cluster", - "entityType": "Resource", - "resourceType": "AWS::DocDB::DBCluster" - }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Cluster", - "entityType": "Resource", - "resourceType": "AWS::DocDB::DBCluster" - }, - "propertyPath": "Properties.DBClusterIdentifier", - "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 26, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Cluster", - "entityType": "Resource", - "resourceType": "AWS::DocDB::DBCluster" - }, - "propertyPath": "Properties.MasterUsername", - "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZones' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Cluster", - "entityType": "Resource", - "resourceType": "AWS::DocDB::DBCluster" - }, - "propertyPath": "Properties.AvailabilityZones", - "category": "Best Practice", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 24, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Cluster' of type 'AWS::DocDB::DBCluster' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Cluster", - "entityType": "Resource", - "resourceType": "AWS::DocDB::DBCluster" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/output_value_string.yaml": { - "filePath": "good/output_value_string.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 4, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "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": 17, - "startColumn": 3, - "endLine": 17, - "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": 17, - "startColumn": 3, - "endLine": 17, - "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": 17, - "startColumn": 3, - "endLine": 17, - "endColumn": 8, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "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": 17, - "startColumn": 3, - "endLine": 17, - "endColumn": 8, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/override/complete.yaml": { - "filePath": "good/override/complete.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 6, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", - "source": "ENGINE", - "entity": { - "logicalId": "untaggedInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 13, - "startColumn": 7, - "endLine": 13, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "myS3Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "untaggedInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 13, - "startColumn": 7, - "endLine": 13, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VPC", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 17, - "startColumn": 9, - "endLine": 17, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "myS3Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'untaggedInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "untaggedInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'VPC' of type 'AWS::EC2::VPC' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "VPC", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 16, - "startColumn": 7, - "endLine": 16, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/override/required.yaml": { - "filePath": "good/override/required.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "myS3Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "myS3Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/param_constraints_valid.yaml": { - "filePath": "good/param_constraints_valid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 1, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'ValidParam' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "ValidParam", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/ValidParam", - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 13, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'ValidNumber' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "ValidNumber", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/ValidNumber", - "category": "Best Practice", - "startLine": 9, - "startColumn": 3, - "endLine": 9, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "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": 15, - "startColumn": 3, - "endLine": 15, - "endColumn": 9, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/parameters/F2012_cdl_default_split.yaml": { - "filePath": "good/parameters/F2012_cdl_default_split.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 6, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'CDLSingleElementAllowed' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "CDLSingleElementAllowed", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/CDLSingleElementAllowed", - "category": "Best Practice", - "startLine": 5, - "startColumn": 3, - "endLine": 5, - "endColumn": 26, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'CDLMultipleElementsAllowed' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "CDLMultipleElementsAllowed", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/CDLMultipleElementsAllowed", - "category": "Best Practice", - "startLine": 12, - "startColumn": 3, - "endLine": 12, - "endColumn": 29, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'CDLWhitespaceTrimsToValid' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "CDLWhitespaceTrimsToValid", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/CDLWhitespaceTrimsToValid", - "category": "Best Practice", - "startLine": 19, - "startColumn": 3, - "endLine": 19, - "endColumn": 28, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'CDLListStringTypeValid' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "CDLListStringTypeValid", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/CDLListStringTypeValid", - "category": "Best Practice", - "startLine": 26, - "startColumn": 3, - "endLine": 26, - "endColumn": 25, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'CDLNoAllowedValues' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "CDLNoAllowedValues", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/CDLNoAllowedValues", - "category": "Best Practice", - "startLine": 33, - "startColumn": 3, - "endLine": 33, - "endColumn": 21, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'CDLEmptyAllowedValues' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "CDLEmptyAllowedValues", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/CDLEmptyAllowedValues", - "category": "Best Practice", - "startLine": 37, - "startColumn": 3, - "endLine": 37, - "endColumn": 24, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - } - ] - }, - "good/parameters/default.yaml": { - "filePath": "good/parameters/default.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 3, - "errors": 0, - "warnings": 14, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "startLine": 81, - "startColumn": 1, - "endLine": 81, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" - }, - { - "ruleId": "F2012", - "severity": "FATAL", - "message": "Parameter 'CDLAllowedValues' Default 'four' is not in AllowedValues ['one', 'two', 'three,four']", - "source": "SCHEMA", - "entity": { - "logicalId": "CDLAllowedValues", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/CDLAllowedValues/Default", - "category": "Parameter", - "startLine": 62, - "startColumn": 5, - "endLine": 62, - "endColumn": 12, - "ruleDescription": "Parameter Default must be in AllowedValues", - "phase": "SCHEMA" - }, - { - "ruleId": "F2012", - "severity": "FATAL", - "message": "Parameter 'CDLAllowedValues' Default 'three' is not in AllowedValues ['one', 'two', 'three,four']", - "source": "SCHEMA", - "entity": { - "logicalId": "CDLAllowedValues", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/CDLAllowedValues/Default", - "category": "Parameter", - "startLine": 62, - "startColumn": 5, - "endLine": 62, - "endColumn": 12, - "ruleDescription": "Parameter Default must be in AllowedValues", - "phase": "SCHEMA" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'myAllowedPattern' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "myAllowedPattern", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/myAllowedPattern", - "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 19, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'myMinValue' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "myMinValue", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/myMinValue", - "category": "Best Practice", - "startLine": 8, - "startColumn": 3, - "endLine": 8, - "endColumn": 13, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'myMaxValue' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "myMaxValue", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/myMaxValue", - "category": "Best Practice", - "startLine": 12, - "startColumn": 3, - "endLine": 12, - "endColumn": 13, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'myAllowedValue' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "myAllowedValue", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/myAllowedValue", - "category": "Best Practice", - "startLine": 16, - "startColumn": 3, - "endLine": 16, - "endColumn": 17, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'myMinLength' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "myMinLength", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/myMinLength", - "category": "Best Practice", - "startLine": 23, - "startColumn": 3, - "endLine": 23, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'myMaxLength' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "myMaxLength", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/myMaxLength", - "category": "Best Practice", - "startLine": 27, - "startColumn": 3, - "endLine": 27, - "endColumn": 14, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'ArtifactoryDbAdmin' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "ArtifactoryDbAdmin", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/ArtifactoryDbAdmin", - "category": "Best Practice", - "startLine": 31, - "startColumn": 3, - "endLine": 31, - "endColumn": 21, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'CentralAccountId' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "CentralAccountId", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/CentralAccountId", - "category": "Best Practice", - "startLine": 37, - "startColumn": 3, - "endLine": 37, - "endColumn": 19, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'CDLAllowedPattern' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "CDLAllowedPattern", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/CDLAllowedPattern", - "category": "Best Practice", - "startLine": 42, - "startColumn": 3, - "endLine": 42, - "endColumn": 20, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'CDLAllowedPatternWithSpaceInDefault' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "CDLAllowedPatternWithSpaceInDefault", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/CDLAllowedPatternWithSpaceInDefault", - "category": "Best Practice", - "startLine": 48, - "startColumn": 3, - "endLine": 48, - "endColumn": 38, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'CDLAllowedValues' is not referenced anywhere in the template", - "source": "CFN_LINT", + "message": "Property 'InstanceArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CDLAllowedValues", - "entityType": "Parameter" + "logicalId": "SSOPermissionSet", + "entityType": "Resource", + "resourceType": "AWS::SSO::PermissionSet" }, - "propertyPath": "Parameters/CDLAllowedValues", + "propertyPath": "Properties.InstanceArn", "category": "Best Practice", - "startLine": 58, - "startColumn": 3, - "endLine": 58, - "endColumn": 19, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 76, + "startColumn": 7, + "endLine": 76, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sso/aws-sso-permissionset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'SsoInstanceArn' (type String)" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'CDLAllowedValuesWithSpaceInDefault' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CDLAllowedValuesWithSpaceInDefault", - "entityType": "Parameter" + "logicalId": "SSOPermissionSet", + "entityType": "Resource", + "resourceType": "AWS::SSO::PermissionSet" }, - "propertyPath": "Parameters/CDLAllowedValuesWithSpaceInDefault", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 67, - "startColumn": 3, - "endLine": 67, - "endColumn": 37, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" + "startLine": 77, + "startColumn": 7, + "endLine": 77, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sso/aws-sso-permissionset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'CDLWithoutDefault' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'RoleInlinePolicy' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "CDLWithoutDefault", - "entityType": "Parameter" + "logicalId": "RoleInlinePolicy", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Parameters/CDLWithoutDefault", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 76, - "startColumn": 3, - "endLine": 76, - "endColumn": 20, - "ruleDescription": "Check if Parameters are Used", + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'StringList' is not referenced anywhere in the template", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SSOPermissionSet' of type 'AWS::SSO::PermissionSet' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "StringList", - "entityType": "Parameter" + "logicalId": "SSOPermissionSet", + "entityType": "Resource", + "resourceType": "AWS::SSO::PermissionSet" }, - "propertyPath": "Parameters/StringList", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 78, - "startColumn": 3, - "endLine": 78, - "endColumn": 13, - "ruleDescription": "Check if Parameters are Used", + "startLine": 75, + "startColumn": 5, + "endLine": 75, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/parameters/not_used_parameters.yaml": { - "filePath": "good/parameters/not_used_parameters.yaml", + "good/iam_valid.yaml": { + "filePath": "good/iam_valid.yaml", "status": "OK", "metadata": { "resourcesScanned": 2, "counts": { "fatal": 0, - "errors": 2, - "warnings": 1, - "informational": 4, + "errors": 0, + "warnings": 0, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -12051,149 +10881,127 @@ }, "diagnostics": [ { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-123456' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "LaunchConfiguration", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 20, - "startColumn": 7, - "endLine": 20, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-123456" - } - }, - { - "ruleId": "E2531", - "severity": "ERROR", - "message": "Runtime 'java8' was deprecated on '2024-01-08'. Creation was disabled on '2024-02-08', and updates will be disabled on '2027-03-03'. Please consider updating to 'java25'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Role' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "SomeLambda", + "logicalId": "Role", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are blocked for create", - "phase": "SCHEMA", - "context": { - "actualValue": "java8", - "lifecycle": "create-blocked" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 18, + "startColumn": 5, + "endLine": 18, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/kms_key_identifier_forms.yaml": { + "filePath": "good/kms_key_identifier_forms.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 7, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 3, + "informational": 7, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W3697", + "ruleId": "W9013", "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", - "source": "CFN_LINT", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", "entity": { - "logicalId": "LaunchConfiguration", + "logicalId": "TopicKeyArn", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::SNS::Topic" }, - "category": "Deprecation", - "startLine": 17, + "category": "Security", + "startLine": 8, "startColumn": 3, - "endLine": 17, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" + "endLine": 8, + "endColumn": 14, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "LaunchConfiguration", + "logicalId": "TopicAliasArn", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 20, - "startColumn": 7, - "endLine": 20, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "category": "Security", + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 16, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "LaunchConfiguration", + "logicalId": "TopicMultiRegionKeyArn", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 21, - "startColumn": 7, - "endLine": 21, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "category": "Security", + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 25, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'UserData' is create-only; updating it will cause resource replacement", + "message": "Resource 'TopicKeyId' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LaunchConfiguration", + "logicalId": "TopicKeyId", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 22, - "startColumn": 7, - "endLine": 22, + "startLine": 6, + "startColumn": 5, + "endLine": 6, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Base64 with unresolvable argument)" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SomeLambda' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'TopicKeyArn' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SomeLambda", + "logicalId": "TopicKeyArn", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -12204,148 +11012,118 @@ "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/parameters/used_transform_language_extension.json": { - "filePath": "good/parameters/used_transform_language_extension.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 4, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'IsParamAEnabled' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TopicAliasName' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "IsParamAEnabled", - "entityType": "Condition" + "logicalId": "TopicAliasName", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Conditions/IsParamAEnabled", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 34, + "startLine": 14, "startColumn": 5, - "endLine": 34, - "endColumn": 16, - "ruleDescription": "Check if Conditions are Used", + "endLine": 14, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'IsParamBEnabled' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TopicAliasArn' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "IsParamBEnabled", - "entityType": "Condition" + "logicalId": "TopicAliasArn", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Conditions/IsParamBEnabled", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 34, + "startLine": 18, "startColumn": 5, - "endLine": 34, - "endColumn": 16, - "ruleDescription": "Check if Conditions are Used", + "endLine": 18, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'IsParamCEnabled' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TopicMultiRegionKeyId' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "IsParamCEnabled", - "entityType": "Condition" + "logicalId": "TopicMultiRegionKeyId", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Conditions/IsParamCEnabled", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 34, + "startLine": 22, "startColumn": 5, - "endLine": 34, - "endColumn": 16, - "ruleDescription": "Check if Conditions are Used", + "endLine": 22, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'IsParamDEnabled' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TopicMultiRegionKeyArn' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "IsParamDEnabled", - "entityType": "Condition" + "logicalId": "TopicMultiRegionKeyArn", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Conditions/IsParamDEnabled", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 34, + "startLine": 26, "startColumn": 5, - "endLine": 34, - "endColumn": 16, - "ruleDescription": "Check if Conditions are Used", + "endLine": 26, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/parameters/used_transform_removed.yaml": { - "filePath": "good/parameters/used_transform_removed.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyAPI' of type 'AWS::Serverless::Api' supports Tags but none are configured", + "message": "Resource 'TopicIntrinsicAliasArn' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyAPI", + "logicalId": "TopicIntrinsicAliasArn", "entityType": "Resource", - "resourceType": "AWS::Serverless::Api" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 15, + "startLine": 30, "startColumn": 5, - "endLine": 15, + "endLine": 30, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/parameters/used_transforms.yaml": { - "filePath": "good/parameters/used_transforms.yaml", + "good/lambda_permission_source_account.yaml": { + "filePath": "good/lambda_permission_source_account.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 2, - "warnings": 1, + "errors": 0, + "warnings": 2, "informational": 4, "debug": 0 }, @@ -12355,87 +11133,58 @@ }, "diagnostics": [ { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-123456' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "LaunchConfiguration", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-123456" - } - }, - { - "ruleId": "E2531", - "severity": "ERROR", - "message": "Runtime 'java8' was deprecated on '2024-01-08'. Creation was disabled on '2024-02-08', and updates will be disabled on '2027-03-03'. Please consider updating to 'java25'", - "source": "CFN_LINT", + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'SourceArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", "entity": { - "logicalId": "SomeLambda", + "logicalId": "Perm", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 18, + "propertyPath": "Properties.SourceArn", + "category": "Best Practice", + "startLine": 8, "startColumn": 7, - "endLine": 18, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are blocked for create", - "phase": "SCHEMA", - "context": { - "actualValue": "java8", - "lifecycle": "create-blocked" - } + "endLine": 8, + "endColumn": 16, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" }, { - "ruleId": "W3697", + "ruleId": "W9013", "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", - "source": "CFN_LINT", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", "entity": { - "logicalId": "LaunchConfiguration", + "logicalId": "Perm", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Permission" }, - "category": "Deprecation", - "startLine": 20, + "category": "Security", + "startLine": 2, "startColumn": 3, - "endLine": 20, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" + "endLine": 2, + "endColumn": 7, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LaunchConfiguration", + "logicalId": "Perm", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 23, + "startLine": 5, "startColumn": 7, - "endLine": 23, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 5, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -12445,20 +11194,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LaunchConfiguration", + "logicalId": "Perm", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 24, + "startLine": 6, "startColumn": 7, - "endLine": 24, + "endLine": 6, "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -12468,59 +11216,59 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserData' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LaunchConfiguration", + "logicalId": "Perm", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.UserData", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 25, + "startLine": 7, "startColumn": 7, - "endLine": 25, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "endLine": 7, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Base64 with unresolvable argument)" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SomeLambda' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SomeLambda", + "logicalId": "Perm", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 16, - "startColumn": 5, - "endLine": 16, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } } ] }, - "good/properties_ec2_vpc.yaml": { - "filePath": "good/properties_ec2_vpc.yaml", + "good/lambda_permission_sourcearn_ref_no_account.yaml": { + "filePath": "good/lambda_permission_sourcearn_ref_no_account.yaml", "status": "OK", "metadata": { - "resourcesScanned": 7, + "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 2, - "warnings": 0, - "informational": 21, + "errors": 0, + "warnings": 1, + "informational": 4, "debug": 0 }, "suppressed": 0, @@ -12529,270 +11277,416 @@ }, "diagnostics": [ { - "ruleId": "E1151", - "severity": "ERROR", - "message": "'vpc-1234567' does not match format 'AWS::EC2::VPC.Id'", - "source": "CFN_LINT", + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'SourceArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", "entity": { - "logicalId": "mySubnet21", + "logicalId": "Perm", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", - "category": "Intrinsic Function", - "startLine": 61, + "propertyPath": "Properties.SourceArn", + "category": "Best Practice", + "startLine": 15, "startColumn": 7, - "endLine": 61, - "endColumn": 12, - "ruleDescription": "Validate VPC id format", + "endLine": 15, + "endColumn": 16, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Perm", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "vpc-1234567" + "lifecycle": "create-only" } }, { - "ruleId": "E1151", - "severity": "ERROR", - "message": "'vpc-1234567' does not match format 'AWS::EC2::VPC.Id'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "mySubnet22", + "logicalId": "Perm", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.VpcId", - "category": "Intrinsic Function", - "startLine": 66, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 13, "startColumn": 7, - "endLine": 66, - "endColumn": 12, - "ruleDescription": "Validate VPC id format", + "endLine": 13, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "vpc-1234567" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myVpc1", + "logicalId": "Perm", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 32, + "startLine": 14, "startColumn": 7, - "endLine": 32, + "endLine": 14, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'cidrBlockAllowedPattern' (type String)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myVpc1", + "logicalId": "Perm", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Lambda::Permission" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.SourceArn", "category": "Best Practice", - "startLine": 33, + "startLine": 15, "startColumn": 7, - "endLine": 33, - "endColumn": 22, + "endLine": 15, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } + } + ] + }, + "good/lambda_snapstart.yaml": { + "filePath": "good/lambda_snapstart.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2530", + "severity": "WARN", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", + "source": "CFN_LINT", + "entity": { + "logicalId": "SnapStartFunc", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", + "category": "Best Practice", + "startLine": 14, + "startColumn": 9, + "endLine": 14, + "endColumn": 16, + "ruleDescription": "Validate that SnapStart is properly configured", + "phase": "LINT" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "SnapStartFunc", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "category": "Security", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 16, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myVpc2", + "logicalId": "SnapStartFunc", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 37, + "startLine": 6, "startColumn": 7, - "endLine": 37, - "endColumn": 22, + "endLine": 6, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "parameter with AllowedValues" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'SnapStartFunc' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myVpc2", + "logicalId": "SnapStartFunc", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 38, - "startColumn": 7, - "endLine": 38, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'cidrBlockAllowedPattern' (type String)" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/lambda_zipfile.yaml": { + "filePath": "good/lambda_zipfile.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I3042", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "message": "ARN in Resource LambdaFn contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", + "source": "CFN_LINT", "entity": { - "logicalId": "myVpc3", + "logicalId": "LambdaFn", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.Role.Fn::Sub", "category": "Best Practice", - "startLine": 42, + "startLine": 9, "startColumn": 7, - "endLine": 42, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "parameter with AllowedValues" - } + "endLine": 9, + "endColumn": 14, + "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myVpc3", + "logicalId": "LambdaFn", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 43, + "startLine": 6, "startColumn": 7, - "endLine": 43, - "endColumn": 16, + "endLine": 6, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'LambdaFn' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myVpc4", + "logicalId": "LambdaFn", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.InstanceTenancy", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 47, - "startColumn": 7, - "endLine": 47, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "parameter with AllowedValues" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/lifecycle_intrinsic_scenarios.yaml": { + "filePath": "good/lifecycle_intrinsic_scenarios.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 13, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "good/mappings/name.yaml": { + "filePath": "good/mappings/name.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 1, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "startLine": 10, + "startColumn": 1, + "endLine": 10, + "endColumn": 10, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" + }, + { + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'RegionMap' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", "entity": { - "logicalId": "myVpc4", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "logicalId": "RegionMap", + "entityType": "Mapping" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Mappings/RegionMap", "category": "Best Practice", - "startLine": 48, - "startColumn": 7, - "endLine": 48, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Check if Mappings are Used", + "phase": "LINT" + } + ] + }, + "good/mappings/used.yaml": { + "filePath": "good/mappings/used.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "E1151", + "severity": "ERROR", + "message": "'vpc-123456' does not match format 'AWS::EC2::VPC.Id'", + "source": "CFN_LINT", "entity": { - "logicalId": "myVpc5", + "logicalId": "mySubnet", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.InstanceTenancy", - "category": "Best Practice", - "startLine": 52, + "propertyPath": "Properties.VpcId", + "category": "Intrinsic Function", + "startLine": 21, "startColumn": 7, - "endLine": 52, - "endColumn": 22, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 21, + "endColumn": 12, + "ruleDescription": "Validate VPC id format", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "actualValue": "vpc-123456" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myVpc5", + "logicalId": "mySubnet", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 53, + "startLine": 21, "startColumn": 7, - "endLine": 53, - "endColumn": 16, + "endLine": 21, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -12805,166 +11699,304 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "mySubnet21", + "logicalId": "mySubnet", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 57, + "startLine": 23, "startColumn": 7, - "endLine": 57, + "endLine": 23, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Select with unresolvable arguments)" + "resolutionSource": "dynamic (FindInMap with dynamic map name)" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'mySubnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySubnet21", + "logicalId": "mySubnet", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 61, - "startColumn": 7, - "endLine": 61, + "startLine": 20, + "startColumn": 5, + "endLine": 20, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/mappings_valid.yaml": { + "filePath": "good/mappings_valid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'RegionMap' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", + "entity": { + "logicalId": "RegionMap", + "entityType": "Mapping" + }, + "propertyPath": "Mappings/RegionMap", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Check if Mappings are Used", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'R' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySubnet22", + "logicalId": "R", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 65, - "startColumn": 7, - "endLine": 65, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'cidrBlockAllowedPattern' (type String)" - } + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 4, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/metadata_context_complete.yaml": { + "filePath": "good/metadata_context_complete.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 6, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 13, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "mySubnet22", + "logicalId": "OrderQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 66, - "startColumn": 7, - "endLine": 66, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "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": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 13, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "LegacyTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 35, + "startColumn": 3, + "endLine": 35, + "endColumn": 14, + "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": "LegacyTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 35, + "startColumn": 3, + "endLine": 35, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "ServiceLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "category": "Best Practice", + "startLine": 64, + "startColumn": 3, + "endLine": 64, + "endColumn": 18, + "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": "ServiceLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "category": "Best Practice", + "startLine": 64, + "startColumn": 3, + "endLine": 64, + "endColumn": 18, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'myVpc1' of type 'AWS::EC2::VPC' supports Tags but none are configured", - "source": "ENGINE", + "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": "myVpc1", + "logicalId": "OrderQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 31, - "startColumn": 5, - "endLine": 31, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 13, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'myVpc2' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myVpc2", + "logicalId": "LegacyTable", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 36, - "startColumn": 5, - "endLine": 36, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 38, + "startColumn": 7, + "endLine": 38, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myVpc3' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "message": "Resource 'OrderQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myVpc3", + "logicalId": "OrderQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::SQS::Queue" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 41, - "startColumn": 5, - "endLine": 41, - "endColumn": 15, + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 13, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myVpc4' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "message": "Resource 'LegacyTable' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myVpc4", + "logicalId": "LegacyTable", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 46, + "startLine": 37, "startColumn": 5, - "endLine": 46, + "endLine": 37, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -12972,19 +12004,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myVpc5' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "message": "Resource 'ServiceLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myVpc5", + "logicalId": "ServiceLogGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Logs::LogGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 51, + "startLine": 66, "startColumn": 5, - "endLine": 51, + "endLine": 66, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -12992,19 +12024,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'mySubnet21' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySubnet21", + "logicalId": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 56, + "startLine": 70, "startColumn": 5, - "endLine": 56, + "endLine": 70, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -13012,414 +12044,293 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'mySubnet22' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'CustomResourceProviderframeworkonEvent' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "mySubnet22", + "logicalId": "CustomResourceProviderframeworkonEvent", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 64, + "startLine": 78, "startColumn": 5, - "endLine": 64, + "endLine": 78, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/properties_rt_association.yaml": { - "filePath": "good/properties_rt_association.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 6, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 11, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AppSubnetPublicRouteTableAssociation", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 31, - "startColumn": 9, - "endLine": 31, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'PublicRouteTable' (type String)", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AppSubnetPublicRouteTableAssociation", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 33, - "startColumn": 9, - "endLine": 33, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'AppSubnet01' (type String)", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AppSubnetPrivateRouteTableAssociation", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 40, - "startColumn": 9, - "endLine": 40, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'PrivateRouteTable' (type String)", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AppSubnetPrivateRouteTableAssociation", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 42, - "startColumn": 9, - "endLine": 42, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'AppSubnet01' (type String)", - "extra": { - "replacement_strategy": "delete_then_create" - } - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "ProxySubnetRouteTableAssociation", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.RouteTableId", - "category": "Best Practice", - "startLine": 48, - "startColumn": 9, - "endLine": 48, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'PublicRouteTable' (type String)", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "good/minimal.yaml": { + "filePath": "good/minimal.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'IamPipeline' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ProxySubnetRouteTableAssociation", + "logicalId": "IamPipeline", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 50, - "startColumn": 9, - "endLine": 50, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'isPublic'", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/modules/minimal.yaml": { + "filePath": "good/modules/minimal.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Resource 'OtherResource' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "PublicSubnetRouteTableAssociation", + "logicalId": "OtherResource", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 56, - "startColumn": 9, - "endLine": 56, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'PublicRouteTable' (type String)", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 16, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/neptune_valid_instanceclass.yaml": { + "filePath": "good/neptune_valid_instanceclass.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 4, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "PublicSubnetRouteTableAssociation", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Neptune::DBInstance" }, - "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 58, - "startColumn": 9, - "endLine": 58, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'PublicSubnet01' (type String)", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "CustomResource", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::CustomResource" + "resourceType": "AWS::Neptune::DBInstance" }, - "propertyPath": "Properties.ServiceToken", "category": "Best Practice", - "startLine": 64, - "startColumn": 9, - "endLine": 64, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9003", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", "source": "ENGINE", - "entity": { - "logicalId": "CustomSubnetRouteTableAssociation", - "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" - }, - "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 69, - "startColumn": 9, - "endLine": 69, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'PublicRouteTable' (type String)", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Instance' of type 'AWS::Neptune::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CustomSubnetRouteTableAssociation", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::Neptune::DBInstance" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 71, - "startColumn": 9, - "endLine": 71, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt CustomResource.PublicSubnet", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "good/redshift_private.yaml": { - "filePath": "good/redshift_private.yaml", + "good/no_value.yaml": { + "filePath": "good/no_value.yaml", "status": "OK", "metadata": { - "resourcesScanned": 7, + "resourcesScanned": 5, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 14, + "warnings": 2, + "informational": 13, "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'pProdMonitoringInterval' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "pProdMonitoringInterval", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/pProdMonitoringInterval", + "category": "Best Practice", + "startLine": 45, + "startColumn": 5, + "endLine": 45, + "endColumn": 28, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, { - "ruleId": "I9001", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'pDevMonitoringInterval' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "pDevMonitoringInterval", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/pDevMonitoringInterval", + "category": "Best Practice", + "startLine": 49, + "startColumn": 5, + "endLine": 49, + "endColumn": 27, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "Subnet1", + "logicalId": "rDBServerInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" - } + "startLine": 123, + "startColumn": 5, + "endLine": 123, + "endColumn": 22, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "Subnet1", + "logicalId": "rDBServerInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 123, + "startColumn": 5, + "endLine": 123, + "endColumn": 22, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPC", + "logicalId": "rParameterGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::RDS::DBParameterGroup" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 16, + "startLine": 59, + "startColumn": 13, + "endLine": 59, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13429,255 +12340,240 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'Family' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RouteTable1", + "logicalId": "rParameterGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::RDS::DBParameterGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Family", "category": "Best Practice", - "startLine": 21, - "startColumn": 7, - "endLine": 21, - "endColumn": 12, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "startLine": 60, + "startColumn": 13, + "endLine": 60, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" + "resolutionSource": "parameter 'pDBParameterGroupFamily' (type String)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'AutoMinorVersionUpgrade' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetRTAssoc", + "logicalId": "rDBServerInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.AutoMinorVersionUpgrade", "category": "Best Practice", - "startLine": 25, - "startColumn": 7, - "endLine": 25, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 128, + "startColumn": 13, + "endLine": 128, + "endColumn": 36, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Subnet1'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetRTAssoc", + "logicalId": "rDBServerInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.BackupRetentionPeriod", "category": "Best Practice", - "startLine": 26, - "startColumn": 7, - "endLine": 26, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "startLine": 129, + "startColumn": 13, + "endLine": 129, + "endColumn": 34, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'RouteTable1'", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'DBParameterGroupName' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NatGW", + "logicalId": "rDBServerInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.DBParameterGroupName", "category": "Best Practice", - "startLine": 30, - "startColumn": 7, - "endLine": 30, - "endColumn": 15, + "startLine": 132, + "startColumn": 13, + "endLine": 132, + "endColumn": 33, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Subnet1'" + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'rParameterGroup'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "message": "Property 'DBSubnetGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Route1", + "logicalId": "rDBServerInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.RouteTableId", + "propertyPath": "Properties.DBSubnetGroupName", "category": "Best Practice", - "startLine": 34, - "startColumn": 7, - "endLine": 34, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "startLine": 133, + "startColumn": 13, + "endLine": 133, + "endColumn": 30, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'RouteTable1'" + "resolutionSource": "Ref to 'rDBSubnetGroup'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Route1", + "logicalId": "rDBServerInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::Route" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.DestinationCidrBlock", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "startLine": 134, + "startColumn": 13, + "endLine": 134, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only", + "resolutionSource": "parameter 'pDBEngine' (type String)" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Subnet1' of type 'AWS::EC2::Subnet' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'VPC' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPC", + "logicalId": "rDBServerInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 138, + "startColumn": 13, + "endLine": 138, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'pDBMasterUsername' (type String)" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'RedshiftSubnetGroup' of type 'AWS::Redshift::ClusterSubnetGroup' supports Tags but none are configured", + "message": "Property 'MultiAZ' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RedshiftSubnetGroup", + "logicalId": "rDBServerInstance", "entityType": "Resource", - "resourceType": "AWS::Redshift::ClusterSubnetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.MultiAZ", "category": "Best Practice", - "startLine": 14, - "startColumn": 5, - "endLine": 14, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 145, + "startColumn": 13, + "endLine": 145, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "Fn::If on condition 'MultiAZ'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'RouteTable1' of type 'AWS::EC2::RouteTable' supports Tags but none are configured", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RouteTable1", + "logicalId": "rDBServerInstance", "entityType": "Resource", - "resourceType": "AWS::EC2::RouteTable" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 148, + "startColumn": 13, + "endLine": 148, + "endColumn": 29, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'NatGW' of type 'AWS::EC2::NatGateway' supports Tags but none are configured", + "message": "Resource 'rDBMonitoringRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "NatGW", + "logicalId": "rDBMonitoringRole", "entityType": "Resource", - "resourceType": "AWS::EC2::NatGateway" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 29, - "startColumn": 5, - "endLine": 29, - "endColumn": 15, + "startLine": 96, + "startColumn": 9, + "endLine": 96, + "endColumn": 19, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/redshift_valid_nodetype.yaml": { - "filePath": "good/redshift_valid_nodetype.yaml", + "good/no_w3010_on_unlisted_type.yaml": { + "filePath": "good/no_w3010_on_unlisted_type.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, @@ -13701,13 +12597,13 @@ "entity": { "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::Redshift::Cluster" + "resourceType": "AWS::DocDB::DBCluster" }, "propertyPath": "Properties.MasterUserPassword", "category": "Security", - "startLine": 8, + "startLine": 11, "startColumn": 7, - "endLine": 8, + "endLine": 11, "endColumn": 25, "ruleDescription": "Check if Password Properties are correctly configured", "phase": "LINT" @@ -13720,12 +12616,12 @@ "entity": { "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::Redshift::Cluster" + "resourceType": "AWS::DocDB::DBCluster" }, "category": "Best Practice", - "startLine": 2, + "startLine": 6, "startColumn": 3, - "endLine": 2, + "endLine": 6, "endColumn": 10, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" @@ -13738,12 +12634,12 @@ "entity": { "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::Redshift::Cluster" + "resourceType": "AWS::DocDB::DBCluster" }, "category": "Best Practice", - "startLine": 2, + "startLine": 6, "startColumn": 3, - "endLine": 2, + "endLine": 6, "endColumn": 10, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" @@ -13751,18 +12647,18 @@ { "ruleId": "I3013", "severity": "INFO", - "message": "'AutomatedSnapshotRetentionPeriod' 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)", + "message": "'BackupRetentionPeriod' 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": "Cluster", "entityType": "Resource", - "resourceType": "AWS::Redshift::Cluster" + "resourceType": "AWS::DocDB::DBCluster" }, "propertyPath": "Properties", "category": "Best Practice", - "startLine": 4, + "startLine": 8, "startColumn": 5, - "endLine": 4, + "endLine": 8, "endColumn": 15, "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" @@ -13770,20 +12666,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", + "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::Redshift::Cluster" + "resourceType": "AWS::DocDB::DBCluster" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.DBClusterIdentifier", "category": "Best Practice", - "startLine": 7, + "startLine": 9, "startColumn": 7, - "endLine": 7, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 9, + "endColumn": 26, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13793,20 +12688,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DBName' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::Redshift::Cluster" + "resourceType": "AWS::DocDB::DBCluster" }, - "propertyPath": "Properties.DBName", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 9, + "startLine": 10, "startColumn": 7, - "endLine": 9, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 10, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13814,46 +12708,59 @@ } }, { - "ruleId": "I9003", + "ruleId": "I9001", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "message": "Property 'AvailabilityZones' is create-only; updating it will cause resource replacement", "source": "ENGINE", + "entity": { + "logicalId": "Cluster", + "entityType": "Resource", + "resourceType": "AWS::DocDB::DBCluster" + }, + "propertyPath": "Properties.AvailabilityZones", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 24, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Cluster' of type 'AWS::Redshift::Cluster' supports Tags but none are configured", + "message": "Resource 'Cluster' of type 'AWS::DocDB::DBCluster' supports Tags but none are configured", "source": "ENGINE", "entity": { "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::Redshift::Cluster" + "resourceType": "AWS::DocDB::DBCluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 4, + "startLine": 8, "startColumn": 5, - "endLine": 4, + "endLine": 8, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/reference_values_are_not_literals.yaml": { - "filePath": "good/reference_values_are_not_literals.yaml", + "good/output_value_string.yaml": { + "filePath": "good/output_value_string.yaml", "status": "OK", "metadata": { - "resourcesScanned": 6, + "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 10, + "informational": 4, "debug": 0 }, "suppressed": 0, @@ -13867,15 +12774,15 @@ "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": "FifoQueue", + "logicalId": "Queue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, "category": "Best Practice", - "startLine": 21, + "startLine": 17, "startColumn": 3, - "endLine": 21, - "endColumn": 12, + "endLine": 17, + "endColumn": 8, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -13885,15 +12792,15 @@ "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": "FifoQueue", + "logicalId": "Queue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, "category": "Best Practice", - "startLine": 21, + "startLine": 17, "startColumn": 3, - "endLine": 21, - "endColumn": 12, + "endLine": 17, + "endColumn": 8, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -13903,129 +12810,93 @@ "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": "FifoQueue", + "logicalId": "Queue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, "propertyPath": "Properties", "category": "Best Practice", - "startLine": 23, - "startColumn": 5, - "endLine": 23, - "endColumn": 15, + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 8, "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Record", - "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" - }, - "propertyPath": "Properties.HostedZoneName", - "category": "Best Practice", - "startLine": 16, - "startColumn": 7, - "endLine": 16, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FifoQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.FifoQueue", - "category": "Best Practice", - "startLine": 24, - "startColumn": 7, - "endLine": 24, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "message": "Resource 'Queue' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FifoQueue", + "logicalId": "Queue", "entityType": "Resource", "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.QueueName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 25, - "startColumn": 7, - "endLine": 25, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt Store.Value" - } + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 8, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/override/complete.yaml": { + "filePath": "good/override/complete.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 6, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "untaggedInstance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 54, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 13, "startColumn": 7, - "endLine": 54, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "endLine": 13, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "myS3Bucket", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 57, + "startLine": 9, "startColumn": 7, - "endLine": 57, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 9, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -14035,20 +12906,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "untaggedInstance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 59, + "startLine": 13, "startColumn": 7, - "endLine": 59, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 13, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -14058,171 +12929,135 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "VPC", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.BackupRetentionPeriod", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 60, - "startColumn": 7, - "endLine": 60, - "endColumn": 28, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 17, + "startColumn": 9, + "endLine": 17, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } - } - ] - }, - "good/region_conditional_resource_type.yaml": { - "filePath": "good/region_conditional_resource_type.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'ProjectArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Pool", + "logicalId": "myS3Bucket", "entityType": "Resource", - "resourceType": "AWS::DeviceFarm::DevicePool" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ProjectArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 17, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" - }, - { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", - "entity": { - "logicalId": "Pool", - "entityType": "Resource", - "resourceType": "AWS::DeviceFarm::DevicePool" - }, - "category": "Security", - "startLine": 9, - "startColumn": 3, - "endLine": 9, - "endColumn": 7, - "ruleDescription": "Hardcoded account ID in ARN", + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ProjectArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'untaggedInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Pool", + "logicalId": "untaggedInstance", "entityType": "Resource", - "resourceType": "AWS::DeviceFarm::DevicePool" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.ProjectArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-device-farm", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Pool' of type 'AWS::DeviceFarm::DevicePool' supports Tags but none are configured", + "message": "Resource 'VPC' of type 'AWS::EC2::VPC' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Pool", + "logicalId": "VPC", "entityType": "Resource", - "resourceType": "AWS::DeviceFarm::DevicePool" + "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, + "startLine": 16, + "startColumn": 7, + "endLine": 16, + "endColumn": 17, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/resources/backup/test_backup_plan_lifecycle_rule.yml": { - "filePath": "good/resources/backup/test_backup_plan_lifecycle_rule.yml", + "good/override/required.yaml": { + "filePath": "good/override/required.yaml", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 0, + "informational": 2, "debug": 0 }, "suppressed": 0, "strict": false, "severityLevel": "DEBUG" }, - "diagnostics": [] - }, - "good/resources/cloudformation/nested_stack_dynamic.yaml": { - "filePath": "good/resources/cloudformation/nested_stack_dynamic.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "myS3Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.BucketName", + "category": "Best Practice", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'NestedStack' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Resource 'myS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "NestedStack", + "logicalId": "myS3Bucket", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -14236,16 +13071,16 @@ } ] }, - "good/resources/cloudformation/stack_nested.yaml": { - "filePath": "good/resources/cloudformation/stack_nested.yaml", + "good/param_constraints_valid.yaml": { + "filePath": "good/param_constraints_valid.yaml", "status": "OK", "metadata": { - "resourcesScanned": 0, + "resourcesScanned": 1, "counts": { - "fatal": 1, + "fatal": 0, "errors": 0, "warnings": 2, - "informational": 0, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -14253,67 +13088,74 @@ "severityLevel": "DEBUG" }, "diagnostics": [ - { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "startLine": 6, - "startColumn": 1, - "endLine": 6, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" - }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'One' is not referenced anywhere in the template", + "message": "Parameter 'ValidParam' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "One", + "logicalId": "ValidParam", "entityType": "Parameter" }, - "propertyPath": "Parameters/One", + "propertyPath": "Parameters/ValidParam", "category": "Best Practice", - "startLine": 2, + "startLine": 3, "startColumn": 3, - "endLine": 2, - "endColumn": 6, + "endLine": 3, + "endColumn": 13, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { "ruleId": "W2001", "severity": "WARN", - "message": "Parameter 'Two' is not referenced anywhere in the template", + "message": "Parameter 'ValidNumber' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Two", + "logicalId": "ValidNumber", "entityType": "Parameter" }, - "propertyPath": "Parameters/Two", + "propertyPath": "Parameters/ValidNumber", "category": "Best Practice", - "startLine": 4, + "startLine": 9, "startColumn": 3, - "endLine": 4, - "endColumn": 6, + "endLine": 9, + "endColumn": 14, "ruleDescription": "Check if Parameters are Used", "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": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 9, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "good/resources/cloudformation/stacks.yaml": { - "filePath": "good/resources/cloudformation/stacks.yaml", + "good/parameters/F2012_cdl_default_split.yaml": { + "filePath": "good/parameters/F2012_cdl_default_split.yaml", "status": "OK", "metadata": { - "resourcesScanned": 5, + "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, - "warnings": 4, - "informational": 15, + "warnings": 6, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -14322,412 +13164,445 @@ }, "diagnostics": [ { - "ruleId": "W1028", + "ruleId": "W2001", "severity": "WARN", - "message": "['Fn::If', 1] is not reachable. When setting condition 'IsUsEast1' to True", + "message": "Parameter 'CDLSingleElementAllowed' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Stack3", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "logicalId": "CDLSingleElementAllowed", + "entityType": "Parameter" }, - "propertyPath": "Properties.Parameters.Fn::If.2.Fn::If.1", + "propertyPath": "Parameters/CDLSingleElementAllowed", "category": "Best Practice", - "startLine": 48, - "startColumn": 16, - "endLine": 48, - "endColumn": 17, - "ruleDescription": "Check Fn::If has a path that cannot be reached", + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 26, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W3002", + "ruleId": "W2001", "severity": "WARN", - "message": "This code may only work with 'package' cli command", + "message": "Parameter 'CDLMultipleElementsAllowed' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "StackNormal", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "logicalId": "CDLMultipleElementsAllowed", + "entityType": "Parameter" }, - "propertyPath": "Properties.TemplateURL", + "propertyPath": "Parameters/CDLMultipleElementsAllowed", "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 18, - "ruleDescription": "Warn when properties are configured to only work with the package command", + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 29, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W3002", + "ruleId": "W2001", "severity": "WARN", - "message": "This code may only work with 'package' cli command", + "message": "Parameter 'CDLWhitespaceTrimsToValid' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "StackInvalidPath", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "logicalId": "CDLWhitespaceTrimsToValid", + "entityType": "Parameter" }, - "propertyPath": "Properties.TemplateURL", + "propertyPath": "Parameters/CDLWhitespaceTrimsToValid", "category": "Best Practice", - "startLine": 32, - "startColumn": 7, - "endLine": 32, - "endColumn": 18, - "ruleDescription": "Warn when properties are configured to only work with the package command", + "startLine": 19, + "startColumn": 3, + "endLine": 19, + "endColumn": 28, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "W3002", + "ruleId": "W2001", "severity": "WARN", - "message": "This code may only work with 'package' cli command", + "message": "Parameter 'CDLListStringTypeValid' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Stack3", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "logicalId": "CDLListStringTypeValid", + "entityType": "Parameter" }, - "propertyPath": "Properties.TemplateURL", + "propertyPath": "Parameters/CDLListStringTypeValid", "category": "Best Practice", - "startLine": 40, - "startColumn": 7, - "endLine": 40, - "endColumn": 18, - "ruleDescription": "Warn when properties are configured to only work with the package command", + "startLine": 26, + "startColumn": 3, + "endLine": 26, + "endColumn": 25, + "ruleDescription": "Check if Parameters are Used", "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)", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'CDLNoAllowedValues' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "CDLNoAllowedValues", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/CDLNoAllowedValues", + "category": "Best Practice", + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 21, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'CDLEmptyAllowedValues' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "StackNormal", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "logicalId": "CDLEmptyAllowedValues", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/CDLEmptyAllowedValues", + "category": "Best Practice", + "startLine": 37, + "startColumn": 3, + "endLine": 37, + "endColumn": 24, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + } + ] + }, + "good/parameters/default.yaml": { + "filePath": "good/parameters/default.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 3, + "errors": 0, + "warnings": 14, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "startLine": 81, + "startColumn": 1, + "endLine": 81, + "endColumn": 10, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" + }, + { + "ruleId": "F2012", + "severity": "FATAL", + "message": "Parameter 'CDLAllowedValues' Default 'four' is not in AllowedValues ['one', 'two', 'three,four']", + "source": "SCHEMA", + "entity": { + "logicalId": "CDLAllowedValues", + "entityType": "Parameter" }, - "category": "Best Practice", - "startLine": 5, - "startColumn": 3, - "endLine": 5, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Parameters/CDLAllowedValues/Default", + "category": "Parameter", + "startLine": 62, + "startColumn": 5, + "endLine": 62, + "endColumn": 12, + "ruleDescription": "Parameter Default must be in AllowedValues", + "phase": "SCHEMA" }, { - "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", + "ruleId": "F2012", + "severity": "FATAL", + "message": "Parameter 'CDLAllowedValues' Default 'three' is not in AllowedValues ['one', 'two', 'three,four']", + "source": "SCHEMA", "entity": { - "logicalId": "StackNormal", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "logicalId": "CDLAllowedValues", + "entityType": "Parameter" }, - "category": "Best Practice", - "startLine": 5, - "startColumn": 3, - "endLine": 5, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Parameters/CDLAllowedValues/Default", + "category": "Parameter", + "startLine": 62, + "startColumn": 5, + "endLine": 62, + "endColumn": 12, + "ruleDescription": "Parameter Default must be in AllowedValues", + "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)", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'myAllowedPattern' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "StackIsWebUrl", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "logicalId": "myAllowedPattern", + "entityType": "Parameter" }, + "propertyPath": "Parameters/myAllowedPattern", "category": "Best Practice", - "startLine": 13, + "startLine": 4, "startColumn": 3, - "endLine": 13, - "endColumn": 16, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 4, + "endColumn": 19, + "ruleDescription": "Check if Parameters are Used", "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)", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'myMinValue' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "StackIsWebUrl", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "logicalId": "myMinValue", + "entityType": "Parameter" }, + "propertyPath": "Parameters/myMinValue", "category": "Best Practice", - "startLine": 13, + "startLine": 8, "startColumn": 3, - "endLine": 13, - "endColumn": 16, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 8, + "endColumn": 13, + "ruleDescription": "Check if Parameters are Used", "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)", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'myMaxValue' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "StackUrlIsObject", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "logicalId": "myMaxValue", + "entityType": "Parameter" }, + "propertyPath": "Parameters/myMaxValue", "category": "Best Practice", - "startLine": 21, + "startLine": 12, "startColumn": 3, - "endLine": 21, - "endColumn": 19, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 12, + "endColumn": 13, + "ruleDescription": "Check if Parameters are Used", "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)", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'myAllowedValue' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "StackUrlIsObject", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "logicalId": "myAllowedValue", + "entityType": "Parameter" }, + "propertyPath": "Parameters/myAllowedValue", "category": "Best Practice", - "startLine": 21, + "startLine": 16, "startColumn": 3, - "endLine": 21, - "endColumn": 19, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 16, + "endColumn": 17, + "ruleDescription": "Check if Parameters are Used", "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)", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'myMinLength' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "StackInvalidPath", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "logicalId": "myMinLength", + "entityType": "Parameter" }, + "propertyPath": "Parameters/myMinLength", "category": "Best Practice", - "startLine": 29, + "startLine": 23, "startColumn": 3, - "endLine": 29, - "endColumn": 19, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 23, + "endColumn": 14, + "ruleDescription": "Check if Parameters are Used", "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)", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'myMaxLength' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "StackInvalidPath", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "logicalId": "myMaxLength", + "entityType": "Parameter" }, + "propertyPath": "Parameters/myMaxLength", "category": "Best Practice", - "startLine": 29, + "startLine": 27, "startColumn": 3, - "endLine": 29, - "endColumn": 19, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 27, + "endColumn": 14, + "ruleDescription": "Check if Parameters are Used", "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)", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'ArtifactoryDbAdmin' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Stack3", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "logicalId": "ArtifactoryDbAdmin", + "entityType": "Parameter" }, + "propertyPath": "Parameters/ArtifactoryDbAdmin", "category": "Best Practice", - "startLine": 37, + "startLine": 31, "startColumn": 3, - "endLine": 37, - "endColumn": 9, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 31, + "endColumn": 21, + "ruleDescription": "Check if Parameters are Used", "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)", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'CentralAccountId' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "Stack3", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "logicalId": "CentralAccountId", + "entityType": "Parameter" }, + "propertyPath": "Parameters/CentralAccountId", "category": "Best Practice", "startLine": 37, "startColumn": 3, "endLine": 37, - "endColumn": 9, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endColumn": 19, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'StackNormal' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'CDLAllowedPattern' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "StackNormal", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "logicalId": "CDLAllowedPattern", + "entityType": "Parameter" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Parameters/CDLAllowedPattern", "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 42, + "startColumn": 3, + "endLine": 42, + "endColumn": 20, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'StackIsWebUrl' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'CDLAllowedPatternWithSpaceInDefault' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "StackIsWebUrl", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "logicalId": "CDLAllowedPatternWithSpaceInDefault", + "entityType": "Parameter" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Parameters/CDLAllowedPatternWithSpaceInDefault", "category": "Best Practice", - "startLine": 15, - "startColumn": 5, - "endLine": 15, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 48, + "startColumn": 3, + "endLine": 48, + "endColumn": 38, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'StackUrlIsObject' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'CDLAllowedValues' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "StackUrlIsObject", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "logicalId": "CDLAllowedValues", + "entityType": "Parameter" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Parameters/CDLAllowedValues", "category": "Best Practice", - "startLine": 23, - "startColumn": 5, - "endLine": 23, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 58, + "startColumn": 3, + "endLine": 58, + "endColumn": 19, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'StackInvalidPath' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'CDLAllowedValuesWithSpaceInDefault' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "StackInvalidPath", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "logicalId": "CDLAllowedValuesWithSpaceInDefault", + "entityType": "Parameter" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Parameters/CDLAllowedValuesWithSpaceInDefault", "category": "Best Practice", - "startLine": 31, - "startColumn": 5, - "endLine": 31, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 67, + "startColumn": 3, + "endLine": 67, + "endColumn": 37, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Stack3' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'CDLWithoutDefault' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "Stack3", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "logicalId": "CDLWithoutDefault", + "entityType": "Parameter" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Parameters/CDLWithoutDefault", "category": "Best Practice", - "startLine": 39, - "startColumn": 5, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 76, + "startColumn": 3, + "endLine": 76, + "endColumn": 20, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" - } - ] - }, - "good/resources/cloudfront/aliases.yaml": { - "filePath": "good/resources/cloudfront/aliases.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CloudFrontDistribution' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'StringList' is not referenced anywhere in the template", + "source": "CFN_LINT", "entity": { - "logicalId": "CloudFrontDistribution", - "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" + "logicalId": "StringList", + "entityType": "Parameter" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Parameters/StringList", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 78, + "startColumn": 3, + "endLine": 78, + "endColumn": 13, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" } ] }, - "good/resources/dynamodb/attributes.yaml": { - "filePath": "good/resources/dynamodb/attributes.yaml", + "good/parameters/not_used_parameters.yaml": { + "filePath": "good/parameters/not_used_parameters.yaml", "status": "OK", "metadata": { "resourcesScanned": 2, "counts": { "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 8, + "errors": 2, + "warnings": 1, + "informational": 4, "debug": 0 }, "suppressed": 0, @@ -14736,173 +13611,172 @@ }, "diagnostics": [ { - "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": "DDBTable1", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "category": "Best Practice", - "startLine": 6, - "startColumn": 3, - "endLine": 6, - "endColumn": 12, - "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)", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-123456' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "DDBTable1", + "logicalId": "LaunchConfiguration", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "category": "Best Practice", - "startLine": 6, - "startColumn": 3, - "endLine": 6, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 20, + "startColumn": 7, + "endLine": 20, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-123456" + } }, { - "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)", + "ruleId": "E2531", + "severity": "ERROR", + "message": "Runtime 'java8' was deprecated on '2024-01-08'. Creation was disabled on '2024-02-08', and updates will be disabled on '2027-03-03'. Please consider updating to 'java25'", "source": "CFN_LINT", "entity": { - "logicalId": "DDBTable2", + "logicalId": "SomeLambda", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Serverless::Function" }, - "category": "Best Practice", - "startLine": 34, - "startColumn": 3, - "endLine": 34, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are blocked for create", + "phase": "SCHEMA", + "context": { + "actualValue": "java8", + "lifecycle": "create-blocked" + } }, { - "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)", + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", "source": "CFN_LINT", "entity": { - "logicalId": "DDBTable2", + "logicalId": "LaunchConfiguration", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "category": "Best Practice", - "startLine": 34, + "category": "Deprecation", + "startLine": 17, "startColumn": 3, - "endLine": 34, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "endLine": 17, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DDBTable1", + "logicalId": "LaunchConfiguration", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 16, + "startLine": 20, "startColumn": 7, - "endLine": 16, - "endColumn": 16, + "endLine": 20, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DDBTable2", + "logicalId": "LaunchConfiguration", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 47, + "startLine": 21, "startColumn": 7, - "endLine": 47, - "endColumn": 16, + "endLine": 21, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DDBTable1' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'UserData' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DDBTable1", + "logicalId": "LaunchConfiguration", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, + "startLine": 22, + "startColumn": 7, + "endLine": 22, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Base64 with unresolvable argument)" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DDBTable2' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'SomeLambda' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DDBTable2", + "logicalId": "SomeLambda", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 36, + "startLine": 10, "startColumn": 5, - "endLine": 36, + "endLine": 10, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/resources/dynamodb/attributes_transform.yaml": { - "filePath": "good/resources/dynamodb/attributes_transform.yaml", + "good/parameters/used_transform_language_extension.json": { + "filePath": "good/parameters/used_transform_language_extension.json", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 1, "counts": { - "fatal": 4, - "errors": 3, - "warnings": 0, - "informational": 12, + "fatal": 0, + "errors": 0, + "warnings": 4, + "informational": 0, "debug": 0 }, "suppressed": 0, @@ -14911,309 +13785,392 @@ }, "diagnostics": [ { - "ruleId": "F1101", - "severity": "FATAL", - "message": "Fn::Transform: Fn::Transform value must be an object", - "source": "SCHEMA", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'IsParamAEnabled' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "DDBTableTransformAttributeDefinitions", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "logicalId": "IsParamAEnabled", + "entityType": "Condition" }, - "propertyPath": "Properties.AttributeDefinitions.Fn::Transform", - "category": "Structure", - "startLine": 11, - "startColumn": 9, - "endLine": 11, - "endColumn": 22, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" + "propertyPath": "Conditions/IsParamAEnabled", + "category": "Best Practice", + "startLine": 34, + "startColumn": 5, + "endLine": 34, + "endColumn": 16, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { - "ruleId": "F1101", - "severity": "FATAL", - "message": "Fn::Transform: Fn::Transform value must be an object", - "source": "SCHEMA", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'IsParamBEnabled' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "DDBTableTransformKeySchema", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "logicalId": "IsParamBEnabled", + "entityType": "Condition" }, - "propertyPath": "Properties.KeySchema.Fn::Transform", - "category": "Structure", - "startLine": 25, - "startColumn": 9, - "endLine": 25, - "endColumn": 22, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" + "propertyPath": "Conditions/IsParamBEnabled", + "category": "Best Practice", + "startLine": 34, + "startColumn": 5, + "endLine": 34, + "endColumn": 16, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { - "ruleId": "F1101", - "severity": "FATAL", - "message": "Fn::Transform: Fn::Transform value must be an object", - "source": "SCHEMA", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'IsParamCEnabled' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "DDBTableTransformBoth", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "logicalId": "IsParamCEnabled", + "entityType": "Condition" }, - "propertyPath": "Properties.AttributeDefinitions.Fn::Transform", - "category": "Structure", - "startLine": 33, - "startColumn": 9, - "endLine": 33, - "endColumn": 22, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" + "propertyPath": "Conditions/IsParamCEnabled", + "category": "Best Practice", + "startLine": 34, + "startColumn": 5, + "endLine": 34, + "endColumn": 16, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { - "ruleId": "F1101", - "severity": "FATAL", - "message": "Fn::Transform: Fn::Transform value must be an object", - "source": "SCHEMA", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'IsParamDEnabled' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "DDBTableTransformBoth", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "logicalId": "IsParamDEnabled", + "entityType": "Condition" }, - "propertyPath": "Properties.KeySchema.Fn::Transform", - "category": "Structure", - "startLine": 38, - "startColumn": 9, - "endLine": 38, - "endColumn": 22, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" + "propertyPath": "Conditions/IsParamDEnabled", + "category": "Best Practice", + "startLine": 34, + "startColumn": 5, + "endLine": 34, + "endColumn": 16, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" + } + ] + }, + "good/parameters/used_transform_removed.yaml": { + "filePath": "good/parameters/used_transform_removed.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "E3639", - "severity": "ERROR", - "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyAPI' of type 'AWS::Serverless::Api' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformAttributeDefinitions", + "logicalId": "MyAPI", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Serverless::Api" }, - "propertyPath": "Properties.ProvisionedThroughput", - "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", - "category": "Resource", - "startLine": 9, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 15, "startColumn": 5, - "endLine": 9, + "endLine": 15, "endColumn": 15, - "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/parameters/used_transforms.yaml": { + "filePath": "good/parameters/used_transforms.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 1, + "informational": 4, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "E3639", + "ruleId": "E1152", "severity": "ERROR", - "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", + "message": "'ami-123456' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "DDBTableTransformKeySchema", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.ProvisionedThroughput", - "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", - "category": "Resource", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 15, - "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", - "phase": "LINT" + "logicalId": "LaunchConfiguration", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-123456" + } }, { - "ruleId": "E3639", + "ruleId": "E2531", "severity": "ERROR", - "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", + "message": "Runtime 'java8' was deprecated on '2024-01-08'. Creation was disabled on '2024-02-08', and updates will be disabled on '2027-03-03'. Please consider updating to 'java25'", "source": "CFN_LINT", "entity": { - "logicalId": "DDBTableTransformBoth", + "logicalId": "SomeLambda", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.ProvisionedThroughput", - "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", - "category": "Resource", - "startLine": 31, - "startColumn": 5, - "endLine": 31, - "endColumn": 15, - "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 18, + "startColumn": 7, + "endLine": 18, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are blocked for create", + "phase": "SCHEMA", + "context": { + "actualValue": "java8", + "lifecycle": "create-blocked" + } }, { - "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)", + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", "source": "CFN_LINT", "entity": { - "logicalId": "DDBTableTransformAttributeDefinitions", + "logicalId": "LaunchConfiguration", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "category": "Best Practice", - "startLine": 7, + "category": "Deprecation", + "startLine": 20, "startColumn": 3, - "endLine": 7, - "endColumn": 40, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "endLine": 20, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformAttributeDefinitions", + "logicalId": "LaunchConfiguration", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 40, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformKeySchema", + "logicalId": "LaunchConfiguration", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 18, - "startColumn": 3, - "endLine": 18, - "endColumn": 29, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 24, + "startColumn": 7, + "endLine": 24, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'UserData' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformKeySchema", + "logicalId": "LaunchConfiguration", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, + "propertyPath": "Properties.UserData", "category": "Best Practice", - "startLine": 18, - "startColumn": 3, - "endLine": 18, - "endColumn": 29, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Base64 with unresolvable argument)" + } }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'SomeLambda' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformBoth", + "logicalId": "SomeLambda", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Serverless::Function" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 29, - "startColumn": 3, - "endLine": 29, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/properties_ec2_vpc.yaml": { + "filePath": "good/properties_ec2_vpc.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 7, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 0, + "informational": 21, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "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)", + "ruleId": "E1151", + "severity": "ERROR", + "message": "'vpc-1234567' does not match format 'AWS::EC2::VPC.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "DDBTableTransformBoth", + "logicalId": "mySubnet21", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Subnet" }, - "category": "Best Practice", - "startLine": 29, - "startColumn": 3, - "endLine": 29, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Properties.VpcId", + "category": "Intrinsic Function", + "startLine": 61, + "startColumn": 7, + "endLine": 61, + "endColumn": 12, + "ruleDescription": "Validate VPC id format", + "phase": "SCHEMA", + "context": { + "actualValue": "vpc-1234567" + } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "E1151", + "severity": "ERROR", + "message": "'vpc-1234567' does not match format 'AWS::EC2::VPC.Id'", + "source": "CFN_LINT", "entity": { - "logicalId": "DDBTableTransformAttributeDefinitions", + "logicalId": "mySubnet22", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.KeySchema", - "category": "Best Practice", - "startLine": 15, + "propertyPath": "Properties.VpcId", + "category": "Intrinsic Function", + "startLine": 66, "startColumn": 7, - "endLine": 15, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 66, + "endColumn": 12, + "ruleDescription": "Validate VPC id format", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "actualValue": "vpc-1234567" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformKeySchema", + "logicalId": "myVpc1", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 24, + "startLine": 32, "startColumn": 7, - "endLine": 24, + "endLine": 32, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter 'cidrBlockAllowedPattern' (type String)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformBoth", + "logicalId": "myVpc1", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 37, + "startLine": 33, "startColumn": 7, - "endLine": 37, - "endColumn": 16, + "endLine": 33, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -15221,276 +14178,293 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DDBTableTransformAttributeDefinitions' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformAttributeDefinitions", + "logicalId": "myVpc2", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "parameter with AllowedValues" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DDBTableTransformKeySchema' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformKeySchema", + "logicalId": "myVpc2", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 38, + "startColumn": 7, + "endLine": 38, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'cidrBlockAllowedPattern' (type String)" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DDBTableTransformBoth' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformBoth", + "logicalId": "myVpc3", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 31, - "startColumn": 5, - "endLine": 31, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/resources/dynamodb/attributes_transform_object.yaml": { - "filePath": "good/resources/dynamodb/attributes_transform_object.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 12, - "debug": 0 + "startLine": 42, + "startColumn": 7, + "endLine": 42, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "parameter with AllowedValues" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformAttributeDefinitions", + "logicalId": "myVpc3", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::VPC" }, + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 40, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 43, + "startColumn": 7, + "endLine": 43, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformAttributeDefinitions", + "logicalId": "myVpc4", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::VPC" }, + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 40, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 47, + "startColumn": 7, + "endLine": 47, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "parameter with AllowedValues" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformKeySchema", + "logicalId": "myVpc4", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::VPC" }, + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 16, - "startColumn": 3, - "endLine": 16, - "endColumn": 29, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 48, + "startColumn": 7, + "endLine": 48, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'InstanceTenancy' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformKeySchema", + "logicalId": "myVpc5", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::VPC" }, + "propertyPath": "Properties.InstanceTenancy", "category": "Best Practice", - "startLine": 16, - "startColumn": 3, - "endLine": 16, - "endColumn": 29, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 52, + "startColumn": 7, + "endLine": 52, + "endColumn": 22, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformBoth", + "logicalId": "myVpc5", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::VPC" }, + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 28, - "startColumn": 3, - "endLine": 28, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 53, + "startColumn": 7, + "endLine": 53, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformBoth", + "logicalId": "mySubnet21", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 28, - "startColumn": 3, - "endLine": 28, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 57, + "startColumn": 7, + "endLine": 57, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Select with unresolvable arguments)" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformAttributeDefinitions", + "logicalId": "mySubnet21", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 13, + "startLine": 61, "startColumn": 7, - "endLine": 13, - "endColumn": 16, + "endLine": 61, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformKeySchema", + "logicalId": "mySubnet22", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 23, + "startLine": 65, "startColumn": 7, - "endLine": 23, + "endLine": 65, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (macro output)" + "lifecycle": "create-only", + "resolutionSource": "parameter 'cidrBlockAllowedPattern' (type String)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformBoth", + "logicalId": "mySubnet22", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 37, + "startLine": 66, "startColumn": 7, - "endLine": 37, - "endColumn": 16, + "endLine": 66, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (macro output)" + "lifecycle": "create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DDBTableTransformAttributeDefinitions' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'myVpc1' of type 'AWS::EC2::VPC' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformAttributeDefinitions", + "logicalId": "myVpc1", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, + "startLine": 31, "startColumn": 5, - "endLine": 6, + "endLine": 31, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -15498,19 +14472,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DDBTableTransformKeySchema' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'myVpc2' of type 'AWS::EC2::VPC' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformKeySchema", + "logicalId": "myVpc2", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 18, + "startLine": 36, "startColumn": 5, - "endLine": 18, + "endLine": 36, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -15518,594 +14492,858 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DDBTableTransformBoth' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'myVpc3' of type 'AWS::EC2::VPC' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DDBTableTransformBoth", + "logicalId": "myVpc3", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 30, + "startLine": 41, "startColumn": 5, - "endLine": 30, + "endLine": 41, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myVpc4' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "myVpc4", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 46, + "startColumn": 5, + "endLine": 46, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'myVpc5' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "myVpc5", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 51, + "startColumn": 5, + "endLine": 51, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'mySubnet21' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "mySubnet21", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 56, + "startColumn": 5, + "endLine": 56, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'mySubnet22' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "mySubnet22", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 64, + "startColumn": 5, + "endLine": 64, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/resources/dynamodb/conditional_scenarios.yaml": { - "filePath": "good/resources/dynamodb/conditional_scenarios.yaml", + "good/properties_rt_association.yaml": { + "filePath": "good/properties_rt_association.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 6, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 5, + "informational": 11, "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AppSubnetPublicRouteTableAssociation", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 31, + "startColumn": 9, + "endLine": 31, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'PublicRouteTable' (type String)", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AppSubnetPublicRouteTableAssociation", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 33, + "startColumn": 9, + "endLine": 33, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'AppSubnet01' (type String)", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "AppSubnetPrivateRouteTableAssociation", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 40, + "startColumn": 9, + "endLine": 40, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'PrivateRouteTable' (type String)", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CorrelatedBilling", + "logicalId": "AppSubnetPrivateRouteTableAssociation", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 9, - "startColumn": 3, - "endLine": 9, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 42, + "startColumn": 9, + "endLine": 42, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'AppSubnet01' (type String)", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CorrelatedBilling", + "logicalId": "ProxySubnetRouteTableAssociation", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 9, - "startColumn": 3, - "endLine": 9, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 48, + "startColumn": 9, + "endLine": 48, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'PublicRouteTable' (type String)", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CorrelatedIndex", + "logicalId": "ProxySubnetRouteTableAssociation", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 22, - "startColumn": 3, - "endLine": 22, - "endColumn": 18, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 50, + "startColumn": 9, + "endLine": 50, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'isPublic'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "CorrelatedIndex", + "logicalId": "PublicSubnetRouteTableAssociation", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 22, - "startColumn": 3, - "endLine": 22, - "endColumn": 18, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 56, + "startColumn": 9, + "endLine": 56, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'PublicRouteTable' (type String)", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CorrelatedIndex", + "logicalId": "PublicSubnetRouteTableAssociation", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 31, - "startColumn": 7, - "endLine": 31, - "endColumn": 16, + "startLine": 58, + "startColumn": 9, + "endLine": 58, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter 'PublicSubnet01' (type String)", + "extra": { + "replacement_strategy": "delete_then_create" + } } - } - ] - }, - "good/resources/ecs/fargate_conditional_properties.yaml": { - "filePath": "good/resources/ecs/fargate_conditional_properties.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "good/resources/elasticache/cache_cluster_failover.yaml": { - "filePath": "good/resources/elasticache/cache_cluster_failover.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 10, - "counts": { - "fatal": 0, - "errors": 3, - "warnings": 0, - "informational": 44, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E1150", - "severity": "ERROR", - "message": "'sg-test' does not match format 'AWS::EC2::SecurityGroup.Id'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FourthReplicationGroup", + "logicalId": "CustomResource", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::CloudFormation::CustomResource" }, - "propertyPath": "Properties.SecurityGroupIds.0", - "category": "Intrinsic Function", - "startLine": 121, + "propertyPath": "Properties.ServiceToken", + "category": "Best Practice", + "startLine": 64, "startColumn": 9, - "endLine": 121, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", - "ruleDescription": "Validate security group format", + "endLine": 64, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "sg-test" + "lifecycle": "create-only" } }, { - "ruleId": "E1150", - "severity": "ERROR", - "message": "'sg-test' does not match format 'AWS::EC2::SecurityGroup.Id'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FifthReplicationGroup", + "logicalId": "CustomSubnetRouteTableAssociation", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.SecurityGroupIds.0", - "category": "Intrinsic Function", - "startLine": 138, - "startColumn": 9, - "endLine": 138, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", - "ruleDescription": "Validate security group format", + "propertyPath": "Properties.RouteTableId", + "category": "Best Practice", + "startLine": 69, + "startColumn": 9, + "endLine": 69, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "sg-test" + "lifecycle": "create-only", + "resolutionSource": "parameter 'PublicRouteTable' (type String)", + "extra": { + "replacement_strategy": "delete_then_create" + } } }, { - "ruleId": "E1150", - "severity": "ERROR", - "message": "'sg-test' does not match format 'AWS::EC2::SecurityGroup.Id'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SixthReplicationGroup", + "logicalId": "CustomSubnetRouteTableAssociation", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, - "propertyPath": "Properties.SecurityGroupIds.0", - "category": "Intrinsic Function", - "startLine": 155, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 71, "startColumn": 9, - "endLine": 155, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", - "ruleDescription": "Validate security group format", + "endLine": 71, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "sg-test" + "lifecycle": "create-only", + "resolutionSource": "GetAtt CustomResource.PublicSubnet", + "extra": { + "replacement_strategy": "delete_then_create" + } } + } + ] + }, + "good/redshift_private.yaml": { + "filePath": "good/redshift_private.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 7, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 14, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BasicReplicationGroup", + "logicalId": "Subnet1", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 48, - "startColumn": 3, - "endLine": 48, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BasicReplicationGroup", + "logicalId": "Subnet1", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 48, - "startColumn": 3, - "endLine": 48, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SecondReplicationGroup", + "logicalId": "VPC", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::EC2::VPC" }, + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 67, - "startColumn": 3, - "endLine": 67, - "endColumn": 25, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SecondReplicationGroup", + "logicalId": "RouteTable1", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::EC2::RouteTable" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 67, - "startColumn": 3, - "endLine": 67, - "endColumn": 25, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 12, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ThirdReplicationGroup", + "logicalId": "SubnetRTAssoc", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 87, - "startColumn": 3, - "endLine": 87, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Subnet1'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ThirdReplicationGroup", + "logicalId": "SubnetRTAssoc", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" }, + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 87, - "startColumn": 3, - "endLine": 87, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 26, + "startColumn": 7, + "endLine": 26, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'RouteTable1'", + "extra": { + "replacement_strategy": "delete_then_create" + } + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FourthReplicationGroup", + "logicalId": "NatGW", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::EC2::NatGateway" }, + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 106, - "startColumn": 3, - "endLine": 106, - "endColumn": 25, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 30, + "startColumn": 7, + "endLine": 30, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Subnet1'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'RouteTableId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FourthReplicationGroup", + "logicalId": "Route1", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::EC2::Route" }, + "propertyPath": "Properties.RouteTableId", "category": "Best Practice", - "startLine": 106, - "startColumn": 3, - "endLine": 106, - "endColumn": 25, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 34, + "startColumn": 7, + "endLine": 34, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'RouteTable1'" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'DestinationCidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FifthReplicationGroup", + "logicalId": "Route1", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::EC2::Route" }, + "propertyPath": "Properties.DestinationCidrBlock", "category": "Best Practice", - "startLine": 122, - "startColumn": 3, - "endLine": 122, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'Subnet1' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "FifthReplicationGroup", + "logicalId": "Subnet1", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 122, - "startColumn": 3, - "endLine": 122, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'VPC' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "SixthReplicationGroup", + "logicalId": "VPC", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::EC2::VPC" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 139, - "startColumn": 3, - "endLine": 139, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'RedshiftSubnetGroup' of type 'AWS::Redshift::ClusterSubnetGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "SixthReplicationGroup", + "logicalId": "RedshiftSubnetGroup", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::Redshift::ClusterSubnetGroup" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 139, - "startColumn": 3, - "endLine": 139, - "endColumn": 24, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 14, + "startColumn": 5, + "endLine": 14, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3100", + "ruleId": "I9040", "severity": "INFO", - "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", - "source": "CFN_LINT", + "message": "Resource 'RouteTable1' of type 'AWS::EC2::RouteTable' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "BasicReplicationGroup", + "logicalId": "RouteTable1", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::EC2::RouteTable" }, - "propertyPath": "Properties.CacheNodeType", - "suggestedFix": "Upgrade to a current generation instance type", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 54, - "startColumn": 7, - "endLine": 54, - "endColumn": 20, - "ruleDescription": "Checks for legacy instance type generations", + "startLine": 20, + "startColumn": 5, + "endLine": 20, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3100", + "ruleId": "I9040", "severity": "INFO", - "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", - "source": "CFN_LINT", + "message": "Resource 'NatGW' of type 'AWS::EC2::NatGateway' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "SecondReplicationGroup", + "logicalId": "NatGW", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::EC2::NatGateway" }, - "propertyPath": "Properties.CacheNodeType", - "suggestedFix": "Upgrade to a current generation instance type", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 73, - "startColumn": 7, - "endLine": 73, - "endColumn": 20, - "ruleDescription": "Checks for legacy instance type generations", + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/redshift_valid_nodetype.yaml": { + "filePath": "good/redshift_valid_nodetype.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 7, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", + "ruleId": "W2501", + "severity": "WARN", + "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", "source": "CFN_LINT", "entity": { - "logicalId": "ThirdReplicationGroup", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::Redshift::Cluster" }, - "propertyPath": "Properties.CacheNodeType", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 92, + "propertyPath": "Properties.MasterUserPassword", + "category": "Security", + "startLine": 8, "startColumn": 7, - "endLine": 92, - "endColumn": 20, - "ruleDescription": "Checks for legacy instance type generations", + "endLine": 8, + "endColumn": 25, + "ruleDescription": "Check if Password Properties are correctly configured", "phase": "LINT" }, { - "ruleId": "I3100", + "ruleId": "I3011", "severity": "INFO", - "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", + "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": "FourthReplicationGroup", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::Redshift::Cluster" }, - "propertyPath": "Properties.CacheNodeType", - "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 111, - "startColumn": 7, - "endLine": 111, - "endColumn": 20, - "ruleDescription": "Checks for legacy instance type generations", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I3100", + "ruleId": "I3011", "severity": "INFO", - "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", + "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": "FifthReplicationGroup", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::Redshift::Cluster" }, - "propertyPath": "Properties.CacheNodeType", - "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 128, - "startColumn": 7, - "endLine": 128, - "endColumn": 20, - "ruleDescription": "Checks for legacy instance type generations", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I3100", + "ruleId": "I3013", "severity": "INFO", - "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", + "message": "'AutomatedSnapshotRetentionPeriod' 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": "SixthReplicationGroup", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::Redshift::Cluster" }, - "propertyPath": "Properties.CacheNodeType", - "suggestedFix": "Upgrade to a current generation instance type", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 145, - "startColumn": 7, - "endLine": 145, - "endColumn": 20, - "ruleDescription": "Checks for legacy instance type generations", + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CacheParameterGroupFamily' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyParameterGroup", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ParameterGroup" + "resourceType": "AWS::Redshift::Cluster" }, - "propertyPath": "Properties.CacheParameterGroupFamily", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 19, + "startLine": 7, "startColumn": 7, - "endLine": 19, - "endColumn": 32, + "endLine": 7, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16115,19 +15353,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CacheParameterGroupFamily' is create-only; updating it will cause resource replacement", + "message": "Property 'DBName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyClusterParameterGroup", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ParameterGroup" + "resourceType": "AWS::Redshift::Cluster" }, - "propertyPath": "Properties.CacheParameterGroupFamily", + "propertyPath": "Properties.DBName", "category": "Best Practice", - "startLine": 27, + "startLine": 9, "startColumn": 7, - "endLine": 27, - "endColumn": 32, + "endLine": 9, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16135,135 +15374,125 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9003", "severity": "INFO", - "message": "Property 'CacheParameterGroupFamily' is create-only; updating it will cause resource replacement", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", "source": "ENGINE", - "entity": { - "logicalId": "MyNonClusterParameterGroup", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ParameterGroup" - }, - "propertyPath": "Properties.CacheParameterGroupFamily", "category": "Best Practice", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 32, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CacheParameterGroupFamily' is create-only; updating it will cause resource replacement", + "message": "Resource 'Cluster' of type 'AWS::Redshift::Cluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyOptionalClusterParameterGroup", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ParameterGroup" + "resourceType": "AWS::Redshift::Cluster" }, - "propertyPath": "Properties.CacheParameterGroupFamily", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 44, - "startColumn": 7, - "endLine": 44, - "endColumn": 32, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/reference_values_are_not_literals.yaml": { + "filePath": "good/reference_values_are_not_literals.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 6, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 10, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'CacheSubnetGroupName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "BasicReplicationGroup", + "logicalId": "FifoQueue", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.CacheSubnetGroupName", "category": "Best Practice", - "startLine": 55, - "startColumn": 7, - "endLine": 55, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 21, + "startColumn": 3, + "endLine": 21, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "BasicReplicationGroup", + "logicalId": "FifoQueue", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 60, - "startColumn": 7, - "endLine": 60, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 21, + "startColumn": 3, + "endLine": 21, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'CacheSubnetGroupName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "SecondReplicationGroup", + "logicalId": "FifoQueue", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.CacheSubnetGroupName", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 74, - "startColumn": 7, - "endLine": 74, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 23, + "startColumn": 5, + "endLine": 23, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecondReplicationGroup", + "logicalId": "Record", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 80, + "startLine": 16, "startColumn": 7, - "endLine": 80, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "endLine": 16, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16273,20 +15502,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CacheSubnetGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirdReplicationGroup", + "logicalId": "FifoQueue", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.CacheSubnetGroupName", + "propertyPath": "Properties.FifoQueue", "category": "Best Practice", - "startLine": 93, + "startLine": 24, "startColumn": 7, - "endLine": 93, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "endLine": 24, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16296,66 +15525,67 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ThirdReplicationGroup", + "logicalId": "FifoQueue", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.QueueName", "category": "Best Practice", - "startLine": 99, + "startLine": 25, "startColumn": 7, - "endLine": 99, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "endLine": 25, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt Store.Value" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AtRestEncryptionEnabled' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FourthReplicationGroup", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.AtRestEncryptionEnabled", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 109, + "startLine": 54, "startColumn": 7, - "endLine": 109, - "endColumn": 30, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "endLine": 54, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CacheSubnetGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FourthReplicationGroup", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.CacheSubnetGroupName", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 113, + "startLine": 57, "startColumn": 7, - "endLine": 113, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "endLine": 57, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16365,20 +15595,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AtRestEncryptionEnabled' is create-only; updating it will cause resource replacement", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FifthReplicationGroup", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.AtRestEncryptionEnabled", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 126, + "startLine": 59, "startColumn": 7, - "endLine": 126, - "endColumn": 30, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "endLine": 59, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16388,66 +15618,99 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CacheSubnetGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FifthReplicationGroup", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.CacheSubnetGroupName", + "propertyPath": "Properties.BackupRetentionPeriod", "category": "Best Practice", - "startLine": 130, + "startLine": 60, "startColumn": 7, - "endLine": 130, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "endLine": 60, + "endColumn": 28, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } + } + ] + }, + "good/region_conditional_resource_type.yaml": { + "filePath": "good/region_conditional_resource_type.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AtRestEncryptionEnabled' is create-only; updating it will cause resource replacement", + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'ProjectArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", "source": "ENGINE", "entity": { - "logicalId": "SixthReplicationGroup", + "logicalId": "Pool", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::DeviceFarm::DevicePool" }, - "propertyPath": "Properties.AtRestEncryptionEnabled", + "propertyPath": "Properties.ProjectArn", "category": "Best Practice", - "startLine": 143, + "startLine": 14, "startColumn": 7, - "endLine": 143, - "endColumn": 30, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 14, + "endColumn": 17, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "Pool", + "entityType": "Resource", + "resourceType": "AWS::DeviceFarm::DevicePool" + }, + "category": "Security", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 7, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CacheSubnetGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'ProjectArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SixthReplicationGroup", + "logicalId": "Pool", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::DeviceFarm::DevicePool" }, - "propertyPath": "Properties.CacheSubnetGroupName", + "propertyPath": "Properties.ProjectArn", "category": "Best Practice", - "startLine": 147, + "startLine": 14, "startColumn": 7, - "endLine": 147, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "endLine": 14, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-device-farm", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16457,273 +15720,366 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyParameterGroup' of type 'AWS::ElastiCache::ParameterGroup' supports Tags but none are configured", + "message": "Resource 'Pool' of type 'AWS::DeviceFarm::DevicePool' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyParameterGroup", + "logicalId": "Pool", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ParameterGroup" + "resourceType": "AWS::DeviceFarm::DevicePool" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, + "startLine": 12, "startColumn": 5, - "endLine": 17, + "endLine": 12, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/resources/backup/test_backup_plan_lifecycle_rule.yml": { + "filePath": "good/resources/backup/test_backup_plan_lifecycle_rule.yml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "good/resources/cloudformation/nested_stack_dynamic.yaml": { + "filePath": "good/resources/cloudformation/nested_stack_dynamic.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyClusterParameterGroup' of type 'AWS::ElastiCache::ParameterGroup' supports Tags but none are configured", + "message": "Resource 'NestedStack' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyClusterParameterGroup", - "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ParameterGroup" + "logicalId": "NestedStack", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/resources/cloudformation/stack_nested.yaml": { + "filePath": "good/resources/cloudformation/stack_nested.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 2, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "startLine": 6, + "startColumn": 1, + "endLine": 6, + "endColumn": 10, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'One' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "One", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/One", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 6, + "ruleDescription": "Check if Parameters are Used", + "phase": "LINT" + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'Two' is not referenced anywhere in the template", + "source": "CFN_LINT", + "entity": { + "logicalId": "Two", + "entityType": "Parameter" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Parameters/Two", "category": "Best Practice", - "startLine": 25, - "startColumn": 5, - "endLine": 25, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 6, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" + } + ] + }, + "good/resources/cloudformation/stacks.yaml": { + "filePath": "good/resources/cloudformation/stacks.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 4, + "informational": 15, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyNonClusterParameterGroup' of type 'AWS::ElastiCache::ParameterGroup' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 1] is not reachable. When setting condition 'IsUsEast1' to True", + "source": "CFN_LINT", "entity": { - "logicalId": "MyNonClusterParameterGroup", + "logicalId": "Stack3", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ParameterGroup" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Parameters.Fn::If.2.Fn::If.1", "category": "Best Practice", - "startLine": 33, - "startColumn": 5, - "endLine": 33, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 48, + "startColumn": 16, + "endLine": 48, + "endColumn": 17, + "ruleDescription": "Check Fn::If has a path that cannot be reached", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyOptionalClusterParameterGroup' of type 'AWS::ElastiCache::ParameterGroup' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", "entity": { - "logicalId": "MyOptionalClusterParameterGroup", + "logicalId": "StackNormal", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ParameterGroup" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.TemplateURL", "category": "Best Practice", - "startLine": 42, - "startColumn": 5, - "endLine": 42, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 18, + "ruleDescription": "Warn when properties are configured to only work with the package command", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BasicReplicationGroup' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", "entity": { - "logicalId": "BasicReplicationGroup", + "logicalId": "StackInvalidPath", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.TemplateURL", "category": "Best Practice", - "startLine": 50, - "startColumn": 5, - "endLine": 50, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 32, + "startColumn": 7, + "endLine": 32, + "endColumn": 18, + "ruleDescription": "Warn when properties are configured to only work with the package command", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SecondReplicationGroup' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W3002", + "severity": "WARN", + "message": "This code may only work with 'package' cli command", + "source": "CFN_LINT", "entity": { - "logicalId": "SecondReplicationGroup", + "logicalId": "Stack3", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.TemplateURL", "category": "Best Practice", - "startLine": 69, - "startColumn": 5, - "endLine": 69, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 40, + "startColumn": 7, + "endLine": 40, + "endColumn": 18, + "ruleDescription": "Warn when properties are configured to only work with the package command", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'ThirdReplicationGroup' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", - "source": "ENGINE", + "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": "ThirdReplicationGroup", + "logicalId": "StackNormal", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 89, - "startColumn": 5, - "endLine": 89, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'FourthReplicationGroup' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", - "source": "ENGINE", + "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": "FourthReplicationGroup", + "logicalId": "StackNormal", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 108, - "startColumn": 5, - "endLine": 108, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'FifthReplicationGroup' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", - "source": "ENGINE", + "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": "FifthReplicationGroup", + "logicalId": "StackIsWebUrl", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 125, - "startColumn": 5, - "endLine": 125, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 16, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'SixthReplicationGroup' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", - "source": "ENGINE", + "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": "SixthReplicationGroup", + "logicalId": "StackIsWebUrl", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 142, - "startColumn": 5, - "endLine": 142, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/resources/iam/iam_policy_conditional_policies.yaml": { - "filePath": "good/resources/iam/iam_policy_conditional_policies.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "good/resources/iam/identity_policy_wildcard_partition.yaml": { - "filePath": "good/resources/iam/identity_policy_wildcard_partition.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 16, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "good/resources/iam/instance_profile.yaml": { - "filePath": "good/resources/iam/instance_profile.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 6, - "debug": 0 + { + "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": "StackUrlIsObject", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "category": "Best Practice", + "startLine": 21, + "startColumn": 3, + "endLine": 21, + "endColumn": 19, + "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": "StackUrlIsObject", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "category": "Best Practice", + "startLine": 21, + "startColumn": 3, + "endLine": 21, + "endColumn": 19, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "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": "IAMInstanceProfile", + "logicalId": "StackInvalidPath", "entityType": "Resource", "resourceType": "AWS::CloudFormation::Stack" }, "category": "Best Practice", - "startLine": 3, + "startLine": 29, "startColumn": 3, - "endLine": 3, - "endColumn": 21, + "endLine": 29, + "endColumn": 19, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -16733,15 +16089,15 @@ "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": "IAMInstanceProfile", + "logicalId": "StackInvalidPath", "entityType": "Resource", "resourceType": "AWS::CloudFormation::Stack" }, "category": "Best Practice", - "startLine": 3, + "startLine": 29, "startColumn": 3, - "endLine": 3, - "endColumn": 21, + "endLine": 29, + "endColumn": 19, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -16751,15 +16107,15 @@ "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": "Instance", + "logicalId": "Stack3", "entityType": "Resource", "resourceType": "AWS::CloudFormation::Stack" }, "category": "Best Practice", - "startLine": 7, + "startLine": 37, "startColumn": 3, - "endLine": 7, - "endColumn": 11, + "endLine": 37, + "endColumn": 9, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -16769,34 +16125,34 @@ "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": "Instance", + "logicalId": "Stack3", "entityType": "Resource", "resourceType": "AWS::CloudFormation::Stack" }, "category": "Best Practice", - "startLine": 7, + "startLine": 37, "startColumn": 3, - "endLine": 7, - "endColumn": 11, + "endLine": 37, + "endColumn": 9, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'IAMInstanceProfile' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Resource 'StackNormal' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "IAMInstanceProfile", + "logicalId": "StackNormal", "entityType": "Resource", "resourceType": "AWS::CloudFormation::Stack" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 7, "startColumn": 5, - "endLine": 5, + "endLine": 7, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -16804,75 +16160,93 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Instance' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Resource 'StackIsWebUrl' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Instance", + "logicalId": "StackIsWebUrl", "entityType": "Resource", "resourceType": "AWS::CloudFormation::Stack" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, + "startLine": 15, "startColumn": 5, - "endLine": 9, + "endLine": 15, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/resources/iam/managed_policy_description.yaml": { - "filePath": "good/resources/iam/managed_policy_description.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "message": "Resource 'StackUrlIsObject' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SomeManagedPolicy", + "logicalId": "StackUrlIsObject", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties.Description", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 23, + "startColumn": 5, + "endLine": 23, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'StackInvalidPath' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "StackInvalidPath", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 31, + "startColumn": 5, + "endLine": 31, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Stack3' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Stack3", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 39, + "startColumn": 5, + "endLine": 39, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "good/resources/iam/policy.yaml": { - "filePath": "good/resources/iam/policy.yaml", + "good/resources/cloudfront/aliases.yaml": { + "filePath": "good/resources/cloudfront/aliases.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 1, + "errors": 0, "warnings": 0, "informational": 1, "debug": 0 @@ -16883,59 +16257,37 @@ }, "diagnostics": [ { - "ruleId": "E3510", - "severity": "ERROR", - "message": "'SomeOptionalParameter' does not match '^(arn:(aws[A-Za-z\\-]*?|[A-Za-z?*\\-]*[?*][A-Za-z?*\\-]*):[^:*?]+:[^:]*(:(?:\\d{12}|\\*|aws)?:.+|)|\\*)$'", - "source": "CFN_LINT", - "entity": { - "logicalId": "SomeManagedPolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" - }, - "propertyPath": "Properties.PolicyDocument.Statement.1.Resource.0", - "category": "Resource", - "startLine": 29, - "startColumn": 19, - "endLine": 29, - "endColumn": 20, - "ruleDescription": "Validate identity based IAM policies", - "phase": "LINT" - }, - { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "message": "Resource 'CloudFrontDistribution' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SomeManagedPolicy", + "logicalId": "CloudFrontDistribution", "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Properties.Description", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "good/resources/iam/ref_with_path.yaml": { - "filePath": "good/resources/iam/ref_with_path.yaml", + "good/resources/dynamodb/attributes.yaml": { + "filePath": "good/resources/dynamodb/attributes.yaml", "status": "OK", "metadata": { - "resourcesScanned": 5, + "resourcesScanned": 2, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 11, + "informational": 8, "debug": 0 }, "suppressed": 0, @@ -16944,435 +16296,506 @@ }, "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "CodeBuildRole", + "logicalId": "DDBTable1", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 43, - "startColumn": 7, - "endLine": 43, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "CodeBuildVPC", + "logicalId": "DDBTable1", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 64, - "startColumn": 7, - "endLine": 64, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "CodeBuildSubnet", + "logicalId": "DDBTable2", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 73, - "startColumn": 7, - "endLine": 73, + "startLine": 34, + "startColumn": 3, + "endLine": 34, "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'CodeBuildVPC'" - } + "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": "DDBTable2", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CodeBuildSubnet", + "logicalId": "DDBTable1", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 75, + "startLine": 16, "startColumn": 7, - "endLine": 75, + "endLine": 16, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "CodeBuildSecurityGroup", + "logicalId": "DDBTable2", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.GroupName", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 79, + "startLine": 47, "startColumn": 7, - "endLine": 79, + "endLine": 47, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Resource 'DDBTable1' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CodeBuildSecurityGroup", + "logicalId": "DDBTable1", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 80, - "startColumn": 7, - "endLine": 80, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DDBTable2' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "DDBTable2", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 36, + "startColumn": 5, + "endLine": 36, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/resources/dynamodb/attributes_transform.yaml": { + "filePath": "good/resources/dynamodb/attributes_transform.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 4, + "errors": 3, + "warnings": 0, + "informational": 12, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F1101", + "severity": "FATAL", + "message": "Fn::Transform: Fn::Transform value must be an object", + "source": "SCHEMA", + "entity": { + "logicalId": "DDBTableTransformAttributeDefinitions", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.AttributeDefinitions.Fn::Transform", + "category": "Structure", + "startLine": 11, + "startColumn": 9, + "endLine": 11, + "endColumn": 22, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" + }, + { + "ruleId": "F1101", + "severity": "FATAL", + "message": "Fn::Transform: Fn::Transform value must be an object", + "source": "SCHEMA", + "entity": { + "logicalId": "DDBTableTransformKeySchema", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.KeySchema.Fn::Transform", + "category": "Structure", + "startLine": 25, + "startColumn": 9, + "endLine": 25, + "endColumn": 22, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" + }, + { + "ruleId": "F1101", + "severity": "FATAL", + "message": "Fn::Transform: Fn::Transform value must be an object", + "source": "SCHEMA", + "entity": { + "logicalId": "DDBTableTransformBoth", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.AttributeDefinitions.Fn::Transform", + "category": "Structure", + "startLine": 33, + "startColumn": 9, + "endLine": 33, + "endColumn": 22, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" + }, + { + "ruleId": "F1101", + "severity": "FATAL", + "message": "Fn::Transform: Fn::Transform value must be an object", + "source": "SCHEMA", + "entity": { + "logicalId": "DDBTableTransformBoth", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.KeySchema.Fn::Transform", + "category": "Structure", + "startLine": 38, + "startColumn": 9, + "endLine": 38, + "endColumn": 22, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3639", + "severity": "ERROR", + "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", + "source": "CFN_LINT", "entity": { - "logicalId": "CodeBuildSecurityGroup", + "logicalId": "DDBTableTransformAttributeDefinitions", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 81, - "startColumn": 7, - "endLine": 81, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'CodeBuildVPC'" - } + "propertyPath": "Properties.ProvisionedThroughput", + "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", + "category": "Resource", + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", + "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CodeBuildProject' of type 'AWS::CodeBuild::Project' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3639", + "severity": "ERROR", + "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", + "source": "CFN_LINT", "entity": { - "logicalId": "CodeBuildProject", + "logicalId": "DDBTableTransformKeySchema", "entityType": "Resource", - "resourceType": "AWS::CodeBuild::Project" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 6, + "propertyPath": "Properties.ProvisionedThroughput", + "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", + "category": "Resource", + "startLine": 20, "startColumn": 5, - "endLine": 6, + "endLine": 20, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CodeBuildRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3639", + "severity": "ERROR", + "message": "ProvisionedThroughput is required when BillingMode defaults to 'PROVISIONED'", + "source": "CFN_LINT", "entity": { - "logicalId": "CodeBuildRole", + "logicalId": "DDBTableTransformBoth", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 35, + "propertyPath": "Properties.ProvisionedThroughput", + "suggestedFix": "Add ProvisionedThroughput or set BillingMode to 'PAY_PER_REQUEST'", + "category": "Resource", + "startLine": 31, "startColumn": 5, - "endLine": 35, + "endLine": 31, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Validate DynamoDB table ProvisionedThroughput is set when BillingMode is PROVISIONED", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'CodeBuildSubnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", - "source": "ENGINE", + "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": "CodeBuildSubnet", + "logicalId": "DDBTableTransformAttributeDefinitions", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 72, - "startColumn": 5, - "endLine": 72, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 40, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'CodeBuildSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", + "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": "CodeBuildSecurityGroup", + "logicalId": "DDBTableTransformAttributeDefinitions", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 78, - "startColumn": 5, - "endLine": 78, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 40, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "good/resources/iam/resource_policy.yaml": { - "filePath": "good/resources/iam/resource_policy.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'Ecr' of type 'AWS::ECR::Repository' supports Tags but none are configured", - "source": "ENGINE", + "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": "Ecr", + "logicalId": "DDBTableTransformKeySchema", "entityType": "Resource", - "resourceType": "AWS::ECR::Repository" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 29, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "good/resources/lambda/required_properties.yaml": { - "filePath": "good/resources/lambda/required_properties.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 4, - "informational": 4, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "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": "Function1", + "logicalId": "DDBTableTransformKeySchema", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.9", - "lifecycle": "deprecated" - } + "category": "Best Practice", + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 29, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", + "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": "Function1", + "logicalId": "DDBTableTransformBoth", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, - "category": "Security", - "startLine": 4, + "category": "Best Practice", + "startLine": 29, "startColumn": 3, - "endLine": 4, - "endColumn": 12, - "ruleDescription": "Hardcoded account ID in ARN", + "endLine": 29, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", + "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": "Function2", + "logicalId": "DDBTableTransformBoth", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, - "category": "Security", - "startLine": 13, + "category": "Best Practice", + "startLine": 29, "startColumn": 3, - "endLine": 13, - "endColumn": 12, - "ruleDescription": "Hardcoded account ID in ARN", + "endLine": 29, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Function3", + "logicalId": "DDBTableTransformAttributeDefinitions", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, - "category": "Security", - "startLine": 23, - "startColumn": 3, - "endLine": 23, - "endColumn": 12, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "propertyPath": "Properties.KeySchema", + "category": "Best Practice", + "startLine": 15, + "startColumn": 7, + "endLine": 15, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PackageType' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Function3", + "logicalId": "DDBTableTransformKeySchema", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.PackageType", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 29, + "startLine": 24, "startColumn": 7, - "endLine": 29, - "endColumn": 18, + "endLine": 24, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Function1' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Function1", + "logicalId": "DDBTableTransformBoth", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Function2' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'DDBTableTransformAttributeDefinitions' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Function2", + "logicalId": "DDBTableTransformAttributeDefinitions", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 15, + "startLine": 9, "startColumn": 5, - "endLine": 15, + "endLine": 9, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -17380,120 +16803,55 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Function3' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'DDBTableTransformKeySchema' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Function3", + "logicalId": "DDBTableTransformKeySchema", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 25, + "startLine": 20, "startColumn": 5, - "endLine": 25, + "endLine": 20, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/resources/name.yaml": { - "filePath": "good/resources/name.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 2, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E1152", - "severity": "ERROR", - "message": "'ami-123456' does not match format 'AWS::EC2::Image.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "myInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Intrinsic Function", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate AMI id format", - "phase": "SCHEMA", - "context": { - "actualValue": "ami-123456" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "myInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 6, - "startColumn": 7, - "endLine": 6, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "message": "Resource 'DDBTableTransformBoth' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myInstance", + "logicalId": "DDBTableTransformBoth", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 31, "startColumn": 5, - "endLine": 5, + "endLine": 31, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/resources/primary_identifiers.yaml": { - "filePath": "good/resources/primary_identifiers.yaml", + "good/resources/dynamodb/attributes_transform_object.yaml": { + "filePath": "good/resources/dynamodb/attributes_transform_object.yaml", "status": "OK", "metadata": { - "resourcesScanned": 7, + "resourcesScanned": 3, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 17, + "informational": 12, "debug": 0 }, "suppressed": 0, @@ -17502,379 +16860,358 @@ }, "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "RootRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Path", - "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "RootRole", + "logicalId": "DDBTableTransformAttributeDefinitions", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 18, - "startColumn": 7, - "endLine": 18, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 40, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "RootRole3", + "logicalId": "DDBTableTransformAttributeDefinitions", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 40, - "startColumn": 7, - "endLine": 40, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 40, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "RootRole3", + "logicalId": "DDBTableTransformKeySchema", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 41, - "startColumn": 7, - "endLine": 41, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 29, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "RootRole4", + "logicalId": "DDBTableTransformKeySchema", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 63, - "startColumn": 7, - "endLine": 63, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 29, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "RootRole4", + "logicalId": "DDBTableTransformBoth", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 64, - "startColumn": 7, - "endLine": 64, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 28, + "startColumn": 3, + "endLine": 28, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "FunctionPermission1", + "logicalId": "DDBTableTransformBoth", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 91, - "startColumn": 7, - "endLine": 91, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 28, + "startColumn": 3, + "endLine": 28, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionPermission1", + "logicalId": "DDBTableTransformAttributeDefinitions", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 92, + "startLine": 13, "startColumn": 7, - "endLine": 92, - "endColumn": 13, + "endLine": 13, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionPermission1", + "logicalId": "DDBTableTransformKeySchema", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 93, + "startLine": 23, "startColumn": 7, - "endLine": 93, + "endLine": 23, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (macro output)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionPermission2", + "logicalId": "DDBTableTransformBoth", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 97, + "startLine": 37, "startColumn": 7, - "endLine": 97, - "endColumn": 19, + "endLine": 37, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (macro output)" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Resource 'DDBTableTransformAttributeDefinitions' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FunctionPermission2", + "logicalId": "DDBTableTransformAttributeDefinitions", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 98, - "startColumn": 7, - "endLine": 98, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Resource 'DDBTableTransformKeySchema' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FunctionPermission2", + "logicalId": "DDBTableTransformKeySchema", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 99, - "startColumn": 7, - "endLine": 99, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 18, + "startColumn": 5, + "endLine": 18, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'RootRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'DDBTableTransformBoth' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "RootRole", + "logicalId": "DDBTableTransformBoth", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::DynamoDB::Table" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 7, + "startLine": 30, "startColumn": 5, - "endLine": 7, + "endLine": 30, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/resources/dynamodb/conditional_scenarios.yaml": { + "filePath": "good/resources/dynamodb/conditional_scenarios.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 5, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "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": "CorrelatedBilling", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "category": "Best Practice", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'RootRole3' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "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": "RootRole3", + "logicalId": "CorrelatedBilling", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 30, - "startColumn": 5, - "endLine": 30, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'RootRole4' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "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": "RootRole4", + "logicalId": "CorrelatedIndex", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 53, - "startColumn": 5, - "endLine": 53, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 18, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'Bucket1' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", + "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": "Bucket1", + "logicalId": "CorrelatedIndex", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 76, - "startColumn": 5, - "endLine": 76, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 18, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Bucket2' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket2", + "logicalId": "CorrelatedIndex", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 81, - "startColumn": 3, - "endLine": 81, - "endColumn": 10, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 31, + "startColumn": 7, + "endLine": 31, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } } ] }, - "good/resources/properties/allowed_pattern.yaml": { - "filePath": "good/resources/properties/allowed_pattern.yaml", + "good/resources/ecs/fargate_conditional_properties.yaml": { + "filePath": "good/resources/ecs/fargate_conditional_properties.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, @@ -17882,7 +17219,25 @@ "fatal": 0, "errors": 0, "warnings": 0, - "informational": 3, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "good/resources/elasticache/cache_cluster_failover.yaml": { + "filePath": "good/resources/elasticache/cache_cluster_failover.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 10, + "counts": { + "fatal": 0, + "errors": 3, + "warnings": 0, + "informational": 44, "debug": 0 }, "suppressed": 0, @@ -17891,448 +17246,426 @@ }, "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E1150", + "severity": "ERROR", + "message": "'sg-test' does not match format 'AWS::EC2::SecurityGroup.Id'", + "source": "CFN_LINT", "entity": { - "logicalId": "TESTROLE", + "logicalId": "FourthReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.RoleName", - "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "propertyPath": "Properties.SecurityGroupIds.0", + "category": "Intrinsic Function", + "startLine": 121, + "startColumn": 9, + "endLine": 121, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "ruleDescription": "Validate security group format", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "sg-test" } }, { - "ruleId": "I9001", + "ruleId": "E1150", + "severity": "ERROR", + "message": "'sg-test' does not match format 'AWS::EC2::SecurityGroup.Id'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FifthReplicationGroup", + "entityType": "Resource", + "resourceType": "AWS::ElastiCache::ReplicationGroup" + }, + "propertyPath": "Properties.SecurityGroupIds.0", + "category": "Intrinsic Function", + "startLine": 138, + "startColumn": 9, + "endLine": 138, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "ruleDescription": "Validate security group format", + "phase": "SCHEMA", + "context": { + "actualValue": "sg-test" + } + }, + { + "ruleId": "E1150", + "severity": "ERROR", + "message": "'sg-test' does not match format 'AWS::EC2::SecurityGroup.Id'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SixthReplicationGroup", + "entityType": "Resource", + "resourceType": "AWS::ElastiCache::ReplicationGroup" + }, + "propertyPath": "Properties.SecurityGroupIds.0", + "category": "Intrinsic Function", + "startLine": 155, + "startColumn": 9, + "endLine": 155, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "ruleDescription": "Validate security group format", + "phase": "SCHEMA", + "context": { + "actualValue": "sg-test" + } + }, + { + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "TESTROLE", + "logicalId": "BasicReplicationGroup", + "entityType": "Resource", + "resourceType": "AWS::ElastiCache::ReplicationGroup" + }, + "category": "Best Practice", + "startLine": 48, + "startColumn": 3, + "endLine": 48, + "endColumn": 24, + "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": "BasicReplicationGroup", + "entityType": "Resource", + "resourceType": "AWS::ElastiCache::ReplicationGroup" + }, + "category": "Best Practice", + "startLine": 48, + "startColumn": 3, + "endLine": 48, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "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": "SecondReplicationGroup", + "entityType": "Resource", + "resourceType": "AWS::ElastiCache::ReplicationGroup" + }, + "category": "Best Practice", + "startLine": 67, + "startColumn": 3, + "endLine": 67, + "endColumn": 25, + "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": "SecondReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 67, + "startColumn": 3, + "endLine": 67, + "endColumn": 25, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'TESTROLE' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "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": "TESTROLE", + "logicalId": "ThirdReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 87, + "startColumn": 3, + "endLine": 87, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "good/resources/properties/az_cdk.yaml": { - "filePath": "good/resources/properties/az_cdk.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 1, - "errors": 1, - "warnings": 0, - "informational": 3, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3058", - "severity": "FATAL", - "message": "One of ['CidrBlock', 'Ipv4IpamPoolId', 'Ipv6IpamPoolId', 'Ipv6CidrBlock'] is a required property", - "source": "SCHEMA", + "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": "Instance", + "logicalId": "ThirdReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties", - "category": "Schema", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "One of properties required (requiredOr)", - "phase": "SCHEMA" + "category": "Best Practice", + "startLine": 87, + "startColumn": 3, + "endLine": 87, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "E1151", - "severity": "ERROR", - "message": "'vpc-1234567' does not match format 'AWS::EC2::VPC.Id'", + "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": "Instance", + "logicalId": "FourthReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.VpcId", - "category": "Intrinsic Function", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 12, - "ruleDescription": "Validate VPC id format", - "phase": "SCHEMA", - "context": { - "actualValue": "vpc-1234567" - } + "category": "Best Practice", + "startLine": 106, + "startColumn": 3, + "endLine": 106, + "endColumn": 25, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "Instance", + "logicalId": "FourthReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 106, + "startColumn": 3, + "endLine": 106, + "endColumn": 25, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "Instance", + "logicalId": "FifthReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 122, + "startColumn": 3, + "endLine": 122, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'Instance' of type 'AWS::EC2::Subnet' supports Tags but none are configured", - "source": "ENGINE", + "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": "Instance", + "logicalId": "FifthReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 122, + "startColumn": 3, + "endLine": 122, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "good/resources/properties/custom.yaml": { - "filePath": "good/resources/properties/custom.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "good/resources/properties/exclusive.yaml": { - "filePath": "good/resources/properties/exclusive.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 0, - "informational": 6, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'Dimensions' should not be included with 'Metrics'", - "source": "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": "Alarm", + "logicalId": "SixthReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Dimensions", - "category": "Schema", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Mutually exclusive properties", - "phase": "SCHEMA", - "context": { - "property": "Dimensions" - } + "category": "Best Practice", + "startLine": 139, + "startColumn": 3, + "endLine": 139, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "Ingress", + "logicalId": "SixthReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.SourceSecurityGroupId", "category": "Best Practice", - "startLine": 5, - "startColumn": 7, - "endLine": 5, - "endColumn": 28, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 139, + "startColumn": 3, + "endLine": 139, + "endColumn": 24, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3100", "severity": "INFO", - "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "Ingress", + "logicalId": "BasicReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.CidrIp", + "propertyPath": "Properties.CacheNodeType", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 6, + "startLine": 54, "startColumn": 7, - "endLine": 6, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 54, + "endColumn": 20, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3100", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "Ingress", + "logicalId": "SecondReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.CacheNodeType", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 7, + "startLine": 73, "startColumn": 7, - "endLine": 7, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 73, + "endColumn": 20, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3100", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "Ingress", + "logicalId": "ThirdReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.CacheNodeType", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 8, + "startLine": 92, "startColumn": 7, - "endLine": 8, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 92, + "endColumn": 20, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3100", "severity": "INFO", - "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "Alarm", + "logicalId": "FourthReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.AlarmName", + "propertyPath": "Properties.CacheNodeType", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 12, + "startLine": 111, "startColumn": 7, - "endLine": 12, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 111, + "endColumn": 20, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3100", "severity": "INFO", - "message": "Resource 'Alarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", - "source": "ENGINE", + "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "Alarm", + "logicalId": "FifthReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CacheNodeType", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 11, - "startColumn": 5, - "endLine": 11, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 128, + "startColumn": 7, + "endLine": 128, + "endColumn": 20, + "ruleDescription": "Checks for legacy instance type generations", "phase": "LINT" - } - ] - }, - "good/resources/properties/hard_coded_arn_properties.yaml": { - "filePath": "good/resources/properties/hard_coded_arn_properties.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I3100", "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Previous generation instance type 'cache.r3.large' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "Authorizer", + "logicalId": "SixthReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Authorizer" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.RestApiId", + "propertyPath": "Properties.CacheNodeType", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 6, + "startLine": 145, "startColumn": 7, - "endLine": 6, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 145, + "endColumn": 20, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Property 'CacheParameterGroupFamily' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "MyParameterGroup", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::ElastiCache::ParameterGroup" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.CacheParameterGroupFamily", "category": "Best Practice", - "startLine": 20, + "startLine": 19, "startColumn": 7, - "endLine": 20, - "endColumn": 13, + "endLine": 19, + "endColumn": 32, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -18340,164 +17673,157 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Stack' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "message": "Property 'CacheParameterGroupFamily' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Stack", + "logicalId": "MyClusterParameterGroup", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::Stack" + "resourceType": "AWS::ElastiCache::ParameterGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CacheParameterGroupFamily", "category": "Best Practice", - "startLine": 13, - "startColumn": 5, - "endLine": 13, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/resources/properties/hard_coded_arn_properties_cdk.yaml": { - "filePath": "good/resources/properties/hard_coded_arn_properties_cdk.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 6, - "debug": 0 + "startLine": 27, + "startColumn": 7, + "endLine": 27, + "endColumn": 32, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CacheParameterGroupFamily' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "S3BadBucket", + "logicalId": "MyNonClusterParameterGroup", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ElastiCache::ParameterGroup" }, - "propertyPath": "Properties.NotificationConfiguration.TopicConfigurations.0.Topic.Fn::Sub", + "propertyPath": "Properties.CacheParameterGroupFamily", "category": "Best Practice", - "startLine": 12, - "startColumn": 11, - "endLine": 12, - "endColumn": 18, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 32, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3045", - "severity": "WARN", - "message": "AccessControl property is deprecated. Use bucket policies instead", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CacheParameterGroupFamily' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "S3BadBucket", + "logicalId": "MyOptionalClusterParameterGroup", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ElastiCache::ParameterGroup" }, - "propertyPath": "Properties.AccessControl", - "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", - "category": "Deprecation", - "startLine": 9, + "propertyPath": "Properties.CacheParameterGroupFamily", + "category": "Best Practice", + "startLine": 44, "startColumn": 7, - "endLine": 9, - "endColumn": 20, - "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", - "phase": "LINT", + "endLine": 44, + "endColumn": 32, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { - "actualValue": "Private" + "lifecycle": "create-only" } }, { - "ruleId": "I3042", + "ruleId": "I9001", "severity": "INFO", - "message": "ARN in Resource S3BadBucket contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", - "source": "CFN_LINT", + "message": "Property 'CacheSubnetGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "S3BadBucket", + "logicalId": "BasicReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.NotificationConfiguration.TopicConfigurations.0.Topic.Fn::Sub", + "propertyPath": "Properties.CacheSubnetGroupName", "category": "Best Practice", - "startLine": 12, - "startColumn": 11, - "endLine": 12, - "endColumn": 18, - "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", - "phase": "LINT" + "startLine": 55, + "startColumn": 7, + "endLine": 55, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3042", + "ruleId": "I9001", "severity": "INFO", - "message": "ARN in Resource SampleBadBucketPolicy contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", - "source": "CFN_LINT", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "SampleBadBucketPolicy", + "logicalId": "BasicReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.PolicyDocument.Statement.0.Resource.Fn::Sub", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 24, - "startColumn": 13, - "endLine": 24, - "endColumn": 20, - "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", - "phase": "LINT" + "startLine": 60, + "startColumn": 7, + "endLine": 60, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Property 'CacheSubnetGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleBadBucketPolicy", + "logicalId": "SecondReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.CacheSubnetGroupName", "category": "Best Practice", - "startLine": 18, + "startLine": 74, "startColumn": 7, - "endLine": 18, - "endColumn": 13, + "endLine": 74, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'S3BadBucket'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleRole", + "logicalId": "SecondReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 39, + "startLine": 80, "startColumn": 7, - "endLine": 39, + "endLine": 80, "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -18505,127 +17831,114 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'S3BadBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'CacheSubnetGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "S3BadBucket", + "logicalId": "ThirdReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CacheSubnetGroupName", "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 93, + "startColumn": 7, + "endLine": 93, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SampleRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleRole", + "logicalId": "ThirdReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 29, - "startColumn": 5, - "endLine": 29, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/resources/properties/hard_coded_arn_properties_sam.yaml": { - "filePath": "good/resources/properties/hard_coded_arn_properties_sam.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 6, - "debug": 0 + "startLine": 99, + "startColumn": 7, + "endLine": 99, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W3045", - "severity": "WARN", - "message": "AccessControl property is deprecated. Use bucket policies instead", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AtRestEncryptionEnabled' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "S3BadBucket", + "logicalId": "FourthReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.AccessControl", - "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", - "category": "Deprecation", - "startLine": 11, + "propertyPath": "Properties.AtRestEncryptionEnabled", + "category": "Best Practice", + "startLine": 109, "startColumn": 7, - "endLine": 11, - "endColumn": 20, - "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", - "phase": "LINT", + "endLine": 109, + "endColumn": 30, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", "context": { - "actualValue": "Private" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Property 'CacheSubnetGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleBadBucketPolicy", + "logicalId": "FourthReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.CacheSubnetGroupName", "category": "Best Practice", - "startLine": 20, + "startLine": 113, "startColumn": 7, - "endLine": 20, - "endColumn": 13, + "endLine": 113, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'S3BadBucket'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'AtRestEncryptionEnabled' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleRole", + "logicalId": "FifthReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.AtRestEncryptionEnabled", "category": "Best Practice", - "startLine": 41, + "startLine": 126, "startColumn": 7, - "endLine": 41, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 126, + "endColumn": 30, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -18635,20 +17948,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PipelineName' is create-only; updating it will cause resource replacement", + "message": "Property 'CacheSubnetGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "IngestionPipeline", + "logicalId": "FifthReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::OSIS::Pipeline" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.PipelineName", + "propertyPath": "Properties.CacheSubnetGroupName", "category": "Best Practice", - "startLine": 89, + "startLine": 130, "startColumn": 7, - "endLine": 89, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-osis.git", + "endLine": 130, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -18656,160 +17969,87 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'S3BadBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'AtRestEncryptionEnabled' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "S3BadBucket", + "logicalId": "SixthReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AtRestEncryptionEnabled", "category": "Best Practice", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 143, + "startColumn": 7, + "endLine": 143, + "endColumn": 30, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SampleRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'CacheSubnetGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SampleRole", + "logicalId": "SixthReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CacheSubnetGroupName", "category": "Best Practice", - "startLine": 31, - "startColumn": 5, - "endLine": 31, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 147, + "startColumn": 7, + "endLine": 147, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticache", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'IngestionPipeline' of type 'AWS::OSIS::Pipeline' supports Tags but none are configured", + "message": "Resource 'MyParameterGroup' of type 'AWS::ElastiCache::ParameterGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "IngestionPipeline", + "logicalId": "MyParameterGroup", "entityType": "Resource", - "resourceType": "AWS::OSIS::Pipeline" + "resourceType": "AWS::ElastiCache::ParameterGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 88, + "startLine": 17, "startColumn": 5, - "endLine": 88, + "endLine": 17, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/resources/properties/list_duplicates.yaml": { - "filePath": "good/resources/properties/list_duplicates.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 3, - "warnings": 0, - "informational": 3, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3530", - "severity": "ERROR", - "message": "'Statement' is a required property", - "source": "CFN_LINT", - "entity": { - "logicalId": "IamRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.AssumeRolePolicyDocument", - "suggestedFix": "Add a Statement array to the AssumeRolePolicyDocument", - "category": "Resource", - "startLine": 16, - "startColumn": 7, - "endLine": 16, - "endColumn": 31, - "ruleDescription": "Validate IAM trust policies", - "phase": "LINT" - }, - { - "ruleId": "E3530", - "severity": "ERROR", - "message": "'Statement' is a required property", - "source": "CFN_LINT", - "entity": { - "logicalId": "IamRoleWithConditions", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.AssumeRolePolicyDocument", - "suggestedFix": "Add a Statement array to the AssumeRolePolicyDocument", - "category": "Resource", - "startLine": 25, - "startColumn": 7, - "endLine": 25, - "endColumn": 31, - "ruleDescription": "Validate IAM trust policies", - "phase": "LINT" - }, - { - "ruleId": "E3530", - "severity": "ERROR", - "message": "'Statement' is a required property", - "source": "CFN_LINT", - "entity": { - "logicalId": "IamRoleWithNestedConditions", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.AssumeRolePolicyDocument", - "suggestedFix": "Add a Statement array to the AssumeRolePolicyDocument", - "category": "Resource", - "startLine": 37, - "startColumn": 7, - "endLine": 37, - "endColumn": 31, - "ruleDescription": "Validate IAM trust policies", - "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'IamRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'MyClusterParameterGroup' of type 'AWS::ElastiCache::ParameterGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "IamRole", + "logicalId": "MyClusterParameterGroup", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElastiCache::ParameterGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 15, + "startLine": 25, "startColumn": 5, - "endLine": 15, + "endLine": 25, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -18817,19 +18057,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'IamRoleWithConditions' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'MyNonClusterParameterGroup' of type 'AWS::ElastiCache::ParameterGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "IamRoleWithConditions", + "logicalId": "MyNonClusterParameterGroup", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElastiCache::ParameterGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 24, + "startLine": 33, "startColumn": 5, - "endLine": 24, + "endLine": 33, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -18837,209 +18077,213 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'IamRoleWithNestedConditions' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'MyOptionalClusterParameterGroup' of type 'AWS::ElastiCache::ParameterGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "IamRoleWithNestedConditions", + "logicalId": "MyOptionalClusterParameterGroup", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::ElastiCache::ParameterGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 36, + "startLine": 42, "startColumn": 5, - "endLine": 36, + "endLine": 42, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/resources/properties/password.yaml": { - "filePath": "good/resources/properties/password.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 8, - "informational": 21, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W1011", - "severity": "WARN", - "message": "Use dynamic references (e.g., SSM SecureString) instead of parameter 'MyPassword' for secrets", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyDB", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 22, - "startColumn": 7, - "endLine": 22, - "endColumn": 25, - "ruleDescription": "Instead of REFing a parameter for a secret use a dynamic reference", - "phase": "LINT" - }, - { - "ruleId": "W1020", - "severity": "WARN", - "message": "Fn::Sub isn't needed because there are no variables", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyIAMUser", - "entityType": "Resource", - "resourceType": "AWS::IAM::User" - }, - "propertyPath": "Properties.LoginProfile.Password.Fn::Sub", - "category": "Best Practice", - "startLine": 47, - "startColumn": 9, - "endLine": 47, - "endColumn": 16, - "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", - "phase": "LINT" }, { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BasicReplicationGroup' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "MyDB", + "logicalId": "BasicReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 15, - "startColumn": 3, - "endLine": 15, - "endColumn": 7, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "startLine": 50, + "startColumn": 5, + "endLine": 50, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SecondReplicationGroup' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "myNewDb", + "logicalId": "SecondReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 24, - "startColumn": 3, - "endLine": 24, - "endColumn": 10, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "startLine": 69, + "startColumn": 5, + "endLine": 69, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3011", - "severity": "WARN", - "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ThirdReplicationGroup' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "myThirdDb", + "logicalId": "ThirdReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 33, - "startColumn": 3, - "endLine": 33, - "endColumn": 12, - "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "startLine": 89, + "startColumn": 5, + "endLine": 89, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FourthReplicationGroup' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyDB", + "logicalId": "FourthReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 17, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 108, "startColumn": 5, - "endLine": 17, + "endLine": 108, "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FifthReplicationGroup' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myNewDb", + "logicalId": "FifthReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 26, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 125, "startColumn": 5, - "endLine": 26, + "endLine": 125, "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SixthReplicationGroup' of type 'AWS::ElastiCache::ReplicationGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myThirdDb", + "logicalId": "SixthReplicationGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 35, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 142, "startColumn": 5, - "endLine": 35, + "endLine": 142, "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/resources/iam/iam_policy_conditional_policies.yaml": { + "filePath": "good/resources/iam/iam_policy_conditional_policies.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "good/resources/iam/identity_policy_wildcard_partition.yaml": { + "filePath": "good/resources/iam/identity_policy_wildcard_partition.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "good/resources/iam/instance_profile.yaml": { + "filePath": "good/resources/iam/instance_profile.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 6, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "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)", + "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": "MyDB", + "logicalId": "IAMInstanceProfile", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::CloudFormation::Stack" }, "category": "Best Practice", - "startLine": 15, + "startLine": 3, "startColumn": 3, - "endLine": 15, - "endColumn": 7, + "endLine": 3, + "endColumn": 21, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -19049,193 +18293,255 @@ "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": "myNewDb", + "logicalId": "IAMInstanceProfile", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::CloudFormation::Stack" }, "category": "Best Practice", - "startLine": 24, + "startLine": 3, "startColumn": 3, - "endLine": 24, - "endColumn": 10, + "endLine": 3, + "endColumn": 21, "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)", + "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": "myThirdDb", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::CloudFormation::Stack" }, "category": "Best Practice", - "startLine": 33, + "startLine": 7, "startColumn": 3, - "endLine": 33, - "endColumn": 12, + "endLine": 7, + "endColumn": 11, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I3011", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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)", + "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": "MyDB", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties", "category": "Best Practice", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'IAMInstanceProfile' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "myNewDb", + "logicalId": "IAMInstanceProfile", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 26, + "startLine": 5, "startColumn": 5, - "endLine": 26, + "endLine": 5, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'Instance' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "myThirdDb", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::CloudFormation::Stack" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 35, + "startLine": 9, "startColumn": 5, - "endLine": 35, + "endLine": 9, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/resources/iam/managed_policy_description.yaml": { + "filePath": "good/resources/iam/managed_policy_description.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I3100", + "ruleId": "I9001", "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", - "source": "CFN_LINT", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "MyDB", + "logicalId": "SomeManagedPolicy", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 19, + "startLine": 7, "startColumn": 7, - "endLine": 19, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" + "endLine": 7, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + } + ] + }, + "good/resources/iam/policy.yaml": { + "filePath": "good/resources/iam/policy.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "ruleId": "E3510", + "severity": "ERROR", + "message": "'SomeOptionalParameter' does not match '^(arn:(aws[A-Za-z\\-]*?|[A-Za-z?*\\-]*[?*][A-Za-z?*\\-]*):[^:*?]+:[^:]*(:(?:\\d{12}|\\*|aws)?:.+|)|\\*)$'", "source": "CFN_LINT", "entity": { - "logicalId": "myNewDb", + "logicalId": "SomeManagedPolicy", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", + "propertyPath": "Properties.PolicyDocument.Statement.1.Resource.0", + "category": "Resource", + "startLine": 29, + "startColumn": 19, + "endLine": 29, + "endColumn": 20, + "ruleDescription": "Validate identity based IAM policies", "phase": "LINT" }, { - "ruleId": "I3100", + "ruleId": "I9001", "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", - "source": "CFN_LINT", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "myThirdDb", + "logicalId": "SomeManagedPolicy", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 37, + "startLine": 14, "startColumn": 7, - "endLine": 37, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" + "endLine": 14, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + } + ] + }, + "good/resources/iam/ref_with_path.yaml": { + "filePath": "good/resources/iam/ref_with_path.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 11, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyDB", + "logicalId": "CodeBuildRole", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 20, + "startLine": 43, "startColumn": 7, - "endLine": 20, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 43, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyDB", + "logicalId": "CodeBuildVPC", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 21, + "startLine": 64, "startColumn": 7, - "endLine": 21, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 64, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -19245,43 +18551,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myNewDb", + "logicalId": "CodeBuildSubnet", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 29, + "startLine": 73, "startColumn": 7, - "endLine": 29, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 73, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'CodeBuildVPC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myNewDb", + "logicalId": "CodeBuildSubnet", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 30, + "startLine": 75, "startColumn": 7, - "endLine": 30, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 75, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -19291,43 +18596,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'GroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myThirdDb", + "logicalId": "CodeBuildSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.GroupName", "category": "Best Practice", - "startLine": 38, + "startLine": 79, "startColumn": 7, - "endLine": 38, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 79, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "myThirdDb", + "logicalId": "CodeBuildSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 39, + "startLine": 80, "startColumn": 7, - "endLine": 39, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 80, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -19337,52 +18640,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'UserName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyIAMUser", + "logicalId": "CodeBuildSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::IAM::User" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.UserName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 45, + "startLine": 81, "startColumn": 7, - "endLine": 45, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 81, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "parameter 'Environment' (type String)" + "resolutionSource": "Ref to 'CodeBuildVPC'" } }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyDB' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Resource 'CodeBuildProject' of type 'AWS::CodeBuild::Project' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyDB", + "logicalId": "CodeBuildProject", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::CodeBuild::Project" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, + "startLine": 6, "startColumn": 5, - "endLine": 17, + "endLine": 6, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19390,19 +18683,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myNewDb' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Resource 'CodeBuildRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myNewDb", + "logicalId": "CodeBuildRole", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 26, + "startLine": 35, "startColumn": 5, - "endLine": 26, + "endLine": 35, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19410,19 +18703,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myThirdDb' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Resource 'CodeBuildSubnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myThirdDb", + "logicalId": "CodeBuildSubnet", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 35, + "startLine": 72, "startColumn": 5, - "endLine": 35, + "endLine": 72, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -19430,27 +18723,27 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyIAMUser' of type 'AWS::IAM::User' supports Tags but none are configured", + "message": "Resource 'CodeBuildSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyIAMUser", + "logicalId": "CodeBuildSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::IAM::User" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 44, + "startLine": 78, "startColumn": 5, - "endLine": 44, + "endLine": 78, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/resources/properties/string_size.yaml": { - "filePath": "good/resources/properties/string_size.yaml", + "good/resources/iam/resource_policy.yaml": { + "filePath": "good/resources/iam/resource_policy.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, @@ -19469,12 +18762,12 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myRepository' of type 'AWS::CodeCommit::Repository' supports Tags but none are configured", + "message": "Resource 'Ecr' of type 'AWS::ECR::Repository' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myRepository", + "logicalId": "Ecr", "entityType": "Resource", - "resourceType": "AWS::CodeCommit::Repository" + "resourceType": "AWS::ECR::Repository" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -19488,16 +18781,16 @@ } ] }, - "good/resources/properties/templated_code.yaml": { - "filePath": "good/resources/properties/templated_code.yaml", + "good/resources/lambda/required_properties.yaml": { + "filePath": "good/resources/lambda/required_properties.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 3, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 2, + "warnings": 4, + "informational": 4, "debug": 0 }, "suppressed": 0, @@ -19505,61 +18798,177 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Function1", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.9", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "Function1", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "category": "Security", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 12, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "Function2", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "category": "Security", + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 12, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" + }, + { + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "Function3", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "category": "Security", + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 12, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", + "message": "Property 'PackageType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AppSyncSchema", + "logicalId": "Function3", "entityType": "Resource", - "resourceType": "AWS::AppSync::GraphQLSchema" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ApiId", + "propertyPath": "Properties.PackageType", "category": "Best Practice", - "startLine": 10, + "startLine": 29, "startColumn": 7, - "endLine": 10, - "endColumn": 12, + "endLine": 29, + "endColumn": 18, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'AppSync'" + "lifecycle": "create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'AppSync' of type 'AWS::AppSync::GraphQLApi' supports Tags but none are configured", + "message": "Resource 'Function1' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Function1", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Function2' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AppSync", + "logicalId": "Function2", "entityType": "Resource", - "resourceType": "AWS::AppSync::GraphQLApi" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 4, + "startLine": 15, "startColumn": 5, - "endLine": 4, + "endLine": 15, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Function3' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Function3", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 25, + "startColumn": 5, + "endLine": 25, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/resources/properties/templated_code_sam.yaml": { - "filePath": "good/resources/properties/templated_code_sam.yaml", + "good/resources/name.yaml": { + "filePath": "good/resources/name.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 0, + "errors": 1, "warnings": 0, - "informational": 3, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -19568,50 +18977,60 @@ }, "diagnostics": [ { - "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)", + "ruleId": "E1152", + "severity": "ERROR", + "message": "'ami-123456' does not match format 'AWS::EC2::Image.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "Function", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::Serverless::Application" + "resourceType": "AWS::EC2::Instance" }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "propertyPath": "Properties.ImageId", + "category": "Intrinsic Function", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate AMI id format", + "phase": "SCHEMA", + "context": { + "actualValue": "ami-123456" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Function", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::Serverless::Application" + "resourceType": "AWS::EC2::Instance" }, + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 11, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Function' of type 'AWS::Serverless::Application' supports Tags but none are configured", + "message": "Resource 'myInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Function", + "logicalId": "myInstance", "entityType": "Resource", - "resourceType": "AWS::Serverless::Application" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -19625,695 +19044,809 @@ } ] }, - "good/resources/rds/instance_sizes.yaml": { - "filePath": "good/resources/rds/instance_sizes.yaml", + "good/resources/primary_identifiers.yaml": { + "filePath": "good/resources/primary_identifiers.yaml", "status": "OK", "metadata": { - "resourcesScanned": 6, + "resourcesScanned": 7, "counts": { "fatal": 0, "errors": 0, - "warnings": 4, - "informational": 30, + "warnings": 0, + "informational": 17, "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "RootRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DBInstance3", + "logicalId": "RootRole", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 24, - "startColumn": 5, - "endLine": 24, + "propertyPath": "Properties.RoleName", + "category": "Best Practice", + "startLine": 18, + "startColumn": 7, + "endLine": 18, "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DBInstance4", + "logicalId": "RootRole3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 31, - "startColumn": 5, - "endLine": 31, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 40, + "startColumn": 7, + "endLine": 40, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DBInstance5", + "logicalId": "RootRole3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 38, - "startColumn": 5, - "endLine": 38, + "propertyPath": "Properties.RoleName", + "category": "Best Practice", + "startLine": 41, + "startColumn": 7, + "endLine": 41, "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DBInstance6", + "logicalId": "RootRole4", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 44, - "startColumn": 5, - "endLine": 44, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 63, + "startColumn": 7, + "endLine": 63, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance1", + "logicalId": "RootRole4", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, + "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 10, - "startColumn": 3, - "endLine": 10, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 64, + "startColumn": 7, + "endLine": 64, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance1", + "logicalId": "FunctionPermission1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 10, - "startColumn": 3, - "endLine": 10, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 91, + "startColumn": 7, + "endLine": 91, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance2", + "logicalId": "FunctionPermission1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 16, - "startColumn": 3, - "endLine": 16, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 92, + "startColumn": 7, + "endLine": 92, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance2", + "logicalId": "FunctionPermission1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 16, - "startColumn": 3, - "endLine": 16, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 93, + "startColumn": 7, + "endLine": 93, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance3", + "logicalId": "FunctionPermission2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 22, - "startColumn": 3, - "endLine": 22, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 97, + "startColumn": 7, + "endLine": 97, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance3", + "logicalId": "FunctionPermission2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, + "propertyPath": "Properties.Action", "category": "Best Practice", - "startLine": 22, - "startColumn": 3, - "endLine": 22, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 98, + "startColumn": 7, + "endLine": 98, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance4", + "logicalId": "FunctionPermission2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::Lambda::Permission" }, + "propertyPath": "Properties.Principal", "category": "Best Practice", - "startLine": 29, - "startColumn": 3, - "endLine": 29, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 99, + "startColumn": 7, + "endLine": 99, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'RootRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance4", + "logicalId": "RootRole", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 29, - "startColumn": 3, - "endLine": 29, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'RootRole3' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance5", + "logicalId": "RootRole3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 36, - "startColumn": 3, - "endLine": 36, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 30, + "startColumn": 5, + "endLine": 30, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'RootRole4' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance5", + "logicalId": "RootRole4", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 36, - "startColumn": 3, - "endLine": 36, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 53, + "startColumn": 5, + "endLine": 53, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'Bucket1' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance6", + "logicalId": "Bucket1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucket" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 42, - "startColumn": 3, - "endLine": 42, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 76, + "startColumn": 5, + "endLine": 76, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'Bucket2' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance6", + "logicalId": "Bucket2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::S3::Bucket" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 42, + "startLine": 81, "startColumn": 3, - "endLine": 42, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "endLine": 81, + "endColumn": 10, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/resources/properties/allowed_pattern.yaml": { + "filePath": "good/resources/properties/allowed_pattern.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance3", + "logicalId": "TESTROLE", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties", + "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 24, - "startColumn": 5, - "endLine": 24, + "startLine": 8, + "startColumn": 7, + "endLine": 8, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance4", + "logicalId": "TESTROLE", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 31, - "startColumn": 5, - "endLine": 31, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'TESTROLE' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "DBInstance5", + "logicalId": "TESTROLE", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 38, + "startLine": 7, "startColumn": 5, - "endLine": 38, + "endLine": 7, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/resources/properties/az_cdk.yaml": { + "filePath": "good/resources/properties/az_cdk.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 1, + "errors": 1, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "ruleId": "F3058", + "severity": "FATAL", + "message": "One of ['CidrBlock', 'Ipv4IpamPoolId', 'Ipv6IpamPoolId', 'Ipv6CidrBlock'] is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "DBInstance6", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 44, + "category": "Schema", + "startLine": 6, "startColumn": 5, - "endLine": 44, + "endLine": 6, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "ruleDescription": "One of properties required (requiredOr)", + "phase": "SCHEMA" }, { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'db.m3.medium' - consider upgrading", + "ruleId": "E1151", + "severity": "ERROR", + "message": "'vpc-1234567' does not match format 'AWS::EC2::VPC.Id'", "source": "CFN_LINT", "entity": { - "logicalId": "DBInstance6", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 45, + "propertyPath": "Properties.VpcId", + "category": "Intrinsic Function", + "startLine": 7, "startColumn": 7, - "endLine": 45, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" + "endLine": 7, + "endColumn": 12, + "ruleDescription": "Validate VPC id format", + "phase": "SCHEMA", + "context": { + "actualValue": "vpc-1234567" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DBInstance1", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 14, + "startLine": 7, "startColumn": 7, - "endLine": 14, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 7, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Fn::If on condition 'snapshot'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DBInstance2", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 20, + "startLine": 8, "startColumn": 7, - "endLine": 20, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 8, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'Instance' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DBInstance3", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 26, - "startColumn": 7, - "endLine": 26, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/resources/properties/custom.yaml": { + "filePath": "good/resources/properties/custom.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "good/resources/properties/exclusive.yaml": { + "filePath": "good/resources/properties/exclusive.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 6, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "F3020", + "severity": "FATAL", + "message": "'Dimensions' should not be included with 'Metrics'", + "source": "SCHEMA", "entity": { - "logicalId": "DBInstance4", + "logicalId": "Alarm", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::CloudWatch::Alarm" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 33, + "propertyPath": "Properties.Dimensions", + "category": "Schema", + "startLine": 17, "startColumn": 7, - "endLine": 33, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 17, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Mutually exclusive properties", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "property": "Dimensions" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'SourceSecurityGroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DBInstance5", + "logicalId": "Ingress", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.SourceSecurityGroupId", "category": "Best Practice", - "startLine": 40, + "startLine": 5, "startColumn": 7, - "endLine": 40, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 5, + "endColumn": 28, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DBInstance6", + "logicalId": "Ingress", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.CidrIp", "category": "Best Practice", - "startLine": 46, + "startLine": 6, "startColumn": 7, - "endLine": 46, + "endLine": 6, "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DBInstance1' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "DBInstance1", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DBInstance2' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "DBInstance2", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 18, - "startColumn": 5, - "endLine": 18, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DBInstance3' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DBInstance3", + "logicalId": "Ingress", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 24, - "startColumn": 5, - "endLine": 24, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 7, + "startColumn": 7, + "endLine": 7, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DBInstance4' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DBInstance4", + "logicalId": "Ingress", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 31, - "startColumn": 5, - "endLine": 31, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DBInstance5' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DBInstance5", + "logicalId": "Alarm", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::CloudWatch::Alarm" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AlarmName", "category": "Best Practice", - "startLine": 38, - "startColumn": 5, - "endLine": 38, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DBInstance6' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Resource 'Alarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DBInstance6", + "logicalId": "Alarm", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::CloudWatch::Alarm" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 44, + "startLine": 11, "startColumn": 5, - "endLine": 44, + "endLine": 11, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/resources/rds/not_enum_master_username_parameter.yaml": { - "filePath": "good/resources/rds/not_enum_master_username_parameter.yaml", + "good/resources/properties/hard_coded_arn_properties.yaml": { + "filePath": "good/resources/properties/hard_coded_arn_properties.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 4, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 2, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -20324,61 +19857,80 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ParameterUsername", + "logicalId": "Authorizer", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::ApiGateway::Authorizer" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 12, + "startLine": 6, "startColumn": 7, - "endLine": 12, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "endLine": 6, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ParameterUsername", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 13, + "startLine": 20, "startColumn": 7, - "endLine": 13, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "endLine": 20, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Stack' of type 'AWS::CloudFormation::Stack' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Stack", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "good/resources/s3/access-control-obsolete.yaml": { - "filePath": "good/resources/s3/access-control-obsolete.yaml", + "good/resources/properties/hard_coded_arn_properties_cdk.yaml": { + "filePath": "good/resources/properties/hard_coded_arn_properties_cdk.yaml", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 7, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 4, + "warnings": 2, + "informational": 6, "debug": 0 }, "suppressed": 0, @@ -20387,66 +19939,147 @@ }, "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", + "source": "CFN_LINT", "entity": { - "logicalId": "Bucket2", + "logicalId": "S3BadBucket", "entityType": "Resource", "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.NotificationConfiguration.TopicConfigurations.0.Topic.Fn::Sub", "category": "Best Practice", + "startLine": 12, + "startColumn": 11, + "endLine": 12, + "endColumn": 18, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" + }, + { + "ruleId": "W3045", + "severity": "WARN", + "message": "AccessControl property is deprecated. Use bucket policies instead", + "source": "CFN_LINT", + "entity": { + "logicalId": "S3BadBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.AccessControl", + "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", + "category": "Deprecation", "startLine": 9, "startColumn": 7, "endLine": 9, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", + "endColumn": 20, + "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", + "phase": "LINT", "context": { - "lifecycle": "create-only" + "actualValue": "Private" } }, + { + "ruleId": "I3042", + "severity": "INFO", + "message": "ARN in Resource S3BadBucket contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", + "source": "CFN_LINT", + "entity": { + "logicalId": "S3BadBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.NotificationConfiguration.TopicConfigurations.0.Topic.Fn::Sub", + "category": "Best Practice", + "startLine": 12, + "startColumn": 11, + "endLine": 12, + "endColumn": 18, + "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", + "phase": "LINT" + }, + { + "ruleId": "I3042", + "severity": "INFO", + "message": "ARN in Resource SampleBadBucketPolicy contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", + "source": "CFN_LINT", + "entity": { + "logicalId": "SampleBadBucketPolicy", + "entityType": "Resource", + "resourceType": "AWS::S3::BucketPolicy" + }, + "propertyPath": "Properties.PolicyDocument.Statement.0.Resource.Fn::Sub", + "category": "Best Practice", + "startLine": 24, + "startColumn": 13, + "endLine": 24, + "endColumn": 20, + "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BucketPolicy", + "logicalId": "SampleBadBucketPolicy", "entityType": "Resource", "resourceType": "AWS::S3::BucketPolicy" }, "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 13, + "startLine": 18, "startColumn": 7, - "endLine": 13, + "endLine": 18, "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Bucket2'" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'S3BadBucket'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SampleRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 39, + "startColumn": 7, + "endLine": 39, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket1' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'S3BadBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket1", + "logicalId": "S3BadBucket", "entityType": "Resource", "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 8, "startColumn": 5, - "endLine": 5, + "endLine": 8, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20454,35 +20087,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket2' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'SampleRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket2", + "logicalId": "SampleRole", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 8, + "startLine": 29, "startColumn": 5, - "endLine": 8, + "endLine": 29, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/resources/update_policy_supported.yaml": { - "filePath": "good/resources/update_policy_supported.yaml", + "good/resources/properties/hard_coded_arn_properties_sam.yaml": { + "filePath": "good/resources/properties/hard_coded_arn_properties_sam.yaml", "status": "OK", "metadata": { - "resourcesScanned": 5, + "resourcesScanned": 7, "counts": { "fatal": 0, "errors": 0, - "warnings": 2, - "informational": 9, + "warnings": 1, + "informational": 6, "debug": 0 }, "suppressed": 0, @@ -20491,157 +20124,68 @@ }, "diagnostics": [ { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 30, - "startColumn": 7, - "endLine": 30, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.9", - "lifecycle": "deprecated" - } - }, - { - "ruleId": "W3697", + "ruleId": "W3045", "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "message": "AccessControl property is deprecated. Use bucket policies instead", "source": "CFN_LINT", "entity": { - "logicalId": "LaunchConfig", + "logicalId": "S3BadBucket", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" + "resourceType": "AWS::S3::Bucket" }, + "propertyPath": "Properties.AccessControl", + "suggestedFix": "Remove AccessControl and use an AWS::S3::BucketPolicy resource", "category": "Deprecation", - "startLine": 12, - "startColumn": 3, - "endLine": 12, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyASG", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties.LaunchConfigurationName", - "category": "Best Practice", "startLine": 11, "startColumn": 7, "endLine": 11, - "endColumn": 30, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Ref to 'LaunchConfig'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 15, - "startColumn": 7, - "endLine": 15, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LaunchConfig", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 16, - "startColumn": 7, - "endLine": 16, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", + "endColumn": 20, + "ruleDescription": "Controlling access to an S3 bucket should be done with bucket policies", + "phase": "LINT", "context": { - "lifecycle": "create-only" + "actualValue": "Private" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyAlias", + "logicalId": "SampleBadBucketPolicy", "entityType": "Resource", - "resourceType": "AWS::Lambda::Alias" + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 23, + "startLine": 20, "startColumn": 7, - "endLine": 23, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda", + "endLine": 20, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyFunction'" + "resolutionSource": "Ref to 'S3BadBucket'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyAlias", + "logicalId": "SampleRole", "entityType": "Resource", - "resourceType": "AWS::Lambda::Alias" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 25, + "startLine": 41, "startColumn": 7, - "endLine": 25, + "endLine": 41, "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -20651,19 +20195,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'PipelineName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyFunction", + "logicalId": "IngestionPipeline", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::OSIS::Pipeline" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.PipelineName", "category": "Best Practice", - "startLine": 29, + "startLine": 89, "startColumn": 7, - "endLine": 29, + "endLine": 89, "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-osis.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -20673,39 +20218,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyASG' of type 'AWS::AutoScaling::AutoScalingGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MyASG", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 8, - "startColumn": 5, - "endLine": 8, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'S3BadBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyFunction", + "logicalId": "S3BadBucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 28, + "startLine": 10, "startColumn": 5, - "endLine": 28, + "endLine": 10, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -20713,100 +20238,39 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FunctionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'SampleRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FunctionRole", + "logicalId": "SampleRole", "entityType": "Resource", "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 39, + "startLine": 31, "startColumn": 5, - "endLine": 39, + "endLine": 31, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/resources_codepipeline.yaml": { - "filePath": "good/resources_codepipeline.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 2, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", - "source": "ENGINE", - "entity": { - "logicalId": "TestPipeline", - "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" - }, - "propertyPath": "Properties.RoleArn", - "category": "Best Practice", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 14, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TestPipeline", - "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" - }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'TestPipeline' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured", + "message": "Resource 'IngestionPipeline' of type 'AWS::OSIS::Pipeline' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "TestPipeline", + "logicalId": "IngestionPipeline", "entityType": "Resource", - "resourceType": "AWS::CodePipeline::Pipeline" + "resourceType": "AWS::OSIS::Pipeline" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 7, + "startLine": 88, "startColumn": 5, - "endLine": 7, + "endLine": 88, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" diff --git a/src/resources/expected/validation_reports7.json b/src/resources/expected/validation_reports7.json index 34f0dc83..4dd73ae7 100644 --- a/src/resources/expected/validation_reports7.json +++ b/src/resources/expected/validation_reports7.json @@ -1,14 +1,14 @@ { - "good/resources_cognito_userpool_tag_is_string_map.yaml": { - "filePath": "good/resources_cognito_userpool_tag_is_string_map.yaml", + "good/resources/properties/list_duplicates.yaml": { + "filePath": "good/resources/properties/list_duplicates.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 3, "counts": { "fatal": 0, - "errors": 0, + "errors": 3, "warnings": 0, - "informational": 2, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -17,183 +17,137 @@ }, "diagnostics": [ { - "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)", + "ruleId": "E3530", + "severity": "ERROR", + "message": "'Statement' is a required property", "source": "CFN_LINT", "entity": { - "logicalId": "MyCognitoUserPool", + "logicalId": "IamRole", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPool" + "resourceType": "AWS::IAM::Role" }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.AssumeRolePolicyDocument", + "suggestedFix": "Add a Statement array to the AssumeRolePolicyDocument", + "category": "Resource", + "startLine": 16, + "startColumn": 7, + "endLine": 16, + "endColumn": 31, + "ruleDescription": "Validate IAM trust policies", "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)", + "ruleId": "E3530", + "severity": "ERROR", + "message": "'Statement' is a required property", "source": "CFN_LINT", "entity": { - "logicalId": "MyCognitoUserPool", + "logicalId": "IamRoleWithConditions", "entityType": "Resource", - "resourceType": "AWS::Cognito::UserPool" + "resourceType": "AWS::IAM::Role" }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.AssumeRolePolicyDocument", + "suggestedFix": "Add a Statement array to the AssumeRolePolicyDocument", + "category": "Resource", + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 31, + "ruleDescription": "Validate IAM trust policies", "phase": "LINT" - } - ] - }, - "good/resources_deletionpolicy.yaml": { - "filePath": "good/resources_deletionpolicy.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 5, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", + "ruleId": "E3530", + "severity": "ERROR", + "message": "'Statement' is a required property", + "source": "CFN_LINT", "entity": { - "logicalId": "PolicyList", + "logicalId": "IamRoleWithNestedConditions", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 28, - "startColumn": 5, - "endLine": 28, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", + "propertyPath": "Properties.AssumeRolePolicyDocument", + "suggestedFix": "Add a Statement array to the AssumeRolePolicyDocument", + "category": "Resource", + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 31, + "ruleDescription": "Validate IAM trust policies", "phase": "LINT" }, { - "ruleId": "I3013", + "ruleId": "I9040", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Resource 'IamRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "PolicyList", + "logicalId": "IamRole", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 28, + "startLine": 15, "startColumn": 5, - "endLine": 28, + "endLine": 15, "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" - }, - { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", - "source": "CFN_LINT", - "entity": { - "logicalId": "PolicyList", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 30, - "startColumn": 7, - "endLine": 30, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'IamRoleWithConditions' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "PolicyList", + "logicalId": "IamRoleWithConditions", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 31, - "startColumn": 7, - "endLine": 31, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "startLine": 24, + "startColumn": 5, + "endLine": 24, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'PolicyList' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Resource 'IamRoleWithNestedConditions' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "PolicyList", + "logicalId": "IamRoleWithNestedConditions", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 28, + "startLine": 36, "startColumn": 5, - "endLine": 28, + "endLine": 36, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/resources_updatereplacepolicy.yaml": { - "filePath": "good/resources_updatereplacepolicy.yaml", + "good/resources/properties/password.yaml": { + "filePath": "good/resources/properties/password.yaml", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 4, "counts": { "fatal": 0, "errors": 0, - "warnings": 1, - "informational": 5, + "warnings": 8, + "informational": 21, "debug": 0 }, "suppressed": 0, @@ -202,431 +156,414 @@ }, "diagnostics": [ { - "ruleId": "W9008", + "ruleId": "W1011", "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", + "message": "Use dynamic references (e.g., SSM SecureString) instead of parameter 'MyPassword' for secrets", + "source": "CFN_LINT", "entity": { - "logicalId": "PolicyList", + "logicalId": "MyDB", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", + "propertyPath": "Properties.MasterUserPassword", "category": "Security", - "startLine": 28, - "startColumn": 5, - "endLine": 28, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", + "startLine": 22, + "startColumn": 7, + "endLine": 22, + "endColumn": 25, + "ruleDescription": "Instead of REFing a parameter for a secret use a dynamic reference", "phase": "LINT" }, { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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)", + "ruleId": "W1020", + "severity": "WARN", + "message": "Fn::Sub isn't needed because there are no variables", "source": "CFN_LINT", "entity": { - "logicalId": "PolicyList", + "logicalId": "MyIAMUser", + "entityType": "Resource", + "resourceType": "AWS::IAM::User" + }, + "propertyPath": "Properties.LoginProfile.Password.Fn::Sub", + "category": "Best Practice", + "startLine": 47, + "startColumn": 9, + "endLine": 47, + "endColumn": 16, + "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", + "phase": "LINT" + }, + { + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyDB", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties", "category": "Best Practice", - "startLine": 28, - "startColumn": 5, - "endLine": 28, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 7, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", "phase": "LINT" }, { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", "source": "CFN_LINT", "entity": { - "logicalId": "PolicyList", + "logicalId": "myNewDb", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 30, - "startColumn": 7, - "endLine": 30, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 10, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "W3011", + "severity": "WARN", + "message": "Both 'UpdateReplacePolicy' and 'DeletionPolicy' are needed to protect resource from deletion", + "source": "CFN_LINT", "entity": { - "logicalId": "PolicyList", + "logicalId": "myThirdDb", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 31, - "startColumn": 7, - "endLine": 31, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 12, + "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", + "phase": "LINT" }, { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "entity": { + "logicalId": "MyDB", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 17, + "startColumn": 5, + "endLine": 17, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'PolicyList' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "PolicyList", + "logicalId": "myNewDb", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 28, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 26, "startColumn": 5, - "endLine": 28, + "endLine": 26, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" - } - ] - }, - "good/route53_conditional_record_arrays.yaml": { - "filePath": "good/route53_conditional_record_arrays.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 6, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 6, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W1028", + "ruleId": "W9008", "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'ChooseFirst' to False from current status True", - "source": "CFN_LINT", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", "entity": { - "logicalId": "StandaloneUnreachableInvalid", + "logicalId": "myThirdDb", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ResourceRecords.Fn::If.2", - "category": "Best Practice", - "startLine": 32, - "startColumn": 11, - "endLine": 32, - "endColumn": 12, - "ruleDescription": "Check Fn::If has a path that cannot be reached", + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 35, + "startColumn": 5, + "endLine": 35, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'ChooseFirst' to False from current status True", + "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": "GroupUnreachableInvalid", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.RecordSets.Fn::If.2", "category": "Best Practice", - "startLine": 58, - "startColumn": 11, - "endLine": 58, - "endColumn": 12, - "ruleDescription": "Check Fn::If has a path that cannot be reached", + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 7, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "StandaloneBothBranchesValid", + "logicalId": "myNewDb", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 13, - "startColumn": 7, - "endLine": 13, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 10, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "StandaloneUnreachableInvalid", + "logicalId": "myThirdDb", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 25, - "startColumn": 7, - "endLine": 25, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "GroupBothBranchesValid", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 36, - "startColumn": 7, - "endLine": 36, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 17, + "startColumn": 5, + "endLine": 17, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "GroupUnreachableInvalid", + "logicalId": "myNewDb", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 51, - "startColumn": 7, - "endLine": 51, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 26, + "startColumn": 5, + "endLine": 26, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "StandaloneMutuallyExclusiveCnameItems", + "logicalId": "myThirdDb", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 65, - "startColumn": 7, - "endLine": 65, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 35, + "startColumn": 5, + "endLine": 35, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3100", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "GroupMutuallyExclusiveCnameItems", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 75, + "startLine": 19, "startColumn": 7, - "endLine": 75, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - } - ] - }, - "good/route53_conditional_record_items.yaml": { - "filePath": "good/route53_conditional_record_items.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 + "endLine": 19, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" + }, + { + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "source": "CFN_LINT", + "entity": { + "logicalId": "myNewDb", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", + "category": "Best Practice", + "startLine": 28, + "startColumn": 7, + "endLine": 28, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" + }, + { + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "source": "CFN_LINT", + "entity": { + "logicalId": "myThirdDb", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", + "category": "Best Practice", + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Standalone", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 12, + "startLine": 20, "startColumn": 7, - "endLine": 12, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "endLine": 20, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Group", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSetGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", "startLine": 21, "startColumn": 7, "endLine": 21, "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } - } - ] - }, - "good/route53_conditional_scenarios.yaml": { - "filePath": "good/route53_conditional_scenarios.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 6, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalProperties", + "logicalId": "myNewDb", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 14, + "startLine": 29, "startColumn": 7, - "endLine": 14, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "endLine": 29, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MutuallyExclusiveConditions", + "logicalId": "myNewDb", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", "startLine": 30, "startColumn": 7, "endLine": 30, "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -636,233 +573,166 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LiteralNoValueAlias", + "logicalId": "myThirdDb", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.HostedZoneName", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 61, + "startLine": 38, "startColumn": 7, - "endLine": 61, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "endLine": 38, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9002", + "ruleId": "I9001", "severity": "INFO", - "message": "'TTL' is ignored in this configuration (from extension)", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalProperties", + "logicalId": "myThirdDb", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.TTL", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 22, + "startLine": 39, "startColumn": 7, - "endLine": 22, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Property is ignored in this configuration (from extension)", + "endLine": 39, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "resolutionSource": "Fn::If on condition 'IsAlias'" + "lifecycle": "create-only" } }, { - "ruleId": "I9002", + "ruleId": "I9001", "severity": "INFO", - "message": "'TTL' is ignored in this configuration (from extension)", + "message": "Property 'UserName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MutuallyExclusiveConditions", + "logicalId": "MyIAMUser", "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" + "resourceType": "AWS::IAM::User" }, - "propertyPath": "Properties.TTL", + "propertyPath": "Properties.UserName", "category": "Best Practice", - "startLine": 38, + "startLine": 45, "startColumn": 7, - "endLine": 38, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Property is ignored in this configuration (from extension)", + "endLine": 45, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "resolutionSource": "Fn::If on condition 'IsStandard'" + "lifecycle": "create-only", + "resolutionSource": "parameter 'Environment' (type String)" } }, { - "ruleId": "I9002", + "ruleId": "I9003", "severity": "INFO", - "message": "'TTL' is ignored in this configuration (from extension)", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", "source": "ENGINE", - "entity": { - "logicalId": "LiteralNoValueAlias", - "entityType": "Resource", - "resourceType": "AWS::Route53::RecordSet" - }, - "propertyPath": "Properties.TTL", "category": "Best Practice", - "startLine": 65, - "startColumn": 7, - "endLine": 65, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", - "ruleDescription": "Property is ignored in this configuration (from extension)", - "phase": "SCHEMA" - } - ] - }, - "good/sam/api_stagename_valid.yaml": { - "filePath": "good/sam/api_stagename_valid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyApi' of type 'AWS::Serverless::Api' supports Tags but none are configured", + "message": "Resource 'MyDB' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyApi", + "logicalId": "MyDB", "entityType": "Resource", - "resourceType": "AWS::Serverless::Api" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 17, "startColumn": 5, - "endLine": 5, + "endLine": 17, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/sam/connector_valid.yaml": { - "filePath": "good/sam/connector_valid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'myNewDb' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyTopic", + "logicalId": "myNewDb", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 10, + "startLine": 26, + "startColumn": 5, + "endLine": 26, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'myThirdDb' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyFn", + "logicalId": "myThirdDb", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 7, + "startLine": 35, "startColumn": 5, - "endLine": 7, + "endLine": 35, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/sam/function_deploymentpreference_with_alias.yaml": { - "filePath": "good/sam/function_deploymentpreference_with_alias.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'MyIAMUser' of type 'AWS::IAM::User' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Fn", + "logicalId": "MyIAMUser", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::IAM::User" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 44, "startColumn": 5, - "endLine": 5, + "endLine": 44, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/sam/function_dlq_valid.yaml": { - "filePath": "good/sam/function_dlq_valid.yaml", + "good/resources/properties/string_size.yaml": { + "filePath": "good/resources/properties/string_size.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, @@ -881,35 +751,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'myRepository' of type 'AWS::CodeCommit::Repository' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Fn", + "logicalId": "myRepository", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::CodeCommit::Repository" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 6, "startColumn": 5, - "endLine": 5, + "endLine": 6, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/sam/function_image_valid.yaml": { - "filePath": "good/sam/function_image_valid.yaml", + "good/resources/properties/templated_code.yaml": { + "filePath": "good/resources/properties/templated_code.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 2, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 1, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -918,68 +788,52 @@ }, "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Property 'ApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Fn", + "logicalId": "AppSyncSchema", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::AppSync::GraphQLSchema" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ApiId", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/sam/function_provisioned_concurrency_with_alias.yaml": { - "filePath": "good/sam/function_provisioned_concurrency_with_alias.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'AppSync'" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'AppSync' of type 'AWS::AppSync::GraphQLApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Fn", + "logicalId": "AppSync", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::AppSync::GraphQLApi" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 4, "startColumn": 5, - "endLine": 5, + "endLine": 4, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/sam/function_runtime_handler_via_globals.yaml": { - "filePath": "good/sam/function_runtime_handler_via_globals.yaml", + "good/resources/properties/templated_code_sam.yaml": { + "filePath": "good/resources/properties/templated_code_sam.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, @@ -987,7 +841,7 @@ "fatal": 0, "errors": 0, "warnings": 0, - "informational": 1, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -996,92 +850,50 @@ }, "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", + "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": "Fn", + "logicalId": "Function", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Serverless::Application" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "good/sam/function_url_config_valid.yaml": { - "filePath": "good/sam/function_url_config_valid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", + "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": "Fn", + "logicalId": "Function", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Serverless::Application" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "good/sam/function_zip_valid.yaml": { - "filePath": "good/sam/function_zip_valid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'Function' of type 'AWS::Serverless::Application' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Fn", + "logicalId": "Function", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Serverless::Application" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -1095,16 +907,16 @@ } ] }, - "good/sam/globals_all_valid_sections.yaml": { - "filePath": "good/sam/globals_all_valid_sections.yaml", + "good/resources/rds/instance_sizes.yaml": { + "filePath": "good/resources/rds/instance_sizes.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 6, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 1, + "warnings": 4, + "informational": 30, "debug": 0 }, "suppressed": 0, @@ -1113,392 +925,244 @@ }, "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "Fn", + "logicalId": "DBInstance3", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 19, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 24, "startColumn": 5, - "endLine": 19, + "endLine": 24, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" - } - ] - }, - "good/sam/globals_empty.yaml": { - "filePath": "good/sam/globals_empty.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "Fn", + "logicalId": "DBInstance4", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 6, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 31, "startColumn": 5, - "endLine": 6, + "endLine": 31, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" - } - ] - }, - "good/sam/implicit_alias_ref.yaml": { - "filePath": "good/sam/implicit_alias_ref.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "MyFn", + "logicalId": "DBInstance5", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 38, "startColumn": 5, - "endLine": 5, + "endLine": 38, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'AliasParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "AliasParam", + "logicalId": "DBInstance6", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 12, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 44, "startColumn": 5, - "endLine": 12, + "endLine": 44, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" - } - ] - }, - "good/sam/implicit_httpapi_ref.yaml": { - "filePath": "good/sam/implicit_httpapi_ref.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", + "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": "MyFn", + "logicalId": "DBInstance1", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'ApiIdParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", - "source": "ENGINE", + "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": "ApiIdParam", + "logicalId": "DBInstance1", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'ApiSubParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", - "source": "ENGINE", + "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": "ApiSubParam", + "logicalId": "DBInstance2", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 22, - "startColumn": 5, - "endLine": 22, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "good/sam/implicit_restapi_stage_ref.yaml": { - "filePath": "good/sam/implicit_restapi_stage_ref.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", + "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": "MyFn", + "logicalId": "DBInstance2", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'StageParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", - "source": "ENGINE", + "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": "StageParam", + "logicalId": "DBInstance3", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "good/sam/implicit_role_getatt_dependson.yaml": { - "filePath": "good/sam/implicit_role_getatt_dependson.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", + "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": "MyFn", + "logicalId": "DBInstance3", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'RoleArnParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", - "source": "ENGINE", + "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": "RoleArnParam", + "logicalId": "DBInstance4", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 29, + "startColumn": 3, + "endLine": 29, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'RoleRefParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", - "source": "ENGINE", + "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": "RoleRefParam", + "logicalId": "DBInstance4", "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 29, + "startColumn": 3, + "endLine": 29, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "good/sam/layerversion_valid_retention_and_arch.yaml": { - "filePath": "good/sam/layerversion_valid_retention_and_arch.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "good/sam/simpletable_no_primarykey.yaml": { - "filePath": "good/sam/simpletable_no_primarykey.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "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": "MyTable", + "logicalId": "DBInstance5", "entityType": "Resource", - "resourceType": "AWS::Serverless::SimpleTable" + "resourceType": "AWS::RDS::DBInstance" }, "category": "Best Practice", - "startLine": 3, + "startLine": 36, "startColumn": 3, - "endLine": 3, - "endColumn": 10, + "endLine": 36, + "endColumn": 14, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -1508,400 +1172,314 @@ "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": "MyTable", + "logicalId": "DBInstance5", "entityType": "Resource", - "resourceType": "AWS::Serverless::SimpleTable" + "resourceType": "AWS::RDS::DBInstance" }, "category": "Best Practice", - "startLine": 3, + "startLine": 36, "startColumn": 3, - "endLine": 3, - "endColumn": 10, + "endLine": 36, + "endColumn": 14, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'MyTable' of type 'AWS::Serverless::SimpleTable' supports Tags but none are configured", - "source": "ENGINE", + "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": "MyTable", + "logicalId": "DBInstance6", "entityType": "Resource", - "resourceType": "AWS::Serverless::SimpleTable" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 42, + "startColumn": 3, + "endLine": 42, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "good/sam/simpletable_valid.yaml": { - "filePath": "good/sam/simpletable_valid.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "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)", + "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": "MyTable", + "logicalId": "DBInstance6", "entityType": "Resource", - "resourceType": "AWS::Serverless::SimpleTable" + "resourceType": "AWS::RDS::DBInstance" }, "category": "Best Practice", - "startLine": 3, + "startLine": 42, "startColumn": 3, - "endLine": 3, - "endColumn": 10, + "endLine": 42, + "endColumn": 14, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I3013", "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)", + "message": "'BackupRetentionPeriod' 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": "MyTable", + "logicalId": "DBInstance3", "entityType": "Resource", - "resourceType": "AWS::Serverless::SimpleTable" + "resourceType": "AWS::RDS::DBInstance" }, + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 10, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 24, + "startColumn": 5, + "endLine": 24, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'MyTable' of type 'AWS::Serverless::SimpleTable' supports Tags but none are configured", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "MyTable", + "logicalId": "DBInstance4", "entityType": "Resource", - "resourceType": "AWS::Serverless::SimpleTable" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 5, + "startLine": 31, "startColumn": 5, - "endLine": 5, + "endLine": 31, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" - } - ] - }, - "good/sam/statemachine_definition_only.yaml": { - "filePath": "good/sam/statemachine_definition_only.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "MySM", + "logicalId": "DBInstance5", "entityType": "Resource", - "resourceType": "AWS::Serverless::StateMachine" + "resourceType": "AWS::RDS::DBInstance" }, - "category": "Security", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 7, - "ruleDescription": "Hardcoded account ID in ARN", + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 38, + "startColumn": 5, + "endLine": 38, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'MySM' of type 'AWS::Serverless::StateMachine' supports Tags but none are configured", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "MySM", + "logicalId": "DBInstance6", "entityType": "Resource", - "resourceType": "AWS::Serverless::StateMachine" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 5, + "startLine": 44, "startColumn": 5, - "endLine": 5, + "endLine": 44, "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" - } - ] - }, - "good/schema_required_xor_resource_condition.yaml": { - "filePath": "good/schema_required_xor_resource_condition.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 5, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 1] is not reachable. When setting condition 'DuplicateTarget' to True", + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 'db.m3.medium' - consider upgrading", "source": "CFN_LINT", "entity": { - "logicalId": "Policy", + "logicalId": "DBInstance6", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ResourceId.Fn::If.1", + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 19, - "startColumn": 46, - "endLine": 19, - "endColumn": 47, - "ruleDescription": "Check Fn::If has a path that cannot be reached", + "startLine": 45, + "startColumn": 7, + "endLine": 45, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Policy", + "logicalId": "DBInstance1", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.PolicyName", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 16, + "startLine": 14, "startColumn": 7, - "endLine": 16, - "endColumn": 17, + "endLine": 14, + "endColumn": 13, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only", + "resolutionSource": "Fn::If on condition 'snapshot'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ScalingTargetId' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Policy", + "logicalId": "DBInstance2", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ScalingTargetId", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 18, + "startLine": 20, "startColumn": 7, - "endLine": 18, - "endColumn": 22, + "endLine": 20, + "endColumn": 13, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'TargetId' (type String)" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Policy", + "logicalId": "DBInstance3", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ResourceId", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 19, + "startLine": 26, "startColumn": 7, - "endLine": 19, - "endColumn": 17, + "endLine": 26, + "endColumn": 13, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'DuplicateTarget'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ScalableDimension' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Policy", + "logicalId": "DBInstance4", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ScalableDimension", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 20, + "startLine": 33, "startColumn": 7, - "endLine": 20, - "endColumn": 24, + "endLine": 33, + "endColumn": 13, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ServiceNamespace' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Policy", + "logicalId": "DBInstance5", "entityType": "Resource", - "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ServiceNamespace", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 21, + "startLine": 40, "startColumn": 7, - "endLine": 21, - "endColumn": 23, + "endLine": 40, + "endColumn": 13, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } - } - ] - }, - "good/schema_resource.yaml": { - "filePath": "good/schema_resource.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "good/schema_valid_resources.yaml": { - "filePath": "good/schema_valid_resources.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "DBInstance6", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 6, + "startLine": 46, "startColumn": 7, - "endLine": 6, - "endColumn": 17, + "endLine": 46, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'DBInstance1' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "DBInstance1", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 5, + "startLine": 12, "startColumn": 5, - "endLine": 5, + "endLine": 12, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -1909,219 +1487,203 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Role' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'DBInstance2' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Role", + "logicalId": "DBInstance2", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, + "startLine": 18, "startColumn": 5, - "endLine": 9, + "endLine": 18, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/sg_icmpv6_type_code.yaml": { - "filePath": "good/sg_icmpv6_type_code.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 18, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'DBInstance3' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Vpc", + "logicalId": "DBInstance3", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 24, + "startColumn": 5, + "endLine": 24, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Resource 'DBInstance4' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "DBInstance4", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 15, - "startColumn": 7, - "endLine": 15, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" - } + "startLine": 31, + "startColumn": 5, + "endLine": 31, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Resource 'DBInstance5' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpv6", + "logicalId": "DBInstance5", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 53, - "startColumn": 7, - "endLine": 53, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'SecurityGroup'" - } + "startLine": 38, + "startColumn": 5, + "endLine": 38, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Resource 'DBInstance6' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpv6", + "logicalId": "DBInstance6", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 54, - "startColumn": 7, - "endLine": 54, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 44, + "startColumn": 5, + "endLine": 44, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/resources/rds/not_enum_master_username_parameter.yaml": { + "filePath": "good/resources/rds/not_enum_master_username_parameter.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpv6", + "logicalId": "ParameterUsername", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 55, + "startLine": 12, "startColumn": 7, - "endLine": 55, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 12, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpv6", + "logicalId": "ParameterUsername", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 56, + "startLine": 13, "startColumn": 7, - "endLine": 56, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 13, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } + } + ] + }, + "good/resources/s3/access-control-obsolete.yaml": { + "filePath": "good/resources/s3/access-control-obsolete.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 4, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrIpv6' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneIngressIcmpv6", + "logicalId": "Bucket2", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.CidrIpv6", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 57, + "startLine": 9, "startColumn": 7, - "endLine": 57, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 9, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2131,90 +1693,167 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneEgressIcmpv6", + "logicalId": "BucketPolicy", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 61, + "startLine": 13, "startColumn": 7, - "endLine": 61, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 13, + "endColumn": 13, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SecurityGroup'" + "resolutionSource": "Ref to 'Bucket2'" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Resource 'Bucket1' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StandaloneEgressIcmpv6", + "logicalId": "Bucket1", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 62, - "startColumn": 7, - "endLine": 62, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Resource 'Bucket2' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "StandaloneEgressIcmpv6", + "logicalId": "Bucket2", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 63, - "startColumn": 7, - "endLine": 63, + "startLine": 8, + "startColumn": 5, + "endLine": 8, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/resources/update_policy_supported.yaml": { + "filePath": "good/resources/update_policy_supported.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 9, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "StandaloneEgressIcmpv6", + "logicalId": "MyFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ToPort", - "category": "Best Practice", - "startLine": 64, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 30, "startColumn": 7, - "endLine": 64, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 30, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.9", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W3697", + "severity": "WARN", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", + "source": "CFN_LINT", + "entity": { + "logicalId": "LaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "category": "Deprecation", + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LaunchConfigurationName' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "MyASG", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Properties.LaunchConfigurationName", + "category": "Best Practice", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 30, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "Ref to 'LaunchConfig'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "LaunchConfig", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 15, + "startColumn": 7, + "endLine": 15, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2224,20 +1863,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrIpv6' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneEgressIcmpv6", + "logicalId": "LaunchConfig", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.CidrIpv6", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 65, + "startLine": 16, "startColumn": 7, - "endLine": 65, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 16, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2247,44 +1886,44 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneEgressIcmpv6WithoutTypeCode", + "logicalId": "MyAlias", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::Lambda::Alias" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 69, + "startLine": 23, "startColumn": 7, - "endLine": 69, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 23, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'SecurityGroup'" + "resolutionSource": "Ref to 'MyFunction'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneEgressIcmpv6WithoutTypeCode", + "logicalId": "MyAlias", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::Lambda::Alias" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 70, + "startLine": 25, "startColumn": 7, - "endLine": 70, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 25, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-lambda", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2294,20 +1933,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrIpv6' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StandaloneEgressIcmpv6WithoutTypeCode", + "logicalId": "MyFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.CidrIpv6", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 71, + "startLine": 29, "startColumn": 7, - "endLine": 71, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 29, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -2317,19 +1955,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "message": "Resource 'MyASG' of type 'AWS::AutoScaling::AutoScalingGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Vpc", + "logicalId": "MyASG", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, + "startLine": 8, "startColumn": 5, - "endLine": 9, + "endLine": 8, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -2337,34 +1975,54 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'MyFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "MyFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 13, + "startLine": 28, "startColumn": 5, - "endLine": 13, + "endLine": 28, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 39, + "startColumn": 5, + "endLine": 39, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/simple_sub_prefix.yaml": { - "filePath": "good/simple_sub_prefix.yaml", + "good/resources_codepipeline.yaml": { + "filePath": "good/resources_codepipeline.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 1, "informational": 2, "debug": 0 }, @@ -2373,61 +2031,80 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", + "entity": { + "logicalId": "TestPipeline", + "entityType": "Resource", + "resourceType": "AWS::CodePipeline::Pipeline" + }, + "propertyPath": "Properties.RoleArn", + "category": "Best Practice", + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 14, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "TestPipeline", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::CodePipeline::Pipeline" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 9, + "startLine": 8, "startColumn": 7, - "endLine": 9, - "endColumn": 17, + "endLine": 8, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-codepipeline", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:prefix-${Env})" + "lifecycle": "create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'TestPipeline' of type 'AWS::CodePipeline::Pipeline' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "TestPipeline", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::CodePipeline::Pipeline" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 8, + "startLine": 7, "startColumn": 5, - "endLine": 8, + "endLine": 7, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/some_logs_stream_lambda.yaml": { - "filePath": "good/some_logs_stream_lambda.yaml", + "good/resources_cognito_userpool_tag_is_string_map.yaml": { + "filePath": "good/resources_cognito_userpool_tag_is_string_map.yaml", "status": "OK", "metadata": { - "resourcesScanned": 8, + "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 4, + "errors": 0, "warnings": 0, - "informational": 20, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -2436,509 +2113,505 @@ }, "diagnostics": [ { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", + "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": "FunctionA", + "logicalId": "MyCognitoUserPool", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Cognito::UserPool" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 21, - "startColumn": 7, - "endLine": 21, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.6", - "lifecycle": "end-of-life" - } + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", + "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": "FunctionB", + "logicalId": "MyCognitoUserPool", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Cognito::UserPool" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.6", - "lifecycle": "end-of-life" - } + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + } + ] + }, + "good/resources_deletionpolicy.yaml": { + "filePath": "good/resources_deletionpolicy.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 5, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", "entity": { - "logicalId": "FunctionC", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 44, - "startColumn": 7, - "endLine": 44, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.6", - "lifecycle": "end-of-life" - } + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 28, + "startColumn": 5, + "endLine": 28, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "LogSubscriptionFunction", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 56, - "startColumn": 7, - "endLine": 56, - "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.6", - "lifecycle": "end-of-life" - } + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 28, + "startColumn": 5, + "endLine": 28, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I3100", "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)", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", "source": "CFN_LINT", "entity": { - "logicalId": "FunctionALogGroup", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::RDS::DBInstance" }, + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 22, - "startColumn": 3, - "endLine": 22, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 30, + "startColumn": 7, + "endLine": 30, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionALogGroup", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::RDS::DBInstance" }, + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 22, - "startColumn": 3, - "endLine": 22, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 31, + "startColumn": 7, + "endLine": 31, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9003", "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": "FunctionBLogGroup", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", "category": "Best Practice", - "startLine": 34, - "startColumn": 3, - "endLine": 34, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'PolicyList' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "FunctionBLogGroup", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::RDS::DBInstance" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 34, - "startColumn": 3, - "endLine": 34, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 28, + "startColumn": 5, + "endLine": 28, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/resources_updatereplacepolicy.yaml": { + "filePath": "good/resources_updatereplacepolicy.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 5, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "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", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", "entity": { - "logicalId": "FunctionCLogGroup", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "category": "Best Practice", - "startLine": 45, - "startColumn": 3, - "endLine": 45, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 28, + "startColumn": 5, + "endLine": 28, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I3013", "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)", + "message": "'BackupRetentionPeriod' 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": "FunctionCLogGroup", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::RDS::DBInstance" }, + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 45, - "startColumn": 3, - "endLine": 45, - "endColumn": 20, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 28, + "startColumn": 5, + "endLine": 28, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I3100", "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)", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", "source": "CFN_LINT", "entity": { - "logicalId": "LogSubscriptionFunctionLogGroup", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::RDS::DBInstance" }, + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", "category": "Best Practice", - "startLine": 73, - "startColumn": 3, - "endLine": 73, - "endColumn": 34, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 30, + "startColumn": 7, + "endLine": 30, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LogSubscriptionFunctionLogGroup", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::RDS::DBInstance" }, + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 73, - "startColumn": 3, - "endLine": 73, - "endColumn": 34, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 31, + "startColumn": 7, + "endLine": 31, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Resource 'PolicyList' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FunctionALogGroup", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 25, - "startColumn": 7, - "endLine": 25, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:/aws/lambda/${FunctionA})" - } + "startLine": 28, + "startColumn": 5, + "endLine": 28, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/route53_conditional_record_arrays.yaml": { + "filePath": "good/route53_conditional_record_arrays.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 6, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 6, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'ChooseFirst' to False from current status True", + "source": "CFN_LINT", + "entity": { + "logicalId": "StandaloneUnreachableInvalid", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.ResourceRecords.Fn::If.2", + "category": "Best Practice", + "startLine": 32, + "startColumn": 11, + "endLine": 32, + "endColumn": 12, + "ruleDescription": "Check Fn::If has a path that cannot be reached", + "phase": "LINT" + }, + { + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'ChooseFirst' to False from current status True", + "source": "CFN_LINT", + "entity": { + "logicalId": "GroupUnreachableInvalid", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "propertyPath": "Properties.RecordSets.Fn::If.2", + "category": "Best Practice", + "startLine": 58, + "startColumn": 11, + "endLine": 58, + "endColumn": 12, + "ruleDescription": "Check Fn::If has a path that cannot be reached", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionBLogGroup", + "logicalId": "StandaloneBothBranchesValid", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 37, + "startLine": 13, "startColumn": 7, - "endLine": 37, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "endLine": 13, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:/aws/lambda/${FunctionB})" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionCLogGroup", + "logicalId": "StandaloneUnreachableInvalid", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 48, + "startLine": 25, "startColumn": 7, - "endLine": 48, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "endLine": 25, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:/aws/lambda/${FunctionC})" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LogSubscriptionFunctionLogGroup", + "logicalId": "GroupBothBranchesValid", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 76, + "startLine": 36, "startColumn": 7, - "endLine": 76, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "endLine": 36, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:/aws/lambda/${LogSubscriptionFunction})" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FunctionA' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionA", + "logicalId": "GroupUnreachableInvalid", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 18, - "startColumn": 5, - "endLine": 18, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 51, + "startColumn": 7, + "endLine": 51, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FunctionALogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionALogGroup", + "logicalId": "StandaloneMutuallyExclusiveCnameItems", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 24, - "startColumn": 5, - "endLine": 24, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 65, + "startColumn": 7, + "endLine": 65, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FunctionB' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionB", + "logicalId": "GroupMutuallyExclusiveCnameItems", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 30, - "startColumn": 5, - "endLine": 30, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FunctionBLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FunctionBLogGroup", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 36, - "startColumn": 5, - "endLine": 36, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FunctionC' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FunctionC", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 41, - "startColumn": 5, - "endLine": 41, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FunctionCLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FunctionCLogGroup", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 47, - "startColumn": 5, - "endLine": 47, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LogSubscriptionFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "LogSubscriptionFunction", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 53, - "startColumn": 5, - "endLine": 53, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LogSubscriptionFunctionLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "LogSubscriptionFunctionLogGroup", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", "startLine": 75, - "startColumn": 5, + "startColumn": 7, "endLine": 75, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } } ] }, - "good/sqs_fifo_valid.yaml": { - "filePath": "good/sqs_fifo_valid.yaml", + "good/route53_conditional_record_items.yaml": { + "filePath": "good/route53_conditional_record_items.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 2, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 6, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -2946,78 +2619,23 @@ "severityLevel": "DEBUG" }, "diagnostics": [ - { - "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": "FifoQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 12, - "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": "FifoQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 12, - "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": "FifoQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" - }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FifoQueue", + "logicalId": "Standalone", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.QueueName", + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 6, + "startLine": 12, "startColumn": 7, - "endLine": 6, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "endLine": 12, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3027,58 +2645,37 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FifoQueue", + "logicalId": "Group", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::Route53::RecordSetGroup" }, - "propertyPath": "Properties.FifoQueue", + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 7, + "startLine": 21, "startColumn": 7, - "endLine": 7, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "endLine": 21, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FifoQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FifoQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" } ] }, - "good/ssm_document_valid.yaml": { - "filePath": "good/ssm_document_valid.yaml", + "good/route53_conditional_scenarios.yaml": { + "filePath": "good/route53_conditional_scenarios.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 4, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 3, + "informational": 6, "debug": 0 }, "suppressed": 0, @@ -3089,20 +2686,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DocumentType' is create-only; updating it will cause resource replacement", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Doc", + "logicalId": "ConditionalProperties", "entityType": "Resource", - "resourceType": "AWS::SSM::Document" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.DocumentType", + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 6, + "startLine": 14, "startColumn": 7, - "endLine": 6, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", + "endLine": 14, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -3112,50 +2709,119 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Content' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Doc", + "logicalId": "MutuallyExclusiveConditions", "entityType": "Resource", - "resourceType": "AWS::SSM::Document" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.Content", + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 7, + "startLine": 30, "startColumn": 7, - "endLine": 7, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", + "endLine": 30, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Doc' of type 'AWS::SSM::Document' supports Tags but none are configured", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Doc", + "logicalId": "LiteralNoValueAlias", "entityType": "Resource", - "resourceType": "AWS::SSM::Document" + "resourceType": "AWS::Route53::RecordSet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.HostedZoneName", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 61, + "startColumn": 7, + "endLine": 61, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9002", + "severity": "INFO", + "message": "'TTL' is ignored in this configuration (from extension)", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalProperties", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.TTL", + "category": "Best Practice", + "startLine": 22, + "startColumn": 7, + "endLine": 22, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Property is ignored in this configuration (from extension)", + "phase": "SCHEMA", + "context": { + "resolutionSource": "Fn::If on condition 'IsAlias'" + } + }, + { + "ruleId": "I9002", + "severity": "INFO", + "message": "'TTL' is ignored in this configuration (from extension)", + "source": "ENGINE", + "entity": { + "logicalId": "MutuallyExclusiveConditions", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.TTL", + "category": "Best Practice", + "startLine": 38, + "startColumn": 7, + "endLine": 38, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Property is ignored in this configuration (from extension)", + "phase": "SCHEMA", + "context": { + "resolutionSource": "Fn::If on condition 'IsStandard'" + } + }, + { + "ruleId": "I9002", + "severity": "INFO", + "message": "'TTL' is ignored in this configuration (from extension)", + "source": "ENGINE", + "entity": { + "logicalId": "LiteralNoValueAlias", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.TTL", + "category": "Best Practice", + "startLine": 65, + "startColumn": 7, + "endLine": 65, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Property is ignored in this configuration (from extension)", + "phase": "SCHEMA" } ] }, - "good/ssm_parameter_name_type.yaml": { - "filePath": "good/ssm_parameter_name_type.yaml", + "good/sam/api_stagename_valid.yaml": { + "filePath": "good/sam/api_stagename_valid.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, @@ -3163,7 +2829,7 @@ "fatal": 0, "errors": 0, "warnings": 0, - "informational": 2, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -3171,56 +2837,33 @@ "severityLevel": "DEBUG" }, "diagnostics": [ - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'SsmParamName' (type AWS::SSM::Parameter::Name)" - } - }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'MyApi' of type 'AWS::Serverless::Api' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "MyApi", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Serverless::Api" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, + "startLine": 5, "startColumn": 5, - "endLine": 10, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/stackset_conditional_template_source.yaml": { - "filePath": "good/stackset_conditional_template_source.yaml", + "good/sam/connector_valid.yaml": { + "filePath": "good/sam/connector_valid.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 3, "counts": { "fatal": 0, "errors": 0, @@ -3234,62 +2877,56 @@ }, "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'StackSetName' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConditionalTemplateSource", + "logicalId": "MyTopic", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::StackSet" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.StackSetName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudformation.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'PermissionModel' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConditionalTemplateSource", + "logicalId": "MyFn", "entityType": "Resource", - "resourceType": "AWS::CloudFormation::StackSet" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.PermissionModel", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudformation.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "good/stepfunctions_valid.yaml": { - "filePath": "good/stepfunctions_valid.yaml", + "good/sam/function_deploymentpreference_with_alias.yaml": { + "filePath": "good/sam/function_deploymentpreference_with_alias.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 0, "informational": 1, "debug": 0 }, @@ -3298,34 +2935,15 @@ "severityLevel": "DEBUG" }, "diagnostics": [ - { - "ruleId": "W9002", - "severity": "WARN", - "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", - "source": "ENGINE", - "entity": { - "logicalId": "SM", - "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" - }, - "propertyPath": "Properties.RoleArn", - "category": "Best Practice", - "startLine": 20, - "startColumn": 7, - "endLine": 20, - "endColumn": 14, - "ruleDescription": "Hardcoded ARN property", - "phase": "LINT" - }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SM' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SM", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::StepFunctions::StateMachine" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", @@ -3339,16 +2957,16 @@ } ] }, - "good/string_length_unknowable_values.json": { - "filePath": "good/string_length_unknowable_values.json", + "good/sam/function_dlq_valid.yaml": { + "filePath": "good/sam/function_dlq_valid.yaml", "status": "OK", "metadata": { - "resourcesScanned": 5, + "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 9, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -3357,201 +2975,224 @@ }, "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "JoinedFromAReference", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 16, - "startColumn": 9, - "endLine": 16, - "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:{ref:NameProviderWithADeliberatelyLongLogicalIdentifierForThisTest}-data)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "JoinedFromAParameter", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 24, - "startColumn": 9, - "endLine": 24, - "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Join:{dynamic}-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SubstitutedFromAParameter", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 38, - "startColumn": 9, - "endLine": 38, - "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:${NamePrefix}-data)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "OnlySomeChoicesTooLong", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 44, - "startColumn": 9, - "endLine": 44, - "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/sam/function_image_valid.yaml": { + "filePath": "good/sam/function_image_valid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'NameProviderWithADeliberatelyLongLogicalIdentifierForThisTest' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "NameProviderWithADeliberatelyLongLogicalIdentifierForThisTest", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, + "startLine": 5, "startColumn": 5, - "endLine": 10, - "endColumn": 67, + "endLine": 5, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/sam/function_provisioned_concurrency_with_alias.yaml": { + "filePath": "good/sam/function_provisioned_concurrency_with_alias.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'JoinedFromAReference' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "JoinedFromAReference", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 15, - "startColumn": 7, - "endLine": 15, - "endColumn": 18, + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/sam/function_runtime_handler_via_globals.yaml": { + "filePath": "good/sam/function_runtime_handler_via_globals.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'JoinedFromAParameter' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "JoinedFromAParameter", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 18, + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/sam/function_url_config_valid.yaml": { + "filePath": "good/sam/function_url_config_valid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SubstitutedFromAParameter' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubstitutedFromAParameter", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 37, - "startColumn": 7, - "endLine": 37, - "endColumn": 18, + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/sam/function_zip_valid.yaml": { + "filePath": "good/sam/function_zip_valid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'OnlySomeChoicesTooLong' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "OnlySomeChoicesTooLong", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 43, - "startColumn": 7, - "endLine": 43, - "endColumn": 18, + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/sub_not_needed.yaml": { - "filePath": "good/sub_not_needed.yaml", + "good/sam/globals_all_valid_sections.yaml": { + "filePath": "good/sam/globals_all_valid_sections.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, @@ -3559,7 +3200,7 @@ "fatal": 0, "errors": 0, "warnings": 0, - "informational": 2, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -3568,60 +3209,76 @@ }, "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:${MyParam}-bucket)" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 19, + "startColumn": 5, + "endLine": 19, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/sam/globals_empty.yaml": { + "filePath": "good/sam/globals_empty.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'Fn' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "Fn", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 8, + "startLine": 6, "startColumn": 5, - "endLine": 8, + "endLine": 6, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/subnet_cidrs_across_vpcs_and_secondary_blocks.yaml": { - "filePath": "good/subnet_cidrs_across_vpcs_and_secondary_blocks.yaml", + "good/sam/implicit_alias_ref.yaml": { + "filePath": "good/sam/implicit_alias_ref.yaml", "status": "OK", "metadata": { - "resourcesScanned": 12, + "resourcesScanned": 2, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 22, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -3630,516 +3287,367 @@ }, "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcA", + "logicalId": "MyFn", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'AliasParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcB", + "logicalId": "AliasParam", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::SSM::Parameter" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 24, - "startColumn": 7, - "endLine": 24, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/sam/implicit_httpapi_ref.yaml": { + "filePath": "good/sam/implicit_httpapi_ref.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcASecondaryBlock", + "logicalId": "MyFn", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCCidrBlock" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 31, - "startColumn": 7, - "endLine": 31, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcA'" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'ApiIdParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VpcASecondaryBlock", + "logicalId": "ApiIdParam", "entityType": "Resource", - "resourceType": "AWS::EC2::VPCCidrBlock" + "resourceType": "AWS::SSM::Parameter" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 32, - "startColumn": 7, - "endLine": 32, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 17, + "startColumn": 5, + "endLine": 17, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'ApiSubParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetA1", + "logicalId": "ApiSubParam", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SSM::Parameter" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 36, - "startColumn": 7, - "endLine": 36, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcA'" - } + "startLine": 22, + "startColumn": 5, + "endLine": 22, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/sam/implicit_restapi_stage_ref.yaml": { + "filePath": "good/sam/implicit_restapi_stage_ref.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetA1", + "logicalId": "MyFn", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 37, - "startColumn": 7, - "endLine": 37, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'StageParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetB1", + "logicalId": "StageParam", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SSM::Parameter" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 44, - "startColumn": 7, - "endLine": 44, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcB'" - } + "startLine": 17, + "startColumn": 5, + "endLine": 17, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/sam/implicit_role_getatt_dependson.yaml": { + "filePath": "good/sam/implicit_role_getatt_dependson.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyFn' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetB1", + "logicalId": "MyFn", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 45, - "startColumn": 7, - "endLine": 45, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'RoleArnParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetA2ViaAttribute", + "logicalId": "RoleArnParam", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SSM::Parameter" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 52, - "startColumn": 7, - "endLine": 52, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcA.VpcId" - } + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'RoleRefParam' of type 'AWS::SSM::Parameter' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetA2ViaAttribute", + "logicalId": "RoleRefParam", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::SSM::Parameter" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 53, - "startColumn": 7, - "endLine": 53, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 17, + "startColumn": 5, + "endLine": 17, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/sam/layerversion_valid_retention_and_arch.yaml": { + "filePath": "good/sam/layerversion_valid_retention_and_arch.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SubnetInSecondaryBlock", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 60, - "startColumn": 7, - "endLine": 60, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcA'" - } + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "good/sam/simpletable_no_primarykey.yaml": { + "filePath": "good/sam/simpletable_no_primarykey.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "SubnetInSecondaryBlock", + "logicalId": "MyTable", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::SimpleTable" }, - "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 61, - "startColumn": 7, - "endLine": 61, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "SubnetProdOrDev", + "logicalId": "MyTable", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::SimpleTable" }, - "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 68, - "startColumn": 7, - "endLine": 68, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcA'" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'MyTable' of type 'AWS::Serverless::SimpleTable' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SubnetProdOrDev", + "logicalId": "MyTable", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::SimpleTable" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 69, - "startColumn": 7, - "endLine": 69, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SubnetDevOrProd", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 76, - "startColumn": 7, - "endLine": 76, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcA'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SubnetDevOrProd", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 77, - "startColumn": 7, - "endLine": 77, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProd'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SubnetFromAttribute", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 84, - "startColumn": 7, - "endLine": 84, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcA'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SubnetFromAttribute", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 85, - "startColumn": 7, - "endLine": 85, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt VpcA.CidrBlock" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SubnetFromImport", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 92, - "startColumn": 7, - "endLine": 92, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcA'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SubnetFromImport", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 93, - "startColumn": 7, - "endLine": 93, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: SharedSubnetCidr)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SubnetFromCidrFunction", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 100, - "startColumn": 7, - "endLine": 100, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VpcA'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SubnetFromCidrFunction", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 101, - "startColumn": 7, - "endLine": 101, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Select with unresolvable arguments)" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "good/transform.yaml": { - "filePath": "good/transform.yaml", + "good/sam/simpletable_valid.yaml": { + "filePath": "good/sam/simpletable_valid.yaml", "status": "OK", "metadata": { - "resourcesScanned": 3, + "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 4, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -4153,14 +3661,14 @@ "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": "AppName", + "logicalId": "MyTable", "entityType": "Resource", - "resourceType": "AWS::Serverless::Application" + "resourceType": "AWS::Serverless::SimpleTable" }, "category": "Best Practice", - "startLine": 18, + "startLine": 3, "startColumn": 3, - "endLine": 18, + "endLine": 3, "endColumn": 10, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" @@ -4171,14 +3679,14 @@ "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": "AppName", + "logicalId": "MyTable", "entityType": "Resource", - "resourceType": "AWS::Serverless::Application" + "resourceType": "AWS::Serverless::SimpleTable" }, "category": "Best Practice", - "startLine": 18, + "startLine": 3, "startColumn": 3, - "endLine": 18, + "endLine": 3, "endColumn": 10, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" @@ -4186,55 +3694,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyServerlessFunctionLogicalID' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MyServerlessFunctionLogicalID", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'AppName' of type 'AWS::Serverless::Application' supports Tags but none are configured", + "message": "Resource 'MyTable' of type 'AWS::Serverless::SimpleTable' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "AppName", + "logicalId": "MyTable", "entityType": "Resource", - "resourceType": "AWS::Serverless::Application" + "resourceType": "AWS::Serverless::SimpleTable" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 20, + "startLine": 5, "startColumn": 5, - "endLine": 20, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/transform/applications_location.yaml": { - "filePath": "good/transform/applications_location.yaml", + "good/sam/statemachine_definition_only.yaml": { + "filePath": "good/sam/statemachine_definition_only.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, - "warnings": 0, - "informational": 6, + "warnings": 1, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -4243,180 +3731,202 @@ }, "diagnostics": [ { - "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": "App1", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", + "source": "ENGINE", + "entity": { + "logicalId": "MySM", "entityType": "Resource", - "resourceType": "AWS::Serverless::Application" + "resourceType": "AWS::Serverless::StateMachine" }, - "category": "Best Practice", + "category": "Security", "startLine": 3, "startColumn": 3, "endLine": 3, "endColumn": 7, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9040", "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", + "message": "Resource 'MySM' of type 'AWS::Serverless::StateMachine' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "App1", + "logicalId": "MySM", "entityType": "Resource", - "resourceType": "AWS::Serverless::Application" + "resourceType": "AWS::Serverless::StateMachine" }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 7, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/schema_required_xor_resource_condition.yaml": { + "filePath": "good/schema_required_xor_resource_condition.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 5, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "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)", + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 1] is not reachable. When setting condition 'DuplicateTarget' to True", "source": "CFN_LINT", "entity": { - "logicalId": "App2", + "logicalId": "Policy", "entityType": "Resource", - "resourceType": "AWS::Serverless::Application" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, + "propertyPath": "Properties.ResourceId.Fn::If.1", "category": "Best Practice", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 7, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 19, + "startColumn": 46, + "endLine": 19, + "endColumn": 47, + "ruleDescription": "Check Fn::If has a path that cannot be reached", "phase": "LINT" }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'PolicyName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "App2", + "logicalId": "Policy", "entityType": "Resource", - "resourceType": "AWS::Serverless::Application" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, + "propertyPath": "Properties.PolicyName", "category": "Best Practice", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 7, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 16, + "startColumn": 7, + "endLine": 16, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'App1' of type 'AWS::Serverless::Application' supports Tags but none are configured", + "message": "Property 'ScalingTargetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "App1", + "logicalId": "Policy", "entityType": "Resource", - "resourceType": "AWS::Serverless::Application" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ScalingTargetId", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 18, + "startColumn": 7, + "endLine": 18, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'TargetId' (type String)" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'App2' of type 'AWS::Serverless::Application' supports Tags but none are configured", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "App2", + "logicalId": "Policy", "entityType": "Resource", - "resourceType": "AWS::Serverless::Application" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/transform/auto_publish_alias.yaml": { - "filePath": "good/transform/auto_publish_alias.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 + "startLine": 19, + "startColumn": 7, + "endLine": 19, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'DuplicateTarget'" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SkillFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Property 'ScalableDimension' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SkillFunction", + "logicalId": "Policy", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ScalableDimension", "category": "Best Practice", - "startLine": 22, - "startColumn": 5, - "endLine": 22, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 20, + "startColumn": 7, + "endLine": 20, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SkillFunction2' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Property 'ServiceNamespace' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SkillFunction2", + "logicalId": "Policy", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ServiceNamespace", "category": "Best Practice", - "startLine": 31, - "startColumn": 5, - "endLine": 31, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } } ] }, - "good/transform/auto_publish_code_sha256.yaml": { - "filePath": "good/transform/auto_publish_code_sha256.yaml", + "good/schema_resource.yaml": { + "filePath": "good/schema_resource.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, @@ -4424,7 +3934,25 @@ "fatal": 0, "errors": 0, "warnings": 0, - "informational": 1, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "good/schema_valid_resources.yaml": { + "filePath": "good/schema_valid_resources.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -4433,133 +3961,79 @@ }, "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LambdaFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunction", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/transform/function_use_s3_uri.yaml": { - "filePath": "good/transform/function_use_s3_uri.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Function' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Function", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 18, + "startLine": 5, "startColumn": 5, - "endLine": 18, + "endLine": 5, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/transform/function_using_image.yaml": { - "filePath": "good/transform/function_using_image.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'HelloWorldFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'Role' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "HelloWorldFunction", + "logicalId": "Role", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, + "startLine": 9, "startColumn": 5, - "endLine": 6, + "endLine": 9, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/transform/include_object_form.yaml": { - "filePath": "good/transform/include_object_form.yaml", + "good/sg_icmpv6_type_code.yaml": { + "filePath": "good/sg_icmpv6_type_code.yaml", "status": "OK", "metadata": { - "resourcesScanned": 1, + "resourcesScanned": 5, "counts": { "fatal": 0, "errors": 0, "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "good/transform/language_extension.yaml": { - "filePath": "good/transform/language_extension.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 7, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 14, + "informational": 18, "debug": 0 }, "suppressed": 0, @@ -4567,109 +4041,26 @@ "severityLevel": "DEBUG" }, "diagnostics": [ - { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", - "entity": { - "logicalId": "TestLambdaFunction", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 78, - "startColumn": 7, - "endLine": 78, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", - "phase": "SCHEMA", - "context": { - "actualValue": "python3.9", - "lifecycle": "deprecated" - } - }, - { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", - "entity": { - "logicalId": "PolicyList", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 51, - "startColumn": 5, - "endLine": 51, - "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" - }, - { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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": "PolicyList", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 51, - "startColumn": 5, - "endLine": 51, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" - }, - { - "ruleId": "I3100", - "severity": "INFO", - "message": "Previous generation instance type 'db.m1.small' - consider upgrading", - "source": "CFN_LINT", - "entity": { - "logicalId": "PolicyList", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.DBInstanceClass", - "suggestedFix": "Upgrade to a current generation instance type", - "category": "Best Practice", - "startLine": 53, - "startColumn": 7, - "endLine": 53, - "endColumn": 22, - "ruleDescription": "Checks for legacy instance type generations", - "phase": "LINT" - }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PolicyList", + "logicalId": "Vpc", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 54, + "startLine": 10, "startColumn": 7, - "endLine": 54, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 10, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { @@ -4678,15 +4069,15 @@ "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroups", + "logicalId": "SecurityGroup", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 87, + "startLine": 14, "startColumn": 7, - "endLine": 87, + "endLine": 14, "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -4700,83 +4091,87 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroups", + "logicalId": "SecurityGroup", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 88, + "startLine": 15, "startColumn": 7, - "endLine": 88, + "endLine": 15, "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MySubnet", + "logicalId": "StandaloneIngressIcmpv6", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 93, - "startColumn": 9, - "endLine": 93, + "startLine": 53, + "startColumn": 7, + "endLine": 53, "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "parameter 'MyVpc' (type AWS::EC2::VPC::Id)" + "resolutionSource": "Ref to 'SecurityGroup'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MySubnet", + "logicalId": "StandaloneIngressIcmpv6", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 94, - "startColumn": 9, - "endLine": 94, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" + "startLine": 54, + "startColumn": 7, + "endLine": 54, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZoneId' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MySubnet", + "logicalId": "StandaloneIngressIcmpv6", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.AvailabilityZoneId", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 95, - "startColumn": 9, - "endLine": 95, - "endColumn": 27, + "startLine": 55, + "startColumn": 7, + "endLine": 55, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -4784,323 +4179,253 @@ } }, { - "ruleId": "I9003", + "ruleId": "I9001", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", + "entity": { + "logicalId": "StandaloneIngressIcmpv6", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupIngress" + }, + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" + "startLine": 56, + "startColumn": 7, + "endLine": 56, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'PolicyList' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Property 'CidrIpv6' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PolicyList", + "logicalId": "StandaloneIngressIcmpv6", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrIpv6", "category": "Best Practice", - "startLine": 51, - "startColumn": 5, - "endLine": 51, + "startLine": 57, + "startColumn": 7, + "endLine": 57, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TestStateMachine' of type 'AWS::Serverless::StateMachine' supports Tags but none are configured", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TestStateMachine", + "logicalId": "StandaloneEgressIcmpv6", "entityType": "Resource", - "resourceType": "AWS::Serverless::StateMachine" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 63, - "startColumn": 5, - "endLine": 63, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 61, + "startColumn": 7, + "endLine": 61, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SecurityGroup'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'TestLambdaFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TestLambdaFunction", + "logicalId": "StandaloneEgressIcmpv6", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 76, - "startColumn": 5, - "endLine": 76, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 62, + "startColumn": 7, + "endLine": 62, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SecurityGroups' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroups", + "logicalId": "StandaloneEgressIcmpv6", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 86, - "startColumn": 5, - "endLine": 86, + "startLine": 63, + "startColumn": 7, + "endLine": 63, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MySubnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MySubnet", + "logicalId": "StandaloneEgressIcmpv6", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 92, - "startColumn": 5, - "endLine": 92, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/transform/list_transform.yaml": { - "filePath": "good/transform/list_transform.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 + "startLine": 64, + "startColumn": 7, + "endLine": 64, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SkillFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Property 'CidrIpv6' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SkillFunction", + "logicalId": "StandaloneEgressIcmpv6", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrIpv6", "category": "Best Practice", - "startLine": 17, - "startColumn": 5, - "endLine": 17, + "startLine": 65, + "startColumn": 7, + "endLine": 65, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/transform/list_transform_many.yaml": { - "filePath": "good/transform/list_transform_many.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Function' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Function", + "logicalId": "StandaloneEgressIcmpv6WithoutTypeCode", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 16, - "startColumn": 5, - "endLine": 16, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/transform/list_transform_not_sam.yaml": { - "filePath": "good/transform/list_transform_not_sam.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 1, - "informational": 1, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W9013", - "severity": "WARN", - "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", - "source": "ENGINE", - "entity": { - "logicalId": "SkillFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "category": "Security", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 16, - "ruleDescription": "Hardcoded account ID in ARN", - "phase": "LINT" + "startLine": 69, + "startColumn": 7, + "endLine": 69, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SecurityGroup'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SkillFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SkillFunction", + "logicalId": "StandaloneEgressIcmpv6WithoutTypeCode", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/transform/step_function_local_definition.yaml": { - "filePath": "good/transform/step_function_local_definition.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 + "startLine": 70, + "startColumn": 7, + "endLine": 70, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'StateMachine' of type 'AWS::Serverless::StateMachine' supports Tags but none are configured", + "message": "Property 'CidrIpv6' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "StateMachine", + "logicalId": "StandaloneEgressIcmpv6WithoutTypeCode", "entityType": "Resource", - "resourceType": "AWS::Serverless::StateMachine" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrIpv6", "category": "Best Practice", - "startLine": 5, - "startColumn": 5, - "endLine": 5, + "startLine": 71, + "startColumn": 7, + "endLine": 71, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/transform_serverless_api.yaml": { - "filePath": "good/transform_serverless_api.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myFunction", + "logicalId": "Vpc", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 7, + "startLine": 9, "startColumn": 5, - "endLine": 7, + "endLine": 9, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -5108,30 +4433,30 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'myApi' of type 'AWS::Serverless::Api' supports Tags but none are configured", + "message": "Resource 'SecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "myApi", + "logicalId": "SecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Serverless::Api" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 23, + "startLine": 13, "startColumn": 5, - "endLine": 23, + "endLine": 13, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/transform_serverless_auto_publish_alias.yaml": { - "filePath": "good/transform_serverless_auto_publish_alias.yaml", + "good/simple_sub_prefix.yaml": { + "filePath": "good/simple_sub_prefix.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 1, "counts": { "fatal": 0, "errors": 0, @@ -5145,57 +4470,60 @@ }, "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LiteralAliasFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LiteralAliasFunction", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 17, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:prefix-${Env})" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ParameterAliasFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ParameterAliasFunction", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, + "startLine": 8, "startColumn": 5, - "endLine": 17, + "endLine": 8, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "good/transform_serverless_function.yaml": { - "filePath": "good/transform_serverless_function.yaml", + "good/some_logs_stream_lambda.yaml": { + "filePath": "good/some_logs_stream_lambda.yaml", "status": "OK", "metadata": { - "resourcesScanned": 4, + "resourcesScanned": 8, "counts": { "fatal": 0, - "errors": 0, + "errors": 4, "warnings": 0, - "informational": 3, + "informational": 20, "debug": 0 }, "suppressed": 0, @@ -5204,439 +4532,220 @@ }, "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myApi' of type 'AWS::Serverless::Api' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "myApi", + "logicalId": "FunctionA", "entityType": "Resource", - "resourceType": "AWS::Serverless::Api" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 7, - "startColumn": 5, - "endLine": 7, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.6", + "lifecycle": "end-of-life" + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "myFunction", + "logicalId": "FunctionB", "entityType": "Resource", "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 11, - "startColumn": 5, - "endLine": 11, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "myBucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 73, - "startColumn": 5, - "endLine": 73, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/transform_serverless_globals.yaml": { - "filePath": "good/transform_serverless_globals.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 1, - "debug": 0 + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.6", + "lifecycle": "end-of-life" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs6.10' was deprecated on '2019-08-12'. Creation was disabled on '2019-07-12', and updates were disabled on '2019-08-12'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "myFunction", + "logicalId": "FunctionC", "entityType": "Resource", "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 5, - "startColumn": 5, - "endLine": 5, - "endColumn": 12, + "startLine": 44, + "startColumn": 7, + "endLine": 44, + "endColumn": 14, "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "actualValue": "nodejs6.10", + "actualValue": "python3.6", "lifecycle": "end-of-life" } }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'myFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "myFunction", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/transform_serverless_ignore_globals.yaml": { - "filePath": "good/transform_serverless_ignore_globals.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 3, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "E2533", "severity": "ERROR", - "message": "Runtime 'nodejs6.10' was deprecated on '2019-08-12'. Creation was disabled on '2019-07-12', and updates were disabled on '2019-08-12'. Please consider updating to 'nodejs24.x'", + "message": "Runtime 'python3.6' was deprecated on '2022-07-18'. Creation was disabled on '2022-07-18', and updates were disabled on '2022-08-29'. Please consider updating to 'python3.14'", "source": "CFN_LINT", "entity": { - "logicalId": "InheritsGlobalsFunction", + "logicalId": "LogSubscriptionFunction", "entityType": "Resource", "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 12, + "startLine": 56, + "startColumn": 7, + "endLine": 56, + "endColumn": 14, "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "actualValue": "nodejs6.10", + "actualValue": "python3.6", "lifecycle": "end-of-life" } }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'IgnoredFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", + "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": "IgnoredFunction", + "logicalId": "FunctionALogGroup", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'SelectiveIgnoreFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", + "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": "SelectiveIgnoreFunction", + "logicalId": "FunctionALogGroup", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'InheritsGlobalsFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", + "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": "InheritsGlobalsFunction", + "logicalId": "FunctionBLogGroup", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 26, - "startColumn": 5, - "endLine": 26, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "good/transform_serverless_ignore_globals_supported_runtime.yaml": { - "filePath": "good/transform_serverless_ignore_globals_supported_runtime.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'IgnoredFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", + "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": "IgnoredFunction", + "logicalId": "FunctionBLogGroup", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'SelectiveIgnoreFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", + "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": "SelectiveIgnoreFunction", + "logicalId": "FunctionCLogGroup", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'InheritsGlobalsFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "InheritsGlobalsFunction", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 26, - "startColumn": 5, - "endLine": 26, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "good/unique_items_deploy_time_values.json": { - "filePath": "good/unique_items_deploy_time_values.json", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'StackOutputSubnets' of type 'AWS::RDS::DBSubnetGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "StackOutputSubnets", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBSubnetGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ImportedSubnets' of type 'AWS::RDS::DBSubnetGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ImportedSubnets", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBSubnetGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 34, - "startColumn": 7, - "endLine": 34, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", + "startLine": 45, + "startColumn": 3, + "endLine": 45, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'SelectedSubnets' of type 'AWS::RDS::DBSubnetGroup' supports Tags but none are configured", - "source": "ENGINE", + "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": "SelectedSubnets", + "logicalId": "FunctionCLogGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBSubnetGroup" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 44, - "startColumn": 7, - "endLine": 44, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", + "startLine": 45, + "startColumn": 3, + "endLine": 45, + "endColumn": 20, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" - } - ] - }, - "good/unknown_resource_types_ignored.yaml": { - "filePath": "good/unknown_resource_types_ignored.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "good/unresolved_values_are_present.yaml": { - "filePath": "good/unresolved_values_are_present.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 15, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 32, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "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": "ValkeyGroup", + "logicalId": "LogSubscriptionFunctionLogGroup", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::Logs::LogGroup" }, "category": "Best Practice", - "startLine": 134, + "startLine": 73, "startColumn": 3, - "endLine": 134, - "endColumn": 14, + "endLine": 73, + "endColumn": 34, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -5646,380 +4755,365 @@ "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": "ValkeyGroup", + "logicalId": "LogSubscriptionFunctionLogGroup", "entityType": "Resource", - "resourceType": "AWS::ElastiCache::ReplicationGroup" + "resourceType": "AWS::Logs::LogGroup" }, "category": "Best Practice", - "startLine": 134, + "startLine": 73, "startColumn": 3, - "endLine": 134, - "endColumn": 14, + "endLine": 73, + "endColumn": 34, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Vpc", + "logicalId": "FunctionALogGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 17, + "startLine": 25, "startColumn": 7, - "endLine": 17, - "endColumn": 16, + "endLine": 25, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:/aws/lambda/${FunctionA})" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet1", + "logicalId": "FunctionBLogGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 24, + "startLine": 37, "startColumn": 7, - "endLine": 24, - "endColumn": 12, + "endLine": 37, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" + "resolutionSource": "dynamic (Sub:/aws/lambda/${FunctionB})" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet1", + "logicalId": "FunctionCLogGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 25, + "startLine": 48, "startColumn": 7, - "endLine": 25, - "endColumn": 16, + "endLine": 48, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:/aws/lambda/${FunctionC})" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet2", + "logicalId": "LogSubscriptionFunctionLogGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.LogGroupName", "category": "Best Practice", - "startLine": 32, + "startLine": 76, "startColumn": 7, - "endLine": 32, - "endColumn": 12, + "endLine": 76, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" + "resolutionSource": "dynamic (Sub:/aws/lambda/${LogSubscriptionFunction})" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'FunctionA' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Subnet2", + "logicalId": "FunctionA", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 33, - "startColumn": 7, - "endLine": 33, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 18, + "startColumn": 5, + "endLine": 18, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'FunctionALogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "FunctionALogGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 42, - "startColumn": 7, - "endLine": 42, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 24, + "startColumn": 5, + "endLine": 24, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'FunctionB' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Cluster", + "logicalId": "FunctionB", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 43, - "startColumn": 7, - "endLine": 43, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 30, + "startColumn": 5, + "endLine": 30, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Resource 'FunctionBLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "FunctionBLogGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 52, - "startColumn": 7, - "endLine": 52, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 36, + "startColumn": 5, + "endLine": 36, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'FunctionC' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "FunctionC", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 53, - "startColumn": 7, - "endLine": 53, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" - } + "startLine": 41, + "startColumn": 5, + "endLine": 41, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Resource 'FunctionCLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "IngressFromAttribute", + "logicalId": "FunctionCLogGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 65, - "startColumn": 7, - "endLine": 65, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'SecurityGroup'" - } + "startLine": 47, + "startColumn": 5, + "endLine": 47, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Resource 'LogSubscriptionFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "IngressFromAttribute", + "logicalId": "LogSubscriptionFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 66, - "startColumn": 7, - "endLine": 66, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 53, + "startColumn": 5, + "endLine": 53, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", + "message": "Resource 'LogSubscriptionFunctionLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "IngressFromAttribute", + "logicalId": "LogSubscriptionFunctionLogGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.CidrIp", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 67, - "startColumn": 7, - "endLine": 67, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 75, + "startColumn": 5, + "endLine": 75, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/sqs_fifo_valid.yaml": { + "filePath": "good/sqs_fifo_valid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 6, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "IngressFromAttribute", + "logicalId": "FifoQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 68, - "startColumn": 7, - "endLine": 68, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt Cluster.Endpoint.Port" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "IngressFromAttribute", + "logicalId": "FifoQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 69, - "startColumn": 7, - "endLine": 69, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt Cluster.Endpoint.Port" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "IngressFromImport", + "logicalId": "FifoQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 73, - "startColumn": 7, - "endLine": 73, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'SecurityGroup'" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "IngressFromImport", + "logicalId": "FifoQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.QueueName", "category": "Best Practice", - "startLine": 74, + "startLine": 6, "startColumn": 7, - "endLine": 74, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 6, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6029,20 +5123,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", + "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "IngressFromImport", + "logicalId": "FifoQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.CidrIp", + "propertyPath": "Properties.FifoQueue", "category": "Best Practice", - "startLine": 75, + "startLine": 7, "startColumn": 7, - "endLine": 75, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 7, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6050,422 +5144,602 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Resource 'FifoQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "IngressFromImport", + "logicalId": "FifoQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 76, - "startColumn": 7, - "endLine": 76, + "startLine": 5, + "startColumn": 5, + "endLine": 5, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: SharedPort)" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/ssm_document_valid.yaml": { + "filePath": "good/ssm_document_valid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'DocumentType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "IngressFromImport", + "logicalId": "Doc", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupIngress" + "resourceType": "AWS::SSM::Document" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.DocumentType", "category": "Best Practice", - "startLine": 77, + "startLine": 6, "startColumn": 7, - "endLine": 77, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 6, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (cross-stack import: SharedPort)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "message": "Property 'Content' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EgressFromParameter", + "logicalId": "Doc", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::SSM::Document" }, - "propertyPath": "Properties.GroupId", + "propertyPath": "Properties.Content", "category": "Best Practice", - "startLine": 81, + "startLine": 7, "startColumn": 7, - "endLine": 81, + "endLine": 7, "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'SecurityGroup'" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "message": "Resource 'Doc' of type 'AWS::SSM::Document' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EgressFromParameter", + "logicalId": "Doc", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::SSM::Document" }, - "propertyPath": "Properties.IpProtocol", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 82, - "startColumn": 7, - "endLine": 82, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/ssm_parameter_name_type.yaml": { + "filePath": "good/ssm_parameter_name_type.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EgressFromParameter", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.CidrIp", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 83, + "startLine": 11, "startColumn": 7, - "endLine": 83, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 11, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter 'SsmParamName' (type AWS::SSM::Parameter::Name)" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EgressFromParameter", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.FromPort", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 84, - "startColumn": 7, - "endLine": 84, + "startLine": 10, + "startColumn": 5, + "endLine": 10, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'DbPort' (type Number)" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/stackset_conditional_template_source.yaml": { + "filePath": "good/stackset_conditional_template_source.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, - { - "ruleId": "I9001", + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", + "message": "Property 'StackSetName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EgressFromParameter", + "logicalId": "ConditionalTemplateSource", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroupEgress" + "resourceType": "AWS::CloudFormation::StackSet" }, - "propertyPath": "Properties.ToPort", + "propertyPath": "Properties.StackSetName", "category": "Best Practice", - "startLine": 85, + "startLine": 8, "startColumn": 7, - "endLine": 85, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 8, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudformation.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'DbPort' (type Number)" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DomainName' is create-only; updating it will cause resource replacement", + "message": "Property 'PermissionModel' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Certificate", + "logicalId": "ConditionalTemplateSource", "entityType": "Resource", - "resourceType": "AWS::CertificateManager::Certificate" + "resourceType": "AWS::CloudFormation::StackSet" }, - "propertyPath": "Properties.DomainName", + "propertyPath": "Properties.PermissionModel", "category": "Best Practice", - "startLine": 89, + "startLine": 9, "startColumn": 7, - "endLine": 89, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-acmpca", + "endLine": 9, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudformation.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only" } + } + ] + }, + "good/stepfunctions_valid.yaml": { + "filePath": "good/stepfunctions_valid.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'RoleArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", + "entity": { + "logicalId": "SM", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "Properties.RoleArn", + "category": "Best Practice", + "startLine": 20, + "startColumn": 7, + "endLine": 20, + "endColumn": 14, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SM' of type 'AWS::StepFunctions::StateMachine' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SM", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/string_length_unknowable_values.json": { + "filePath": "good/string_length_unknowable_values.json", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 9, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup", + "logicalId": "JoinedFromAReference", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 103, - "startColumn": 7, - "endLine": 103, - "endColumn": 12, + "startLine": 16, + "startColumn": 9, + "endLine": 16, + "endColumn": 20, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" + "resolutionSource": "dynamic (Join:{ref:NameProviderWithADeliberatelyLongLogicalIdentifierForThisTest}-data)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Port' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup", + "logicalId": "JoinedFromAParameter", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Port", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 104, - "startColumn": 7, - "endLine": 104, - "endColumn": 11, + "startLine": 24, + "startColumn": 9, + "endLine": 24, + "endColumn": 20, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Join:{dynamic}-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "TargetGroup", + "logicalId": "SubstitutedFromAParameter", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 105, - "startColumn": 7, - "endLine": 105, - "endColumn": 15, + "startLine": 38, + "startColumn": 9, + "endLine": 38, + "endColumn": 20, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:${NamePrefix}-data)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "HttpsListener", + "logicalId": "OnlySomeChoicesTooLong", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.LoadBalancerArn", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 112, - "startColumn": 7, - "endLine": 112, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", + "startLine": 44, + "startColumn": 9, + "endLine": 44, + "endColumn": 20, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'LoadBalancer'" + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'HttpsListener' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", + "message": "Resource 'NameProviderWithADeliberatelyLongLogicalIdentifierForThisTest' of type 'AWS::SNS::Topic' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "HttpsListener", + "logicalId": "NameProviderWithADeliberatelyLongLogicalIdentifierForThisTest", "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + "resourceType": "AWS::SNS::Topic" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 111, + "startLine": 10, "startColumn": 5, - "endLine": 111, - "endColumn": 15, + "endLine": 10, + "endColumn": 67, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "good/vpc_subnets.yaml": { - "filePath": "good/vpc_subnets.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 12, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W3010", - "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1a'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'JoinedFromAReference' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "JoinedFromAReference", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 15, "startColumn": 7, "endLine": 15, - "endColumn": 23, - "ruleDescription": "Availability zone properties should not be hardcoded", + "endColumn": 18, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3010", - "severity": "WARN", - "message": "Avoid hardcoding availability zones 'us-east-1b'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'JoinedFromAParameter' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "JoinedFromAParameter", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 21, + "startLine": 23, "startColumn": 7, - "endLine": 21, - "endColumn": 23, - "ruleDescription": "Availability zone properties should not be hardcoded", + "endLine": 23, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'SubstitutedFromAParameter' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyVPC", + "logicalId": "SubstitutedFromAParameter", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 6, + "startLine": 37, "startColumn": 7, - "endLine": 6, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 37, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'OnlySomeChoicesTooLong' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "OnlySomeChoicesTooLong", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 43, + "startColumn": 7, + "endLine": 43, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/sub_not_needed.yaml": { + "filePath": "good/sub_not_needed.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 13, + "startLine": 9, "startColumn": 7, - "endLine": 13, - "endColumn": 12, + "endLine": 9, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVPC'" + "resolutionSource": "dynamic (Sub:${MyParam}-bucket)" } }, + { + "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": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/subnet_cidrs_across_vpcs_and_secondary_blocks.yaml": { + "filePath": "good/subnet_cidrs_across_vpcs_and_secondary_blocks.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 12, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 22, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "VpcA", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 14, + "startLine": 17, "startColumn": 7, - "endLine": 14, + "endLine": 17, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -6476,19 +5750,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "VpcB", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 15, + "startLine": 24, "startColumn": 7, - "endLine": 15, - "endColumn": 23, + "endLine": 24, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6501,21 +5775,21 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "VpcASecondaryBlock", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::VPCCidrBlock" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 19, + "startLine": 31, "startColumn": 7, - "endLine": 19, + "endLine": 31, "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVPC'" + "resolutionSource": "Ref to 'VpcA'" } }, { @@ -6524,15 +5798,15 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "VpcASecondaryBlock", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::VPCCidrBlock" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 20, + "startLine": 32, "startColumn": 7, - "endLine": 20, + "endLine": 32, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -6543,41 +5817,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "SubnetA1", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 21, + "startLine": 36, "startColumn": 7, - "endLine": 21, - "endColumn": 23, + "endLine": 36, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcA'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "SubnetA1", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 25, + "startLine": 37, "startColumn": 7, - "endLine": 25, - "endColumn": 23, + "endLine": 37, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6590,162 +5865,129 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroup", + "logicalId": "SubnetB1", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 26, + "startLine": 44, "startColumn": 7, - "endLine": 26, + "endLine": 44, "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'MyVPC'" + "resolutionSource": "Ref to 'VpcB'" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SubnetA' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetA", + "logicalId": "SubnetB1", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 12, - "startColumn": 5, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 45, + "startColumn": 7, + "endLine": 45, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SubnetB' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SubnetB", + "logicalId": "SubnetA2ViaAttribute", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 18, - "startColumn": 5, - "endLine": 18, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 24, - "startColumn": 5, - "endLine": 24, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "integration/availability-zones.yaml": { - "filePath": "integration/availability-zones.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 2, - "errors": 0, - "warnings": 0, - "informational": 5, - "debug": 0 + "startLine": 52, + "startColumn": 7, + "endLine": 52, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt VpcA.VpcId" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'AvailabilityZoneId' should not be included with 'AvailabilityZone'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Subnet", + "logicalId": "SubnetA2ViaAttribute", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.AvailabilityZoneId", - "category": "Schema", - "startLine": 5, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 53, "startColumn": 7, - "endLine": 5, - "endColumn": 25, - "ruleDescription": "Mutually exclusive properties", + "endLine": 53, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "AvailabilityZoneId" + "lifecycle": "create-only" } }, { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'AvailabilityZone' should not be included with 'AvailabilityZoneId'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Subnet", + "logicalId": "SubnetInSecondaryBlock", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Schema", - "startLine": 6, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 60, "startColumn": 7, - "endLine": 6, - "endColumn": 23, - "ruleDescription": "Mutually exclusive properties", + "endLine": 60, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "AvailabilityZone" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcA'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZoneId' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet", + "logicalId": "SubnetInSecondaryBlock", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.AvailabilityZoneId", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 5, + "startLine": 61, "startColumn": 7, - "endLine": 5, - "endColumn": 25, + "endLine": 61, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -6755,23 +5997,24 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet", + "logicalId": "SubnetProdOrDev", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 6, + "startLine": 68, "startColumn": 7, - "endLine": 6, - "endColumn": 23, + "endLine": 68, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcA'" } }, { @@ -6780,20 +6023,21 @@ "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet", + "logicalId": "SubnetProdOrDev", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 10, + "startLine": 69, "startColumn": 7, - "endLine": 10, + "endLine": 69, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" } }, { @@ -6802,296 +6046,255 @@ "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet", + "logicalId": "SubnetDevOrProd", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 11, + "startLine": 76, "startColumn": 7, - "endLine": 11, + "endLine": 76, "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcA'" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Subnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Subnet", + "logicalId": "SubnetDevOrProd", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 4, - "startColumn": 5, - "endLine": 4, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "integration/aws-dynamodb-table.yaml": { - "filePath": "integration/aws-dynamodb-table.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 1, - "informational": 10, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F3021", - "severity": "FATAL", - "message": "'SSEType' is a dependency of 'KMSMasterKeyId'", - "source": "SCHEMA", - "entity": { - "logicalId": "Table1", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.SSESpecification", - "suggestedFix": "Add 'SSEType' when 'KMSMasterKeyId' is specified", - "category": "Schema", - "startLine": 22, + "startLine": 77, "startColumn": 7, - "endLine": 22, - "endColumn": 23, - "ruleDescription": "Dependent property required", - "phase": "SCHEMA" - }, - { - "ruleId": "W3030", - "severity": "WARN", - "message": "'AES256' is not one of ['KMS']", - "source": "CFN_LINT", - "entity": { - "logicalId": "Table2", - "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" - }, - "propertyPath": "Properties.SSESpecification.SSEType", - "category": "Schema", - "startLine": 44, - "startColumn": 9, - "endLine": 44, + "endLine": 77, "endColumn": 16, - "ruleDescription": "Value not in allowed enum", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "AES256", - "extra": { - "allowed_values": [ - "KMS" - ] - } + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProd'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Table1", + "logicalId": "SubnetFromAttribute", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.TableName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 12, + "startLine": 84, "startColumn": 7, - "endLine": 12, - "endColumn": 16, + "endLine": 84, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcA'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Table1", + "logicalId": "SubnetFromAttribute", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 16, + "startLine": 85, "startColumn": 7, - "endLine": 16, + "endLine": 85, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "GetAtt VpcA.CidrBlock" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Table2", + "logicalId": "SubnetFromImport", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.TableName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 31, + "startLine": 92, "startColumn": 7, - "endLine": 31, - "endColumn": 16, + "endLine": 92, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcA'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Table2", + "logicalId": "SubnetFromImport", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 35, + "startLine": 93, "startColumn": 7, - "endLine": 35, + "endLine": 93, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import: SharedSubnetCidr)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TableName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Table3", + "logicalId": "SubnetFromCidrFunction", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.TableName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 50, + "startLine": 100, "startColumn": 7, - "endLine": 50, - "endColumn": 16, + "endLine": 100, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VpcA'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Table3", + "logicalId": "SubnetFromCidrFunction", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.KeySchema", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 59, + "startLine": 101, "startColumn": 7, - "endLine": 59, + "endLine": 101, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Select with unresolvable arguments)" } + } + ] + }, + "good/transform.yaml": { + "filePath": "good/transform.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 4, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'KMS' of type 'AWS::KMS::Key' supports Tags but none are configured", - "source": "ENGINE", + "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": "KMS", + "logicalId": "AppName", "entityType": "Resource", - "resourceType": "AWS::KMS::Key" + "resourceType": "AWS::Serverless::Application" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 3, + "startLine": 18, "startColumn": 3, - "endLine": 3, - "endColumn": 6, - "ruleDescription": "Resource should have Tags", + "endLine": 18, + "endColumn": 10, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'Table1' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", - "source": "ENGINE", + "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": "Table1", + "logicalId": "AppName", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Serverless::Application" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 11, - "startColumn": 5, - "endLine": 11, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 10, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Table2' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'MyServerlessFunctionLogicalID' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Table2", + "logicalId": "MyServerlessFunctionLogicalID", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 30, + "startLine": 7, "startColumn": 5, - "endLine": 30, + "endLine": 7, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -7099,32 +6302,32 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Table3' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "message": "Resource 'AppName' of type 'AWS::Serverless::Application' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Table3", + "logicalId": "AppName", "entityType": "Resource", - "resourceType": "AWS::DynamoDB::Table" + "resourceType": "AWS::Serverless::Application" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 49, + "startLine": 20, "startColumn": 5, - "endLine": 49, + "endLine": 20, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "integration/aws-ec2-instance.yaml": { - "filePath": "integration/aws-ec2-instance.yaml", + "good/transform/applications_location.yaml": { + "filePath": "good/transform/applications_location.yaml", "status": "OK", "metadata": { "resourcesScanned": 2, "counts": { - "fatal": 4, + "fatal": 0, "errors": 0, "warnings": 0, "informational": 6, @@ -7136,227 +6339,263 @@ }, "diagnostics": [ { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'AssociateCarrierIpAddress' should not be included with 'NetworkInterfaceId'", - "source": "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": "Instance", + "logicalId": "App1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Serverless::Application" }, - "propertyPath": "Properties.NetworkInterfaces.0.AssociateCarrierIpAddress", - "category": "Schema", - "startLine": 14, - "startColumn": 11, - "endLine": 14, - "endColumn": 36, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Mutually exclusive properties", - "phase": "SCHEMA", - "context": { - "property": "AssociateCarrierIpAddress" - } + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 7, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'AssociatePublicIpAddress' should not be included with 'NetworkInterfaceId'", - "source": "SCHEMA", + "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": "Instance", + "logicalId": "App1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Serverless::Application" }, - "propertyPath": "Properties.NetworkInterfaces.0.AssociatePublicIpAddress", - "category": "Schema", - "startLine": 15, - "startColumn": 11, - "endLine": 15, - "endColumn": 35, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Mutually exclusive properties", - "phase": "SCHEMA", - "context": { - "property": "AssociatePublicIpAddress" - } + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 7, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'NetworkInterfaceId' should not be included with 'AssociateCarrierIpAddress'", - "source": "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": "Instance", + "logicalId": "App2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Serverless::Application" }, - "propertyPath": "Properties.NetworkInterfaces.0.NetworkInterfaceId", - "category": "Schema", - "startLine": 17, - "startColumn": 11, - "endLine": 17, - "endColumn": 29, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Mutually exclusive properties", - "phase": "SCHEMA", - "context": { - "property": "NetworkInterfaceId" - } + "category": "Best Practice", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 7, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'NetworkInterfaceId' should not be included with 'AssociatePublicIpAddress'", - "source": "SCHEMA", + "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": "Instance", + "logicalId": "App2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Serverless::Application" }, - "propertyPath": "Properties.NetworkInterfaces.0.NetworkInterfaceId", - "category": "Schema", - "startLine": 17, - "startColumn": 11, - "endLine": 17, - "endColumn": 29, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Mutually exclusive properties", - "phase": "SCHEMA", - "context": { - "property": "NetworkInterfaceId" - } + "category": "Best Practice", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 7, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Resource 'App1' of type 'AWS::Serverless::Application' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "NetworkInterface", + "logicalId": "App1", "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkInterface" + "resourceType": "AWS::Serverless::Application" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, + "startLine": 5, + "startColumn": 5, + "endLine": 5, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/networkinterface", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Resource 'App2' of type 'AWS::Serverless::Application' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Instance", + "logicalId": "App2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Serverless::Application" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/transform/auto_publish_alias.yaml": { + "filePath": "good/transform/auto_publish_alias.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'SkillFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Instance", + "logicalId": "SkillFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 22, + "startColumn": 5, + "endLine": 22, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "message": "Resource 'SkillFunction2' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Instance", + "logicalId": "SkillFunction2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.NetworkInterfaces", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 13, - "startColumn": 7, - "endLine": 13, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 31, + "startColumn": 5, + "endLine": 31, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/transform/auto_publish_code_sha256.yaml": { + "filePath": "good/transform/auto_publish_code_sha256.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9003", + "ruleId": "I9040", "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "message": "Resource 'LambdaFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", + "entity": { + "logicalId": "LambdaFunction", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/transform/function_use_s3_uri.yaml": { + "filePath": "good/transform/function_use_s3_uri.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'NetworkInterface' of type 'AWS::EC2::NetworkInterface' supports Tags but none are configured", + "message": "Resource 'Function' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "NetworkInterface", + "logicalId": "Function", "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkInterface" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 4, + "startLine": 18, "startColumn": 5, - "endLine": 4, + "endLine": 18, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "integration/aws-ec2-launchtemplate.yaml": { - "filePath": "integration/aws-ec2-launchtemplate.yaml", + "good/transform/function_using_image.yaml": { + "filePath": "good/transform/function_using_image.yaml", "status": "OK", "metadata": { "resourcesScanned": 1, "counts": { - "fatal": 5, + "fatal": 0, "errors": 0, "warnings": 0, "informational": 1, @@ -7368,673 +6607,655 @@ }, "diagnostics": [ { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'NetworkInterface' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'LaunchTemplate']", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'HelloWorldFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "LaunchTemplate", + "logicalId": "HelloWorldFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::LaunchTemplate" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.LaunchTemplateData.NetworkInterfaces.0.NetworkInterfaceId", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 13, - "startColumn": 13, - "endLine": 13, - "endColumn": 31, - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/transform/include_object_form.yaml": { + "filePath": "good/transform/include_object_form.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 }, - { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'AssociateCarrierIpAddress' should not be included with 'NetworkInterfaceId'", - "source": "SCHEMA", - "entity": { - "logicalId": "LaunchTemplate", + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "good/transform/language_extension.yaml": { + "filePath": "good/transform/language_extension.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 7, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 14, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "TestLambdaFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::LaunchTemplate" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.LaunchTemplateData.NetworkInterfaces.0.AssociateCarrierIpAddress", - "category": "Schema", - "startLine": 10, - "startColumn": 13, - "endLine": 10, - "endColumn": 38, - "ruleDescription": "Mutually exclusive properties", + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 78, + "startColumn": 7, + "endLine": 78, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "property": "AssociateCarrierIpAddress" + "actualValue": "python3.9", + "lifecycle": "deprecated" } }, { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'AssociatePublicIpAddress' should not be included with 'NetworkInterfaceId'", - "source": "SCHEMA", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", + "source": "ENGINE", "entity": { - "logicalId": "LaunchTemplate", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::EC2::LaunchTemplate" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.LaunchTemplateData.NetworkInterfaces.0.AssociatePublicIpAddress", - "category": "Schema", - "startLine": 11, - "startColumn": 13, - "endLine": 11, - "endColumn": 37, - "ruleDescription": "Mutually exclusive properties", - "phase": "SCHEMA", - "context": { - "property": "AssociatePublicIpAddress" - } + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 51, + "startColumn": 5, + "endLine": 51, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'NetworkInterfaceId' should not be included with 'AssociateCarrierIpAddress'", - "source": "SCHEMA", + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "LaunchTemplate", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::EC2::LaunchTemplate" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.LaunchTemplateData.NetworkInterfaces.0.NetworkInterfaceId", - "category": "Schema", - "startLine": 13, - "startColumn": 13, - "endLine": 13, - "endColumn": 31, - "ruleDescription": "Mutually exclusive properties", - "phase": "SCHEMA", - "context": { - "property": "NetworkInterfaceId" - } + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 51, + "startColumn": 5, + "endLine": 51, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'NetworkInterfaceId' should not be included with 'AssociatePublicIpAddress'", - "source": "SCHEMA", + "ruleId": "I3100", + "severity": "INFO", + "message": "Previous generation instance type 'db.m1.small' - consider upgrading", + "source": "CFN_LINT", "entity": { - "logicalId": "LaunchTemplate", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::EC2::LaunchTemplate" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.LaunchTemplateData.NetworkInterfaces.0.NetworkInterfaceId", - "category": "Schema", - "startLine": 13, - "startColumn": 13, - "endLine": 13, - "endColumn": 31, - "ruleDescription": "Mutually exclusive properties", - "phase": "SCHEMA", - "context": { - "property": "NetworkInterfaceId" - } + "propertyPath": "Properties.DBInstanceClass", + "suggestedFix": "Upgrade to a current generation instance type", + "category": "Best Practice", + "startLine": 53, + "startColumn": 7, + "endLine": 53, + "endColumn": 22, + "ruleDescription": "Checks for legacy instance type generations", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchTemplateName' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LaunchTemplate", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::EC2::LaunchTemplate" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.LaunchTemplateName", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 14, + "startLine": 54, "startColumn": 7, - "endLine": 14, - "endColumn": 25, + "endLine": 54, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } - } - ] - }, - "integration/aws-ec2-networkinterface.yaml": { - "filePath": "integration/aws-ec2-networkinterface.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 2, - "errors": 0, - "warnings": 0, - "informational": 2, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'Ipv6Addresses' should not be included with 'Ipv6AddressCount'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "NetworkInterface", + "logicalId": "SecurityGroups", "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkInterface" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Ipv6Addresses", - "category": "Schema", - "startLine": 15, + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 87, "startColumn": 7, - "endLine": 15, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/networkinterface", - "ruleDescription": "Mutually exclusive properties", + "endLine": 87, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "Ipv6Addresses" + "lifecycle": "create-only" } }, { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'Ipv6AddressCount' should not be included with 'Ipv6Addresses'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "NetworkInterface", + "logicalId": "SecurityGroups", "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkInterface" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Ipv6AddressCount", - "category": "Schema", - "startLine": 17, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 88, "startColumn": 7, - "endLine": 17, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/networkinterface", - "ruleDescription": "Mutually exclusive properties", + "endLine": 88, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "Ipv6AddressCount" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NetworkInterface", + "logicalId": "MySubnet", "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkInterface" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.SubnetId", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/networkinterface", + "startLine": 93, + "startColumn": 9, + "endLine": 93, + "endColumn": 14, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "parameter 'SubnetId' (type AWS::EC2::Subnet::Id)" + "resolutionSource": "parameter 'MyVpc' (type AWS::EC2::VPC::Id)" } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'NetworkInterface' of type 'AWS::EC2::NetworkInterface' supports Tags but none are configured", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NetworkInterface", - "entityType": "Resource", - "resourceType": "AWS::EC2::NetworkInterface" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 9, - "startColumn": 5, - "endLine": 9, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "integration/aws-ec2-subnet.yaml": { - "filePath": "integration/aws-ec2-subnet.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 5, - "errors": 0, - "warnings": 0, - "informational": 18, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'CidrBlock' should not be included with 'Ipv4IpamPoolId'", - "source": "SCHEMA", - "entity": { - "logicalId": "Subnet5", + "logicalId": "MySubnet", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.CidrBlock", - "category": "Schema", - "startLine": 30, - "startColumn": 7, - "endLine": 30, - "endColumn": 16, - "ruleDescription": "Mutually exclusive properties", + "category": "Best Practice", + "startLine": 94, + "startColumn": 9, + "endLine": 94, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "CidrBlock" + "lifecycle": "create-only" } }, { - "ruleId": "F3020", - "severity": "FATAL", - "message": "'Ipv4IpamPoolId' should not be included with 'CidrBlock'", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZoneId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Subnet5", + "logicalId": "MySubnet", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Ipv4IpamPoolId", - "category": "Schema", - "startLine": 31, - "startColumn": 7, - "endLine": 31, - "endColumn": 21, - "ruleDescription": "Mutually exclusive properties", + "propertyPath": "Properties.AvailabilityZoneId", + "category": "Best Practice", + "startLine": 95, + "startColumn": 9, + "endLine": 95, + "endColumn": 27, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "property": "Ipv4IpamPoolId" + "lifecycle": "create-only" } }, { - "ruleId": "F3021", - "severity": "FATAL", - "message": "'Ipv4IpamPoolId' is a dependency of 'Ipv4NetmaskLength'", - "source": "SCHEMA", + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'PolicyList' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Subnet1", + "logicalId": "PolicyList", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties", - "suggestedFix": "Add 'Ipv4IpamPoolId' when 'Ipv4NetmaskLength' is specified", - "category": "Schema", - "startLine": 7, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 51, "startColumn": 5, - "endLine": 7, + "endLine": 51, "endColumn": 15, - "ruleDescription": "Dependent property required", - "phase": "SCHEMA" + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "F3021", - "severity": "FATAL", - "message": "'Ipv4NetmaskLength' is a dependency of 'Ipv4IpamPoolId'", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TestStateMachine' of type 'AWS::Serverless::StateMachine' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Subnet3", + "logicalId": "TestStateMachine", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::StateMachine" }, - "propertyPath": "Properties", - "suggestedFix": "Add 'Ipv4NetmaskLength' when 'Ipv4IpamPoolId' is specified", - "category": "Schema", - "startLine": 17, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 63, "startColumn": 5, - "endLine": 17, + "endLine": 63, "endColumn": 15, - "ruleDescription": "Dependent property required", - "phase": "SCHEMA" + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "F3058", - "severity": "FATAL", - "message": "One of ['CidrBlock', 'Ipv4IpamPoolId', 'Ipv6IpamPoolId', 'Ipv6CidrBlock'] is a required property", - "source": "SCHEMA", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TestLambdaFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Subnet2", + "logicalId": "TestLambdaFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties", - "category": "Schema", - "startLine": 13, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 76, "startColumn": 5, - "endLine": 13, + "endLine": 76, "endColumn": 15, - "ruleDescription": "One of properties required (requiredOr)", - "phase": "SCHEMA" + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'SecurityGroups' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Subnet1", + "logicalId": "SecurityGroups", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'Vpc' (type AWS::EC2::VPC::Id)" - } + "startLine": 86, + "startColumn": 5, + "endLine": 86, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'MySubnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Subnet1", + "logicalId": "MySubnet", "entityType": "Resource", "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 92, + "startColumn": 5, + "endLine": 92, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/transform/list_transform.yaml": { + "filePath": "good/transform/list_transform.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Ipv4NetmaskLength' is create-only; updating it will cause resource replacement", + "message": "Resource 'SkillFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Subnet1", + "logicalId": "SkillFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.Ipv4NetmaskLength", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 24, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 14, - "startColumn": 7, - "endLine": 14, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'Vpc' (type AWS::EC2::VPC::Id)" - } + "startLine": 17, + "startColumn": 5, + "endLine": 17, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/transform/list_transform_many.yaml": { + "filePath": "good/transform/list_transform_many.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Function' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Subnet3", + "logicalId": "Function", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 18, - "startColumn": 7, - "endLine": 18, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'Vpc' (type AWS::EC2::VPC::Id)" - } + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/transform/list_transform_not_sam.yaml": { + "filePath": "good/transform/list_transform_not_sam.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 1, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Ipv4IpamPoolId' is create-only; updating it will cause resource replacement", + "ruleId": "W9013", + "severity": "WARN", + "message": "Hardcoded account ID in ARN - use AWS::AccountId pseudo-parameter", "source": "ENGINE", "entity": { - "logicalId": "Subnet3", + "logicalId": "SkillFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.Ipv4IpamPoolId", - "category": "Best Practice", - "startLine": 19, - "startColumn": 7, - "endLine": 19, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "category": "Security", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 16, + "ruleDescription": "Hardcoded account ID in ARN", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'SkillFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Subnet4", + "logicalId": "SkillFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'Vpc' (type AWS::EC2::VPC::Id)" - } + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/transform/step_function_local_definition.yaml": { + "filePath": "good/transform/step_function_local_definition.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Resource 'StateMachine' of type 'AWS::Serverless::StateMachine' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Subnet4", + "logicalId": "StateMachine", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::StateMachine" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 24, - "startColumn": 7, - "endLine": 24, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 5, + "startColumn": 5, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/transform_serverless_api.yaml": { + "filePath": "good/transform_serverless_api.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Ipv6CidrBlock' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'myFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Subnet4", + "logicalId": "myFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.Ipv6CidrBlock", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 25, - "startColumn": 7, - "endLine": 25, - "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'myApi' of type 'AWS::Serverless::Api' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Subnet5", + "logicalId": "myApi", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::Api" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 29, - "startColumn": 7, - "endLine": 29, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'Vpc' (type AWS::EC2::VPC::Id)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet5", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 30, - "startColumn": 7, - "endLine": 30, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Ipv4IpamPoolId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet5", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.Ipv4IpamPoolId", - "category": "Best Practice", - "startLine": 31, - "startColumn": 7, - "endLine": 31, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Ipv4NetmaskLength' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet5", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.Ipv4NetmaskLength", - "category": "Best Practice", - "startLine": 32, - "startColumn": 7, - "endLine": 32, - "endColumn": 24, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 23, + "startColumn": 5, + "endLine": 23, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/transform_serverless_auto_publish_alias.yaml": { + "filePath": "good/transform_serverless_auto_publish_alias.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Subnet1' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'LiteralAliasFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Subnet1", + "logicalId": "LiteralAliasFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 7, + "startLine": 10, "startColumn": 5, - "endLine": 7, + "endLine": 10, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -8042,39 +7263,58 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Subnet2' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'ParameterAliasFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Subnet2", + "logicalId": "ParameterAliasFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 13, + "startLine": 17, "startColumn": 5, - "endLine": 13, + "endLine": 17, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/transform_serverless_function.yaml": { + "filePath": "good/transform_serverless_function.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Subnet3' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'myApi' of type 'AWS::Serverless::Api' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Subnet3", + "logicalId": "myApi", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::Api" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 17, + "startLine": 7, "startColumn": 5, - "endLine": 17, + "endLine": 7, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -8082,19 +7322,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Subnet4' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'myFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Subnet4", + "logicalId": "myFunction", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 22, + "startLine": 11, "startColumn": 5, - "endLine": 22, + "endLine": 11, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -8102,35 +7342,35 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Subnet5' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "message": "Resource 'myBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Subnet5", + "logicalId": "myBucket", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 28, + "startLine": 73, "startColumn": 5, - "endLine": 28, + "endLine": 73, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "integration/aws-lambda-function.yaml": { - "filePath": "integration/aws-lambda-function.yaml", + "good/transform_serverless_globals.yaml": { + "filePath": "good/transform_serverless_globals.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 1, "counts": { "fatal": 0, - "errors": 0, + "errors": 1, "warnings": 0, - "informational": 2, + "informational": 1, "debug": 0 }, "suppressed": 0, @@ -8139,57 +7379,60 @@ }, "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Function' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs6.10' was deprecated on '2019-08-12'. Creation was disabled on '2019-07-12', and updates were disabled on '2019-08-12'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", "entity": { - "logicalId": "Function", + "logicalId": "myFunction", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 4, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 5, "startColumn": 5, - "endLine": 4, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 5, + "endColumn": 12, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs6.10", + "lifecycle": "end-of-life" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Role' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'myFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Role", + "logicalId": "myFunction", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 10, + "startLine": 12, "startColumn": 5, - "endLine": 10, + "endLine": 12, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "integration/cfn-gather.yaml": { - "filePath": "integration/cfn-gather.yaml", + "good/transform_serverless_ignore_globals.yaml": { + "filePath": "good/transform_serverless_ignore_globals.yaml", "status": "OK", "metadata": { - "resourcesScanned": 17, + "resourcesScanned": 3, "counts": { "fatal": 0, - "errors": 7, - "warnings": 1, - "informational": 55, + "errors": 1, + "warnings": 0, + "informational": 3, "debug": 0 }, "suppressed": 0, @@ -8198,5113 +7441,123 @@ }, "diagnostics": [ { - "ruleId": "E3052", - "severity": "ERROR", - "message": "NetworkConfiguration required when TaskDefinition NetworkMode is 'awsvpc'", - "source": "CFN_LINT", - "entity": { - "logicalId": "ServiceNoNetConfig", - "entityType": "Resource", - "resourceType": "AWS::ECS::Service" - }, - "category": "Resource", - "startLine": 32, - "startColumn": 3, - "endLine": 32, - "endColumn": 21, - "ruleDescription": "Validate ECS service requires NetworkConfiguration", - "phase": "LINT" - }, - { - "ruleId": "E3054", + "ruleId": "E2533", "severity": "ERROR", - "message": "['EC2'] does not contain items matching 'FARGATE'", + "message": "Runtime 'nodejs6.10' was deprecated on '2019-08-12'. Creation was disabled on '2019-07-12', and updates were disabled on '2019-08-12'. Please consider updating to 'nodejs24.x'", "source": "CFN_LINT", "entity": { - "logicalId": "TaskDef", + "logicalId": "InheritsGlobalsFunction", "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.RequiresCompatibilities", - "suggestedFix": "Add 'FARGATE' to RequiresCompatibilities", - "category": "Resource", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 30, - "ruleDescription": "Validate ECS service using Fargate uses TaskDefinition that allows Fargate", - "phase": "LINT" - }, - { - "ruleId": "E3502", - "severity": "ERROR", - "message": "Source queue type 'FIFO' does not match destination queue type 'standard'", - "source": "CFN_LINT", - "entity": { - "logicalId": "FifoQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.RedrivePolicy", - "category": "Resource", - "startLine": 42, - "startColumn": 7, - "endLine": 42, - "endColumn": 20, - "ruleDescription": "Validate SQS DLQ queues are the same type", - "phase": "LINT" - }, - { - "ruleId": "E3698", - "severity": "ERROR", - "message": "{'Ref': 'RestApi2'} was expected", - "source": "CFN_LINT", - "entity": { - "logicalId": "Deployment", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" - }, - "propertyPath": "Properties.RestApiId", - "category": "Resource", - "startLine": 78, - "startColumn": 7, - "endLine": 78, - "endColumn": 16, - "ruleDescription": "API Gateway Stage and Deployment must use the same RestApi", - "phase": "LINT" - }, - { - "ruleId": "E3705", - "severity": "ERROR", - "message": "BatchSize 15 exceeds maximum of 10 for SQS FIFO queue event source", - "source": "CFN_LINT", - "entity": { - "logicalId": "FifoMapping", - "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" - }, - "propertyPath": "Properties.BatchSize", - "category": "Resource", - "startLine": 107, - "startColumn": 7, - "endLine": 107, - "endColumn": 16, - "ruleDescription": "Validate SQS FIFO queue EventSourceMapping BatchSize is at most 10", - "phase": "LINT" - }, - { - "ruleId": "E3707", - "severity": "ERROR", - "message": "DBInstance Engine 'aurora-postgresql' does not match DBCluster Engine 'aurora-mysql'", - "source": "CFN_LINT", - "entity": { - "logicalId": "BadEngineInstance", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Engine", - "category": "Resource", - "startLine": 120, - "startColumn": 7, - "endLine": 120, - "endColumn": 13, - "relatedResources": [ - { - "resource": { - "id": "AuroraCluster", - "resourceType": "AWS::RDS::DBCluster" - }, - "location": { - "startLine": 112, - "startColumn": 7, - "endLine": 112, - "endColumn": 13 - }, - "message": "cluster engine" - } - ], - "ruleDescription": "Validate RDS DBInstance Engine matches DBCluster Engine", - "phase": "LINT" - }, - { - "ruleId": "E3708", - "severity": "ERROR", - "message": "'COGNITO_USER_POOLS' is not one of ['TOKEN', 'REQUEST']", - "source": "CFN_LINT", - "entity": { - "logicalId": "CognitoAuthorizer", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Authorizer" - }, - "propertyPath": "Properties.Type", - "category": "Resource", - "startLine": 58, - "startColumn": 7, - "endLine": 58, - "endColumn": 11, - "ruleDescription": "API Gateway Method AuthorizationType must match Authorizer Type", - "phase": "LINT" - }, - { - "ruleId": "W2501", - "severity": "WARN", - "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", - "source": "CFN_LINT", - "entity": { - "logicalId": "AuroraCluster", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 114, - "startColumn": 7, - "endLine": 114, - "endColumn": 25, - "ruleDescription": "Check if Password Properties are correctly configured", - "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": "FifoQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 37, - "startColumn": 3, - "endLine": 37, - "endColumn": 12, - "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": "FifoQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 37, - "startColumn": 3, - "endLine": 37, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "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": "StandardDLQ", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 45, - "startColumn": 3, - "endLine": 45, - "endColumn": 14, - "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": "StandardDLQ", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 45, - "startColumn": 3, - "endLine": 45, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "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": "SqsFifoQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 86, - "startColumn": 3, - "endLine": 86, - "endColumn": 15, - "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": "SqsFifoQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 86, - "startColumn": 3, - "endLine": 86, - "endColumn": 15, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "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": "AuroraCluster", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "category": "Best Practice", - "startLine": 109, - "startColumn": 3, - "endLine": 109, - "endColumn": 16, - "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": "AuroraCluster", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "category": "Best Practice", - "startLine": 109, - "startColumn": 3, - "endLine": 109, - "endColumn": 16, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "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": "BadEngineInstance", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "category": "Best Practice", - "startLine": 115, - "startColumn": 3, - "endLine": 115, - "endColumn": 20, - "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": "BadEngineInstance", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "category": "Best Practice", - "startLine": 115, - "startColumn": 3, - "endLine": 115, - "endColumn": 20, - "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": "FifoQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 39, - "startColumn": 5, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "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": "StandardDLQ", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 47, - "startColumn": 5, - "endLine": 47, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "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": "SqsFifoQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 88, - "startColumn": 5, - "endLine": 88, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" - }, - { - "ruleId": "I3013", - "severity": "INFO", - "message": "'BackupRetentionPeriod' 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": "AuroraCluster", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 111, - "startColumn": 5, - "endLine": 111, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" - }, - { - "ruleId": "I3042", - "severity": "INFO", - "message": "ARN in Resource CognitoAuthorizer contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", - "source": "CFN_LINT", - "entity": { - "logicalId": "CognitoAuthorizer", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Authorizer" - }, - "propertyPath": "Properties.ProviderARNs.0.Fn::Sub", - "category": "Best Practice", - "startLine": 61, - "startColumn": 16, - "endLine": 61, - "endColumn": 23, - "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", - "phase": "LINT" - }, - { - "ruleId": "I3042", - "severity": "INFO", - "message": "ARN in Resource FifoProcessor contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", - "source": "CFN_LINT", - "entity": { - "logicalId": "FifoProcessor", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Role.Fn::Sub", - "category": "Best Practice", - "startLine": 97, - "startColumn": 7, - "endLine": 97, - "endColumn": 14, - "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDef", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 7, - "startColumn": 7, - "endLine": 7, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDef", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 8, - "startColumn": 7, - "endLine": 8, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDef", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FargateService", - "entityType": "Resource", - "resourceType": "AWS::ECS::Service" - }, - "propertyPath": "Properties.LaunchType", - "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AwsvpcTaskDef", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 27, - "startColumn": 7, - "endLine": 27, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AwsvpcTaskDef", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FifoQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.FifoQueue", - "category": "Best Practice", - "startLine": 40, - "startColumn": 7, - "endLine": 40, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FifoQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.QueueName", - "category": "Best Practice", - "startLine": 41, - "startColumn": 7, - "endLine": 41, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "StandardDLQ", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.FifoQueue", - "category": "Best Practice", - "startLine": 48, - "startColumn": 7, - "endLine": 48, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CognitoAuthorizer", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Authorizer" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 57, - "startColumn": 7, - "endLine": 57, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'RestApi'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MethodBadAuth", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 65, - "startColumn": 7, - "endLine": 65, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'RestApi'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MethodBadAuth", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.ResourceId", - "category": "Best Practice", - "startLine": 66, - "startColumn": 7, - "endLine": 66, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt RestApi.RootResourceId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MethodBadAuth", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Method" - }, - "propertyPath": "Properties.HttpMethod", - "category": "Best Practice", - "startLine": 67, - "startColumn": 7, - "endLine": 67, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Deployment", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Deployment" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 78, - "startColumn": 7, - "endLine": 78, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'RestApi'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "StageBadApi", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" - }, - "propertyPath": "Properties.RestApiId", - "category": "Best Practice", - "startLine": 82, - "startColumn": 7, - "endLine": 82, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'RestApi2'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'StageName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "StageBadApi", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" - }, - "propertyPath": "Properties.StageName", - "category": "Best Practice", - "startLine": 84, - "startColumn": 7, - "endLine": 84, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SqsFifoQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.FifoQueue", - "category": "Best Practice", - "startLine": 89, - "startColumn": 7, - "endLine": 89, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SqsFifoQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.QueueName", - "category": "Best Practice", - "startLine": 90, - "startColumn": 7, - "endLine": 90, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FifoProcessor", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 94, - "startColumn": 7, - "endLine": 94, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "FifoMapping", - "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" - }, - "propertyPath": "Properties.EventSourceArn", - "category": "Best Practice", - "startLine": 105, - "startColumn": 7, - "endLine": 105, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt SqsFifoQueue.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AuroraCluster", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 112, - "startColumn": 7, - "endLine": 112, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "AuroraCluster", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "propertyPath": "Properties.MasterUsername", - "category": "Best Practice", - "startLine": 113, - "startColumn": 7, - "endLine": 113, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BadEngineInstance", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.DBClusterIdentifier", - "category": "Best Practice", - "startLine": 118, - "startColumn": 7, - "endLine": 118, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'AuroraCluster'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "BadEngineInstance", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Engine", - "category": "Best Practice", - "startLine": 120, - "startColumn": 7, - "endLine": 120, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDef", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FargateService' of type 'AWS::ECS::Service' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FargateService", - "entityType": "Resource", - "resourceType": "AWS::ECS::Service" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 16, - "startColumn": 5, - "endLine": 16, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'AwsvpcTaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "AwsvpcTaskDef", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 26, - "startColumn": 5, - "endLine": 26, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ServiceNoNetConfig' of type 'AWS::ECS::Service' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ServiceNoNetConfig", - "entityType": "Resource", - "resourceType": "AWS::ECS::Service" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 34, - "startColumn": 5, - "endLine": 34, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FifoQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FifoQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 39, - "startColumn": 5, - "endLine": 39, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'StandardDLQ' of type 'AWS::SQS::Queue' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "StandardDLQ", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 47, - "startColumn": 5, - "endLine": 47, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'RestApi' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "RestApi", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 52, - "startColumn": 5, - "endLine": 52, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'RestApi2' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "RestApi2", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::RestApi" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 73, - "startColumn": 5, - "endLine": 73, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'StageBadApi' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "StageBadApi", - "entityType": "Resource", - "resourceType": "AWS::ApiGateway::Stage" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 81, - "startColumn": 5, - "endLine": 81, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SqsFifoQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SqsFifoQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 88, - "startColumn": 5, - "endLine": 88, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FifoProcessor' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FifoProcessor", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 93, - "startColumn": 5, - "endLine": 93, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FifoMapping' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FifoMapping", - "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 104, - "startColumn": 5, - "endLine": 104, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'AuroraCluster' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "AuroraCluster", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 111, - "startColumn": 5, - "endLine": 111, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BadEngineInstance' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BadEngineInstance", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 117, - "startColumn": 5, - "endLine": 117, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "integration/custom-resources.yaml": { - "filePath": "integration/custom-resources.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 2, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E9004", - "severity": "ERROR", - "message": "'ArnA' is not one of ['Arn', 'KeyId']", - "source": "SCHEMA", - "entity": { - "logicalId": "CustomResource", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::CustomResource" - }, - "propertyPath": "Properties.KmsKeyId", - "suggestedFix": "Check the resource type documentation for valid GetAtt attributes", - "category": "Intrinsic Function", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 15, - "ruleDescription": "GetAtt attribute must exist on target resource type", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CustomResource", - "entityType": "Resource", - "resourceType": "AWS::CloudFormation::CustomResource" - }, - "propertyPath": "Properties.ServiceToken", - "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'KmsKey' of type 'AWS::KMS::Key' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "KmsKey", - "entityType": "Resource", - "resourceType": "AWS::KMS::Key" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "integration/deployment-file-template.yaml": { - "filePath": "integration/deployment-file-template.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 3, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 13, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Vpc", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 24, - "startColumn": 7, - "endLine": 24, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 29, - "startColumn": 7, - "endLine": 29, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 30, - "startColumn": 7, - "endLine": 30, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Affinity' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.Affinity", - "category": "Best Practice", - "startLine": 34, - "startColumn": 7, - "endLine": 34, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'ImageId' (type AWS::EC2::Image::Id)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 36, - "startColumn": 7, - "endLine": 36, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.SubnetId", - "category": "Best Practice", - "startLine": 37, - "startColumn": 7, - "endLine": 37, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt Subnet1.SubnetId" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Tenancy' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.Tenancy", - "category": "Best Practice", - "startLine": 38, - "startColumn": 7, - "endLine": 38, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "parameter with AllowedValues" - } - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Vpc", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 23, - "startColumn": 5, - "endLine": 23, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Subnet1' of type 'AWS::EC2::Subnet' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 27, - "startColumn": 5, - "endLine": 27, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MyInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 33, - "startColumn": 5, - "endLine": 33, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "integration/dynamic-references.yaml": { - "filePath": "integration/dynamic-references.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 1, - "informational": 11, - "debug": 0 - }, - "suppressed": 1, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F3031", - "severity": "FATAL", - "message": "'{{:ssm:/SQS_Queue/SQS_ARN}}' does not match pattern 'arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:((eusc-)?[a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)'", - "source": "SCHEMA", - "entity": { - "logicalId": "SESEventSourceMappingBadDynamicReference", - "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" - }, - "propertyPath": "Properties.EventSourceArn", - "category": "Schema", - "startLine": 16, - "startColumn": 7, - "endLine": 16, - "endColumn": 21, - "ruleDescription": "Value does not match pattern", - "phase": "SCHEMA", - "context": { - "actualValue": "{{:ssm:/SQS_Queue/SQS_ARN}}", - "expectedConstraint": "arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:((eusc-)?[a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)" - } - }, - { - "ruleId": "W1053", - "severity": "WARN", - "message": "'{{ resolve:ssm:/SQS_Queue/SQS_ARN }}' has spaces and will not be resolved as a dynamic reference. Remove spaces from '{{resolve:...}}'", - "source": "CFN_LINT", - "entity": { - "logicalId": "SESEventSourceMappingSpaces", - "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" - }, - "propertyPath": "Properties.EventSourceArn", - "suggestedFix": "Remove spaces from the dynamic reference", - "category": "Best Practice", - "startLine": 37, - "startColumn": 7, - "endLine": 37, - "endColumn": 21, - "ruleDescription": "Dynamic references should not contain spaces", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SESEventSourceMapping", - "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" - }, - "propertyPath": "Properties.EventSourceArn", - "category": "Best Practice", - "startLine": 9, - "startColumn": 7, - "endLine": 9, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (dynamic reference: {{resolve:ssm:/SQS_Queue/SQS_ARN}})" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SESEventSourceMappingBadDynamicReference", - "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" - }, - "propertyPath": "Properties.EventSourceArn", - "category": "Best Practice", - "startLine": 16, - "startColumn": 7, - "endLine": 16, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'DeploymentMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Broker", - "entityType": "Resource", - "resourceType": "AWS::AmazonMQ::Broker" - }, - "propertyPath": "Properties.DeploymentMode", - "category": "Best Practice", - "startLine": 24, - "startColumn": 9, - "endLine": 24, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'EngineType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Broker", - "entityType": "Resource", - "resourceType": "AWS::AmazonMQ::Broker" - }, - "propertyPath": "Properties.EngineType", - "category": "Best Practice", - "startLine": 25, - "startColumn": 9, - "endLine": 25, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BrokerName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Broker", - "entityType": "Resource", - "resourceType": "AWS::AmazonMQ::Broker" - }, - "propertyPath": "Properties.BrokerName", - "category": "Best Practice", - "startLine": 30, - "startColumn": 9, - "endLine": 30, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'PubliclyAccessible' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Broker", - "entityType": "Resource", - "resourceType": "AWS::AmazonMQ::Broker" - }, - "propertyPath": "Properties.PubliclyAccessible", - "category": "Best Practice", - "startLine": 31, - "startColumn": 9, - "endLine": 31, - "endColumn": 27, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SESEventSourceMappingSpaces", - "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" - }, - "propertyPath": "Properties.EventSourceArn", - "category": "Best Practice", - "startLine": 37, - "startColumn": 7, - "endLine": 37, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SESEventSourceMapping' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SESEventSourceMapping", - "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 6, - "startColumn": 5, - "endLine": 6, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SESEventSourceMappingBadDynamicReference' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SESEventSourceMappingBadDynamicReference", - "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 13, - "startColumn": 5, - "endLine": 13, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Broker' of type 'AWS::AmazonMQ::Broker' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Broker", - "entityType": "Resource", - "resourceType": "AWS::AmazonMQ::Broker" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SESEventSourceMappingSpaces' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SESEventSourceMappingSpaces", - "entityType": "Resource", - "resourceType": "AWS::Lambda::EventSourceMapping" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 34, - "startColumn": 5, - "endLine": 34, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "integration/formats.yaml": { - "filePath": "integration/formats.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 4, - "counts": { - "fatal": 0, - "errors": 2, - "warnings": 4, - "informational": 13, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E1040", - "severity": "ERROR", - "message": "{'Fn::GetAtt': ['SecurityGroup', 'GroupName']} does not match destination format of 'AWS::EC2::SecurityGroup.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Instance1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.NetworkInterfaces.2.GroupSet.0", - "suggestedFix": "Use the correct GetAtt attribute", - "category": "Intrinsic Function", - "startLine": 44, - "startColumn": 21, - "endLine": 44, - "endColumn": 22, - "ruleDescription": "Check if GetAtt matches destination format", - "phase": "LINT" - }, - { - "ruleId": "E1150", - "severity": "ERROR", - "message": "'sg-dne' does not match format 'AWS::EC2::SecurityGroup.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Instance1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.NetworkInterfaces.1.GroupSet.3", - "category": "Intrinsic Function", - "startLine": 40, - "startColumn": 13, - "endLine": 40, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Validate security group format", - "phase": "SCHEMA", - "context": { - "actualValue": "sg-dne" - } - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "0 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", - "entity": { - "logicalId": "Instance1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.NetworkInterfaces.0.DeviceIndex", - "category": "Best Practice", - "startLine": 31, - "startColumn": 11, - "endLine": 31, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", - "entity": { - "logicalId": "Instance1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.NetworkInterfaces.1.DeviceIndex", - "category": "Best Practice", - "startLine": 34, - "startColumn": 11, - "endLine": 34, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9003", - "severity": "WARN", - "message": "2 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", - "entity": { - "logicalId": "Instance1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.NetworkInterfaces.2.DeviceIndex", - "category": "Best Practice", - "startLine": 41, - "startColumn": 11, - "endLine": 41, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" - }, - { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", - "source": "ENGINE", - "entity": { - "logicalId": "Instance1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Vpc", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 16, - "startColumn": 7, - "endLine": 16, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 17, - "startColumn": 7, - "endLine": 17, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 22, - "startColumn": 7, - "endLine": 22, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Instance1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 28, - "startColumn": 7, - "endLine": 28, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Instance1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 29, - "startColumn": 7, - "endLine": 29, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Instance1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.NetworkInterfaces", - "category": "Best Practice", - "startLine": 30, - "startColumn": 7, - "endLine": 30, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Vpc", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 10, - "startColumn": 5, - "endLine": 10, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Subnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 15, - "startColumn": 5, - "endLine": 15, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 21, - "startColumn": 5, - "endLine": 21, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Instance1' of type 'AWS::EC2::Instance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Instance1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 27, - "startColumn": 5, - "endLine": 27, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "integration/get-stack-output.yaml": { - "filePath": "integration/get-stack-output.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 2, - "warnings": 0, - "informational": 5, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E1033", - "severity": "ERROR", - "message": "'OutputName' is a required property", - "source": "SCHEMA", - "entity": { - "logicalId": "InvalidMissing", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", - "category": "Intrinsic Function", - "startLine": 47, - "startColumn": 9, - "endLine": 47, - "endColumn": 27, - "ruleDescription": "GetStackOutput validation of parameters", - "phase": "PARSE" - }, - { - "ruleId": "E1033", - "severity": "ERROR", - "message": "'not-an-object' is not of type 'object'", - "source": "SCHEMA", - "entity": { - "logicalId": "InvalidType", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", - "category": "Intrinsic Function", - "startLine": 54, - "startColumn": 9, - "endLine": 54, - "endColumn": 27, - "ruleDescription": "GetStackOutput validation of parameters", - "phase": "PARSE" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ValidTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ValidTopic", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 15, - "startColumn": 5, - "endLine": 15, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ValidJoin' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ValidJoin", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 23, - "startColumn": 5, - "endLine": 23, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ValidIf' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ValidIf", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 34, - "startColumn": 5, - "endLine": 34, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'InvalidMissing' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "InvalidMissing", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 45, - "startColumn": 5, - "endLine": 45, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'InvalidType' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "InvalidType", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 52, - "startColumn": 5, - "endLine": 52, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "integration/getatt-types.yaml": { - "filePath": "integration/getatt-types.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 8, - "counts": { - "fatal": 5, - "errors": 1, - "warnings": 0, - "informational": 19, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Output 'SubWithGetAtt': GetAtt 'CapacityReservation.InstanceCount' returns type 'integer', not 'string'", - "source": "SCHEMA", - "entity": { - "logicalId": "SubWithGetAtt", - "entityType": "Output" - }, - "propertyPath": "Outputs/SubWithGetAtt/Value.Fn::GetAtt", - "category": "Structure", - "startLine": 84, - "startColumn": 3, - "endLine": 84, - "endColumn": 16, - "ruleDescription": "Output value must be a string", - "phase": "SCHEMA" - }, - { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Output 'Ipv4NetmaskLength': GetAtt 'CapacityReservation.InstanceCount' returns type 'integer', not 'string'", - "source": "SCHEMA", - "entity": { - "logicalId": "Ipv4NetmaskLength", - "entityType": "Output" - }, - "propertyPath": "Outputs/Ipv4NetmaskLength/Value.Fn::GetAtt", - "category": "Structure", - "startLine": 86, - "startColumn": 3, - "endLine": 86, - "endColumn": 20, - "ruleDescription": "Output value must be a string", - "phase": "SCHEMA" - }, - { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Output 'String': GetAtt 'CapacityReservation.InstanceCount' returns type 'integer', not 'string'", - "source": "SCHEMA", - "entity": { - "logicalId": "String", - "entityType": "Output" - }, - "propertyPath": "Outputs/String/Value.Fn::Sub", - "category": "Structure", - "startLine": 88, - "startColumn": 3, - "endLine": 88, - "endColumn": 9, - "ruleDescription": "Output value must be a string", - "phase": "SCHEMA" - }, - { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Output 'JoinWithGetAtt': GetAtt 'CapacityReservation.InstanceCount' returns type 'integer', not 'string'", - "source": "SCHEMA", - "entity": { - "logicalId": "JoinWithGetAtt", - "entityType": "Output" - }, - "propertyPath": "Outputs/JoinWithGetAtt/Value.Fn::Join.1.0.Fn::GetAtt", - "category": "Structure", - "startLine": 92, - "startColumn": 3, - "endLine": 92, - "endColumn": 17, - "ruleDescription": "Output value must be a string", - "phase": "SCHEMA" - }, - { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Output 'BooleanGetAtt': GetAtt 'CapacityReservation.EphemeralStorage' returns type 'boolean', not 'string'", - "source": "SCHEMA", - "entity": { - "logicalId": "BooleanGetAtt", - "entityType": "Output" - }, - "propertyPath": "Outputs/BooleanGetAtt/Value.Fn::GetAtt", - "category": "Structure", - "startLine": 96, - "startColumn": 3, - "endLine": 96, - "endColumn": 16, - "ruleDescription": "Output value must be a string", - "phase": "SCHEMA" - }, - { - "ruleId": "E1040", - "severity": "ERROR", - "message": "{'Fn::GetAtt': ['TestLogGroup', 'Arn']} does not match destination format of 'AWS::Logs::LogGroup.Name'", - "source": "CFN_LINT", - "entity": { - "logicalId": "TestTaskDefinitionWithGetAtt", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.ContainerDefinitions.0.LogConfiguration.Options.awslogs-group", - "suggestedFix": "Use the correct GetAtt attribute", - "category": "Intrinsic Function", - "startLine": 62, - "startColumn": 15, - "endLine": 62, - "endColumn": 28, - "ruleDescription": "Check if GetAtt matches destination format", - "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "Join", - "entityType": "Output" - }, - "propertyPath": "Outputs/Join/Value.Fn::Join", - "category": "Intrinsic Function", - "startLine": 90, - "startColumn": 3, - "endLine": 90, - "endColumn": 7, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, - { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", - "entity": { - "logicalId": "JoinWithGetAtt", - "entityType": "Output" - }, - "propertyPath": "Outputs/JoinWithGetAtt/Value.Fn::Join", - "category": "Intrinsic Function", - "startLine": 92, - "startColumn": 3, - "endLine": 92, - "endColumn": 17, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CapacityReservation", - "entityType": "Resource", - "resourceType": "AWS::EC2::CapacityReservation" - }, - "propertyPath": "Properties.AvailabilityZone", - "category": "Best Practice", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CapacityReservation", - "entityType": "Resource", - "resourceType": "AWS::EC2::CapacityReservation" - }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 12, - "startColumn": 7, - "endLine": 12, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstancePlatform' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "CapacityReservation", - "entityType": "Resource", - "resourceType": "AWS::EC2::CapacityReservation" - }, - "propertyPath": "Properties.InstancePlatform", - "category": "Best Practice", - "startLine": 13, - "startColumn": 7, - "endLine": 13, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TestTaskDefinitionWithGetAtt", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 57, - "startColumn": 7, - "endLine": 57, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TestTaskDefinitionWithGetAtt", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Cpu", - "category": "Best Practice", - "startLine": 68, - "startColumn": 7, - "endLine": 68, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TestTaskDefinitionWithGetAtt", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.ExecutionRoleArn", - "category": "Best Practice", - "startLine": 69, - "startColumn": 7, - "endLine": 69, - "endColumn": 23, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt TestFargateExecutionRole.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TestTaskDefinitionWithGetAtt", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Memory", - "category": "Best Practice", - "startLine": 70, - "startColumn": 7, - "endLine": 70, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TestTaskDefinitionWithGetAtt", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 71, - "startColumn": 7, - "endLine": 71, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TestTaskDefinitionWithGetAtt", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 72, - "startColumn": 7, - "endLine": 72, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TestTaskDefinitionWithGetAtt", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.TaskRoleArn", - "category": "Best Practice", - "startLine": 74, - "startColumn": 7, - "endLine": 74, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt TestFargateTaskRole.Arn" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SsmParameter' of type 'AWS::SSM::Parameter' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SsmParameter", - "entityType": "Resource", - "resourceType": "AWS::SSM::Parameter" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 16, - "startColumn": 5, - "endLine": 16, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DocDBCluster' of type 'AWS::DocDB::DBCluster' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "DocDBCluster", - "entityType": "Resource", - "resourceType": "AWS::DocDB::DBCluster" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 23, - "startColumn": 5, - "endLine": 23, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TestCluster' of type 'AWS::ECS::Cluster' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TestCluster", - "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 25, - "startColumn": 3, - "endLine": 25, - "endColumn": 14, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TestFargateExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TestFargateExecutionRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 29, - "startColumn": 5, - "endLine": 29, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TestFargateTaskRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TestFargateTaskRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 42, - "startColumn": 5, - "endLine": 42, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TestLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TestLogGroup", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 50, - "startColumn": 3, - "endLine": 50, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TestTaskDefinitionWithGetAtt' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TestTaskDefinitionWithGetAtt", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 56, - "startColumn": 5, - "endLine": 56, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "integration/metdata.yaml": { - "filePath": "integration/metdata.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 0, - "counts": { - "fatal": 1, - "errors": 0, - "warnings": 1, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F0001", - "severity": "FATAL", - "message": "Resources section must exist and be non-empty", - "source": "SCHEMA", - "category": "Structure", - "startLine": 21, - "startColumn": 1, - "endLine": 21, - "endColumn": 10, - "ruleDescription": "Resources section must exist and be non-empty", - "phase": "SCHEMA" - }, - { - "ruleId": "W2001", - "severity": "WARN", - "message": "Parameter 'VpcId' is not referenced anywhere in the template", - "source": "CFN_LINT", - "entity": { - "logicalId": "VpcId", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/VpcId", - "category": "Best Practice", - "startLine": 17, - "startColumn": 3, - "endLine": 17, - "endColumn": 8, - "ruleDescription": "Check if Parameters are Used", - "phase": "LINT" - } - ] - }, - "integration/module-sub-resources.yaml": { - "filePath": "integration/module-sub-resources.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 0, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [] - }, - "integration/ref-no-value.yaml": { - "filePath": "integration/ref-no-value.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 7, - "warnings": 0, - "informational": 2, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3003", - "severity": "ERROR", - "message": "'Key' is a required property", - "source": "CFN_LINT", - "entity": { - "logicalId": "IamRole1", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Tag Key cannot be null or AWS::NoValue", - "category": "Resource", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 11, - "ruleDescription": "Required Resource properties are missing", - "phase": "LINT" - }, - { - "ruleId": "E3003", - "severity": "ERROR", - "message": "'DefaultCacheBehavior' is a required property", - "source": "CFN_LINT", - "entity": { - "logicalId": "CloudFront2", - "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" - }, - "propertyPath": "Properties.DistributionConfig", - "suggestedFix": "Add DefaultCacheBehavior to the Fn::If branch", - "category": "Resource", - "startLine": 43, - "startColumn": 7, - "endLine": 43, - "endColumn": 25, - "ruleDescription": "Required Resource properties are missing", - "phase": "LINT" - }, - { - "ruleId": "E3003", - "severity": "ERROR", - "message": "'TargetOriginId' is a required property", - "source": "CFN_LINT", - "entity": { - "logicalId": "CloudFront2", - "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" - }, - "propertyPath": "Properties.DistributionConfig.DefaultCacheBehavior.Fn::If.2", - "suggestedFix": "Add TargetOriginId to the DefaultCacheBehavior", - "category": "Resource", - "startLine": 49, - "startColumn": 13, - "endLine": 49, - "endColumn": 14, - "ruleDescription": "Required Resource properties are missing", - "phase": "LINT" - }, - { - "ruleId": "E3003", - "severity": "ERROR", - "message": "'ViewerProtocolPolicy' is a required property", - "source": "CFN_LINT", - "entity": { - "logicalId": "CloudFront2", - "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" - }, - "propertyPath": "Properties.DistributionConfig.DefaultCacheBehavior.Fn::If.2", - "suggestedFix": "Add ViewerProtocolPolicy to the DefaultCacheBehavior", - "category": "Resource", - "startLine": 49, - "startColumn": 13, - "endLine": 49, - "endColumn": 14, - "ruleDescription": "Required Resource properties are missing", - "phase": "LINT" - }, - { - "ruleId": "E3024", - "severity": "ERROR", - "message": "'Key' is a required property", - "source": "CFN_LINT", - "entity": { - "logicalId": "IamRole1", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Tag Key cannot be null or AWS::NoValue", - "category": "Resource", - "startLine": 11, - "startColumn": 7, - "endLine": 11, - "endColumn": 11, - "ruleDescription": "Validate tag configuration", - "phase": "LINT" - }, - { - "ruleId": "E3530", - "severity": "ERROR", - "message": "'Statement' is a required property", - "source": "CFN_LINT", - "entity": { - "logicalId": "IamRole1", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.AssumeRolePolicyDocument", - "suggestedFix": "Add a Statement array to the AssumeRolePolicyDocument", - "category": "Resource", - "startLine": 10, - "startColumn": 7, - "endLine": 10, - "endColumn": 31, - "ruleDescription": "Validate IAM trust policies", - "phase": "LINT" - }, - { - "ruleId": "E3530", - "severity": "ERROR", - "message": "'Statement' is a required property", - "source": "CFN_LINT", - "entity": { - "logicalId": "IamRole3", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.AssumeRolePolicyDocument", - "suggestedFix": "Add a Statement array to the AssumeRolePolicyDocument", - "category": "Resource", - "startLine": 30, - "startColumn": 7, - "endLine": 30, - "endColumn": 31, - "ruleDescription": "Validate IAM trust policies", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'IamRole3' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "IamRole3", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 31, - "startColumn": 7, - "endLine": 31, - "endColumn": 11, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'CloudFront2' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "CloudFront2", - "entityType": "Resource", - "resourceType": "AWS::CloudFront::Distribution" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 42, - "startColumn": 5, - "endLine": 42, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "integration/ref-types.yaml": { - "filePath": "integration/ref-types.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 13, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 1, - "informational": 40, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E1041", - "severity": "ERROR", - "message": "{'Ref': 'FargateTaskRole'} does not match destination format of 'AWS::EC2::VPC.Id'", - "source": "CFN_LINT", - "entity": { - "logicalId": "Subnet2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "suggestedFix": "Use a Ref to a resource whose type matches the expected format", - "category": "Intrinsic Function", - "startLine": 45, - "startColumn": 7, - "endLine": 45, - "endColumn": 12, - "ruleDescription": "Check if Ref matches destination format", - "phase": "LINT" - }, - { - "ruleId": "W3697", - "severity": "WARN", - "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", - "source": "CFN_LINT", - "entity": { - "logicalId": "LaunchConfiguration", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "category": "Deprecation", - "startLine": 111, - "startColumn": 3, - "endLine": 111, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Resource type is from a service in maintenance mode", - "phase": "SCHEMA" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Vpc", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 35, - "startColumn": 7, - "endLine": 35, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 39, - "startColumn": 7, - "endLine": 39, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 40, - "startColumn": 7, - "endLine": 40, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.CidrBlock", - "category": "Best Practice", - "startLine": 44, - "startColumn": 7, - "endLine": 44, - "endColumn": 16, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 45, - "startColumn": 7, - "endLine": 45, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'FargateTaskRole'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SecurityGroup1", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 49, - "startColumn": 7, - "endLine": 49, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SecurityGroup1", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 50, - "startColumn": 7, - "endLine": 50, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'Vpc'" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "SecurityGroup2", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 54, - "startColumn": 7, - "endLine": 54, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Type' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LoadBalancer", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" - }, - "propertyPath": "Properties.Type", - "category": "Best Practice", - "startLine": 58, - "startColumn": 7, - "endLine": 58, - "endColumn": 11, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LoadBalancer", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" - }, - "propertyPath": "Properties.Scheme", - "category": "Best Practice", - "startLine": 59, - "startColumn": 7, - "endLine": 59, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDefinitionWithRefToResource", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 72, - "startColumn": 7, - "endLine": 72, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDefinitionWithRefToResource", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Cpu", - "category": "Best Practice", - "startLine": 83, - "startColumn": 7, - "endLine": 83, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDefinitionWithRefToResource", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.ExecutionRoleArn", - "category": "Best Practice", - "startLine": 84, - "startColumn": 7, - "endLine": 84, - "endColumn": 23, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateExecutionRole.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDefinitionWithRefToResource", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Memory", - "category": "Best Practice", - "startLine": 85, - "startColumn": 7, - "endLine": 85, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDefinitionWithRefToResource", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 86, - "startColumn": 7, - "endLine": 86, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDefinitionWithRefToResource", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 87, - "startColumn": 7, - "endLine": 87, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDefinitionWithRefToResource", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.TaskRoleArn", - "category": "Best Practice", - "startLine": 89, - "startColumn": 7, - "endLine": 89, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateTaskRole.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDefinitionWithRefToParameter", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.ContainerDefinitions", - "category": "Best Practice", - "startLine": 93, - "startColumn": 7, - "endLine": 93, - "endColumn": 27, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDefinitionWithRefToParameter", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Cpu", - "category": "Best Practice", - "startLine": 104, - "startColumn": 7, - "endLine": 104, - "endColumn": 10, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDefinitionWithRefToParameter", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.ExecutionRoleArn", - "category": "Best Practice", - "startLine": 105, - "startColumn": 7, - "endLine": 105, - "endColumn": 23, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateExecutionRole.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Memory' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDefinitionWithRefToParameter", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Memory", - "category": "Best Practice", - "startLine": 106, - "startColumn": 7, - "endLine": 106, - "endColumn": 13, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDefinitionWithRefToParameter", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.NetworkMode", - "category": "Best Practice", - "startLine": 107, - "startColumn": 7, - "endLine": 107, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDefinitionWithRefToParameter", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.RequiresCompatibilities", - "category": "Best Practice", - "startLine": 108, - "startColumn": 7, - "endLine": 108, - "endColumn": 30, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDefinitionWithRefToParameter", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.TaskRoleArn", - "category": "Best Practice", - "startLine": 110, - "startColumn": 7, - "endLine": 110, - "endColumn": 18, - "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FargateTaskRole.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LaunchConfiguration", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 114, - "startColumn": 7, - "endLine": 114, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LaunchConfiguration", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 115, - "startColumn": 7, - "endLine": 115, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AssociatePublicIpAddress' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LaunchConfiguration", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.AssociatePublicIpAddress", - "category": "Best Practice", - "startLine": 116, - "startColumn": 7, - "endLine": 116, - "endColumn": 31, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LaunchConfiguration", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::LaunchConfiguration" - }, - "propertyPath": "Properties.SecurityGroups", - "category": "Best Practice", - "startLine": 117, - "startColumn": 7, - "endLine": 117, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Cluster' of type 'AWS::ECS::Cluster' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Cluster", - "entityType": "Resource", - "resourceType": "AWS::ECS::Cluster" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 7, - "startColumn": 3, - "endLine": 7, - "endColumn": 10, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FargateExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FargateExecutionRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 11, - "startColumn": 5, - "endLine": 11, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FargateTaskRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "FargateTaskRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 24, - "startColumn": 5, - "endLine": 24, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Vpc", - "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 34, - "startColumn": 5, - "endLine": 34, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Subnet1' of type 'AWS::EC2::Subnet' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet1", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 38, - "startColumn": 5, - "endLine": 38, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Subnet2' of type 'AWS::EC2::Subnet' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Subnet2", - "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 43, - "startColumn": 5, - "endLine": 43, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SecurityGroup1' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SecurityGroup1", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 48, - "startColumn": 5, - "endLine": 48, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'SecurityGroup2' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "SecurityGroup2", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 53, - "startColumn": 5, - "endLine": 53, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LoadBalancer' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "LoadBalancer", - "entityType": "Resource", - "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 57, - "startColumn": 5, - "endLine": 57, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'LogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "LogGroup", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 65, - "startColumn": 3, - "endLine": 65, - "endColumn": 11, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TaskDefinitionWithRefToResource' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDefinitionWithRefToResource", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 71, - "startColumn": 5, - "endLine": 71, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'TaskDefinitionWithRefToParameter' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "TaskDefinitionWithRefToParameter", - "entityType": "Resource", - "resourceType": "AWS::ECS::TaskDefinition" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 92, - "startColumn": 5, - "endLine": 92, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "integration/resources-cloudformation-init.yaml": { - "filePath": "integration/resources-cloudformation-init.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 2, - "informational": 2, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "W2509", - "severity": "WARN", - "message": "Parameter 'DBPassword' appears to be a password but does not have NoEcho set to true", - "source": "ENGINE", - "entity": { - "logicalId": "DBPassword", - "entityType": "Parameter" - }, - "propertyPath": "Parameters/DBPassword", - "category": "Security", - "startLine": 6, - "startColumn": 3, - "endLine": 6, - "endColumn": 13, - "ruleDescription": "Password parameter should have NoEcho", - "phase": "LINT" - }, - { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", - "source": "ENGINE", - "entity": { - "logicalId": "MyInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 94, - "startColumn": 7, - "endLine": 94, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "MyInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 94, - "startColumn": 7, - "endLine": 94, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MyInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "MyInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 93, - "startColumn": 5, - "endLine": 93, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "issues/sam_w_conditions.yaml": { - "filePath": "issues/sam_w_conditions.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 17, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 37, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "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": "VmdEventsQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 203, - "startColumn": 3, - "endLine": 203, - "endColumn": 17, - "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": "VmdEventsQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 203, - "startColumn": 3, - "endLine": 203, - "endColumn": 17, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "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": "VmdEventsDeadLetterQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 214, - "startColumn": 3, - "endLine": 214, - "endColumn": 27, - "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": "VmdEventsDeadLetterQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 214, - "startColumn": 3, - "endLine": 214, - "endColumn": 27, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "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": "DmdEventsQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 328, - "startColumn": 3, - "endLine": 328, - "endColumn": 17, - "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": "DmdEventsQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 328, - "startColumn": 3, - "endLine": 328, - "endColumn": 17, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "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": "DmdEventsDeadLetterQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 339, - "startColumn": 3, - "endLine": 339, - "endColumn": 27, - "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": "DmdEventsDeadLetterQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "category": "Best Practice", - "startLine": 339, - "startColumn": 3, - "endLine": 339, - "endColumn": 27, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ManagedPolicyName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DeniedPolicies", - "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" - }, - "propertyPath": "Properties.ManagedPolicyName", - "category": "Best Practice", - "startLine": 118, - "startColumn": 7, - "endLine": 118, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:${GlobalPrefix}-${ComponentShortName}-DeniedPolicies-${TenantAwsResource})" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DeniedPolicies", - "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" - }, - "propertyPath": "Properties.Description", - "category": "Best Practice", - "startLine": 119, - "startColumn": 7, - "endLine": 119, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DeniedPolicies", - "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" - }, - "propertyPath": "Properties.Path", - "category": "Best Practice", - "startLine": 120, - "startColumn": 7, - "endLine": 120, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ManagedPolicyName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LogMonitoringPolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" - }, - "propertyPath": "Properties.ManagedPolicyName", - "category": "Best Practice", - "startLine": 138, - "startColumn": 7, - "endLine": 138, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:${GlobalPrefix}-${ComponentShortName}-LogMonitoringPolicy-${TenantAwsResource})" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LogMonitoringPolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" - }, - "propertyPath": "Properties.Description", - "category": "Best Practice", - "startLine": 139, - "startColumn": 7, - "endLine": 139, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "LogMonitoringPolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" - }, - "propertyPath": "Properties.Path", - "category": "Best Practice", - "startLine": 140, - "startColumn": 7, - "endLine": 140, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Description' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "TenantInfoReadPolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" - }, - "propertyPath": "Properties.Description", - "category": "Best Practice", - "startLine": 154, - "startColumn": 7, - "endLine": 154, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VmdEventsQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.QueueName", - "category": "Best Practice", - "startLine": 207, - "startColumn": 7, - "endLine": 207, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:${Solution}-${Environment}-${ComponentShortName}-VmdEventsQueue-${TenantAwsResource}.fifo)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VmdEventsQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.FifoQueue", - "category": "Best Practice", - "startLine": 209, - "startColumn": 7, - "endLine": 209, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VmdEventsDeadLetterQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.QueueName", - "category": "Best Practice", - "startLine": 218, - "startColumn": 7, - "endLine": 218, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:${Solution}-${Environment}-${ComponentShortName}-VmdEventsDeadLetterQueue-${TenantAwsResource}.fifo)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VmdEventsDeadLetterQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.FifoQueue", - "category": "Best Practice", - "startLine": 220, - "startColumn": 7, - "endLine": 220, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VmdEventsSubscription", - "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" - }, - "propertyPath": "Properties.Protocol", - "category": "Best Practice", - "startLine": 265, - "startColumn": 7, - "endLine": 265, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VmdEventsSubscription", - "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" - }, - "propertyPath": "Properties.Endpoint", - "category": "Best Practice", - "startLine": 266, - "startColumn": 7, - "endLine": 266, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt VmdEventsQueue.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Region' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VmdEventsSubscription", - "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" - }, - "propertyPath": "Properties.Region", - "category": "Best Practice", - "startLine": 267, - "startColumn": 7, - "endLine": 267, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "parameter 'VmdEventsSourceRegion' (type String)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "VmdEventsSubscription", - "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" - }, - "propertyPath": "Properties.TopicArn", - "category": "Best Practice", - "startLine": 268, - "startColumn": 7, - "endLine": 268, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'VmdEventsSourceArn' (type String)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DmdEventsQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.QueueName", - "category": "Best Practice", - "startLine": 332, - "startColumn": 7, - "endLine": 332, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:${Solution}-${Environment}-${ComponentShortName}-DmdEventsQueue-${TenantAwsResource}.fifo)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DmdEventsQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.FifoQueue", - "category": "Best Practice", - "startLine": 334, - "startColumn": 7, - "endLine": 334, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DmdEventsDeadLetterQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.QueueName", - "category": "Best Practice", - "startLine": 343, - "startColumn": 7, - "endLine": 343, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:${Solution}-${Environment}-${ComponentShortName}-DmdEventsDeadLetterQueue-${TenantAwsResource}.fifo)" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DmdEventsDeadLetterQueue", - "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" - }, - "propertyPath": "Properties.FifoQueue", - "category": "Best Practice", - "startLine": 345, - "startColumn": 7, - "endLine": 345, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 12, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "nodejs6.10", + "lifecycle": "end-of-life" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "message": "Resource 'IgnoredFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DmdEventsSubscription", + "logicalId": "IgnoredFunction", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.Protocol", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 390, - "startColumn": 7, - "endLine": 390, + "startLine": 12, + "startColumn": 5, + "endLine": 12, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", + "message": "Resource 'SelectiveIgnoreFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DmdEventsSubscription", + "logicalId": "SelectiveIgnoreFunction", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.Endpoint", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 391, - "startColumn": 7, - "endLine": 391, + "startLine": 20, + "startColumn": 5, + "endLine": 20, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt DmdEventsQueue.Arn" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Region' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "DmdEventsSubscription", - "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" - }, - "propertyPath": "Properties.Region", - "category": "Best Practice", - "startLine": 392, - "startColumn": 7, - "endLine": 392, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "parameter 'DmdEventsSourceRegion' (type String)" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", + "message": "Resource 'InheritsGlobalsFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DmdEventsSubscription", + "logicalId": "InheritsGlobalsFunction", "entityType": "Resource", - "resourceType": "AWS::SNS::Subscription" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.TopicArn", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 393, - "startColumn": 7, - "endLine": 393, + "startLine": 26, + "startColumn": 5, + "endLine": 26, "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'DmdEventsSourceArn' (type String)" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/transform_serverless_ignore_globals_supported_runtime.yaml": { + "filePath": "good/transform_serverless_ignore_globals_supported_runtime.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'VmdEventsLambda' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'IgnoredFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VmdEventsLambda", + "logicalId": "IgnoredFunction", "entityType": "Resource", "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 171, + "startLine": 12, "startColumn": 5, - "endLine": 171, + "endLine": 12, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -13312,19 +7565,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'VmdEventsQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Resource 'SelectiveIgnoreFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VmdEventsQueue", + "logicalId": "SelectiveIgnoreFunction", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 206, + "startLine": 20, "startColumn": 5, - "endLine": 206, + "endLine": 20, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -13332,95 +7585,132 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'VmdEventsLambdaErrorsGreaterThanZeroAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Resource 'InheritsGlobalsFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "VmdEventsLambdaErrorsGreaterThanZeroAlarm", + "logicalId": "InheritsGlobalsFunction", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Serverless::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 274, + "startLine": 26, "startColumn": 5, - "endLine": 274, + "endLine": 26, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "good/unique_items_deploy_time_values.json": { + "filePath": "good/unique_items_deploy_time_values.json", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DmdEventsLambda' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'StackOutputSubnets' of type 'AWS::RDS::DBSubnetGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DmdEventsLambda", + "logicalId": "StackOutputSubnets", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::RDS::DBSubnetGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 296, - "startColumn": 5, - "endLine": 296, - "endColumn": 15, + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DmdEventsQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "message": "Resource 'ImportedSubnets' of type 'AWS::RDS::DBSubnetGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DmdEventsQueue", + "logicalId": "ImportedSubnets", "entityType": "Resource", - "resourceType": "AWS::SQS::Queue" + "resourceType": "AWS::RDS::DBSubnetGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 331, - "startColumn": 5, - "endLine": 331, - "endColumn": 15, + "startLine": 34, + "startColumn": 7, + "endLine": 34, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DmdEventsLambdaErrorsGreaterThanZeroAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Resource 'SelectedSubnets' of type 'AWS::RDS::DBSubnetGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DmdEventsLambdaErrorsGreaterThanZeroAlarm", + "logicalId": "SelectedSubnets", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::RDS::DBSubnetGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 399, - "startColumn": 5, - "endLine": 399, - "endColumn": 15, + "startLine": 44, + "startColumn": 7, + "endLine": 44, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "lsp/comprehensive.json": { - "filePath": "lsp/comprehensive.json", + "good/unknown_resource_types_ignored.yaml": { + "filePath": "good/unknown_resource_types_ignored.yaml", "status": "OK", "metadata": { - "resourcesScanned": 12, + "resourcesScanned": 5, "counts": { - "fatal": 4, - "errors": 1, - "warnings": 8, - "informational": 29, + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "good/unresolved_values_are_present.yaml": { + "filePath": "good/unresolved_values_are_present.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 15, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 32, "debug": 0 }, "suppressed": 0, @@ -13429,324 +7719,426 @@ }, "diagnostics": [ { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'MaxSize' is a required property", - "source": "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": "AutoScalingGroup", + "logicalId": "ValkeyGroup", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::ElastiCache::ReplicationGroup" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'MaxSize'", - "category": "Schema", - "startLine": 564, + "category": "Best Practice", + "startLine": 134, + "startColumn": 3, + "endLine": 134, + "endColumn": 14, + "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": "ValkeyGroup", + "entityType": "Resource", + "resourceType": "AWS::ElastiCache::ReplicationGroup" + }, + "category": "Best Practice", + "startLine": 134, + "startColumn": 3, + "endLine": 134, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Vpc", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 17, "startColumn": 7, - "endLine": 564, - "endColumn": 18, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "endLine": 17, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'MinSize' is a required property", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "AutoScalingGroup", + "logicalId": "Subnet1", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'MinSize'", - "category": "Schema", - "startLine": 564, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 24, "startColumn": 7, - "endLine": 564, - "endColumn": 18, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" + "endLine": 24, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc'" + } }, { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Fn::Sub variable '${MaxScaling}' does not reference a valid resource, parameter, or pseudo-parameter", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ComplexOutput", - "entityType": "Output" + "logicalId": "Subnet1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Outputs/ComplexOutput/Value.Fn::Sub", - "category": "Structure", - "startLine": 943, - "startColumn": 5, - "endLine": 943, - "endColumn": 19, - "ruleDescription": "Output value must be a string", - "phase": "SCHEMA" + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F8611", - "severity": "FATAL", - "message": "'Fn::FindInMap' is not supported in the Rules section - allowed: ['Ref', 'Fn::ValueOf', 'Fn::ValueOfAll', 'Fn::RefAll', 'Fn::Contains', 'Fn::EachMemberEquals', 'Fn::EachMemberIn', 'Fn::Equals', 'Fn::And', 'Fn::Or', 'Fn::Not', 'Fn::If', 'Fn::Select']", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Subnet2", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 32, + "startColumn": 7, + "endLine": 32, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ValidateRegionAndEnvironment", - "entityType": "Rule" + "logicalId": "Subnet2", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Rules/ValidateRegionAndEnvironment", - "category": "Structure", - "startLine": 197, - "startColumn": 5, - "endLine": 197, - "endColumn": 34, - "ruleDescription": "Disallowed function in Rules section", - "phase": "PARSE" + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "E9006", - "severity": "ERROR", - "message": "'8.0' is not one of ['5.5.62', '5.6.51', '5.7.33', '5.7.34', '5.7.36', '5.7.37', '5.7.38', '5.7.39', '5.7.40', '5.7.41', '5.7.42', '5.7.43', '5.7.44', '5.7.44-rds.20240408', '5.7.44-rds.20240529', '5.7.44-rds.20240808', '5.7.44-rds.20250103', '5.7.44-rds.20250213', '5.7.44-rds.20250508', '5.7.44-rds.20250818', '5.7.44-rds.20251212', '5.7.44-rds.20260212', '5.7.44-rds.20260521', '5.7.44-rds.20260624', '5.7.44-rds.20260902', '8.0.11', '8.0.13', '8.0.15', '8.0.16', '8.0.17', '8.0.19', '8.0.20', '8.0.21', '8.0.23', '8.0.25', '8.0.26', '8.0.27', '8.0.28', '8.0.29', '8.0.30', '8.0.31', '8.0.32', '8.0.33', '8.0.34', '8.0.35', '8.0.36', '8.0.37', '8.0.39', '8.0.40', '8.0.41', '8.0.42', '8.0.43', '8.0.44', '8.0.45', '8.0.46', '8.0.46-rds.20260624', '8.0.46-rds.20260908', '8.4.10', '8.4.11', '8.4.3', '8.4.4', '8.4.5', '8.4.6', '8.4.7', '8.4.8', '8.4.9']", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.EngineVersion", - "category": "Schema", - "startLine": 647, - "startColumn": 9, - "endLine": 647, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property value not valid for conditional extension enum", - "phase": "SCHEMA" + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 42, + "startColumn": 7, + "endLine": 42, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W1011", - "severity": "WARN", - "message": "Use dynamic references (e.g., SSM SecureString) instead of parameter 'DatabasePassword' for secrets", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 664, - "startColumn": 9, - "endLine": 664, - "endColumn": 28, - "ruleDescription": "Instead of REFing a parameter for a secret use a dynamic reference", - "phase": "LINT" + "propertyPath": "Properties.MasterUsername", + "category": "Best Practice", + "startLine": 43, + "startColumn": 7, + "endLine": 43, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConditionalOutput", - "entityType": "Output" + "logicalId": "SecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Outputs/ConditionalOutput/Value.Fn::If.2", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 996, - "startColumn": 5, - "endLine": 996, + "startLine": 52, + "startColumn": 7, + "endLine": 52, "endColumn": 23, - "ruleDescription": "Check Fn::If has a path that cannot be reached", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2508", - "severity": "WARN", - "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BastionSecurityGroup", + "logicalId": "SecurityGroup", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.SecurityGroupIngress", - "suggestedFix": "Restrict the CIDR range to specific IP addresses", - "category": "Security", - "startLine": 495, - "startColumn": 9, - "endLine": 495, - "endColumn": 30, - "ruleDescription": "Security group allows open access to sensitive port", - "phase": "LINT" + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 53, + "startColumn": 7, + "endLine": 53, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc'" + } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunction", + "logicalId": "IngressFromAttribute", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 738, - "startColumn": 9, - "endLine": 738, - "endColumn": 17, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "propertyPath": "Properties.GroupId", + "category": "Best Practice", + "startLine": 65, + "startColumn": 7, + "endLine": 65, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.9", - "lifecycle": "deprecated" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SecurityGroup'" } }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'IsNotProduction' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "IsNotProduction", - "entityType": "Condition" + "logicalId": "IngressFromAttribute", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Conditions/IsNotProduction", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 125, - "startColumn": 5, - "endLine": 125, - "endColumn": 21, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" + "startLine": 66, + "startColumn": 7, + "endLine": 66, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'ComplexCondition' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ComplexCondition", - "entityType": "Condition" + "logicalId": "IngressFromAttribute", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Conditions/ComplexCondition", + "propertyPath": "Properties.CidrIp", "category": "Best Practice", - "startLine": 155, - "startColumn": 5, - "endLine": 155, - "endColumn": 22, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" + "startLine": 67, + "startColumn": 7, + "endLine": 67, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "100 (from Fn::If on condition 'IsProduction') is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "IngressFromAttribute", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.AllocatedStorage", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 648, - "startColumn": 9, - "endLine": 648, - "endColumn": 26, - "conditionScenario": { - "IsProduction": true - }, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property type coercion warning", + "startLine": 68, + "startColumn": 7, + "endLine": 68, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "resolutionSource": "Fn::If on condition 'IsProduction'" + "lifecycle": "create-only", + "resolutionSource": "GetAtt Cluster.Endpoint.Port" } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "IngressFromAttribute", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 656, - "startColumn": 9, - "endLine": 656, - "endColumn": 26, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "propertyPath": "Properties.ToPort", + "category": "Best Practice", + "startLine": 69, + "startColumn": 7, + "endLine": 69, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt Cluster.Endpoint.Port" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPC", + "logicalId": "IngressFromImport", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 362, - "startColumn": 9, - "endLine": 362, - "endColumn": 19, + "startLine": 73, + "startColumn": 7, + "endLine": 73, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'SecurityGroup'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublicSubnet", + "logicalId": "IngressFromImport", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 390, - "startColumn": 9, - "endLine": 390, - "endColumn": 15, + "startLine": 74, + "startColumn": 7, + "endLine": 74, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublicSubnet", + "logicalId": "IngressFromImport", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.CidrIp", "category": "Best Practice", - "startLine": 393, - "startColumn": 9, - "endLine": 393, - "endColumn": 19, + "startLine": 75, + "startColumn": 7, + "endLine": 75, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13756,87 +8148,92 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublicSubnet", + "logicalId": "IngressFromImport", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 401, - "startColumn": 9, - "endLine": 401, - "endColumn": 26, + "startLine": 76, + "startColumn": 7, + "endLine": 76, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Select with unresolvable arguments)" + "resolutionSource": "dynamic (cross-stack import: SharedPort)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebSecurityGroup", + "logicalId": "IngressFromImport", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::SecurityGroupIngress" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 443, - "startColumn": 9, - "endLine": 443, - "endColumn": 26, + "startLine": 77, + "startColumn": 7, + "endLine": 77, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (cross-stack import: SharedPort)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebSecurityGroup", + "logicalId": "EgressFromParameter", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.GroupId", "category": "Best Practice", - "startLine": 444, - "startColumn": 9, - "endLine": 444, - "endColumn": 15, + "startLine": 81, + "startColumn": 7, + "endLine": 81, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" + "resolutionSource": "Ref to 'SecurityGroup'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'IpProtocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BastionSecurityGroup", + "logicalId": "EgressFromParameter", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.IpProtocol", "category": "Best Practice", - "startLine": 491, - "startColumn": 9, - "endLine": 491, - "endColumn": 26, + "startLine": 82, + "startColumn": 7, + "endLine": 82, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -13846,274 +8243,326 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrIp' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BastionSecurityGroup", + "logicalId": "EgressFromParameter", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.CidrIp", "category": "Best Practice", - "startLine": 492, - "startColumn": 9, - "endLine": 492, - "endColumn": 15, + "startLine": 83, + "startColumn": 7, + "endLine": 83, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchTemplateName' is create-only; updating it will cause resource replacement", + "message": "Property 'FromPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LaunchTemplate", + "logicalId": "EgressFromParameter", "entityType": "Resource", - "resourceType": "AWS::EC2::LaunchTemplate" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.LaunchTemplateName", + "propertyPath": "Properties.FromPort", "category": "Best Practice", - "startLine": 508, - "startColumn": 9, - "endLine": 508, - "endColumn": 28, + "startLine": 84, + "startColumn": 7, + "endLine": 84, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" + "resolutionSource": "parameter 'DbPort' (type Number)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'ToPort' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AutoScalingGroup", + "logicalId": "EgressFromParameter", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::EC2::SecurityGroupEgress" }, - "propertyPath": "Properties.AutoScalingGroupName", + "propertyPath": "Properties.ToPort", "category": "Best Practice", - "startLine": 565, - "startColumn": 9, - "endLine": 565, - "endColumn": 30, + "startLine": 85, + "startColumn": 7, + "endLine": 85, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" + "resolutionSource": "parameter 'DbPort' (type Number)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LaunchTemplate' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'DomainName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AutoScalingGroup", + "logicalId": "Certificate", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::CertificateManager::Certificate" }, - "propertyPath": "Properties.LaunchTemplate", + "propertyPath": "Properties.DomainName", "category": "Best Practice", - "startLine": 568, - "startColumn": 9, - "endLine": 568, - "endColumn": 24, + "startLine": 89, + "startColumn": 7, + "endLine": 89, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-acmpca", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "AutoScalingGroup", + "logicalId": "TargetGroup", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.VPCZoneIdentifier", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 582, - "startColumn": 9, - "endLine": 582, - "endColumn": 27, + "startLine": 103, + "startColumn": 7, + "endLine": 103, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DBInstanceIdentifier' is create-only; updating it will cause resource replacement", + "message": "Property 'Port' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "TargetGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.DBInstanceIdentifier", + "propertyPath": "Properties.Port", "category": "Best Practice", - "startLine": 634, - "startColumn": 9, - "endLine": 634, - "endColumn": 30, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 104, + "startColumn": 7, + "endLine": 104, + "endColumn": 11, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "TargetGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 646, - "startColumn": 9, - "endLine": 646, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 105, + "startColumn": 7, + "endLine": 105, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Property 'LoadBalancerArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "HttpsListener", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.LoadBalancerArn", "category": "Best Practice", - "startLine": 656, - "startColumn": 9, - "endLine": 656, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 112, + "startColumn": 7, + "endLine": 112, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-elasticloadbalancingv2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProduction'" + "resolutionSource": "Ref to 'LoadBalancer'" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", + "message": "Resource 'HttpsListener' of type 'AWS::ElasticLoadBalancingV2::Listener' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "HttpsListener", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 663, - "startColumn": 9, - "endLine": 663, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 111, + "startColumn": 5, + "endLine": 111, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "good/vpc_subnets.yaml": { + "filePath": "good/vpc_subnets.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 12, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W3010", + "severity": "WARN", + "message": "Avoid hardcoding availability zones 'us-east-1a'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 15, + "startColumn": 7, + "endLine": 15, + "endColumn": 23, + "ruleDescription": "Availability zone properties should not be hardcoded", + "phase": "LINT" + }, + { + "ruleId": "W3010", + "severity": "WARN", + "message": "Avoid hardcoding availability zones 'us-east-1b'", + "source": "CFN_LINT", + "entity": { + "logicalId": "SubnetB", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 23, + "ruleDescription": "Availability zone properties should not be hardcoded", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "MyVPC", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.BackupRetentionPeriod", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 672, - "startColumn": 9, - "endLine": 672, - "endColumn": 31, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Fn::If on condition 'IsProduction'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MultiAZ' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.MultiAZ", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 679, - "startColumn": 9, - "endLine": 679, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 13, + "startColumn": 7, + "endLine": 13, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (condition reference: IsProduction)" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVPC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DatabaseSecurityGroup", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 716, - "startColumn": 9, - "endLine": 716, - "endColumn": 26, + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -14123,222 +8572,209 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DatabaseSecurityGroup", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 717, - "startColumn": 9, - "endLine": 717, - "endColumn": 15, + "startLine": 15, + "startColumn": 7, + "endLine": 15, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaFunction", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 735, - "startColumn": 9, - "endLine": 735, - "endColumn": 22, + "startLine": 19, + "startColumn": 7, + "endLine": 19, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" + "resolutionSource": "Ref to 'MyVPC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaRole", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 802, - "startColumn": 9, - "endLine": 802, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "startLine": 20, + "startColumn": 7, + "endLine": 20, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DatabaseAlarm", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.AlarmName", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 846, - "startColumn": 9, - "endLine": 846, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SNSTopic", + "logicalId": "SecurityGroup", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.TopicName", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 877, - "startColumn": 9, - "endLine": 877, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" + "lifecycle": "create-only" } }, { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BastionSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BastionSecurityGroup", + "logicalId": "SecurityGroup", "entityType": "Resource", "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 490, + "startLine": 26, "startColumn": 7, - "endLine": 490, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 26, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'MyVPC'" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DatabaseSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Resource 'SubnetA' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DatabaseSecurityGroup", + "logicalId": "SubnetA", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 715, - "startColumn": 7, - "endLine": 715, - "endColumn": 18, + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'LambdaRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'SubnetB' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LambdaRole", + "logicalId": "SubnetB", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 801, - "startColumn": 7, - "endLine": 801, - "endColumn": 18, + "startLine": 18, + "startColumn": 5, + "endLine": 18, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DatabaseAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Resource 'SecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DatabaseAlarm", + "logicalId": "SecurityGroup", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 845, - "startColumn": 7, - "endLine": 845, - "endColumn": 18, + "startLine": 24, + "startColumn": 5, + "endLine": 24, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "lsp/comprehensive.yaml": { - "filePath": "lsp/comprehensive.yaml", + "integration/availability-zones.yaml": { + "filePath": "integration/availability-zones.yaml", "status": "OK", "metadata": { - "resourcesScanned": 12, + "resourcesScanned": 1, "counts": { - "fatal": 4, - "errors": 1, - "warnings": 10, - "informational": 29, + "fatal": 2, + "errors": 0, + "warnings": 0, + "informational": 5, "debug": 0 }, "suppressed": 0, @@ -14347,306 +8783,238 @@ }, "diagnostics": [ { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'MaxSize' is a required property", - "source": "SCHEMA", - "entity": { - "logicalId": "AutoScalingGroup", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'MaxSize'", - "category": "Schema", - "startLine": 236, - "startColumn": 5, - "endLine": 236, - "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" - }, - { - "ruleId": "F3003", - "severity": "FATAL", - "message": "'MinSize' is a required property", - "source": "SCHEMA", - "entity": { - "logicalId": "AutoScalingGroup", - "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" - }, - "propertyPath": "Properties", - "suggestedFix": "Add the required property 'MinSize'", - "category": "Schema", - "startLine": 236, - "startColumn": 5, - "endLine": 236, - "endColumn": 15, - "ruleDescription": "Required property missing", - "phase": "SCHEMA" - }, - { - "ruleId": "F6101", - "severity": "FATAL", - "message": "Fn::Sub variable '${MaxScaling}' does not reference a valid resource, parameter, or pseudo-parameter", - "source": "SCHEMA", - "entity": { - "logicalId": "ComplexOutput", - "entityType": "Output" - }, - "propertyPath": "Outputs/ComplexOutput/Value.Fn::Sub", - "category": "Structure", - "startLine": 421, - "startColumn": 3, - "endLine": 421, - "endColumn": 16, - "ruleDescription": "Output value must be a string", - "phase": "SCHEMA" - }, - { - "ruleId": "F8611", + "ruleId": "F3020", "severity": "FATAL", - "message": "'Fn::FindInMap' is not supported in the Rules section - allowed: ['Ref', 'Fn::ValueOf', 'Fn::ValueOfAll', 'Fn::RefAll', 'Fn::Contains', 'Fn::EachMemberEquals', 'Fn::EachMemberIn', 'Fn::Equals', 'Fn::And', 'Fn::Or', 'Fn::Not', 'Fn::If', 'Fn::Select']", + "message": "'AvailabilityZoneId' should not be included with 'AvailabilityZone'", "source": "SCHEMA", "entity": { - "logicalId": "ValidateRegionAndEnvironment", - "entityType": "Rule" - }, - "propertyPath": "Rules/ValidateRegionAndEnvironment", - "category": "Structure", - "startLine": 110, - "startColumn": 3, - "endLine": 110, - "endColumn": 31, - "ruleDescription": "Disallowed function in Rules section", - "phase": "PARSE" - }, - { - "ruleId": "E9006", - "severity": "ERROR", - "message": "'8.0' is not one of ['5.5.62', '5.6.51', '5.7.33', '5.7.34', '5.7.36', '5.7.37', '5.7.38', '5.7.39', '5.7.40', '5.7.41', '5.7.42', '5.7.43', '5.7.44', '5.7.44-rds.20240408', '5.7.44-rds.20240529', '5.7.44-rds.20240808', '5.7.44-rds.20250103', '5.7.44-rds.20250213', '5.7.44-rds.20250508', '5.7.44-rds.20250818', '5.7.44-rds.20251212', '5.7.44-rds.20260212', '5.7.44-rds.20260521', '5.7.44-rds.20260624', '5.7.44-rds.20260902', '8.0.11', '8.0.13', '8.0.15', '8.0.16', '8.0.17', '8.0.19', '8.0.20', '8.0.21', '8.0.23', '8.0.25', '8.0.26', '8.0.27', '8.0.28', '8.0.29', '8.0.30', '8.0.31', '8.0.32', '8.0.33', '8.0.34', '8.0.35', '8.0.36', '8.0.37', '8.0.39', '8.0.40', '8.0.41', '8.0.42', '8.0.43', '8.0.44', '8.0.45', '8.0.46', '8.0.46-rds.20260624', '8.0.46-rds.20260908', '8.4.10', '8.4.11', '8.4.3', '8.4.4', '8.4.5', '8.4.6', '8.4.7', '8.4.8', '8.4.9']", - "source": "CFN_LINT", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.EngineVersion", - "category": "Schema", - "startLine": 271, - "startColumn": 7, - "endLine": 271, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property value not valid for conditional extension enum", - "phase": "SCHEMA" - }, - { - "ruleId": "W1011", - "severity": "WARN", - "message": "Use dynamic references (e.g., SSM SecureString) instead of parameter 'DatabasePassword' for secrets", - "source": "CFN_LINT", - "entity": { - "logicalId": "Database", + "logicalId": "Subnet", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 276, + "propertyPath": "Properties.AvailabilityZoneId", + "category": "Schema", + "startLine": 5, "startColumn": 7, - "endLine": 276, + "endLine": 5, "endColumn": 25, - "ruleDescription": "Instead of REFing a parameter for a secret use a dynamic reference", - "phase": "LINT" + "ruleDescription": "Mutually exclusive properties", + "phase": "SCHEMA", + "context": { + "property": "AvailabilityZoneId" + } }, { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", - "source": "CFN_LINT", + "ruleId": "F3020", + "severity": "FATAL", + "message": "'AvailabilityZone' should not be included with 'AvailabilityZoneId'", + "source": "SCHEMA", "entity": { - "logicalId": "ConditionalOutput", - "entityType": "Output" + "logicalId": "Subnet", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Outputs/ConditionalOutput/Value.Fn::If.2", - "category": "Best Practice", - "startLine": 442, - "startColumn": 3, - "endLine": 442, - "endColumn": 20, - "ruleDescription": "Check Fn::If has a path that cannot be reached", - "phase": "LINT" - }, - { - "ruleId": "W1103", - "severity": "WARN", - "message": "'!Implies' is not a supported function", - "source": "ENGINE", - "category": "Intrinsic Function", - "ruleDescription": "Unknown intrinsic function name", - "phase": "PARSE" + "propertyPath": "Properties.AvailabilityZone", + "category": "Schema", + "startLine": 6, + "startColumn": 7, + "endLine": 6, + "endColumn": 23, + "ruleDescription": "Mutually exclusive properties", + "phase": "SCHEMA", + "context": { + "property": "AvailabilityZone" + } }, { - "ruleId": "W2508", - "severity": "WARN", - "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZoneId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BastionSecurityGroup", + "logicalId": "Subnet", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.SecurityGroupIngress", - "suggestedFix": "Restrict the CIDR range to specific IP addresses", - "category": "Security", - "startLine": 206, + "propertyPath": "Properties.AvailabilityZoneId", + "category": "Best Practice", + "startLine": 5, "startColumn": 7, - "endLine": 206, - "endColumn": 27, - "ruleDescription": "Security group allows open access to sensitive port", - "phase": "LINT" + "endLine": 5, + "endColumn": 25, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaFunction", + "logicalId": "Subnet", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 306, + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 6, "startColumn": 7, - "endLine": 306, - "endColumn": 14, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "endLine": 6, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.9", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'IsNotProduction' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "IsNotProduction", - "entityType": "Condition" + "logicalId": "Subnet", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Conditions/IsNotProduction", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 93, - "startColumn": 3, - "endLine": 93, - "endColumn": 18, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'ComplexCondition' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ComplexCondition", - "entityType": "Condition" + "logicalId": "Subnet", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Conditions/ComplexCondition", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 101, - "startColumn": 3, - "endLine": 101, - "endColumn": 19, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "-1 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Subnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "WebSecurityGroup", + "logicalId": "Subnet", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.SecurityGroupEgress.0.IpProtocol", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 195, - "startColumn": 11, - "endLine": 195, - "endColumn": 21, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "integration/aws-dynamodb-table.yaml": { + "filePath": "integration/aws-dynamodb-table.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 1, + "informational": 10, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W9003", - "severity": "WARN", - "message": "100 (from Fn::If on condition 'IsProduction') is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "ruleId": "F3021", + "severity": "FATAL", + "message": "'SSEType' is a dependency of 'KMSMasterKeyId'", + "source": "SCHEMA", "entity": { - "logicalId": "Database", + "logicalId": "Table1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.AllocatedStorage", - "category": "Best Practice", - "startLine": 272, + "propertyPath": "Properties.SSESpecification", + "suggestedFix": "Add 'SSEType' when 'KMSMasterKeyId' is specified", + "category": "Schema", + "startLine": 22, "startColumn": 7, - "endLine": 272, + "endLine": 22, "endColumn": 23, - "conditionScenario": { - "IsProduction": true - }, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA", - "context": { - "resolutionSource": "Fn::If on condition 'IsProduction'" - } + "ruleDescription": "Dependent property required", + "phase": "SCHEMA" }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", + "ruleId": "W3030", + "severity": "WARN", + "message": "'AES256' is not one of ['KMS']", + "source": "CFN_LINT", "entity": { - "logicalId": "Database", + "logicalId": "Table2", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 274, - "startColumn": 7, - "endLine": 274, - "endColumn": 23, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "propertyPath": "Properties.SSESpecification.SSEType", + "category": "Schema", + "startLine": 44, + "startColumn": 9, + "endLine": 44, + "endColumn": 16, + "ruleDescription": "Value not in allowed enum", + "phase": "SCHEMA", + "context": { + "actualValue": "AES256", + "extra": { + "allowed_values": [ + "KMS" + ] + } + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "VPC", + "logicalId": "Table1", "entityType": "Resource", - "resourceType": "AWS::EC2::VPC" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 142, + "startLine": 12, "startColumn": 7, - "endLine": 142, + "endLine": 12, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -14657,41 +9025,40 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublicSubnet", + "logicalId": "Table1", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 158, + "startLine": 16, "startColumn": 7, - "endLine": 158, - "endColumn": 12, + "endLine": 16, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublicSubnet", + "logicalId": "Table2", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.CidrBlock", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 159, + "startLine": 31, "startColumn": 7, - "endLine": 159, + "endLine": 31, "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -14702,42 +9069,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PublicSubnet", + "logicalId": "Table2", "entityType": "Resource", - "resourceType": "AWS::EC2::Subnet" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.AvailabilityZone", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 160, + "startLine": 35, "startColumn": 7, - "endLine": 160, - "endColumn": 23, + "endLine": 35, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "dynamic (Select with unresolvable arguments)" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'TableName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebSecurityGroup", + "logicalId": "Table3", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.TableName", "category": "Best Practice", - "startLine": 176, + "startLine": 50, "startColumn": 7, - "endLine": 176, - "endColumn": 23, + "endLine": 50, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -14747,249 +9113,302 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Property 'KeySchema' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "WebSecurityGroup", + "logicalId": "Table3", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.KeySchema", "category": "Best Practice", - "startLine": 177, + "startLine": 59, "startColumn": 7, - "endLine": 177, - "endColumn": 12, + "endLine": 59, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" + "lifecycle": "conditional-create-only" } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Resource 'KMS' of type 'AWS::KMS::Key' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BastionSecurityGroup", + "logicalId": "KMS", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::KMS::Key" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 204, - "startColumn": 7, - "endLine": 204, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 6, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Table1' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "BastionSecurityGroup", + "logicalId": "Table1", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.VpcId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 205, - "startColumn": 7, - "endLine": 205, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" - } + "startLine": 11, + "startColumn": 5, + "endLine": 11, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'LaunchTemplateName' is create-only; updating it will cause resource replacement", + "message": "Resource 'Table2' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LaunchTemplate", + "logicalId": "Table2", "entityType": "Resource", - "resourceType": "AWS::EC2::LaunchTemplate" + "resourceType": "AWS::DynamoDB::Table" }, - "propertyPath": "Properties.LaunchTemplateName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 216, - "startColumn": 7, - "endLine": 216, - "endColumn": 25, - "ruleDescription": "Create-only property updated triggers resource replacement", + "startLine": 30, + "startColumn": 5, + "endLine": 30, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Table3' of type 'AWS::DynamoDB::Table' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Table3", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 49, + "startColumn": 5, + "endLine": 49, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "integration/aws-ec2-instance.yaml": { + "filePath": "integration/aws-ec2-instance.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 4, + "errors": 0, + "warnings": 0, + "informational": 6, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3020", + "severity": "FATAL", + "message": "'AssociateCarrierIpAddress' should not be included with 'NetworkInterfaceId'", + "source": "SCHEMA", + "entity": { + "logicalId": "Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.NetworkInterfaces.0.AssociateCarrierIpAddress", + "category": "Schema", + "startLine": 14, + "startColumn": 11, + "endLine": 14, + "endColumn": 36, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Mutually exclusive properties", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" + "property": "AssociateCarrierIpAddress" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3020", + "severity": "FATAL", + "message": "'AssociatePublicIpAddress' should not be included with 'NetworkInterfaceId'", + "source": "SCHEMA", "entity": { - "logicalId": "AutoScalingGroup", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.AutoScalingGroupName", - "category": "Best Practice", - "startLine": 237, - "startColumn": 7, - "endLine": 237, - "endColumn": 27, - "ruleDescription": "Create-only property updated triggers resource replacement", + "propertyPath": "Properties.NetworkInterfaces.0.AssociatePublicIpAddress", + "category": "Schema", + "startLine": 15, + "startColumn": 11, + "endLine": 15, + "endColumn": 35, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Mutually exclusive properties", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" + "property": "AssociatePublicIpAddress" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'LaunchTemplate' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "F3020", + "severity": "FATAL", + "message": "'NetworkInterfaceId' should not be included with 'AssociateCarrierIpAddress'", + "source": "SCHEMA", "entity": { - "logicalId": "AutoScalingGroup", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.LaunchTemplate", - "category": "Best Practice", - "startLine": 238, - "startColumn": 7, - "endLine": 238, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", + "propertyPath": "Properties.NetworkInterfaces.0.NetworkInterfaceId", + "category": "Schema", + "startLine": 17, + "startColumn": 11, + "endLine": 17, + "endColumn": 29, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Mutually exclusive properties", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "property": "NetworkInterfaceId" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "F3020", + "severity": "FATAL", + "message": "'NetworkInterfaceId' should not be included with 'AssociatePublicIpAddress'", + "source": "SCHEMA", "entity": { - "logicalId": "AutoScalingGroup", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::AutoScaling::AutoScalingGroup" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.VPCZoneIdentifier", - "category": "Best Practice", - "startLine": 242, - "startColumn": 7, - "endLine": 242, - "endColumn": 24, - "ruleDescription": "Create-only property updated triggers resource replacement", + "propertyPath": "Properties.NetworkInterfaces.0.NetworkInterfaceId", + "category": "Schema", + "startLine": 17, + "startColumn": 11, + "endLine": 17, + "endColumn": 29, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Mutually exclusive properties", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "property": "NetworkInterfaceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'DBInstanceIdentifier' is create-only; updating it will cause resource replacement", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "NetworkInterface", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::NetworkInterface" }, - "propertyPath": "Properties.DBInstanceIdentifier", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 268, + "startLine": 7, "startColumn": 7, - "endLine": 268, - "endColumn": 27, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 7, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/networkinterface", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 270, + "startLine": 11, "startColumn": 7, - "endLine": 270, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 11, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.StorageEncrypted", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 274, + "startLine": 12, "startColumn": 7, - "endLine": 274, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 12, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProduction'" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "Instance", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.NetworkInterfaces", "category": "Best Practice", - "startLine": 275, + "startLine": 13, "startColumn": 7, - "endLine": 275, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 13, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -14997,294 +9416,304 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9003", "severity": "INFO", - "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", "source": "ENGINE", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.BackupRetentionPeriod", "category": "Best Practice", - "startLine": 279, - "startColumn": 7, - "endLine": 279, - "endColumn": 28, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Fn::If on condition 'IsProduction'" - } + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'MultiAZ' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'NetworkInterface' of type 'AWS::EC2::NetworkInterface' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "NetworkInterface", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::NetworkInterface" }, - "propertyPath": "Properties.MultiAZ", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 280, - "startColumn": 7, - "endLine": 280, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "integration/aws-ec2-launchtemplate.yaml": { + "filePath": "integration/aws-ec2-launchtemplate.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 5, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F1020", + "severity": "FATAL", + "message": "'NetworkInterface' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'LaunchTemplate']", + "source": "SCHEMA", + "entity": { + "logicalId": "LaunchTemplate", + "entityType": "Resource", + "resourceType": "AWS::EC2::LaunchTemplate" + }, + "propertyPath": "Properties.LaunchTemplateData.NetworkInterfaces.0.NetworkInterfaceId", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 13, + "startColumn": 13, + "endLine": 13, + "endColumn": 31, + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" + }, + { + "ruleId": "F3020", + "severity": "FATAL", + "message": "'AssociateCarrierIpAddress' should not be included with 'NetworkInterfaceId'", + "source": "SCHEMA", + "entity": { + "logicalId": "LaunchTemplate", + "entityType": "Resource", + "resourceType": "AWS::EC2::LaunchTemplate" + }, + "propertyPath": "Properties.LaunchTemplateData.NetworkInterfaces.0.AssociateCarrierIpAddress", + "category": "Schema", + "startLine": 10, + "startColumn": 13, + "endLine": 10, + "endColumn": 38, + "ruleDescription": "Mutually exclusive properties", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (condition reference: IsProduction)" + "property": "AssociateCarrierIpAddress" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3020", + "severity": "FATAL", + "message": "'AssociatePublicIpAddress' should not be included with 'NetworkInterfaceId'", + "source": "SCHEMA", "entity": { - "logicalId": "DatabaseSecurityGroup", + "logicalId": "LaunchTemplate", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::LaunchTemplate" }, - "propertyPath": "Properties.GroupDescription", - "category": "Best Practice", - "startLine": 293, - "startColumn": 7, - "endLine": 293, - "endColumn": 23, - "ruleDescription": "Create-only property updated triggers resource replacement", + "propertyPath": "Properties.LaunchTemplateData.NetworkInterfaces.0.AssociatePublicIpAddress", + "category": "Schema", + "startLine": 11, + "startColumn": 13, + "endLine": 11, + "endColumn": 37, + "ruleDescription": "Mutually exclusive properties", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "property": "AssociatePublicIpAddress" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3020", + "severity": "FATAL", + "message": "'NetworkInterfaceId' should not be included with 'AssociateCarrierIpAddress'", + "source": "SCHEMA", "entity": { - "logicalId": "DatabaseSecurityGroup", + "logicalId": "LaunchTemplate", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::EC2::LaunchTemplate" }, - "propertyPath": "Properties.VpcId", - "category": "Best Practice", - "startLine": 294, - "startColumn": 7, - "endLine": 294, - "endColumn": 12, - "ruleDescription": "Create-only property updated triggers resource replacement", + "propertyPath": "Properties.LaunchTemplateData.NetworkInterfaces.0.NetworkInterfaceId", + "category": "Schema", + "startLine": 13, + "startColumn": 13, + "endLine": 13, + "endColumn": 31, + "ruleDescription": "Mutually exclusive properties", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'VPC'" + "property": "NetworkInterfaceId" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3020", + "severity": "FATAL", + "message": "'NetworkInterfaceId' should not be included with 'AssociatePublicIpAddress'", + "source": "SCHEMA", "entity": { - "logicalId": "LambdaFunction", + "logicalId": "LaunchTemplate", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::LaunchTemplate" }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 305, - "startColumn": 7, - "endLine": 305, - "endColumn": 19, - "ruleDescription": "Create-only property updated triggers resource replacement", + "propertyPath": "Properties.LaunchTemplateData.NetworkInterfaces.0.NetworkInterfaceId", + "category": "Schema", + "startLine": 13, + "startColumn": 13, + "endLine": 13, + "endColumn": 31, + "ruleDescription": "Mutually exclusive properties", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" + "property": "NetworkInterfaceId" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchTemplateName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaRole", + "logicalId": "LaunchTemplate", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::LaunchTemplate" }, - "propertyPath": "Properties.RoleName", + "propertyPath": "Properties.LaunchTemplateName", "category": "Best Practice", - "startLine": 343, + "startLine": 14, "startColumn": 7, - "endLine": 343, - "endColumn": 15, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 14, + "endColumn": 25, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" + "lifecycle": "create-only" } + } + ] + }, + "integration/aws-ec2-networkinterface.yaml": { + "filePath": "integration/aws-ec2-networkinterface.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 2, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3020", + "severity": "FATAL", + "message": "'Ipv6Addresses' should not be included with 'Ipv6AddressCount'", + "source": "SCHEMA", "entity": { - "logicalId": "DatabaseAlarm", + "logicalId": "NetworkInterface", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::EC2::NetworkInterface" }, - "propertyPath": "Properties.AlarmName", - "category": "Best Practice", - "startLine": 369, + "propertyPath": "Properties.Ipv6Addresses", + "category": "Schema", + "startLine": 15, "startColumn": 7, - "endLine": 369, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 15, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/networkinterface", + "ruleDescription": "Mutually exclusive properties", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" + "property": "Ipv6Addresses" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3020", + "severity": "FATAL", + "message": "'Ipv6AddressCount' should not be included with 'Ipv6Addresses'", + "source": "SCHEMA", "entity": { - "logicalId": "SNSTopic", + "logicalId": "NetworkInterface", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::EC2::NetworkInterface" }, - "propertyPath": "Properties.TopicName", - "category": "Best Practice", - "startLine": 390, + "propertyPath": "Properties.Ipv6AddressCount", + "category": "Schema", + "startLine": 17, "startColumn": 7, - "endLine": 390, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 17, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/networkinterface", + "ruleDescription": "Mutually exclusive properties", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter with AllowedValues" + "property": "Ipv6AddressCount" } }, { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BastionSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "BastionSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 203, - "startColumn": 5, - "endLine": 203, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DatabaseSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "DatabaseSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 292, - "startColumn": 5, - "endLine": 292, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LambdaRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaRole", + "logicalId": "NetworkInterface", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::NetworkInterface" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 342, - "startColumn": 5, - "endLine": 342, + "propertyPath": "Properties.SubnetId", + "category": "Best Practice", + "startLine": 14, + "startColumn": 7, + "endLine": 14, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2/networkinterface", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'SubnetId' (type AWS::EC2::Subnet::Id)" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DatabaseAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Resource 'NetworkInterface' of type 'AWS::EC2::NetworkInterface' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DatabaseAlarm", + "logicalId": "NetworkInterface", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::EC2::NetworkInterface" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 368, + "startLine": 9, "startColumn": 5, - "endLine": 368, + "endLine": 9, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "lsp/condition-usage.json": { - "filePath": "lsp/condition-usage.json", + "integration/aws-ec2-subnet.yaml": { + "filePath": "integration/aws-ec2-subnet.yaml", "status": "OK", "metadata": { - "resourcesScanned": 4, + "resourcesScanned": 5, "counts": { - "fatal": 0, - "errors": 1, - "warnings": 6, - "informational": 13, + "fatal": 5, + "errors": 0, + "warnings": 0, + "informational": 18, "debug": 0 }, "suppressed": 0, @@ -15293,233 +9722,349 @@ }, "diagnostics": [ { - "ruleId": "E3016", - "severity": "ERROR", - "message": "UpdatePolicy is not supported on resource type 'AWS::S3::Bucket'", - "source": "CFN_LINT", + "ruleId": "F3020", + "severity": "FATAL", + "message": "'CidrBlock' should not be included with 'Ipv4IpamPoolId'", + "source": "SCHEMA", "entity": { - "logicalId": "ProductionBucket", + "logicalId": "Subnet5", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "UpdatePolicy", - "suggestedFix": "Remove UpdatePolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::ElastiCache::ReplicationGroup, AWS::Elasticsearch::Domain, AWS::Lambda::Alias, AWS::OpenSearchService::Domain", - "category": "Resource", - "startLine": 75, + "propertyPath": "Properties.CidrBlock", + "category": "Schema", + "startLine": 30, "startColumn": 7, - "endLine": 75, - "endColumn": 20, - "ruleDescription": "Check UpdatePolicy values for Resources", - "phase": "LINT" + "endLine": 30, + "endColumn": 16, + "ruleDescription": "Mutually exclusive properties", + "phase": "SCHEMA", + "context": { + "property": "CidrBlock" + } }, { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", - "source": "CFN_LINT", + "ruleId": "F3020", + "severity": "FATAL", + "message": "'Ipv4IpamPoolId' should not be included with 'CidrBlock'", + "source": "SCHEMA", "entity": { - "logicalId": "ProductionBucket", + "logicalId": "Subnet5", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.BucketName.Fn::If.2", - "category": "Best Practice", - "startLine": 62, - "startColumn": 13, - "endLine": 62, - "endColumn": 27, - "ruleDescription": "Check Fn::If has a path that cannot be reached", - "phase": "LINT" + "propertyPath": "Properties.Ipv4IpamPoolId", + "category": "Schema", + "startLine": 31, + "startColumn": 7, + "endLine": 31, + "endColumn": 21, + "ruleDescription": "Mutually exclusive properties", + "phase": "SCHEMA", + "context": { + "property": "Ipv4IpamPoolId" + } }, { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", - "source": "CFN_LINT", + "ruleId": "F3021", + "severity": "FATAL", + "message": "'Ipv4IpamPoolId' is a dependency of 'Ipv4NetmaskLength'", + "source": "SCHEMA", "entity": { - "logicalId": "ProductionBucket", + "logicalId": "Subnet1", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.VersioningConfiguration.Status.Fn::If.2", + "propertyPath": "Properties", + "suggestedFix": "Add 'Ipv4IpamPoolId' when 'Ipv4NetmaskLength' is specified", + "category": "Schema", + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 15, + "ruleDescription": "Dependent property required", + "phase": "SCHEMA" + }, + { + "ruleId": "F3021", + "severity": "FATAL", + "message": "'Ipv4NetmaskLength' is a dependency of 'Ipv4IpamPoolId'", + "source": "SCHEMA", + "entity": { + "logicalId": "Subnet3", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties", + "suggestedFix": "Add 'Ipv4NetmaskLength' when 'Ipv4IpamPoolId' is specified", + "category": "Schema", + "startLine": 17, + "startColumn": 5, + "endLine": 17, + "endColumn": 15, + "ruleDescription": "Dependent property required", + "phase": "SCHEMA" + }, + { + "ruleId": "F3058", + "severity": "FATAL", + "message": "One of ['CidrBlock', 'Ipv4IpamPoolId', 'Ipv6IpamPoolId', 'Ipv6CidrBlock'] is a required property", + "source": "SCHEMA", + "entity": { + "logicalId": "Subnet2", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties", + "category": "Schema", + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 15, + "ruleDescription": "One of properties required (requiredOr)", + "phase": "SCHEMA" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Subnet1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 70, - "startColumn": 15, - "endLine": 70, - "endColumn": 25, - "ruleDescription": "Check Fn::If has a path that cannot be reached", - "phase": "LINT" + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'Vpc' (type AWS::EC2::VPC::Id)" + } }, { - "ruleId": "W2501", - "severity": "WARN", - "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "Subnet1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 97, - "startColumn": 9, - "endLine": 97, - "endColumn": 28, - "ruleDescription": "Check if Password Properties are correctly configured", - "phase": "LINT" + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'NotProduction' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Ipv4NetmaskLength' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "NotProduction", - "entityType": "Condition" + "logicalId": "Subnet1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Conditions/NotProduction", + "propertyPath": "Properties.Ipv4NetmaskLength", "category": "Best Practice", - "startLine": 47, - "startColumn": 5, - "endLine": 47, - "endColumn": 19, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 24, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Subnet2", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 14, + "startColumn": 7, + "endLine": 14, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'Vpc' (type AWS::EC2::VPC::Id)" + } }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "Subnet3", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 93, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 18, "startColumn": 7, - "endLine": 93, - "endColumn": 18, - "ruleDescription": "RDS instance should have StorageEncrypted", - "phase": "LINT" + "endLine": 18, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'Vpc' (type AWS::EC2::VPC::Id)" + } }, { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Ipv4IpamPoolId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalResource", + "logicalId": "Subnet3", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 104, - "startColumn": 9, - "endLine": 104, - "endColumn": 17, - "ruleDescription": "Hardcoded AMI ID", - "phase": "LINT" + "propertyPath": "Properties.Ipv4IpamPoolId", + "category": "Best Practice", + "startLine": 19, + "startColumn": 7, + "endLine": 19, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "Subnet4", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 90, - "startColumn": 5, - "endLine": 90, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'Vpc' (type AWS::EC2::VPC::Id)" + } }, { - "ruleId": "I3011", + "ruleId": "I9001", "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", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "Subnet4", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 90, - "startColumn": 5, - "endLine": 90, - "endColumn": 14, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "startLine": 24, + "startColumn": 7, + "endLine": 24, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9001", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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", + "message": "Property 'Ipv6CidrBlock' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "Subnet4", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties", + "propertyPath": "Properties.Ipv6CidrBlock", "category": "Best Practice", - "startLine": 93, + "startLine": 25, "startColumn": 7, - "endLine": 93, - "endColumn": 18, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", - "phase": "LINT" + "endLine": 25, + "endColumn": 20, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProductionBucket", + "logicalId": "Subnet5", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 58, - "startColumn": 9, - "endLine": 58, - "endColumn": 20, + "startLine": 29, + "startColumn": 7, + "endLine": 29, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProduction'" + "resolutionSource": "parameter 'Vpc' (type AWS::EC2::VPC::Id)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DevelopmentBucket", + "logicalId": "Subnet5", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 87, - "startColumn": 9, - "endLine": 87, - "endColumn": 20, + "startLine": 30, + "startColumn": 7, + "endLine": 30, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -15529,43 +10074,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'Ipv4IpamPoolId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "Subnet5", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Ipv4IpamPoolId", "category": "Best Practice", - "startLine": 95, - "startColumn": 9, - "endLine": 95, - "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "startLine": 31, + "startColumn": 7, + "endLine": 31, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", + "message": "Property 'Ipv4NetmaskLength' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "Subnet5", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.Ipv4NetmaskLength", "category": "Best Practice", - "startLine": 96, - "startColumn": 9, - "endLine": 96, + "startLine": 32, + "startColumn": 7, + "endLine": 32, "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -15573,133 +10116,176 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Subnet1' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Subnet1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Subnet2' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Subnet2", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Resource 'Subnet3' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConditionalResource", + "logicalId": "Subnet3", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 104, - "startColumn": 9, - "endLine": 104, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 17, + "startColumn": 5, + "endLine": 17, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'Subnet4' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConditionalResource", + "logicalId": "Subnet4", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 105, - "startColumn": 9, - "endLine": 105, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Fn::If on condition 'IsProductionAndCreateDB'" - } - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "startLine": 22, + "startColumn": 5, + "endLine": 22, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ProductionBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'Subnet5' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ProductionBucket", + "logicalId": "Subnet5", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 57, - "startColumn": 7, - "endLine": 57, - "endColumn": 18, + "startLine": 28, + "startColumn": 5, + "endLine": 28, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "integration/aws-lambda-function.yaml": { + "filePath": "integration/aws-lambda-function.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DevelopmentBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'Function' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DevelopmentBucket", + "logicalId": "Function", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 86, - "startColumn": 7, - "endLine": 86, - "endColumn": 18, + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Database' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", + "message": "Resource 'Role' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "Role", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::IAM::Role" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 93, - "startColumn": 7, - "endLine": 93, - "endColumn": 18, + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "lsp/condition-usage.yaml": { - "filePath": "lsp/condition-usage.yaml", + "integration/cfn-gather.yaml": { + "filePath": "integration/cfn-gather.yaml", "status": "OK", "metadata": { - "resourcesScanned": 8, + "resourcesScanned": 17, "counts": { "fatal": 0, "errors": 7, - "warnings": 7, - "informational": 21, + "warnings": 1, + "informational": 55, "debug": 0 }, "suppressed": 0, @@ -15708,268 +10294,314 @@ }, "diagnostics": [ { - "ruleId": "E1028", + "ruleId": "E3052", "severity": "ERROR", - "message": "Fn::If first element must be the name of a condition, not an expression", - "source": "SCHEMA", + "message": "NetworkConfiguration required when TaskDefinition NetworkMode is 'awsvpc'", + "source": "CFN_LINT", "entity": { - "logicalId": "LogicalConditionResource", + "logicalId": "ServiceNoNetConfig", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.AlarmName.Fn::If.0", - "category": "Intrinsic Function", - "startLine": 172, - "startColumn": 18, - "endLine": 172, - "endColumn": 19, - "ruleDescription": "Fn::If condition must exist in Conditions section", - "phase": "PARSE" + "category": "Resource", + "startLine": 32, + "startColumn": 3, + "endLine": 32, + "endColumn": 21, + "ruleDescription": "Validate ECS service requires NetworkConfiguration", + "phase": "LINT" }, { - "ruleId": "E1028", + "ruleId": "E3054", "severity": "ERROR", - "message": "Fn::If first element must be the name of a condition, not an expression", - "source": "SCHEMA", + "message": "['EC2'] does not contain items matching 'FARGATE'", + "source": "CFN_LINT", "entity": { - "logicalId": "LogicalConditionResource", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Threshold.Fn::If.0", - "category": "Intrinsic Function", - "startLine": 184, - "startColumn": 17, - "endLine": 184, - "endColumn": 18, - "ruleDescription": "Fn::If condition must exist in Conditions section", - "phase": "PARSE" + "propertyPath": "Properties.RequiresCompatibilities", + "suggestedFix": "Add 'FARGATE' to RequiresCompatibilities", + "category": "Resource", + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 30, + "ruleDescription": "Validate ECS service using Fargate uses TaskDefinition that allows Fargate", + "phase": "LINT" }, { - "ruleId": "E1028", + "ruleId": "E3502", "severity": "ERROR", - "message": "Fn::If first element must be the name of a condition, not an expression", - "source": "SCHEMA", + "message": "Source queue type 'FIFO' does not match destination queue type 'standard'", + "source": "CFN_LINT", "entity": { - "logicalId": "LogicalConditionResource", + "logicalId": "FifoQueue", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.TreatMissingData.Fn::If.0", - "category": "Intrinsic Function", - "startLine": 192, - "startColumn": 18, - "endLine": 192, - "endColumn": 19, - "ruleDescription": "Fn::If condition must exist in Conditions section", - "phase": "PARSE" + "propertyPath": "Properties.RedrivePolicy", + "category": "Resource", + "startLine": 42, + "startColumn": 7, + "endLine": 42, + "endColumn": 20, + "ruleDescription": "Validate SQS DLQ queues are the same type", + "phase": "LINT" }, { - "ruleId": "E1028", + "ruleId": "E3698", "severity": "ERROR", - "message": "Fn::If first element must be the name of a condition, not an expression", - "source": "SCHEMA", + "message": "{'Ref': 'RestApi2'} was expected", + "source": "CFN_LINT", "entity": { - "logicalId": "LogicalConditionalOutput", - "entityType": "Output" + "logicalId": "Deployment", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Outputs/LogicalConditionalOutput/Value/Fn::If/0", - "category": "Intrinsic Function", - "startLine": 236, - "startColumn": 18, - "endLine": 236, - "endColumn": 19, - "ruleDescription": "Fn::If condition must exist in Conditions section", - "phase": "PARSE" + "propertyPath": "Properties.RestApiId", + "category": "Resource", + "startLine": 78, + "startColumn": 7, + "endLine": 78, + "endColumn": 16, + "ruleDescription": "API Gateway Stage and Deployment must use the same RestApi", + "phase": "LINT" + }, + { + "ruleId": "E3705", + "severity": "ERROR", + "message": "BatchSize 15 exceeds maximum of 10 for SQS FIFO queue event source", + "source": "CFN_LINT", + "entity": { + "logicalId": "FifoMapping", + "entityType": "Resource", + "resourceType": "AWS::Lambda::EventSourceMapping" + }, + "propertyPath": "Properties.BatchSize", + "category": "Resource", + "startLine": 107, + "startColumn": 7, + "endLine": 107, + "endColumn": 16, + "ruleDescription": "Validate SQS FIFO queue EventSourceMapping BatchSize is at most 10", + "phase": "LINT" }, { - "ruleId": "E1028", + "ruleId": "E3707", "severity": "ERROR", - "message": "Fn::If first element must be the name of a condition, not an expression", - "source": "SCHEMA", + "message": "DBInstance Engine 'aurora-postgresql' does not match DBCluster Engine 'aurora-mysql'", + "source": "CFN_LINT", "entity": { - "logicalId": "LogicalConditionalOutput", - "entityType": "Output" + "logicalId": "BadEngineInstance", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Outputs/LogicalConditionalOutput/Value/Fn::If/2/Fn::If/0", - "category": "Intrinsic Function", - "startLine": 241, - "startColumn": 21, - "endLine": 241, - "endColumn": 22, - "ruleDescription": "Fn::If condition must exist in Conditions section", - "phase": "PARSE" + "propertyPath": "Properties.Engine", + "category": "Resource", + "startLine": 120, + "startColumn": 7, + "endLine": 120, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "AuroraCluster", + "resourceType": "AWS::RDS::DBCluster" + }, + "location": { + "startLine": 112, + "startColumn": 7, + "endLine": 112, + "endColumn": 13 + }, + "message": "cluster engine" + } + ], + "ruleDescription": "Validate RDS DBInstance Engine matches DBCluster Engine", + "phase": "LINT" }, { - "ruleId": "E1028", + "ruleId": "E3708", "severity": "ERROR", - "message": "Fn::If first element must be the name of a condition, not an expression", - "source": "SCHEMA", + "message": "'COGNITO_USER_POOLS' is not one of ['TOKEN', 'REQUEST']", + "source": "CFN_LINT", "entity": { - "logicalId": "EdgeCaseOutput", - "entityType": "Output" + "logicalId": "CognitoAuthorizer", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Authorizer" }, - "propertyPath": "Outputs/EdgeCaseOutput/Value/Fn::If/0", - "category": "Intrinsic Function", - "startLine": 251, - "startColumn": 19, - "endLine": 251, - "endColumn": 20, - "ruleDescription": "Fn::If condition must exist in Conditions section", - "phase": "PARSE" + "propertyPath": "Properties.Type", + "category": "Resource", + "startLine": 58, + "startColumn": 7, + "endLine": 58, + "endColumn": 11, + "ruleDescription": "API Gateway Method AuthorizationType must match Authorizer Type", + "phase": "LINT" }, { - "ruleId": "E3016", - "severity": "ERROR", - "message": "UpdatePolicy is not supported on resource type 'AWS::S3::Bucket'", + "ruleId": "W2501", + "severity": "WARN", + "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", "source": "CFN_LINT", "entity": { - "logicalId": "ProductionBucket", + "logicalId": "AuroraCluster", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "UpdatePolicy", - "suggestedFix": "Remove UpdatePolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::ElastiCache::ReplicationGroup, AWS::Elasticsearch::Domain, AWS::Lambda::Alias, AWS::OpenSearchService::Domain", - "category": "Resource", - "startLine": 78, - "startColumn": 5, - "endLine": 78, - "endColumn": 17, - "ruleDescription": "Check UpdatePolicy values for Resources", + "propertyPath": "Properties.MasterUserPassword", + "category": "Security", + "startLine": 114, + "startColumn": 7, + "endLine": 114, + "endColumn": 25, + "ruleDescription": "Check if Password Properties are correctly configured", "phase": "LINT" }, { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", + "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": "ProductionBucket", + "logicalId": "FifoQueue", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.BucketName.Fn::If.2", "category": "Best Practice", - "startLine": 57, - "startColumn": 54, - "endLine": 57, - "endColumn": 55, - "ruleDescription": "Check Fn::If has a path that cannot be reached", + "startLine": 37, + "startColumn": 3, + "endLine": 37, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", + "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": "ProductionBucket", + "logicalId": "FifoQueue", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.VersioningConfiguration.Status.Fn::If.2", "category": "Best Practice", - "startLine": 62, - "startColumn": 43, - "endLine": 62, - "endColumn": 44, - "ruleDescription": "Check Fn::If has a path that cannot be reached", + "startLine": 37, + "startColumn": 3, + "endLine": 37, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", + "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": "ProductionBucket", + "logicalId": "StandardDLQ", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.PublicAccessBlockConfiguration.BlockPublicAcls.Fn::If.2", "category": "Best Practice", - "startLine": 69, - "startColumn": 13, - "endLine": 69, + "startLine": 45, + "startColumn": 3, + "endLine": 45, "endColumn": 14, - "ruleDescription": "Check Fn::If has a path that cannot be reached", + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W1028", - "severity": "WARN", - "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", + "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": "ProductionBucket", + "logicalId": "StandardDLQ", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.PublicAccessBlockConfiguration.BlockPublicPolicy.Fn::If.2", "category": "Best Practice", - "startLine": 76, - "startColumn": 15, - "endLine": 76, - "endColumn": 16, - "ruleDescription": "Check Fn::If has a path that cannot be reached", + "startLine": 45, + "startColumn": 3, + "endLine": 45, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W2501", - "severity": "WARN", - "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", + "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": "Database", + "logicalId": "SqsFifoQueue", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 98, - "startColumn": 7, - "endLine": 98, - "endColumn": 25, - "ruleDescription": "Check if Password Properties are correctly configured", + "category": "Best Practice", + "startLine": 86, + "startColumn": 3, + "endLine": 86, + "endColumn": 15, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W9008", - "severity": "WARN", - "message": "RDS instance should have StorageEncrypted set to true", - "source": "ENGINE", + "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": "Database", + "logicalId": "SqsFifoQueue", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.StorageEncrypted", - "suggestedFix": "Set StorageEncrypted to true", - "category": "Security", - "startLine": 94, - "startColumn": 5, - "endLine": 94, + "category": "Best Practice", + "startLine": 86, + "startColumn": 3, + "endLine": 86, "endColumn": 15, - "ruleDescription": "RDS instance should have StorageEncrypted", + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W9010", - "severity": "WARN", - "message": "Hardcoded AMI ID - use a parameter or mapping for portability", - "source": "ENGINE", + "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": "ConditionalResource", + "logicalId": "AuroraCluster", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::RDS::DBCluster" + }, + "category": "Best Practice", + "startLine": 109, + "startColumn": 3, + "endLine": 109, + "endColumn": 16, + "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": "AuroraCluster", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.ImageId", - "category": "Security", - "startLine": 104, - "startColumn": 7, - "endLine": 104, - "endColumn": 14, - "ruleDescription": "Hardcoded AMI ID", + "category": "Best Practice", + "startLine": 109, + "startColumn": 3, + "endLine": 109, + "endColumn": 16, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { @@ -15978,15 +10610,15 @@ "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": "Database", + "logicalId": "BadEngineInstance", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, "category": "Best Practice", - "startLine": 91, + "startLine": 115, "startColumn": 3, - "endLine": 91, - "endColumn": 11, + "endLine": 115, + "endColumn": 20, "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, @@ -15996,76 +10628,149 @@ "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": "Database", + "logicalId": "BadEngineInstance", "entityType": "Resource", "resourceType": "AWS::RDS::DBInstance" }, "category": "Best Practice", - "startLine": 91, + "startLine": 115, "startColumn": 3, - "endLine": 91, - "endColumn": 11, + "endLine": 115, + "endColumn": 20, "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": "FifoQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 39, + "startColumn": 5, + "endLine": 39, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "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": "StandardDLQ", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 47, + "startColumn": 5, + "endLine": 47, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "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": "SqsFifoQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 88, + "startColumn": 5, + "endLine": 88, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, { "ruleId": "I3013", "severity": "INFO", "message": "'BackupRetentionPeriod' 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": "Database", + "logicalId": "AuroraCluster", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::RDS::DBCluster" }, "propertyPath": "Properties", "category": "Best Practice", - "startLine": 94, + "startLine": 111, "startColumn": 5, - "endLine": 94, + "endLine": 111, "endColumn": 15, "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3042", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "ARN in Resource CognitoAuthorizer contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", + "source": "CFN_LINT", "entity": { - "logicalId": "ProductionBucket", + "logicalId": "CognitoAuthorizer", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ApiGateway::Authorizer" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.ProviderARNs.0.Fn::Sub", "category": "Best Practice", - "startLine": 57, + "startLine": 61, + "startColumn": 16, + "endLine": 61, + "endColumn": 23, + "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", + "phase": "LINT" + }, + { + "ruleId": "I3042", + "severity": "INFO", + "message": "ARN in Resource FifoProcessor contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters", + "source": "CFN_LINT", + "entity": { + "logicalId": "FifoProcessor", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Role.Fn::Sub", + "category": "Best Practice", + "startLine": 97, "startColumn": 7, - "endLine": 57, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProduction'" - } + "endLine": 97, + "endColumn": 14, + "ruleDescription": "ARNs should use correctly placed Pseudo Parameters", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DevelopmentBucket", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 89, + "startLine": 7, "startColumn": 7, - "endLine": 89, - "endColumn": 17, + "endLine": 7, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16075,43 +10780,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 96, + "startLine": 8, "startColumn": 7, - "endLine": 96, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 8, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Database", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 97, + "startLine": 10, "startColumn": 7, - "endLine": 97, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "endLine": 10, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16121,67 +10826,65 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalResource", + "logicalId": "FargateService", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Properties.ImageId", + "propertyPath": "Properties.LaunchType", "category": "Best Practice", - "startLine": 104, + "startLine": 17, "startColumn": 7, - "endLine": 104, - "endColumn": 14, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 17, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalResource", + "logicalId": "AwsvpcTaskDef", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.InstanceType", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 107, + "startLine": 27, "startColumn": 7, - "endLine": 107, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 27, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "Fn::If on condition 'IsProductionAndCreateDB'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConditionalResource", + "logicalId": "AwsvpcTaskDef", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.SecurityGroups", + "propertyPath": "Properties.ContainerDefinitions", "category": "Best Practice", - "startLine": 109, + "startLine": 28, "startColumn": 7, - "endLine": 109, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "endLine": 28, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16191,19 +10894,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ProductionSecurityGroup", + "logicalId": "FifoQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.FifoQueue", "category": "Best Practice", - "startLine": 137, + "startLine": 40, "startColumn": 7, - "endLine": 137, - "endColumn": 23, + "endLine": 40, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16213,19 +10917,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DevSecurityGroup", + "logicalId": "FifoQueue", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.GroupDescription", + "propertyPath": "Properties.QueueName", "category": "Best Practice", - "startLine": 143, + "startLine": 41, "startColumn": 7, - "endLine": 143, - "endColumn": 23, + "endLine": 41, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16235,332 +10940,186 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", + "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NestedConditionResource", + "logicalId": "StandardDLQ", "entityType": "Resource", - "resourceType": "AWS::S3::BucketPolicy" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Bucket", + "propertyPath": "Properties.FifoQueue", "category": "Best Practice", - "startLine": 149, + "startLine": 48, "startColumn": 7, - "endLine": 149, - "endColumn": 13, + "endLine": 48, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition 'IsProduction'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LogicalConditionResource", + "logicalId": "CognitoAuthorizer", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::ApiGateway::Authorizer" }, - "propertyPath": "Properties.AlarmName", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 171, + "startLine": 57, "startColumn": 7, - "endLine": 171, + "endLine": 57, "endColumn": 16, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Fn::If on condition '__inline_cond_131'" + "resolutionSource": "Ref to 'RestApi'" } }, { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", - "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ProductionBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ProductionBucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 55, - "startColumn": 5, - "endLine": 55, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'DevelopmentBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "DevelopmentBucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 88, - "startColumn": 5, - "endLine": 88, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Database' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Database", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBInstance" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 94, - "startColumn": 5, - "endLine": 94, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'ProductionSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "ProductionSecurityGroup", - "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 136, - "startColumn": 5, - "endLine": 136, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'DevSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "DevSecurityGroup", + "logicalId": "MethodBadAuth", "entityType": "Resource", - "resourceType": "AWS::EC2::SecurityGroup" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 142, - "startColumn": 5, - "endLine": 142, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 65, + "startColumn": 7, + "endLine": 65, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'RestApi'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'LogicalConditionResource' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Property 'ResourceId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LogicalConditionResource", + "logicalId": "MethodBadAuth", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ResourceId", "category": "Best Practice", - "startLine": 170, - "startColumn": 5, - "endLine": 170, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "lsp/constants.json": { - "filePath": "lsp/constants.json", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 5, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "F0005", - "severity": "FATAL", - "message": "'Constants' is not a valid top-level template section", - "source": "SCHEMA", - "propertyPath": "Constants", - "category": "Structure", - "startLine": 4, - "startColumn": 3, - "endLine": 4, - "endColumn": 13, - "ruleDescription": "Top-level keys must be valid section names", - "phase": "SCHEMA" - }, - { - "ruleId": "F1018", - "severity": "FATAL", - "message": "Fn::Sub variable '${sub}' does not reference a valid resource, parameter, or pseudo-parameter", - "source": "SCHEMA", - "entity": { - "logicalId": "Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Metadata.Test", - "category": "Intrinsic Function", - "startLine": 19, - "startColumn": 9, - "endLine": 19, - "endColumn": 14, - "ruleDescription": "Sub variables must resolve", - "phase": "SCHEMA" - }, - { - "ruleId": "F1018", - "severity": "FATAL", - "message": "Fn::Sub variable '${foo}' does not reference a valid resource, parameter, or pseudo-parameter", - "source": "SCHEMA", - "entity": { - "logicalId": "Bucket", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Intrinsic Function", - "startLine": 27, - "startColumn": 9, - "endLine": 27, - "endColumn": 20, - "ruleDescription": "Sub variables must resolve", + "startLine": 66, + "startColumn": 7, + "endLine": 66, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "resolutionSource": "dynamic (Sub:${foo})" + "lifecycle": "create-only", + "resolutionSource": "GetAtt RestApi.RootResourceId" } }, { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'obj' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'Bucket', 'PersonalS3']", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HttpMethod' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "MethodBadAuth", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ApiGateway::Method" }, - "propertyPath": "Metadata.TestObj", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 22, - "startColumn": 9, - "endLine": 22, + "propertyPath": "Properties.HttpMethod", + "category": "Best Practice", + "startLine": 67, + "startColumn": 7, + "endLine": 67, "endColumn": 17, - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'foo' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'Bucket', 'PersonalS3']", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "Deployment", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ApiGateway::Deployment" }, - "propertyPath": "Properties.Tags.0.Value", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 33, - "startColumn": 13, - "endLine": 33, - "endColumn": 19, - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" + "propertyPath": "Properties.RestApiId", + "category": "Best Practice", + "startLine": 78, + "startColumn": 7, + "endLine": 78, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'RestApi'" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'RestApiId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "StageBadApi", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.RestApiId", "category": "Best Practice", - "startLine": 27, - "startColumn": 9, - "endLine": 27, - "endColumn": 20, + "startLine": 82, + "startColumn": 7, + "endLine": 82, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:${foo})" + "resolutionSource": "Ref to 'RestApi2'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'StageName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PersonalS3", + "logicalId": "StageBadApi", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.StageName", "category": "Best Practice", - "startLine": 43, - "startColumn": 9, - "endLine": 43, - "endColumn": 20, + "startLine": 84, + "startColumn": 7, + "endLine": 84, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -16568,517 +11127,490 @@ } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'PersonalS3' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PersonalS3", + "logicalId": "SqsFifoQueue", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.FifoQueue", "category": "Best Practice", - "startLine": 42, + "startLine": 89, "startColumn": 7, - "endLine": 42, - "endColumn": 18, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "lsp/constants.yaml": { - "filePath": "lsp/constants.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 5, - "errors": 0, - "warnings": 0, - "informational": 3, - "debug": 0 + "endLine": 89, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "F0005", - "severity": "FATAL", - "message": "'Constants' is not a valid top-level template section", - "source": "SCHEMA", - "propertyPath": "Constants", - "category": "Structure", - "startLine": 4, - "startColumn": 1, - "endLine": 4, - "endColumn": 10, - "ruleDescription": "Top-level keys must be valid section names", - "phase": "SCHEMA" + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SqsFifoQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.QueueName", + "category": "Best Practice", + "startLine": 90, + "startColumn": 7, + "endLine": 90, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F1018", - "severity": "FATAL", - "message": "Fn::Sub variable '${sub}' does not reference a valid resource, parameter, or pseudo-parameter", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "FifoProcessor", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Metadata.Test", - "category": "Intrinsic Function", - "startLine": 15, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 94, "startColumn": 7, - "endLine": 15, - "endColumn": 11, - "ruleDescription": "Sub variables must resolve", - "phase": "SCHEMA" + "endLine": 94, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "F1018", - "severity": "FATAL", - "message": "Fn::Sub variable '${foo}' does not reference a valid resource, parameter, or pseudo-parameter", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "FifoMapping", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.BucketName", - "category": "Intrinsic Function", - "startLine": 18, + "propertyPath": "Properties.EventSourceArn", + "category": "Best Practice", + "startLine": 105, "startColumn": 7, - "endLine": 18, - "endColumn": 17, - "ruleDescription": "Sub variables must resolve", + "endLine": 105, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "resolutionSource": "dynamic (Sub:${foo})" + "lifecycle": "create-only", + "resolutionSource": "GetAtt SqsFifoQueue.Arn" } }, { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'obj' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'Bucket', 'PersonalS3']", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "AuroraCluster", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Metadata.TestObj", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 16, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 112, "startColumn": 7, - "endLine": 16, - "endColumn": 14, - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" + "endLine": 112, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "F1020", - "severity": "FATAL", - "message": "'foo' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'Bucket', 'PersonalS3']", - "source": "SCHEMA", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "AuroraCluster", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBCluster" }, - "propertyPath": "Properties.Tags.0.Value", - "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", - "category": "Intrinsic Function", - "startLine": 21, - "startColumn": 11, - "endLine": 21, - "endColumn": 16, - "ruleDescription": "Ref/GetAtt target must exist", - "phase": "SCHEMA" + "propertyPath": "Properties.MasterUsername", + "category": "Best Practice", + "startLine": 113, + "startColumn": 7, + "endLine": 113, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'DBClusterIdentifier' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket", + "logicalId": "BadEngineInstance", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.DBClusterIdentifier", "category": "Best Practice", - "startLine": 18, + "startLine": 118, "startColumn": 7, - "endLine": 18, - "endColumn": 17, + "endLine": 118, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "dynamic (Sub:${foo})" + "resolutionSource": "Ref to 'AuroraCluster'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PersonalS3", + "logicalId": "BadEngineInstance", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 26, + "startLine": 120, "startColumn": 7, - "endLine": 26, - "endColumn": 17, + "endLine": 120, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'PersonalS3' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'TaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "PersonalS3", + "logicalId": "TaskDef", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ECS::TaskDefinition" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 25, + "startLine": 6, "startColumn": 5, - "endLine": 25, + "endLine": 6, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "lsp/parameter_usage.json": { - "filePath": "lsp/parameter_usage.json", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 3, - "informational": 10, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E3001", - "severity": "ERROR", - "message": "Resource 'Bucket1' has invalid property 'Conditions'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FargateService' of type 'AWS::ECS::Service' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "Bucket1", + "logicalId": "FargateService", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "category": "Resource", - "startLine": 31, - "startColumn": 7, - "endLine": 31, - "endColumn": 18, - "ruleDescription": "Basic CloudFormation Resource Check", - "phase": "PARSE" - }, - { - "ruleId": "W7001", - "severity": "WARN", - "message": "Mapping 'EnvMap' is not referenced by any Fn::FindInMap", - "source": "CFN_LINT", - "entity": { - "logicalId": "EnvMap", - "entityType": "Mapping" + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Mappings/EnvMap", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 11, + "startLine": 16, "startColumn": 5, - "endLine": 11, - "endColumn": 12, - "ruleDescription": "Check if Mappings are Used", + "endLine": 16, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'IsProduction' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'AwsvpcTaskDef' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "IsProduction", - "entityType": "Condition" + "logicalId": "AwsvpcTaskDef", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Conditions/IsProduction", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 21, + "startLine": 26, "startColumn": 5, - "endLine": 21, - "endColumn": 18, - "ruleDescription": "Check if Conditions are Used", + "endLine": 26, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'IsDevEnv' is not used by any resource or Fn::If", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ServiceNoNetConfig' of type 'AWS::ECS::Service' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "IsDevEnv", - "entityType": "Condition" + "logicalId": "ServiceNoNetConfig", + "entityType": "Resource", + "resourceType": "AWS::ECS::Service" }, - "propertyPath": "Conditions/IsDevEnv", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 24, + "startLine": 34, "startColumn": 5, - "endLine": 24, - "endColumn": 14, - "ruleDescription": "Check if Conditions are Used", + "endLine": 34, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Resource 'FifoQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket1", + "logicalId": "FifoQueue", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 33, - "startColumn": 9, - "endLine": 33, - "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 39, + "startColumn": 5, + "endLine": 39, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Resource 'StandardDLQ' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket2", + "logicalId": "StandardDLQ", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 41, - "startColumn": 9, - "endLine": 41, - "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 47, + "startColumn": 5, + "endLine": 47, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Resource 'RestApi' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket3", + "logicalId": "RestApi", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ApiGateway::RestApi" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 49, - "startColumn": 9, - "endLine": 49, - "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 52, + "startColumn": 5, + "endLine": 52, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Resource 'RestApi2' of type 'AWS::ApiGateway::RestApi' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket4", + "logicalId": "RestApi2", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ApiGateway::RestApi" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 57, - "startColumn": 9, - "endLine": 57, - "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 73, + "startColumn": 5, + "endLine": 73, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Resource 'StageBadApi' of type 'AWS::ApiGateway::Stage' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket5", + "logicalId": "StageBadApi", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::ApiGateway::Stage" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 65, - "startColumn": 9, - "endLine": 65, - "endColumn": 20, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 81, + "startColumn": 5, + "endLine": 81, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket1' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'SqsFifoQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket1", + "logicalId": "SqsFifoQueue", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::SQS::Queue" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 32, - "startColumn": 7, - "endLine": 32, - "endColumn": 18, + "startLine": 88, + "startColumn": 5, + "endLine": 88, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket2' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'FifoProcessor' of type 'AWS::Lambda::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket2", + "logicalId": "FifoProcessor", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 40, - "startColumn": 7, - "endLine": 40, - "endColumn": 18, + "startLine": 93, + "startColumn": 5, + "endLine": 93, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket3' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'FifoMapping' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket3", + "logicalId": "FifoMapping", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::Lambda::EventSourceMapping" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 48, - "startColumn": 7, - "endLine": 48, - "endColumn": 18, + "startLine": 104, + "startColumn": 5, + "endLine": 104, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket4' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'AuroraCluster' of type 'AWS::RDS::DBCluster' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket4", + "logicalId": "AuroraCluster", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBCluster" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 56, - "startColumn": 7, - "endLine": 56, - "endColumn": 18, + "startLine": 111, + "startColumn": 5, + "endLine": 111, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'Bucket5' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'BadEngineInstance' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket5", + "logicalId": "BadEngineInstance", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 64, - "startColumn": 7, - "endLine": 64, - "endColumn": 18, + "startLine": 117, + "startColumn": 5, + "endLine": 117, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "lsp/parameter_usage.yaml": { - "filePath": "lsp/parameter_usage.yaml", + "integration/custom-resources.yaml": { + "filePath": "integration/custom-resources.yaml", "status": "OK", "metadata": { - "resourcesScanned": 7, + "resourcesScanned": 2, "counts": { "fatal": 0, "errors": 1, - "warnings": 3, - "informational": 14, + "warnings": 0, + "informational": 2, "debug": 0 }, "suppressed": 0, @@ -17087,115 +11619,41 @@ }, "diagnostics": [ { - "ruleId": "E3001", + "ruleId": "E9004", "severity": "ERROR", - "message": "Resource 'Bucket1' has invalid property 'Conditions'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", - "source": "CFN_LINT", + "message": "'ArnA' is not one of ['Arn', 'KeyId']", + "source": "SCHEMA", "entity": { - "logicalId": "Bucket1", + "logicalId": "CustomResource", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "category": "Resource", - "startLine": 27, - "startColumn": 5, - "endLine": 27, - "endColumn": 15, - "ruleDescription": "Basic CloudFormation Resource Check", - "phase": "PARSE" - }, - { - "ruleId": "W7001", - "severity": "WARN", - "message": "Mapping 'EnvMap' is not referenced by any Fn::FindInMap", - "source": "CFN_LINT", - "entity": { - "logicalId": "EnvMap", - "entityType": "Mapping" + "resourceType": "AWS::CloudFormation::CustomResource" }, - "propertyPath": "Mappings/EnvMap", - "category": "Best Practice", + "propertyPath": "Properties.KmsKeyId", + "suggestedFix": "Check the resource type documentation for valid GetAtt attributes", + "category": "Intrinsic Function", "startLine": 12, - "startColumn": 3, + "startColumn": 7, "endLine": 12, - "endColumn": 9, - "ruleDescription": "Check if Mappings are Used", - "phase": "LINT" - }, - { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'IsProduction' is not used by any resource or Fn::If", - "source": "CFN_LINT", - "entity": { - "logicalId": "IsProduction", - "entityType": "Condition" - }, - "propertyPath": "Conditions/IsProduction", - "category": "Best Practice", - "startLine": 20, - "startColumn": 3, - "endLine": 20, "endColumn": 15, - "ruleDescription": "Check if Conditions are Used", - "phase": "LINT" - }, - { - "ruleId": "W8001", - "severity": "WARN", - "message": "Condition 'IsDevEnv' is not used by any resource or Fn::If", - "source": "CFN_LINT", - "entity": { - "logicalId": "IsDevEnv", - "entityType": "Condition" - }, - "propertyPath": "Conditions/IsDevEnv", - "category": "Best Practice", - "startLine": 21, - "startColumn": 3, - "endLine": 21, - "endColumn": 11, - "ruleDescription": "Check if Conditions are Used", + "ruleDescription": "GetAtt attribute must exist on target resource type", "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket1", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.BucketName", - "category": "Best Practice", - "startLine": 29, - "startColumn": 7, - "endLine": 29, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'ServiceToken' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket2", + "logicalId": "CustomResource", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::CloudFormation::CustomResource" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.ServiceToken", "category": "Best Practice", - "startLine": 35, + "startLine": 11, "startColumn": 7, - "endLine": 35, - "endColumn": 17, + "endLine": 11, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -17203,43 +11661,60 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Resource 'KmsKey' of type 'AWS::KMS::Key' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "Bucket3", + "logicalId": "KmsKey", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::KMS::Key" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 42, - "startColumn": 7, - "endLine": 42, - "endColumn": 17, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "integration/deployment-file-template.yaml": { + "filePath": "integration/deployment-file-template.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 13, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket4", + "logicalId": "Vpc", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 48, + "startLine": 24, "startColumn": 7, - "endLine": 48, - "endColumn": 17, + "endLine": 24, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -17249,19 +11724,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket5", + "logicalId": "Subnet1", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 53, + "startLine": 28, "startColumn": 7, - "endLine": 53, - "endColumn": 17, + "endLine": 28, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -17271,19 +11746,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket6", + "logicalId": "Subnet1", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 58, + "startLine": 29, "startColumn": 7, - "endLine": 58, - "endColumn": 17, + "endLine": 29, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -17293,314 +11768,189 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket7", + "logicalId": "Subnet1", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.BucketName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 64, + "startLine": 30, "startColumn": 7, - "endLine": 64, - "endColumn": 17, + "endLine": 30, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc'" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Bucket1' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket1", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 28, - "startColumn": 5, - "endLine": 28, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Bucket2' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'Affinity' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket2", + "logicalId": "MyInstance", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Affinity", "category": "Best Practice", "startLine": 34, - "startColumn": 5, + "startColumn": 7, "endLine": 34, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Bucket3' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket3", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 41, - "startColumn": 5, - "endLine": 41, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Bucket4' of type 'AWS::S3::Bucket' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Bucket4", - "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 47, - "startColumn": 5, - "endLine": 47, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Bucket5' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket5", + "logicalId": "MyInstance", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 52, - "startColumn": 5, - "endLine": 52, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'ImageId' (type AWS::EC2::Image::Id)" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Bucket6' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket6", + "logicalId": "MyInstance", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 57, - "startColumn": 5, - "endLine": 57, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 36, + "startColumn": 7, + "endLine": 36, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Bucket7' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'SubnetId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Bucket7", + "logicalId": "MyInstance", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SubnetId", "category": "Best Practice", - "startLine": 63, - "startColumn": 5, - "endLine": 63, + "startLine": 37, + "startColumn": 7, + "endLine": 37, "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "lsp/simple.json": { - "filePath": "lsp/simple.json", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt Subnet1.SubnetId" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'MyS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Property 'Tenancy' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "MyS3Bucket", + "logicalId": "MyInstance", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Tenancy", "category": "Best Practice", - "startLine": 4, - "startColumn": 5, - "endLine": 4, - "endColumn": 16, - "ruleDescription": "Resource should have Tags", + "startLine": 38, + "startColumn": 7, + "endLine": 38, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "parameter with AllowedValues" + } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" - } - ] - }, - "lsp/simple.yaml": { - "filePath": "lsp/simple.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 1, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyS3Bucket", + "logicalId": "Vpc", "entityType": "Resource", - "resourceType": "AWS::S3::Bucket" + "resourceType": "AWS::EC2::VPC" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 3, - "startColumn": 3, - "endLine": 3, - "endColumn": 13, + "startLine": 23, + "startColumn": 5, + "endLine": 23, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "lsp/test-template.yaml": { - "filePath": "lsp/test-template.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 2, - "counts": { - "fatal": 0, - "errors": 2, - "warnings": 0, - "informational": 2, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E3038", - "severity": "ERROR", - "message": "Resource type 'AWS::Serverless::Function' requires the AWS::Serverless-2016-10-31 transform", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyFunction", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" - }, - "category": "Structure", - "startLine": 2, - "startColumn": 3, - "endLine": 2, - "endColumn": 13, - "ruleDescription": "Check if Serverless Resources have Serverless Transform", - "phase": "LINT" - }, - { - "ruleId": "E3038", - "severity": "ERROR", - "message": "Resource type 'AWS::Serverless::Api' requires the AWS::Serverless-2016-10-31 transform", - "source": "CFN_LINT", - "entity": { - "logicalId": "MyApi", - "entityType": "Resource", - "resourceType": "AWS::Serverless::Api" - }, - "category": "Structure", - "startLine": 6, - "startColumn": 3, - "endLine": 6, - "endColumn": 8, - "ruleDescription": "Check if Serverless Resources have Serverless Transform", - "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "message": "Resource 'Subnet1' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyFunction", + "logicalId": "Subnet1", "entityType": "Resource", - "resourceType": "AWS::Serverless::Function" + "resourceType": "AWS::EC2::Subnet" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 4, + "startLine": 27, "startColumn": 5, - "endLine": 4, + "endLine": 27, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -17608,114 +11958,124 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'MyApi' of type 'AWS::Serverless::Api' supports Tags but none are configured", + "message": "Resource 'MyInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "MyApi", + "logicalId": "MyInstance", "entityType": "Resource", - "resourceType": "AWS::Serverless::Api" + "resourceType": "AWS::EC2::Instance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 8, + "startLine": 33, "startColumn": 5, - "endLine": 8, + "endLine": 33, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "malformed.yaml": { - "filePath": "malformed.yaml", - "status": "ERROR", + "integration/dynamic-references.yaml": { + "filePath": "integration/dynamic-references.yaml", + "status": "OK", "metadata": { - "resourcesScanned": 0, + "resourcesScanned": 4, "counts": { "fatal": 1, "errors": 0, - "warnings": 0, - "informational": 0, + "warnings": 1, + "informational": 11, "debug": 0 }, - "suppressed": 0, + "suppressed": 1, "strict": false, "severityLevel": "DEBUG" }, "diagnostics": [ { - "ruleId": "F1101", + "ruleId": "F3031", "severity": "FATAL", - "message": "YAML parse error: mapping values are not allowed in this context at byte 10 line 1 column 11", + "message": "'{{:ssm:/SQS_Queue/SQS_ARN}}' does not match pattern 'arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:((eusc-)?[a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)'", "source": "SCHEMA", - "category": "Structure", - "startLine": 1, - "startColumn": 11, - "endLine": 1, - "endColumn": 11, - "ruleDescription": "Invalid YAML/JSON syntax", - "phase": "PARSE" - } - ] - }, - "public/lambda-poller.json": { - "filePath": "public/lambda-poller.json", - "status": "OK", - "metadata": { - "resourcesScanned": 5, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 9, - "debug": 0 + "entity": { + "logicalId": "SESEventSourceMappingBadDynamicReference", + "entityType": "Resource", + "resourceType": "AWS::Lambda::EventSourceMapping" + }, + "propertyPath": "Properties.EventSourceArn", + "category": "Schema", + "startLine": 16, + "startColumn": 7, + "endLine": 16, + "endColumn": 21, + "ruleDescription": "Value does not match pattern", + "phase": "SCHEMA", + "context": { + "actualValue": "{{:ssm:/SQS_Queue/SQS_ARN}}", + "expectedConstraint": "arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:((eusc-)?[a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)" + } }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs6.10' was deprecated on '2019-08-12'. Creation was disabled on '2019-07-12', and updates were disabled on '2019-08-12'. Please consider updating to 'nodejs24.x'", + "ruleId": "W1053", + "severity": "WARN", + "message": "'{{ resolve:ssm:/SQS_Queue/SQS_ARN }}' has spaces and will not be resolved as a dynamic reference. Remove spaces from '{{resolve:...}}'", "source": "CFN_LINT", "entity": { - "logicalId": "PollerFunction", + "logicalId": "SESEventSourceMappingSpaces", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 92, - "startColumn": 17, - "endLine": 92, - "endColumn": 25, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "propertyPath": "Properties.EventSourceArn", + "suggestedFix": "Remove spaces from the dynamic reference", + "category": "Best Practice", + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 21, + "ruleDescription": "Dynamic references should not contain spaces", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SESEventSourceMapping", + "entityType": "Resource", + "resourceType": "AWS::Lambda::EventSourceMapping" + }, + "propertyPath": "Properties.EventSourceArn", + "category": "Best Practice", + "startLine": 9, + "startColumn": 7, + "endLine": 9, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "nodejs6.10", - "lifecycle": "end-of-life" + "lifecycle": "create-only", + "resolutionSource": "dynamic (dynamic reference: {{resolve:ssm:/SQS_Queue/SQS_ARN}})" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PollerFunctionIamRole", + "logicalId": "SESEventSourceMappingBadDynamicReference", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.EventSourceArn", "category": "Best Practice", - "startLine": 37, - "startColumn": 17, - "endLine": 37, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "startLine": 16, + "startColumn": 7, + "endLine": 16, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -17725,20 +12085,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'DeploymentMode' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PollerEventRuleIamRole", + "logicalId": "Broker", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::AmazonMQ::Broker" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.DeploymentMode", "category": "Best Practice", - "startLine": 133, - "startColumn": 17, - "endLine": 133, - "endColumn": 22, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "startLine": 24, + "startColumn": 9, + "endLine": 24, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -17748,19 +12107,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'EngineType' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PollerFunctionEventInvokePermission", + "logicalId": "Broker", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AmazonMQ::Broker" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.EngineType", "category": "Best Practice", - "startLine": 192, - "startColumn": 17, - "endLine": 192, - "endColumn": 24, + "startLine": 25, + "startColumn": 9, + "endLine": 25, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -17770,41 +12129,40 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'BrokerName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PollerFunctionEventInvokePermission", + "logicalId": "Broker", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AmazonMQ::Broker" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.BrokerName", "category": "Best Practice", - "startLine": 193, - "startColumn": 17, - "endLine": 193, - "endColumn": 30, + "startLine": 30, + "startColumn": 9, + "endLine": 30, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "Ref to 'PollerFunction'" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'PubliclyAccessible' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PollerFunctionEventInvokePermission", + "logicalId": "Broker", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AmazonMQ::Broker" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.PubliclyAccessible", "category": "Best Practice", - "startLine": 196, - "startColumn": 17, - "endLine": 196, + "startLine": 31, + "startColumn": 9, + "endLine": 31, "endColumn": 27, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", @@ -17815,98 +12173,117 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'EventSourceArn' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PollerFunctionEventInvokePermission", + "logicalId": "SESEventSourceMappingSpaces", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Lambda::EventSourceMapping" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.EventSourceArn", "category": "Best Practice", - "startLine": 197, - "startColumn": 17, - "endLine": 197, - "endColumn": 27, + "startLine": 37, + "startColumn": 7, + "endLine": 37, + "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt PollerEventRule.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'PollerFunctionIamRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'SESEventSourceMapping' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "PollerFunctionIamRole", + "logicalId": "SESEventSourceMapping", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::EventSourceMapping" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 20, - "startColumn": 13, - "endLine": 20, - "endColumn": 24, + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'PollerEventRuleIamRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'SESEventSourceMappingBadDynamicReference' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "PollerEventRuleIamRole", + "logicalId": "SESEventSourceMappingBadDynamicReference", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::Lambda::EventSourceMapping" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 116, - "startColumn": 13, - "endLine": 116, - "endColumn": 24, + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'PollerEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Resource 'Broker' of type 'AWS::AmazonMQ::Broker' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "PollerEventRule", + "logicalId": "Broker", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::AmazonMQ::Broker" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 162, - "startColumn": 13, - "endLine": 162, - "endColumn": 24, + "startLine": 20, + "startColumn": 5, + "endLine": 20, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SESEventSourceMappingSpaces' of type 'AWS::Lambda::EventSourceMapping' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SESEventSourceMappingSpaces", + "entityType": "Resource", + "resourceType": "AWS::Lambda::EventSourceMapping" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 34, + "startColumn": 5, + "endLine": 34, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "public/lambda-poller.yaml": { - "filePath": "public/lambda-poller.yaml", + "integration/formats.yaml": { + "filePath": "integration/formats.yaml", "status": "OK", "metadata": { - "resourcesScanned": 5, + "resourcesScanned": 4, "counts": { "fatal": 0, - "errors": 1, - "warnings": 0, - "informational": 9, + "errors": 2, + "warnings": 4, + "informational": 13, "debug": 0 }, "suppressed": 0, @@ -17915,45 +12292,143 @@ }, "diagnostics": [ { - "ruleId": "E2533", + "ruleId": "E1040", "severity": "ERROR", - "message": "Runtime 'nodejs6.10' was deprecated on '2019-08-12'. Creation was disabled on '2019-07-12', and updates were disabled on '2019-08-12'. Please consider updating to 'nodejs24.x'", + "message": "{'Fn::GetAtt': ['SecurityGroup', 'GroupName']} does not match destination format of 'AWS::EC2::SecurityGroup.Id'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Instance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.NetworkInterfaces.2.GroupSet.0", + "suggestedFix": "Use the correct GetAtt attribute", + "category": "Intrinsic Function", + "startLine": 44, + "startColumn": 21, + "endLine": 44, + "endColumn": 22, + "ruleDescription": "Check if GetAtt matches destination format", + "phase": "LINT" + }, + { + "ruleId": "E1150", + "severity": "ERROR", + "message": "'sg-dne' does not match format 'AWS::EC2::SecurityGroup.Id'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Instance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.NetworkInterfaces.1.GroupSet.3", + "category": "Intrinsic Function", + "startLine": 40, + "startColumn": 13, + "endLine": 40, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Validate security group format", + "phase": "SCHEMA", + "context": { + "actualValue": "sg-dne" + } + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "0 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", + "entity": { + "logicalId": "Instance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.NetworkInterfaces.0.DeviceIndex", + "category": "Best Practice", + "startLine": 31, + "startColumn": 11, + "endLine": 31, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", + "entity": { + "logicalId": "Instance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.NetworkInterfaces.1.DeviceIndex", + "category": "Best Practice", + "startLine": 34, + "startColumn": 11, + "endLine": 34, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "2 is not of type 'string' - automatically coerced (number to string)", "source": "CFN_LINT", "entity": { - "logicalId": "PollerFunction", + "logicalId": "Instance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.NetworkInterfaces.2.DeviceIndex", + "category": "Best Practice", + "startLine": 41, + "startColumn": 11, + "endLine": 41, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", + "entity": { + "logicalId": "Instance1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 151, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 28, "startColumn": 7, - "endLine": 151, + "endLine": 28, "endColumn": 14, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs6.10", - "lifecycle": "end-of-life" - } + "ruleDescription": "Hardcoded AMI ID", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PollerFunctionIamRole", + "logicalId": "Vpc", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 27, + "startLine": 11, "startColumn": 7, - "endLine": 27, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 11, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -17963,42 +12438,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PollerEventRuleIamRole", + "logicalId": "Subnet", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 172, + "startLine": 16, "startColumn": 7, - "endLine": 172, - "endColumn": 11, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "endLine": 16, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PollerFunctionEventInvokePermission", + "logicalId": "Subnet", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 197, + "startLine": 17, "startColumn": 7, - "endLine": 197, - "endColumn": 13, + "endLine": 17, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -18008,42 +12483,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PollerFunctionEventInvokePermission", + "logicalId": "SecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 198, + "startLine": 22, "startColumn": 7, - "endLine": 198, - "endColumn": 19, + "endLine": 22, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "Ref to 'PollerFunction'" + "resolutionSource": "Ref to 'Vpc'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PollerFunctionEventInvokePermission", + "logicalId": "SecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 199, + "startLine": 23, "startColumn": 7, - "endLine": 199, - "endColumn": 16, + "endLine": 23, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -18053,305 +12528,173 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PollerFunctionEventInvokePermission", + "logicalId": "Instance1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.SourceArn", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 200, + "startLine": 28, "startColumn": 7, - "endLine": 200, - "endColumn": 16, + "endLine": 28, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt PollerEventRule.Arn" + "lifecycle": "create-only" } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'PollerFunctionIamRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "PollerFunctionIamRole", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 17, - "startColumn": 5, - "endLine": 17, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'PollerEventRuleIamRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PollerEventRuleIamRole", + "logicalId": "Instance1", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 162, - "startColumn": 5, - "endLine": 162, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 29, + "startColumn": 7, + "endLine": 29, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'PollerEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "PollerEventRule", + "logicalId": "Instance1", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.NetworkInterfaces", "category": "Best Practice", - "startLine": 185, - "startColumn": 5, - "endLine": 185, - "endColumn": 15, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - } - ] - }, - "public/rds-cluster.yaml": { - "filePath": "public/rds-cluster.yaml", - "status": "OK", - "metadata": { - "resourcesScanned": 1, - "counts": { - "fatal": 0, - "errors": 1, - "warnings": 1, - "informational": 7, - "debug": 0 - }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ - { - "ruleId": "E9006", - "severity": "ERROR", - "message": "'aurora' is not one of ['aurora-mysql', 'aurora-postgresql', 'mysql', 'postgres']", - "source": "CFN_LINT", - "entity": { - "logicalId": "DBCluster", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "propertyPath": "Properties.Engine", - "category": "Schema", - "startLine": 24, - "startColumn": 7, - "endLine": 24, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Property value not valid for conditional extension enum", - "phase": "SCHEMA" - }, - { - "ruleId": "W1011", - "severity": "WARN", - "message": "Use dynamic references (e.g., SSM SecureString) instead of parameter 'DatabaseMasterPassword' for secrets", - "source": "CFN_LINT", - "entity": { - "logicalId": "DBCluster", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "propertyPath": "Properties.MasterUserPassword", - "category": "Security", - "startLine": 22, + "startLine": 30, "startColumn": 7, - "endLine": 22, - "endColumn": 25, - "ruleDescription": "Instead of REFing a parameter for a secret use a dynamic reference", - "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": "DBCluster", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "category": "Best Practice", - "startLine": 18, - "startColumn": 3, - "endLine": 18, - "endColumn": 12, - "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": "DBCluster", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "category": "Best Practice", - "startLine": 18, - "startColumn": 3, - "endLine": 18, - "endColumn": 12, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", - "phase": "LINT" + "endLine": 30, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I3013", + "ruleId": "I9003", "severity": "INFO", - "message": "'BackupRetentionPeriod' 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": "DBCluster", - "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" - }, - "propertyPath": "Properties", - "category": "Best Practice", - "startLine": 20, - "startColumn": 5, - "endLine": 20, - "endColumn": 15, - "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DBCluster", + "logicalId": "Vpc", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.MasterUsername", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 21, - "startColumn": 7, - "endLine": 21, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "parameter 'DatabaseMasterUsername' (type String)" - } + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'DatabaseName' is create-only; updating it will cause resource replacement", + "message": "Resource 'Subnet' of type 'AWS::EC2::Subnet' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DBCluster", + "logicalId": "Subnet", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.DatabaseName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 23, - "startColumn": 7, - "endLine": 23, - "endColumn": 19, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'DatabaseName' (type String)" - } + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "message": "Resource 'SecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DBCluster", + "logicalId": "SecurityGroup", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Engine", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 24, - "startColumn": 7, - "endLine": 24, - "endColumn": 13, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "startLine": 21, + "startColumn": 5, + "endLine": 21, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'EngineMode' is create-only; updating it will cause resource replacement", + "message": "Resource 'Instance1' of type 'AWS::EC2::Instance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DBCluster", + "logicalId": "Instance1", "entityType": "Resource", - "resourceType": "AWS::RDS::DBCluster" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.EngineMode", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 25, - "startColumn": 7, - "endLine": 25, - "endColumn": 17, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 27, + "startColumn": 5, + "endLine": 27, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, - "public/watchmaker.json": { - "filePath": "public/watchmaker.json", + "integration/get-stack-output.yaml": { + "filePath": "integration/get-stack-output.yaml", "status": "OK", "metadata": { - "resourcesScanned": 2, + "resourcesScanned": 5, "counts": { "fatal": 0, - "errors": 0, + "errors": 2, "warnings": 0, - "informational": 41, + "informational": 5, "debug": 0 }, "suppressed": 0, @@ -18360,212 +12703,270 @@ }, "diagnostics": [ { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "ruleId": "E1033", + "severity": "ERROR", + "message": "'OutputName' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "InvalidMissing", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.cw-agent-install.commands.01-get-cloudwatch-agent.command.Fn::Join", + "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", "category": "Intrinsic Function", - "startLine": 647, - "startColumn": 37, - "endLine": 647, - "endColumn": 46, - "ruleDescription": "Use Sub instead of Join", + "startLine": 47, + "startColumn": 9, + "endLine": 47, + "endColumn": 27, + "ruleDescription": "GetStackOutput validation of parameters", + "phase": "PARSE" + }, + { + "ruleId": "E1033", + "severity": "ERROR", + "message": "'not-an-object' is not of type 'object'", + "source": "SCHEMA", + "entity": { + "logicalId": "InvalidType", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.DisplayName.Fn::GetStackOutput", + "category": "Intrinsic Function", + "startLine": 54, + "startColumn": 9, + "endLine": 54, + "endColumn": 27, + "ruleDescription": "GetStackOutput validation of parameters", + "phase": "PARSE" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ValidTopic' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ValidTopic", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I1022", + "ruleId": "I9040", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Resource 'ValidJoin' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "ValidJoin", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.cw-agent-install.commands.02-extract-cloudwatch-agent.command.Fn::Join", - "category": "Intrinsic Function", - "startLine": 662, - "startColumn": 37, - "endLine": 662, - "endColumn": 46, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 23, + "startColumn": 5, + "endLine": 23, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I1022", + "ruleId": "I9040", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Resource 'ValidIf' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "ValidIf", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.cw-agent-install.commands.10-install-cloudwatch-agent.command.Fn::Join", - "category": "Intrinsic Function", - "startLine": 673, - "startColumn": 37, - "endLine": 673, - "endColumn": 46, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 34, + "startColumn": 5, + "endLine": 34, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I1022", + "ruleId": "I9040", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Resource 'InvalidMissing' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "InvalidMissing", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.finalize.commands.10-signal-success.command.Fn::Join.1.4.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 816, - "startColumn": 57, - "endLine": 816, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 45, + "startColumn": 5, + "endLine": 45, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I1022", + "ruleId": "I9040", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Resource 'InvalidType' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "InvalidType", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.finalize.commands.10-signal-success.command.Fn::Join.1.5.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 833, - "startColumn": 57, - "endLine": 833, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 52, + "startColumn": 5, + "endLine": 52, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "integration/getatt-types.yaml": { + "filePath": "integration/getatt-types.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 8, + "counts": { + "fatal": 5, + "errors": 1, + "warnings": 0, + "informational": 19, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "ruleId": "F6101", + "severity": "FATAL", + "message": "Output 'SubWithGetAtt': GetAtt 'CapacityReservation.InstanceCount' returns type 'integer', not 'string'", + "source": "SCHEMA", "entity": { - "logicalId": "WatchmakerInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "SubWithGetAtt", + "entityType": "Output" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.make-app.commands.05-get-appscript.command.Fn::Join", - "category": "Intrinsic Function", - "startLine": 869, - "startColumn": 37, - "endLine": 869, - "endColumn": 46, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "propertyPath": "Outputs/SubWithGetAtt/Value.Fn::GetAtt", + "category": "Structure", + "startLine": 84, + "startColumn": 3, + "endLine": 84, + "endColumn": 16, + "ruleDescription": "Output value must be a string", + "phase": "SCHEMA" }, { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "ruleId": "F6101", + "severity": "FATAL", + "message": "Output 'Ipv4NetmaskLength': GetAtt 'CapacityReservation.InstanceCount' returns type 'integer', not 'string'", + "source": "SCHEMA", "entity": { - "logicalId": "WatchmakerInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "Ipv4NetmaskLength", + "entityType": "Output" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.make-app.commands.10-make-app.command.Fn::Join", - "category": "Intrinsic Function", - "startLine": 887, - "startColumn": 37, - "endLine": 887, - "endColumn": 46, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "propertyPath": "Outputs/Ipv4NetmaskLength/Value.Fn::GetAtt", + "category": "Structure", + "startLine": 86, + "startColumn": 3, + "endLine": 86, + "endColumn": 20, + "ruleDescription": "Output value must be a string", + "phase": "SCHEMA" }, { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "ruleId": "F6101", + "severity": "FATAL", + "message": "Output 'String': GetAtt 'CapacityReservation.InstanceCount' returns type 'integer', not 'string'", + "source": "SCHEMA", "entity": { - "logicalId": "WatchmakerInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "String", + "entityType": "Output" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.setup.files./etc/cfn/cfn-hup.conf.content.Fn::Join.1.7.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 932, - "startColumn": 57, - "endLine": 932, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "propertyPath": "Outputs/String/Value.Fn::Sub", + "category": "Structure", + "startLine": 88, + "startColumn": 3, + "endLine": 88, + "endColumn": 9, + "ruleDescription": "Output value must be a string", + "phase": "SCHEMA" }, { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "ruleId": "F6101", + "severity": "FATAL", + "message": "Output 'JoinWithGetAtt': GetAtt 'CapacityReservation.InstanceCount' returns type 'integer', not 'string'", + "source": "SCHEMA", "entity": { - "logicalId": "WatchmakerInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "JoinWithGetAtt", + "entityType": "Output" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.setup.files./etc/cfn/cfn-hup.conf.content.Fn::Join.1.8.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 950, - "startColumn": 57, - "endLine": 950, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "propertyPath": "Outputs/JoinWithGetAtt/Value.Fn::Join.1.0.Fn::GetAtt", + "category": "Structure", + "startLine": 92, + "startColumn": 3, + "endLine": 92, + "endColumn": 17, + "ruleDescription": "Output value must be a string", + "phase": "SCHEMA" }, { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "ruleId": "F6101", + "severity": "FATAL", + "message": "Output 'BooleanGetAtt': GetAtt 'CapacityReservation.EphemeralStorage' returns type 'boolean', not 'string'", + "source": "SCHEMA", "entity": { - "logicalId": "WatchmakerInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "BooleanGetAtt", + "entityType": "Output" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.setup.files./etc/cfn/hooks.d/cfn-auto-reloader.conf.content.Fn::Join.1.7.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 993, - "startColumn": 57, - "endLine": 993, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "propertyPath": "Outputs/BooleanGetAtt/Value.Fn::GetAtt", + "category": "Structure", + "startLine": 96, + "startColumn": 3, + "endLine": 96, + "endColumn": 16, + "ruleDescription": "Output value must be a string", + "phase": "SCHEMA" }, { - "ruleId": "I1022", - "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "ruleId": "E1040", + "severity": "ERROR", + "message": "{'Fn::GetAtt': ['TestLogGroup', 'Arn']} does not match destination format of 'AWS::Logs::LogGroup.Name'", "source": "CFN_LINT", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "TestTaskDefinitionWithGetAtt", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.setup.files./etc/cfn/hooks.d/cfn-auto-reloader.conf.content.Fn::Join.1.8.Fn::If.1.Fn::Join", + "propertyPath": "Properties.ContainerDefinitions.0.LogConfiguration.Options.awslogs-group", + "suggestedFix": "Use the correct GetAtt attribute", "category": "Intrinsic Function", - "startLine": 1010, - "startColumn": 57, - "endLine": 1010, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", + "startLine": 62, + "startColumn": 15, + "endLine": 62, + "endColumn": 28, + "ruleDescription": "Check if GetAtt matches destination format", "phase": "LINT" }, { @@ -18574,16 +12975,15 @@ "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "WatchmakerInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "Join", + "entityType": "Output" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.setup.files./etc/cfn/scripts/watchmaker-install.sh.content.Fn::Join", + "propertyPath": "Outputs/Join/Value.Fn::Join", "category": "Intrinsic Function", - "startLine": 1038, - "startColumn": 37, - "endLine": 1038, - "endColumn": 46, + "startLine": 90, + "startColumn": 3, + "endLine": 90, + "endColumn": 7, "ruleDescription": "Use Sub instead of Join", "phase": "LINT" }, @@ -18593,584 +12993,666 @@ "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", "source": "CFN_LINT", "entity": { - "logicalId": "WatchmakerInstance", - "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "logicalId": "JoinWithGetAtt", + "entityType": "Output" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-launch.commands.10-watchmaker-launch.command.Fn::Join.1.3.Fn::If.1.Fn::Join", + "propertyPath": "Outputs/JoinWithGetAtt/Value.Fn::Join", "category": "Intrinsic Function", - "startLine": 1101, - "startColumn": 57, - "endLine": 1101, - "endColumn": 66, + "startLine": 92, + "startColumn": 3, + "endLine": 92, + "endColumn": 17, "ruleDescription": "Use Sub instead of Join", "phase": "LINT" }, { - "ruleId": "I1022", + "ruleId": "I9001", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "CapacityReservation", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::CapacityReservation" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-launch.commands.10-watchmaker-launch.command.Fn::Join.1.4.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1119, - "startColumn": 57, - "endLine": 1119, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "propertyPath": "Properties.AvailabilityZone", + "category": "Best Practice", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I1022", + "ruleId": "I9001", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "CapacityReservation", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::CapacityReservation" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-launch.commands.10-watchmaker-launch.command.Fn::Join.1.5.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1137, - "startColumn": 57, - "endLine": 1137, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 12, + "startColumn": 7, + "endLine": 12, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I1022", + "ruleId": "I9001", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Property 'InstancePlatform' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "CapacityReservation", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::EC2::CapacityReservation" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-launch.commands.10-watchmaker-launch.command.Fn::Join.1.6.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1155, - "startColumn": 57, - "endLine": 1155, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "propertyPath": "Properties.InstancePlatform", + "category": "Best Practice", + "startLine": 13, + "startColumn": 7, + "endLine": 13, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I1022", + "ruleId": "I9001", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "TestTaskDefinitionWithGetAtt", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-launch.commands.10-watchmaker-launch.command.Fn::Join.1.7.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1173, - "startColumn": 57, - "endLine": 1173, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 57, + "startColumn": 7, + "endLine": 57, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I1022", + "ruleId": "I9001", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "TestTaskDefinitionWithGetAtt", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-launch.commands.10-watchmaker-launch.command.Fn::Join.1.8.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1191, - "startColumn": 57, - "endLine": 1191, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "propertyPath": "Properties.Cpu", + "category": "Best Practice", + "startLine": 68, + "startColumn": 7, + "endLine": 68, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I1022", + "ruleId": "I9001", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "TestTaskDefinitionWithGetAtt", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-update.commands.10-watchmaker-update.command.Fn::Join.1.4.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1226, - "startColumn": 57, - "endLine": 1226, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "propertyPath": "Properties.ExecutionRoleArn", + "category": "Best Practice", + "startLine": 69, + "startColumn": 7, + "endLine": 69, + "endColumn": 23, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt TestFargateExecutionRole.Arn" + } }, { - "ruleId": "I1022", + "ruleId": "I9001", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "TestTaskDefinitionWithGetAtt", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-update.commands.10-watchmaker-update.command.Fn::Join.1.5.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1244, - "startColumn": 57, - "endLine": 1244, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "propertyPath": "Properties.Memory", + "category": "Best Practice", + "startLine": 70, + "startColumn": 7, + "endLine": 70, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I1022", + "ruleId": "I9001", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "TestTaskDefinitionWithGetAtt", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-update.commands.10-watchmaker-update.command.Fn::Join.1.6.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1262, - "startColumn": 57, - "endLine": 1262, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "propertyPath": "Properties.NetworkMode", + "category": "Best Practice", + "startLine": 71, + "startColumn": 7, + "endLine": 71, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I1022", + "ruleId": "I9001", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "TestTaskDefinitionWithGetAtt", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-update.commands.10-watchmaker-update.command.Fn::Join.1.7.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1280, - "startColumn": 57, - "endLine": 1280, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "propertyPath": "Properties.RequiresCompatibilities", + "category": "Best Practice", + "startLine": 72, + "startColumn": 7, + "endLine": 72, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I1022", + "ruleId": "I9001", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "TestTaskDefinitionWithGetAtt", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-update.commands.10-watchmaker-update.command.Fn::Join.1.8.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1298, - "startColumn": 57, - "endLine": 1298, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", - "phase": "LINT" + "propertyPath": "Properties.TaskRoleArn", + "category": "Best Practice", + "startLine": 74, + "startColumn": 7, + "endLine": 74, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt TestFargateTaskRole.Arn" + } }, { - "ruleId": "I1022", + "ruleId": "I9040", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Resource 'SsmParameter' of type 'AWS::SSM::Parameter' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "SsmParameter", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::SSM::Parameter" }, - "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-update.commands.10-watchmaker-update.command.Fn::Join.1.9.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1316, - "startColumn": 57, - "endLine": 1316, - "endColumn": 66, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I1022", + "ruleId": "I9040", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Resource 'DocDBCluster' of type 'AWS::DocDB::DBCluster' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "DocDBCluster", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::DocDB::DBCluster" }, - "propertyPath": "Properties.Tags.0.Value.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1440, - "startColumn": 29, - "endLine": 1440, - "endColumn": 38, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 23, + "startColumn": 5, + "endLine": 23, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I1022", + "ruleId": "I9040", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Resource 'TestCluster' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "TestCluster", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::ECS::Cluster" }, - "propertyPath": "Properties.UserData.Fn::Base64.Fn::Join.1.88.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1596, - "startColumn": 45, - "endLine": 1596, - "endColumn": 54, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 25, + "startColumn": 3, + "endLine": 25, + "endColumn": 14, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I1022", + "ruleId": "I9040", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Resource 'TestFargateExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "TestFargateExecutionRole", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.UserData.Fn::Base64.Fn::Join.1.89.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1613, - "startColumn": 45, - "endLine": 1613, - "endColumn": 54, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I1022", + "ruleId": "I9040", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Resource 'TestFargateTaskRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "TestFargateTaskRole", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.UserData.Fn::Base64.Fn::Join.1.98.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1642, - "startColumn": 45, - "endLine": 1642, - "endColumn": 54, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 42, + "startColumn": 5, + "endLine": 42, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I1022", + "ruleId": "I9040", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Resource 'TestLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "TestLogGroup", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "Properties.UserData.Fn::Base64.Fn::Join.1.99.Fn::If.1.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1659, - "startColumn": 45, - "endLine": 1659, - "endColumn": 54, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 50, + "startColumn": 3, + "endLine": 50, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I1022", + "ruleId": "I9040", "severity": "INFO", - "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", - "source": "CFN_LINT", + "message": "Resource 'TestTaskDefinitionWithGetAtt' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstanceLogGroup", + "logicalId": "TestTaskDefinitionWithGetAtt", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.LogGroupName.Fn::Join", - "category": "Intrinsic Function", - "startLine": 1691, - "startColumn": 21, - "endLine": 1691, - "endColumn": 30, - "ruleDescription": "Use Sub instead of Join", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 56, + "startColumn": 5, + "endLine": 56, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "integration/metdata.yaml": { + "filePath": "integration/metdata.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 1, + "informational": 0, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "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)", + "ruleId": "F0001", + "severity": "FATAL", + "message": "Resources section must exist and be non-empty", + "source": "SCHEMA", + "category": "Structure", + "startLine": 21, + "startColumn": 1, + "endLine": 21, + "endColumn": 10, + "ruleDescription": "Resources section must exist and be non-empty", + "phase": "SCHEMA" + }, + { + "ruleId": "W2001", + "severity": "WARN", + "message": "Parameter 'VpcId' is not referenced anywhere in the template", "source": "CFN_LINT", "entity": { - "logicalId": "WatchmakerInstanceLogGroup", - "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "logicalId": "VpcId", + "entityType": "Parameter" }, + "propertyPath": "Parameters/VpcId", "category": "Best Practice", - "startLine": 1687, - "startColumn": 9, - "endLine": 1687, - "endColumn": 36, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 8, + "ruleDescription": "Check if Parameters are Used", "phase": "LINT" + } + ] + }, + "integration/module-sub-resources.yaml": { + "filePath": "integration/module-sub-resources.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [] + }, + "integration/ref-no-value.yaml": { + "filePath": "integration/ref-no-value.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 7, + "warnings": 0, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "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)", + "ruleId": "E3003", + "severity": "ERROR", + "message": "'Key' is a required property", "source": "CFN_LINT", "entity": { - "logicalId": "WatchmakerInstanceLogGroup", + "logicalId": "IamRole1", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::IAM::Role" }, - "category": "Best Practice", - "startLine": 1687, - "startColumn": 9, - "endLine": 1687, - "endColumn": 36, - "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "propertyPath": "Properties.Tags", + "suggestedFix": "Tag Key cannot be null or AWS::NoValue", + "category": "Resource", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 11, + "ruleDescription": "Required Resource properties are missing", "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "E3003", + "severity": "ERROR", + "message": "'DefaultCacheBehavior' is a required property", + "source": "CFN_LINT", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "CloudFront2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Properties.BlockDeviceMappings", - "category": "Best Practice", - "startLine": 1342, - "startColumn": 17, - "endLine": 1342, - "endColumn": 37, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only" - } + "propertyPath": "Properties.DistributionConfig", + "suggestedFix": "Add DefaultCacheBehavior to the Fn::If branch", + "category": "Resource", + "startLine": 43, + "startColumn": 7, + "endLine": 43, + "endColumn": 25, + "ruleDescription": "Required Resource properties are missing", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3003", + "severity": "ERROR", + "message": "'TargetOriginId' is a required property", + "source": "CFN_LINT", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "CloudFront2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Properties.ImageId", - "category": "Best Practice", - "startLine": 1398, - "startColumn": 17, - "endLine": 1398, - "endColumn": 25, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'AmiId' (type AWS::EC2::Image::Id)" - } + "propertyPath": "Properties.DistributionConfig.DefaultCacheBehavior.Fn::If.2", + "suggestedFix": "Add TargetOriginId to the DefaultCacheBehavior", + "category": "Resource", + "startLine": 49, + "startColumn": 13, + "endLine": 49, + "endColumn": 14, + "ruleDescription": "Required Resource properties are missing", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "E3003", + "severity": "ERROR", + "message": "'ViewerProtocolPolicy' is a required property", + "source": "CFN_LINT", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "CloudFront2", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::CloudFront::Distribution" }, - "propertyPath": "Properties.InstanceType", - "category": "Best Practice", - "startLine": 1401, - "startColumn": 17, - "endLine": 1401, - "endColumn": 30, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "parameter with AllowedValues" - } + "propertyPath": "Properties.DistributionConfig.DefaultCacheBehavior.Fn::If.2", + "suggestedFix": "Add ViewerProtocolPolicy to the DefaultCacheBehavior", + "category": "Resource", + "startLine": 49, + "startColumn": 13, + "endLine": 49, + "endColumn": 14, + "ruleDescription": "Required Resource properties are missing", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3024", + "severity": "ERROR", + "message": "'Key' is a required property", + "source": "CFN_LINT", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "IamRole1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.KeyName", - "category": "Best Practice", - "startLine": 1404, - "startColumn": 17, - "endLine": 1404, - "endColumn": 25, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "parameter 'KeyPairName' (type AWS::EC2::KeyPair::KeyName)" - } + "propertyPath": "Properties.Tags", + "suggestedFix": "Tag Key cannot be null or AWS::NoValue", + "category": "Resource", + "startLine": 11, + "startColumn": 7, + "endLine": 11, + "endColumn": 11, + "ruleDescription": "Validate tag configuration", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3530", + "severity": "ERROR", + "message": "'Statement' is a required property", + "source": "CFN_LINT", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "IamRole1", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.NetworkInterfaces", - "category": "Best Practice", - "startLine": 1407, - "startColumn": 17, - "endLine": 1407, - "endColumn": 35, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.AssumeRolePolicyDocument", + "suggestedFix": "Add a Statement array to the AssumeRolePolicyDocument", + "category": "Resource", + "startLine": 10, + "startColumn": 7, + "endLine": 10, + "endColumn": 31, + "ruleDescription": "Validate IAM trust policies", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", - "source": "ENGINE", + "ruleId": "E3530", + "severity": "ERROR", + "message": "'Statement' is a required property", + "source": "CFN_LINT", "entity": { - "logicalId": "WatchmakerInstance", + "logicalId": "IamRole3", "entityType": "Resource", - "resourceType": "AWS::EC2::Instance" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.UserData", - "category": "Best Practice", - "startLine": 1451, - "startColumn": 17, - "endLine": 1451, - "endColumn": 26, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "conditional-create-only", - "resolutionSource": "dynamic (Base64 with unresolvable argument)" - } + "propertyPath": "Properties.AssumeRolePolicyDocument", + "suggestedFix": "Add a Statement array to the AssumeRolePolicyDocument", + "category": "Resource", + "startLine": 30, + "startColumn": 7, + "endLine": 30, + "endColumn": 31, + "ruleDescription": "Validate IAM trust policies", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Resource 'IamRole3' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstanceLogGroup", + "logicalId": "IamRole3", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.LogGroupName", - "category": "Best Practice", - "startLine": 1690, - "startColumn": 17, - "endLine": 1690, - "endColumn": 30, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9003", - "severity": "INFO", - "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", - "source": "ENGINE", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "startLine": 31, + "startColumn": 7, + "endLine": 31, + "endColumn": 11, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'WatchmakerInstanceLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "message": "Resource 'CloudFront2' of type 'AWS::CloudFront::Distribution' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "WatchmakerInstanceLogGroup", + "logicalId": "CloudFront2", "entityType": "Resource", - "resourceType": "AWS::Logs::LogGroup" + "resourceType": "AWS::CloudFront::Distribution" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1689, - "startColumn": 13, - "endLine": 1689, - "endColumn": 24, + "startLine": 42, + "startColumn": 5, + "endLine": 42, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "quickstart/cis_benchmark.yaml": { - "filePath": "quickstart/cis_benchmark.yaml", + "integration/ref-types.yaml": { + "filePath": "integration/ref-types.yaml", "status": "OK", "metadata": { - "resourcesScanned": 79, + "resourcesScanned": 13, "counts": { "fatal": 0, - "errors": 0, - "warnings": 75, - "informational": 142, + "errors": 1, + "warnings": 1, + "informational": 40, "debug": 0 }, "suppressed": 0, @@ -19179,1977 +13661,2188 @@ }, "diagnostics": [ { - "ruleId": "W2531", + "ruleId": "E1041", + "severity": "ERROR", + "message": "{'Ref': 'FargateTaskRole'} does not match destination format of 'AWS::EC2::VPC.Id'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Subnet2", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "suggestedFix": "Use a Ref to a resource whose type matches the expected format", + "category": "Intrinsic Function", + "startLine": 45, + "startColumn": 7, + "endLine": 45, + "endColumn": 12, + "ruleDescription": "Check if Ref matches destination format", + "phase": "LINT" + }, + { + "ruleId": "W3697", "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "message": "Resource type 'AWS::AutoScaling::LaunchConfiguration' is from a service in maintenance mode since 2024-10-01. Consider migrating to an alternative", "source": "CFN_LINT", "entity": { - "logicalId": "FunctiontForEvaluateCisBenchmarkingPreconditions", + "logicalId": "LaunchConfiguration", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "Properties.Runtime", "category": "Deprecation", - "startLine": 176, - "startColumn": 9, - "endLine": 176, + "startLine": 111, + "startColumn": 3, + "endLine": 111, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Resource type is from a service in maintenance mode", + "phase": "SCHEMA" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Vpc", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 35, + "startColumn": 7, + "endLine": 35, "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateRootAccountRule", + "logicalId": "Subnet1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 309, - "startColumn": 9, - "endLine": 309, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 39, + "startColumn": 7, + "endLine": 39, "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForVpcFlowLogRule", + "logicalId": "Subnet1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 481, - "startColumn": 9, - "endLine": 481, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 40, + "startColumn": 7, + "endLine": 40, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc'" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForVpcDefaultSecurityGroupsRule", + "logicalId": "Subnet2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 551, - "startColumn": 9, - "endLine": 551, + "propertyPath": "Properties.CidrBlock", + "category": "Best Practice", + "startLine": 44, + "startColumn": 7, + "endLine": 44, "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForRoleForMfaOnUsersRule", + "logicalId": "Subnet2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 45, + "startColumn": 7, + "endLine": 45, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'FargateTaskRole'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SecurityGroup1", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 666, - "startColumn": 9, - "endLine": 666, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 49, + "startColumn": 7, + "endLine": 49, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluatePolicyPermissionsRule", + "logicalId": "SecurityGroup1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 760, - "startColumn": 9, - "endLine": 760, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "propertyPath": "Properties.VpcId", + "category": "Best Practice", + "startLine": 50, + "startColumn": 7, + "endLine": 50, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'Vpc'" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateUserPolicyAssociationRule", + "logicalId": "SecurityGroup2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 850, - "startColumn": 9, - "endLine": 850, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "propertyPath": "Properties.GroupDescription", + "category": "Best Practice", + "startLine": 54, + "startColumn": 7, + "endLine": 54, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateCloudTrailRule", + "logicalId": "LoadBalancer", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 966, - "startColumn": 9, - "endLine": 966, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "propertyPath": "Properties.Type", + "category": "Best Practice", + "startLine": 58, + "startColumn": 7, + "endLine": 58, + "endColumn": 11, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Scheme' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateCloudTrailBucketRule", + "logicalId": "LoadBalancer", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 1082, - "startColumn": 9, - "endLine": 1082, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "propertyPath": "Properties.Scheme", + "category": "Best Practice", + "startLine": 59, + "startColumn": 7, + "endLine": 59, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateCloudTrailLogIntegrityRule", + "logicalId": "TaskDefinitionWithRefToResource", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 1178, - "startColumn": 9, - "endLine": 1178, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 72, + "startColumn": 7, + "endLine": 72, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForInstanceRoleUseRule", + "logicalId": "TaskDefinitionWithRefToResource", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 1260, - "startColumn": 9, - "endLine": 1260, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "propertyPath": "Properties.Cpu", + "category": "Best Practice", + "startLine": 83, + "startColumn": 7, + "endLine": 83, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateKeyRotationRule", + "logicalId": "TaskDefinitionWithRefToResource", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 1357, - "startColumn": 9, - "endLine": 1357, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "propertyPath": "Properties.ExecutionRoleArn", + "category": "Best Practice", + "startLine": 84, + "startColumn": 7, + "endLine": 84, + "endColumn": 23, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "lifecycle": "create-only", + "resolutionSource": "GetAtt FargateExecutionRole.Arn" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateConfigInAllRegionsRule", + "logicalId": "TaskDefinitionWithRefToResource", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 1465, - "startColumn": 9, - "endLine": 1465, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "propertyPath": "Properties.Memory", + "category": "Best Practice", + "startLine": 85, + "startColumn": 7, + "endLine": 85, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForVpcPeeringRouteTablesRule", + "logicalId": "TaskDefinitionWithRefToResource", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 1550, - "startColumn": 9, - "endLine": 1550, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "propertyPath": "Properties.NetworkMode", + "category": "Best Practice", + "startLine": 86, + "startColumn": 7, + "endLine": 86, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "GetCloudTrailCloudWatchLog", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 1633, - "startColumn": 9, - "endLine": 1633, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "logicalId": "TaskDefinitionWithRefToResource", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Properties.RequiresCompatibilities", + "category": "Best Practice", + "startLine": 87, + "startColumn": 7, + "endLine": 87, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionToFormatCloudWatchEvent", + "logicalId": "TaskDefinitionWithRefToResource", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 1889, - "startColumn": 9, - "endLine": 1889, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "propertyPath": "Properties.TaskRoleArn", + "category": "Best Practice", + "startLine": 89, + "startColumn": 7, + "endLine": 89, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "lifecycle": "create-only", + "resolutionSource": "GetAtt FargateTaskRole.Arn" } }, { - "ruleId": "W2531", - "severity": "WARN", - "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ContainerDefinitions' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionToDisableUnusedCredentials", + "logicalId": "TaskDefinitionWithRefToParameter", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 2334, - "startColumn": 9, - "endLine": 2334, - "endColumn": 16, - "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "propertyPath": "Properties.ContainerDefinitions", + "category": "Best Practice", + "startLine": 93, + "startColumn": 7, + "endLine": 93, + "endColumn": 27, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "actualValue": "python3.8", - "lifecycle": "deprecated" + "lifecycle": "create-only" } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Cpu' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctiontForEvaluateCisBenchmarkingPreconditions", + "logicalId": "TaskDefinitionWithRefToParameter", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Cpu", "category": "Best Practice", - "startLine": 121, + "startLine": 104, "startColumn": 7, - "endLine": 121, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 104, + "endColumn": 10, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctiontForEvaluateCisBenchmarkingPreconditions' dependency already enforced by a 'GetAtt' at 'Properties.ServiceToken'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ExecutionRoleArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ResourceForEvaluateCisBenchmarkingPreconditions", + "logicalId": "TaskDefinitionWithRefToParameter", "entityType": "Resource", - "resourceType": "Custom::ResourceForEvaluateCisBenchmarkingPreconditions" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.ExecutionRoleArn", "category": "Best Practice", - "startLine": 181, + "startLine": 105, "startColumn": 7, - "endLine": 181, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 105, + "endColumn": 23, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FargateExecutionRole.Arn" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Memory' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateRootAccountRule", + "logicalId": "TaskDefinitionWithRefToParameter", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Memory", "category": "Best Practice", - "startLine": 227, + "startLine": 106, "startColumn": 7, - "endLine": 227, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 106, + "endColumn": 13, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForEvaluateRootAccountRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkMode' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "EvaluateRootAccountFunctionPermission", + "logicalId": "TaskDefinitionWithRefToParameter", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.NetworkMode", "category": "Best Practice", - "startLine": 315, + "startLine": 107, "startColumn": 7, - "endLine": 315, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 107, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'RequiresCompatibilities' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForVpcFlowLogRule", + "logicalId": "TaskDefinitionWithRefToParameter", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.RequiresCompatibilities", "category": "Best Practice", - "startLine": 421, + "startLine": 108, "startColumn": 7, - "endLine": 421, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 108, + "endColumn": 30, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForVpcFlowLogRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TaskRoleArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallVpcFlowLogLambda", + "logicalId": "TaskDefinitionWithRefToParameter", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.TaskRoleArn", "category": "Best Practice", - "startLine": 486, + "startLine": 110, "startColumn": 7, - "endLine": 486, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 110, + "endColumn": 18, + "documentationUrl": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FargateTaskRole.Arn" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForVpcDefaultSecurityGroupsRule", + "logicalId": "LaunchConfiguration", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 497, + "startLine": 114, "startColumn": 7, - "endLine": 497, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 114, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForVpcDefaultSecurityGroupsRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallVpcDefaultSecurityGroupsLambda", + "logicalId": "LaunchConfiguration", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 556, + "startLine": 115, "startColumn": 7, - "endLine": 556, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 115, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForVpcDefaultSecurityGroupsRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AssociatePublicIpAddress' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForVpcDefaultSecurityGroupss", + "logicalId": "LaunchConfiguration", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.AssociatePublicIpAddress", "category": "Best Practice", - "startLine": 565, + "startLine": 116, "startColumn": 7, - "endLine": 565, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 116, + "endColumn": 31, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForVpcFlowLogRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForVpcFlowLogs", + "logicalId": "LaunchConfiguration", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::AutoScaling::LaunchConfiguration" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.SecurityGroups", "category": "Best Practice", - "startLine": 584, + "startLine": 117, "startColumn": 7, - "endLine": 584, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 117, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-autoscaling.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Cluster' of type 'AWS::ECS::Cluster' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForRoleForMfaOnUsersRule", + "logicalId": "Cluster", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::Cluster" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 606, - "startColumn": 7, - "endLine": 606, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 10, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForRoleForMfaOnUsersRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FargateExecutionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallMfaForUsersLambda", + "logicalId": "FargateExecutionRole", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 671, - "startColumn": 7, - "endLine": 671, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 11, + "startColumn": 5, + "endLine": 11, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FargateTaskRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluatePolicyPermissionsRule", + "logicalId": "FargateTaskRole", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 699, - "startColumn": 7, - "endLine": 699, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 24, + "startColumn": 5, + "endLine": 24, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForEvaluatePolicyPermissionsRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Vpc' of type 'AWS::EC2::VPC' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluatePolicyPermissionsLambda", + "logicalId": "Vpc", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 765, - "startColumn": 7, - "endLine": 765, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 34, + "startColumn": 5, + "endLine": 34, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForEvaluatePolicyPermissionsRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Subnet1' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForEvaluatePolicyPermissions", + "logicalId": "Subnet1", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 773, - "startColumn": 7, - "endLine": 773, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 38, + "startColumn": 5, + "endLine": 38, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Subnet2' of type 'AWS::EC2::Subnet' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateUserPolicyAssociationRule", + "logicalId": "Subnet2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 795, - "startColumn": 7, - "endLine": 795, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 43, + "startColumn": 5, + "endLine": 43, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForEvaluateUserPolicyAssociationRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SecurityGroup1' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateUserPolicyAssociationLambda", + "logicalId": "SecurityGroup1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 855, - "startColumn": 7, - "endLine": 855, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 48, + "startColumn": 5, + "endLine": 48, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForEvaluateUserPolicyAssociationRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SecurityGroup2' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForEvaluateUserPolicyAssociations", + "logicalId": "SecurityGroup2", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 863, - "startColumn": 7, - "endLine": 863, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 53, + "startColumn": 5, + "endLine": 53, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LoadBalancer' of type 'AWS::ElasticLoadBalancingV2::LoadBalancer' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateCloudTrailRule", + "logicalId": "LoadBalancer", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 886, - "startColumn": 7, - "endLine": 886, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 57, + "startColumn": 5, + "endLine": 57, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForEvaluateCloudTrailRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLambda", + "logicalId": "LogGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::Logs::LogGroup" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 971, - "startColumn": 7, - "endLine": 971, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 65, + "startColumn": 3, + "endLine": 65, + "endColumn": 11, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForEvaluateCloudTrailRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TaskDefinitionWithRefToResource' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForEvaluateCloudTrail", + "logicalId": "TaskDefinitionWithRefToResource", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 979, - "startColumn": 7, - "endLine": 979, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 71, + "startColumn": 5, + "endLine": 71, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'TaskDefinitionWithRefToParameter' of type 'AWS::ECS::TaskDefinition' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateCloudTrailBucketRule", + "logicalId": "TaskDefinitionWithRefToParameter", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::ECS::TaskDefinition" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 999, - "startColumn": 7, - "endLine": 999, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 92, + "startColumn": 5, + "endLine": 92, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "integration/resources-cloudformation-init.yaml": { + "filePath": "integration/resources-cloudformation-init.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 2, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W3005", + "ruleId": "W2509", "severity": "WARN", - "message": "'FunctionForEvaluateCloudTrailBucketRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", - "source": "CFN_LINT", + "message": "Parameter 'DBPassword' appears to be a password but does not have NoEcho set to true", + "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateCloudTrailBucketLambda", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 1087, - "startColumn": 7, - "endLine": 1087, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "logicalId": "DBPassword", + "entityType": "Parameter" + }, + "propertyPath": "Parameters/DBPassword", + "category": "Security", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 13, + "ruleDescription": "Password parameter should have NoEcho", "phase": "LINT" }, { - "ruleId": "W3005", + "ruleId": "W9010", "severity": "WARN", - "message": "'FunctionForEvaluateCloudTrailBucketRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", - "source": "CFN_LINT", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", + "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForEvaluateCloudTrailBucket", + "logicalId": "MyInstance", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 1095, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 94, "startColumn": 7, - "endLine": 1095, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "endLine": 94, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateCloudTrailLogIntegrityRule", + "logicalId": "MyInstance", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 1116, + "startLine": 94, "startColumn": 7, - "endLine": 1116, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 94, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForEvaluateCloudTrailLogIntegrityRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyInstance' of type 'AWS::EC2::Instance' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLogIntegrityLambda", + "logicalId": "MyInstance", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1184, - "startColumn": 7, - "endLine": 1184, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 93, + "startColumn": 5, + "endLine": 93, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "issues/sam_w_conditions.yaml": { + "filePath": "issues/sam_w_conditions.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 17, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 37, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForEvaluateCloudTrailLogIntegrityRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", + "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": "ConfigRuleForEvaluateCloudTrailLogIntegrity", + "logicalId": "VmdEventsQueue", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 1193, - "startColumn": 7, - "endLine": 1193, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 203, + "startColumn": 3, + "endLine": 203, + "endColumn": 17, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "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": "FunctionForInstanceRoleUseRule", + "logicalId": "VmdEventsQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 1213, - "startColumn": 7, - "endLine": 1213, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 203, + "startColumn": 3, + "endLine": 203, + "endColumn": 17, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForInstanceRoleUseRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", + "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": "ConfigPermissionToCallInstanceRoleUseLambda", + "logicalId": "VmdEventsDeadLetterQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 1266, - "startColumn": 7, - "endLine": 1266, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 214, + "startColumn": 3, + "endLine": 214, + "endColumn": 27, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForInstanceRoleUseRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", + "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": "ConfigRuleForInstanceRoleUses", + "logicalId": "VmdEventsDeadLetterQueue", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 1275, - "startColumn": 7, - "endLine": 1275, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 214, + "startColumn": 3, + "endLine": 214, + "endColumn": 27, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "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": "FunctionForEvaluateKeyRotationRule", + "logicalId": "DmdEventsQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 1298, - "startColumn": 7, - "endLine": 1298, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 328, + "startColumn": 3, + "endLine": 328, + "endColumn": 17, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForEvaluateKeyRotationRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", + "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": "ConfigPermissionToCallEvaluateKeyRotationLambda", + "logicalId": "DmdEventsQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 1363, - "startColumn": 7, - "endLine": 1363, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 328, + "startColumn": 3, + "endLine": 328, + "endColumn": 17, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForEvaluateKeyRotationRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", + "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": "ConfigRuleForEvaluateKeyRotations", + "logicalId": "DmdEventsDeadLetterQueue", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 1372, - "startColumn": 7, - "endLine": 1372, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 339, + "startColumn": 3, + "endLine": 339, + "endColumn": 27, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "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": "FunctionForEvaluateConfigInAllRegionsRule", + "logicalId": "DmdEventsDeadLetterQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", "category": "Best Practice", - "startLine": 1394, - "startColumn": 7, - "endLine": 1394, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 339, + "startColumn": 3, + "endLine": 339, + "endColumn": 27, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForEvaluateConfigInAllRegionsRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ManagedPolicyName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "EvaluateConfigInAllRegionsFunctionPermission", + "logicalId": "DeniedPolicies", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.ManagedPolicyName", "category": "Best Practice", - "startLine": 1470, + "startLine": 118, "startColumn": 7, - "endLine": 1470, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 118, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:${GlobalPrefix}-${ComponentShortName}-DeniedPolicies-${TenantAwsResource})" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionForVpcPeeringRouteTablesRule", + "logicalId": "DeniedPolicies", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 1499, + "startLine": 119, "startColumn": 7, - "endLine": 1499, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 119, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForVpcPeeringRouteTablesRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallVpcPeeringRouteTablesLambda", + "logicalId": "DeniedPolicies", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 1555, + "startLine": 120, "startColumn": 7, - "endLine": 1555, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 120, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionForVpcPeeringRouteTablesRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ManagedPolicyName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForVpcPeeringRouteTabless", + "logicalId": "LogMonitoringPolicy", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.ManagedPolicyName", "category": "Best Practice", - "startLine": 1564, + "startLine": 138, "startColumn": 7, - "endLine": 1564, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 138, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:${GlobalPrefix}-${ComponentShortName}-LogMonitoringPolicy-${TenantAwsResource})" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "GetCloudTrailCloudWatchLog", + "logicalId": "LogMonitoringPolicy", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 1601, + "startLine": 139, "startColumn": 7, - "endLine": 1601, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 139, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'GetCloudTrailCloudWatchLog' dependency already enforced by a 'GetAtt' at 'Properties.ServiceToken'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ResourceForGetCloudTrailCloudWatchLog", + "logicalId": "LogMonitoringPolicy", "entityType": "Resource", - "resourceType": "Custom::ResourceForGetCloudTrailCloudWatchLog" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Path", "category": "Best Practice", - "startLine": 1638, + "startLine": 140, "startColumn": 7, - "endLine": 1638, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 140, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ResourceForGetCloudTrailCloudWatchLog' dependency already enforced by a 'GetAtt' at 'Properties.LogGroupName'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Description' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "UnauthorizedAttemptsCloudWatchFilter", + "logicalId": "TenantInfoReadPolicy", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::IAM::ManagedPolicy" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Description", "category": "Best Practice", - "startLine": 1647, + "startLine": 154, "startColumn": 7, - "endLine": 1647, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 154, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ResourceForGetCloudTrailCloudWatchLog' dependency already enforced by a 'GetAtt' at 'Properties.LogGroupName'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "IAMRootActivityCloudWatchMetric", + "logicalId": "VmdEventsQueue", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.QueueName", "category": "Best Practice", - "startLine": 1681, + "startLine": 207, "startColumn": 7, - "endLine": 1681, + "endLine": 207, "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:${Solution}-${Environment}-${ComponentShortName}-VmdEventsQueue-${TenantAwsResource}.fifo)" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ResourceForGetCloudTrailCloudWatchLog' dependency already enforced by a 'GetAtt' at 'Properties.LogGroupName'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConsoleSigninWithoutMfaCloudWatchMetric", + "logicalId": "VmdEventsQueue", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.FifoQueue", "category": "Best Practice", - "startLine": 1718, + "startLine": 209, "startColumn": 7, - "endLine": 1718, + "endLine": 209, "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ResourceForGetCloudTrailCloudWatchLog' dependency already enforced by a 'GetAtt' at 'Properties.LogGroupName'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConsoleLoginFailureCloudWatchMetric", + "logicalId": "VmdEventsDeadLetterQueue", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.QueueName", "category": "Best Practice", - "startLine": 1757, + "startLine": 218, "startColumn": 7, - "endLine": 1757, + "endLine": 218, "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:${Solution}-${Environment}-${ComponentShortName}-VmdEventsDeadLetterQueue-${TenantAwsResource}.fifo)" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ResourceForGetCloudTrailCloudWatchLog' dependency already enforced by a 'GetAtt' at 'Properties.LogGroupName'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "KMSCustomerKeyDeletionCloudWatchMetric", + "logicalId": "VmdEventsDeadLetterQueue", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.FifoQueue", "category": "Best Practice", - "startLine": 1794, + "startLine": 220, "startColumn": 7, - "endLine": 1794, + "endLine": 220, "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'SnsTopicForCloudWatchEvents' dependency already enforced by a 'Ref' at 'Properties.Policies.0.PolicyDocument.Statement.0.Resource'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "RoleForCloudWatchEvents", + "logicalId": "VmdEventsSubscription", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 1830, + "startLine": 265, "startColumn": 7, - "endLine": 1830, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 265, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'RoleForCloudWatchEvents' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionToFormatCloudWatchEvent", + "logicalId": "VmdEventsSubscription", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Endpoint", "category": "Best Practice", - "startLine": 1856, + "startLine": 266, "startColumn": 7, - "endLine": 1856, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 266, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt VmdEventsQueue.Arn" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'SnsTopicForCloudWatchEvents' dependency already enforced by a 'Ref' at 'Properties.Code.ZipFile'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Region' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionToFormatCloudWatchEvent", + "logicalId": "VmdEventsSubscription", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Region", "category": "Best Practice", - "startLine": 1856, + "startLine": 267, "startColumn": 7, - "endLine": 1856, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 267, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "parameter 'VmdEventsSourceRegion' (type String)" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionToFormatCloudWatchEvent' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaPermissionForCloudTrailCloudWatchEventRules", + "logicalId": "VmdEventsSubscription", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.TopicArn", "category": "Best Practice", - "startLine": 1894, + "startLine": 268, "startColumn": 7, - "endLine": 1894, - "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "endLine": 268, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'VmdEventsSourceArn' (type String)" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'ResourceForGetCloudTrailCloudWatchLog' dependency already enforced by a 'GetAtt' at 'Properties.LogGroupName'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "BillingChangesCloudWatchFilter", + "logicalId": "DmdEventsQueue", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.QueueName", "category": "Best Practice", - "startLine": 2183, + "startLine": 332, "startColumn": 7, - "endLine": 2183, + "endLine": 332, "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:${Solution}-${Environment}-${ComponentShortName}-DmdEventsQueue-${TenantAwsResource}.fifo)" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'RoleForDisableUnusedCredentialsFunction' dependency already enforced by a 'GetAtt' at 'Properties.Role'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "FunctionToDisableUnusedCredentials", + "logicalId": "DmdEventsQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.FifoQueue", "category": "Best Practice", - "startLine": 2253, + "startLine": 334, "startColumn": 7, - "endLine": 2253, + "endLine": 334, "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W3005", - "severity": "WARN", - "message": "'FunctionToDisableUnusedCredentials' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'QueueName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "LambdaPermissionForDisableUnusedCredentials", + "logicalId": "DmdEventsDeadLetterQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.QueueName", "category": "Best Practice", - "startLine": 2339, + "startLine": 343, "startColumn": 7, - "endLine": 2339, + "endLine": 343, "endColumn": 16, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:${Solution}-${Environment}-${ComponentShortName}-DmdEventsDeadLetterQueue-${TenantAwsResource}.fifo)" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FifoQueue' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "UnauthorizedAttemptsCloudWatchFilter", + "logicalId": "DmdEventsDeadLetterQueue", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.MetricTransformations.0.MetricValue", + "propertyPath": "Properties.FifoQueue", "category": "Best Practice", - "startLine": 1657, - "startColumn": 13, - "endLine": 1657, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 345, + "startColumn": 7, + "endLine": 345, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sqs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Protocol' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "IAMRootActivityCloudWatchMetric", + "logicalId": "DmdEventsSubscription", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.MetricTransformations.0.MetricValue", + "propertyPath": "Properties.Protocol", "category": "Best Practice", - "startLine": 1695, - "startColumn": 13, - "endLine": 1695, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 390, + "startColumn": 7, + "endLine": 390, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Endpoint' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConsoleSigninWithoutMfaCloudWatchMetric", + "logicalId": "DmdEventsSubscription", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.MetricTransformations.0.MetricValue", + "propertyPath": "Properties.Endpoint", "category": "Best Practice", - "startLine": 1733, - "startColumn": 13, - "endLine": 1733, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 391, + "startColumn": 7, + "endLine": 391, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt DmdEventsQueue.Arn" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Region' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "ConsoleLoginFailureCloudWatchMetric", + "logicalId": "DmdEventsSubscription", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.MetricTransformations.0.MetricValue", + "propertyPath": "Properties.Region", "category": "Best Practice", - "startLine": 1770, - "startColumn": 13, - "endLine": 1770, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 392, + "startColumn": 7, + "endLine": 392, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "parameter 'DmdEventsSourceRegion' (type String)" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TopicArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "KMSCustomerKeyDeletionCloudWatchMetric", + "logicalId": "DmdEventsSubscription", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::SNS::Subscription" }, - "propertyPath": "Properties.MetricTransformations.0.MetricValue", + "propertyPath": "Properties.TopicArn", "category": "Best Practice", - "startLine": 1807, - "startColumn": 13, - "endLine": 1807, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 393, + "startColumn": 7, + "endLine": 393, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'DmdEventsSourceArn' (type String)" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "1 is not of type 'string' - automatically coerced (number to string)", - "source": "CFN_LINT", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'VmdEventsLambda' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "source": "ENGINE", "entity": { - "logicalId": "BillingChangesCloudWatchFilter", + "logicalId": "VmdEventsLambda", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.MetricTransformations.0.MetricValue", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 2197, - "startColumn": 13, - "endLine": 2197, - "endColumn": 24, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 171, + "startColumn": 5, + "endLine": 171, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'VmdEventsQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FunctiontForEvaluateCisBenchmarkingPreconditions", + "logicalId": "VmdEventsQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 124, - "startColumn": 9, - "endLine": 124, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 206, + "startColumn": 5, + "endLine": 206, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Resource 'VmdEventsLambdaErrorsGreaterThanZeroAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForIamPasswordPolicy", + "logicalId": "VmdEventsLambdaErrorsGreaterThanZeroAlarm", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::CloudWatch::Alarm" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 202, - "startColumn": 9, - "endLine": 202, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 274, + "startColumn": 5, + "endLine": 274, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'DmdEventsLambda' of type 'AWS::Serverless::Function' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateRootAccountRule", + "logicalId": "DmdEventsLambda", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::Serverless::Function" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 231, - "startColumn": 9, - "endLine": 231, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 296, + "startColumn": 5, + "endLine": 296, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'DmdEventsQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EvaluateRootAccountFunctionPermission", + "logicalId": "DmdEventsQueue", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SQS::Queue" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 317, - "startColumn": 9, - "endLine": 317, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionForEvaluateRootAccountRule.Arn" - } + "startLine": 331, + "startColumn": 5, + "endLine": 331, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Resource 'DmdEventsLambdaErrorsGreaterThanZeroAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "EvaluateRootAccountFunctionPermission", + "logicalId": "DmdEventsLambdaErrorsGreaterThanZeroAlarm", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::CloudWatch::Alarm" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 318, - "startColumn": 9, - "endLine": 318, + "startLine": 399, + "startColumn": 5, + "endLine": 399, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "lsp/comprehensive.json": { + "filePath": "lsp/comprehensive.json", + "status": "OK", + "metadata": { + "resourcesScanned": 12, + "counts": { + "fatal": 4, + "errors": 1, + "warnings": 8, + "informational": 29, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'MaxSize' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "EvaluateRootAccountFunctionPermission", + "logicalId": "AutoScalingGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 319, - "startColumn": 9, - "endLine": 319, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'MaxSize'", + "category": "Schema", + "startLine": 564, + "startColumn": 7, + "endLine": 564, "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F3003", + "severity": "FATAL", + "message": "'MinSize' is a required property", + "source": "SCHEMA", "entity": { - "logicalId": "ConfigRuleForEvaluateRootAccount", + "logicalId": "AutoScalingGroup", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.ConfigRuleName", - "category": "Best Practice", - "startLine": 328, - "startColumn": 9, - "endLine": 328, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'MinSize'", + "category": "Schema", + "startLine": 564, + "startColumn": 7, + "endLine": 564, + "endColumn": 18, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F6101", + "severity": "FATAL", + "message": "Fn::Sub variable '${MaxScaling}' does not reference a valid resource, parameter, or pseudo-parameter", + "source": "SCHEMA", + "entity": { + "logicalId": "ComplexOutput", + "entityType": "Output" + }, + "propertyPath": "Outputs/ComplexOutput/Value.Fn::Sub", + "category": "Structure", + "startLine": 943, + "startColumn": 5, + "endLine": 943, + "endColumn": 19, + "ruleDescription": "Output value must be a string", + "phase": "SCHEMA" + }, + { + "ruleId": "F8611", + "severity": "FATAL", + "message": "'Fn::FindInMap' is not supported in the Rules section - allowed: ['Ref', 'Fn::ValueOf', 'Fn::ValueOfAll', 'Fn::RefAll', 'Fn::Contains', 'Fn::EachMemberEquals', 'Fn::EachMemberIn', 'Fn::Equals', 'Fn::And', 'Fn::Or', 'Fn::Not', 'Fn::If', 'Fn::Select']", + "source": "SCHEMA", + "entity": { + "logicalId": "ValidateRegionAndEnvironment", + "entityType": "Rule" + }, + "propertyPath": "Rules/ValidateRegionAndEnvironment", + "category": "Structure", + "startLine": 197, + "startColumn": 5, + "endLine": 197, + "endColumn": 34, + "ruleDescription": "Disallowed function in Rules section", + "phase": "PARSE" + }, + { + "ruleId": "E9006", + "severity": "ERROR", + "message": "'8.0' is not one of ['5.5.62', '5.6.51', '5.7.33', '5.7.34', '5.7.36', '5.7.37', '5.7.38', '5.7.39', '5.7.40', '5.7.41', '5.7.42', '5.7.43', '5.7.44', '5.7.44-rds.20240408', '5.7.44-rds.20240529', '5.7.44-rds.20240808', '5.7.44-rds.20250103', '5.7.44-rds.20250213', '5.7.44-rds.20250508', '5.7.44-rds.20250818', '5.7.44-rds.20251212', '5.7.44-rds.20260212', '5.7.44-rds.20260521', '5.7.44-rds.20260624', '5.7.44-rds.20260902', '8.0.11', '8.0.13', '8.0.15', '8.0.16', '8.0.17', '8.0.19', '8.0.20', '8.0.21', '8.0.23', '8.0.25', '8.0.26', '8.0.27', '8.0.28', '8.0.29', '8.0.30', '8.0.31', '8.0.32', '8.0.33', '8.0.34', '8.0.35', '8.0.36', '8.0.37', '8.0.39', '8.0.40', '8.0.41', '8.0.42', '8.0.43', '8.0.44', '8.0.45', '8.0.46', '8.0.46-rds.20260624', '8.0.46-rds.20260908', '8.4.10', '8.4.11', '8.4.3', '8.4.4', '8.4.5', '8.4.6', '8.4.7', '8.4.8', '8.4.9']", + "source": "CFN_LINT", "entity": { - "logicalId": "ConfigRuleForRequiredTags", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ConfigRuleName", - "category": "Best Practice", - "startLine": 342, + "propertyPath": "Properties.EngineVersion", + "category": "Schema", + "startLine": 647, "startColumn": 9, - "endLine": 342, + "endLine": 647, "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Property value not valid for conditional extension enum", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1011", + "severity": "WARN", + "message": "Use dynamic references (e.g., SSM SecureString) instead of parameter 'DatabasePassword' for secrets", + "source": "CFN_LINT", "entity": { - "logicalId": "ConfigRuleForEncryptedVolumes", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ConfigRuleName", - "category": "Best Practice", - "startLine": 373, + "propertyPath": "Properties.MasterUserPassword", + "category": "Security", + "startLine": 664, "startColumn": 9, - "endLine": 373, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 664, + "endColumn": 28, + "ruleDescription": "Instead of REFing a parameter for a secret use a dynamic reference", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", + "source": "CFN_LINT", "entity": { - "logicalId": "ConfigRuleForRestrictedSsh", - "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "logicalId": "ConditionalOutput", + "entityType": "Output" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Outputs/ConditionalOutput/Value.Fn::If.2", "category": "Best Practice", - "startLine": 389, - "startColumn": 9, - "endLine": 389, + "startLine": 996, + "startColumn": 5, + "endLine": 996, "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Check Fn::If has a path that cannot be reached", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "ruleId": "W2508", + "severity": "WARN", + "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForUnrestrictedPorts", + "logicalId": "BastionSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ConfigRuleName", - "category": "Best Practice", - "startLine": 405, + "propertyPath": "Properties.SecurityGroupIngress", + "suggestedFix": "Restrict the CIDR range to specific IP addresses", + "category": "Security", + "startLine": 495, "startColumn": 9, - "endLine": 405, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 495, + "endColumn": 30, + "ruleDescription": "Security group allows open access to sensitive port", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "FunctionForVpcFlowLogRule", + "logicalId": "LambdaFunction", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 425, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 738, "startColumn": 9, - "endLine": 425, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 738, + "endColumn": 17, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "python3.9", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'IsNotProduction' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "ConfigPermissionToCallVpcFlowLogLambda", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "logicalId": "IsNotProduction", + "entityType": "Condition" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Conditions/IsNotProduction", "category": "Best Practice", - "startLine": 488, - "startColumn": 9, - "endLine": 488, + "startLine": 125, + "startColumn": 5, + "endLine": 125, "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionForVpcFlowLogRule.Arn" - } + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'ComplexCondition' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "ConfigPermissionToCallVpcFlowLogLambda", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "logicalId": "ComplexCondition", + "entityType": "Condition" }, - "propertyPath": "Properties.Action", + "propertyPath": "Conditions/ComplexCondition", "category": "Best Practice", - "startLine": 489, - "startColumn": 9, - "endLine": 489, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 155, + "startColumn": 5, + "endLine": 155, + "endColumn": 22, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "100 (from Fn::If on condition 'IsProduction') is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "ConfigPermissionToCallVpcFlowLogLambda", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.AllocatedStorage", "category": "Best Practice", - "startLine": 490, + "startLine": 648, "startColumn": 9, - "endLine": 490, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", + "endLine": 648, + "endColumn": 26, + "conditionScenario": { + "IsProduction": true + }, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Property type coercion warning", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "resolutionSource": "Fn::If on condition 'IsProduction'" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "FunctionForVpcDefaultSecurityGroupsRule", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 501, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 656, "startColumn": 9, - "endLine": 501, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 656, + "endColumn": 26, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallVpcDefaultSecurityGroupsLambda", + "logicalId": "VPC", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 558, + "startLine": 362, "startColumn": 9, - "endLine": 558, - "endColumn": 21, + "endLine": 362, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionForVpcDefaultSecurityGroupsRule.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallVpcDefaultSecurityGroupsLambda", + "logicalId": "PublicSubnet", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 559, + "startLine": 390, "startColumn": 9, - "endLine": 559, + "endLine": 390, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallVpcDefaultSecurityGroupsLambda", + "logicalId": "PublicSubnet", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 560, + "startLine": 393, "startColumn": 9, - "endLine": 560, - "endColumn": 18, + "endLine": 393, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -21159,43 +15852,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForVpcDefaultSecurityGroupss", + "logicalId": "PublicSubnet", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 569, + "startLine": 401, "startColumn": 9, - "endLine": 569, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "endLine": 401, + "endColumn": 26, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Select with unresolvable arguments)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForVpcFlowLogs", + "logicalId": "WebSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 588, + "startLine": 443, "startColumn": 9, - "endLine": 588, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "endLine": 443, + "endColumn": 26, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -21205,243 +15897,249 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionForRoleForMfaOnUsersRule", + "logicalId": "WebSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 610, + "startLine": 444, "startColumn": 9, - "endLine": 610, - "endColumn": 21, + "endLine": 444, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallMfaForUsersLambda", + "logicalId": "BastionSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 673, + "startLine": 491, "startColumn": 9, - "endLine": 673, - "endColumn": 21, + "endLine": 491, + "endColumn": 26, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionForRoleForMfaOnUsersRule.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallMfaForUsersLambda", + "logicalId": "BastionSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 674, + "startLine": 492, "startColumn": 9, - "endLine": 674, + "endLine": 492, "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchTemplateName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallMfaForUsersLambda", + "logicalId": "LaunchTemplate", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::LaunchTemplate" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.LaunchTemplateName", "category": "Best Practice", - "startLine": 675, + "startLine": 508, "startColumn": 9, - "endLine": 675, - "endColumn": 18, + "endLine": 508, + "endColumn": 28, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForMfaForUsers", + "logicalId": "AutoScalingGroup", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.AutoScalingGroupName", "category": "Best Practice", - "startLine": 681, + "startLine": 565, "startColumn": 9, - "endLine": 681, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "endLine": 565, + "endColumn": 30, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchTemplate' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluatePolicyPermissionsRule", + "logicalId": "AutoScalingGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.LaunchTemplate", "category": "Best Practice", - "startLine": 703, + "startLine": 568, "startColumn": 9, - "endLine": 703, - "endColumn": 21, + "endLine": 568, + "endColumn": 24, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluatePolicyPermissionsLambda", + "logicalId": "AutoScalingGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.VPCZoneIdentifier", "category": "Best Practice", - "startLine": 767, + "startLine": 582, "startColumn": 9, - "endLine": 767, - "endColumn": 21, + "endLine": 582, + "endColumn": 27, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionForEvaluatePolicyPermissionsRule.Arn" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'DBInstanceIdentifier' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluatePolicyPermissionsLambda", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.DBInstanceIdentifier", "category": "Best Practice", - "startLine": 768, + "startLine": 634, "startColumn": 9, - "endLine": 768, - "endColumn": 15, + "endLine": 634, + "endColumn": 30, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluatePolicyPermissionsLambda", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 769, + "startLine": 646, "startColumn": 9, - "endLine": 769, - "endColumn": 18, + "endLine": 646, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForEvaluatePolicyPermissions", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 777, + "startLine": 656, "startColumn": 9, - "endLine": 777, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "endLine": 656, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProduction'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateUserPolicyAssociationRule", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 799, + "startLine": 663, "startColumn": 9, - "endLine": 799, - "endColumn": 21, + "endLine": 663, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -21451,64 +16149,67 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateUserPolicyAssociationLambda", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.BackupRetentionPeriod", "category": "Best Practice", - "startLine": 857, + "startLine": 672, "startColumn": 9, - "endLine": 857, - "endColumn": 21, + "endLine": 672, + "endColumn": 31, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionForEvaluateUserPolicyAssociationRule.Arn" + "lifecycle": "conditional-create-only", + "resolutionSource": "Fn::If on condition 'IsProduction'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'MultiAZ' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateUserPolicyAssociationLambda", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.MultiAZ", "category": "Best Practice", - "startLine": 858, + "startLine": 679, "startColumn": 9, - "endLine": 858, - "endColumn": 15, + "endLine": 679, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (condition reference: IsProduction)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateUserPolicyAssociationLambda", + "logicalId": "DatabaseSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 859, + "startLine": 716, "startColumn": 9, - "endLine": 859, - "endColumn": 18, + "endLine": 716, + "endColumn": 26, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -21518,24 +16219,24 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForEvaluateUserPolicyAssociations", + "logicalId": "DatabaseSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 867, + "startLine": 717, "startColumn": 9, - "endLine": 867, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "endLine": 717, + "endColumn": 15, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" } }, { @@ -21544,464 +16245,505 @@ "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateCloudTrailRule", + "logicalId": "LambdaFunction", "entityType": "Resource", "resourceType": "AWS::Lambda::Function" }, "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 890, + "startLine": 735, "startColumn": 9, - "endLine": 890, - "endColumn": 21, + "endLine": 735, + "endColumn": 22, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLambda", + "logicalId": "LambdaRole", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 973, + "startLine": 802, "startColumn": 9, - "endLine": 973, - "endColumn": 21, + "endLine": 802, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionForEvaluateCloudTrailRule.Arn" + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLambda", + "logicalId": "DatabaseAlarm", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::CloudWatch::Alarm" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.AlarmName", "category": "Best Practice", - "startLine": 974, + "startLine": 846, "startColumn": 9, - "endLine": 974, - "endColumn": 15, + "endLine": 846, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLambda", + "logicalId": "SNSTopic", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.TopicName", "category": "Best Practice", - "startLine": 975, + "startLine": 877, "startColumn": 9, - "endLine": 975, - "endColumn": 18, + "endLine": 877, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { - "ruleId": "I9001", + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Resource 'BastionSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForEvaluateCloudTrail", + "logicalId": "BastionSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 983, - "startColumn": 9, - "endLine": 983, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 490, + "startColumn": 7, + "endLine": 490, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'DatabaseSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateCloudTrailBucketRule", + "logicalId": "DatabaseSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1003, - "startColumn": 9, - "endLine": 1003, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 715, + "startColumn": 7, + "endLine": 715, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'LambdaRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateCloudTrailBucketLambda", + "logicalId": "LambdaRole", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1089, - "startColumn": 9, - "endLine": 1089, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionForEvaluateCloudTrailBucketRule.Arn" - } + "startLine": 801, + "startColumn": 7, + "endLine": 801, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Resource 'DatabaseAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateCloudTrailBucketLambda", + "logicalId": "DatabaseAlarm", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::CloudWatch::Alarm" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1090, - "startColumn": 9, - "endLine": 1090, + "startLine": 845, + "startColumn": 7, + "endLine": 845, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "lsp/comprehensive.yaml": { + "filePath": "lsp/comprehensive.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 12, + "counts": { + "fatal": 4, + "errors": 1, + "warnings": 10, + "informational": 29, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3003", + "severity": "FATAL", + "message": "'MaxSize' is a required property", + "source": "SCHEMA", + "entity": { + "logicalId": "AutoScalingGroup", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'MaxSize'", + "category": "Schema", + "startLine": 236, + "startColumn": 5, + "endLine": 236, + "endColumn": 15, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "F3003", + "severity": "FATAL", + "message": "'MinSize' is a required property", + "source": "SCHEMA", + "entity": { + "logicalId": "AutoScalingGroup", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'MinSize'", + "category": "Schema", + "startLine": 236, + "startColumn": 5, + "endLine": 236, "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Required property missing", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F6101", + "severity": "FATAL", + "message": "Fn::Sub variable '${MaxScaling}' does not reference a valid resource, parameter, or pseudo-parameter", + "source": "SCHEMA", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateCloudTrailBucketLambda", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "logicalId": "ComplexOutput", + "entityType": "Output" }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 1091, - "startColumn": 9, - "endLine": 1091, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Outputs/ComplexOutput/Value.Fn::Sub", + "category": "Structure", + "startLine": 421, + "startColumn": 3, + "endLine": 421, + "endColumn": 16, + "ruleDescription": "Output value must be a string", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "F8611", + "severity": "FATAL", + "message": "'Fn::FindInMap' is not supported in the Rules section - allowed: ['Ref', 'Fn::ValueOf', 'Fn::ValueOfAll', 'Fn::RefAll', 'Fn::Contains', 'Fn::EachMemberEquals', 'Fn::EachMemberIn', 'Fn::Equals', 'Fn::And', 'Fn::Or', 'Fn::Not', 'Fn::If', 'Fn::Select']", + "source": "SCHEMA", "entity": { - "logicalId": "ConfigRuleForEvaluateCloudTrailBucket", - "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "logicalId": "ValidateRegionAndEnvironment", + "entityType": "Rule" }, - "propertyPath": "Properties.ConfigRuleName", - "category": "Best Practice", - "startLine": 1099, - "startColumn": 9, - "endLine": 1099, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Rules/ValidateRegionAndEnvironment", + "category": "Structure", + "startLine": 110, + "startColumn": 3, + "endLine": 110, + "endColumn": 31, + "ruleDescription": "Disallowed function in Rules section", + "phase": "PARSE" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E9006", + "severity": "ERROR", + "message": "'8.0' is not one of ['5.5.62', '5.6.51', '5.7.33', '5.7.34', '5.7.36', '5.7.37', '5.7.38', '5.7.39', '5.7.40', '5.7.41', '5.7.42', '5.7.43', '5.7.44', '5.7.44-rds.20240408', '5.7.44-rds.20240529', '5.7.44-rds.20240808', '5.7.44-rds.20250103', '5.7.44-rds.20250213', '5.7.44-rds.20250508', '5.7.44-rds.20250818', '5.7.44-rds.20251212', '5.7.44-rds.20260212', '5.7.44-rds.20260521', '5.7.44-rds.20260624', '5.7.44-rds.20260902', '8.0.11', '8.0.13', '8.0.15', '8.0.16', '8.0.17', '8.0.19', '8.0.20', '8.0.21', '8.0.23', '8.0.25', '8.0.26', '8.0.27', '8.0.28', '8.0.29', '8.0.30', '8.0.31', '8.0.32', '8.0.33', '8.0.34', '8.0.35', '8.0.36', '8.0.37', '8.0.39', '8.0.40', '8.0.41', '8.0.42', '8.0.43', '8.0.44', '8.0.45', '8.0.46', '8.0.46-rds.20260624', '8.0.46-rds.20260908', '8.4.10', '8.4.11', '8.4.3', '8.4.4', '8.4.5', '8.4.6', '8.4.7', '8.4.8', '8.4.9']", + "source": "CFN_LINT", "entity": { - "logicalId": "FunctionForEvaluateCloudTrailLogIntegrityRule", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 1120, - "startColumn": 9, - "endLine": 1120, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.EngineVersion", + "category": "Schema", + "startLine": 271, + "startColumn": 7, + "endLine": 271, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Property value not valid for conditional extension enum", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1011", + "severity": "WARN", + "message": "Use dynamic references (e.g., SSM SecureString) instead of parameter 'DatabasePassword' for secrets", + "source": "CFN_LINT", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLogIntegrityLambda", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.FunctionName", - "category": "Best Practice", - "startLine": 1186, - "startColumn": 9, - "endLine": 1186, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionForEvaluateCloudTrailLogIntegrityRule.Arn" - } + "propertyPath": "Properties.MasterUserPassword", + "category": "Security", + "startLine": 276, + "startColumn": 7, + "endLine": 276, + "endColumn": 25, + "ruleDescription": "Instead of REFing a parameter for a secret use a dynamic reference", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", + "source": "CFN_LINT", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLogIntegrityLambda", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "logicalId": "ConditionalOutput", + "entityType": "Output" }, - "propertyPath": "Properties.Action", + "propertyPath": "Outputs/ConditionalOutput/Value.Fn::If.2", "category": "Best Practice", - "startLine": 1187, - "startColumn": 9, - "endLine": 1187, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 442, + "startColumn": 3, + "endLine": 442, + "endColumn": 20, + "ruleDescription": "Check Fn::If has a path that cannot be reached", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "ruleId": "W1103", + "severity": "WARN", + "message": "'!Implies' is not a supported function", + "source": "ENGINE", + "category": "Intrinsic Function", + "ruleDescription": "Unknown intrinsic function name", + "phase": "PARSE" + }, + { + "ruleId": "W2508", + "severity": "WARN", + "message": "Security group allows 0.0.0.0/0 access to sensitive port 22 (range 22-22)", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLogIntegrityLambda", + "logicalId": "BastionSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Principal", - "category": "Best Practice", - "startLine": 1188, - "startColumn": 9, - "endLine": 1188, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.SecurityGroupIngress", + "suggestedFix": "Restrict the CIDR range to specific IP addresses", + "category": "Security", + "startLine": 206, + "startColumn": 7, + "endLine": 206, + "endColumn": 27, + "ruleDescription": "Security group allows open access to sensitive port", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.9' was deprecated on '2025-12-15'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", "entity": { - "logicalId": "ConfigRuleForEvaluateCloudTrailLogIntegrity", + "logicalId": "LambdaFunction", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.ConfigRuleName", - "category": "Best Practice", - "startLine": 1197, - "startColumn": 9, - "endLine": 1197, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", - "ruleDescription": "Create-only property updated triggers resource replacement", + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 306, + "startColumn": 7, + "endLine": 306, + "endColumn": 14, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "actualValue": "python3.9", + "lifecycle": "deprecated" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'IsNotProduction' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "FunctionForInstanceRoleUseRule", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "logicalId": "IsNotProduction", + "entityType": "Condition" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Conditions/IsNotProduction", "category": "Best Practice", - "startLine": 1217, - "startColumn": 9, - "endLine": 1217, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 93, + "startColumn": 3, + "endLine": 93, + "endColumn": 18, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'ComplexCondition' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "ConfigPermissionToCallInstanceRoleUseLambda", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "logicalId": "ComplexCondition", + "entityType": "Condition" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Conditions/ComplexCondition", "category": "Best Practice", - "startLine": 1268, - "startColumn": 9, - "endLine": 1268, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionForInstanceRoleUseRule.Arn" - } + "startLine": 101, + "startColumn": 3, + "endLine": 101, + "endColumn": 19, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "-1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "ConfigPermissionToCallInstanceRoleUseLambda", + "logicalId": "WebSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.SecurityGroupEgress.0.IpProtocol", "category": "Best Practice", - "startLine": 1269, - "startColumn": 9, - "endLine": 1269, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 195, + "startColumn": 11, + "endLine": 195, + "endColumn": 21, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W9003", + "severity": "WARN", + "message": "100 (from Fn::If on condition 'IsProduction') is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", "entity": { - "logicalId": "ConfigPermissionToCallInstanceRoleUseLambda", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.AllocatedStorage", "category": "Best Practice", - "startLine": 1270, - "startColumn": 9, - "endLine": 1270, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", + "startLine": 272, + "startColumn": 7, + "endLine": 272, + "endColumn": 23, + "conditionScenario": { + "IsProduction": true + }, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Property type coercion warning", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "resolutionSource": "Fn::If on condition 'IsProduction'" } }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForInstanceRoleUses", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ConfigRuleName", - "category": "Best Practice", - "startLine": 1279, - "startColumn": 9, - "endLine": 1279, + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 274, + "startColumn": 7, + "endLine": 274, "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateKeyRotationRule", + "logicalId": "VPC", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::VPC" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 1302, - "startColumn": 9, - "endLine": 1302, - "endColumn": 21, + "startLine": 142, + "startColumn": 7, + "endLine": 142, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22011,42 +16753,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateKeyRotationLambda", + "logicalId": "PublicSubnet", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1365, - "startColumn": 9, - "endLine": 1365, - "endColumn": 21, + "startLine": 158, + "startColumn": 7, + "endLine": 158, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionForEvaluateKeyRotationRule.Arn" + "resolutionSource": "Ref to 'VPC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'CidrBlock' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateKeyRotationLambda", + "logicalId": "PublicSubnet", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.CidrBlock", "category": "Best Practice", - "startLine": 1366, - "startColumn": 9, - "endLine": 1366, - "endColumn": 15, + "startLine": 159, + "startColumn": 7, + "endLine": 159, + "endColumn": 16, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22056,42 +16798,42 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'AvailabilityZone' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallEvaluateKeyRotationLambda", + "logicalId": "PublicSubnet", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Subnet" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.AvailabilityZone", "category": "Best Practice", - "startLine": 1367, - "startColumn": 9, - "endLine": 1367, - "endColumn": 18, + "startLine": 160, + "startColumn": 7, + "endLine": 160, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "dynamic (Select with unresolvable arguments)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForEvaluateKeyRotations", + "logicalId": "WebSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 1376, - "startColumn": 9, - "endLine": 1376, + "startLine": 176, + "startColumn": 7, + "endLine": 176, "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22101,244 +16843,249 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateConfigInAllRegionsRule", + "logicalId": "WebSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1398, - "startColumn": 9, - "endLine": 1398, - "endColumn": 21, + "startLine": 177, + "startColumn": 7, + "endLine": 177, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EvaluateConfigInAllRegionsFunctionPermission", + "logicalId": "BastionSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 1472, - "startColumn": 9, - "endLine": 1472, - "endColumn": 21, + "startLine": 204, + "startColumn": 7, + "endLine": 204, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionForEvaluateConfigInAllRegionsRule.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EvaluateConfigInAllRegionsFunctionPermission", + "logicalId": "BastionSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1473, - "startColumn": 9, - "endLine": 1473, - "endColumn": 15, + "startLine": 205, + "startColumn": 7, + "endLine": 205, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Ref to 'VPC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchTemplateName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "EvaluateConfigInAllRegionsFunctionPermission", + "logicalId": "LaunchTemplate", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::LaunchTemplate" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.LaunchTemplateName", "category": "Best Practice", - "startLine": 1474, - "startColumn": 9, - "endLine": 1474, - "endColumn": 18, + "startLine": 216, + "startColumn": 7, + "endLine": 216, + "endColumn": 25, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'AutoScalingGroupName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForEvaluateConfigInAllRegions", + "logicalId": "AutoScalingGroup", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.AutoScalingGroupName", "category": "Best Practice", - "startLine": 1481, - "startColumn": 9, - "endLine": 1481, - "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "startLine": 237, + "startColumn": 7, + "endLine": 237, + "endColumn": 27, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'LaunchTemplate' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionForVpcPeeringRouteTablesRule", + "logicalId": "AutoScalingGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.LaunchTemplate", "category": "Best Practice", - "startLine": 1503, - "startColumn": 9, - "endLine": 1503, + "startLine": 238, + "startColumn": 7, + "endLine": 238, "endColumn": 21, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'VPCZoneIdentifier' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallVpcPeeringRouteTablesLambda", + "logicalId": "AutoScalingGroup", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::AutoScaling::AutoScalingGroup" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.VPCZoneIdentifier", "category": "Best Practice", - "startLine": 1557, - "startColumn": 9, - "endLine": 1557, - "endColumn": 21, + "startLine": 242, + "startColumn": 7, + "endLine": 242, + "endColumn": 24, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionForVpcPeeringRouteTablesRule.Arn" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'DBInstanceIdentifier' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallVpcPeeringRouteTablesLambda", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.DBInstanceIdentifier", "category": "Best Practice", - "startLine": 1558, - "startColumn": 9, - "endLine": 1558, - "endColumn": 15, + "startLine": 268, + "startColumn": 7, + "endLine": 268, + "endColumn": 27, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigPermissionToCallVpcPeeringRouteTablesLambda", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 1559, - "startColumn": 9, - "endLine": 1559, - "endColumn": 18, + "startLine": 270, + "startColumn": 7, + "endLine": 270, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'StorageEncrypted' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConfigRuleForVpcPeeringRouteTabless", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.StorageEncrypted", "category": "Best Practice", - "startLine": 1568, - "startColumn": 9, - "endLine": 1568, + "startLine": 274, + "startColumn": 7, + "endLine": 274, "endColumn": 23, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProduction'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SnsTopicForCloudWatchEvents", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.TopicName", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 1589, - "startColumn": 9, - "endLine": 1589, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "startLine": 275, + "startColumn": 7, + "endLine": 275, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22348,69 +17095,67 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'BackupRetentionPeriod' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GetCloudTrailCloudWatchLog", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.BackupRetentionPeriod", "category": "Best Practice", - "startLine": 1603, - "startColumn": 9, - "endLine": 1603, - "endColumn": 21, + "startLine": 279, + "startColumn": 7, + "endLine": 279, + "endColumn": 28, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "conditional-create-only", + "resolutionSource": "Fn::If on condition 'IsProduction'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'MultiAZ' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UnauthorizedAttemptsCloudWatchFilter", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.MultiAZ", "category": "Best Practice", - "startLine": 1651, - "startColumn": 9, - "endLine": 1651, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "startLine": 280, + "startColumn": 7, + "endLine": 280, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ResourceForGetCloudTrailCloudWatchLog.LogName", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (condition reference: IsProduction)" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UnauthorizedAttemptCloudWatchAlarm", + "logicalId": "DatabaseSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.AlarmName", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 1662, - "startColumn": 9, - "endLine": 1662, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "startLine": 293, + "startColumn": 7, + "endLine": 293, + "endColumn": 23, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22420,78 +17165,71 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'VpcId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "IAMRootActivityCloudWatchMetric", + "logicalId": "DatabaseSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.VpcId", "category": "Best Practice", - "startLine": 1685, - "startColumn": 9, - "endLine": 1685, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "startLine": 294, + "startColumn": 7, + "endLine": 294, + "endColumn": 12, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ResourceForGetCloudTrailCloudWatchLog.LogName", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "Ref to 'VPC'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "IAMRootActivityCloudWatchAlarm", + "logicalId": "LambdaFunction", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::Lambda::Function" }, - "propertyPath": "Properties.AlarmName", + "propertyPath": "Properties.FunctionName", "category": "Best Practice", - "startLine": 1700, - "startColumn": 9, - "endLine": 1700, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "startLine": 305, + "startColumn": 7, + "endLine": 305, + "endColumn": 19, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'RoleName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConsoleSigninWithoutMfaCloudWatchMetric", + "logicalId": "LambdaRole", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.RoleName", "category": "Best Practice", - "startLine": 1722, - "startColumn": 9, - "endLine": 1722, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "startLine": 343, + "startColumn": 7, + "endLine": 343, + "endColumn": 15, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ResourceForGetCloudTrailCloudWatchLog.LogName", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "parameter with AllowedValues" } }, { @@ -22500,426 +17238,384 @@ "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConsoleSigninWithoutMFACloudWatchAlarm", + "logicalId": "DatabaseAlarm", "entityType": "Resource", "resourceType": "AWS::CloudWatch::Alarm" }, "propertyPath": "Properties.AlarmName", "category": "Best Practice", - "startLine": 1738, - "startColumn": 9, - "endLine": 1738, - "endColumn": 18, + "startLine": 369, + "startColumn": 7, + "endLine": 369, + "endColumn": 16, "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "parameter with AllowedValues" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConsoleLoginFailureCloudWatchMetric", + "logicalId": "SNSTopic", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.TopicName", "category": "Best Practice", - "startLine": 1761, - "startColumn": 9, - "endLine": 1761, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "startLine": 390, + "startColumn": 7, + "endLine": 390, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { "lifecycle": "create-only", - "resolutionSource": "GetAtt ResourceForGetCloudTrailCloudWatchLog.LogName", - "extra": { - "replacement_strategy": "delete_then_create" - } + "resolutionSource": "parameter with AllowedValues" } }, { - "ruleId": "I9001", + "ruleId": "I9003", "severity": "INFO", - "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", "source": "ENGINE", - "entity": { - "logicalId": "ConsoleLoginFailureCloudWatchAlarm", - "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" - }, - "propertyPath": "Properties.AlarmName", "category": "Best Practice", - "startLine": 1775, - "startColumn": 9, - "endLine": 1775, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Resource 'BastionSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "KMSCustomerKeyDeletionCloudWatchMetric", + "logicalId": "BastionSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1798, - "startColumn": 9, - "endLine": 1798, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ResourceForGetCloudTrailCloudWatchLog.LogName", - "extra": { - "replacement_strategy": "delete_then_create" - } - } + "startLine": 203, + "startColumn": 5, + "endLine": 203, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "message": "Resource 'DatabaseSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "KMSCustomerKeyDeletionCloudWatchAlarm", + "logicalId": "DatabaseSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.AlarmName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1812, - "startColumn": 9, - "endLine": 1812, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 292, + "startColumn": 5, + "endLine": 292, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'LambdaRole' of type 'AWS::IAM::Role' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FunctionToFormatCloudWatchEvent", + "logicalId": "LambdaRole", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::IAM::Role" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1860, - "startColumn": 9, - "endLine": 1860, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 342, + "startColumn": 5, + "endLine": 342, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Resource 'DatabaseAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LambdaPermissionForCloudTrailCloudWatchEventRules", + "logicalId": "DatabaseAlarm", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::CloudWatch::Alarm" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1897, - "startColumn": 9, - "endLine": 1897, - "endColumn": 21, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionToFormatCloudWatchEvent.Arn" - } + "startLine": 368, + "startColumn": 5, + "endLine": 368, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "lsp/condition-usage.json": { + "filePath": "lsp/condition-usage.json", + "status": "OK", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 6, + "informational": 13, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "E3016", + "severity": "ERROR", + "message": "UpdatePolicy is not supported on resource type 'AWS::S3::Bucket'", + "source": "CFN_LINT", "entity": { - "logicalId": "LambdaPermissionForCloudTrailCloudWatchEventRules", + "logicalId": "ProductionBucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Action", - "category": "Best Practice", - "startLine": 1898, - "startColumn": 9, - "endLine": 1898, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "UpdatePolicy", + "suggestedFix": "Remove UpdatePolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::ElastiCache::ReplicationGroup, AWS::Elasticsearch::Domain, AWS::Lambda::Alias, AWS::OpenSearchService::Domain", + "category": "Resource", + "startLine": 75, + "startColumn": 7, + "endLine": 75, + "endColumn": 20, + "ruleDescription": "Check UpdatePolicy values for Resources", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", + "source": "CFN_LINT", "entity": { - "logicalId": "LambdaPermissionForCloudTrailCloudWatchEventRules", + "logicalId": "ProductionBucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.BucketName.Fn::If.2", "category": "Best Practice", - "startLine": 1899, - "startColumn": 9, - "endLine": 1899, - "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 62, + "startColumn": 13, + "endLine": 62, + "endColumn": 27, + "ruleDescription": "Check Fn::If has a path that cannot be reached", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", + "source": "CFN_LINT", "entity": { - "logicalId": "DetectS3BucketPolicyChanges", + "logicalId": "ProductionBucket", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.VersioningConfiguration.Status.Fn::If.2", "category": "Best Practice", - "startLine": 1907, - "startColumn": 9, - "endLine": 1907, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 70, + "startColumn": 15, + "endLine": 70, + "endColumn": 25, + "ruleDescription": "Check Fn::If has a path that cannot be reached", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W2501", + "severity": "WARN", + "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", + "source": "CFN_LINT", "entity": { - "logicalId": "DetectConfigChanges", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 1938, + "propertyPath": "Properties.MasterUserPassword", + "category": "Security", + "startLine": 97, "startColumn": 9, - "endLine": 1938, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 97, + "endColumn": 28, + "ruleDescription": "Check if Password Properties are correctly configured", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'NotProduction' is not used by any resource or Fn::If", + "source": "CFN_LINT", "entity": { - "logicalId": "KmsKeyUseCloudWatchEventRule", - "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "logicalId": "NotProduction", + "entityType": "Condition" }, - "propertyPath": "Properties.Name", + "propertyPath": "Conditions/NotProduction", "category": "Best Practice", - "startLine": 1963, - "startColumn": 9, - "endLine": 1963, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 47, + "startColumn": 5, + "endLine": 47, + "endColumn": 19, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "CloudTrailCloudWatchEventRule", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 1985, - "startColumn": 9, - "endLine": 1985, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 93, + "startColumn": 7, + "endLine": 93, + "endColumn": 18, + "ruleDescription": "RDS instance should have StorageEncrypted", + "phase": "LINT" }, { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", "source": "ENGINE", "entity": { - "logicalId": "IamPolicyChangesCloudWatchEventRule", + "logicalId": "ConditionalResource", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 2008, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 104, "startColumn": 9, - "endLine": 2008, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 104, + "endColumn": 17, + "ruleDescription": "Hardcoded AMI ID", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "BillingChangeCloudWatchEventRule", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 2046, - "startColumn": 9, - "endLine": 2046, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 90, + "startColumn": 5, + "endLine": 90, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3011", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "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": "Ec2TerminationCloudWatchEventRule", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Name", "category": "Best Practice", - "startLine": 2070, - "startColumn": 9, - "endLine": 2070, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 90, + "startColumn": 5, + "endLine": 90, + "endColumn": 14, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I3013", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "SecurityGroupChangesCloudWatchEventRule", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 2093, - "startColumn": 9, - "endLine": 2093, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 93, + "startColumn": 7, + "endLine": 93, + "endColumn": 18, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NetworkAclChangesCloudWatchEventRule", + "logicalId": "ProductionBucket", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 2121, + "startLine": 58, "startColumn": 9, - "endLine": 2121, - "endColumn": 13, + "endLine": 58, + "endColumn": 20, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only" + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProduction'" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "NetworkChangeCloudWatchEventRule", + "logicalId": "DevelopmentBucket", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Name", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 2151, + "startLine": 87, "startColumn": 9, - "endLine": 2151, - "endColumn": 13, + "endLine": 87, + "endColumn": 20, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22929,47 +17625,43 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BillingChangesCloudWatchFilter", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Logs::MetricFilter" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.LogGroupName", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 2187, + "startLine": 95, "startColumn": 9, - "endLine": 2187, - "endColumn": 21, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "endLine": 95, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt ResourceForGetCloudTrailCloudWatchLog.LogName", - "extra": { - "replacement_strategy": "delete_then_create" - } + "lifecycle": "conditional-create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BillingChangesCloudWatchAlarm", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.AlarmName", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 2202, + "startLine": 96, "startColumn": 9, - "endLine": 2202, - "endColumn": 18, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "endLine": 96, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -22979,19 +17671,20 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionToDisableUnusedCredentials", + "logicalId": "ConditionalResource", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 2255, + "startLine": 104, "startColumn": 9, - "endLine": 2255, - "endColumn": 21, + "endLine": 104, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -23001,864 +17694,1186 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "LambdaPermissionForDisableUnusedCredentials", + "logicalId": "ConditionalResource", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 2342, + "startLine": 105, "startColumn": 9, - "endLine": 2342, - "endColumn": 21, + "endLine": 105, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt FunctionToDisableUnusedCredentials.Arn" + "lifecycle": "conditional-create-only", + "resolutionSource": "Fn::If on condition 'IsProductionAndCreateDB'" } }, { - "ruleId": "I9001", + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Resource 'ProductionBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LambdaPermissionForDisableUnusedCredentials", + "logicalId": "ProductionBucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 2343, - "startColumn": 9, - "endLine": 2343, - "endColumn": 15, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 57, + "startColumn": 7, + "endLine": 57, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Resource 'DevelopmentBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "LambdaPermissionForDisableUnusedCredentials", + "logicalId": "DevelopmentBucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 2344, - "startColumn": 9, - "endLine": 2344, + "startLine": 86, + "startColumn": 7, + "endLine": 86, "endColumn": 18, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "message": "Resource 'Database' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ScheduledRuleForDisableUnusedCredentials", - "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "logicalId": "Database", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 93, + "startColumn": 7, + "endLine": 93, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "lsp/condition-usage.yaml": { + "filePath": "lsp/condition-usage.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 8, + "counts": { + "fatal": 0, + "errors": 7, + "warnings": 7, + "informational": 21, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E1028", + "severity": "ERROR", + "message": "Fn::If first element must be the name of a condition, not an expression", + "source": "SCHEMA", + "entity": { + "logicalId": "LogicalConditionResource", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.AlarmName.Fn::If.0", + "category": "Intrinsic Function", + "startLine": 172, + "startColumn": 18, + "endLine": 172, + "endColumn": 19, + "ruleDescription": "Fn::If condition must exist in Conditions section", + "phase": "PARSE" + }, + { + "ruleId": "E1028", + "severity": "ERROR", + "message": "Fn::If first element must be the name of a condition, not an expression", + "source": "SCHEMA", + "entity": { + "logicalId": "LogicalConditionResource", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Threshold.Fn::If.0", + "category": "Intrinsic Function", + "startLine": 184, + "startColumn": 17, + "endLine": 184, + "endColumn": 18, + "ruleDescription": "Fn::If condition must exist in Conditions section", + "phase": "PARSE" + }, + { + "ruleId": "E1028", + "severity": "ERROR", + "message": "Fn::If first element must be the name of a condition, not an expression", + "source": "SCHEMA", + "entity": { + "logicalId": "LogicalConditionResource", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.TreatMissingData.Fn::If.0", + "category": "Intrinsic Function", + "startLine": 192, + "startColumn": 18, + "endLine": 192, + "endColumn": 19, + "ruleDescription": "Fn::If condition must exist in Conditions section", + "phase": "PARSE" + }, + { + "ruleId": "E1028", + "severity": "ERROR", + "message": "Fn::If first element must be the name of a condition, not an expression", + "source": "SCHEMA", + "entity": { + "logicalId": "LogicalConditionalOutput", + "entityType": "Output" + }, + "propertyPath": "Outputs/LogicalConditionalOutput/Value/Fn::If/0", + "category": "Intrinsic Function", + "startLine": 236, + "startColumn": 18, + "endLine": 236, + "endColumn": 19, + "ruleDescription": "Fn::If condition must exist in Conditions section", + "phase": "PARSE" + }, + { + "ruleId": "E1028", + "severity": "ERROR", + "message": "Fn::If first element must be the name of a condition, not an expression", + "source": "SCHEMA", + "entity": { + "logicalId": "LogicalConditionalOutput", + "entityType": "Output" + }, + "propertyPath": "Outputs/LogicalConditionalOutput/Value/Fn::If/2/Fn::If/0", + "category": "Intrinsic Function", + "startLine": 241, + "startColumn": 21, + "endLine": 241, + "endColumn": 22, + "ruleDescription": "Fn::If condition must exist in Conditions section", + "phase": "PARSE" + }, + { + "ruleId": "E1028", + "severity": "ERROR", + "message": "Fn::If first element must be the name of a condition, not an expression", + "source": "SCHEMA", + "entity": { + "logicalId": "EdgeCaseOutput", + "entityType": "Output" }, - "propertyPath": "Properties.Name", - "category": "Best Practice", - "startLine": 2349, - "startColumn": 9, - "endLine": 2349, - "endColumn": 13, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "propertyPath": "Outputs/EdgeCaseOutput/Value/Fn::If/0", + "category": "Intrinsic Function", + "startLine": 251, + "startColumn": 19, + "endLine": 251, + "endColumn": 20, + "ruleDescription": "Fn::If condition must exist in Conditions section", + "phase": "PARSE" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'MasterConfigRole' of type 'AWS::IAM::Role' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "E3016", + "severity": "ERROR", + "message": "UpdatePolicy is not supported on resource type 'AWS::S3::Bucket'", + "source": "CFN_LINT", "entity": { - "logicalId": "MasterConfigRole", + "logicalId": "ProductionBucket", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", + "propertyPath": "UpdatePolicy", + "suggestedFix": "Remove UpdatePolicy or change resource type to one of: AWS::AppStream::Fleet, AWS::AutoScaling::AutoScalingGroup, AWS::ElastiCache::ReplicationGroup, AWS::Elasticsearch::Domain, AWS::Lambda::Alias, AWS::OpenSearchService::Domain", + "category": "Resource", "startLine": 78, - "startColumn": 7, + "startColumn": 5, "endLine": 78, "endColumn": 17, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Check UpdatePolicy values for Resources", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FunctiontForEvaluateCisBenchmarkingPreconditions' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", + "source": "CFN_LINT", "entity": { - "logicalId": "FunctiontForEvaluateCisBenchmarkingPreconditions", + "logicalId": "ProductionBucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BucketName.Fn::If.2", "category": "Best Practice", - "startLine": 123, - "startColumn": 7, - "endLine": 123, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", + "startLine": 57, + "startColumn": 54, + "endLine": 57, + "endColumn": 55, + "ruleDescription": "Check Fn::If has a path that cannot be reached", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FunctionForEvaluateRootAccountRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", + "source": "CFN_LINT", "entity": { - "logicalId": "FunctionForEvaluateRootAccountRule", + "logicalId": "ProductionBucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.VersioningConfiguration.Status.Fn::If.2", "category": "Best Practice", - "startLine": 230, - "startColumn": 7, - "endLine": 230, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", + "startLine": 62, + "startColumn": 43, + "endLine": 62, + "endColumn": 44, + "ruleDescription": "Check Fn::If has a path that cannot be reached", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FunctionForVpcFlowLogRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", + "source": "CFN_LINT", "entity": { - "logicalId": "FunctionForVpcFlowLogRule", + "logicalId": "ProductionBucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.PublicAccessBlockConfiguration.BlockPublicAcls.Fn::If.2", "category": "Best Practice", - "startLine": 424, - "startColumn": 7, - "endLine": 424, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", + "startLine": 69, + "startColumn": 13, + "endLine": 69, + "endColumn": 14, + "ruleDescription": "Check Fn::If has a path that cannot be reached", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FunctionForVpcDefaultSecurityGroupsRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'IsProduction' to False from current status True", + "source": "CFN_LINT", "entity": { - "logicalId": "FunctionForVpcDefaultSecurityGroupsRule", + "logicalId": "ProductionBucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.PublicAccessBlockConfiguration.BlockPublicPolicy.Fn::If.2", "category": "Best Practice", - "startLine": 500, - "startColumn": 7, - "endLine": 500, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", + "startLine": 76, + "startColumn": 15, + "endLine": 76, + "endColumn": 16, + "ruleDescription": "Check Fn::If has a path that cannot be reached", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FunctionForRoleForMfaOnUsersRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "W2501", + "severity": "WARN", + "message": "Property 'MasterUserPassword' should not be a hardcoded string - use a parameter with NoEcho or a dynamic reference", + "source": "CFN_LINT", "entity": { - "logicalId": "FunctionForRoleForMfaOnUsersRule", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 609, + "propertyPath": "Properties.MasterUserPassword", + "category": "Security", + "startLine": 98, "startColumn": 7, - "endLine": 609, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", + "endLine": 98, + "endColumn": 25, + "ruleDescription": "Check if Password Properties are correctly configured", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FunctionForEvaluatePolicyPermissionsRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "ruleId": "W9008", + "severity": "WARN", + "message": "RDS instance should have StorageEncrypted set to true", "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluatePolicyPermissionsRule", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 702, - "startColumn": 7, - "endLine": 702, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", + "propertyPath": "Properties.StorageEncrypted", + "suggestedFix": "Set StorageEncrypted to true", + "category": "Security", + "startLine": 94, + "startColumn": 5, + "endLine": 94, + "endColumn": 15, + "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'FunctionForEvaluateUserPolicyAssociationRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "ruleId": "W9010", + "severity": "WARN", + "message": "Hardcoded AMI ID - use a parameter or mapping for portability", "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateUserPolicyAssociationRule", + "logicalId": "ConditionalResource", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 798, + "propertyPath": "Properties.ImageId", + "category": "Security", + "startLine": 104, "startColumn": 7, - "endLine": 798, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", + "endLine": 104, + "endColumn": 14, + "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'FunctionForEvaluateCloudTrailRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "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": "FunctionForEvaluateCloudTrailRule", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 889, - "startColumn": 7, - "endLine": 889, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", + "startLine": 91, + "startColumn": 3, + "endLine": 91, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3011", "severity": "INFO", - "message": "Resource 'FunctionForEvaluateCloudTrailBucketRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "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": "FunctionForEvaluateCloudTrailBucketRule", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1002, - "startColumn": 7, - "endLine": 1002, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", + "startLine": 91, + "startColumn": 3, + "endLine": 91, + "endColumn": 11, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I3013", "severity": "INFO", - "message": "Resource 'FunctionForEvaluateCloudTrailLogIntegrityRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", - "source": "ENGINE", + "message": "'BackupRetentionPeriod' 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": "FunctionForEvaluateCloudTrailLogIntegrityRule", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties", "category": "Best Practice", - "startLine": 1119, - "startColumn": 7, - "endLine": 1119, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", + "startLine": 94, + "startColumn": 5, + "endLine": 94, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", "phase": "LINT" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FunctionForInstanceRoleUseRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionForInstanceRoleUseRule", + "logicalId": "ProductionBucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 1216, + "startLine": 57, "startColumn": 7, - "endLine": 1216, + "endLine": 57, "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProduction'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FunctionForEvaluateKeyRotationRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateKeyRotationRule", + "logicalId": "DevelopmentBucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 1301, + "startLine": 89, "startColumn": 7, - "endLine": 1301, + "endLine": 89, "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FunctionForEvaluateConfigInAllRegionsRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionForEvaluateConfigInAllRegionsRule", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Engine", "category": "Best Practice", - "startLine": 1397, + "startLine": 96, "startColumn": 7, - "endLine": 1397, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 96, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FunctionForVpcPeeringRouteTablesRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'MasterUsername' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionForVpcPeeringRouteTablesRule", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::RDS::DBInstance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.MasterUsername", "category": "Best Practice", - "startLine": 1502, + "startLine": 97, "startColumn": 7, - "endLine": 1502, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 97, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'SnsTopicForCloudWatchEvents' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "SnsTopicForCloudWatchEvents", + "logicalId": "ConditionalResource", "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.ImageId", "category": "Best Practice", - "startLine": 1588, + "startLine": 104, "startColumn": 7, - "endLine": 1588, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 104, + "endColumn": 14, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'GetCloudTrailCloudWatchLog' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "GetCloudTrailCloudWatchLog", + "logicalId": "ConditionalResource", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.InstanceType", "category": "Best Practice", - "startLine": 1602, + "startLine": 107, "startColumn": 7, - "endLine": 1602, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 107, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "Fn::If on condition 'IsProductionAndCreateDB'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'UnauthorizedAttemptCloudWatchAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Property 'SecurityGroups' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "UnauthorizedAttemptCloudWatchAlarm", + "logicalId": "ConditionalResource", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::EC2::Instance" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.SecurityGroups", "category": "Best Practice", - "startLine": 1661, + "startLine": 109, "startColumn": 7, - "endLine": 1661, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 109, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'IAMRootActivityCloudWatchAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "IAMRootActivityCloudWatchAlarm", + "logicalId": "ProductionSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 1699, + "startLine": 137, "startColumn": 7, - "endLine": 1699, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 137, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ConsoleSigninWithoutMFACloudWatchAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Property 'GroupDescription' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConsoleSigninWithoutMFACloudWatchAlarm", + "logicalId": "DevSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::EC2::SecurityGroup" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.GroupDescription", "category": "Best Practice", - "startLine": 1737, + "startLine": 143, "startColumn": 7, - "endLine": 1737, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 143, + "endColumn": 23, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'ConsoleLoginFailureCloudWatchAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Property 'Bucket' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "ConsoleLoginFailureCloudWatchAlarm", + "logicalId": "NestedConditionResource", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::S3::BucketPolicy" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.Bucket", "category": "Best Practice", - "startLine": 1774, + "startLine": 149, "startColumn": 7, - "endLine": 1774, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 149, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'IsProduction'" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'KMSCustomerKeyDeletionCloudWatchAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "KMSCustomerKeyDeletionCloudWatchAlarm", + "logicalId": "LogicalConditionResource", "entityType": "Resource", "resourceType": "AWS::CloudWatch::Alarm" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.AlarmName", "category": "Best Practice", - "startLine": 1811, + "startLine": 171, "startColumn": 7, - "endLine": 1811, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 171, + "endColumn": 16, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition '__inline_cond_131'" + } }, { - "ruleId": "I9040", + "ruleId": "I9003", "severity": "INFO", - "message": "Resource 'RoleForCloudWatchEvents' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", "source": "ENGINE", - "entity": { - "logicalId": "RoleForCloudWatchEvents", - "entityType": "Resource", - "resourceType": "AWS::IAM::Role" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1831, - "startColumn": 7, - "endLine": 1831, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'FunctionToFormatCloudWatchEvent' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'ProductionBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "FunctionToFormatCloudWatchEvent", + "logicalId": "ProductionBucket", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1859, - "startColumn": 7, - "endLine": 1859, - "endColumn": 17, + "startLine": 55, + "startColumn": 5, + "endLine": 55, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DetectS3BucketPolicyChanges' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Resource 'DevelopmentBucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DetectS3BucketPolicyChanges", + "logicalId": "DevelopmentBucket", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1906, - "startColumn": 7, - "endLine": 1906, - "endColumn": 17, + "startLine": 88, + "startColumn": 5, + "endLine": 88, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'DetectConfigChanges' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Resource 'Database' of type 'AWS::RDS::DBInstance' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "DetectConfigChanges", + "logicalId": "Database", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::RDS::DBInstance" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1937, - "startColumn": 7, - "endLine": 1937, - "endColumn": 17, + "startLine": 94, + "startColumn": 5, + "endLine": 94, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'KmsKeyUseCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Resource 'ProductionSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "KmsKeyUseCloudWatchEventRule", + "logicalId": "ProductionSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1962, - "startColumn": 7, - "endLine": 1962, - "endColumn": 17, + "startLine": 136, + "startColumn": 5, + "endLine": 136, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'CloudTrailCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Resource 'DevSecurityGroup' of type 'AWS::EC2::SecurityGroup' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "CloudTrailCloudWatchEventRule", + "logicalId": "DevSecurityGroup", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::EC2::SecurityGroup" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 1984, - "startColumn": 7, - "endLine": 1984, - "endColumn": 17, + "startLine": 142, + "startColumn": 5, + "endLine": 142, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'IamPolicyChangesCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Resource 'LogicalConditionResource' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "IamPolicyChangesCloudWatchEventRule", + "logicalId": "LogicalConditionResource", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::CloudWatch::Alarm" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 2007, - "startColumn": 7, - "endLine": 2007, - "endColumn": 17, + "startLine": 170, + "startColumn": 5, + "endLine": 170, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "lsp/constants.json": { + "filePath": "lsp/constants.json", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 5, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", + "ruleId": "F0005", + "severity": "FATAL", + "message": "'Constants' is not a valid top-level template section", + "source": "SCHEMA", + "propertyPath": "Constants", + "category": "Structure", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 13, + "ruleDescription": "Top-level keys must be valid section names", + "phase": "SCHEMA" + }, + { + "ruleId": "F1018", + "severity": "FATAL", + "message": "Fn::Sub variable '${sub}' does not reference a valid resource, parameter, or pseudo-parameter", + "source": "SCHEMA", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata.Test", + "category": "Intrinsic Function", + "startLine": 19, + "startColumn": 9, + "endLine": 19, + "endColumn": 14, + "ruleDescription": "Sub variables must resolve", + "phase": "SCHEMA" + }, + { + "ruleId": "F1018", + "severity": "FATAL", + "message": "Fn::Sub variable '${foo}' does not reference a valid resource, parameter, or pseudo-parameter", + "source": "SCHEMA", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.BucketName", + "category": "Intrinsic Function", + "startLine": 27, + "startColumn": 9, + "endLine": 27, + "endColumn": 20, + "ruleDescription": "Sub variables must resolve", + "phase": "SCHEMA", + "context": { + "resolutionSource": "dynamic (Sub:${foo})" + } + }, + { + "ruleId": "F1020", + "severity": "FATAL", + "message": "'obj' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'Bucket', 'PersonalS3']", + "source": "SCHEMA", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata.TestObj", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 22, + "startColumn": 9, + "endLine": 22, + "endColumn": 17, + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" + }, + { + "ruleId": "F1020", + "severity": "FATAL", + "message": "'foo' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'Bucket', 'PersonalS3']", + "source": "SCHEMA", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags.0.Value", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 33, + "startColumn": 13, + "endLine": 33, + "endColumn": 19, + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" + }, + { + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'BillingChangeCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "BillingChangeCloudWatchEventRule", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 2045, - "startColumn": 7, - "endLine": 2045, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 27, + "startColumn": 9, + "endLine": 27, + "endColumn": 20, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:${foo})" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'Ec2TerminationCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "Ec2TerminationCloudWatchEventRule", + "logicalId": "PersonalS3", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 2069, - "startColumn": 7, - "endLine": 2069, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "startLine": 43, + "startColumn": 9, + "endLine": 43, + "endColumn": 20, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'SecurityGroupChangesCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Resource 'PersonalS3' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "SecurityGroupChangesCloudWatchEventRule", + "logicalId": "PersonalS3", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 2092, + "startLine": 42, "startColumn": 7, - "endLine": 2092, - "endColumn": 17, + "endLine": 42, + "endColumn": 18, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "lsp/constants.yaml": { + "filePath": "lsp/constants.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 5, + "errors": 0, + "warnings": 0, + "informational": 3, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'NetworkAclChangesCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F0005", + "severity": "FATAL", + "message": "'Constants' is not a valid top-level template section", + "source": "SCHEMA", + "propertyPath": "Constants", + "category": "Structure", + "startLine": 4, + "startColumn": 1, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Top-level keys must be valid section names", + "phase": "SCHEMA" + }, + { + "ruleId": "F1018", + "severity": "FATAL", + "message": "Fn::Sub variable '${sub}' does not reference a valid resource, parameter, or pseudo-parameter", + "source": "SCHEMA", "entity": { - "logicalId": "NetworkAclChangesCloudWatchEventRule", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 2120, + "propertyPath": "Metadata.Test", + "category": "Intrinsic Function", + "startLine": 15, + "startColumn": 7, + "endLine": 15, + "endColumn": 11, + "ruleDescription": "Sub variables must resolve", + "phase": "SCHEMA" + }, + { + "ruleId": "F1018", + "severity": "FATAL", + "message": "Fn::Sub variable '${foo}' does not reference a valid resource, parameter, or pseudo-parameter", + "source": "SCHEMA", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.BucketName", + "category": "Intrinsic Function", + "startLine": 18, "startColumn": 7, - "endLine": 2120, + "endLine": 18, "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Sub variables must resolve", + "phase": "SCHEMA", + "context": { + "resolutionSource": "dynamic (Sub:${foo})" + } }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'NetworkChangeCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F1020", + "severity": "FATAL", + "message": "'obj' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'Bucket', 'PersonalS3']", + "source": "SCHEMA", "entity": { - "logicalId": "NetworkChangeCloudWatchEventRule", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 2150, + "propertyPath": "Metadata.TestObj", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 16, "startColumn": 7, - "endLine": 2150, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "endLine": 16, + "endColumn": 14, + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'BillingChangesCloudWatchAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", - "source": "ENGINE", + "ruleId": "F1020", + "severity": "FATAL", + "message": "'foo' is not one of ['AWS::AccountId', 'AWS::NoValue', 'AWS::NotificationARNs', 'AWS::Partition', 'AWS::Region', 'AWS::StackId', 'AWS::StackName', 'AWS::URLSuffix', 'Bucket', 'PersonalS3']", + "source": "SCHEMA", "entity": { - "logicalId": "BillingChangesCloudWatchAlarm", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::CloudWatch::Alarm" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 2201, - "startColumn": 7, - "endLine": 2201, - "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "propertyPath": "Properties.Tags.0.Value", + "suggestedFix": "Check that the Ref target exists as a resource, parameter, or pseudo-parameter", + "category": "Intrinsic Function", + "startLine": 21, + "startColumn": 11, + "endLine": 21, + "endColumn": 16, + "ruleDescription": "Ref/GetAtt target must exist", + "phase": "SCHEMA" }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'RoleForDisableUnusedCredentialsFunction' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "RoleForDisableUnusedCredentialsFunction", + "logicalId": "Bucket", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 2221, + "startLine": 18, "startColumn": 7, - "endLine": 2221, + "endLine": 18, "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "dynamic (Sub:${foo})" + } }, { - "ruleId": "I9040", + "ruleId": "I9001", "severity": "INFO", - "message": "Resource 'FunctionToDisableUnusedCredentials' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "FunctionToDisableUnusedCredentials", + "logicalId": "PersonalS3", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 2254, + "startLine": 26, "startColumn": 7, - "endLine": 2254, + "endLine": 26, "endColumn": 17, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'ScheduledRuleForDisableUnusedCredentials' of type 'AWS::Events::Rule' supports Tags but none are configured", + "message": "Resource 'PersonalS3' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "ScheduledRuleForDisableUnusedCredentials", + "logicalId": "PersonalS3", "entityType": "Resource", - "resourceType": "AWS::Events::Rule" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 2348, - "startColumn": 7, - "endLine": 2348, - "endColumn": 17, + "startLine": 25, + "startColumn": 5, + "endLine": 25, + "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" } ] }, - "quickstart/config-rules.json": { - "filePath": "quickstart/config-rules.json", + "lsp/parameter_usage.json": { + "filePath": "lsp/parameter_usage.json", "status": "OK", "metadata": { - "resourcesScanned": 12, + "resourcesScanned": 5, "counts": { "fatal": 0, - "errors": 2, - "warnings": 5, - "informational": 15, + "errors": 1, + "warnings": 3, + "informational": 10, "debug": 0 }, "suppressed": 0, @@ -23867,164 +18882,137 @@ }, "diagnostics": [ { - "ruleId": "E2533", - "severity": "ERROR", - "message": "Runtime 'nodejs' was deprecated on '2016-08-30'. Creation was disabled on '2016-09-30', and updates were disabled on '2016-10-31'. Please consider updating to 'nodejs24.x'", - "source": "CFN_LINT", - "entity": { - "logicalId": "rAMIComplianceFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" - }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 194, - "startColumn": 5, - "endLine": 194, - "endColumn": 13, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs", - "lifecycle": "end-of-life" - } - }, - { - "ruleId": "E2533", + "ruleId": "E3001", "severity": "ERROR", - "message": "Runtime 'nodejs' was deprecated on '2016-08-30'. Creation was disabled on '2016-09-30', and updates were disabled on '2016-10-31'. Please consider updating to 'nodejs24.x'", + "message": "Resource 'Bucket1' has invalid property 'Conditions'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", "source": "CFN_LINT", "entity": { - "logicalId": "rCloudTrailValidationFunction", + "logicalId": "Bucket1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Runtime", - "category": "Deprecation", - "startLine": 291, - "startColumn": 5, - "endLine": 291, - "endColumn": 13, - "ruleDescription": "Check if Lambda Function Runtimes are updatable", - "phase": "SCHEMA", - "context": { - "actualValue": "nodejs", - "lifecycle": "end-of-life" - } + "category": "Resource", + "startLine": 31, + "startColumn": 7, + "endLine": 31, + "endColumn": 18, + "ruleDescription": "Basic CloudFormation Resource Check", + "phase": "PARSE" }, { - "ruleId": "W3005", + "ruleId": "W7001", "severity": "WARN", - "message": "'rConfigRulesLambdaRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "Mapping 'EnvMap' is not referenced by any Fn::FindInMap", "source": "CFN_LINT", "entity": { - "logicalId": "rAMIComplianceFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "logicalId": "EnvMap", + "entityType": "Mapping" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Mappings/EnvMap", "category": "Best Practice", - "startLine": 141, - "startColumn": 4, - "endLine": 141, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 11, + "startColumn": 5, + "endLine": 11, + "endColumn": 12, + "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, { - "ruleId": "W3005", + "ruleId": "W8001", "severity": "WARN", - "message": "'rConfigRulesLambdaRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "message": "Condition 'IsProduction' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "rCloudTrailValidationFunction", - "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "logicalId": "IsProduction", + "entityType": "Condition" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Conditions/IsProduction", "category": "Best Practice", - "startLine": 239, - "startColumn": 4, - "endLine": 239, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 21, + "startColumn": 5, + "endLine": 21, + "endColumn": 18, + "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, { - "ruleId": "W8003", + "ruleId": "W8001", "severity": "WARN", - "message": "Fn::Equals in condition 'cApprovedAMIsRule' will always return True", + "message": "Condition 'IsDevEnv' is not used by any resource or Fn::If", "source": "CFN_LINT", "entity": { - "logicalId": "cApprovedAMIsRule", + "logicalId": "IsDevEnv", "entityType": "Condition" }, - "propertyPath": "Conditions/cApprovedAMIsRule", + "propertyPath": "Conditions/IsDevEnv", "category": "Best Practice", - "startLine": 38, - "startColumn": 3, - "endLine": 38, - "endColumn": 21, - "ruleDescription": "Fn::Equals will always return true or false", - "phase": "PARSE" + "startLine": 24, + "startColumn": 5, + "endLine": 24, + "endColumn": 14, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'30' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rAMIComplianceFunction", + "logicalId": "Bucket1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Timeout", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 195, - "startColumn": 5, - "endLine": 195, - "endColumn": 13, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 33, + "startColumn": 9, + "endLine": 33, + "endColumn": 20, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { - "ruleId": "W9003", - "severity": "WARN", - "message": "'30' is not of type 'integer' - automatically coerced (string to integer)", - "source": "CFN_LINT", + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", "entity": { - "logicalId": "rCloudTrailValidationFunction", + "logicalId": "Bucket2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Timeout", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 292, - "startColumn": 5, - "endLine": 292, - "endColumn": 13, - "ruleDescription": "Property type coercion warning", - "phase": "SCHEMA" + "startLine": 41, + "startColumn": 9, + "endLine": 41, + "endColumn": 20, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigRuleForSSH", + "logicalId": "Bucket3", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 48, - "startColumn": 5, - "endLine": 48, + "startLine": 49, + "startColumn": 9, + "endLine": 49, "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24034,20 +19022,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigRuleForRequiredTags", + "logicalId": "Bucket4", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 63, - "startColumn": 5, - "endLine": 63, + "startLine": 57, + "startColumn": 9, + "endLine": 57, "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24057,20 +19044,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigRuleForUnrestrictedPorts", + "logicalId": "Bucket5", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 83, - "startColumn": 5, - "endLine": 83, + "startLine": 65, + "startColumn": 9, + "endLine": 65, "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24078,112 +19064,234 @@ } }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Resource 'Bucket1' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rConfigRulesLambdaRole", + "logicalId": "Bucket1", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 110, - "startColumn": 5, - "endLine": 110, - "endColumn": 10, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 32, + "startColumn": 7, + "endLine": 32, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Resource 'Bucket2' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rConfigRulesLambdaProfile", + "logicalId": "Bucket2", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 133, - "startColumn": 5, - "endLine": 133, - "endColumn": 10, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "startLine": 40, + "startColumn": 7, + "endLine": 40, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Resource 'Bucket3' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rConfigRuleForAMICompliance", + "logicalId": "Bucket3", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 205, + "startLine": 48, + "startColumn": 7, + "endLine": 48, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Bucket4' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket4", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 56, + "startColumn": 7, + "endLine": 56, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Bucket5' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket5", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 64, + "startColumn": 7, + "endLine": 64, + "endColumn": 18, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "lsp/parameter_usage.yaml": { + "filePath": "lsp/parameter_usage.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 7, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 3, + "informational": 14, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3001", + "severity": "ERROR", + "message": "Resource 'Bucket1' has invalid property 'Conditions'. Valid resource attributes: Type, Properties, DependsOn, Condition, Metadata, DeletionPolicy, UpdateReplacePolicy, UpdatePolicy, CreationPolicy, Fn::Transform, Version", + "source": "CFN_LINT", + "entity": { + "logicalId": "Bucket1", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "category": "Resource", + "startLine": 27, "startColumn": 5, - "endLine": 205, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endLine": 27, + "endColumn": 15, + "ruleDescription": "Basic CloudFormation Resource Check", + "phase": "PARSE" + }, + { + "ruleId": "W7001", + "severity": "WARN", + "message": "Mapping 'EnvMap' is not referenced by any Fn::FindInMap", + "source": "CFN_LINT", + "entity": { + "logicalId": "EnvMap", + "entityType": "Mapping" + }, + "propertyPath": "Mappings/EnvMap", + "category": "Best Practice", + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 9, + "ruleDescription": "Check if Mappings are Used", + "phase": "LINT" + }, + { + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'IsProduction' is not used by any resource or Fn::If", + "source": "CFN_LINT", + "entity": { + "logicalId": "IsProduction", + "entityType": "Condition" + }, + "propertyPath": "Conditions/IsProduction", + "category": "Best Practice", + "startLine": 20, + "startColumn": 3, + "endLine": 20, + "endColumn": 15, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" + }, + { + "ruleId": "W8001", + "severity": "WARN", + "message": "Condition 'IsDevEnv' is not used by any resource or Fn::If", + "source": "CFN_LINT", + "entity": { + "logicalId": "IsDevEnv", + "entityType": "Condition" + }, + "propertyPath": "Conditions/IsDevEnv", + "category": "Best Practice", + "startLine": 21, + "startColumn": 3, + "endLine": 21, + "endColumn": 11, + "ruleDescription": "Check if Conditions are Used", + "phase": "LINT" }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigPermissionToCallLambdaAMICompliance", + "logicalId": "Bucket1", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 230, - "startColumn": 5, - "endLine": 230, - "endColumn": 18, + "startLine": 29, + "startColumn": 7, + "endLine": 29, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt rAMIComplianceFunction.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigPermissionToCallLambdaAMICompliance", + "logicalId": "Bucket2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 233, - "startColumn": 5, - "endLine": 233, - "endColumn": 12, + "startLine": 35, + "startColumn": 7, + "endLine": 35, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24193,19 +19301,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigPermissionToCallLambdaAMICompliance", + "logicalId": "Bucket3", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 234, - "startColumn": 5, - "endLine": 234, - "endColumn": 15, + "startLine": 42, + "startColumn": 7, + "endLine": 42, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24215,20 +19323,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigRuleForCloudTrail", + "logicalId": "Bucket4", "entityType": "Resource", - "resourceType": "AWS::Config::ConfigRule" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.ConfigRuleName", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 301, - "startColumn": 5, - "endLine": 301, - "endColumn": 20, - "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "startLine": 48, + "startColumn": 7, + "endLine": 48, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24238,42 +19345,41 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigPermissionToCallLambdaCloudTrail", + "logicalId": "Bucket5", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.FunctionName", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 322, - "startColumn": 5, - "endLine": 322, - "endColumn": 18, + "startLine": 53, + "startColumn": 7, + "endLine": 53, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { - "lifecycle": "create-only", - "resolutionSource": "GetAtt rCloudTrailValidationFunction.Arn" + "lifecycle": "create-only" } }, { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigPermissionToCallLambdaCloudTrail", + "logicalId": "Bucket6", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Action", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 325, - "startColumn": 5, - "endLine": 325, - "endColumn": 12, + "startLine": 58, + "startColumn": 7, + "endLine": 58, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24283,19 +19389,19 @@ { "ruleId": "I9001", "severity": "INFO", - "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "message": "Property 'BucketName' is create-only; updating it will cause resource replacement", "source": "ENGINE", "entity": { - "logicalId": "rConfigPermissionToCallLambdaCloudTrail", + "logicalId": "Bucket7", "entityType": "Resource", - "resourceType": "AWS::Lambda::Permission" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Principal", + "propertyPath": "Properties.BucketName", "category": "Best Practice", - "startLine": 326, - "startColumn": 5, - "endLine": 326, - "endColumn": 15, + "startLine": 64, + "startColumn": 7, + "endLine": 64, + "endColumn": 17, "ruleDescription": "Create-only property updated triggers resource replacement", "phase": "SCHEMA", "context": { @@ -24305,19 +19411,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'rConfigRulesLambdaRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'Bucket1' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rConfigRulesLambdaRole", + "logicalId": "Bucket1", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 99, - "startColumn": 4, - "endLine": 99, + "startLine": 28, + "startColumn": 5, + "endLine": 28, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24325,244 +19431,79 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'rCloudTrailValidationFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "message": "Resource 'Bucket2' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rCloudTrailValidationFunction", + "logicalId": "Bucket2", "entityType": "Resource", - "resourceType": "AWS::Lambda::Function" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 240, - "startColumn": 4, - "endLine": 240, + "startLine": 34, + "startColumn": 5, + "endLine": 34, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "quickstart/iam.json": { - "filePath": "quickstart/iam.json", - "status": "OK", - "metadata": { - "resourcesScanned": 18, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 5, - "informational": 8, - "debug": 0 }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { - "ruleId": "W2512", - "severity": "WARN", - "message": "IAM policy uses NotAction which grants all actions except those listed - consider using Action instead", + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Bucket3' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rSysAdminPolicy", - "entityType": "Resource", - "resourceType": "AWS::IAM::ManagedPolicy" - }, - "category": "Security", - "startLine": 61, - "startColumn": 3, - "endLine": 61, - "endColumn": 19, - "ruleDescription": "IAM policy with NotAction", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rSysAdminRole' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", - "source": "CFN_LINT", - "entity": { - "logicalId": "rSysAdminProfile", - "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 45, - "startColumn": 4, - "endLine": 45, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rIAMAdminRole' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", - "source": "CFN_LINT", - "entity": { - "logicalId": "rIAMAdminProfile", - "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 139, - "startColumn": 4, - "endLine": 139, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rInstanceOpsRole' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", - "source": "CFN_LINT", - "entity": { - "logicalId": "rInstanceOpsProfile", - "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" - }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", - "category": "Best Practice", - "startLine": 211, - "startColumn": 4, - "endLine": 211, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", - "phase": "LINT" - }, - { - "ruleId": "W3005", - "severity": "WARN", - "message": "'rReadOnlyAdminRole' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", - "source": "CFN_LINT", - "entity": { - "logicalId": "rReadOnlyAdminProfile", + "logicalId": "Bucket3", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "DependsOn", - "suggestedFix": "Remove the DependsOn entry", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 324, - "startColumn": 4, - "endLine": 324, - "endColumn": 14, - "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "startLine": 41, + "startColumn": 5, + "endLine": 41, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { - "ruleId": "I9001", + "ruleId": "I9040", "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "message": "Resource 'Bucket4' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rSysAdminProfile", + "logicalId": "Bucket4", "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" + "resourceType": "AWS::S3::Bucket" }, - "propertyPath": "Properties.Path", + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", "startLine": 47, "startColumn": 5, "endLine": 47, - "endColumn": 10, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rIAMAdminProfile", - "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" - }, - "propertyPath": "Properties.Path", - "category": "Best Practice", - "startLine": 141, - "startColumn": 5, - "endLine": 141, - "endColumn": 10, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rInstanceOpsProfile", - "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" - }, - "propertyPath": "Properties.Path", - "category": "Best Practice", - "startLine": 213, - "startColumn": 5, - "endLine": 213, - "endColumn": 10, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } - }, - { - "ruleId": "I9001", - "severity": "INFO", - "message": "Property 'Path' is create-only; updating it will cause resource replacement", - "source": "ENGINE", - "entity": { - "logicalId": "rReadOnlyAdminProfile", - "entityType": "Resource", - "resourceType": "AWS::IAM::InstanceProfile" - }, - "propertyPath": "Properties.Path", - "category": "Best Practice", - "startLine": 326, - "startColumn": 5, - "endLine": 326, - "endColumn": 10, - "ruleDescription": "Create-only property updated triggers resource replacement", - "phase": "SCHEMA", - "context": { - "lifecycle": "create-only" - } + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" }, { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'rSysAdminRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'Bucket5' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rSysAdminRole", + "logicalId": "Bucket5", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 24, - "startColumn": 4, - "endLine": 24, + "startLine": 52, + "startColumn": 5, + "endLine": 52, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24570,19 +19511,19 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'rIAMAdminRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'Bucket6' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rIAMAdminRole", + "logicalId": "Bucket6", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 119, - "startColumn": 4, - "endLine": 119, + "startLine": 57, + "startColumn": 5, + "endLine": 57, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" @@ -24590,40 +19531,59 @@ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'rInstanceOpsRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'Bucket7' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rInstanceOpsRole", + "logicalId": "Bucket7", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 191, - "startColumn": 4, - "endLine": 191, + "startLine": 63, + "startColumn": 5, + "endLine": 63, "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" + } + ] + }, + "lsp/simple.json": { + "filePath": "lsp/simple.json", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", - "message": "Resource 'rReadOnlyAdminRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "message": "Resource 'MyS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", "source": "ENGINE", "entity": { - "logicalId": "rReadOnlyAdminRole", + "logicalId": "MyS3Bucket", "entityType": "Resource", - "resourceType": "AWS::IAM::Role" + "resourceType": "AWS::S3::Bucket" }, "propertyPath": "Properties.Tags", "suggestedFix": "Add Tags to improve resource organization and cost tracking", "category": "Best Practice", - "startLine": 304, - "startColumn": 4, - "endLine": 304, - "endColumn": 15, + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 16, "ruleDescription": "Resource should have Tags", "phase": "LINT" } diff --git a/src/resources/expected/validation_reports8.json b/src/resources/expected/validation_reports8.json index 25b0a08a..b01f97c9 100644 --- a/src/resources/expected/validation_reports8.json +++ b/src/resources/expected/validation_reports8.json @@ -1,4 +1,7140 @@ { + "lsp/simple.yaml": { + "filePath": "lsp/simple.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyS3Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "MyS3Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "lsp/test-template.yaml": { + "filePath": "lsp/test-template.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 0, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3038", + "severity": "ERROR", + "message": "Resource type 'AWS::Serverless::Function' requires the AWS::Serverless-2016-10-31 transform", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyFunction", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "category": "Structure", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Check if Serverless Resources have Serverless Transform", + "phase": "LINT" + }, + { + "ruleId": "E3038", + "severity": "ERROR", + "message": "Resource type 'AWS::Serverless::Api' requires the AWS::Serverless-2016-10-31 transform", + "source": "CFN_LINT", + "entity": { + "logicalId": "MyApi", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Api" + }, + "category": "Structure", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 8, + "ruleDescription": "Check if Serverless Resources have Serverless Transform", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyFunction' of type 'AWS::Serverless::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "MyFunction", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MyApi' of type 'AWS::Serverless::Api' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "MyApi", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Api" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "malformed.yaml": { + "filePath": "malformed.yaml", + "status": "ERROR", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F1101", + "severity": "FATAL", + "message": "YAML parse error: mapping values are not allowed in this context at byte 10 line 1 column 11", + "source": "SCHEMA", + "category": "Structure", + "startLine": 1, + "startColumn": 11, + "endLine": 1, + "endColumn": 11, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" + } + ] + }, + "public/lambda-poller.json": { + "filePath": "public/lambda-poller.json", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 9, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs6.10' was deprecated on '2019-08-12'. Creation was disabled on '2019-07-12', and updates were disabled on '2019-08-12'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "PollerFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 92, + "startColumn": 17, + "endLine": 92, + "endColumn": 25, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs6.10", + "lifecycle": "end-of-life" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PollerFunctionIamRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 37, + "startColumn": 17, + "endLine": 37, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PollerEventRuleIamRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 133, + "startColumn": 17, + "endLine": 133, + "endColumn": 22, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PollerFunctionEventInvokePermission", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 192, + "startColumn": 17, + "endLine": 192, + "endColumn": 24, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PollerFunctionEventInvokePermission", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 193, + "startColumn": 17, + "endLine": 193, + "endColumn": 30, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'PollerFunction'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PollerFunctionEventInvokePermission", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 196, + "startColumn": 17, + "endLine": 196, + "endColumn": 27, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PollerFunctionEventInvokePermission", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.SourceArn", + "category": "Best Practice", + "startLine": 197, + "startColumn": 17, + "endLine": 197, + "endColumn": 27, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt PollerEventRule.Arn" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'PollerFunctionIamRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "PollerFunctionIamRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 20, + "startColumn": 13, + "endLine": 20, + "endColumn": 24, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'PollerEventRuleIamRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "PollerEventRuleIamRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 116, + "startColumn": 13, + "endLine": 116, + "endColumn": 24, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'PollerEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "PollerEventRule", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 162, + "startColumn": 13, + "endLine": 162, + "endColumn": 24, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "public/lambda-poller.yaml": { + "filePath": "public/lambda-poller.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 5, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 9, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs6.10' was deprecated on '2019-08-12'. Creation was disabled on '2019-07-12', and updates were disabled on '2019-08-12'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "PollerFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 151, + "startColumn": 7, + "endLine": 151, + "endColumn": 14, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs6.10", + "lifecycle": "end-of-life" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PollerFunctionIamRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 27, + "startColumn": 7, + "endLine": 27, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PollerEventRuleIamRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 172, + "startColumn": 7, + "endLine": 172, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PollerFunctionEventInvokePermission", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 197, + "startColumn": 7, + "endLine": 197, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PollerFunctionEventInvokePermission", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 198, + "startColumn": 7, + "endLine": 198, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Ref to 'PollerFunction'" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PollerFunctionEventInvokePermission", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 199, + "startColumn": 7, + "endLine": 199, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'SourceArn' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "PollerFunctionEventInvokePermission", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.SourceArn", + "category": "Best Practice", + "startLine": 200, + "startColumn": 7, + "endLine": 200, + "endColumn": 16, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt PollerEventRule.Arn" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'PollerFunctionIamRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "PollerFunctionIamRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 17, + "startColumn": 5, + "endLine": 17, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'PollerEventRuleIamRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "PollerEventRuleIamRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 162, + "startColumn": 5, + "endLine": 162, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'PollerEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "PollerEventRule", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 185, + "startColumn": 5, + "endLine": 185, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "public/rds-cluster.yaml": { + "filePath": "public/rds-cluster.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 1, + "informational": 7, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E9006", + "severity": "ERROR", + "message": "'aurora' is not one of ['aurora-mysql', 'aurora-postgresql', 'mysql', 'postgres']", + "source": "CFN_LINT", + "entity": { + "logicalId": "DBCluster", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBCluster" + }, + "propertyPath": "Properties.Engine", + "category": "Schema", + "startLine": 24, + "startColumn": 7, + "endLine": 24, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Property value not valid for conditional extension enum", + "phase": "SCHEMA" + }, + { + "ruleId": "W1011", + "severity": "WARN", + "message": "Use dynamic references (e.g., SSM SecureString) instead of parameter 'DatabaseMasterPassword' for secrets", + "source": "CFN_LINT", + "entity": { + "logicalId": "DBCluster", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBCluster" + }, + "propertyPath": "Properties.MasterUserPassword", + "category": "Security", + "startLine": 22, + "startColumn": 7, + "endLine": 22, + "endColumn": 25, + "ruleDescription": "Instead of REFing a parameter for a secret use a dynamic reference", + "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": "DBCluster", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBCluster" + }, + "category": "Best Practice", + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 12, + "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": "DBCluster", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBCluster" + }, + "category": "Best Practice", + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 12, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'BackupRetentionPeriod' 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": "DBCluster", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBCluster" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 20, + "startColumn": 5, + "endLine": 20, + "endColumn": 15, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'MasterUsername' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "DBCluster", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBCluster" + }, + "propertyPath": "Properties.MasterUsername", + "category": "Best Practice", + "startLine": 21, + "startColumn": 7, + "endLine": 21, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "parameter 'DatabaseMasterUsername' (type String)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'DatabaseName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "DBCluster", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBCluster" + }, + "propertyPath": "Properties.DatabaseName", + "category": "Best Practice", + "startLine": 23, + "startColumn": 7, + "endLine": 23, + "endColumn": 19, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'DatabaseName' (type String)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Engine' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "DBCluster", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBCluster" + }, + "propertyPath": "Properties.Engine", + "category": "Best Practice", + "startLine": 24, + "startColumn": 7, + "endLine": 24, + "endColumn": 13, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'EngineMode' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "DBCluster", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBCluster" + }, + "propertyPath": "Properties.EngineMode", + "category": "Best Practice", + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 17, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + } + ] + }, + "public/watchmaker.json": { + "filePath": "public/watchmaker.json", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 41, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.cw-agent-install.commands.01-get-cloudwatch-agent.command.Fn::Join", + "category": "Intrinsic Function", + "startLine": 647, + "startColumn": 37, + "endLine": 647, + "endColumn": 46, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.cw-agent-install.commands.02-extract-cloudwatch-agent.command.Fn::Join", + "category": "Intrinsic Function", + "startLine": 662, + "startColumn": 37, + "endLine": 662, + "endColumn": 46, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.cw-agent-install.commands.10-install-cloudwatch-agent.command.Fn::Join", + "category": "Intrinsic Function", + "startLine": 673, + "startColumn": 37, + "endLine": 673, + "endColumn": 46, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.finalize.commands.10-signal-success.command.Fn::Join.1.4.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 816, + "startColumn": 57, + "endLine": 816, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.finalize.commands.10-signal-success.command.Fn::Join.1.5.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 833, + "startColumn": 57, + "endLine": 833, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.make-app.commands.05-get-appscript.command.Fn::Join", + "category": "Intrinsic Function", + "startLine": 869, + "startColumn": 37, + "endLine": 869, + "endColumn": 46, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.make-app.commands.10-make-app.command.Fn::Join", + "category": "Intrinsic Function", + "startLine": 887, + "startColumn": 37, + "endLine": 887, + "endColumn": 46, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.setup.files./etc/cfn/cfn-hup.conf.content.Fn::Join.1.7.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 932, + "startColumn": 57, + "endLine": 932, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.setup.files./etc/cfn/cfn-hup.conf.content.Fn::Join.1.8.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 950, + "startColumn": 57, + "endLine": 950, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.setup.files./etc/cfn/hooks.d/cfn-auto-reloader.conf.content.Fn::Join.1.7.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 993, + "startColumn": 57, + "endLine": 993, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.setup.files./etc/cfn/hooks.d/cfn-auto-reloader.conf.content.Fn::Join.1.8.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1010, + "startColumn": 57, + "endLine": 1010, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.setup.files./etc/cfn/scripts/watchmaker-install.sh.content.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1038, + "startColumn": 37, + "endLine": 1038, + "endColumn": 46, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-launch.commands.10-watchmaker-launch.command.Fn::Join.1.3.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1101, + "startColumn": 57, + "endLine": 1101, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-launch.commands.10-watchmaker-launch.command.Fn::Join.1.4.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1119, + "startColumn": 57, + "endLine": 1119, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-launch.commands.10-watchmaker-launch.command.Fn::Join.1.5.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1137, + "startColumn": 57, + "endLine": 1137, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-launch.commands.10-watchmaker-launch.command.Fn::Join.1.6.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1155, + "startColumn": 57, + "endLine": 1155, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-launch.commands.10-watchmaker-launch.command.Fn::Join.1.7.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1173, + "startColumn": 57, + "endLine": 1173, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-launch.commands.10-watchmaker-launch.command.Fn::Join.1.8.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1191, + "startColumn": 57, + "endLine": 1191, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-update.commands.10-watchmaker-update.command.Fn::Join.1.4.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1226, + "startColumn": 57, + "endLine": 1226, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-update.commands.10-watchmaker-update.command.Fn::Join.1.5.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1244, + "startColumn": 57, + "endLine": 1244, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-update.commands.10-watchmaker-update.command.Fn::Join.1.6.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1262, + "startColumn": 57, + "endLine": 1262, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-update.commands.10-watchmaker-update.command.Fn::Join.1.7.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1280, + "startColumn": 57, + "endLine": 1280, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-update.commands.10-watchmaker-update.command.Fn::Join.1.8.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1298, + "startColumn": 57, + "endLine": 1298, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata.AWS::CloudFormation::Init.watchmaker-update.commands.10-watchmaker-update.command.Fn::Join.1.9.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1316, + "startColumn": 57, + "endLine": 1316, + "endColumn": 66, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.Tags.0.Value.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1440, + "startColumn": 29, + "endLine": 1440, + "endColumn": 38, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.UserData.Fn::Base64.Fn::Join.1.88.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1596, + "startColumn": 45, + "endLine": 1596, + "endColumn": 54, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.UserData.Fn::Base64.Fn::Join.1.89.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1613, + "startColumn": 45, + "endLine": 1613, + "endColumn": 54, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.UserData.Fn::Base64.Fn::Join.1.98.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1642, + "startColumn": 45, + "endLine": 1642, + "endColumn": 54, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.UserData.Fn::Base64.Fn::Join.1.99.Fn::If.1.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1659, + "startColumn": 45, + "endLine": 1659, + "endColumn": 54, + "ruleDescription": "Use Sub instead of Join", + "phase": "LINT" + }, + { + "ruleId": "I1022", + "severity": "INFO", + "message": "Prefer using Fn::Sub over Fn::Join with an empty delimiter", + "source": "CFN_LINT", + "entity": { + "logicalId": "WatchmakerInstanceLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "propertyPath": "Properties.LogGroupName.Fn::Join", + "category": "Intrinsic Function", + "startLine": 1691, + "startColumn": 21, + "endLine": 1691, + "endColumn": 30, + "ruleDescription": "Use Sub instead of Join", + "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": "WatchmakerInstanceLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "category": "Best Practice", + "startLine": 1687, + "startColumn": 9, + "endLine": 1687, + "endColumn": 36, + "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": "WatchmakerInstanceLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "category": "Best Practice", + "startLine": 1687, + "startColumn": 9, + "endLine": 1687, + "endColumn": 36, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'BlockDeviceMappings' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.BlockDeviceMappings", + "category": "Best Practice", + "startLine": 1342, + "startColumn": 17, + "endLine": 1342, + "endColumn": 37, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ImageId' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.ImageId", + "category": "Best Practice", + "startLine": 1398, + "startColumn": 17, + "endLine": 1398, + "endColumn": 25, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'AmiId' (type AWS::EC2::Image::Id)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'InstanceType' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.InstanceType", + "category": "Best Practice", + "startLine": 1401, + "startColumn": 17, + "endLine": 1401, + "endColumn": 30, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "parameter with AllowedValues" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'KeyName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.KeyName", + "category": "Best Practice", + "startLine": 1404, + "startColumn": 17, + "endLine": 1404, + "endColumn": 25, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "parameter 'KeyPairName' (type AWS::EC2::KeyPair::KeyName)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'NetworkInterfaces' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.NetworkInterfaces", + "category": "Best Practice", + "startLine": 1407, + "startColumn": 17, + "endLine": 1407, + "endColumn": 35, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'UserData' is conditionally create-only; updating it may cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Properties.UserData", + "category": "Best Practice", + "startLine": 1451, + "startColumn": 17, + "endLine": 1451, + "endColumn": 26, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ec2.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "conditional-create-only", + "resolutionSource": "dynamic (Base64 with unresolvable argument)" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "WatchmakerInstanceLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "propertyPath": "Properties.LogGroupName", + "category": "Best Practice", + "startLine": 1690, + "startColumn": 17, + "endLine": 1690, + "endColumn": 30, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9003", + "severity": "INFO", + "message": "No region supplied; region-scoped instance/node types were validated against all regions. A value reported valid here may still be unavailable in your target region - pass a region to validate against it specifically.", + "source": "ENGINE", + "category": "Best Practice", + "ruleDescription": "Region-scoped values validated against all regions because no region was supplied", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'WatchmakerInstanceLogGroup' of type 'AWS::Logs::LogGroup' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "WatchmakerInstanceLogGroup", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1689, + "startColumn": 13, + "endLine": 1689, + "endColumn": 24, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "quickstart/cis_benchmark.yaml": { + "filePath": "quickstart/cis_benchmark.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 79, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 75, + "informational": 142, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctiontForEvaluateCisBenchmarkingPreconditions", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 176, + "startColumn": 9, + "endLine": 176, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionForEvaluateRootAccountRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 309, + "startColumn": 9, + "endLine": 309, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionForVpcFlowLogRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 481, + "startColumn": 9, + "endLine": 481, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionForVpcDefaultSecurityGroupsRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 551, + "startColumn": 9, + "endLine": 551, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionForRoleForMfaOnUsersRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 666, + "startColumn": 9, + "endLine": 666, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionForEvaluatePolicyPermissionsRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 760, + "startColumn": 9, + "endLine": 760, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionForEvaluateUserPolicyAssociationRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 850, + "startColumn": 9, + "endLine": 850, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionForEvaluateCloudTrailRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 966, + "startColumn": 9, + "endLine": 966, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionForEvaluateCloudTrailBucketRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1082, + "startColumn": 9, + "endLine": 1082, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionForEvaluateCloudTrailLogIntegrityRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1178, + "startColumn": 9, + "endLine": 1178, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionForInstanceRoleUseRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1260, + "startColumn": 9, + "endLine": 1260, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionForEvaluateKeyRotationRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1357, + "startColumn": 9, + "endLine": 1357, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionForEvaluateConfigInAllRegionsRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1465, + "startColumn": 9, + "endLine": 1465, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionForVpcPeeringRouteTablesRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1550, + "startColumn": 9, + "endLine": 1550, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "GetCloudTrailCloudWatchLog", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1633, + "startColumn": 9, + "endLine": 1633, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionToFormatCloudWatchEvent", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 1889, + "startColumn": 9, + "endLine": 1889, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W2531", + "severity": "WARN", + "message": "Runtime 'python3.8' was deprecated on '2024-10-14'. Creation will be disabled on '2027-02-01', and updates will be disabled on '2027-03-03'. Please consider updating to 'python3.14'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionToDisableUnusedCredentials", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 2334, + "startColumn": 9, + "endLine": 2334, + "endColumn": 16, + "ruleDescription": "Check if EOL Lambda Function Runtimes are used", + "phase": "SCHEMA", + "context": { + "actualValue": "python3.8", + "lifecycle": "deprecated" + } + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctiontForEvaluateCisBenchmarkingPreconditions", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 121, + "startColumn": 7, + "endLine": 121, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctiontForEvaluateCisBenchmarkingPreconditions' dependency already enforced by a 'GetAtt' at 'Properties.ServiceToken'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ResourceForEvaluateCisBenchmarkingPreconditions", + "entityType": "Resource", + "resourceType": "Custom::ResourceForEvaluateCisBenchmarkingPreconditions" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 181, + "startColumn": 7, + "endLine": 181, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionForEvaluateRootAccountRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 227, + "startColumn": 7, + "endLine": 227, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForEvaluateRootAccountRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", + "source": "CFN_LINT", + "entity": { + "logicalId": "EvaluateRootAccountFunctionPermission", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 315, + "startColumn": 7, + "endLine": 315, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionForVpcFlowLogRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 421, + "startColumn": 7, + "endLine": 421, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForVpcFlowLogRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConfigPermissionToCallVpcFlowLogLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 486, + "startColumn": 7, + "endLine": 486, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionForVpcDefaultSecurityGroupsRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 497, + "startColumn": 7, + "endLine": 497, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForVpcDefaultSecurityGroupsRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConfigPermissionToCallVpcDefaultSecurityGroupsLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 556, + "startColumn": 7, + "endLine": 556, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForVpcDefaultSecurityGroupsRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConfigRuleForVpcDefaultSecurityGroupss", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 565, + "startColumn": 7, + "endLine": 565, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForVpcFlowLogRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConfigRuleForVpcFlowLogs", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 584, + "startColumn": 7, + "endLine": 584, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionForRoleForMfaOnUsersRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 606, + "startColumn": 7, + "endLine": 606, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForRoleForMfaOnUsersRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConfigPermissionToCallMfaForUsersLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 671, + "startColumn": 7, + "endLine": 671, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionForEvaluatePolicyPermissionsRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 699, + "startColumn": 7, + "endLine": 699, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForEvaluatePolicyPermissionsRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConfigPermissionToCallEvaluatePolicyPermissionsLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 765, + "startColumn": 7, + "endLine": 765, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForEvaluatePolicyPermissionsRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConfigRuleForEvaluatePolicyPermissions", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 773, + "startColumn": 7, + "endLine": 773, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionForEvaluateUserPolicyAssociationRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 795, + "startColumn": 7, + "endLine": 795, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForEvaluateUserPolicyAssociationRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConfigPermissionToCallEvaluateUserPolicyAssociationLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 855, + "startColumn": 7, + "endLine": 855, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForEvaluateUserPolicyAssociationRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConfigRuleForEvaluateUserPolicyAssociations", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 863, + "startColumn": 7, + "endLine": 863, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionForEvaluateCloudTrailRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 886, + "startColumn": 7, + "endLine": 886, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForEvaluateCloudTrailRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 971, + "startColumn": 7, + "endLine": 971, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForEvaluateCloudTrailRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConfigRuleForEvaluateCloudTrail", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 979, + "startColumn": 7, + "endLine": 979, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionForEvaluateCloudTrailBucketRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 999, + "startColumn": 7, + "endLine": 999, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForEvaluateCloudTrailBucketRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConfigPermissionToCallEvaluateCloudTrailBucketLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1087, + "startColumn": 7, + "endLine": 1087, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForEvaluateCloudTrailBucketRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConfigRuleForEvaluateCloudTrailBucket", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1095, + "startColumn": 7, + "endLine": 1095, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionForEvaluateCloudTrailLogIntegrityRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1116, + "startColumn": 7, + "endLine": 1116, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForEvaluateCloudTrailLogIntegrityRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLogIntegrityLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1184, + "startColumn": 7, + "endLine": 1184, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForEvaluateCloudTrailLogIntegrityRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConfigRuleForEvaluateCloudTrailLogIntegrity", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1193, + "startColumn": 7, + "endLine": 1193, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionForInstanceRoleUseRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1213, + "startColumn": 7, + "endLine": 1213, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForInstanceRoleUseRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConfigPermissionToCallInstanceRoleUseLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1266, + "startColumn": 7, + "endLine": 1266, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForInstanceRoleUseRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConfigRuleForInstanceRoleUses", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1275, + "startColumn": 7, + "endLine": 1275, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionForEvaluateKeyRotationRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1298, + "startColumn": 7, + "endLine": 1298, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForEvaluateKeyRotationRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConfigPermissionToCallEvaluateKeyRotationLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1363, + "startColumn": 7, + "endLine": 1363, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForEvaluateKeyRotationRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConfigRuleForEvaluateKeyRotations", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1372, + "startColumn": 7, + "endLine": 1372, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionForEvaluateConfigInAllRegionsRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1394, + "startColumn": 7, + "endLine": 1394, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForEvaluateConfigInAllRegionsRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", + "source": "CFN_LINT", + "entity": { + "logicalId": "EvaluateConfigInAllRegionsFunctionPermission", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1470, + "startColumn": 7, + "endLine": 1470, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionForVpcPeeringRouteTablesRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1499, + "startColumn": 7, + "endLine": 1499, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForVpcPeeringRouteTablesRule' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConfigPermissionToCallVpcPeeringRouteTablesLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1555, + "startColumn": 7, + "endLine": 1555, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionForVpcPeeringRouteTablesRule' dependency already enforced by a 'GetAtt' at 'Properties.Source.SourceIdentifier'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConfigRuleForVpcPeeringRouteTabless", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1564, + "startColumn": 7, + "endLine": 1564, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'MasterConfigRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "GetCloudTrailCloudWatchLog", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1601, + "startColumn": 7, + "endLine": 1601, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'GetCloudTrailCloudWatchLog' dependency already enforced by a 'GetAtt' at 'Properties.ServiceToken'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ResourceForGetCloudTrailCloudWatchLog", + "entityType": "Resource", + "resourceType": "Custom::ResourceForGetCloudTrailCloudWatchLog" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1638, + "startColumn": 7, + "endLine": 1638, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'ResourceForGetCloudTrailCloudWatchLog' dependency already enforced by a 'GetAtt' at 'Properties.LogGroupName'", + "source": "CFN_LINT", + "entity": { + "logicalId": "UnauthorizedAttemptsCloudWatchFilter", + "entityType": "Resource", + "resourceType": "AWS::Logs::MetricFilter" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1647, + "startColumn": 7, + "endLine": 1647, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'ResourceForGetCloudTrailCloudWatchLog' dependency already enforced by a 'GetAtt' at 'Properties.LogGroupName'", + "source": "CFN_LINT", + "entity": { + "logicalId": "IAMRootActivityCloudWatchMetric", + "entityType": "Resource", + "resourceType": "AWS::Logs::MetricFilter" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1681, + "startColumn": 7, + "endLine": 1681, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'ResourceForGetCloudTrailCloudWatchLog' dependency already enforced by a 'GetAtt' at 'Properties.LogGroupName'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConsoleSigninWithoutMfaCloudWatchMetric", + "entityType": "Resource", + "resourceType": "AWS::Logs::MetricFilter" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1718, + "startColumn": 7, + "endLine": 1718, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'ResourceForGetCloudTrailCloudWatchLog' dependency already enforced by a 'GetAtt' at 'Properties.LogGroupName'", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConsoleLoginFailureCloudWatchMetric", + "entityType": "Resource", + "resourceType": "AWS::Logs::MetricFilter" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1757, + "startColumn": 7, + "endLine": 1757, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'ResourceForGetCloudTrailCloudWatchLog' dependency already enforced by a 'GetAtt' at 'Properties.LogGroupName'", + "source": "CFN_LINT", + "entity": { + "logicalId": "KMSCustomerKeyDeletionCloudWatchMetric", + "entityType": "Resource", + "resourceType": "AWS::Logs::MetricFilter" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1794, + "startColumn": 7, + "endLine": 1794, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'SnsTopicForCloudWatchEvents' dependency already enforced by a 'Ref' at 'Properties.Policies.0.PolicyDocument.Statement.0.Resource'", + "source": "CFN_LINT", + "entity": { + "logicalId": "RoleForCloudWatchEvents", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1830, + "startColumn": 7, + "endLine": 1830, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'RoleForCloudWatchEvents' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionToFormatCloudWatchEvent", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1856, + "startColumn": 7, + "endLine": 1856, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'SnsTopicForCloudWatchEvents' dependency already enforced by a 'Ref' at 'Properties.Code.ZipFile'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionToFormatCloudWatchEvent", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1856, + "startColumn": 7, + "endLine": 1856, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionToFormatCloudWatchEvent' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", + "source": "CFN_LINT", + "entity": { + "logicalId": "LambdaPermissionForCloudTrailCloudWatchEventRules", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 1894, + "startColumn": 7, + "endLine": 1894, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'ResourceForGetCloudTrailCloudWatchLog' dependency already enforced by a 'GetAtt' at 'Properties.LogGroupName'", + "source": "CFN_LINT", + "entity": { + "logicalId": "BillingChangesCloudWatchFilter", + "entityType": "Resource", + "resourceType": "AWS::Logs::MetricFilter" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 2183, + "startColumn": 7, + "endLine": 2183, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'RoleForDisableUnusedCredentialsFunction' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "FunctionToDisableUnusedCredentials", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 2253, + "startColumn": 7, + "endLine": 2253, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'FunctionToDisableUnusedCredentials' dependency already enforced by a 'GetAtt' at 'Properties.FunctionName'", + "source": "CFN_LINT", + "entity": { + "logicalId": "LambdaPermissionForDisableUnusedCredentials", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 2339, + "startColumn": 7, + "endLine": 2339, + "endColumn": 16, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", + "entity": { + "logicalId": "UnauthorizedAttemptsCloudWatchFilter", + "entityType": "Resource", + "resourceType": "AWS::Logs::MetricFilter" + }, + "propertyPath": "Properties.MetricTransformations.0.MetricValue", + "category": "Best Practice", + "startLine": 1657, + "startColumn": 13, + "endLine": 1657, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", + "entity": { + "logicalId": "IAMRootActivityCloudWatchMetric", + "entityType": "Resource", + "resourceType": "AWS::Logs::MetricFilter" + }, + "propertyPath": "Properties.MetricTransformations.0.MetricValue", + "category": "Best Practice", + "startLine": 1695, + "startColumn": 13, + "endLine": 1695, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConsoleSigninWithoutMfaCloudWatchMetric", + "entityType": "Resource", + "resourceType": "AWS::Logs::MetricFilter" + }, + "propertyPath": "Properties.MetricTransformations.0.MetricValue", + "category": "Best Practice", + "startLine": 1733, + "startColumn": 13, + "endLine": 1733, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", + "entity": { + "logicalId": "ConsoleLoginFailureCloudWatchMetric", + "entityType": "Resource", + "resourceType": "AWS::Logs::MetricFilter" + }, + "propertyPath": "Properties.MetricTransformations.0.MetricValue", + "category": "Best Practice", + "startLine": 1770, + "startColumn": 13, + "endLine": 1770, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", + "entity": { + "logicalId": "KMSCustomerKeyDeletionCloudWatchMetric", + "entityType": "Resource", + "resourceType": "AWS::Logs::MetricFilter" + }, + "propertyPath": "Properties.MetricTransformations.0.MetricValue", + "category": "Best Practice", + "startLine": 1807, + "startColumn": 13, + "endLine": 1807, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "1 is not of type 'string' - automatically coerced (number to string)", + "source": "CFN_LINT", + "entity": { + "logicalId": "BillingChangesCloudWatchFilter", + "entityType": "Resource", + "resourceType": "AWS::Logs::MetricFilter" + }, + "propertyPath": "Properties.MetricTransformations.0.MetricValue", + "category": "Best Practice", + "startLine": 2197, + "startColumn": 13, + "endLine": 2197, + "endColumn": 24, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FunctiontForEvaluateCisBenchmarkingPreconditions", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 124, + "startColumn": 9, + "endLine": 124, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigRuleForIamPasswordPolicy", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "Properties.ConfigRuleName", + "category": "Best Practice", + "startLine": 202, + "startColumn": 9, + "endLine": 202, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionForEvaluateRootAccountRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 231, + "startColumn": 9, + "endLine": 231, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "EvaluateRootAccountFunctionPermission", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 317, + "startColumn": 9, + "endLine": 317, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FunctionForEvaluateRootAccountRule.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "EvaluateRootAccountFunctionPermission", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 318, + "startColumn": 9, + "endLine": 318, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "EvaluateRootAccountFunctionPermission", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 319, + "startColumn": 9, + "endLine": 319, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigRuleForEvaluateRootAccount", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "Properties.ConfigRuleName", + "category": "Best Practice", + "startLine": 328, + "startColumn": 9, + "endLine": 328, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigRuleForRequiredTags", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "Properties.ConfigRuleName", + "category": "Best Practice", + "startLine": 342, + "startColumn": 9, + "endLine": 342, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigRuleForEncryptedVolumes", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "Properties.ConfigRuleName", + "category": "Best Practice", + "startLine": 373, + "startColumn": 9, + "endLine": 373, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigRuleForRestrictedSsh", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "Properties.ConfigRuleName", + "category": "Best Practice", + "startLine": 389, + "startColumn": 9, + "endLine": 389, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigRuleForUnrestrictedPorts", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "Properties.ConfigRuleName", + "category": "Best Practice", + "startLine": 405, + "startColumn": 9, + "endLine": 405, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionForVpcFlowLogRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 425, + "startColumn": 9, + "endLine": 425, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallVpcFlowLogLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 488, + "startColumn": 9, + "endLine": 488, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FunctionForVpcFlowLogRule.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallVpcFlowLogLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 489, + "startColumn": 9, + "endLine": 489, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallVpcFlowLogLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 490, + "startColumn": 9, + "endLine": 490, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionForVpcDefaultSecurityGroupsRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 501, + "startColumn": 9, + "endLine": 501, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallVpcDefaultSecurityGroupsLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 558, + "startColumn": 9, + "endLine": 558, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FunctionForVpcDefaultSecurityGroupsRule.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallVpcDefaultSecurityGroupsLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 559, + "startColumn": 9, + "endLine": 559, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallVpcDefaultSecurityGroupsLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 560, + "startColumn": 9, + "endLine": 560, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigRuleForVpcDefaultSecurityGroupss", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "Properties.ConfigRuleName", + "category": "Best Practice", + "startLine": 569, + "startColumn": 9, + "endLine": 569, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigRuleForVpcFlowLogs", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "Properties.ConfigRuleName", + "category": "Best Practice", + "startLine": 588, + "startColumn": 9, + "endLine": 588, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionForRoleForMfaOnUsersRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 610, + "startColumn": 9, + "endLine": 610, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallMfaForUsersLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 673, + "startColumn": 9, + "endLine": 673, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FunctionForRoleForMfaOnUsersRule.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallMfaForUsersLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 674, + "startColumn": 9, + "endLine": 674, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallMfaForUsersLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 675, + "startColumn": 9, + "endLine": 675, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigRuleForMfaForUsers", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "Properties.ConfigRuleName", + "category": "Best Practice", + "startLine": 681, + "startColumn": 9, + "endLine": 681, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionForEvaluatePolicyPermissionsRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 703, + "startColumn": 9, + "endLine": 703, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallEvaluatePolicyPermissionsLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 767, + "startColumn": 9, + "endLine": 767, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FunctionForEvaluatePolicyPermissionsRule.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallEvaluatePolicyPermissionsLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 768, + "startColumn": 9, + "endLine": 768, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallEvaluatePolicyPermissionsLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 769, + "startColumn": 9, + "endLine": 769, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigRuleForEvaluatePolicyPermissions", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "Properties.ConfigRuleName", + "category": "Best Practice", + "startLine": 777, + "startColumn": 9, + "endLine": 777, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionForEvaluateUserPolicyAssociationRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 799, + "startColumn": 9, + "endLine": 799, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallEvaluateUserPolicyAssociationLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 857, + "startColumn": 9, + "endLine": 857, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FunctionForEvaluateUserPolicyAssociationRule.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallEvaluateUserPolicyAssociationLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 858, + "startColumn": 9, + "endLine": 858, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallEvaluateUserPolicyAssociationLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 859, + "startColumn": 9, + "endLine": 859, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigRuleForEvaluateUserPolicyAssociations", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "Properties.ConfigRuleName", + "category": "Best Practice", + "startLine": 867, + "startColumn": 9, + "endLine": 867, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionForEvaluateCloudTrailRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 890, + "startColumn": 9, + "endLine": 890, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 973, + "startColumn": 9, + "endLine": 973, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FunctionForEvaluateCloudTrailRule.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 974, + "startColumn": 9, + "endLine": 974, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 975, + "startColumn": 9, + "endLine": 975, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigRuleForEvaluateCloudTrail", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "Properties.ConfigRuleName", + "category": "Best Practice", + "startLine": 983, + "startColumn": 9, + "endLine": 983, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionForEvaluateCloudTrailBucketRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 1003, + "startColumn": 9, + "endLine": 1003, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallEvaluateCloudTrailBucketLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 1089, + "startColumn": 9, + "endLine": 1089, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FunctionForEvaluateCloudTrailBucketRule.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallEvaluateCloudTrailBucketLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 1090, + "startColumn": 9, + "endLine": 1090, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallEvaluateCloudTrailBucketLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 1091, + "startColumn": 9, + "endLine": 1091, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigRuleForEvaluateCloudTrailBucket", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "Properties.ConfigRuleName", + "category": "Best Practice", + "startLine": 1099, + "startColumn": 9, + "endLine": 1099, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionForEvaluateCloudTrailLogIntegrityRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 1120, + "startColumn": 9, + "endLine": 1120, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLogIntegrityLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 1186, + "startColumn": 9, + "endLine": 1186, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FunctionForEvaluateCloudTrailLogIntegrityRule.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLogIntegrityLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 1187, + "startColumn": 9, + "endLine": 1187, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallEvaluateCloudTrailLogIntegrityLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 1188, + "startColumn": 9, + "endLine": 1188, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigRuleForEvaluateCloudTrailLogIntegrity", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "Properties.ConfigRuleName", + "category": "Best Practice", + "startLine": 1197, + "startColumn": 9, + "endLine": 1197, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionForInstanceRoleUseRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 1217, + "startColumn": 9, + "endLine": 1217, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallInstanceRoleUseLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 1268, + "startColumn": 9, + "endLine": 1268, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FunctionForInstanceRoleUseRule.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallInstanceRoleUseLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 1269, + "startColumn": 9, + "endLine": 1269, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallInstanceRoleUseLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 1270, + "startColumn": 9, + "endLine": 1270, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigRuleForInstanceRoleUses", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "Properties.ConfigRuleName", + "category": "Best Practice", + "startLine": 1279, + "startColumn": 9, + "endLine": 1279, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionForEvaluateKeyRotationRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 1302, + "startColumn": 9, + "endLine": 1302, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallEvaluateKeyRotationLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 1365, + "startColumn": 9, + "endLine": 1365, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FunctionForEvaluateKeyRotationRule.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallEvaluateKeyRotationLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 1366, + "startColumn": 9, + "endLine": 1366, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallEvaluateKeyRotationLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 1367, + "startColumn": 9, + "endLine": 1367, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigRuleForEvaluateKeyRotations", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "Properties.ConfigRuleName", + "category": "Best Practice", + "startLine": 1376, + "startColumn": 9, + "endLine": 1376, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionForEvaluateConfigInAllRegionsRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 1398, + "startColumn": 9, + "endLine": 1398, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "EvaluateConfigInAllRegionsFunctionPermission", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 1472, + "startColumn": 9, + "endLine": 1472, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FunctionForEvaluateConfigInAllRegionsRule.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "EvaluateConfigInAllRegionsFunctionPermission", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 1473, + "startColumn": 9, + "endLine": 1473, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "EvaluateConfigInAllRegionsFunctionPermission", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 1474, + "startColumn": 9, + "endLine": 1474, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigRuleForEvaluateConfigInAllRegions", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "Properties.ConfigRuleName", + "category": "Best Practice", + "startLine": 1481, + "startColumn": 9, + "endLine": 1481, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionForVpcPeeringRouteTablesRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 1503, + "startColumn": 9, + "endLine": 1503, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallVpcPeeringRouteTablesLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 1557, + "startColumn": 9, + "endLine": 1557, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FunctionForVpcPeeringRouteTablesRule.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallVpcPeeringRouteTablesLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 1558, + "startColumn": 9, + "endLine": 1558, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigPermissionToCallVpcPeeringRouteTablesLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 1559, + "startColumn": 9, + "endLine": 1559, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigRuleForVpcPeeringRouteTabless", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "Properties.ConfigRuleName", + "category": "Best Practice", + "startLine": 1568, + "startColumn": 9, + "endLine": 1568, + "endColumn": 23, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'TopicName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SnsTopicForCloudWatchEvents", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.TopicName", + "category": "Best Practice", + "startLine": 1589, + "startColumn": 9, + "endLine": 1589, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sns", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "GetCloudTrailCloudWatchLog", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 1603, + "startColumn": 9, + "endLine": 1603, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "UnauthorizedAttemptsCloudWatchFilter", + "entityType": "Resource", + "resourceType": "AWS::Logs::MetricFilter" + }, + "propertyPath": "Properties.LogGroupName", + "category": "Best Practice", + "startLine": 1651, + "startColumn": 9, + "endLine": 1651, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt ResourceForGetCloudTrailCloudWatchLog.LogName", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "UnauthorizedAttemptCloudWatchAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.AlarmName", + "category": "Best Practice", + "startLine": 1662, + "startColumn": 9, + "endLine": 1662, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "IAMRootActivityCloudWatchMetric", + "entityType": "Resource", + "resourceType": "AWS::Logs::MetricFilter" + }, + "propertyPath": "Properties.LogGroupName", + "category": "Best Practice", + "startLine": 1685, + "startColumn": 9, + "endLine": 1685, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt ResourceForGetCloudTrailCloudWatchLog.LogName", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "IAMRootActivityCloudWatchAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.AlarmName", + "category": "Best Practice", + "startLine": 1700, + "startColumn": 9, + "endLine": 1700, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConsoleSigninWithoutMfaCloudWatchMetric", + "entityType": "Resource", + "resourceType": "AWS::Logs::MetricFilter" + }, + "propertyPath": "Properties.LogGroupName", + "category": "Best Practice", + "startLine": 1722, + "startColumn": 9, + "endLine": 1722, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt ResourceForGetCloudTrailCloudWatchLog.LogName", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConsoleSigninWithoutMFACloudWatchAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.AlarmName", + "category": "Best Practice", + "startLine": 1738, + "startColumn": 9, + "endLine": 1738, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConsoleLoginFailureCloudWatchMetric", + "entityType": "Resource", + "resourceType": "AWS::Logs::MetricFilter" + }, + "propertyPath": "Properties.LogGroupName", + "category": "Best Practice", + "startLine": 1761, + "startColumn": 9, + "endLine": 1761, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt ResourceForGetCloudTrailCloudWatchLog.LogName", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ConsoleLoginFailureCloudWatchAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.AlarmName", + "category": "Best Practice", + "startLine": 1775, + "startColumn": 9, + "endLine": 1775, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "KMSCustomerKeyDeletionCloudWatchMetric", + "entityType": "Resource", + "resourceType": "AWS::Logs::MetricFilter" + }, + "propertyPath": "Properties.LogGroupName", + "category": "Best Practice", + "startLine": 1798, + "startColumn": 9, + "endLine": 1798, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt ResourceForGetCloudTrailCloudWatchLog.LogName", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "KMSCustomerKeyDeletionCloudWatchAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.AlarmName", + "category": "Best Practice", + "startLine": 1812, + "startColumn": 9, + "endLine": 1812, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionToFormatCloudWatchEvent", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 1860, + "startColumn": 9, + "endLine": 1860, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "LambdaPermissionForCloudTrailCloudWatchEventRules", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 1897, + "startColumn": 9, + "endLine": 1897, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FunctionToFormatCloudWatchEvent.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "LambdaPermissionForCloudTrailCloudWatchEventRules", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 1898, + "startColumn": 9, + "endLine": 1898, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "LambdaPermissionForCloudTrailCloudWatchEventRules", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 1899, + "startColumn": 9, + "endLine": 1899, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "DetectS3BucketPolicyChanges", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 1907, + "startColumn": 9, + "endLine": 1907, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "DetectConfigChanges", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 1938, + "startColumn": 9, + "endLine": 1938, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "KmsKeyUseCloudWatchEventRule", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 1963, + "startColumn": 9, + "endLine": 1963, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "CloudTrailCloudWatchEventRule", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 1985, + "startColumn": 9, + "endLine": 1985, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "IamPolicyChangesCloudWatchEventRule", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 2008, + "startColumn": 9, + "endLine": 2008, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "BillingChangeCloudWatchEventRule", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 2046, + "startColumn": 9, + "endLine": 2046, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Ec2TerminationCloudWatchEventRule", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 2070, + "startColumn": 9, + "endLine": 2070, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "SecurityGroupChangesCloudWatchEventRule", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 2093, + "startColumn": 9, + "endLine": 2093, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "NetworkAclChangesCloudWatchEventRule", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 2121, + "startColumn": 9, + "endLine": 2121, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "NetworkChangeCloudWatchEventRule", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 2151, + "startColumn": 9, + "endLine": 2151, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'LogGroupName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "BillingChangesCloudWatchFilter", + "entityType": "Resource", + "resourceType": "AWS::Logs::MetricFilter" + }, + "propertyPath": "Properties.LogGroupName", + "category": "Best Practice", + "startLine": 2187, + "startColumn": 9, + "endLine": 2187, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-logs.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt ResourceForGetCloudTrailCloudWatchLog.LogName", + "extra": { + "replacement_strategy": "delete_then_create" + } + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'AlarmName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "BillingChangesCloudWatchAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.AlarmName", + "category": "Best Practice", + "startLine": 2202, + "startColumn": 9, + "endLine": 2202, + "endColumn": 18, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudwatch.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionToDisableUnusedCredentials", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 2255, + "startColumn": 9, + "endLine": 2255, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "LambdaPermissionForDisableUnusedCredentials", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 2342, + "startColumn": 9, + "endLine": 2342, + "endColumn": 21, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt FunctionToDisableUnusedCredentials.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "LambdaPermissionForDisableUnusedCredentials", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 2343, + "startColumn": 9, + "endLine": 2343, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "LambdaPermissionForDisableUnusedCredentials", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 2344, + "startColumn": 9, + "endLine": 2344, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Name' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "ScheduledRuleForDisableUnusedCredentials", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Name", + "category": "Best Practice", + "startLine": 2349, + "startColumn": 9, + "endLine": 2349, + "endColumn": 13, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'MasterConfigRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "MasterConfigRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 78, + "startColumn": 7, + "endLine": 78, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctiontForEvaluateCisBenchmarkingPreconditions' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctiontForEvaluateCisBenchmarkingPreconditions", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 123, + "startColumn": 7, + "endLine": 123, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionForEvaluateRootAccountRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionForEvaluateRootAccountRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 230, + "startColumn": 7, + "endLine": 230, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionForVpcFlowLogRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionForVpcFlowLogRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 424, + "startColumn": 7, + "endLine": 424, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionForVpcDefaultSecurityGroupsRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionForVpcDefaultSecurityGroupsRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 500, + "startColumn": 7, + "endLine": 500, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionForRoleForMfaOnUsersRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionForRoleForMfaOnUsersRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 609, + "startColumn": 7, + "endLine": 609, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionForEvaluatePolicyPermissionsRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionForEvaluatePolicyPermissionsRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 702, + "startColumn": 7, + "endLine": 702, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionForEvaluateUserPolicyAssociationRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionForEvaluateUserPolicyAssociationRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 798, + "startColumn": 7, + "endLine": 798, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionForEvaluateCloudTrailRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionForEvaluateCloudTrailRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 889, + "startColumn": 7, + "endLine": 889, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionForEvaluateCloudTrailBucketRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionForEvaluateCloudTrailBucketRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1002, + "startColumn": 7, + "endLine": 1002, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionForEvaluateCloudTrailLogIntegrityRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionForEvaluateCloudTrailLogIntegrityRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1119, + "startColumn": 7, + "endLine": 1119, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionForInstanceRoleUseRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionForInstanceRoleUseRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1216, + "startColumn": 7, + "endLine": 1216, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionForEvaluateKeyRotationRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionForEvaluateKeyRotationRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1301, + "startColumn": 7, + "endLine": 1301, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionForEvaluateConfigInAllRegionsRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionForEvaluateConfigInAllRegionsRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1397, + "startColumn": 7, + "endLine": 1397, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionForVpcPeeringRouteTablesRule' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionForVpcPeeringRouteTablesRule", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1502, + "startColumn": 7, + "endLine": 1502, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SnsTopicForCloudWatchEvents' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SnsTopicForCloudWatchEvents", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1588, + "startColumn": 7, + "endLine": 1588, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'GetCloudTrailCloudWatchLog' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "GetCloudTrailCloudWatchLog", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1602, + "startColumn": 7, + "endLine": 1602, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'UnauthorizedAttemptCloudWatchAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "UnauthorizedAttemptCloudWatchAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1661, + "startColumn": 7, + "endLine": 1661, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'IAMRootActivityCloudWatchAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "IAMRootActivityCloudWatchAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1699, + "startColumn": 7, + "endLine": 1699, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ConsoleSigninWithoutMFACloudWatchAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ConsoleSigninWithoutMFACloudWatchAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1737, + "startColumn": 7, + "endLine": 1737, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ConsoleLoginFailureCloudWatchAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ConsoleLoginFailureCloudWatchAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1774, + "startColumn": 7, + "endLine": 1774, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'KMSCustomerKeyDeletionCloudWatchAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "KMSCustomerKeyDeletionCloudWatchAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1811, + "startColumn": 7, + "endLine": 1811, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'RoleForCloudWatchEvents' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "RoleForCloudWatchEvents", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1831, + "startColumn": 7, + "endLine": 1831, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionToFormatCloudWatchEvent' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionToFormatCloudWatchEvent", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1859, + "startColumn": 7, + "endLine": 1859, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DetectS3BucketPolicyChanges' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "DetectS3BucketPolicyChanges", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1906, + "startColumn": 7, + "endLine": 1906, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'DetectConfigChanges' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "DetectConfigChanges", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1937, + "startColumn": 7, + "endLine": 1937, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'KmsKeyUseCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "KmsKeyUseCloudWatchEventRule", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1962, + "startColumn": 7, + "endLine": 1962, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CloudTrailCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "CloudTrailCloudWatchEventRule", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 1984, + "startColumn": 7, + "endLine": 1984, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'IamPolicyChangesCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "IamPolicyChangesCloudWatchEventRule", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 2007, + "startColumn": 7, + "endLine": 2007, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BillingChangeCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "BillingChangeCloudWatchEventRule", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 2045, + "startColumn": 7, + "endLine": 2045, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Ec2TerminationCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Ec2TerminationCloudWatchEventRule", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 2069, + "startColumn": 7, + "endLine": 2069, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SecurityGroupChangesCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SecurityGroupChangesCloudWatchEventRule", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 2092, + "startColumn": 7, + "endLine": 2092, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'NetworkAclChangesCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "NetworkAclChangesCloudWatchEventRule", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 2120, + "startColumn": 7, + "endLine": 2120, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'NetworkChangeCloudWatchEventRule' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "NetworkChangeCloudWatchEventRule", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 2150, + "startColumn": 7, + "endLine": 2150, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'BillingChangesCloudWatchAlarm' of type 'AWS::CloudWatch::Alarm' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "BillingChangesCloudWatchAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 2201, + "startColumn": 7, + "endLine": 2201, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'RoleForDisableUnusedCredentialsFunction' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "RoleForDisableUnusedCredentialsFunction", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 2221, + "startColumn": 7, + "endLine": 2221, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionToDisableUnusedCredentials' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionToDisableUnusedCredentials", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 2254, + "startColumn": 7, + "endLine": 2254, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ScheduledRuleForDisableUnusedCredentials' of type 'AWS::Events::Rule' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ScheduledRuleForDisableUnusedCredentials", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 2348, + "startColumn": 7, + "endLine": 2348, + "endColumn": 17, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "quickstart/config-rules.json": { + "filePath": "quickstart/config-rules.json", + "status": "OK", + "metadata": { + "resourcesScanned": 12, + "counts": { + "fatal": 0, + "errors": 2, + "warnings": 5, + "informational": 15, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs' was deprecated on '2016-08-30'. Creation was disabled on '2016-09-30', and updates were disabled on '2016-10-31'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAMIComplianceFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 194, + "startColumn": 5, + "endLine": 194, + "endColumn": 13, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs", + "lifecycle": "end-of-life" + } + }, + { + "ruleId": "E2533", + "severity": "ERROR", + "message": "Runtime 'nodejs' was deprecated on '2016-08-30'. Creation was disabled on '2016-09-30', and updates were disabled on '2016-10-31'. Please consider updating to 'nodejs24.x'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCloudTrailValidationFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Runtime", + "category": "Deprecation", + "startLine": 291, + "startColumn": 5, + "endLine": 291, + "endColumn": 13, + "ruleDescription": "Check if Lambda Function Runtimes are updatable", + "phase": "SCHEMA", + "context": { + "actualValue": "nodejs", + "lifecycle": "end-of-life" + } + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rConfigRulesLambdaRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAMIComplianceFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 141, + "startColumn": 4, + "endLine": 141, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rConfigRulesLambdaRole' dependency already enforced by a 'GetAtt' at 'Properties.Role'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCloudTrailValidationFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 239, + "startColumn": 4, + "endLine": 239, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W8003", + "severity": "WARN", + "message": "Fn::Equals in condition 'cApprovedAMIsRule' will always return True", + "source": "CFN_LINT", + "entity": { + "logicalId": "cApprovedAMIsRule", + "entityType": "Condition" + }, + "propertyPath": "Conditions/cApprovedAMIsRule", + "category": "Best Practice", + "startLine": 38, + "startColumn": 3, + "endLine": 38, + "endColumn": 21, + "ruleDescription": "Fn::Equals will always return true or false", + "phase": "PARSE" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'30' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rAMIComplianceFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Timeout", + "category": "Best Practice", + "startLine": 195, + "startColumn": 5, + "endLine": 195, + "endColumn": 13, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "W9003", + "severity": "WARN", + "message": "'30' is not of type 'integer' - automatically coerced (string to integer)", + "source": "CFN_LINT", + "entity": { + "logicalId": "rCloudTrailValidationFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Timeout", + "category": "Best Practice", + "startLine": 292, + "startColumn": 5, + "endLine": 292, + "endColumn": 13, + "ruleDescription": "Property type coercion warning", + "phase": "SCHEMA" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rConfigRuleForSSH", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "Properties.ConfigRuleName", + "category": "Best Practice", + "startLine": 48, + "startColumn": 5, + "endLine": 48, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rConfigRuleForRequiredTags", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "Properties.ConfigRuleName", + "category": "Best Practice", + "startLine": 63, + "startColumn": 5, + "endLine": 63, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rConfigRuleForUnrestrictedPorts", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "Properties.ConfigRuleName", + "category": "Best Practice", + "startLine": 83, + "startColumn": 5, + "endLine": 83, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rConfigRulesLambdaRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 110, + "startColumn": 5, + "endLine": 110, + "endColumn": 10, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-iam.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rConfigRulesLambdaProfile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 133, + "startColumn": 5, + "endLine": 133, + "endColumn": 10, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rConfigRuleForAMICompliance", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "Properties.ConfigRuleName", + "category": "Best Practice", + "startLine": 205, + "startColumn": 5, + "endLine": 205, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rConfigPermissionToCallLambdaAMICompliance", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 230, + "startColumn": 5, + "endLine": 230, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt rAMIComplianceFunction.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rConfigPermissionToCallLambdaAMICompliance", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 233, + "startColumn": 5, + "endLine": 233, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rConfigPermissionToCallLambdaAMICompliance", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 234, + "startColumn": 5, + "endLine": 234, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'ConfigRuleName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rConfigRuleForCloudTrail", + "entityType": "Resource", + "resourceType": "AWS::Config::ConfigRule" + }, + "propertyPath": "Properties.ConfigRuleName", + "category": "Best Practice", + "startLine": 301, + "startColumn": 5, + "endLine": 301, + "endColumn": 20, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-config.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rConfigPermissionToCallLambdaCloudTrail", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 322, + "startColumn": 5, + "endLine": 322, + "endColumn": 18, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "GetAtt rCloudTrailValidationFunction.Arn" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Action' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rConfigPermissionToCallLambdaCloudTrail", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Action", + "category": "Best Practice", + "startLine": 325, + "startColumn": 5, + "endLine": 325, + "endColumn": 12, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Principal' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rConfigPermissionToCallLambdaCloudTrail", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Properties.Principal", + "category": "Best Practice", + "startLine": 326, + "startColumn": 5, + "endLine": 326, + "endColumn": 15, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rConfigRulesLambdaRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rConfigRulesLambdaRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 99, + "startColumn": 4, + "endLine": 99, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rCloudTrailValidationFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rCloudTrailValidationFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 240, + "startColumn": 4, + "endLine": 240, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "quickstart/iam.json": { + "filePath": "quickstart/iam.json", + "status": "OK", + "metadata": { + "resourcesScanned": 18, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 5, + "informational": 8, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W2512", + "severity": "WARN", + "message": "IAM policy uses NotAction which grants all actions except those listed - consider using Action instead", + "source": "ENGINE", + "entity": { + "logicalId": "rSysAdminPolicy", + "entityType": "Resource", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "category": "Security", + "startLine": 61, + "startColumn": 3, + "endLine": 61, + "endColumn": 19, + "ruleDescription": "IAM policy with NotAction", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rSysAdminRole' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rSysAdminProfile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 45, + "startColumn": 4, + "endLine": 45, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rIAMAdminRole' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rIAMAdminProfile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 139, + "startColumn": 4, + "endLine": 139, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rInstanceOpsRole' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rInstanceOpsProfile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 211, + "startColumn": 4, + "endLine": 211, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "W3005", + "severity": "WARN", + "message": "'rReadOnlyAdminRole' dependency already enforced by a 'Ref' at 'Properties.Roles.0'", + "source": "CFN_LINT", + "entity": { + "logicalId": "rReadOnlyAdminProfile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "DependsOn", + "suggestedFix": "Remove the DependsOn entry", + "category": "Best Practice", + "startLine": 324, + "startColumn": 4, + "endLine": 324, + "endColumn": 14, + "ruleDescription": "Check obsolete DependsOn configuration for Resources", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rSysAdminProfile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 47, + "startColumn": 5, + "endLine": 47, + "endColumn": 10, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rIAMAdminProfile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 141, + "startColumn": 5, + "endLine": 141, + "endColumn": 10, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rInstanceOpsProfile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 213, + "startColumn": 5, + "endLine": 213, + "endColumn": 10, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Path' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "rReadOnlyAdminProfile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "Properties.Path", + "category": "Best Practice", + "startLine": 326, + "startColumn": 5, + "endLine": 326, + "endColumn": 10, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rSysAdminRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rSysAdminRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 24, + "startColumn": 4, + "endLine": 24, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rIAMAdminRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rIAMAdminRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 119, + "startColumn": 4, + "endLine": 119, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rInstanceOpsRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rInstanceOpsRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 191, + "startColumn": 4, + "endLine": 191, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'rReadOnlyAdminRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "rReadOnlyAdminRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 304, + "startColumn": 4, + "endLine": 304, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, "quickstart/nat-instance.json": { "filePath": "quickstart/nat-instance.json", "status": "OK", @@ -30286,6 +37422,260 @@ } ] }, + "security/conditional_scenario_correctness.yaml": { + "filePath": "security/conditional_scenario_correctness.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 7, + "counts": { + "fatal": 1, + "errors": 1, + "warnings": 3, + "informational": 6, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3037", + "severity": "FATAL", + "message": "Array items are not unique", + "source": "SCHEMA", + "entity": { + "logicalId": "NestedUniqueFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "category": "Schema", + "startLine": 128, + "startColumn": 7, + "endLine": 128, + "endColumn": 11, + "conditionScenario": { + "Enabled02": false + }, + "ruleDescription": "Array items not unique", + "phase": "SCHEMA", + "context": { + "actualValue": [ + { + "Key": "Stage", + "Value": "prod" + }, + { + "Key": "Stage", + "Value": "dev" + } + ] + } + }, + { + "ruleId": "E3023", + "severity": "ERROR", + "message": "'not-an-address' is not a valid IPv4 address for record type 'A'", + "source": "CFN_LINT", + "entity": { + "logicalId": "Record", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.ResourceRecords.0", + "category": "Resource", + "startLine": 159, + "startColumn": 81, + "endLine": 159, + "endColumn": 82, + "ruleDescription": "Validate Route53 RecordSets", + "phase": "LINT" + }, + { + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'Enabled01' to False from current status True", + "source": "CFN_LINT", + "entity": { + "logicalId": "RepeatedConditionFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Architectures.1.Fn::If.1.Fn::If.2", + "category": "Best Practice", + "startLine": 120, + "startColumn": 62, + "endLine": 120, + "endColumn": 63, + "ruleDescription": "Check Fn::If has a path that cannot be reached", + "phase": "LINT" + }, + { + "ruleId": "W1028", + "severity": "WARN", + "message": "['Fn::If', 2] is not reachable. When setting condition 'Enabled04' to False from current status True", + "source": "CFN_LINT", + "entity": { + "logicalId": "TaggedTopic", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Fn::If.Fn::If.1.Tags.Fn::If.2", + "category": "Best Practice", + "startLine": 142, + "startColumn": 5, + "endLine": 142, + "endColumn": 11, + "ruleDescription": "Check Fn::If has a path that cannot be reached", + "phase": "LINT" + }, + { + "ruleId": "W2530", + "severity": "WARN", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", + "source": "CFN_LINT", + "entity": { + "logicalId": "SnapStartFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", + "category": "Best Practice", + "startLine": 139, + "startColumn": 54, + "endLine": 139, + "endColumn": 61, + "ruleDescription": "Validate that SnapStart is properly configured", + "phase": "LINT" + }, + { + "ruleId": "I2530", + "severity": "INFO", + "message": "Runtime 'java21' should consider using SnapStart for improved performance", + "source": "CFN_LINT", + "entity": { + "logicalId": "SnapStartFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add SnapStart with ApplyOn set to 'PublishedVersions'", + "category": "Best Practice", + "startLine": 139, + "startColumn": 7, + "endLine": 139, + "endColumn": 16, + "documentationUrl": "https://docs.aws.amazon.com/lambda/latest/dg/snapstart.html", + "ruleDescription": "Validate that SnapStart is configured for >= Java11 runtimes", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'HostedZoneName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Record", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Properties.HostedZoneName", + "category": "Best Practice", + "startLine": 154, + "startColumn": 7, + "endLine": 154, + "endColumn": 21, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recordset", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SharedRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SharedRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 94, + "startColumn": 5, + "endLine": 94, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'ComplementaryArchitectureFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "ComplementaryArchitectureFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 103, + "startColumn": 5, + "endLine": 103, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'RepeatedConditionFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "RepeatedConditionFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 113, + "startColumn": 5, + "endLine": 113, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'SnapStartFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "SnapStartFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 134, + "startColumn": 5, + "endLine": 134, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, "security/cross_reference_fanout.yaml": { "filePath": "security/cross_reference_fanout.yaml", "status": "OK", @@ -62685,6 +70075,343 @@ } ] }, + "security/independent_conditions_list_items.yaml": { + "filePath": "security/independent_conditions_list_items.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'Type' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Analyzer", + "entityType": "Resource", + "resourceType": "AWS::AccessAnalyzer::Analyzer" + }, + "propertyPath": "Properties.Type", + "category": "Best Practice", + "startLine": 83, + "startColumn": 7, + "endLine": 83, + "endColumn": 11, + "documentationUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-accessanalyzer.git", + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only" + } + } + ] + }, + "security/independent_conditions_object_keys.yaml": { + "filePath": "security/independent_conditions_object_keys.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 0, + "informational": 2, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 74, + "startColumn": 5, + "endLine": 74, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Function' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Function", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 83, + "startColumn": 5, + "endLine": 83, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "security/independent_conditions_properties.yaml": { + "filePath": "security/independent_conditions_properties.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 2, + "errors": 0, + "warnings": 2, + "informational": 3, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3031", + "severity": "FATAL", + "message": "'' does not match pattern '^([a-zA-Z0-9_-]{1,64}|arn:[a-zA-Z0-9-]+:lambda:[a-zA-Z0-9-]+:\\d{12}:function:[a-zA-Z0-9_-]{1,64})$'", + "source": "SCHEMA", + "entity": { + "logicalId": "Function", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.FunctionName", + "category": "Schema", + "startLine": 100, + "startColumn": 7, + "endLine": 100, + "endColumn": 19, + "conditionScenario": { + "Enabled12": true + }, + "ruleDescription": "Value does not match pattern", + "phase": "SCHEMA", + "context": { + "actualValue": "", + "expectedConstraint": "^([a-zA-Z0-9_-]{1,64}|arn:[a-zA-Z0-9-]+:lambda:[a-zA-Z0-9-]+:\\d{12}:function:[a-zA-Z0-9_-]{1,64})$", + "resolutionSource": "Fn::If on condition 'Enabled12'" + } + }, + { + "ruleId": "F3033", + "severity": "FATAL", + "message": "length 0 is below minimum 1", + "source": "SCHEMA", + "entity": { + "logicalId": "Function", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.FunctionName", + "category": "Schema", + "startLine": 100, + "startColumn": 7, + "endLine": 100, + "endColumn": 19, + "conditionScenario": { + "Enabled12": true + }, + "ruleDescription": "String length out of bounds", + "phase": "SCHEMA", + "context": { + "actualValue": "", + "resolutionSource": "Fn::If on condition 'Enabled12'", + "extra": { + "actual_length": 0, + "min_length": 1 + } + } + }, + { + "ruleId": "W2530", + "severity": "WARN", + "message": "SnapStart is enabled but no AWS::Lambda::Version resource is attached", + "source": "CFN_LINT", + "entity": { + "logicalId": "Function", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.SnapStart.ApplyOn", + "suggestedFix": "Add an AWS::Lambda::Version resource that references this function", + "category": "Best Practice", + "startLine": 102, + "startColumn": 35, + "endLine": 102, + "endColumn": 42, + "ruleDescription": "Validate that SnapStart is properly configured", + "phase": "LINT" + }, + { + "ruleId": "W9002", + "severity": "WARN", + "message": "Property 'KmsKeyArn' has a hardcoded ARN - use Ref, GetAtt, or a parameter instead", + "source": "ENGINE", + "entity": { + "logicalId": "Function", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.KmsKeyArn", + "category": "Best Practice", + "startLine": 92, + "startColumn": 7, + "endLine": 92, + "endColumn": 16, + "ruleDescription": "Hardcoded ARN property", + "phase": "LINT" + }, + { + "ruleId": "I9001", + "severity": "INFO", + "message": "Property 'FunctionName' is create-only; updating it will cause resource replacement", + "source": "ENGINE", + "entity": { + "logicalId": "Function", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.FunctionName", + "category": "Best Practice", + "startLine": 100, + "startColumn": 7, + "endLine": 100, + "endColumn": 19, + "ruleDescription": "Create-only property updated triggers resource replacement", + "phase": "SCHEMA", + "context": { + "lifecycle": "create-only", + "resolutionSource": "Fn::If on condition 'Enabled12'" + } + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'FunctionRole' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 74, + "startColumn": 5, + "endLine": 74, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Function' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Function", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 103, + "startColumn": 7, + "endLine": 103, + "endColumn": 11, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "security/independent_conditions_statements.yaml": { + "filePath": "security/independent_conditions_statements.yaml", + "status": "OK", + "metadata": { + "resourcesScanned": 1, + "counts": { + "fatal": 0, + "errors": 1, + "warnings": 0, + "informational": 1, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "E3510", + "severity": "ERROR", + "message": "[] is too short (minimum 1 item)", + "source": "CFN_LINT", + "entity": { + "logicalId": "Role", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Policies.0.PolicyDocument.Statement", + "category": "Resource", + "startLine": 85, + "startColumn": 13, + "endLine": 85, + "endColumn": 22, + "ruleDescription": "Validate identity based IAM policies", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Role' of type 'AWS::IAM::Role' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Role", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 74, + "startColumn": 5, + "endLine": 74, + "endColumn": 15, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, "security/many_conditions.yaml": { "filePath": "security/many_conditions.yaml", "status": "OK", @@ -147849,5 +155576,69 @@ "phase": "LINT" } ] + }, + "security/yaml_alias_expanded_depth.yaml": { + "filePath": "security/yaml_alias_expanded_depth.yaml", + "status": "ERROR", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F1101", + "severity": "FATAL", + "message": "Template exceeds the maximum structural nesting depth of 512 at line 12", + "source": "SCHEMA", + "category": "Structure", + "startLine": 12, + "startColumn": 83, + "endLine": 12, + "endColumn": 83, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" + } + ] + }, + "security/yaml_alias_expansion.yaml": { + "filePath": "security/yaml_alias_expansion.yaml", + "status": "ERROR", + "metadata": { + "resourcesScanned": 0, + "counts": { + "fatal": 1, + "errors": 0, + "warnings": 0, + "informational": 0, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F1101", + "severity": "FATAL", + "message": "Template exceeds the maximum YAML alias expansion of 1048576 nodes at line 12", + "source": "SCHEMA", + "category": "Structure", + "startLine": 12, + "startColumn": 20, + "endLine": 12, + "endColumn": 20, + "ruleDescription": "Invalid YAML/JSON syntax", + "phase": "PARSE" + } + ] } }